]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
bcb1a5d8c46ef6b837f582dc65e0d98c1f80507f
[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.3.7 (http://getbootstrap.com)
8 * Copyright 2011-2016 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
10 */
11 /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
12 html {
13 font-family: sans-serif;
14 -webkit-text-size-adjust: 100%;
15 -ms-text-size-adjust: 100%;
16 }
17 body {
18 margin: 0;
19 }
20 article,
21 aside,
22 details,
23 figcaption,
24 figure,
25 footer,
26 header,
27 hgroup,
28 main,
29 menu,
30 nav,
31 section,
32 summary {
33 display: block;
34 }
35 audio,
36 canvas,
37 progress,
38 video {
39 display: inline-block;
40 vertical-align: baseline;
41 }
42 audio:not([controls]) {
43 display: none;
44 height: 0;
45 }
46 [hidden],
47 template {
48 display: none;
49 }
50 a {
51 background-color: transparent;
52 }
53 a:active,
54 a:hover {
55 outline: 0;
56 }
57 abbr[title] {
58 border-bottom: 1px dotted;
59 }
60 b,
61 strong {
62 font-weight: bold;
63 }
64 dfn {
65 font-style: italic;
66 }
67 h1 {
68 margin: .67em 0;
69 font-size: 2em;
70 }
71 mark {
72 color: #000;
73 background: #ff0;
74 }
75 small {
76 font-size: 80%;
77 }
78 sub,
79 sup {
80 position: relative;
81 font-size: 75%;
82 line-height: 0;
83 vertical-align: baseline;
84 }
85 sup {
86 top: -.5em;
87 }
88 sub {
89 bottom: -.25em;
90 }
91 img {
92 border: 0;
93 }
94 svg:not(:root) {
95 overflow: hidden;
96 }
97 figure {
98 margin: 1em 40px;
99 }
100 hr {
101 height: 0;
102 -webkit-box-sizing: content-box;
103 -moz-box-sizing: content-box;
104 box-sizing: content-box;
105 }
106 pre {
107 overflow: auto;
108 }
109 code,
110 kbd,
111 pre,
112 samp {
113 font-family: monospace, monospace;
114 font-size: 1em;
115 }
116 button,
117 input,
118 optgroup,
119 select,
120 textarea {
121 margin: 0;
122 font: inherit;
123 color: inherit;
124 }
125 button {
126 overflow: visible;
127 }
128 button,
129 select {
130 text-transform: none;
131 }
132 button,
133 html input[type="button"],
134 input[type="reset"],
135 input[type="submit"] {
136 -webkit-appearance: button;
137 cursor: pointer;
138 }
139 button[disabled],
140 html input[disabled] {
141 cursor: default;
142 }
143 button::-moz-focus-inner,
144 input::-moz-focus-inner {
145 padding: 0;
146 border: 0;
147 }
148 input {
149 line-height: normal;
150 }
151 input[type="checkbox"],
152 input[type="radio"] {
153 -webkit-box-sizing: border-box;
154 -moz-box-sizing: border-box;
155 box-sizing: border-box;
156 padding: 0;
157 }
158 input[type="number"]::-webkit-inner-spin-button,
159 input[type="number"]::-webkit-outer-spin-button {
160 height: auto;
161 }
162 input[type="search"] {
163 -webkit-box-sizing: content-box;
164 -moz-box-sizing: content-box;
165 box-sizing: content-box;
166 -webkit-appearance: textfield;
167 }
168 input[type="search"]::-webkit-search-cancel-button,
169 input[type="search"]::-webkit-search-decoration {
170 -webkit-appearance: none;
171 }
172 fieldset {
173 padding: .35em .625em .75em;
174 margin: 0 2px;
175 border: 1px solid #c0c0c0;
176 }
177 legend {
178 padding: 0;
179 border: 0;
180 }
181 textarea {
182 overflow: auto;
183 }
184 optgroup {
185 font-weight: bold;
186 }
187 table {
188 border-spacing: 0;
189 border-collapse: collapse;
190 }
191 td,
192 th {
193 padding: 0;
194 }
195 /*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
196 @media print {
197 *,
198 *:before,
199 *:after {
200 color: #000 !important;
201 text-shadow: none !important;
202 background: transparent !important;
203 -webkit-box-shadow: none !important;
204 box-shadow: none !important;
205 }
206 a,
207 a:visited {
208 text-decoration: underline;
209 }
210 a[href]:after {
211 content: " (" attr(href) ")";
212 }
213 abbr[title]:after {
214 content: " (" attr(title) ")";
215 }
216 a[href^="#"]:after,
217 a[href^="javascript:"]:after {
218 content: "";
219 }
220 pre,
221 blockquote {
222 border: 1px solid #999;
223
224 page-break-inside: avoid;
225 }
226 thead {
227 display: table-header-group;
228 }
229 tr,
230 img {
231 page-break-inside: avoid;
232 }
233 img {
234 max-width: 100% !important;
235 }
236 p,
237 h2,
238 h3 {
239 orphans: 3;
240 widows: 3;
241 }
242 h2,
243 h3 {
244 page-break-after: avoid;
245 }
246 .navbar {
247 display: none;
248 }
249 .btn > .caret,
250 .dropup > .btn > .caret {
251 border-top-color: #000 !important;
252 }
253 .label {
254 border: 1px solid #000;
255 }
256 .table {
257 border-collapse: collapse !important;
258 }
259 .table td,
260 .table th {
261 background-color: #fff !important;
262 }
263 .table-bordered th,
264 .table-bordered td {
265 border: 1px solid #ddd !important;
266 }
267 }
268 @font-face {
269 font-family: 'Glyphicons Halflings';
270
271 src: url('../fonts/glyphicons-halflings-regular.eot');
272 src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), 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');
273 }
274 .glyphicon {
275 position: relative;
276 top: 1px;
277 display: inline-block;
278 font-family: 'Glyphicons Halflings';
279 font-style: normal;
280 font-weight: normal;
281 line-height: 1;
282
283 -webkit-font-smoothing: antialiased;
284 -moz-osx-font-smoothing: grayscale;
285 }
286 .glyphicon-asterisk:before {
287 content: "\002a";
288 }
289 .glyphicon-plus:before {
290 content: "\002b";
291 }
292 .glyphicon-euro:before,
293 .glyphicon-eur:before {
294 content: "\20ac";
295 }
296 .glyphicon-minus:before {
297 content: "\2212";
298 }
299 .glyphicon-cloud:before {
300 content: "\2601";
301 }
302 .glyphicon-envelope:before {
303 content: "\2709";
304 }
305 .glyphicon-pencil:before {
306 content: "\270f";
307 }
308 .glyphicon-glass:before {
309 content: "\e001";
310 }
311 .glyphicon-music:before {
312 content: "\e002";
313 }
314 .glyphicon-search:before {
315 content: "\e003";
316 }
317 .glyphicon-heart:before {
318 content: "\e005";
319 }
320 .glyphicon-star:before {
321 content: "\e006";
322 }
323 .glyphicon-star-empty:before {
324 content: "\e007";
325 }
326 .glyphicon-user:before {
327 content: "\e008";
328 }
329 .glyphicon-film:before {
330 content: "\e009";
331 }
332 .glyphicon-th-large:before {
333 content: "\e010";
334 }
335 .glyphicon-th:before {
336 content: "\e011";
337 }
338 .glyphicon-th-list:before {
339 content: "\e012";
340 }
341 .glyphicon-ok:before {
342 content: "\e013";
343 }
344 .glyphicon-remove:before {
345 content: "\e014";
346 }
347 .glyphicon-zoom-in:before {
348 content: "\e015";
349 }
350 .glyphicon-zoom-out:before {
351 content: "\e016";
352 }
353 .glyphicon-off:before {
354 content: "\e017";
355 }
356 .glyphicon-signal:before {
357 content: "\e018";
358 }
359 .glyphicon-cog:before {
360 content: "\e019";
361 }
362 .glyphicon-trash:before {
363 content: "\e020";
364 }
365 .glyphicon-home:before {
366 content: "\e021";
367 }
368 .glyphicon-file:before {
369 content: "\e022";
370 }
371 .glyphicon-time:before {
372 content: "\e023";
373 }
374 .glyphicon-road:before {
375 content: "\e024";
376 }
377 .glyphicon-download-alt:before {
378 content: "\e025";
379 }
380 .glyphicon-download:before {
381 content: "\e026";
382 }
383 .glyphicon-upload:before {
384 content: "\e027";
385 }
386 .glyphicon-inbox:before {
387 content: "\e028";
388 }
389 .glyphicon-play-circle:before {
390 content: "\e029";
391 }
392 .glyphicon-repeat:before {
393 content: "\e030";
394 }
395 .glyphicon-refresh:before {
396 content: "\e031";
397 }
398 .glyphicon-list-alt:before {
399 content: "\e032";
400 }
401 .glyphicon-lock:before {
402 content: "\e033";
403 }
404 .glyphicon-flag:before {
405 content: "\e034";
406 }
407 .glyphicon-headphones:before {
408 content: "\e035";
409 }
410 .glyphicon-volume-off:before {
411 content: "\e036";
412 }
413 .glyphicon-volume-down:before {
414 content: "\e037";
415 }
416 .glyphicon-volume-up:before {
417 content: "\e038";
418 }
419 .glyphicon-qrcode:before {
420 content: "\e039";
421 }
422 .glyphicon-barcode:before {
423 content: "\e040";
424 }
425 .glyphicon-tag:before {
426 content: "\e041";
427 }
428 .glyphicon-tags:before {
429 content: "\e042";
430 }
431 .glyphicon-book:before {
432 content: "\e043";
433 }
434 .glyphicon-bookmark:before {
435 content: "\e044";
436 }
437 .glyphicon-print:before {
438 content: "\e045";
439 }
440 .glyphicon-camera:before {
441 content: "\e046";
442 }
443 .glyphicon-font:before {
444 content: "\e047";
445 }
446 .glyphicon-bold:before {
447 content: "\e048";
448 }
449 .glyphicon-italic:before {
450 content: "\e049";
451 }
452 .glyphicon-text-height:before {
453 content: "\e050";
454 }
455 .glyphicon-text-width:before {
456 content: "\e051";
457 }
458 .glyphicon-align-left:before {
459 content: "\e052";
460 }
461 .glyphicon-align-center:before {
462 content: "\e053";
463 }
464 .glyphicon-align-right:before {
465 content: "\e054";
466 }
467 .glyphicon-align-justify:before {
468 content: "\e055";
469 }
470 .glyphicon-list:before {
471 content: "\e056";
472 }
473 .glyphicon-indent-left:before {
474 content: "\e057";
475 }
476 .glyphicon-indent-right:before {
477 content: "\e058";
478 }
479 .glyphicon-facetime-video:before {
480 content: "\e059";
481 }
482 .glyphicon-picture:before {
483 content: "\e060";
484 }
485 .glyphicon-map-marker:before {
486 content: "\e062";
487 }
488 .glyphicon-adjust:before {
489 content: "\e063";
490 }
491 .glyphicon-tint:before {
492 content: "\e064";
493 }
494 .glyphicon-edit:before {
495 content: "\e065";
496 }
497 .glyphicon-share:before {
498 content: "\e066";
499 }
500 .glyphicon-check:before {
501 content: "\e067";
502 }
503 .glyphicon-move:before {
504 content: "\e068";
505 }
506 .glyphicon-step-backward:before {
507 content: "\e069";
508 }
509 .glyphicon-fast-backward:before {
510 content: "\e070";
511 }
512 .glyphicon-backward:before {
513 content: "\e071";
514 }
515 .glyphicon-play:before {
516 content: "\e072";
517 }
518 .glyphicon-pause:before {
519 content: "\e073";
520 }
521 .glyphicon-stop:before {
522 content: "\e074";
523 }
524 .glyphicon-forward:before {
525 content: "\e075";
526 }
527 .glyphicon-fast-forward:before {
528 content: "\e076";
529 }
530 .glyphicon-step-forward:before {
531 content: "\e077";
532 }
533 .glyphicon-eject:before {
534 content: "\e078";
535 }
536 .glyphicon-chevron-left:before {
537 content: "\e079";
538 }
539 .glyphicon-chevron-right:before {
540 content: "\e080";
541 }
542 .glyphicon-plus-sign:before {
543 content: "\e081";
544 }
545 .glyphicon-minus-sign:before {
546 content: "\e082";
547 }
548 .glyphicon-remove-sign:before {
549 content: "\e083";
550 }
551 .glyphicon-ok-sign:before {
552 content: "\e084";
553 }
554 .glyphicon-question-sign:before {
555 content: "\e085";
556 }
557 .glyphicon-info-sign:before {
558 content: "\e086";
559 }
560 .glyphicon-screenshot:before {
561 content: "\e087";
562 }
563 .glyphicon-remove-circle:before {
564 content: "\e088";
565 }
566 .glyphicon-ok-circle:before {
567 content: "\e089";
568 }
569 .glyphicon-ban-circle:before {
570 content: "\e090";
571 }
572 .glyphicon-arrow-left:before {
573 content: "\e091";
574 }
575 .glyphicon-arrow-right:before {
576 content: "\e092";
577 }
578 .glyphicon-arrow-up:before {
579 content: "\e093";
580 }
581 .glyphicon-arrow-down:before {
582 content: "\e094";
583 }
584 .glyphicon-share-alt:before {
585 content: "\e095";
586 }
587 .glyphicon-resize-full:before {
588 content: "\e096";
589 }
590 .glyphicon-resize-small:before {
591 content: "\e097";
592 }
593 .glyphicon-exclamation-sign:before {
594 content: "\e101";
595 }
596 .glyphicon-gift:before {
597 content: "\e102";
598 }
599 .glyphicon-leaf:before {
600 content: "\e103";
601 }
602 .glyphicon-fire:before {
603 content: "\e104";
604 }
605 .glyphicon-eye-open:before {
606 content: "\e105";
607 }
608 .glyphicon-eye-close:before {
609 content: "\e106";
610 }
611 .glyphicon-warning-sign:before {
612 content: "\e107";
613 }
614 .glyphicon-plane:before {
615 content: "\e108";
616 }
617 .glyphicon-calendar:before {
618 content: "\e109";
619 }
620 .glyphicon-random:before {
621 content: "\e110";
622 }
623 .glyphicon-comment:before {
624 content: "\e111";
625 }
626 .glyphicon-magnet:before {
627 content: "\e112";
628 }
629 .glyphicon-chevron-up:before {
630 content: "\e113";
631 }
632 .glyphicon-chevron-down:before {
633 content: "\e114";
634 }
635 .glyphicon-retweet:before {
636 content: "\e115";
637 }
638 .glyphicon-shopping-cart:before {
639 content: "\e116";
640 }
641 .glyphicon-folder-close:before {
642 content: "\e117";
643 }
644 .glyphicon-folder-open:before {
645 content: "\e118";
646 }
647 .glyphicon-resize-vertical:before {
648 content: "\e119";
649 }
650 .glyphicon-resize-horizontal:before {
651 content: "\e120";
652 }
653 .glyphicon-hdd:before {
654 content: "\e121";
655 }
656 .glyphicon-bullhorn:before {
657 content: "\e122";
658 }
659 .glyphicon-bell:before {
660 content: "\e123";
661 }
662 .glyphicon-certificate:before {
663 content: "\e124";
664 }
665 .glyphicon-thumbs-up:before {
666 content: "\e125";
667 }
668 .glyphicon-thumbs-down:before {
669 content: "\e126";
670 }
671 .glyphicon-hand-right:before {
672 content: "\e127";
673 }
674 .glyphicon-hand-left:before {
675 content: "\e128";
676 }
677 .glyphicon-hand-up:before {
678 content: "\e129";
679 }
680 .glyphicon-hand-down:before {
681 content: "\e130";
682 }
683 .glyphicon-circle-arrow-right:before {
684 content: "\e131";
685 }
686 .glyphicon-circle-arrow-left:before {
687 content: "\e132";
688 }
689 .glyphicon-circle-arrow-up:before {
690 content: "\e133";
691 }
692 .glyphicon-circle-arrow-down:before {
693 content: "\e134";
694 }
695 .glyphicon-globe:before {
696 content: "\e135";
697 }
698 .glyphicon-wrench:before {
699 content: "\e136";
700 }
701 .glyphicon-tasks:before {
702 content: "\e137";
703 }
704 .glyphicon-filter:before {
705 content: "\e138";
706 }
707 .glyphicon-briefcase:before {
708 content: "\e139";
709 }
710 .glyphicon-fullscreen:before {
711 content: "\e140";
712 }
713 .glyphicon-dashboard:before {
714 content: "\e141";
715 }
716 .glyphicon-paperclip:before {
717 content: "\e142";
718 }
719 .glyphicon-heart-empty:before {
720 content: "\e143";
721 }
722 .glyphicon-link:before {
723 content: "\e144";
724 }
725 .glyphicon-phone:before {
726 content: "\e145";
727 }
728 .glyphicon-pushpin:before {
729 content: "\e146";
730 }
731 .glyphicon-usd:before {
732 content: "\e148";
733 }
734 .glyphicon-gbp:before {
735 content: "\e149";
736 }
737 .glyphicon-sort:before {
738 content: "\e150";
739 }
740 .glyphicon-sort-by-alphabet:before {
741 content: "\e151";
742 }
743 .glyphicon-sort-by-alphabet-alt:before {
744 content: "\e152";
745 }
746 .glyphicon-sort-by-order:before {
747 content: "\e153";
748 }
749 .glyphicon-sort-by-order-alt:before {
750 content: "\e154";
751 }
752 .glyphicon-sort-by-attributes:before {
753 content: "\e155";
754 }
755 .glyphicon-sort-by-attributes-alt:before {
756 content: "\e156";
757 }
758 .glyphicon-unchecked:before {
759 content: "\e157";
760 }
761 .glyphicon-expand:before {
762 content: "\e158";
763 }
764 .glyphicon-collapse-down:before {
765 content: "\e159";
766 }
767 .glyphicon-collapse-up:before {
768 content: "\e160";
769 }
770 .glyphicon-log-in:before {
771 content: "\e161";
772 }
773 .glyphicon-flash:before {
774 content: "\e162";
775 }
776 .glyphicon-log-out:before {
777 content: "\e163";
778 }
779 .glyphicon-new-window:before {
780 content: "\e164";
781 }
782 .glyphicon-record:before {
783 content: "\e165";
784 }
785 .glyphicon-save:before {
786 content: "\e166";
787 }
788 .glyphicon-open:before {
789 content: "\e167";
790 }
791 .glyphicon-saved:before {
792 content: "\e168";
793 }
794 .glyphicon-import:before {
795 content: "\e169";
796 }
797 .glyphicon-export:before {
798 content: "\e170";
799 }
800 .glyphicon-send:before {
801 content: "\e171";
802 }
803 .glyphicon-floppy-disk:before {
804 content: "\e172";
805 }
806 .glyphicon-floppy-saved:before {
807 content: "\e173";
808 }
809 .glyphicon-floppy-remove:before {
810 content: "\e174";
811 }
812 .glyphicon-floppy-save:before {
813 content: "\e175";
814 }
815 .glyphicon-floppy-open:before {
816 content: "\e176";
817 }
818 .glyphicon-credit-card:before {
819 content: "\e177";
820 }
821 .glyphicon-transfer:before {
822 content: "\e178";
823 }
824 .glyphicon-cutlery:before {
825 content: "\e179";
826 }
827 .glyphicon-header:before {
828 content: "\e180";
829 }
830 .glyphicon-compressed:before {
831 content: "\e181";
832 }
833 .glyphicon-earphone:before {
834 content: "\e182";
835 }
836 .glyphicon-phone-alt:before {
837 content: "\e183";
838 }
839 .glyphicon-tower:before {
840 content: "\e184";
841 }
842 .glyphicon-stats:before {
843 content: "\e185";
844 }
845 .glyphicon-sd-video:before {
846 content: "\e186";
847 }
848 .glyphicon-hd-video:before {
849 content: "\e187";
850 }
851 .glyphicon-subtitles:before {
852 content: "\e188";
853 }
854 .glyphicon-sound-stereo:before {
855 content: "\e189";
856 }
857 .glyphicon-sound-dolby:before {
858 content: "\e190";
859 }
860 .glyphicon-sound-5-1:before {
861 content: "\e191";
862 }
863 .glyphicon-sound-6-1:before {
864 content: "\e192";
865 }
866 .glyphicon-sound-7-1:before {
867 content: "\e193";
868 }
869 .glyphicon-copyright-mark:before {
870 content: "\e194";
871 }
872 .glyphicon-registration-mark:before {
873 content: "\e195";
874 }
875 .glyphicon-cloud-download:before {
876 content: "\e197";
877 }
878 .glyphicon-cloud-upload:before {
879 content: "\e198";
880 }
881 .glyphicon-tree-conifer:before {
882 content: "\e199";
883 }
884 .glyphicon-tree-deciduous:before {
885 content: "\e200";
886 }
887 .glyphicon-cd:before {
888 content: "\e201";
889 }
890 .glyphicon-save-file:before {
891 content: "\e202";
892 }
893 .glyphicon-open-file:before {
894 content: "\e203";
895 }
896 .glyphicon-level-up:before {
897 content: "\e204";
898 }
899 .glyphicon-copy:before {
900 content: "\e205";
901 }
902 .glyphicon-paste:before {
903 content: "\e206";
904 }
905 .glyphicon-alert:before {
906 content: "\e209";
907 }
908 .glyphicon-equalizer:before {
909 content: "\e210";
910 }
911 .glyphicon-king:before {
912 content: "\e211";
913 }
914 .glyphicon-queen:before {
915 content: "\e212";
916 }
917 .glyphicon-pawn:before {
918 content: "\e213";
919 }
920 .glyphicon-bishop:before {
921 content: "\e214";
922 }
923 .glyphicon-knight:before {
924 content: "\e215";
925 }
926 .glyphicon-baby-formula:before {
927 content: "\e216";
928 }
929 .glyphicon-tent:before {
930 content: "\26fa";
931 }
932 .glyphicon-blackboard:before {
933 content: "\e218";
934 }
935 .glyphicon-bed:before {
936 content: "\e219";
937 }
938 .glyphicon-apple:before {
939 content: "\f8ff";
940 }
941 .glyphicon-erase:before {
942 content: "\e221";
943 }
944 .glyphicon-hourglass:before {
945 content: "\231b";
946 }
947 .glyphicon-lamp:before {
948 content: "\e223";
949 }
950 .glyphicon-duplicate:before {
951 content: "\e224";
952 }
953 .glyphicon-piggy-bank:before {
954 content: "\e225";
955 }
956 .glyphicon-scissors:before {
957 content: "\e226";
958 }
959 .glyphicon-bitcoin:before {
960 content: "\e227";
961 }
962 .glyphicon-btc:before {
963 content: "\e227";
964 }
965 .glyphicon-xbt:before {
966 content: "\e227";
967 }
968 .glyphicon-yen:before {
969 content: "\00a5";
970 }
971 .glyphicon-jpy:before {
972 content: "\00a5";
973 }
974 .glyphicon-ruble:before {
975 content: "\20bd";
976 }
977 .glyphicon-rub:before {
978 content: "\20bd";
979 }
980 .glyphicon-scale:before {
981 content: "\e230";
982 }
983 .glyphicon-ice-lolly:before {
984 content: "\e231";
985 }
986 .glyphicon-ice-lolly-tasted:before {
987 content: "\e232";
988 }
989 .glyphicon-education:before {
990 content: "\e233";
991 }
992 .glyphicon-option-horizontal:before {
993 content: "\e234";
994 }
995 .glyphicon-option-vertical:before {
996 content: "\e235";
997 }
998 .glyphicon-menu-hamburger:before {
999 content: "\e236";
1000 }
1001 .glyphicon-modal-window:before {
1002 content: "\e237";
1003 }
1004 .glyphicon-oil:before {
1005 content: "\e238";
1006 }
1007 .glyphicon-grain:before {
1008 content: "\e239";
1009 }
1010 .glyphicon-sunglasses:before {
1011 content: "\e240";
1012 }
1013 .glyphicon-text-size:before {
1014 content: "\e241";
1015 }
1016 .glyphicon-text-color:before {
1017 content: "\e242";
1018 }
1019 .glyphicon-text-background:before {
1020 content: "\e243";
1021 }
1022 .glyphicon-object-align-top:before {
1023 content: "\e244";
1024 }
1025 .glyphicon-object-align-bottom:before {
1026 content: "\e245";
1027 }
1028 .glyphicon-object-align-horizontal:before {
1029 content: "\e246";
1030 }
1031 .glyphicon-object-align-left:before {
1032 content: "\e247";
1033 }
1034 .glyphicon-object-align-vertical:before {
1035 content: "\e248";
1036 }
1037 .glyphicon-object-align-right:before {
1038 content: "\e249";
1039 }
1040 .glyphicon-triangle-right:before {
1041 content: "\e250";
1042 }
1043 .glyphicon-triangle-left:before {
1044 content: "\e251";
1045 }
1046 .glyphicon-triangle-bottom:before {
1047 content: "\e252";
1048 }
1049 .glyphicon-triangle-top:before {
1050 content: "\e253";
1051 }
1052 .glyphicon-console:before {
1053 content: "\e254";
1054 }
1055 .glyphicon-superscript:before {
1056 content: "\e255";
1057 }
1058 .glyphicon-subscript:before {
1059 content: "\e256";
1060 }
1061 .glyphicon-menu-left:before {
1062 content: "\e257";
1063 }
1064 .glyphicon-menu-right:before {
1065 content: "\e258";
1066 }
1067 .glyphicon-menu-down:before {
1068 content: "\e259";
1069 }
1070 .glyphicon-menu-up:before {
1071 content: "\e260";
1072 }
1073 * {
1074 -webkit-box-sizing: border-box;
1075 -moz-box-sizing: border-box;
1076 box-sizing: border-box;
1077 }
1078 *:before,
1079 *:after {
1080 -webkit-box-sizing: border-box;
1081 -moz-box-sizing: border-box;
1082 box-sizing: border-box;
1083 }
1084 html {
1085 font-size: 10px;
1086
1087 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
1088 }
1089 body {
1090 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
1091 font-size: 14px;
1092 line-height: 1.42857143;
1093 color: #333;
1094 background-color: #fff;
1095 }
1096 input,
1097 button,
1098 select,
1099 textarea {
1100 font-family: inherit;
1101 font-size: inherit;
1102 line-height: inherit;
1103 }
1104 a {
1105 color: #337ab7;
1106 text-decoration: none;
1107 }
1108 a:hover,
1109 a:focus {
1110 color: #23527c;
1111 text-decoration: underline;
1112 }
1113 a:focus {
1114 outline: 5px auto -webkit-focus-ring-color;
1115 outline-offset: -2px;
1116 }
1117 figure {
1118 margin: 0;
1119 }
1120 img {
1121 vertical-align: middle;
1122 }
1123 .img-responsive,
1124 .thumbnail > img,
1125 .thumbnail a > img,
1126 .carousel-inner > .item > img,
1127 .carousel-inner > .item > a > img {
1128 display: block;
1129 max-width: 100%;
1130 height: auto;
1131 }
1132 .img-rounded {
1133 border-radius: 6px;
1134 }
1135 .img-thumbnail {
1136 display: inline-block;
1137 max-width: 100%;
1138 height: auto;
1139 padding: 4px;
1140 line-height: 1.42857143;
1141 background-color: #fff;
1142 border: 1px solid #ddd;
1143 border-radius: 4px;
1144 -webkit-transition: all .2s ease-in-out;
1145 -o-transition: all .2s ease-in-out;
1146 transition: all .2s ease-in-out;
1147 }
1148 .img-circle {
1149 border-radius: 50%;
1150 }
1151 hr {
1152 margin-top: 20px;
1153 margin-bottom: 20px;
1154 border: 0;
1155 border-top: 1px solid #eee;
1156 }
1157 .sr-only {
1158 position: absolute;
1159 width: 1px;
1160 height: 1px;
1161 padding: 0;
1162 margin: -1px;
1163 overflow: hidden;
1164 clip: rect(0, 0, 0, 0);
1165 border: 0;
1166 }
1167 .sr-only-focusable:active,
1168 .sr-only-focusable:focus {
1169 position: static;
1170 width: auto;
1171 height: auto;
1172 margin: 0;
1173 overflow: visible;
1174 clip: auto;
1175 }
1176 [role="button"] {
1177 cursor: pointer;
1178 }
1179 h1,
1180 h2,
1181 h3,
1182 h4,
1183 h5,
1184 h6,
1185 .h1,
1186 .h2,
1187 .h3,
1188 .h4,
1189 .h5,
1190 .h6 {
1191 font-family: inherit;
1192 font-weight: 500;
1193 line-height: 1.1;
1194 color: inherit;
1195 }
1196 h1 small,
1197 h2 small,
1198 h3 small,
1199 h4 small,
1200 h5 small,
1201 h6 small,
1202 .h1 small,
1203 .h2 small,
1204 .h3 small,
1205 .h4 small,
1206 .h5 small,
1207 .h6 small,
1208 h1 .small,
1209 h2 .small,
1210 h3 .small,
1211 h4 .small,
1212 h5 .small,
1213 h6 .small,
1214 .h1 .small,
1215 .h2 .small,
1216 .h3 .small,
1217 .h4 .small,
1218 .h5 .small,
1219 .h6 .small {
1220 font-weight: normal;
1221 line-height: 1;
1222 color: #777;
1223 }
1224 h1,
1225 .h1,
1226 h2,
1227 .h2,
1228 h3,
1229 .h3 {
1230 margin-top: 20px;
1231 margin-bottom: 10px;
1232 }
1233 h1 small,
1234 .h1 small,
1235 h2 small,
1236 .h2 small,
1237 h3 small,
1238 .h3 small,
1239 h1 .small,
1240 .h1 .small,
1241 h2 .small,
1242 .h2 .small,
1243 h3 .small,
1244 .h3 .small {
1245 font-size: 65%;
1246 }
1247 h4,
1248 .h4,
1249 h5,
1250 .h5,
1251 h6,
1252 .h6 {
1253 margin-top: 10px;
1254 margin-bottom: 10px;
1255 }
1256 h4 small,
1257 .h4 small,
1258 h5 small,
1259 .h5 small,
1260 h6 small,
1261 .h6 small,
1262 h4 .small,
1263 .h4 .small,
1264 h5 .small,
1265 .h5 .small,
1266 h6 .small,
1267 .h6 .small {
1268 font-size: 75%;
1269 }
1270 h1,
1271 .h1 {
1272 font-size: 36px;
1273 }
1274 h2,
1275 .h2 {
1276 font-size: 30px;
1277 }
1278 h3,
1279 .h3 {
1280 font-size: 24px;
1281 }
1282 h4,
1283 .h4 {
1284 font-size: 18px;
1285 }
1286 h5,
1287 .h5 {
1288 font-size: 14px;
1289 }
1290 h6,
1291 .h6 {
1292 font-size: 12px;
1293 }
1294 p {
1295 margin: 0 0 10px;
1296 }
1297 .lead {
1298 margin-bottom: 20px;
1299 font-size: 16px;
1300 font-weight: 300;
1301 line-height: 1.4;
1302 }
1303 @media (min-width: 768px) {
1304 .lead {
1305 font-size: 21px;
1306 }
1307 }
1308 small,
1309 .small {
1310 font-size: 85%;
1311 }
1312 mark,
1313 .mark {
1314 padding: .2em;
1315 background-color: #fcf8e3;
1316 }
1317 .text-left {
1318 text-align: left;
1319 }
1320 .text-right {
1321 text-align: right;
1322 }
1323 .text-center {
1324 text-align: center;
1325 }
1326 .text-justify {
1327 text-align: justify;
1328 }
1329 .text-nowrap {
1330 white-space: nowrap;
1331 }
1332 .text-lowercase {
1333 text-transform: lowercase;
1334 }
1335 .text-uppercase {
1336 text-transform: uppercase;
1337 }
1338 .text-capitalize {
1339 text-transform: capitalize;
1340 }
1341 .text-muted {
1342 color: #777;
1343 }
1344 .text-primary {
1345 color: #337ab7;
1346 }
1347 a.text-primary:hover,
1348 a.text-primary:focus {
1349 color: #286090;
1350 }
1351 .text-success {
1352 color: #3c763d;
1353 }
1354 a.text-success:hover,
1355 a.text-success:focus {
1356 color: #2b542c;
1357 }
1358 .text-info {
1359 color: #31708f;
1360 }
1361 a.text-info:hover,
1362 a.text-info:focus {
1363 color: #245269;
1364 }
1365 .text-warning {
1366 color: #8a6d3b;
1367 }
1368 a.text-warning:hover,
1369 a.text-warning:focus {
1370 color: #66512c;
1371 }
1372 .text-danger {
1373 color: #a94442;
1374 }
1375 a.text-danger:hover,
1376 a.text-danger:focus {
1377 color: #843534;
1378 }
1379 .bg-primary {
1380 color: #fff;
1381 background-color: #337ab7;
1382 }
1383 a.bg-primary:hover,
1384 a.bg-primary:focus {
1385 background-color: #286090;
1386 }
1387 .bg-success {
1388 background-color: #dff0d8;
1389 }
1390 a.bg-success:hover,
1391 a.bg-success:focus {
1392 background-color: #c1e2b3;
1393 }
1394 .bg-info {
1395 background-color: #d9edf7;
1396 }
1397 a.bg-info:hover,
1398 a.bg-info:focus {
1399 background-color: #afd9ee;
1400 }
1401 .bg-warning {
1402 background-color: #fcf8e3;
1403 }
1404 a.bg-warning:hover,
1405 a.bg-warning:focus {
1406 background-color: #f7ecb5;
1407 }
1408 .bg-danger {
1409 background-color: #f2dede;
1410 }
1411 a.bg-danger:hover,
1412 a.bg-danger:focus {
1413 background-color: #e4b9b9;
1414 }
1415 .page-header {
1416 padding-bottom: 9px;
1417 margin: 40px 0 20px;
1418 border-bottom: 1px solid #eee;
1419 }
1420 ul,
1421 ol {
1422 margin-top: 0;
1423 margin-bottom: 10px;
1424 }
1425 ul ul,
1426 ol ul,
1427 ul ol,
1428 ol ol {
1429 margin-bottom: 0;
1430 }
1431 .list-unstyled {
1432 padding-left: 0;
1433 list-style: none;
1434 }
1435 .list-inline {
1436 padding-left: 0;
1437 margin-left: -5px;
1438 list-style: none;
1439 }
1440 .list-inline > li {
1441 display: inline-block;
1442 padding-right: 5px;
1443 padding-left: 5px;
1444 }
1445 dl {
1446 margin-top: 0;
1447 margin-bottom: 20px;
1448 }
1449 dt,
1450 dd {
1451 line-height: 1.42857143;
1452 }
1453 dt {
1454 font-weight: bold;
1455 }
1456 dd {
1457 margin-left: 0;
1458 }
1459 @media (min-width: 768px) {
1460 .dl-horizontal dt {
1461 float: left;
1462 width: 160px;
1463 overflow: hidden;
1464 clear: left;
1465 text-align: right;
1466 text-overflow: ellipsis;
1467 white-space: nowrap;
1468 }
1469 .dl-horizontal dd {
1470 margin-left: 180px;
1471 }
1472 }
1473 abbr[title],
1474 abbr[data-original-title] {
1475 cursor: help;
1476 border-bottom: 1px dotted #777;
1477 }
1478 .initialism {
1479 font-size: 90%;
1480 text-transform: uppercase;
1481 }
1482 blockquote {
1483 padding: 10px 20px;
1484 margin: 0 0 20px;
1485 font-size: 17.5px;
1486 border-left: 5px solid #eee;
1487 }
1488 blockquote p:last-child,
1489 blockquote ul:last-child,
1490 blockquote ol:last-child {
1491 margin-bottom: 0;
1492 }
1493 blockquote footer,
1494 blockquote small,
1495 blockquote .small {
1496 display: block;
1497 font-size: 80%;
1498 line-height: 1.42857143;
1499 color: #777;
1500 }
1501 blockquote footer:before,
1502 blockquote small:before,
1503 blockquote .small:before {
1504 content: '\2014 \00A0';
1505 }
1506 .blockquote-reverse,
1507 blockquote.pull-right {
1508 padding-right: 15px;
1509 padding-left: 0;
1510 text-align: right;
1511 border-right: 5px solid #eee;
1512 border-left: 0;
1513 }
1514 .blockquote-reverse footer:before,
1515 blockquote.pull-right footer:before,
1516 .blockquote-reverse small:before,
1517 blockquote.pull-right small:before,
1518 .blockquote-reverse .small:before,
1519 blockquote.pull-right .small:before {
1520 content: '';
1521 }
1522 .blockquote-reverse footer:after,
1523 blockquote.pull-right footer:after,
1524 .blockquote-reverse small:after,
1525 blockquote.pull-right small:after,
1526 .blockquote-reverse .small:after,
1527 blockquote.pull-right .small:after {
1528 content: '\00A0 \2014';
1529 }
1530 address {
1531 margin-bottom: 20px;
1532 font-style: normal;
1533 line-height: 1.42857143;
1534 }
1535 code,
1536 kbd,
1537 pre,
1538 samp {
1539 font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
1540 }
1541 code {
1542 padding: 2px 4px;
1543 font-size: 90%;
1544 color: #c7254e;
1545 background-color: #f9f2f4;
1546 border-radius: 4px;
1547 }
1548 kbd {
1549 padding: 2px 4px;
1550 font-size: 90%;
1551 color: #fff;
1552 background-color: #333;
1553 border-radius: 3px;
1554 -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
1555 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
1556 }
1557 kbd kbd {
1558 padding: 0;
1559 font-size: 100%;
1560 font-weight: bold;
1561 -webkit-box-shadow: none;
1562 box-shadow: none;
1563 }
1564 pre {
1565 display: block;
1566 padding: 9.5px;
1567 margin: 0 0 10px;
1568 font-size: 13px;
1569 line-height: 1.42857143;
1570 color: #333;
1571 word-break: break-all;
1572 word-wrap: break-word;
1573 background-color: #f5f5f5;
1574 border: 1px solid #ccc;
1575 border-radius: 4px;
1576 }
1577 pre code {
1578 padding: 0;
1579 font-size: inherit;
1580 color: inherit;
1581 white-space: pre-wrap;
1582 background-color: transparent;
1583 border-radius: 0;
1584 }
1585 .pre-scrollable {
1586 max-height: 340px;
1587 overflow-y: scroll;
1588 }
1589 .container {
1590 padding-right: 15px;
1591 padding-left: 15px;
1592 margin-right: auto;
1593 margin-left: auto;
1594 }
1595 @media (min-width: 768px) {
1596 .container {
1597 width: 750px;
1598 }
1599 }
1600 @media (min-width: 992px) {
1601 .container {
1602 width: 970px;
1603 }
1604 }
1605 @media (min-width: 1200px) {
1606 .container {
1607 width: 1170px;
1608 }
1609 }
1610 .container-fluid {
1611 padding-right: 15px;
1612 padding-left: 15px;
1613 margin-right: auto;
1614 margin-left: auto;
1615 }
1616 .row {
1617 margin-right: -15px;
1618 margin-left: -15px;
1619 }
1620 .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 {
1621 position: relative;
1622 min-height: 1px;
1623 padding-right: 15px;
1624 padding-left: 15px;
1625 }
1626 .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 {
1627 float: left;
1628 }
1629 .col-xs-12 {
1630 width: 100%;
1631 }
1632 .col-xs-11 {
1633 width: 91.66666667%;
1634 }
1635 .col-xs-10 {
1636 width: 83.33333333%;
1637 }
1638 .col-xs-9 {
1639 width: 75%;
1640 }
1641 .col-xs-8 {
1642 width: 66.66666667%;
1643 }
1644 .col-xs-7 {
1645 width: 58.33333333%;
1646 }
1647 .col-xs-6 {
1648 width: 50%;
1649 }
1650 .col-xs-5 {
1651 width: 41.66666667%;
1652 }
1653 .col-xs-4 {
1654 width: 33.33333333%;
1655 }
1656 .col-xs-3 {
1657 width: 25%;
1658 }
1659 .col-xs-2 {
1660 width: 16.66666667%;
1661 }
1662 .col-xs-1 {
1663 width: 8.33333333%;
1664 }
1665 .col-xs-pull-12 {
1666 right: 100%;
1667 }
1668 .col-xs-pull-11 {
1669 right: 91.66666667%;
1670 }
1671 .col-xs-pull-10 {
1672 right: 83.33333333%;
1673 }
1674 .col-xs-pull-9 {
1675 right: 75%;
1676 }
1677 .col-xs-pull-8 {
1678 right: 66.66666667%;
1679 }
1680 .col-xs-pull-7 {
1681 right: 58.33333333%;
1682 }
1683 .col-xs-pull-6 {
1684 right: 50%;
1685 }
1686 .col-xs-pull-5 {
1687 right: 41.66666667%;
1688 }
1689 .col-xs-pull-4 {
1690 right: 33.33333333%;
1691 }
1692 .col-xs-pull-3 {
1693 right: 25%;
1694 }
1695 .col-xs-pull-2 {
1696 right: 16.66666667%;
1697 }
1698 .col-xs-pull-1 {
1699 right: 8.33333333%;
1700 }
1701 .col-xs-pull-0 {
1702 right: auto;
1703 }
1704 .col-xs-push-12 {
1705 left: 100%;
1706 }
1707 .col-xs-push-11 {
1708 left: 91.66666667%;
1709 }
1710 .col-xs-push-10 {
1711 left: 83.33333333%;
1712 }
1713 .col-xs-push-9 {
1714 left: 75%;
1715 }
1716 .col-xs-push-8 {
1717 left: 66.66666667%;
1718 }
1719 .col-xs-push-7 {
1720 left: 58.33333333%;
1721 }
1722 .col-xs-push-6 {
1723 left: 50%;
1724 }
1725 .col-xs-push-5 {
1726 left: 41.66666667%;
1727 }
1728 .col-xs-push-4 {
1729 left: 33.33333333%;
1730 }
1731 .col-xs-push-3 {
1732 left: 25%;
1733 }
1734 .col-xs-push-2 {
1735 left: 16.66666667%;
1736 }
1737 .col-xs-push-1 {
1738 left: 8.33333333%;
1739 }
1740 .col-xs-push-0 {
1741 left: auto;
1742 }
1743 .col-xs-offset-12 {
1744 margin-left: 100%;
1745 }
1746 .col-xs-offset-11 {
1747 margin-left: 91.66666667%;
1748 }
1749 .col-xs-offset-10 {
1750 margin-left: 83.33333333%;
1751 }
1752 .col-xs-offset-9 {
1753 margin-left: 75%;
1754 }
1755 .col-xs-offset-8 {
1756 margin-left: 66.66666667%;
1757 }
1758 .col-xs-offset-7 {
1759 margin-left: 58.33333333%;
1760 }
1761 .col-xs-offset-6 {
1762 margin-left: 50%;
1763 }
1764 .col-xs-offset-5 {
1765 margin-left: 41.66666667%;
1766 }
1767 .col-xs-offset-4 {
1768 margin-left: 33.33333333%;
1769 }
1770 .col-xs-offset-3 {
1771 margin-left: 25%;
1772 }
1773 .col-xs-offset-2 {
1774 margin-left: 16.66666667%;
1775 }
1776 .col-xs-offset-1 {
1777 margin-left: 8.33333333%;
1778 }
1779 .col-xs-offset-0 {
1780 margin-left: 0;
1781 }
1782 @media (min-width: 768px) {
1783 .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 {
1784 float: left;
1785 }
1786 .col-sm-12 {
1787 width: 100%;
1788 }
1789 .col-sm-11 {
1790 width: 91.66666667%;
1791 }
1792 .col-sm-10 {
1793 width: 83.33333333%;
1794 }
1795 .col-sm-9 {
1796 width: 75%;
1797 }
1798 .col-sm-8 {
1799 width: 66.66666667%;
1800 }
1801 .col-sm-7 {
1802 width: 58.33333333%;
1803 }
1804 .col-sm-6 {
1805 width: 50%;
1806 }
1807 .col-sm-5 {
1808 width: 41.66666667%;
1809 }
1810 .col-sm-4 {
1811 width: 33.33333333%;
1812 }
1813 .col-sm-3 {
1814 width: 25%;
1815 }
1816 .col-sm-2 {
1817 width: 16.66666667%;
1818 }
1819 .col-sm-1 {
1820 width: 8.33333333%;
1821 }
1822 .col-sm-pull-12 {
1823 right: 100%;
1824 }
1825 .col-sm-pull-11 {
1826 right: 91.66666667%;
1827 }
1828 .col-sm-pull-10 {
1829 right: 83.33333333%;
1830 }
1831 .col-sm-pull-9 {
1832 right: 75%;
1833 }
1834 .col-sm-pull-8 {
1835 right: 66.66666667%;
1836 }
1837 .col-sm-pull-7 {
1838 right: 58.33333333%;
1839 }
1840 .col-sm-pull-6 {
1841 right: 50%;
1842 }
1843 .col-sm-pull-5 {
1844 right: 41.66666667%;
1845 }
1846 .col-sm-pull-4 {
1847 right: 33.33333333%;
1848 }
1849 .col-sm-pull-3 {
1850 right: 25%;
1851 }
1852 .col-sm-pull-2 {
1853 right: 16.66666667%;
1854 }
1855 .col-sm-pull-1 {
1856 right: 8.33333333%;
1857 }
1858 .col-sm-pull-0 {
1859 right: auto;
1860 }
1861 .col-sm-push-12 {
1862 left: 100%;
1863 }
1864 .col-sm-push-11 {
1865 left: 91.66666667%;
1866 }
1867 .col-sm-push-10 {
1868 left: 83.33333333%;
1869 }
1870 .col-sm-push-9 {
1871 left: 75%;
1872 }
1873 .col-sm-push-8 {
1874 left: 66.66666667%;
1875 }
1876 .col-sm-push-7 {
1877 left: 58.33333333%;
1878 }
1879 .col-sm-push-6 {
1880 left: 50%;
1881 }
1882 .col-sm-push-5 {
1883 left: 41.66666667%;
1884 }
1885 .col-sm-push-4 {
1886 left: 33.33333333%;
1887 }
1888 .col-sm-push-3 {
1889 left: 25%;
1890 }
1891 .col-sm-push-2 {
1892 left: 16.66666667%;
1893 }
1894 .col-sm-push-1 {
1895 left: 8.33333333%;
1896 }
1897 .col-sm-push-0 {
1898 left: auto;
1899 }
1900 .col-sm-offset-12 {
1901 margin-left: 100%;
1902 }
1903 .col-sm-offset-11 {
1904 margin-left: 91.66666667%;
1905 }
1906 .col-sm-offset-10 {
1907 margin-left: 83.33333333%;
1908 }
1909 .col-sm-offset-9 {
1910 margin-left: 75%;
1911 }
1912 .col-sm-offset-8 {
1913 margin-left: 66.66666667%;
1914 }
1915 .col-sm-offset-7 {
1916 margin-left: 58.33333333%;
1917 }
1918 .col-sm-offset-6 {
1919 margin-left: 50%;
1920 }
1921 .col-sm-offset-5 {
1922 margin-left: 41.66666667%;
1923 }
1924 .col-sm-offset-4 {
1925 margin-left: 33.33333333%;
1926 }
1927 .col-sm-offset-3 {
1928 margin-left: 25%;
1929 }
1930 .col-sm-offset-2 {
1931 margin-left: 16.66666667%;
1932 }
1933 .col-sm-offset-1 {
1934 margin-left: 8.33333333%;
1935 }
1936 .col-sm-offset-0 {
1937 margin-left: 0;
1938 }
1939 }
1940 @media (min-width: 992px) {
1941 .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 {
1942 float: left;
1943 }
1944 .col-md-12 {
1945 width: 100%;
1946 }
1947 .col-md-11 {
1948 width: 91.66666667%;
1949 }
1950 .col-md-10 {
1951 width: 83.33333333%;
1952 }
1953 .col-md-9 {
1954 width: 75%;
1955 }
1956 .col-md-8 {
1957 width: 66.66666667%;
1958 }
1959 .col-md-7 {
1960 width: 58.33333333%;
1961 }
1962 .col-md-6 {
1963 width: 50%;
1964 }
1965 .col-md-5 {
1966 width: 41.66666667%;
1967 }
1968 .col-md-4 {
1969 width: 33.33333333%;
1970 }
1971 .col-md-3 {
1972 width: 25%;
1973 }
1974 .col-md-2 {
1975 width: 16.66666667%;
1976 }
1977 .col-md-1 {
1978 width: 8.33333333%;
1979 }
1980 .col-md-pull-12 {
1981 right: 100%;
1982 }
1983 .col-md-pull-11 {
1984 right: 91.66666667%;
1985 }
1986 .col-md-pull-10 {
1987 right: 83.33333333%;
1988 }
1989 .col-md-pull-9 {
1990 right: 75%;
1991 }
1992 .col-md-pull-8 {
1993 right: 66.66666667%;
1994 }
1995 .col-md-pull-7 {
1996 right: 58.33333333%;
1997 }
1998 .col-md-pull-6 {
1999 right: 50%;
2000 }
2001 .col-md-pull-5 {
2002 right: 41.66666667%;
2003 }
2004 .col-md-pull-4 {
2005 right: 33.33333333%;
2006 }
2007 .col-md-pull-3 {
2008 right: 25%;
2009 }
2010 .col-md-pull-2 {
2011 right: 16.66666667%;
2012 }
2013 .col-md-pull-1 {
2014 right: 8.33333333%;
2015 }
2016 .col-md-pull-0 {
2017 right: auto;
2018 }
2019 .col-md-push-12 {
2020 left: 100%;
2021 }
2022 .col-md-push-11 {
2023 left: 91.66666667%;
2024 }
2025 .col-md-push-10 {
2026 left: 83.33333333%;
2027 }
2028 .col-md-push-9 {
2029 left: 75%;
2030 }
2031 .col-md-push-8 {
2032 left: 66.66666667%;
2033 }
2034 .col-md-push-7 {
2035 left: 58.33333333%;
2036 }
2037 .col-md-push-6 {
2038 left: 50%;
2039 }
2040 .col-md-push-5 {
2041 left: 41.66666667%;
2042 }
2043 .col-md-push-4 {
2044 left: 33.33333333%;
2045 }
2046 .col-md-push-3 {
2047 left: 25%;
2048 }
2049 .col-md-push-2 {
2050 left: 16.66666667%;
2051 }
2052 .col-md-push-1 {
2053 left: 8.33333333%;
2054 }
2055 .col-md-push-0 {
2056 left: auto;
2057 }
2058 .col-md-offset-12 {
2059 margin-left: 100%;
2060 }
2061 .col-md-offset-11 {
2062 margin-left: 91.66666667%;
2063 }
2064 .col-md-offset-10 {
2065 margin-left: 83.33333333%;
2066 }
2067 .col-md-offset-9 {
2068 margin-left: 75%;
2069 }
2070 .col-md-offset-8 {
2071 margin-left: 66.66666667%;
2072 }
2073 .col-md-offset-7 {
2074 margin-left: 58.33333333%;
2075 }
2076 .col-md-offset-6 {
2077 margin-left: 50%;
2078 }
2079 .col-md-offset-5 {
2080 margin-left: 41.66666667%;
2081 }
2082 .col-md-offset-4 {
2083 margin-left: 33.33333333%;
2084 }
2085 .col-md-offset-3 {
2086 margin-left: 25%;
2087 }
2088 .col-md-offset-2 {
2089 margin-left: 16.66666667%;
2090 }
2091 .col-md-offset-1 {
2092 margin-left: 8.33333333%;
2093 }
2094 .col-md-offset-0 {
2095 margin-left: 0;
2096 }
2097 }
2098 @media (min-width: 1200px) {
2099 .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 {
2100 float: left;
2101 }
2102 .col-lg-12 {
2103 width: 100%;
2104 }
2105 .col-lg-11 {
2106 width: 91.66666667%;
2107 }
2108 .col-lg-10 {
2109 width: 83.33333333%;
2110 }
2111 .col-lg-9 {
2112 width: 75%;
2113 }
2114 .col-lg-8 {
2115 width: 66.66666667%;
2116 }
2117 .col-lg-7 {
2118 width: 58.33333333%;
2119 }
2120 .col-lg-6 {
2121 width: 50%;
2122 }
2123 .col-lg-5 {
2124 width: 41.66666667%;
2125 }
2126 .col-lg-4 {
2127 width: 33.33333333%;
2128 }
2129 .col-lg-3 {
2130 width: 25%;
2131 }
2132 .col-lg-2 {
2133 width: 16.66666667%;
2134 }
2135 .col-lg-1 {
2136 width: 8.33333333%;
2137 }
2138 .col-lg-pull-12 {
2139 right: 100%;
2140 }
2141 .col-lg-pull-11 {
2142 right: 91.66666667%;
2143 }
2144 .col-lg-pull-10 {
2145 right: 83.33333333%;
2146 }
2147 .col-lg-pull-9 {
2148 right: 75%;
2149 }
2150 .col-lg-pull-8 {
2151 right: 66.66666667%;
2152 }
2153 .col-lg-pull-7 {
2154 right: 58.33333333%;
2155 }
2156 .col-lg-pull-6 {
2157 right: 50%;
2158 }
2159 .col-lg-pull-5 {
2160 right: 41.66666667%;
2161 }
2162 .col-lg-pull-4 {
2163 right: 33.33333333%;
2164 }
2165 .col-lg-pull-3 {
2166 right: 25%;
2167 }
2168 .col-lg-pull-2 {
2169 right: 16.66666667%;
2170 }
2171 .col-lg-pull-1 {
2172 right: 8.33333333%;
2173 }
2174 .col-lg-pull-0 {
2175 right: auto;
2176 }
2177 .col-lg-push-12 {
2178 left: 100%;
2179 }
2180 .col-lg-push-11 {
2181 left: 91.66666667%;
2182 }
2183 .col-lg-push-10 {
2184 left: 83.33333333%;
2185 }
2186 .col-lg-push-9 {
2187 left: 75%;
2188 }
2189 .col-lg-push-8 {
2190 left: 66.66666667%;
2191 }
2192 .col-lg-push-7 {
2193 left: 58.33333333%;
2194 }
2195 .col-lg-push-6 {
2196 left: 50%;
2197 }
2198 .col-lg-push-5 {
2199 left: 41.66666667%;
2200 }
2201 .col-lg-push-4 {
2202 left: 33.33333333%;
2203 }
2204 .col-lg-push-3 {
2205 left: 25%;
2206 }
2207 .col-lg-push-2 {
2208 left: 16.66666667%;
2209 }
2210 .col-lg-push-1 {
2211 left: 8.33333333%;
2212 }
2213 .col-lg-push-0 {
2214 left: auto;
2215 }
2216 .col-lg-offset-12 {
2217 margin-left: 100%;
2218 }
2219 .col-lg-offset-11 {
2220 margin-left: 91.66666667%;
2221 }
2222 .col-lg-offset-10 {
2223 margin-left: 83.33333333%;
2224 }
2225 .col-lg-offset-9 {
2226 margin-left: 75%;
2227 }
2228 .col-lg-offset-8 {
2229 margin-left: 66.66666667%;
2230 }
2231 .col-lg-offset-7 {
2232 margin-left: 58.33333333%;
2233 }
2234 .col-lg-offset-6 {
2235 margin-left: 50%;
2236 }
2237 .col-lg-offset-5 {
2238 margin-left: 41.66666667%;
2239 }
2240 .col-lg-offset-4 {
2241 margin-left: 33.33333333%;
2242 }
2243 .col-lg-offset-3 {
2244 margin-left: 25%;
2245 }
2246 .col-lg-offset-2 {
2247 margin-left: 16.66666667%;
2248 }
2249 .col-lg-offset-1 {
2250 margin-left: 8.33333333%;
2251 }
2252 .col-lg-offset-0 {
2253 margin-left: 0;
2254 }
2255 }
2256 table {
2257 background-color: transparent;
2258 }
2259 caption {
2260 padding-top: 8px;
2261 padding-bottom: 8px;
2262 color: #777;
2263 text-align: left;
2264 }
2265 th {
2266 text-align: left;
2267 }
2268 .table {
2269 width: 100%;
2270 max-width: 100%;
2271 margin-bottom: 20px;
2272 }
2273 .table > thead > tr > th,
2274 .table > tbody > tr > th,
2275 .table > tfoot > tr > th,
2276 .table > thead > tr > td,
2277 .table > tbody > tr > td,
2278 .table > tfoot > tr > td {
2279 padding: 8px;
2280 line-height: 1.42857143;
2281 vertical-align: top;
2282 border-top: 1px solid #ddd;
2283 }
2284 .table > thead > tr > th {
2285 vertical-align: bottom;
2286 border-bottom: 2px solid #ddd;
2287 }
2288 .table > caption + thead > tr:first-child > th,
2289 .table > colgroup + thead > tr:first-child > th,
2290 .table > thead:first-child > tr:first-child > th,
2291 .table > caption + thead > tr:first-child > td,
2292 .table > colgroup + thead > tr:first-child > td,
2293 .table > thead:first-child > tr:first-child > td {
2294 border-top: 0;
2295 }
2296 .table > tbody + tbody {
2297 border-top: 2px solid #ddd;
2298 }
2299 .table .table {
2300 background-color: #fff;
2301 }
2302 .table-condensed > thead > tr > th,
2303 .table-condensed > tbody > tr > th,
2304 .table-condensed > tfoot > tr > th,
2305 .table-condensed > thead > tr > td,
2306 .table-condensed > tbody > tr > td,
2307 .table-condensed > tfoot > tr > td {
2308 padding: 5px;
2309 }
2310 .table-bordered {
2311 border: 1px solid #ddd;
2312 }
2313 .table-bordered > thead > tr > th,
2314 .table-bordered > tbody > tr > th,
2315 .table-bordered > tfoot > tr > th,
2316 .table-bordered > thead > tr > td,
2317 .table-bordered > tbody > tr > td,
2318 .table-bordered > tfoot > tr > td {
2319 border: 1px solid #ddd;
2320 }
2321 .table-bordered > thead > tr > th,
2322 .table-bordered > thead > tr > td {
2323 border-bottom-width: 2px;
2324 }
2325 .table-striped > tbody > tr:nth-of-type(odd) {
2326 background-color: #f9f9f9;
2327 }
2328 .table-hover > tbody > tr:hover {
2329 background-color: #f5f5f5;
2330 }
2331 table col[class*="col-"] {
2332 position: static;
2333 display: table-column;
2334 float: none;
2335 }
2336 table td[class*="col-"],
2337 table th[class*="col-"] {
2338 position: static;
2339 display: table-cell;
2340 float: none;
2341 }
2342 .table > thead > tr > td.active,
2343 .table > tbody > tr > td.active,
2344 .table > tfoot > tr > td.active,
2345 .table > thead > tr > th.active,
2346 .table > tbody > tr > th.active,
2347 .table > tfoot > tr > th.active,
2348 .table > thead > tr.active > td,
2349 .table > tbody > tr.active > td,
2350 .table > tfoot > tr.active > td,
2351 .table > thead > tr.active > th,
2352 .table > tbody > tr.active > th,
2353 .table > tfoot > tr.active > th {
2354 background-color: #f5f5f5;
2355 }
2356 .table-hover > tbody > tr > td.active:hover,
2357 .table-hover > tbody > tr > th.active:hover,
2358 .table-hover > tbody > tr.active:hover > td,
2359 .table-hover > tbody > tr:hover > .active,
2360 .table-hover > tbody > tr.active:hover > th {
2361 background-color: #e8e8e8;
2362 }
2363 .table > thead > tr > td.success,
2364 .table > tbody > tr > td.success,
2365 .table > tfoot > tr > td.success,
2366 .table > thead > tr > th.success,
2367 .table > tbody > tr > th.success,
2368 .table > tfoot > tr > th.success,
2369 .table > thead > tr.success > td,
2370 .table > tbody > tr.success > td,
2371 .table > tfoot > tr.success > td,
2372 .table > thead > tr.success > th,
2373 .table > tbody > tr.success > th,
2374 .table > tfoot > tr.success > th {
2375 background-color: #dff0d8;
2376 }
2377 .table-hover > tbody > tr > td.success:hover,
2378 .table-hover > tbody > tr > th.success:hover,
2379 .table-hover > tbody > tr.success:hover > td,
2380 .table-hover > tbody > tr:hover > .success,
2381 .table-hover > tbody > tr.success:hover > th {
2382 background-color: #d0e9c6;
2383 }
2384 .table > thead > tr > td.info,
2385 .table > tbody > tr > td.info,
2386 .table > tfoot > tr > td.info,
2387 .table > thead > tr > th.info,
2388 .table > tbody > tr > th.info,
2389 .table > tfoot > tr > th.info,
2390 .table > thead > tr.info > td,
2391 .table > tbody > tr.info > td,
2392 .table > tfoot > tr.info > td,
2393 .table > thead > tr.info > th,
2394 .table > tbody > tr.info > th,
2395 .table > tfoot > tr.info > th {
2396 background-color: #d9edf7;
2397 }
2398 .table-hover > tbody > tr > td.info:hover,
2399 .table-hover > tbody > tr > th.info:hover,
2400 .table-hover > tbody > tr.info:hover > td,
2401 .table-hover > tbody > tr:hover > .info,
2402 .table-hover > tbody > tr.info:hover > th {
2403 background-color: #c4e3f3;
2404 }
2405 .table > thead > tr > td.warning,
2406 .table > tbody > tr > td.warning,
2407 .table > tfoot > tr > td.warning,
2408 .table > thead > tr > th.warning,
2409 .table > tbody > tr > th.warning,
2410 .table > tfoot > tr > th.warning,
2411 .table > thead > tr.warning > td,
2412 .table > tbody > tr.warning > td,
2413 .table > tfoot > tr.warning > td,
2414 .table > thead > tr.warning > th,
2415 .table > tbody > tr.warning > th,
2416 .table > tfoot > tr.warning > th {
2417 background-color: #fcf8e3;
2418 }
2419 .table-hover > tbody > tr > td.warning:hover,
2420 .table-hover > tbody > tr > th.warning:hover,
2421 .table-hover > tbody > tr.warning:hover > td,
2422 .table-hover > tbody > tr:hover > .warning,
2423 .table-hover > tbody > tr.warning:hover > th {
2424 background-color: #faf2cc;
2425 }
2426 .table > thead > tr > td.danger,
2427 .table > tbody > tr > td.danger,
2428 .table > tfoot > tr > td.danger,
2429 .table > thead > tr > th.danger,
2430 .table > tbody > tr > th.danger,
2431 .table > tfoot > tr > th.danger,
2432 .table > thead > tr.danger > td,
2433 .table > tbody > tr.danger > td,
2434 .table > tfoot > tr.danger > td,
2435 .table > thead > tr.danger > th,
2436 .table > tbody > tr.danger > th,
2437 .table > tfoot > tr.danger > th {
2438 background-color: #f2dede;
2439 }
2440 .table-hover > tbody > tr > td.danger:hover,
2441 .table-hover > tbody > tr > th.danger:hover,
2442 .table-hover > tbody > tr.danger:hover > td,
2443 .table-hover > tbody > tr:hover > .danger,
2444 .table-hover > tbody > tr.danger:hover > th {
2445 background-color: #ebcccc;
2446 }
2447 .table-responsive {
2448 min-height: .01%;
2449 overflow-x: auto;
2450 }
2451 @media screen and (max-width: 767px) {
2452 .table-responsive {
2453 width: 100%;
2454 margin-bottom: 15px;
2455 overflow-y: hidden;
2456 -ms-overflow-style: -ms-autohiding-scrollbar;
2457 border: 1px solid #ddd;
2458 }
2459 .table-responsive > .table {
2460 margin-bottom: 0;
2461 }
2462 .table-responsive > .table > thead > tr > th,
2463 .table-responsive > .table > tbody > tr > th,
2464 .table-responsive > .table > tfoot > tr > th,
2465 .table-responsive > .table > thead > tr > td,
2466 .table-responsive > .table > tbody > tr > td,
2467 .table-responsive > .table > tfoot > tr > td {
2468 white-space: nowrap;
2469 }
2470 .table-responsive > .table-bordered {
2471 border: 0;
2472 }
2473 .table-responsive > .table-bordered > thead > tr > th:first-child,
2474 .table-responsive > .table-bordered > tbody > tr > th:first-child,
2475 .table-responsive > .table-bordered > tfoot > tr > th:first-child,
2476 .table-responsive > .table-bordered > thead > tr > td:first-child,
2477 .table-responsive > .table-bordered > tbody > tr > td:first-child,
2478 .table-responsive > .table-bordered > tfoot > tr > td:first-child {
2479 border-left: 0;
2480 }
2481 .table-responsive > .table-bordered > thead > tr > th:last-child,
2482 .table-responsive > .table-bordered > tbody > tr > th:last-child,
2483 .table-responsive > .table-bordered > tfoot > tr > th:last-child,
2484 .table-responsive > .table-bordered > thead > tr > td:last-child,
2485 .table-responsive > .table-bordered > tbody > tr > td:last-child,
2486 .table-responsive > .table-bordered > tfoot > tr > td:last-child {
2487 border-right: 0;
2488 }
2489 .table-responsive > .table-bordered > tbody > tr:last-child > th,
2490 .table-responsive > .table-bordered > tfoot > tr:last-child > th,
2491 .table-responsive > .table-bordered > tbody > tr:last-child > td,
2492 .table-responsive > .table-bordered > tfoot > tr:last-child > td {
2493 border-bottom: 0;
2494 }
2495 }
2496 fieldset {
2497 min-width: 0;
2498 padding: 0;
2499 margin: 0;
2500 border: 0;
2501 }
2502 legend {
2503 display: block;
2504 width: 100%;
2505 padding: 0;
2506 margin-bottom: 20px;
2507 font-size: 21px;
2508 line-height: inherit;
2509 color: #333;
2510 border: 0;
2511 border-bottom: 1px solid #e5e5e5;
2512 }
2513 label {
2514 display: inline-block;
2515 max-width: 100%;
2516 margin-bottom: 5px;
2517 font-weight: bold;
2518 }
2519 input[type="search"] {
2520 -webkit-box-sizing: border-box;
2521 -moz-box-sizing: border-box;
2522 box-sizing: border-box;
2523 }
2524 input[type="radio"],
2525 input[type="checkbox"] {
2526 margin: 4px 0 0;
2527 margin-top: 1px \9;
2528 line-height: normal;
2529 }
2530 input[type="file"] {
2531 display: block;
2532 }
2533 input[type="range"] {
2534 display: block;
2535 width: 100%;
2536 }
2537 select[multiple],
2538 select[size] {
2539 height: auto;
2540 }
2541 input[type="file"]:focus,
2542 input[type="radio"]:focus,
2543 input[type="checkbox"]:focus {
2544 outline: 5px auto -webkit-focus-ring-color;
2545 outline-offset: -2px;
2546 }
2547 output {
2548 display: block;
2549 padding-top: 7px;
2550 font-size: 14px;
2551 line-height: 1.42857143;
2552 color: #555;
2553 }
2554 .form-control {
2555 display: block;
2556 width: 100%;
2557 height: 34px;
2558 padding: 6px 12px;
2559 font-size: 14px;
2560 line-height: 1.42857143;
2561 color: #555;
2562 background-color: #fff;
2563 background-image: none;
2564 border: 1px solid #ccc;
2565 border-radius: 4px;
2566 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2567 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2568 -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
2569 -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2570 transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
2571 }
2572 .form-control:focus {
2573 border-color: #66afe9;
2574 outline: 0;
2575 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
2576 box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
2577 }
2578 .form-control::-moz-placeholder {
2579 color: #999;
2580 opacity: 1;
2581 }
2582 .form-control:-ms-input-placeholder {
2583 color: #999;
2584 }
2585 .form-control::-webkit-input-placeholder {
2586 color: #999;
2587 }
2588 .form-control::-ms-expand {
2589 background-color: transparent;
2590 border: 0;
2591 }
2592 .form-control[disabled],
2593 .form-control[readonly],
2594 fieldset[disabled] .form-control {
2595 background-color: #eee;
2596 opacity: 1;
2597 }
2598 .form-control[disabled],
2599 fieldset[disabled] .form-control {
2600 cursor: not-allowed;
2601 }
2602 textarea.form-control {
2603 height: auto;
2604 }
2605 input[type="search"] {
2606 -webkit-appearance: none;
2607 }
2608 @media screen and (-webkit-min-device-pixel-ratio: 0) {
2609 input[type="date"].form-control,
2610 input[type="time"].form-control,
2611 input[type="datetime-local"].form-control,
2612 input[type="month"].form-control {
2613 line-height: 34px;
2614 }
2615 input[type="date"].input-sm,
2616 input[type="time"].input-sm,
2617 input[type="datetime-local"].input-sm,
2618 input[type="month"].input-sm,
2619 .input-group-sm input[type="date"],
2620 .input-group-sm input[type="time"],
2621 .input-group-sm input[type="datetime-local"],
2622 .input-group-sm input[type="month"] {
2623 line-height: 30px;
2624 }
2625 input[type="date"].input-lg,
2626 input[type="time"].input-lg,
2627 input[type="datetime-local"].input-lg,
2628 input[type="month"].input-lg,
2629 .input-group-lg input[type="date"],
2630 .input-group-lg input[type="time"],
2631 .input-group-lg input[type="datetime-local"],
2632 .input-group-lg input[type="month"] {
2633 line-height: 46px;
2634 }
2635 }
2636 .form-group {
2637 margin-bottom: 15px;
2638 }
2639 .radio,
2640 .checkbox {
2641 position: relative;
2642 display: block;
2643 margin-top: 10px;
2644 margin-bottom: 10px;
2645 }
2646 .radio label,
2647 .checkbox label {
2648 min-height: 20px;
2649 padding-left: 20px;
2650 margin-bottom: 0;
2651 font-weight: normal;
2652 cursor: pointer;
2653 }
2654 .radio input[type="radio"],
2655 .radio-inline input[type="radio"],
2656 .checkbox input[type="checkbox"],
2657 .checkbox-inline input[type="checkbox"] {
2658 position: absolute;
2659 margin-top: 4px \9;
2660 margin-left: -20px;
2661 }
2662 .radio + .radio,
2663 .checkbox + .checkbox {
2664 margin-top: -5px;
2665 }
2666 .radio-inline,
2667 .checkbox-inline {
2668 position: relative;
2669 display: inline-block;
2670 padding-left: 20px;
2671 margin-bottom: 0;
2672 font-weight: normal;
2673 vertical-align: middle;
2674 cursor: pointer;
2675 }
2676 .radio-inline + .radio-inline,
2677 .checkbox-inline + .checkbox-inline {
2678 margin-top: 0;
2679 margin-left: 10px;
2680 }
2681 input[type="radio"][disabled],
2682 input[type="checkbox"][disabled],
2683 input[type="radio"].disabled,
2684 input[type="checkbox"].disabled,
2685 fieldset[disabled] input[type="radio"],
2686 fieldset[disabled] input[type="checkbox"] {
2687 cursor: not-allowed;
2688 }
2689 .radio-inline.disabled,
2690 .checkbox-inline.disabled,
2691 fieldset[disabled] .radio-inline,
2692 fieldset[disabled] .checkbox-inline {
2693 cursor: not-allowed;
2694 }
2695 .radio.disabled label,
2696 .checkbox.disabled label,
2697 fieldset[disabled] .radio label,
2698 fieldset[disabled] .checkbox label {
2699 cursor: not-allowed;
2700 }
2701 .form-control-static {
2702 min-height: 34px;
2703 padding-top: 7px;
2704 padding-bottom: 7px;
2705 margin-bottom: 0;
2706 }
2707 .form-control-static.input-lg,
2708 .form-control-static.input-sm {
2709 padding-right: 0;
2710 padding-left: 0;
2711 }
2712 .input-sm {
2713 height: 30px;
2714 padding: 5px 10px;
2715 font-size: 12px;
2716 line-height: 1.5;
2717 border-radius: 3px;
2718 }
2719 select.input-sm {
2720 height: 30px;
2721 line-height: 30px;
2722 }
2723 textarea.input-sm,
2724 select[multiple].input-sm {
2725 height: auto;
2726 }
2727 .form-group-sm .form-control {
2728 height: 30px;
2729 padding: 5px 10px;
2730 font-size: 12px;
2731 line-height: 1.5;
2732 border-radius: 3px;
2733 }
2734 .form-group-sm select.form-control {
2735 height: 30px;
2736 line-height: 30px;
2737 }
2738 .form-group-sm textarea.form-control,
2739 .form-group-sm select[multiple].form-control {
2740 height: auto;
2741 }
2742 .form-group-sm .form-control-static {
2743 height: 30px;
2744 min-height: 32px;
2745 padding: 6px 10px;
2746 font-size: 12px;
2747 line-height: 1.5;
2748 }
2749 .input-lg {
2750 height: 46px;
2751 padding: 10px 16px;
2752 font-size: 18px;
2753 line-height: 1.3333333;
2754 border-radius: 6px;
2755 }
2756 select.input-lg {
2757 height: 46px;
2758 line-height: 46px;
2759 }
2760 textarea.input-lg,
2761 select[multiple].input-lg {
2762 height: auto;
2763 }
2764 .form-group-lg .form-control {
2765 height: 46px;
2766 padding: 10px 16px;
2767 font-size: 18px;
2768 line-height: 1.3333333;
2769 border-radius: 6px;
2770 }
2771 .form-group-lg select.form-control {
2772 height: 46px;
2773 line-height: 46px;
2774 }
2775 .form-group-lg textarea.form-control,
2776 .form-group-lg select[multiple].form-control {
2777 height: auto;
2778 }
2779 .form-group-lg .form-control-static {
2780 height: 46px;
2781 min-height: 38px;
2782 padding: 11px 16px;
2783 font-size: 18px;
2784 line-height: 1.3333333;
2785 }
2786 .has-feedback {
2787 position: relative;
2788 }
2789 .has-feedback .form-control {
2790 padding-right: 42.5px;
2791 }
2792 .form-control-feedback {
2793 position: absolute;
2794 top: 0;
2795 right: 0;
2796 z-index: 2;
2797 display: block;
2798 width: 34px;
2799 height: 34px;
2800 line-height: 34px;
2801 text-align: center;
2802 pointer-events: none;
2803 }
2804 .input-lg + .form-control-feedback,
2805 .input-group-lg + .form-control-feedback,
2806 .form-group-lg .form-control + .form-control-feedback {
2807 width: 46px;
2808 height: 46px;
2809 line-height: 46px;
2810 }
2811 .input-sm + .form-control-feedback,
2812 .input-group-sm + .form-control-feedback,
2813 .form-group-sm .form-control + .form-control-feedback {
2814 width: 30px;
2815 height: 30px;
2816 line-height: 30px;
2817 }
2818 .has-success .help-block,
2819 .has-success .control-label,
2820 .has-success .radio,
2821 .has-success .checkbox,
2822 .has-success .radio-inline,
2823 .has-success .checkbox-inline,
2824 .has-success.radio label,
2825 .has-success.checkbox label,
2826 .has-success.radio-inline label,
2827 .has-success.checkbox-inline label {
2828 color: #3c763d;
2829 }
2830 .has-success .form-control {
2831 border-color: #3c763d;
2832 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2833 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2834 }
2835 .has-success .form-control:focus {
2836 border-color: #2b542c;
2837 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
2838 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
2839 }
2840 .has-success .input-group-addon {
2841 color: #3c763d;
2842 background-color: #dff0d8;
2843 border-color: #3c763d;
2844 }
2845 .has-success .form-control-feedback {
2846 color: #3c763d;
2847 }
2848 .has-warning .help-block,
2849 .has-warning .control-label,
2850 .has-warning .radio,
2851 .has-warning .checkbox,
2852 .has-warning .radio-inline,
2853 .has-warning .checkbox-inline,
2854 .has-warning.radio label,
2855 .has-warning.checkbox label,
2856 .has-warning.radio-inline label,
2857 .has-warning.checkbox-inline label {
2858 color: #8a6d3b;
2859 }
2860 .has-warning .form-control {
2861 border-color: #8a6d3b;
2862 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2863 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2864 }
2865 .has-warning .form-control:focus {
2866 border-color: #66512c;
2867 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
2868 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
2869 }
2870 .has-warning .input-group-addon {
2871 color: #8a6d3b;
2872 background-color: #fcf8e3;
2873 border-color: #8a6d3b;
2874 }
2875 .has-warning .form-control-feedback {
2876 color: #8a6d3b;
2877 }
2878 .has-error .help-block,
2879 .has-error .control-label,
2880 .has-error .radio,
2881 .has-error .checkbox,
2882 .has-error .radio-inline,
2883 .has-error .checkbox-inline,
2884 .has-error.radio label,
2885 .has-error.checkbox label,
2886 .has-error.radio-inline label,
2887 .has-error.checkbox-inline label {
2888 color: #a94442;
2889 }
2890 .has-error .form-control {
2891 border-color: #a94442;
2892 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2893 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
2894 }
2895 .has-error .form-control:focus {
2896 border-color: #843534;
2897 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
2898 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
2899 }
2900 .has-error .input-group-addon {
2901 color: #a94442;
2902 background-color: #f2dede;
2903 border-color: #a94442;
2904 }
2905 .has-error .form-control-feedback {
2906 color: #a94442;
2907 }
2908 .has-feedback label ~ .form-control-feedback {
2909 top: 25px;
2910 }
2911 .has-feedback label.sr-only ~ .form-control-feedback {
2912 top: 0;
2913 }
2914 .help-block {
2915 display: block;
2916 margin-top: 5px;
2917 margin-bottom: 10px;
2918 color: #737373;
2919 }
2920 @media (min-width: 768px) {
2921 .form-inline .form-group {
2922 display: inline-block;
2923 margin-bottom: 0;
2924 vertical-align: middle;
2925 }
2926 .form-inline .form-control {
2927 display: inline-block;
2928 width: auto;
2929 vertical-align: middle;
2930 }
2931 .form-inline .form-control-static {
2932 display: inline-block;
2933 }
2934 .form-inline .input-group {
2935 display: inline-table;
2936 vertical-align: middle;
2937 }
2938 .form-inline .input-group .input-group-addon,
2939 .form-inline .input-group .input-group-btn,
2940 .form-inline .input-group .form-control {
2941 width: auto;
2942 }
2943 .form-inline .input-group > .form-control {
2944 width: 100%;
2945 }
2946 .form-inline .control-label {
2947 margin-bottom: 0;
2948 vertical-align: middle;
2949 }
2950 .form-inline .radio,
2951 .form-inline .checkbox {
2952 display: inline-block;
2953 margin-top: 0;
2954 margin-bottom: 0;
2955 vertical-align: middle;
2956 }
2957 .form-inline .radio label,
2958 .form-inline .checkbox label {
2959 padding-left: 0;
2960 }
2961 .form-inline .radio input[type="radio"],
2962 .form-inline .checkbox input[type="checkbox"] {
2963 position: relative;
2964 margin-left: 0;
2965 }
2966 .form-inline .has-feedback .form-control-feedback {
2967 top: 0;
2968 }
2969 }
2970 .form-horizontal .radio,
2971 .form-horizontal .checkbox,
2972 .form-horizontal .radio-inline,
2973 .form-horizontal .checkbox-inline {
2974 padding-top: 7px;
2975 margin-top: 0;
2976 margin-bottom: 0;
2977 }
2978 .form-horizontal .radio,
2979 .form-horizontal .checkbox {
2980 min-height: 27px;
2981 }
2982 .form-horizontal .form-group {
2983 margin-right: -15px;
2984 margin-left: -15px;
2985 }
2986 @media (min-width: 768px) {
2987 .form-horizontal .control-label {
2988 padding-top: 7px;
2989 margin-bottom: 0;
2990 text-align: right;
2991 }
2992 }
2993 .form-horizontal .has-feedback .form-control-feedback {
2994 right: 15px;
2995 }
2996 @media (min-width: 768px) {
2997 .form-horizontal .form-group-lg .control-label {
2998 padding-top: 11px;
2999 font-size: 18px;
3000 }
3001 }
3002 @media (min-width: 768px) {
3003 .form-horizontal .form-group-sm .control-label {
3004 padding-top: 6px;
3005 font-size: 12px;
3006 }
3007 }
3008 .btn {
3009 display: inline-block;
3010 padding: 6px 12px;
3011 margin-bottom: 0;
3012 font-size: 14px;
3013 font-weight: normal;
3014 line-height: 1.42857143;
3015 text-align: center;
3016 white-space: nowrap;
3017 vertical-align: middle;
3018 -ms-touch-action: manipulation;
3019 touch-action: manipulation;
3020 cursor: pointer;
3021 -webkit-user-select: none;
3022 -moz-user-select: none;
3023 -ms-user-select: none;
3024 user-select: none;
3025 background-image: none;
3026 border: 1px solid transparent;
3027 border-radius: 4px;
3028 }
3029 .btn:focus,
3030 .btn:active:focus,
3031 .btn.active:focus,
3032 .btn.focus,
3033 .btn:active.focus,
3034 .btn.active.focus {
3035 outline: 5px auto -webkit-focus-ring-color;
3036 outline-offset: -2px;
3037 }
3038 .btn:hover,
3039 .btn:focus,
3040 .btn.focus {
3041 color: #333;
3042 text-decoration: none;
3043 }
3044 .btn:active,
3045 .btn.active {
3046 background-image: none;
3047 outline: 0;
3048 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3049 box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3050 }
3051 .btn.disabled,
3052 .btn[disabled],
3053 fieldset[disabled] .btn {
3054 cursor: not-allowed;
3055 filter: alpha(opacity=65);
3056 -webkit-box-shadow: none;
3057 box-shadow: none;
3058 opacity: .65;
3059 }
3060 a.btn.disabled,
3061 fieldset[disabled] a.btn {
3062 pointer-events: none;
3063 }
3064 .btn-default {
3065 color: #333;
3066 background-color: #fff;
3067 border-color: #ccc;
3068 }
3069 .btn-default:focus,
3070 .btn-default.focus {
3071 color: #333;
3072 background-color: #e6e6e6;
3073 border-color: #8c8c8c;
3074 }
3075 .btn-default:hover {
3076 color: #333;
3077 background-color: #e6e6e6;
3078 border-color: #adadad;
3079 }
3080 .btn-default:active,
3081 .btn-default.active,
3082 .open > .dropdown-toggle.btn-default {
3083 color: #333;
3084 background-color: #e6e6e6;
3085 border-color: #adadad;
3086 }
3087 .btn-default:active:hover,
3088 .btn-default.active:hover,
3089 .open > .dropdown-toggle.btn-default:hover,
3090 .btn-default:active:focus,
3091 .btn-default.active:focus,
3092 .open > .dropdown-toggle.btn-default:focus,
3093 .btn-default:active.focus,
3094 .btn-default.active.focus,
3095 .open > .dropdown-toggle.btn-default.focus {
3096 color: #333;
3097 background-color: #d4d4d4;
3098 border-color: #8c8c8c;
3099 }
3100 .btn-default:active,
3101 .btn-default.active,
3102 .open > .dropdown-toggle.btn-default {
3103 background-image: none;
3104 }
3105 .btn-default.disabled:hover,
3106 .btn-default[disabled]:hover,
3107 fieldset[disabled] .btn-default:hover,
3108 .btn-default.disabled:focus,
3109 .btn-default[disabled]:focus,
3110 fieldset[disabled] .btn-default:focus,
3111 .btn-default.disabled.focus,
3112 .btn-default[disabled].focus,
3113 fieldset[disabled] .btn-default.focus {
3114 background-color: #fff;
3115 border-color: #ccc;
3116 }
3117 .btn-default .badge {
3118 color: #fff;
3119 background-color: #333;
3120 }
3121 .btn-primary {
3122 color: #fff;
3123 background-color: #337ab7;
3124 border-color: #2e6da4;
3125 }
3126 .btn-primary:focus,
3127 .btn-primary.focus {
3128 color: #fff;
3129 background-color: #286090;
3130 border-color: #122b40;
3131 }
3132 .btn-primary:hover {
3133 color: #fff;
3134 background-color: #286090;
3135 border-color: #204d74;
3136 }
3137 .btn-primary:active,
3138 .btn-primary.active,
3139 .open > .dropdown-toggle.btn-primary {
3140 color: #fff;
3141 background-color: #286090;
3142 border-color: #204d74;
3143 }
3144 .btn-primary:active:hover,
3145 .btn-primary.active:hover,
3146 .open > .dropdown-toggle.btn-primary:hover,
3147 .btn-primary:active:focus,
3148 .btn-primary.active:focus,
3149 .open > .dropdown-toggle.btn-primary:focus,
3150 .btn-primary:active.focus,
3151 .btn-primary.active.focus,
3152 .open > .dropdown-toggle.btn-primary.focus {
3153 color: #fff;
3154 background-color: #204d74;
3155 border-color: #122b40;
3156 }
3157 .btn-primary:active,
3158 .btn-primary.active,
3159 .open > .dropdown-toggle.btn-primary {
3160 background-image: none;
3161 }
3162 .btn-primary.disabled:hover,
3163 .btn-primary[disabled]:hover,
3164 fieldset[disabled] .btn-primary:hover,
3165 .btn-primary.disabled:focus,
3166 .btn-primary[disabled]:focus,
3167 fieldset[disabled] .btn-primary:focus,
3168 .btn-primary.disabled.focus,
3169 .btn-primary[disabled].focus,
3170 fieldset[disabled] .btn-primary.focus {
3171 background-color: #337ab7;
3172 border-color: #2e6da4;
3173 }
3174 .btn-primary .badge {
3175 color: #337ab7;
3176 background-color: #fff;
3177 }
3178 .btn-success {
3179 color: #fff;
3180 background-color: #5cb85c;
3181 border-color: #4cae4c;
3182 }
3183 .btn-success:focus,
3184 .btn-success.focus {
3185 color: #fff;
3186 background-color: #449d44;
3187 border-color: #255625;
3188 }
3189 .btn-success:hover {
3190 color: #fff;
3191 background-color: #449d44;
3192 border-color: #398439;
3193 }
3194 .btn-success:active,
3195 .btn-success.active,
3196 .open > .dropdown-toggle.btn-success {
3197 color: #fff;
3198 background-color: #449d44;
3199 border-color: #398439;
3200 }
3201 .btn-success:active:hover,
3202 .btn-success.active:hover,
3203 .open > .dropdown-toggle.btn-success:hover,
3204 .btn-success:active:focus,
3205 .btn-success.active:focus,
3206 .open > .dropdown-toggle.btn-success:focus,
3207 .btn-success:active.focus,
3208 .btn-success.active.focus,
3209 .open > .dropdown-toggle.btn-success.focus {
3210 color: #fff;
3211 background-color: #398439;
3212 border-color: #255625;
3213 }
3214 .btn-success:active,
3215 .btn-success.active,
3216 .open > .dropdown-toggle.btn-success {
3217 background-image: none;
3218 }
3219 .btn-success.disabled:hover,
3220 .btn-success[disabled]:hover,
3221 fieldset[disabled] .btn-success:hover,
3222 .btn-success.disabled:focus,
3223 .btn-success[disabled]:focus,
3224 fieldset[disabled] .btn-success:focus,
3225 .btn-success.disabled.focus,
3226 .btn-success[disabled].focus,
3227 fieldset[disabled] .btn-success.focus {
3228 background-color: #5cb85c;
3229 border-color: #4cae4c;
3230 }
3231 .btn-success .badge {
3232 color: #5cb85c;
3233 background-color: #fff;
3234 }
3235 .btn-info {
3236 color: #fff;
3237 background-color: #5bc0de;
3238 border-color: #46b8da;
3239 }
3240 .btn-info:focus,
3241 .btn-info.focus {
3242 color: #fff;
3243 background-color: #31b0d5;
3244 border-color: #1b6d85;
3245 }
3246 .btn-info:hover {
3247 color: #fff;
3248 background-color: #31b0d5;
3249 border-color: #269abc;
3250 }
3251 .btn-info:active,
3252 .btn-info.active,
3253 .open > .dropdown-toggle.btn-info {
3254 color: #fff;
3255 background-color: #31b0d5;
3256 border-color: #269abc;
3257 }
3258 .btn-info:active:hover,
3259 .btn-info.active:hover,
3260 .open > .dropdown-toggle.btn-info:hover,
3261 .btn-info:active:focus,
3262 .btn-info.active:focus,
3263 .open > .dropdown-toggle.btn-info:focus,
3264 .btn-info:active.focus,
3265 .btn-info.active.focus,
3266 .open > .dropdown-toggle.btn-info.focus {
3267 color: #fff;
3268 background-color: #269abc;
3269 border-color: #1b6d85;
3270 }
3271 .btn-info:active,
3272 .btn-info.active,
3273 .open > .dropdown-toggle.btn-info {
3274 background-image: none;
3275 }
3276 .btn-info.disabled:hover,
3277 .btn-info[disabled]:hover,
3278 fieldset[disabled] .btn-info:hover,
3279 .btn-info.disabled:focus,
3280 .btn-info[disabled]:focus,
3281 fieldset[disabled] .btn-info:focus,
3282 .btn-info.disabled.focus,
3283 .btn-info[disabled].focus,
3284 fieldset[disabled] .btn-info.focus {
3285 background-color: #5bc0de;
3286 border-color: #46b8da;
3287 }
3288 .btn-info .badge {
3289 color: #5bc0de;
3290 background-color: #fff;
3291 }
3292 .btn-warning {
3293 color: #fff;
3294 background-color: #f0ad4e;
3295 border-color: #eea236;
3296 }
3297 .btn-warning:focus,
3298 .btn-warning.focus {
3299 color: #fff;
3300 background-color: #ec971f;
3301 border-color: #985f0d;
3302 }
3303 .btn-warning:hover {
3304 color: #fff;
3305 background-color: #ec971f;
3306 border-color: #d58512;
3307 }
3308 .btn-warning:active,
3309 .btn-warning.active,
3310 .open > .dropdown-toggle.btn-warning {
3311 color: #fff;
3312 background-color: #ec971f;
3313 border-color: #d58512;
3314 }
3315 .btn-warning:active:hover,
3316 .btn-warning.active:hover,
3317 .open > .dropdown-toggle.btn-warning:hover,
3318 .btn-warning:active:focus,
3319 .btn-warning.active:focus,
3320 .open > .dropdown-toggle.btn-warning:focus,
3321 .btn-warning:active.focus,
3322 .btn-warning.active.focus,
3323 .open > .dropdown-toggle.btn-warning.focus {
3324 color: #fff;
3325 background-color: #d58512;
3326 border-color: #985f0d;
3327 }
3328 .btn-warning:active,
3329 .btn-warning.active,
3330 .open > .dropdown-toggle.btn-warning {
3331 background-image: none;
3332 }
3333 .btn-warning.disabled:hover,
3334 .btn-warning[disabled]:hover,
3335 fieldset[disabled] .btn-warning:hover,
3336 .btn-warning.disabled:focus,
3337 .btn-warning[disabled]:focus,
3338 fieldset[disabled] .btn-warning:focus,
3339 .btn-warning.disabled.focus,
3340 .btn-warning[disabled].focus,
3341 fieldset[disabled] .btn-warning.focus {
3342 background-color: #f0ad4e;
3343 border-color: #eea236;
3344 }
3345 .btn-warning .badge {
3346 color: #f0ad4e;
3347 background-color: #fff;
3348 }
3349 .btn-danger {
3350 color: #fff;
3351 background-color: #d9534f;
3352 border-color: #d43f3a;
3353 }
3354 .btn-danger:focus,
3355 .btn-danger.focus {
3356 color: #fff;
3357 background-color: #c9302c;
3358 border-color: #761c19;
3359 }
3360 .btn-danger:hover {
3361 color: #fff;
3362 background-color: #c9302c;
3363 border-color: #ac2925;
3364 }
3365 .btn-danger:active,
3366 .btn-danger.active,
3367 .open > .dropdown-toggle.btn-danger {
3368 color: #fff;
3369 background-color: #c9302c;
3370 border-color: #ac2925;
3371 }
3372 .btn-danger:active:hover,
3373 .btn-danger.active:hover,
3374 .open > .dropdown-toggle.btn-danger:hover,
3375 .btn-danger:active:focus,
3376 .btn-danger.active:focus,
3377 .open > .dropdown-toggle.btn-danger:focus,
3378 .btn-danger:active.focus,
3379 .btn-danger.active.focus,
3380 .open > .dropdown-toggle.btn-danger.focus {
3381 color: #fff;
3382 background-color: #ac2925;
3383 border-color: #761c19;
3384 }
3385 .btn-danger:active,
3386 .btn-danger.active,
3387 .open > .dropdown-toggle.btn-danger {
3388 background-image: none;
3389 }
3390 .btn-danger.disabled:hover,
3391 .btn-danger[disabled]:hover,
3392 fieldset[disabled] .btn-danger:hover,
3393 .btn-danger.disabled:focus,
3394 .btn-danger[disabled]:focus,
3395 fieldset[disabled] .btn-danger:focus,
3396 .btn-danger.disabled.focus,
3397 .btn-danger[disabled].focus,
3398 fieldset[disabled] .btn-danger.focus {
3399 background-color: #d9534f;
3400 border-color: #d43f3a;
3401 }
3402 .btn-danger .badge {
3403 color: #d9534f;
3404 background-color: #fff;
3405 }
3406 .btn-link {
3407 font-weight: normal;
3408 color: #337ab7;
3409 border-radius: 0;
3410 }
3411 .btn-link,
3412 .btn-link:active,
3413 .btn-link.active,
3414 .btn-link[disabled],
3415 fieldset[disabled] .btn-link {
3416 background-color: transparent;
3417 -webkit-box-shadow: none;
3418 box-shadow: none;
3419 }
3420 .btn-link,
3421 .btn-link:hover,
3422 .btn-link:focus,
3423 .btn-link:active {
3424 border-color: transparent;
3425 }
3426 .btn-link:hover,
3427 .btn-link:focus {
3428 color: #23527c;
3429 text-decoration: underline;
3430 background-color: transparent;
3431 }
3432 .btn-link[disabled]:hover,
3433 fieldset[disabled] .btn-link:hover,
3434 .btn-link[disabled]:focus,
3435 fieldset[disabled] .btn-link:focus {
3436 color: #777;
3437 text-decoration: none;
3438 }
3439 .btn-lg,
3440 .btn-group-lg > .btn {
3441 padding: 10px 16px;
3442 font-size: 18px;
3443 line-height: 1.3333333;
3444 border-radius: 6px;
3445 }
3446 .btn-sm,
3447 .btn-group-sm > .btn {
3448 padding: 5px 10px;
3449 font-size: 12px;
3450 line-height: 1.5;
3451 border-radius: 3px;
3452 }
3453 .btn-xs,
3454 .btn-group-xs > .btn {
3455 padding: 1px 5px;
3456 font-size: 12px;
3457 line-height: 1.5;
3458 border-radius: 3px;
3459 }
3460 .btn-block {
3461 display: block;
3462 width: 100%;
3463 }
3464 .btn-block + .btn-block {
3465 margin-top: 5px;
3466 }
3467 input[type="submit"].btn-block,
3468 input[type="reset"].btn-block,
3469 input[type="button"].btn-block {
3470 width: 100%;
3471 }
3472 .fade {
3473 opacity: 0;
3474 -webkit-transition: opacity .15s linear;
3475 -o-transition: opacity .15s linear;
3476 transition: opacity .15s linear;
3477 }
3478 .fade.in {
3479 opacity: 1;
3480 }
3481 .collapse {
3482 display: none;
3483 }
3484 .collapse.in {
3485 display: block;
3486 }
3487 tr.collapse.in {
3488 display: table-row;
3489 }
3490 tbody.collapse.in {
3491 display: table-row-group;
3492 }
3493 .collapsing {
3494 position: relative;
3495 height: 0;
3496 overflow: hidden;
3497 -webkit-transition-timing-function: ease;
3498 -o-transition-timing-function: ease;
3499 transition-timing-function: ease;
3500 -webkit-transition-duration: .35s;
3501 -o-transition-duration: .35s;
3502 transition-duration: .35s;
3503 -webkit-transition-property: height, visibility;
3504 -o-transition-property: height, visibility;
3505 transition-property: height, visibility;
3506 }
3507 .caret {
3508 display: inline-block;
3509 width: 0;
3510 height: 0;
3511 margin-left: 2px;
3512 vertical-align: middle;
3513 border-top: 4px dashed;
3514 border-top: 4px solid \9;
3515 border-right: 4px solid transparent;
3516 border-left: 4px solid transparent;
3517 }
3518 .dropup,
3519 .dropdown {
3520 position: relative;
3521 }
3522 .dropdown-toggle:focus {
3523 outline: 0;
3524 }
3525 .dropdown-menu {
3526 position: absolute;
3527 top: 100%;
3528 left: 0;
3529 z-index: 1000;
3530 display: none;
3531 float: left;
3532 min-width: 160px;
3533 padding: 5px 0;
3534 margin: 2px 0 0;
3535 font-size: 14px;
3536 text-align: left;
3537 list-style: none;
3538 background-color: #fff;
3539 -webkit-background-clip: padding-box;
3540 background-clip: padding-box;
3541 border: 1px solid #ccc;
3542 border: 1px solid rgba(0, 0, 0, .15);
3543 border-radius: 4px;
3544 -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
3545 box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
3546 }
3547 .dropdown-menu.pull-right {
3548 right: 0;
3549 left: auto;
3550 }
3551 .dropdown-menu .divider {
3552 height: 1px;
3553 margin: 9px 0;
3554 overflow: hidden;
3555 background-color: #e5e5e5;
3556 }
3557 .dropdown-menu > li > a {
3558 display: block;
3559 padding: 3px 20px;
3560 clear: both;
3561 font-weight: normal;
3562 line-height: 1.42857143;
3563 color: #333;
3564 white-space: nowrap;
3565 }
3566 .dropdown-menu > li > a:hover,
3567 .dropdown-menu > li > a:focus {
3568 color: #262626;
3569 text-decoration: none;
3570 background-color: #f5f5f5;
3571 }
3572 .dropdown-menu > .active > a,
3573 .dropdown-menu > .active > a:hover,
3574 .dropdown-menu > .active > a:focus {
3575 color: #fff;
3576 text-decoration: none;
3577 background-color: #337ab7;
3578 outline: 0;
3579 }
3580 .dropdown-menu > .disabled > a,
3581 .dropdown-menu > .disabled > a:hover,
3582 .dropdown-menu > .disabled > a:focus {
3583 color: #777;
3584 }
3585 .dropdown-menu > .disabled > a:hover,
3586 .dropdown-menu > .disabled > a:focus {
3587 text-decoration: none;
3588 cursor: not-allowed;
3589 background-color: transparent;
3590 background-image: none;
3591 filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
3592 }
3593 .open > .dropdown-menu {
3594 display: block;
3595 }
3596 .open > a {
3597 outline: 0;
3598 }
3599 .dropdown-menu-right {
3600 right: 0;
3601 left: auto;
3602 }
3603 .dropdown-menu-left {
3604 right: auto;
3605 left: 0;
3606 }
3607 .dropdown-header {
3608 display: block;
3609 padding: 3px 20px;
3610 font-size: 12px;
3611 line-height: 1.42857143;
3612 color: #777;
3613 white-space: nowrap;
3614 }
3615 .dropdown-backdrop {
3616 position: fixed;
3617 top: 0;
3618 right: 0;
3619 bottom: 0;
3620 left: 0;
3621 z-index: 990;
3622 }
3623 .pull-right > .dropdown-menu {
3624 right: 0;
3625 left: auto;
3626 }
3627 .dropup .caret,
3628 .navbar-fixed-bottom .dropdown .caret {
3629 content: "";
3630 border-top: 0;
3631 border-bottom: 4px dashed;
3632 border-bottom: 4px solid \9;
3633 }
3634 .dropup .dropdown-menu,
3635 .navbar-fixed-bottom .dropdown .dropdown-menu {
3636 top: auto;
3637 bottom: 100%;
3638 margin-bottom: 2px;
3639 }
3640 @media (min-width: 768px) {
3641 .navbar-right .dropdown-menu {
3642 right: 0;
3643 left: auto;
3644 }
3645 .navbar-right .dropdown-menu-left {
3646 right: auto;
3647 left: 0;
3648 }
3649 }
3650 .btn-group,
3651 .btn-group-vertical {
3652 position: relative;
3653 display: inline-block;
3654 vertical-align: middle;
3655 }
3656 .btn-group > .btn,
3657 .btn-group-vertical > .btn {
3658 position: relative;
3659 float: left;
3660 }
3661 .btn-group > .btn:hover,
3662 .btn-group-vertical > .btn:hover,
3663 .btn-group > .btn:focus,
3664 .btn-group-vertical > .btn:focus,
3665 .btn-group > .btn:active,
3666 .btn-group-vertical > .btn:active,
3667 .btn-group > .btn.active,
3668 .btn-group-vertical > .btn.active {
3669 z-index: 2;
3670 }
3671 .btn-group .btn + .btn,
3672 .btn-group .btn + .btn-group,
3673 .btn-group .btn-group + .btn,
3674 .btn-group .btn-group + .btn-group {
3675 margin-left: -1px;
3676 }
3677 .btn-toolbar {
3678 margin-left: -5px;
3679 }
3680 .btn-toolbar .btn,
3681 .btn-toolbar .btn-group,
3682 .btn-toolbar .input-group {
3683 float: left;
3684 }
3685 .btn-toolbar > .btn,
3686 .btn-toolbar > .btn-group,
3687 .btn-toolbar > .input-group {
3688 margin-left: 5px;
3689 }
3690 .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
3691 border-radius: 0;
3692 }
3693 .btn-group > .btn:first-child {
3694 margin-left: 0;
3695 }
3696 .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
3697 border-top-right-radius: 0;
3698 border-bottom-right-radius: 0;
3699 }
3700 .btn-group > .btn:last-child:not(:first-child),
3701 .btn-group > .dropdown-toggle:not(:first-child) {
3702 border-top-left-radius: 0;
3703 border-bottom-left-radius: 0;
3704 }
3705 .btn-group > .btn-group {
3706 float: left;
3707 }
3708 .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
3709 border-radius: 0;
3710 }
3711 .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
3712 .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
3713 border-top-right-radius: 0;
3714 border-bottom-right-radius: 0;
3715 }
3716 .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
3717 border-top-left-radius: 0;
3718 border-bottom-left-radius: 0;
3719 }
3720 .btn-group .dropdown-toggle:active,
3721 .btn-group.open .dropdown-toggle {
3722 outline: 0;
3723 }
3724 .btn-group > .btn + .dropdown-toggle {
3725 padding-right: 8px;
3726 padding-left: 8px;
3727 }
3728 .btn-group > .btn-lg + .dropdown-toggle {
3729 padding-right: 12px;
3730 padding-left: 12px;
3731 }
3732 .btn-group.open .dropdown-toggle {
3733 -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3734 box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
3735 }
3736 .btn-group.open .dropdown-toggle.btn-link {
3737 -webkit-box-shadow: none;
3738 box-shadow: none;
3739 }
3740 .btn .caret {
3741 margin-left: 0;
3742 }
3743 .btn-lg .caret {
3744 border-width: 5px 5px 0;
3745 border-bottom-width: 0;
3746 }
3747 .dropup .btn-lg .caret {
3748 border-width: 0 5px 5px;
3749 }
3750 .btn-group-vertical > .btn,
3751 .btn-group-vertical > .btn-group,
3752 .btn-group-vertical > .btn-group > .btn {
3753 display: block;
3754 float: none;
3755 width: 100%;
3756 max-width: 100%;
3757 }
3758 .btn-group-vertical > .btn-group > .btn {
3759 float: none;
3760 }
3761 .btn-group-vertical > .btn + .btn,
3762 .btn-group-vertical > .btn + .btn-group,
3763 .btn-group-vertical > .btn-group + .btn,
3764 .btn-group-vertical > .btn-group + .btn-group {
3765 margin-top: -1px;
3766 margin-left: 0;
3767 }
3768 .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
3769 border-radius: 0;
3770 }
3771 .btn-group-vertical > .btn:first-child:not(:last-child) {
3772 border-top-left-radius: 4px;
3773 border-top-right-radius: 4px;
3774 border-bottom-right-radius: 0;
3775 border-bottom-left-radius: 0;
3776 }
3777 .btn-group-vertical > .btn:last-child:not(:first-child) {
3778 border-top-left-radius: 0;
3779 border-top-right-radius: 0;
3780 border-bottom-right-radius: 4px;
3781 border-bottom-left-radius: 4px;
3782 }
3783 .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
3784 border-radius: 0;
3785 }
3786 .btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
3787 .btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
3788 border-bottom-right-radius: 0;
3789 border-bottom-left-radius: 0;
3790 }
3791 .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
3792 border-top-left-radius: 0;
3793 border-top-right-radius: 0;
3794 }
3795 .btn-group-justified {
3796 display: table;
3797 width: 100%;
3798 table-layout: fixed;
3799 border-collapse: separate;
3800 }
3801 .btn-group-justified > .btn,
3802 .btn-group-justified > .btn-group {
3803 display: table-cell;
3804 float: none;
3805 width: 1%;
3806 }
3807 .btn-group-justified > .btn-group .btn {
3808 width: 100%;
3809 }
3810 .btn-group-justified > .btn-group .dropdown-menu {
3811 left: auto;
3812 }
3813 [data-toggle="buttons"] > .btn input[type="radio"],
3814 [data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
3815 [data-toggle="buttons"] > .btn input[type="checkbox"],
3816 [data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
3817 position: absolute;
3818 clip: rect(0, 0, 0, 0);
3819 pointer-events: none;
3820 }
3821 .input-group {
3822 position: relative;
3823 display: table;
3824 border-collapse: separate;
3825 }
3826 .input-group[class*="col-"] {
3827 float: none;
3828 padding-right: 0;
3829 padding-left: 0;
3830 }
3831 .input-group .form-control {
3832 position: relative;
3833 z-index: 2;
3834 float: left;
3835 width: 100%;
3836 margin-bottom: 0;
3837 }
3838 .input-group .form-control:focus {
3839 z-index: 3;
3840 }
3841 .input-group-lg > .form-control,
3842 .input-group-lg > .input-group-addon,
3843 .input-group-lg > .input-group-btn > .btn {
3844 height: 46px;
3845 padding: 10px 16px;
3846 font-size: 18px;
3847 line-height: 1.3333333;
3848 border-radius: 6px;
3849 }
3850 select.input-group-lg > .form-control,
3851 select.input-group-lg > .input-group-addon,
3852 select.input-group-lg > .input-group-btn > .btn {
3853 height: 46px;
3854 line-height: 46px;
3855 }
3856 textarea.input-group-lg > .form-control,
3857 textarea.input-group-lg > .input-group-addon,
3858 textarea.input-group-lg > .input-group-btn > .btn,
3859 select[multiple].input-group-lg > .form-control,
3860 select[multiple].input-group-lg > .input-group-addon,
3861 select[multiple].input-group-lg > .input-group-btn > .btn {
3862 height: auto;
3863 }
3864 .input-group-sm > .form-control,
3865 .input-group-sm > .input-group-addon,
3866 .input-group-sm > .input-group-btn > .btn {
3867 height: 30px;
3868 padding: 5px 10px;
3869 font-size: 12px;
3870 line-height: 1.5;
3871 border-radius: 3px;
3872 }
3873 select.input-group-sm > .form-control,
3874 select.input-group-sm > .input-group-addon,
3875 select.input-group-sm > .input-group-btn > .btn {
3876 height: 30px;
3877 line-height: 30px;
3878 }
3879 textarea.input-group-sm > .form-control,
3880 textarea.input-group-sm > .input-group-addon,
3881 textarea.input-group-sm > .input-group-btn > .btn,
3882 select[multiple].input-group-sm > .form-control,
3883 select[multiple].input-group-sm > .input-group-addon,
3884 select[multiple].input-group-sm > .input-group-btn > .btn {
3885 height: auto;
3886 }
3887 .input-group-addon,
3888 .input-group-btn,
3889 .input-group .form-control {
3890 display: table-cell;
3891 }
3892 .input-group-addon:not(:first-child):not(:last-child),
3893 .input-group-btn:not(:first-child):not(:last-child),
3894 .input-group .form-control:not(:first-child):not(:last-child) {
3895 border-radius: 0;
3896 }
3897 .input-group-addon,
3898 .input-group-btn {
3899 width: 1%;
3900 white-space: nowrap;
3901 vertical-align: middle;
3902 }
3903 .input-group-addon {
3904 padding: 6px 12px;
3905 font-size: 14px;
3906 font-weight: normal;
3907 line-height: 1;
3908 color: #555;
3909 text-align: center;
3910 background-color: #eee;
3911 border: 1px solid #ccc;
3912 border-radius: 4px;
3913 }
3914 .input-group-addon.input-sm {
3915 padding: 5px 10px;
3916 font-size: 12px;
3917 border-radius: 3px;
3918 }
3919 .input-group-addon.input-lg {
3920 padding: 10px 16px;
3921 font-size: 18px;
3922 border-radius: 6px;
3923 }
3924 .input-group-addon input[type="radio"],
3925 .input-group-addon input[type="checkbox"] {
3926 margin-top: 0;
3927 }
3928 .input-group .form-control:first-child,
3929 .input-group-addon:first-child,
3930 .input-group-btn:first-child > .btn,
3931 .input-group-btn:first-child > .btn-group > .btn,
3932 .input-group-btn:first-child > .dropdown-toggle,
3933 .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
3934 .input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
3935 border-top-right-radius: 0;
3936 border-bottom-right-radius: 0;
3937 }
3938 .input-group-addon:first-child {
3939 border-right: 0;
3940 }
3941 .input-group .form-control:last-child,
3942 .input-group-addon:last-child,
3943 .input-group-btn:last-child > .btn,
3944 .input-group-btn:last-child > .btn-group > .btn,
3945 .input-group-btn:last-child > .dropdown-toggle,
3946 .input-group-btn:first-child > .btn:not(:first-child),
3947 .input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
3948 border-top-left-radius: 0;
3949 border-bottom-left-radius: 0;
3950 }
3951 .input-group-addon:last-child {
3952 border-left: 0;
3953 }
3954 .input-group-btn {
3955 position: relative;
3956 font-size: 0;
3957 white-space: nowrap;
3958 }
3959 .input-group-btn > .btn {
3960 position: relative;
3961 }
3962 .input-group-btn > .btn + .btn {
3963 margin-left: -1px;
3964 }
3965 .input-group-btn > .btn:hover,
3966 .input-group-btn > .btn:focus,
3967 .input-group-btn > .btn:active {
3968 z-index: 2;
3969 }
3970 .input-group-btn:first-child > .btn,
3971 .input-group-btn:first-child > .btn-group {
3972 margin-right: -1px;
3973 }
3974 .input-group-btn:last-child > .btn,
3975 .input-group-btn:last-child > .btn-group {
3976 z-index: 2;
3977 margin-left: -1px;
3978 }
3979 .nav {
3980 padding-left: 0;
3981 margin-bottom: 0;
3982 list-style: none;
3983 }
3984 .nav > li {
3985 position: relative;
3986 display: block;
3987 }
3988 .nav > li > a {
3989 position: relative;
3990 display: block;
3991 padding: 10px 15px;
3992 }
3993 .nav > li > a:hover,
3994 .nav > li > a:focus {
3995 text-decoration: none;
3996 background-color: #eee;
3997 }
3998 .nav > li.disabled > a {
3999 color: #777;
4000 }
4001 .nav > li.disabled > a:hover,
4002 .nav > li.disabled > a:focus {
4003 color: #777;
4004 text-decoration: none;
4005 cursor: not-allowed;
4006 background-color: transparent;
4007 }
4008 .nav .open > a,
4009 .nav .open > a:hover,
4010 .nav .open > a:focus {
4011 background-color: #eee;
4012 border-color: #337ab7;
4013 }
4014 .nav .nav-divider {
4015 height: 1px;
4016 margin: 9px 0;
4017 overflow: hidden;
4018 background-color: #e5e5e5;
4019 }
4020 .nav > li > a > img {
4021 max-width: none;
4022 }
4023 .nav-tabs {
4024 border-bottom: 1px solid #ddd;
4025 }
4026 .nav-tabs > li {
4027 float: left;
4028 margin-bottom: -1px;
4029 }
4030 .nav-tabs > li > a {
4031 margin-right: 2px;
4032 line-height: 1.42857143;
4033 border: 1px solid transparent;
4034 border-radius: 4px 4px 0 0;
4035 }
4036 .nav-tabs > li > a:hover {
4037 border-color: #eee #eee #ddd;
4038 }
4039 .nav-tabs > li.active > a,
4040 .nav-tabs > li.active > a:hover,
4041 .nav-tabs > li.active > a:focus {
4042 color: #555;
4043 cursor: default;
4044 background-color: #fff;
4045 border: 1px solid #ddd;
4046 border-bottom-color: transparent;
4047 }
4048 .nav-tabs.nav-justified {
4049 width: 100%;
4050 border-bottom: 0;
4051 }
4052 .nav-tabs.nav-justified > li {
4053 float: none;
4054 }
4055 .nav-tabs.nav-justified > li > a {
4056 margin-bottom: 5px;
4057 text-align: center;
4058 }
4059 .nav-tabs.nav-justified > .dropdown .dropdown-menu {
4060 top: auto;
4061 left: auto;
4062 }
4063 @media (min-width: 768px) {
4064 .nav-tabs.nav-justified > li {
4065 display: table-cell;
4066 width: 1%;
4067 }
4068 .nav-tabs.nav-justified > li > a {
4069 margin-bottom: 0;
4070 }
4071 }
4072 .nav-tabs.nav-justified > li > a {
4073 margin-right: 0;
4074 border-radius: 4px;
4075 }
4076 .nav-tabs.nav-justified > .active > a,
4077 .nav-tabs.nav-justified > .active > a:hover,
4078 .nav-tabs.nav-justified > .active > a:focus {
4079 border: 1px solid #ddd;
4080 }
4081 @media (min-width: 768px) {
4082 .nav-tabs.nav-justified > li > a {
4083 border-bottom: 1px solid #ddd;
4084 border-radius: 4px 4px 0 0;
4085 }
4086 .nav-tabs.nav-justified > .active > a,
4087 .nav-tabs.nav-justified > .active > a:hover,
4088 .nav-tabs.nav-justified > .active > a:focus {
4089 border-bottom-color: #fff;
4090 }
4091 }
4092 .nav-pills > li {
4093 float: left;
4094 }
4095 .nav-pills > li > a {
4096 border-radius: 4px;
4097 }
4098 .nav-pills > li + li {
4099 margin-left: 2px;
4100 }
4101 .nav-pills > li.active > a,
4102 .nav-pills > li.active > a:hover,
4103 .nav-pills > li.active > a:focus {
4104 color: #fff;
4105 background-color: #337ab7;
4106 }
4107 .nav-stacked > li {
4108 float: none;
4109 }
4110 .nav-stacked > li + li {
4111 margin-top: 2px;
4112 margin-left: 0;
4113 }
4114 .nav-justified {
4115 width: 100%;
4116 }
4117 .nav-justified > li {
4118 float: none;
4119 }
4120 .nav-justified > li > a {
4121 margin-bottom: 5px;
4122 text-align: center;
4123 }
4124 .nav-justified > .dropdown .dropdown-menu {
4125 top: auto;
4126 left: auto;
4127 }
4128 @media (min-width: 768px) {
4129 .nav-justified > li {
4130 display: table-cell;
4131 width: 1%;
4132 }
4133 .nav-justified > li > a {
4134 margin-bottom: 0;
4135 }
4136 }
4137 .nav-tabs-justified {
4138 border-bottom: 0;
4139 }
4140 .nav-tabs-justified > li > a {
4141 margin-right: 0;
4142 border-radius: 4px;
4143 }
4144 .nav-tabs-justified > .active > a,
4145 .nav-tabs-justified > .active > a:hover,
4146 .nav-tabs-justified > .active > a:focus {
4147 border: 1px solid #ddd;
4148 }
4149 @media (min-width: 768px) {
4150 .nav-tabs-justified > li > a {
4151 border-bottom: 1px solid #ddd;
4152 border-radius: 4px 4px 0 0;
4153 }
4154 .nav-tabs-justified > .active > a,
4155 .nav-tabs-justified > .active > a:hover,
4156 .nav-tabs-justified > .active > a:focus {
4157 border-bottom-color: #fff;
4158 }
4159 }
4160 .tab-content > .tab-pane {
4161 display: none;
4162 }
4163 .tab-content > .active {
4164 display: block;
4165 }
4166 .nav-tabs .dropdown-menu {
4167 margin-top: -1px;
4168 border-top-left-radius: 0;
4169 border-top-right-radius: 0;
4170 }
4171 .navbar {
4172 position: relative;
4173 min-height: 50px;
4174 margin-bottom: 20px;
4175 border: 1px solid transparent;
4176 }
4177 @media (min-width: 768px) {
4178 .navbar {
4179 border-radius: 4px;
4180 }
4181 }
4182 @media (min-width: 768px) {
4183 .navbar-header {
4184 float: left;
4185 }
4186 }
4187 .navbar-collapse {
4188 padding-right: 15px;
4189 padding-left: 15px;
4190 overflow-x: visible;
4191 -webkit-overflow-scrolling: touch;
4192 border-top: 1px solid transparent;
4193 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
4194 box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
4195 }
4196 .navbar-collapse.in {
4197 overflow-y: auto;
4198 }
4199 @media (min-width: 768px) {
4200 .navbar-collapse {
4201 width: auto;
4202 border-top: 0;
4203 -webkit-box-shadow: none;
4204 box-shadow: none;
4205 }
4206 .navbar-collapse.collapse {
4207 display: block !important;
4208 height: auto !important;
4209 padding-bottom: 0;
4210 overflow: visible !important;
4211 }
4212 .navbar-collapse.in {
4213 overflow-y: visible;
4214 }
4215 .navbar-fixed-top .navbar-collapse,
4216 .navbar-static-top .navbar-collapse,
4217 .navbar-fixed-bottom .navbar-collapse {
4218 padding-right: 0;
4219 padding-left: 0;
4220 }
4221 }
4222 .navbar-fixed-top .navbar-collapse,
4223 .navbar-fixed-bottom .navbar-collapse {
4224 max-height: 340px;
4225 }
4226 @media (max-device-width: 480px) and (orientation: landscape) {
4227 .navbar-fixed-top .navbar-collapse,
4228 .navbar-fixed-bottom .navbar-collapse {
4229 max-height: 200px;
4230 }
4231 }
4232 .container > .navbar-header,
4233 .container-fluid > .navbar-header,
4234 .container > .navbar-collapse,
4235 .container-fluid > .navbar-collapse {
4236 margin-right: -15px;
4237 margin-left: -15px;
4238 }
4239 @media (min-width: 768px) {
4240 .container > .navbar-header,
4241 .container-fluid > .navbar-header,
4242 .container > .navbar-collapse,
4243 .container-fluid > .navbar-collapse {
4244 margin-right: 0;
4245 margin-left: 0;
4246 }
4247 }
4248 .navbar-static-top {
4249 z-index: 1000;
4250 border-width: 0 0 1px;
4251 }
4252 @media (min-width: 768px) {
4253 .navbar-static-top {
4254 border-radius: 0;
4255 }
4256 }
4257 .navbar-fixed-top,
4258 .navbar-fixed-bottom {
4259 position: fixed;
4260 right: 0;
4261 left: 0;
4262 z-index: 1030;
4263 }
4264 @media (min-width: 768px) {
4265 .navbar-fixed-top,
4266 .navbar-fixed-bottom {
4267 border-radius: 0;
4268 }
4269 }
4270 .navbar-fixed-top {
4271 top: 0;
4272 border-width: 0 0 1px;
4273 }
4274 .navbar-fixed-bottom {
4275 bottom: 0;
4276 margin-bottom: 0;
4277 border-width: 1px 0 0;
4278 }
4279 .navbar-brand {
4280 float: left;
4281 height: 50px;
4282 padding: 15px 15px;
4283 font-size: 18px;
4284 line-height: 20px;
4285 }
4286 .navbar-brand:hover,
4287 .navbar-brand:focus {
4288 text-decoration: none;
4289 }
4290 .navbar-brand > img {
4291 display: block;
4292 }
4293 @media (min-width: 768px) {
4294 .navbar > .container .navbar-brand,
4295 .navbar > .container-fluid .navbar-brand {
4296 margin-left: -15px;
4297 }
4298 }
4299 .navbar-toggle {
4300 position: relative;
4301 float: right;
4302 padding: 9px 10px;
4303 margin-top: 8px;
4304 margin-right: 15px;
4305 margin-bottom: 8px;
4306 background-color: transparent;
4307 background-image: none;
4308 border: 1px solid transparent;
4309 border-radius: 4px;
4310 }
4311 .navbar-toggle:focus {
4312 outline: 0;
4313 }
4314 .navbar-toggle .icon-bar {
4315 display: block;
4316 width: 22px;
4317 height: 2px;
4318 border-radius: 1px;
4319 }
4320 .navbar-toggle .icon-bar + .icon-bar {
4321 margin-top: 4px;
4322 }
4323 @media (min-width: 768px) {
4324 .navbar-toggle {
4325 display: none;
4326 }
4327 }
4328 .navbar-nav {
4329 margin: 7.5px -15px;
4330 }
4331 .navbar-nav > li > a {
4332 padding-top: 10px;
4333 padding-bottom: 10px;
4334 line-height: 20px;
4335 }
4336 @media (max-width: 767px) {
4337 .navbar-nav .open .dropdown-menu {
4338 position: static;
4339 float: none;
4340 width: auto;
4341 margin-top: 0;
4342 background-color: transparent;
4343 border: 0;
4344 -webkit-box-shadow: none;
4345 box-shadow: none;
4346 }
4347 .navbar-nav .open .dropdown-menu > li > a,
4348 .navbar-nav .open .dropdown-menu .dropdown-header {
4349 padding: 5px 15px 5px 25px;
4350 }
4351 .navbar-nav .open .dropdown-menu > li > a {
4352 line-height: 20px;
4353 }
4354 .navbar-nav .open .dropdown-menu > li > a:hover,
4355 .navbar-nav .open .dropdown-menu > li > a:focus {
4356 background-image: none;
4357 }
4358 }
4359 @media (min-width: 768px) {
4360 .navbar-nav {
4361 float: left;
4362 margin: 0;
4363 }
4364 .navbar-nav > li {
4365 float: left;
4366 }
4367 .navbar-nav > li > a {
4368 padding-top: 15px;
4369 padding-bottom: 15px;
4370 }
4371 }
4372 .navbar-form {
4373 padding: 10px 15px;
4374 margin-top: 8px;
4375 margin-right: -15px;
4376 margin-bottom: 8px;
4377 margin-left: -15px;
4378 border-top: 1px solid transparent;
4379 border-bottom: 1px solid transparent;
4380 -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
4381 box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
4382 }
4383 @media (min-width: 768px) {
4384 .navbar-form .form-group {
4385 display: inline-block;
4386 margin-bottom: 0;
4387 vertical-align: middle;
4388 }
4389 .navbar-form .form-control {
4390 display: inline-block;
4391 width: auto;
4392 vertical-align: middle;
4393 }
4394 .navbar-form .form-control-static {
4395 display: inline-block;
4396 }
4397 .navbar-form .input-group {
4398 display: inline-table;
4399 vertical-align: middle;
4400 }
4401 .navbar-form .input-group .input-group-addon,
4402 .navbar-form .input-group .input-group-btn,
4403 .navbar-form .input-group .form-control {
4404 width: auto;
4405 }
4406 .navbar-form .input-group > .form-control {
4407 width: 100%;
4408 }
4409 .navbar-form .control-label {
4410 margin-bottom: 0;
4411 vertical-align: middle;
4412 }
4413 .navbar-form .radio,
4414 .navbar-form .checkbox {
4415 display: inline-block;
4416 margin-top: 0;
4417 margin-bottom: 0;
4418 vertical-align: middle;
4419 }
4420 .navbar-form .radio label,
4421 .navbar-form .checkbox label {
4422 padding-left: 0;
4423 }
4424 .navbar-form .radio input[type="radio"],
4425 .navbar-form .checkbox input[type="checkbox"] {
4426 position: relative;
4427 margin-left: 0;
4428 }
4429 .navbar-form .has-feedback .form-control-feedback {
4430 top: 0;
4431 }
4432 }
4433 @media (max-width: 767px) {
4434 .navbar-form .form-group {
4435 margin-bottom: 5px;
4436 }
4437 .navbar-form .form-group:last-child {
4438 margin-bottom: 0;
4439 }
4440 }
4441 @media (min-width: 768px) {
4442 .navbar-form {
4443 width: auto;
4444 padding-top: 0;
4445 padding-bottom: 0;
4446 margin-right: 0;
4447 margin-left: 0;
4448 border: 0;
4449 -webkit-box-shadow: none;
4450 box-shadow: none;
4451 }
4452 }
4453 .navbar-nav > li > .dropdown-menu {
4454 margin-top: 0;
4455 border-top-left-radius: 0;
4456 border-top-right-radius: 0;
4457 }
4458 .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
4459 margin-bottom: 0;
4460 border-top-left-radius: 4px;
4461 border-top-right-radius: 4px;
4462 border-bottom-right-radius: 0;
4463 border-bottom-left-radius: 0;
4464 }
4465 .navbar-btn {
4466 margin-top: 8px;
4467 margin-bottom: 8px;
4468 }
4469 .navbar-btn.btn-sm {
4470 margin-top: 10px;
4471 margin-bottom: 10px;
4472 }
4473 .navbar-btn.btn-xs {
4474 margin-top: 14px;
4475 margin-bottom: 14px;
4476 }
4477 .navbar-text {
4478 margin-top: 15px;
4479 margin-bottom: 15px;
4480 }
4481 @media (min-width: 768px) {
4482 .navbar-text {
4483 float: left;
4484 margin-right: 15px;
4485 margin-left: 15px;
4486 }
4487 }
4488 @media (min-width: 768px) {
4489 .navbar-left {
4490 float: left !important;
4491 }
4492 .navbar-right {
4493 float: right !important;
4494 margin-right: -15px;
4495 }
4496 .navbar-right ~ .navbar-right {
4497 margin-right: 0;
4498 }
4499 }
4500 .navbar-default {
4501 background-color: #f8f8f8;
4502 border-color: #e7e7e7;
4503 }
4504 .navbar-default .navbar-brand {
4505 color: #777;
4506 }
4507 .navbar-default .navbar-brand:hover,
4508 .navbar-default .navbar-brand:focus {
4509 color: #5e5e5e;
4510 background-color: transparent;
4511 }
4512 .navbar-default .navbar-text {
4513 color: #777;
4514 }
4515 .navbar-default .navbar-nav > li > a {
4516 color: #777;
4517 }
4518 .navbar-default .navbar-nav > li > a:hover,
4519 .navbar-default .navbar-nav > li > a:focus {
4520 color: #333;
4521 background-color: transparent;
4522 }
4523 .navbar-default .navbar-nav > .active > a,
4524 .navbar-default .navbar-nav > .active > a:hover,
4525 .navbar-default .navbar-nav > .active > a:focus {
4526 color: #555;
4527 background-color: #e7e7e7;
4528 }
4529 .navbar-default .navbar-nav > .disabled > a,
4530 .navbar-default .navbar-nav > .disabled > a:hover,
4531 .navbar-default .navbar-nav > .disabled > a:focus {
4532 color: #ccc;
4533 background-color: transparent;
4534 }
4535 .navbar-default .navbar-toggle {
4536 border-color: #ddd;
4537 }
4538 .navbar-default .navbar-toggle:hover,
4539 .navbar-default .navbar-toggle:focus {
4540 background-color: #ddd;
4541 }
4542 .navbar-default .navbar-toggle .icon-bar {
4543 background-color: #888;
4544 }
4545 .navbar-default .navbar-collapse,
4546 .navbar-default .navbar-form {
4547 border-color: #e7e7e7;
4548 }
4549 .navbar-default .navbar-nav > .open > a,
4550 .navbar-default .navbar-nav > .open > a:hover,
4551 .navbar-default .navbar-nav > .open > a:focus {
4552 color: #555;
4553 background-color: #e7e7e7;
4554 }
4555 @media (max-width: 767px) {
4556 .navbar-default .navbar-nav .open .dropdown-menu > li > a {
4557 color: #777;
4558 }
4559 .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
4560 .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
4561 color: #333;
4562 background-color: transparent;
4563 }
4564 .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
4565 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
4566 .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
4567 color: #555;
4568 background-color: #e7e7e7;
4569 }
4570 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
4571 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4572 .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4573 color: #ccc;
4574 background-color: transparent;
4575 }
4576 }
4577 .navbar-default .navbar-link {
4578 color: #777;
4579 }
4580 .navbar-default .navbar-link:hover {
4581 color: #333;
4582 }
4583 .navbar-default .btn-link {
4584 color: #777;
4585 }
4586 .navbar-default .btn-link:hover,
4587 .navbar-default .btn-link:focus {
4588 color: #333;
4589 }
4590 .navbar-default .btn-link[disabled]:hover,
4591 fieldset[disabled] .navbar-default .btn-link:hover,
4592 .navbar-default .btn-link[disabled]:focus,
4593 fieldset[disabled] .navbar-default .btn-link:focus {
4594 color: #ccc;
4595 }
4596 .navbar-inverse {
4597 background-color: #222;
4598 border-color: #080808;
4599 }
4600 .navbar-inverse .navbar-brand {
4601 color: #9d9d9d;
4602 }
4603 .navbar-inverse .navbar-brand:hover,
4604 .navbar-inverse .navbar-brand:focus {
4605 color: #fff;
4606 background-color: transparent;
4607 }
4608 .navbar-inverse .navbar-text {
4609 color: #9d9d9d;
4610 }
4611 .navbar-inverse .navbar-nav > li > a {
4612 color: #9d9d9d;
4613 }
4614 .navbar-inverse .navbar-nav > li > a:hover,
4615 .navbar-inverse .navbar-nav > li > a:focus {
4616 color: #fff;
4617 background-color: transparent;
4618 }
4619 .navbar-inverse .navbar-nav > .active > a,
4620 .navbar-inverse .navbar-nav > .active > a:hover,
4621 .navbar-inverse .navbar-nav > .active > a:focus {
4622 color: #fff;
4623 background-color: #080808;
4624 }
4625 .navbar-inverse .navbar-nav > .disabled > a,
4626 .navbar-inverse .navbar-nav > .disabled > a:hover,
4627 .navbar-inverse .navbar-nav > .disabled > a:focus {
4628 color: #444;
4629 background-color: transparent;
4630 }
4631 .navbar-inverse .navbar-toggle {
4632 border-color: #333;
4633 }
4634 .navbar-inverse .navbar-toggle:hover,
4635 .navbar-inverse .navbar-toggle:focus {
4636 background-color: #333;
4637 }
4638 .navbar-inverse .navbar-toggle .icon-bar {
4639 background-color: #fff;
4640 }
4641 .navbar-inverse .navbar-collapse,
4642 .navbar-inverse .navbar-form {
4643 border-color: #101010;
4644 }
4645 .navbar-inverse .navbar-nav > .open > a,
4646 .navbar-inverse .navbar-nav > .open > a:hover,
4647 .navbar-inverse .navbar-nav > .open > a:focus {
4648 color: #fff;
4649 background-color: #080808;
4650 }
4651 @media (max-width: 767px) {
4652 .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
4653 border-color: #080808;
4654 }
4655 .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
4656 background-color: #080808;
4657 }
4658 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
4659 color: #9d9d9d;
4660 }
4661 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
4662 .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
4663 color: #fff;
4664 background-color: transparent;
4665 }
4666 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
4667 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
4668 .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
4669 color: #fff;
4670 background-color: #080808;
4671 }
4672 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
4673 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
4674 .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
4675 color: #444;
4676 background-color: transparent;
4677 }
4678 }
4679 .navbar-inverse .navbar-link {
4680 color: #9d9d9d;
4681 }
4682 .navbar-inverse .navbar-link:hover {
4683 color: #fff;
4684 }
4685 .navbar-inverse .btn-link {
4686 color: #9d9d9d;
4687 }
4688 .navbar-inverse .btn-link:hover,
4689 .navbar-inverse .btn-link:focus {
4690 color: #fff;
4691 }
4692 .navbar-inverse .btn-link[disabled]:hover,
4693 fieldset[disabled] .navbar-inverse .btn-link:hover,
4694 .navbar-inverse .btn-link[disabled]:focus,
4695 fieldset[disabled] .navbar-inverse .btn-link:focus {
4696 color: #444;
4697 }
4698 .breadcrumb {
4699 padding: 8px 15px;
4700 margin-bottom: 20px;
4701 list-style: none;
4702 background-color: #f5f5f5;
4703 border-radius: 4px;
4704 }
4705 .breadcrumb > li {
4706 display: inline-block;
4707 }
4708 .breadcrumb > li + li:before {
4709 padding: 0 5px;
4710 color: #ccc;
4711 content: "/\00a0";
4712 }
4713 .breadcrumb > .active {
4714 color: #777;
4715 }
4716 .pagination {
4717 display: inline-block;
4718 padding-left: 0;
4719 margin: 20px 0;
4720 border-radius: 4px;
4721 }
4722 .pagination > li {
4723 display: inline;
4724 }
4725 .pagination > li > a,
4726 .pagination > li > span {
4727 position: relative;
4728 float: left;
4729 padding: 6px 12px;
4730 margin-left: -1px;
4731 line-height: 1.42857143;
4732 color: #337ab7;
4733 text-decoration: none;
4734 background-color: #fff;
4735 border: 1px solid #ddd;
4736 }
4737 .pagination > li:first-child > a,
4738 .pagination > li:first-child > span {
4739 margin-left: 0;
4740 border-top-left-radius: 4px;
4741 border-bottom-left-radius: 4px;
4742 }
4743 .pagination > li:last-child > a,
4744 .pagination > li:last-child > span {
4745 border-top-right-radius: 4px;
4746 border-bottom-right-radius: 4px;
4747 }
4748 .pagination > li > a:hover,
4749 .pagination > li > span:hover,
4750 .pagination > li > a:focus,
4751 .pagination > li > span:focus {
4752 z-index: 2;
4753 color: #23527c;
4754 background-color: #eee;
4755 border-color: #ddd;
4756 }
4757 .pagination > .active > a,
4758 .pagination > .active > span,
4759 .pagination > .active > a:hover,
4760 .pagination > .active > span:hover,
4761 .pagination > .active > a:focus,
4762 .pagination > .active > span:focus {
4763 z-index: 3;
4764 color: #fff;
4765 cursor: default;
4766 background-color: #337ab7;
4767 border-color: #337ab7;
4768 }
4769 .pagination > .disabled > span,
4770 .pagination > .disabled > span:hover,
4771 .pagination > .disabled > span:focus,
4772 .pagination > .disabled > a,
4773 .pagination > .disabled > a:hover,
4774 .pagination > .disabled > a:focus {
4775 color: #777;
4776 cursor: not-allowed;
4777 background-color: #fff;
4778 border-color: #ddd;
4779 }
4780 .pagination-lg > li > a,
4781 .pagination-lg > li > span {
4782 padding: 10px 16px;
4783 font-size: 18px;
4784 line-height: 1.3333333;
4785 }
4786 .pagination-lg > li:first-child > a,
4787 .pagination-lg > li:first-child > span {
4788 border-top-left-radius: 6px;
4789 border-bottom-left-radius: 6px;
4790 }
4791 .pagination-lg > li:last-child > a,
4792 .pagination-lg > li:last-child > span {
4793 border-top-right-radius: 6px;
4794 border-bottom-right-radius: 6px;
4795 }
4796 .pagination-sm > li > a,
4797 .pagination-sm > li > span {
4798 padding: 5px 10px;
4799 font-size: 12px;
4800 line-height: 1.5;
4801 }
4802 .pagination-sm > li:first-child > a,
4803 .pagination-sm > li:first-child > span {
4804 border-top-left-radius: 3px;
4805 border-bottom-left-radius: 3px;
4806 }
4807 .pagination-sm > li:last-child > a,
4808 .pagination-sm > li:last-child > span {
4809 border-top-right-radius: 3px;
4810 border-bottom-right-radius: 3px;
4811 }
4812 .pager {
4813 padding-left: 0;
4814 margin: 20px 0;
4815 text-align: center;
4816 list-style: none;
4817 }
4818 .pager li {
4819 display: inline;
4820 }
4821 .pager li > a,
4822 .pager li > span {
4823 display: inline-block;
4824 padding: 5px 14px;
4825 background-color: #fff;
4826 border: 1px solid #ddd;
4827 border-radius: 15px;
4828 }
4829 .pager li > a:hover,
4830 .pager li > a:focus {
4831 text-decoration: none;
4832 background-color: #eee;
4833 }
4834 .pager .next > a,
4835 .pager .next > span {
4836 float: right;
4837 }
4838 .pager .previous > a,
4839 .pager .previous > span {
4840 float: left;
4841 }
4842 .pager .disabled > a,
4843 .pager .disabled > a:hover,
4844 .pager .disabled > a:focus,
4845 .pager .disabled > span {
4846 color: #777;
4847 cursor: not-allowed;
4848 background-color: #fff;
4849 }
4850 .label {
4851 display: inline;
4852 padding: .2em .6em .3em;
4853 font-size: 75%;
4854 font-weight: bold;
4855 line-height: 1;
4856 color: #fff;
4857 text-align: center;
4858 white-space: nowrap;
4859 vertical-align: baseline;
4860 border-radius: .25em;
4861 }
4862 a.label:hover,
4863 a.label:focus {
4864 color: #fff;
4865 text-decoration: none;
4866 cursor: pointer;
4867 }
4868 .label:empty {
4869 display: none;
4870 }
4871 .btn .label {
4872 position: relative;
4873 top: -1px;
4874 }
4875 .label-default {
4876 background-color: #777;
4877 }
4878 .label-default[href]:hover,
4879 .label-default[href]:focus {
4880 background-color: #5e5e5e;
4881 }
4882 .label-primary {
4883 background-color: #337ab7;
4884 }
4885 .label-primary[href]:hover,
4886 .label-primary[href]:focus {
4887 background-color: #286090;
4888 }
4889 .label-success {
4890 background-color: #5cb85c;
4891 }
4892 .label-success[href]:hover,
4893 .label-success[href]:focus {
4894 background-color: #449d44;
4895 }
4896 .label-info {
4897 background-color: #5bc0de;
4898 }
4899 .label-info[href]:hover,
4900 .label-info[href]:focus {
4901 background-color: #31b0d5;
4902 }
4903 .label-warning {
4904 background-color: #f0ad4e;
4905 }
4906 .label-warning[href]:hover,
4907 .label-warning[href]:focus {
4908 background-color: #ec971f;
4909 }
4910 .label-danger {
4911 background-color: #d9534f;
4912 }
4913 .label-danger[href]:hover,
4914 .label-danger[href]:focus {
4915 background-color: #c9302c;
4916 }
4917 .badge {
4918 display: inline-block;
4919 min-width: 10px;
4920 padding: 3px 7px;
4921 font-size: 12px;
4922 font-weight: bold;
4923 line-height: 1;
4924 color: #fff;
4925 text-align: center;
4926 white-space: nowrap;
4927 vertical-align: middle;
4928 background-color: #777;
4929 border-radius: 10px;
4930 }
4931 .badge:empty {
4932 display: none;
4933 }
4934 .btn .badge {
4935 position: relative;
4936 top: -1px;
4937 }
4938 .btn-xs .badge,
4939 .btn-group-xs > .btn .badge {
4940 top: 0;
4941 padding: 1px 5px;
4942 }
4943 a.badge:hover,
4944 a.badge:focus {
4945 color: #fff;
4946 text-decoration: none;
4947 cursor: pointer;
4948 }
4949 .list-group-item.active > .badge,
4950 .nav-pills > .active > a > .badge {
4951 color: #337ab7;
4952 background-color: #fff;
4953 }
4954 .list-group-item > .badge {
4955 float: right;
4956 }
4957 .list-group-item > .badge + .badge {
4958 margin-right: 5px;
4959 }
4960 .nav-pills > li > a > .badge {
4961 margin-left: 3px;
4962 }
4963 .jumbotron {
4964 padding-top: 30px;
4965 padding-bottom: 30px;
4966 margin-bottom: 30px;
4967 color: inherit;
4968 background-color: #eee;
4969 }
4970 .jumbotron h1,
4971 .jumbotron .h1 {
4972 color: inherit;
4973 }
4974 .jumbotron p {
4975 margin-bottom: 15px;
4976 font-size: 21px;
4977 font-weight: 200;
4978 }
4979 .jumbotron > hr {
4980 border-top-color: #d5d5d5;
4981 }
4982 .container .jumbotron,
4983 .container-fluid .jumbotron {
4984 padding-right: 15px;
4985 padding-left: 15px;
4986 border-radius: 6px;
4987 }
4988 .jumbotron .container {
4989 max-width: 100%;
4990 }
4991 @media screen and (min-width: 768px) {
4992 .jumbotron {
4993 padding-top: 48px;
4994 padding-bottom: 48px;
4995 }
4996 .container .jumbotron,
4997 .container-fluid .jumbotron {
4998 padding-right: 60px;
4999 padding-left: 60px;
5000 }
5001 .jumbotron h1,
5002 .jumbotron .h1 {
5003 font-size: 63px;
5004 }
5005 }
5006 .thumbnail {
5007 display: block;
5008 padding: 4px;
5009 margin-bottom: 20px;
5010 line-height: 1.42857143;
5011 background-color: #fff;
5012 border: 1px solid #ddd;
5013 border-radius: 4px;
5014 -webkit-transition: border .2s ease-in-out;
5015 -o-transition: border .2s ease-in-out;
5016 transition: border .2s ease-in-out;
5017 }
5018 .thumbnail > img,
5019 .thumbnail a > img {
5020 margin-right: auto;
5021 margin-left: auto;
5022 }
5023 a.thumbnail:hover,
5024 a.thumbnail:focus,
5025 a.thumbnail.active {
5026 border-color: #337ab7;
5027 }
5028 .thumbnail .caption {
5029 padding: 9px;
5030 color: #333;
5031 }
5032 .alert {
5033 padding: 15px;
5034 margin-bottom: 20px;
5035 border: 1px solid transparent;
5036 border-radius: 4px;
5037 }
5038 .alert h4 {
5039 margin-top: 0;
5040 color: inherit;
5041 }
5042 .alert .alert-link {
5043 font-weight: bold;
5044 }
5045 .alert > p,
5046 .alert > ul {
5047 margin-bottom: 0;
5048 }
5049 .alert > p + p {
5050 margin-top: 5px;
5051 }
5052 .alert-dismissable,
5053 .alert-dismissible {
5054 padding-right: 35px;
5055 }
5056 .alert-dismissable .close,
5057 .alert-dismissible .close {
5058 position: relative;
5059 top: -2px;
5060 right: -21px;
5061 color: inherit;
5062 }
5063 .alert-success {
5064 color: #3c763d;
5065 background-color: #dff0d8;
5066 border-color: #d6e9c6;
5067 }
5068 .alert-success hr {
5069 border-top-color: #c9e2b3;
5070 }
5071 .alert-success .alert-link {
5072 color: #2b542c;
5073 }
5074 .alert-info {
5075 color: #31708f;
5076 background-color: #d9edf7;
5077 border-color: #bce8f1;
5078 }
5079 .alert-info hr {
5080 border-top-color: #a6e1ec;
5081 }
5082 .alert-info .alert-link {
5083 color: #245269;
5084 }
5085 .alert-warning {
5086 color: #8a6d3b;
5087 background-color: #fcf8e3;
5088 border-color: #faebcc;
5089 }
5090 .alert-warning hr {
5091 border-top-color: #f7e1b5;
5092 }
5093 .alert-warning .alert-link {
5094 color: #66512c;
5095 }
5096 .alert-danger {
5097 color: #a94442;
5098 background-color: #f2dede;
5099 border-color: #ebccd1;
5100 }
5101 .alert-danger hr {
5102 border-top-color: #e4b9c0;
5103 }
5104 .alert-danger .alert-link {
5105 color: #843534;
5106 }
5107 @-webkit-keyframes progress-bar-stripes {
5108 from {
5109 background-position: 40px 0;
5110 }
5111 to {
5112 background-position: 0 0;
5113 }
5114 }
5115 @-o-keyframes progress-bar-stripes {
5116 from {
5117 background-position: 40px 0;
5118 }
5119 to {
5120 background-position: 0 0;
5121 }
5122 }
5123 @keyframes progress-bar-stripes {
5124 from {
5125 background-position: 40px 0;
5126 }
5127 to {
5128 background-position: 0 0;
5129 }
5130 }
5131 .progress {
5132 height: 20px;
5133 margin-bottom: 20px;
5134 overflow: hidden;
5135 background-color: #f5f5f5;
5136 border-radius: 4px;
5137 -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
5138 box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
5139 }
5140 .progress-bar {
5141 float: left;
5142 width: 0;
5143 height: 100%;
5144 font-size: 12px;
5145 line-height: 20px;
5146 color: #fff;
5147 text-align: center;
5148 background-color: #337ab7;
5149 -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
5150 box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
5151 -webkit-transition: width .6s ease;
5152 -o-transition: width .6s ease;
5153 transition: width .6s ease;
5154 }
5155 .progress-striped .progress-bar,
5156 .progress-bar-striped {
5157 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);
5158 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);
5159 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);
5160 -webkit-background-size: 40px 40px;
5161 background-size: 40px 40px;
5162 }
5163 .progress.active .progress-bar,
5164 .progress-bar.active {
5165 -webkit-animation: progress-bar-stripes 2s linear infinite;
5166 -o-animation: progress-bar-stripes 2s linear infinite;
5167 animation: progress-bar-stripes 2s linear infinite;
5168 }
5169 .progress-bar-success {
5170 background-color: #5cb85c;
5171 }
5172 .progress-striped .progress-bar-success {
5173 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);
5174 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);
5175 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);
5176 }
5177 .progress-bar-info {
5178 background-color: #5bc0de;
5179 }
5180 .progress-striped .progress-bar-info {
5181 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);
5182 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);
5183 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);
5184 }
5185 .progress-bar-warning {
5186 background-color: #f0ad4e;
5187 }
5188 .progress-striped .progress-bar-warning {
5189 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);
5190 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);
5191 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);
5192 }
5193 .progress-bar-danger {
5194 background-color: #d9534f;
5195 }
5196 .progress-striped .progress-bar-danger {
5197 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);
5198 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);
5199 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);
5200 }
5201 .media {
5202 margin-top: 15px;
5203 }
5204 .media:first-child {
5205 margin-top: 0;
5206 }
5207 .media,
5208 .media-body {
5209 overflow: hidden;
5210 zoom: 1;
5211 }
5212 .media-body {
5213 width: 10000px;
5214 }
5215 .media-object {
5216 display: block;
5217 }
5218 .media-object.img-thumbnail {
5219 max-width: none;
5220 }
5221 .media-right,
5222 .media > .pull-right {
5223 padding-left: 10px;
5224 }
5225 .media-left,
5226 .media > .pull-left {
5227 padding-right: 10px;
5228 }
5229 .media-left,
5230 .media-right,
5231 .media-body {
5232 display: table-cell;
5233 vertical-align: top;
5234 }
5235 .media-middle {
5236 vertical-align: middle;
5237 }
5238 .media-bottom {
5239 vertical-align: bottom;
5240 }
5241 .media-heading {
5242 margin-top: 0;
5243 margin-bottom: 5px;
5244 }
5245 .media-list {
5246 padding-left: 0;
5247 list-style: none;
5248 }
5249 .list-group {
5250 padding-left: 0;
5251 margin-bottom: 20px;
5252 }
5253 .list-group-item {
5254 position: relative;
5255 display: block;
5256 padding: 10px 15px;
5257 margin-bottom: -1px;
5258 background-color: #fff;
5259 border: 1px solid #ddd;
5260 }
5261 .list-group-item:first-child {
5262 border-top-left-radius: 4px;
5263 border-top-right-radius: 4px;
5264 }
5265 .list-group-item:last-child {
5266 margin-bottom: 0;
5267 border-bottom-right-radius: 4px;
5268 border-bottom-left-radius: 4px;
5269 }
5270 a.list-group-item,
5271 button.list-group-item {
5272 color: #555;
5273 }
5274 a.list-group-item .list-group-item-heading,
5275 button.list-group-item .list-group-item-heading {
5276 color: #333;
5277 }
5278 a.list-group-item:hover,
5279 button.list-group-item:hover,
5280 a.list-group-item:focus,
5281 button.list-group-item:focus {
5282 color: #555;
5283 text-decoration: none;
5284 background-color: #f5f5f5;
5285 }
5286 button.list-group-item {
5287 width: 100%;
5288 text-align: left;
5289 }
5290 .list-group-item.disabled,
5291 .list-group-item.disabled:hover,
5292 .list-group-item.disabled:focus {
5293 color: #777;
5294 cursor: not-allowed;
5295 background-color: #eee;
5296 }
5297 .list-group-item.disabled .list-group-item-heading,
5298 .list-group-item.disabled:hover .list-group-item-heading,
5299 .list-group-item.disabled:focus .list-group-item-heading {
5300 color: inherit;
5301 }
5302 .list-group-item.disabled .list-group-item-text,
5303 .list-group-item.disabled:hover .list-group-item-text,
5304 .list-group-item.disabled:focus .list-group-item-text {
5305 color: #777;
5306 }
5307 .list-group-item.active,
5308 .list-group-item.active:hover,
5309 .list-group-item.active:focus {
5310 z-index: 2;
5311 color: #fff;
5312 background-color: #337ab7;
5313 border-color: #337ab7;
5314 }
5315 .list-group-item.active .list-group-item-heading,
5316 .list-group-item.active:hover .list-group-item-heading,
5317 .list-group-item.active:focus .list-group-item-heading,
5318 .list-group-item.active .list-group-item-heading > small,
5319 .list-group-item.active:hover .list-group-item-heading > small,
5320 .list-group-item.active:focus .list-group-item-heading > small,
5321 .list-group-item.active .list-group-item-heading > .small,
5322 .list-group-item.active:hover .list-group-item-heading > .small,
5323 .list-group-item.active:focus .list-group-item-heading > .small {
5324 color: inherit;
5325 }
5326 .list-group-item.active .list-group-item-text,
5327 .list-group-item.active:hover .list-group-item-text,
5328 .list-group-item.active:focus .list-group-item-text {
5329 color: #c7ddef;
5330 }
5331 .list-group-item-success {
5332 color: #3c763d;
5333 background-color: #dff0d8;
5334 }
5335 a.list-group-item-success,
5336 button.list-group-item-success {
5337 color: #3c763d;
5338 }
5339 a.list-group-item-success .list-group-item-heading,
5340 button.list-group-item-success .list-group-item-heading {
5341 color: inherit;
5342 }
5343 a.list-group-item-success:hover,
5344 button.list-group-item-success:hover,
5345 a.list-group-item-success:focus,
5346 button.list-group-item-success:focus {
5347 color: #3c763d;
5348 background-color: #d0e9c6;
5349 }
5350 a.list-group-item-success.active,
5351 button.list-group-item-success.active,
5352 a.list-group-item-success.active:hover,
5353 button.list-group-item-success.active:hover,
5354 a.list-group-item-success.active:focus,
5355 button.list-group-item-success.active:focus {
5356 color: #fff;
5357 background-color: #3c763d;
5358 border-color: #3c763d;
5359 }
5360 .list-group-item-info {
5361 color: #31708f;
5362 background-color: #d9edf7;
5363 }
5364 a.list-group-item-info,
5365 button.list-group-item-info {
5366 color: #31708f;
5367 }
5368 a.list-group-item-info .list-group-item-heading,
5369 button.list-group-item-info .list-group-item-heading {
5370 color: inherit;
5371 }
5372 a.list-group-item-info:hover,
5373 button.list-group-item-info:hover,
5374 a.list-group-item-info:focus,
5375 button.list-group-item-info:focus {
5376 color: #31708f;
5377 background-color: #c4e3f3;
5378 }
5379 a.list-group-item-info.active,
5380 button.list-group-item-info.active,
5381 a.list-group-item-info.active:hover,
5382 button.list-group-item-info.active:hover,
5383 a.list-group-item-info.active:focus,
5384 button.list-group-item-info.active:focus {
5385 color: #fff;
5386 background-color: #31708f;
5387 border-color: #31708f;
5388 }
5389 .list-group-item-warning {
5390 color: #8a6d3b;
5391 background-color: #fcf8e3;
5392 }
5393 a.list-group-item-warning,
5394 button.list-group-item-warning {
5395 color: #8a6d3b;
5396 }
5397 a.list-group-item-warning .list-group-item-heading,
5398 button.list-group-item-warning .list-group-item-heading {
5399 color: inherit;
5400 }
5401 a.list-group-item-warning:hover,
5402 button.list-group-item-warning:hover,
5403 a.list-group-item-warning:focus,
5404 button.list-group-item-warning:focus {
5405 color: #8a6d3b;
5406 background-color: #faf2cc;
5407 }
5408 a.list-group-item-warning.active,
5409 button.list-group-item-warning.active,
5410 a.list-group-item-warning.active:hover,
5411 button.list-group-item-warning.active:hover,
5412 a.list-group-item-warning.active:focus,
5413 button.list-group-item-warning.active:focus {
5414 color: #fff;
5415 background-color: #8a6d3b;
5416 border-color: #8a6d3b;
5417 }
5418 .list-group-item-danger {
5419 color: #a94442;
5420 background-color: #f2dede;
5421 }
5422 a.list-group-item-danger,
5423 button.list-group-item-danger {
5424 color: #a94442;
5425 }
5426 a.list-group-item-danger .list-group-item-heading,
5427 button.list-group-item-danger .list-group-item-heading {
5428 color: inherit;
5429 }
5430 a.list-group-item-danger:hover,
5431 button.list-group-item-danger:hover,
5432 a.list-group-item-danger:focus,
5433 button.list-group-item-danger:focus {
5434 color: #a94442;
5435 background-color: #ebcccc;
5436 }
5437 a.list-group-item-danger.active,
5438 button.list-group-item-danger.active,
5439 a.list-group-item-danger.active:hover,
5440 button.list-group-item-danger.active:hover,
5441 a.list-group-item-danger.active:focus,
5442 button.list-group-item-danger.active:focus {
5443 color: #fff;
5444 background-color: #a94442;
5445 border-color: #a94442;
5446 }
5447 .list-group-item-heading {
5448 margin-top: 0;
5449 margin-bottom: 5px;
5450 }
5451 .list-group-item-text {
5452 margin-bottom: 0;
5453 line-height: 1.3;
5454 }
5455 .panel {
5456 margin-bottom: 20px;
5457 background-color: #fff;
5458 border: 1px solid transparent;
5459 border-radius: 4px;
5460 -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
5461 box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
5462 }
5463 .panel-body {
5464 padding: 15px;
5465 }
5466 .panel-heading {
5467 padding: 10px 15px;
5468 border-bottom: 1px solid transparent;
5469 border-top-left-radius: 3px;
5470 border-top-right-radius: 3px;
5471 }
5472 .panel-heading > .dropdown .dropdown-toggle {
5473 color: inherit;
5474 }
5475 .panel-title {
5476 margin-top: 0;
5477 margin-bottom: 0;
5478 font-size: 16px;
5479 color: inherit;
5480 }
5481 .panel-title > a,
5482 .panel-title > small,
5483 .panel-title > .small,
5484 .panel-title > small > a,
5485 .panel-title > .small > a {
5486 color: inherit;
5487 }
5488 .panel-footer {
5489 padding: 10px 15px;
5490 background-color: #f5f5f5;
5491 border-top: 1px solid #ddd;
5492 border-bottom-right-radius: 3px;
5493 border-bottom-left-radius: 3px;
5494 }
5495 .panel > .list-group,
5496 .panel > .panel-collapse > .list-group {
5497 margin-bottom: 0;
5498 }
5499 .panel > .list-group .list-group-item,
5500 .panel > .panel-collapse > .list-group .list-group-item {
5501 border-width: 1px 0;
5502 border-radius: 0;
5503 }
5504 .panel > .list-group:first-child .list-group-item:first-child,
5505 .panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
5506 border-top: 0;
5507 border-top-left-radius: 3px;
5508 border-top-right-radius: 3px;
5509 }
5510 .panel > .list-group:last-child .list-group-item:last-child,
5511 .panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
5512 border-bottom: 0;
5513 border-bottom-right-radius: 3px;
5514 border-bottom-left-radius: 3px;
5515 }
5516 .panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
5517 border-top-left-radius: 0;
5518 border-top-right-radius: 0;
5519 }
5520 .panel-heading + .list-group .list-group-item:first-child {
5521 border-top-width: 0;
5522 }
5523 .list-group + .panel-footer {
5524 border-top-width: 0;
5525 }
5526 .panel > .table,
5527 .panel > .table-responsive > .table,
5528 .panel > .panel-collapse > .table {
5529 margin-bottom: 0;
5530 }
5531 .panel > .table caption,
5532 .panel > .table-responsive > .table caption,
5533 .panel > .panel-collapse > .table caption {
5534 padding-right: 15px;
5535 padding-left: 15px;
5536 }
5537 .panel > .table:first-child,
5538 .panel > .table-responsive:first-child > .table:first-child {
5539 border-top-left-radius: 3px;
5540 border-top-right-radius: 3px;
5541 }
5542 .panel > .table:first-child > thead:first-child > tr:first-child,
5543 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
5544 .panel > .table:first-child > tbody:first-child > tr:first-child,
5545 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
5546 border-top-left-radius: 3px;
5547 border-top-right-radius: 3px;
5548 }
5549 .panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
5550 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
5551 .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
5552 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
5553 .panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
5554 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
5555 .panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
5556 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
5557 border-top-left-radius: 3px;
5558 }
5559 .panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
5560 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
5561 .panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
5562 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
5563 .panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
5564 .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
5565 .panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
5566 .panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
5567 border-top-right-radius: 3px;
5568 }
5569 .panel > .table:last-child,
5570 .panel > .table-responsive:last-child > .table:last-child {
5571 border-bottom-right-radius: 3px;
5572 border-bottom-left-radius: 3px;
5573 }
5574 .panel > .table:last-child > tbody:last-child > tr:last-child,
5575 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
5576 .panel > .table:last-child > tfoot:last-child > tr:last-child,
5577 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
5578 border-bottom-right-radius: 3px;
5579 border-bottom-left-radius: 3px;
5580 }
5581 .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
5582 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
5583 .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
5584 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
5585 .panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
5586 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
5587 .panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
5588 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
5589 border-bottom-left-radius: 3px;
5590 }
5591 .panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
5592 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
5593 .panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
5594 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
5595 .panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
5596 .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
5597 .panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
5598 .panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
5599 border-bottom-right-radius: 3px;
5600 }
5601 .panel > .panel-body + .table,
5602 .panel > .panel-body + .table-responsive,
5603 .panel > .table + .panel-body,
5604 .panel > .table-responsive + .panel-body {
5605 border-top: 1px solid #ddd;
5606 }
5607 .panel > .table > tbody:first-child > tr:first-child th,
5608 .panel > .table > tbody:first-child > tr:first-child td {
5609 border-top: 0;
5610 }
5611 .panel > .table-bordered,
5612 .panel > .table-responsive > .table-bordered {
5613 border: 0;
5614 }
5615 .panel > .table-bordered > thead > tr > th:first-child,
5616 .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
5617 .panel > .table-bordered > tbody > tr > th:first-child,
5618 .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
5619 .panel > .table-bordered > tfoot > tr > th:first-child,
5620 .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
5621 .panel > .table-bordered > thead > tr > td:first-child,
5622 .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
5623 .panel > .table-bordered > tbody > tr > td:first-child,
5624 .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
5625 .panel > .table-bordered > tfoot > tr > td:first-child,
5626 .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
5627 border-left: 0;
5628 }
5629 .panel > .table-bordered > thead > tr > th:last-child,
5630 .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
5631 .panel > .table-bordered > tbody > tr > th:last-child,
5632 .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
5633 .panel > .table-bordered > tfoot > tr > th:last-child,
5634 .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
5635 .panel > .table-bordered > thead > tr > td:last-child,
5636 .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
5637 .panel > .table-bordered > tbody > tr > td:last-child,
5638 .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
5639 .panel > .table-bordered > tfoot > tr > td:last-child,
5640 .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
5641 border-right: 0;
5642 }
5643 .panel > .table-bordered > thead > tr:first-child > td,
5644 .panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
5645 .panel > .table-bordered > tbody > tr:first-child > td,
5646 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
5647 .panel > .table-bordered > thead > tr:first-child > th,
5648 .panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
5649 .panel > .table-bordered > tbody > tr:first-child > th,
5650 .panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
5651 border-bottom: 0;
5652 }
5653 .panel > .table-bordered > tbody > tr:last-child > td,
5654 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
5655 .panel > .table-bordered > tfoot > tr:last-child > td,
5656 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
5657 .panel > .table-bordered > tbody > tr:last-child > th,
5658 .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
5659 .panel > .table-bordered > tfoot > tr:last-child > th,
5660 .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
5661 border-bottom: 0;
5662 }
5663 .panel > .table-responsive {
5664 margin-bottom: 0;
5665 border: 0;
5666 }
5667 .panel-group {
5668 margin-bottom: 20px;
5669 }
5670 .panel-group .panel {
5671 margin-bottom: 0;
5672 border-radius: 4px;
5673 }
5674 .panel-group .panel + .panel {
5675 margin-top: 5px;
5676 }
5677 .panel-group .panel-heading {
5678 border-bottom: 0;
5679 }
5680 .panel-group .panel-heading + .panel-collapse > .panel-body,
5681 .panel-group .panel-heading + .panel-collapse > .list-group {
5682 border-top: 1px solid #ddd;
5683 }
5684 .panel-group .panel-footer {
5685 border-top: 0;
5686 }
5687 .panel-group .panel-footer + .panel-collapse .panel-body {
5688 border-bottom: 1px solid #ddd;
5689 }
5690 .panel-default {
5691 border-color: #ddd;
5692 }
5693 .panel-default > .panel-heading {
5694 color: #333;
5695 background-color: #f5f5f5;
5696 border-color: #ddd;
5697 }
5698 .panel-default > .panel-heading + .panel-collapse > .panel-body {
5699 border-top-color: #ddd;
5700 }
5701 .panel-default > .panel-heading .badge {
5702 color: #f5f5f5;
5703 background-color: #333;
5704 }
5705 .panel-default > .panel-footer + .panel-collapse > .panel-body {
5706 border-bottom-color: #ddd;
5707 }
5708 .panel-primary {
5709 border-color: #337ab7;
5710 }
5711 .panel-primary > .panel-heading {
5712 color: #fff;
5713 background-color: #337ab7;
5714 border-color: #337ab7;
5715 }
5716 .panel-primary > .panel-heading + .panel-collapse > .panel-body {
5717 border-top-color: #337ab7;
5718 }
5719 .panel-primary > .panel-heading .badge {
5720 color: #337ab7;
5721 background-color: #fff;
5722 }
5723 .panel-primary > .panel-footer + .panel-collapse > .panel-body {
5724 border-bottom-color: #337ab7;
5725 }
5726 .panel-success {
5727 border-color: #d6e9c6;
5728 }
5729 .panel-success > .panel-heading {
5730 color: #3c763d;
5731 background-color: #dff0d8;
5732 border-color: #d6e9c6;
5733 }
5734 .panel-success > .panel-heading + .panel-collapse > .panel-body {
5735 border-top-color: #d6e9c6;
5736 }
5737 .panel-success > .panel-heading .badge {
5738 color: #dff0d8;
5739 background-color: #3c763d;
5740 }
5741 .panel-success > .panel-footer + .panel-collapse > .panel-body {
5742 border-bottom-color: #d6e9c6;
5743 }
5744 .panel-info {
5745 border-color: #bce8f1;
5746 }
5747 .panel-info > .panel-heading {
5748 color: #31708f;
5749 background-color: #d9edf7;
5750 border-color: #bce8f1;
5751 }
5752 .panel-info > .panel-heading + .panel-collapse > .panel-body {
5753 border-top-color: #bce8f1;
5754 }
5755 .panel-info > .panel-heading .badge {
5756 color: #d9edf7;
5757 background-color: #31708f;
5758 }
5759 .panel-info > .panel-footer + .panel-collapse > .panel-body {
5760 border-bottom-color: #bce8f1;
5761 }
5762 .panel-warning {
5763 border-color: #faebcc;
5764 }
5765 .panel-warning > .panel-heading {
5766 color: #8a6d3b;
5767 background-color: #fcf8e3;
5768 border-color: #faebcc;
5769 }
5770 .panel-warning > .panel-heading + .panel-collapse > .panel-body {
5771 border-top-color: #faebcc;
5772 }
5773 .panel-warning > .panel-heading .badge {
5774 color: #fcf8e3;
5775 background-color: #8a6d3b;
5776 }
5777 .panel-warning > .panel-footer + .panel-collapse > .panel-body {
5778 border-bottom-color: #faebcc;
5779 }
5780 .panel-danger {
5781 border-color: #ebccd1;
5782 }
5783 .panel-danger > .panel-heading {
5784 color: #a94442;
5785 background-color: #f2dede;
5786 border-color: #ebccd1;
5787 }
5788 .panel-danger > .panel-heading + .panel-collapse > .panel-body {
5789 border-top-color: #ebccd1;
5790 }
5791 .panel-danger > .panel-heading .badge {
5792 color: #f2dede;
5793 background-color: #a94442;
5794 }
5795 .panel-danger > .panel-footer + .panel-collapse > .panel-body {
5796 border-bottom-color: #ebccd1;
5797 }
5798 .embed-responsive {
5799 position: relative;
5800 display: block;
5801 height: 0;
5802 padding: 0;
5803 overflow: hidden;
5804 }
5805 .embed-responsive .embed-responsive-item,
5806 .embed-responsive iframe,
5807 .embed-responsive embed,
5808 .embed-responsive object,
5809 .embed-responsive video {
5810 position: absolute;
5811 top: 0;
5812 bottom: 0;
5813 left: 0;
5814 width: 100%;
5815 height: 100%;
5816 border: 0;
5817 }
5818 .embed-responsive-16by9 {
5819 padding-bottom: 56.25%;
5820 }
5821 .embed-responsive-4by3 {
5822 padding-bottom: 75%;
5823 }
5824 .well {
5825 min-height: 20px;
5826 padding: 19px;
5827 margin-bottom: 20px;
5828 background-color: #f5f5f5;
5829 border: 1px solid #e3e3e3;
5830 border-radius: 4px;
5831 -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
5832 box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
5833 }
5834 .well blockquote {
5835 border-color: #ddd;
5836 border-color: rgba(0, 0, 0, .15);
5837 }
5838 .well-lg {
5839 padding: 24px;
5840 border-radius: 6px;
5841 }
5842 .well-sm {
5843 padding: 9px;
5844 border-radius: 3px;
5845 }
5846 .close {
5847 float: right;
5848 font-size: 21px;
5849 font-weight: bold;
5850 line-height: 1;
5851 color: #000;
5852 text-shadow: 0 1px 0 #fff;
5853 filter: alpha(opacity=20);
5854 opacity: .2;
5855 }
5856 .close:hover,
5857 .close:focus {
5858 color: #000;
5859 text-decoration: none;
5860 cursor: pointer;
5861 filter: alpha(opacity=50);
5862 opacity: .5;
5863 }
5864 button.close {
5865 -webkit-appearance: none;
5866 padding: 0;
5867 cursor: pointer;
5868 background: transparent;
5869 border: 0;
5870 }
5871 .modal-open {
5872 overflow: hidden;
5873 }
5874 .modal {
5875 position: fixed;
5876 top: 0;
5877 right: 0;
5878 bottom: 0;
5879 left: 0;
5880 z-index: 1050;
5881 display: none;
5882 overflow: hidden;
5883 -webkit-overflow-scrolling: touch;
5884 outline: 0;
5885 }
5886 .modal.fade .modal-dialog {
5887 -webkit-transition: -webkit-transform .3s ease-out;
5888 -o-transition: -o-transform .3s ease-out;
5889 transition: transform .3s ease-out;
5890 -webkit-transform: translate(0, -25%);
5891 -ms-transform: translate(0, -25%);
5892 -o-transform: translate(0, -25%);
5893 transform: translate(0, -25%);
5894 }
5895 .modal.in .modal-dialog {
5896 -webkit-transform: translate(0, 0);
5897 -ms-transform: translate(0, 0);
5898 -o-transform: translate(0, 0);
5899 transform: translate(0, 0);
5900 }
5901 .modal-open .modal {
5902 overflow-x: hidden;
5903 overflow-y: auto;
5904 }
5905 .modal-dialog {
5906 position: relative;
5907 width: auto;
5908 margin: 10px;
5909 }
5910 .modal-content {
5911 position: relative;
5912 background-color: #fff;
5913 -webkit-background-clip: padding-box;
5914 background-clip: padding-box;
5915 border: 1px solid #999;
5916 border: 1px solid rgba(0, 0, 0, .2);
5917 border-radius: 6px;
5918 outline: 0;
5919 -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
5920 box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
5921 }
5922 .modal-backdrop {
5923 position: fixed;
5924 top: 0;
5925 right: 0;
5926 bottom: 0;
5927 left: 0;
5928 z-index: 1040;
5929 background-color: #000;
5930 }
5931 .modal-backdrop.fade {
5932 filter: alpha(opacity=0);
5933 opacity: 0;
5934 }
5935 .modal-backdrop.in {
5936 filter: alpha(opacity=50);
5937 opacity: .5;
5938 }
5939 .modal-header {
5940 padding: 15px;
5941 border-bottom: 1px solid #e5e5e5;
5942 }
5943 .modal-header .close {
5944 margin-top: -2px;
5945 }
5946 .modal-title {
5947 margin: 0;
5948 line-height: 1.42857143;
5949 }
5950 .modal-body {
5951 position: relative;
5952 padding: 15px;
5953 }
5954 .modal-footer {
5955 padding: 15px;
5956 text-align: right;
5957 border-top: 1px solid #e5e5e5;
5958 }
5959 .modal-footer .btn + .btn {
5960 margin-bottom: 0;
5961 margin-left: 5px;
5962 }
5963 .modal-footer .btn-group .btn + .btn {
5964 margin-left: -1px;
5965 }
5966 .modal-footer .btn-block + .btn-block {
5967 margin-left: 0;
5968 }
5969 .modal-scrollbar-measure {
5970 position: absolute;
5971 top: -9999px;
5972 width: 50px;
5973 height: 50px;
5974 overflow: scroll;
5975 }
5976 @media (min-width: 768px) {
5977 .modal-dialog {
5978 width: 600px;
5979 margin: 30px auto;
5980 }
5981 .modal-content {
5982 -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
5983 box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
5984 }
5985 .modal-sm {
5986 width: 300px;
5987 }
5988 }
5989 @media (min-width: 992px) {
5990 .modal-lg {
5991 width: 900px;
5992 }
5993 }
5994 .tooltip {
5995 position: absolute;
5996 z-index: 1070;
5997 display: block;
5998 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
5999 font-size: 12px;
6000 font-style: normal;
6001 font-weight: normal;
6002 line-height: 1.42857143;
6003 text-align: left;
6004 text-align: start;
6005 text-decoration: none;
6006 text-shadow: none;
6007 text-transform: none;
6008 letter-spacing: normal;
6009 word-break: normal;
6010 word-spacing: normal;
6011 word-wrap: normal;
6012 white-space: normal;
6013 filter: alpha(opacity=0);
6014 opacity: 0;
6015
6016 line-break: auto;
6017 }
6018 .tooltip.in {
6019 filter: alpha(opacity=90);
6020 opacity: .9;
6021 }
6022 .tooltip.top {
6023 padding: 5px 0;
6024 margin-top: -3px;
6025 }
6026 .tooltip.right {
6027 padding: 0 5px;
6028 margin-left: 3px;
6029 }
6030 .tooltip.bottom {
6031 padding: 5px 0;
6032 margin-top: 3px;
6033 }
6034 .tooltip.left {
6035 padding: 0 5px;
6036 margin-left: -3px;
6037 }
6038 .tooltip-inner {
6039 max-width: 200px;
6040 padding: 3px 8px;
6041 color: #fff;
6042 text-align: center;
6043 background-color: #000;
6044 border-radius: 4px;
6045 }
6046 .tooltip-arrow {
6047 position: absolute;
6048 width: 0;
6049 height: 0;
6050 border-color: transparent;
6051 border-style: solid;
6052 }
6053 .tooltip.top .tooltip-arrow {
6054 bottom: 0;
6055 left: 50%;
6056 margin-left: -5px;
6057 border-width: 5px 5px 0;
6058 border-top-color: #000;
6059 }
6060 .tooltip.top-left .tooltip-arrow {
6061 right: 5px;
6062 bottom: 0;
6063 margin-bottom: -5px;
6064 border-width: 5px 5px 0;
6065 border-top-color: #000;
6066 }
6067 .tooltip.top-right .tooltip-arrow {
6068 bottom: 0;
6069 left: 5px;
6070 margin-bottom: -5px;
6071 border-width: 5px 5px 0;
6072 border-top-color: #000;
6073 }
6074 .tooltip.right .tooltip-arrow {
6075 top: 50%;
6076 left: 0;
6077 margin-top: -5px;
6078 border-width: 5px 5px 5px 0;
6079 border-right-color: #000;
6080 }
6081 .tooltip.left .tooltip-arrow {
6082 top: 50%;
6083 right: 0;
6084 margin-top: -5px;
6085 border-width: 5px 0 5px 5px;
6086 border-left-color: #000;
6087 }
6088 .tooltip.bottom .tooltip-arrow {
6089 top: 0;
6090 left: 50%;
6091 margin-left: -5px;
6092 border-width: 0 5px 5px;
6093 border-bottom-color: #000;
6094 }
6095 .tooltip.bottom-left .tooltip-arrow {
6096 top: 0;
6097 right: 5px;
6098 margin-top: -5px;
6099 border-width: 0 5px 5px;
6100 border-bottom-color: #000;
6101 }
6102 .tooltip.bottom-right .tooltip-arrow {
6103 top: 0;
6104 left: 5px;
6105 margin-top: -5px;
6106 border-width: 0 5px 5px;
6107 border-bottom-color: #000;
6108 }
6109 .popover {
6110 position: absolute;
6111 top: 0;
6112 left: 0;
6113 z-index: 1060;
6114 display: none;
6115 max-width: 276px;
6116 padding: 1px;
6117 font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
6118 font-size: 14px;
6119 font-style: normal;
6120 font-weight: normal;
6121 line-height: 1.42857143;
6122 text-align: left;
6123 text-align: start;
6124 text-decoration: none;
6125 text-shadow: none;
6126 text-transform: none;
6127 letter-spacing: normal;
6128 word-break: normal;
6129 word-spacing: normal;
6130 word-wrap: normal;
6131 white-space: normal;
6132 background-color: #fff;
6133 -webkit-background-clip: padding-box;
6134 background-clip: padding-box;
6135 border: 1px solid #ccc;
6136 border: 1px solid rgba(0, 0, 0, .2);
6137 border-radius: 6px;
6138 -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
6139 box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
6140
6141 line-break: auto;
6142 }
6143 .popover.top {
6144 margin-top: -10px;
6145 }
6146 .popover.right {
6147 margin-left: 10px;
6148 }
6149 .popover.bottom {
6150 margin-top: 10px;
6151 }
6152 .popover.left {
6153 margin-left: -10px;
6154 }
6155 .popover-title {
6156 padding: 8px 14px;
6157 margin: 0;
6158 font-size: 14px;
6159 background-color: #f7f7f7;
6160 border-bottom: 1px solid #ebebeb;
6161 border-radius: 5px 5px 0 0;
6162 }
6163 .popover-content {
6164 padding: 9px 14px;
6165 }
6166 .popover > .arrow,
6167 .popover > .arrow:after {
6168 position: absolute;
6169 display: block;
6170 width: 0;
6171 height: 0;
6172 border-color: transparent;
6173 border-style: solid;
6174 }
6175 .popover > .arrow {
6176 border-width: 11px;
6177 }
6178 .popover > .arrow:after {
6179 content: "";
6180 border-width: 10px;
6181 }
6182 .popover.top > .arrow {
6183 bottom: -11px;
6184 left: 50%;
6185 margin-left: -11px;
6186 border-top-color: #999;
6187 border-top-color: rgba(0, 0, 0, .25);
6188 border-bottom-width: 0;
6189 }
6190 .popover.top > .arrow:after {
6191 bottom: 1px;
6192 margin-left: -10px;
6193 content: " ";
6194 border-top-color: #fff;
6195 border-bottom-width: 0;
6196 }
6197 .popover.right > .arrow {
6198 top: 50%;
6199 left: -11px;
6200 margin-top: -11px;
6201 border-right-color: #999;
6202 border-right-color: rgba(0, 0, 0, .25);
6203 border-left-width: 0;
6204 }
6205 .popover.right > .arrow:after {
6206 bottom: -10px;
6207 left: 1px;
6208 content: " ";
6209 border-right-color: #fff;
6210 border-left-width: 0;
6211 }
6212 .popover.bottom > .arrow {
6213 top: -11px;
6214 left: 50%;
6215 margin-left: -11px;
6216 border-top-width: 0;
6217 border-bottom-color: #999;
6218 border-bottom-color: rgba(0, 0, 0, .25);
6219 }
6220 .popover.bottom > .arrow:after {
6221 top: 1px;
6222 margin-left: -10px;
6223 content: " ";
6224 border-top-width: 0;
6225 border-bottom-color: #fff;
6226 }
6227 .popover.left > .arrow {
6228 top: 50%;
6229 right: -11px;
6230 margin-top: -11px;
6231 border-right-width: 0;
6232 border-left-color: #999;
6233 border-left-color: rgba(0, 0, 0, .25);
6234 }
6235 .popover.left > .arrow:after {
6236 right: 1px;
6237 bottom: -10px;
6238 content: " ";
6239 border-right-width: 0;
6240 border-left-color: #fff;
6241 }
6242 .carousel {
6243 position: relative;
6244 }
6245 .carousel-inner {
6246 position: relative;
6247 width: 100%;
6248 overflow: hidden;
6249 }
6250 .carousel-inner > .item {
6251 position: relative;
6252 display: none;
6253 -webkit-transition: .6s ease-in-out left;
6254 -o-transition: .6s ease-in-out left;
6255 transition: .6s ease-in-out left;
6256 }
6257 .carousel-inner > .item > img,
6258 .carousel-inner > .item > a > img {
6259 line-height: 1;
6260 }
6261 @media all and (transform-3d), (-webkit-transform-3d) {
6262 .carousel-inner > .item {
6263 -webkit-transition: -webkit-transform .6s ease-in-out;
6264 -o-transition: -o-transform .6s ease-in-out;
6265 transition: transform .6s ease-in-out;
6266
6267 -webkit-backface-visibility: hidden;
6268 backface-visibility: hidden;
6269 -webkit-perspective: 1000px;
6270 perspective: 1000px;
6271 }
6272 .carousel-inner > .item.next,
6273 .carousel-inner > .item.active.right {
6274 left: 0;
6275 -webkit-transform: translate3d(100%, 0, 0);
6276 transform: translate3d(100%, 0, 0);
6277 }
6278 .carousel-inner > .item.prev,
6279 .carousel-inner > .item.active.left {
6280 left: 0;
6281 -webkit-transform: translate3d(-100%, 0, 0);
6282 transform: translate3d(-100%, 0, 0);
6283 }
6284 .carousel-inner > .item.next.left,
6285 .carousel-inner > .item.prev.right,
6286 .carousel-inner > .item.active {
6287 left: 0;
6288 -webkit-transform: translate3d(0, 0, 0);
6289 transform: translate3d(0, 0, 0);
6290 }
6291 }
6292 .carousel-inner > .active,
6293 .carousel-inner > .next,
6294 .carousel-inner > .prev {
6295 display: block;
6296 }
6297 .carousel-inner > .active {
6298 left: 0;
6299 }
6300 .carousel-inner > .next,
6301 .carousel-inner > .prev {
6302 position: absolute;
6303 top: 0;
6304 width: 100%;
6305 }
6306 .carousel-inner > .next {
6307 left: 100%;
6308 }
6309 .carousel-inner > .prev {
6310 left: -100%;
6311 }
6312 .carousel-inner > .next.left,
6313 .carousel-inner > .prev.right {
6314 left: 0;
6315 }
6316 .carousel-inner > .active.left {
6317 left: -100%;
6318 }
6319 .carousel-inner > .active.right {
6320 left: 100%;
6321 }
6322 .carousel-control {
6323 position: absolute;
6324 top: 0;
6325 bottom: 0;
6326 left: 0;
6327 width: 15%;
6328 font-size: 20px;
6329 color: #fff;
6330 text-align: center;
6331 text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
6332 background-color: rgba(0, 0, 0, 0);
6333 filter: alpha(opacity=50);
6334 opacity: .5;
6335 }
6336 .carousel-control.left {
6337 background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
6338 background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
6339 background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));
6340 background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
6341 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
6342 background-repeat: repeat-x;
6343 }
6344 .carousel-control.right {
6345 right: 0;
6346 left: auto;
6347 background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
6348 background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
6349 background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));
6350 background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
6351 filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
6352 background-repeat: repeat-x;
6353 }
6354 .carousel-control:hover,
6355 .carousel-control:focus {
6356 color: #fff;
6357 text-decoration: none;
6358 filter: alpha(opacity=90);
6359 outline: 0;
6360 opacity: .9;
6361 }
6362 .carousel-control .icon-prev,
6363 .carousel-control .icon-next,
6364 .carousel-control .glyphicon-chevron-left,
6365 .carousel-control .glyphicon-chevron-right {
6366 position: absolute;
6367 top: 50%;
6368 z-index: 5;
6369 display: inline-block;
6370 margin-top: -10px;
6371 }
6372 .carousel-control .icon-prev,
6373 .carousel-control .glyphicon-chevron-left {
6374 left: 50%;
6375 margin-left: -10px;
6376 }
6377 .carousel-control .icon-next,
6378 .carousel-control .glyphicon-chevron-right {
6379 right: 50%;
6380 margin-right: -10px;
6381 }
6382 .carousel-control .icon-prev,
6383 .carousel-control .icon-next {
6384 width: 20px;
6385 height: 20px;
6386 font-family: serif;
6387 line-height: 1;
6388 }
6389 .carousel-control .icon-prev:before {
6390 content: '\2039';
6391 }
6392 .carousel-control .icon-next:before {
6393 content: '\203a';
6394 }
6395 .carousel-indicators {
6396 position: absolute;
6397 bottom: 10px;
6398 left: 50%;
6399 z-index: 15;
6400 width: 60%;
6401 padding-left: 0;
6402 margin-left: -30%;
6403 text-align: center;
6404 list-style: none;
6405 }
6406 .carousel-indicators li {
6407 display: inline-block;
6408 width: 10px;
6409 height: 10px;
6410 margin: 1px;
6411 text-indent: -999px;
6412 cursor: pointer;
6413 background-color: #000 \9;
6414 background-color: rgba(0, 0, 0, 0);
6415 border: 1px solid #fff;
6416 border-radius: 10px;
6417 }
6418 .carousel-indicators .active {
6419 width: 12px;
6420 height: 12px;
6421 margin: 0;
6422 background-color: #fff;
6423 }
6424 .carousel-caption {
6425 position: absolute;
6426 right: 15%;
6427 bottom: 20px;
6428 left: 15%;
6429 z-index: 10;
6430 padding-top: 20px;
6431 padding-bottom: 20px;
6432 color: #fff;
6433 text-align: center;
6434 text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
6435 }
6436 .carousel-caption .btn {
6437 text-shadow: none;
6438 }
6439 @media screen and (min-width: 768px) {
6440 .carousel-control .glyphicon-chevron-left,
6441 .carousel-control .glyphicon-chevron-right,
6442 .carousel-control .icon-prev,
6443 .carousel-control .icon-next {
6444 width: 30px;
6445 height: 30px;
6446 margin-top: -10px;
6447 font-size: 30px;
6448 }
6449 .carousel-control .glyphicon-chevron-left,
6450 .carousel-control .icon-prev {
6451 margin-left: -10px;
6452 }
6453 .carousel-control .glyphicon-chevron-right,
6454 .carousel-control .icon-next {
6455 margin-right: -10px;
6456 }
6457 .carousel-caption {
6458 right: 20%;
6459 left: 20%;
6460 padding-bottom: 30px;
6461 }
6462 .carousel-indicators {
6463 bottom: 20px;
6464 }
6465 }
6466 .clearfix:before,
6467 .clearfix:after,
6468 .dl-horizontal dd:before,
6469 .dl-horizontal dd:after,
6470 .container:before,
6471 .container:after,
6472 .container-fluid:before,
6473 .container-fluid:after,
6474 .row:before,
6475 .row:after,
6476 .form-horizontal .form-group:before,
6477 .form-horizontal .form-group:after,
6478 .btn-toolbar:before,
6479 .btn-toolbar:after,
6480 .btn-group-vertical > .btn-group:before,
6481 .btn-group-vertical > .btn-group:after,
6482 .nav:before,
6483 .nav:after,
6484 .navbar:before,
6485 .navbar:after,
6486 .navbar-header:before,
6487 .navbar-header:after,
6488 .navbar-collapse:before,
6489 .navbar-collapse:after,
6490 .pager:before,
6491 .pager:after,
6492 .panel-body:before,
6493 .panel-body:after,
6494 .modal-header:before,
6495 .modal-header:after,
6496 .modal-footer:before,
6497 .modal-footer:after {
6498 display: table;
6499 content: " ";
6500 }
6501 .clearfix:after,
6502 .dl-horizontal dd:after,
6503 .container:after,
6504 .container-fluid:after,
6505 .row:after,
6506 .form-horizontal .form-group:after,
6507 .btn-toolbar:after,
6508 .btn-group-vertical > .btn-group:after,
6509 .nav:after,
6510 .navbar:after,
6511 .navbar-header:after,
6512 .navbar-collapse:after,
6513 .pager:after,
6514 .panel-body:after,
6515 .modal-header:after,
6516 .modal-footer:after {
6517 clear: both;
6518 }
6519 .center-block {
6520 display: block;
6521 margin-right: auto;
6522 margin-left: auto;
6523 }
6524 .pull-right {
6525 float: right !important;
6526 }
6527 .pull-left {
6528 float: left !important;
6529 }
6530 .hide {
6531 display: none !important;
6532 }
6533 .show {
6534 display: block !important;
6535 }
6536 .invisible {
6537 visibility: hidden;
6538 }
6539 .text-hide {
6540 font: 0/0 a;
6541 color: transparent;
6542 text-shadow: none;
6543 background-color: transparent;
6544 border: 0;
6545 }
6546 .hidden {
6547 display: none !important;
6548 }
6549 .affix {
6550 position: fixed;
6551 }
6552 @-ms-viewport {
6553 width: device-width;
6554 }
6555 .visible-xs,
6556 .visible-sm,
6557 .visible-md,
6558 .visible-lg {
6559 display: none !important;
6560 }
6561 .visible-xs-block,
6562 .visible-xs-inline,
6563 .visible-xs-inline-block,
6564 .visible-sm-block,
6565 .visible-sm-inline,
6566 .visible-sm-inline-block,
6567 .visible-md-block,
6568 .visible-md-inline,
6569 .visible-md-inline-block,
6570 .visible-lg-block,
6571 .visible-lg-inline,
6572 .visible-lg-inline-block {
6573 display: none !important;
6574 }
6575 @media (max-width: 767px) {
6576 .visible-xs {
6577 display: block !important;
6578 }
6579 table.visible-xs {
6580 display: table !important;
6581 }
6582 tr.visible-xs {
6583 display: table-row !important;
6584 }
6585 th.visible-xs,
6586 td.visible-xs {
6587 display: table-cell !important;
6588 }
6589 }
6590 @media (max-width: 767px) {
6591 .visible-xs-block {
6592 display: block !important;
6593 }
6594 }
6595 @media (max-width: 767px) {
6596 .visible-xs-inline {
6597 display: inline !important;
6598 }
6599 }
6600 @media (max-width: 767px) {
6601 .visible-xs-inline-block {
6602 display: inline-block !important;
6603 }
6604 }
6605 @media (min-width: 768px) and (max-width: 991px) {
6606 .visible-sm {
6607 display: block !important;
6608 }
6609 table.visible-sm {
6610 display: table !important;
6611 }
6612 tr.visible-sm {
6613 display: table-row !important;
6614 }
6615 th.visible-sm,
6616 td.visible-sm {
6617 display: table-cell !important;
6618 }
6619 }
6620 @media (min-width: 768px) and (max-width: 991px) {
6621 .visible-sm-block {
6622 display: block !important;
6623 }
6624 }
6625 @media (min-width: 768px) and (max-width: 991px) {
6626 .visible-sm-inline {
6627 display: inline !important;
6628 }
6629 }
6630 @media (min-width: 768px) and (max-width: 991px) {
6631 .visible-sm-inline-block {
6632 display: inline-block !important;
6633 }
6634 }
6635 @media (min-width: 992px) and (max-width: 1199px) {
6636 .visible-md {
6637 display: block !important;
6638 }
6639 table.visible-md {
6640 display: table !important;
6641 }
6642 tr.visible-md {
6643 display: table-row !important;
6644 }
6645 th.visible-md,
6646 td.visible-md {
6647 display: table-cell !important;
6648 }
6649 }
6650 @media (min-width: 992px) and (max-width: 1199px) {
6651 .visible-md-block {
6652 display: block !important;
6653 }
6654 }
6655 @media (min-width: 992px) and (max-width: 1199px) {
6656 .visible-md-inline {
6657 display: inline !important;
6658 }
6659 }
6660 @media (min-width: 992px) and (max-width: 1199px) {
6661 .visible-md-inline-block {
6662 display: inline-block !important;
6663 }
6664 }
6665 @media (min-width: 1200px) {
6666 .visible-lg {
6667 display: block !important;
6668 }
6669 table.visible-lg {
6670 display: table !important;
6671 }
6672 tr.visible-lg {
6673 display: table-row !important;
6674 }
6675 th.visible-lg,
6676 td.visible-lg {
6677 display: table-cell !important;
6678 }
6679 }
6680 @media (min-width: 1200px) {
6681 .visible-lg-block {
6682 display: block !important;
6683 }
6684 }
6685 @media (min-width: 1200px) {
6686 .visible-lg-inline {
6687 display: inline !important;
6688 }
6689 }
6690 @media (min-width: 1200px) {
6691 .visible-lg-inline-block {
6692 display: inline-block !important;
6693 }
6694 }
6695 @media (max-width: 767px) {
6696 .hidden-xs {
6697 display: none !important;
6698 }
6699 }
6700 @media (min-width: 768px) and (max-width: 991px) {
6701 .hidden-sm {
6702 display: none !important;
6703 }
6704 }
6705 @media (min-width: 992px) and (max-width: 1199px) {
6706 .hidden-md {
6707 display: none !important;
6708 }
6709 }
6710 @media (min-width: 1200px) {
6711 .hidden-lg {
6712 display: none !important;
6713 }
6714 }
6715 .visible-print {
6716 display: none !important;
6717 }
6718 @media print {
6719 .visible-print {
6720 display: block !important;
6721 }
6722 table.visible-print {
6723 display: table !important;
6724 }
6725 tr.visible-print {
6726 display: table-row !important;
6727 }
6728 th.visible-print,
6729 td.visible-print {
6730 display: table-cell !important;
6731 }
6732 }
6733 .visible-print-block {
6734 display: none !important;
6735 }
6736 @media print {
6737 .visible-print-block {
6738 display: block !important;
6739 }
6740 }
6741 .visible-print-inline {
6742 display: none !important;
6743 }
6744 @media print {
6745 .visible-print-inline {
6746 display: inline !important;
6747 }
6748 }
6749 .visible-print-inline-block {
6750 display: none !important;
6751 }
6752 @media print {
6753 .visible-print-inline-block {
6754 display: inline-block !important;
6755 }
6756 }
6757 @media print {
6758 .hidden-print {
6759 display: none !important;
6760 }
6761 }
6762 /*# sourceMappingURL=bootstrap.css.map */
6763 </style>
6764 <style>body {
6765 padding-bottom: 32px;
6766 }
6767 .form-control[readonly] {
6768 cursor: text;
6769 }
6770 .feedback-container {
6771 position: fixed;
6772 top: 0;
6773 width: 100%;
6774 text-align: center;
6775 z-index: 4;
6776 }
6777 .feedback {
6778 display: table;
6779 padding: 0.5em 1em;
6780 background-color: orange;
6781 margin: 0 auto;
6782 font-size: 2em;
6783 color: #444;
6784 border: 2px solid #555;
6785 border-top: 0;
6786 border-bottom-left-radius: 20px 20px;
6787 border-bottom-right-radius: 20px 20px;
6788 }
6789 .no-border {
6790 border: 0;
6791 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
6792 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
6793 }
6794 .phrase {
6795 word-break: keep-all;
6796 }
6797 .generate-container .strength {
6798 /* override mobile width from bootstrap */
6799 width: auto!important;
6800 display: inline-block;
6801 }
6802 .languages a {
6803 padding-left: 10px;
6804 }
6805 .languages a:nth-of-type(1) {
6806 margin-left: -12px;
6807 padding-left: 0;
6808 }
6809 .monospace {
6810 font-family: monospace;
6811 }
6812 .entropy-container .filtered,
6813 .entropy-container .binary {
6814 word-wrap: break-word;
6815 }
6816 .entropy-container li {
6817 padding-bottom: 5px;
6818 }
6819 .card-suit {
6820 font-size: 19px;
6821 line-height: 0;
6822 }
6823 .card-suit.club {
6824 color: #009F00;
6825 }
6826 .card-suit.diamond {
6827 color: #3D5DC4;
6828 }
6829 .card-suit.heart {
6830 color: #F00;
6831 }
6832 .card-suit.spade {
6833 color: #000;
6834 }
6835 .qr-container {
6836 position: fixed;
6837 top: 0;
6838 right: 0;
6839 text-align: center;
6840 background-color: #FFF;
6841 border: 1px solid #CCC;
6842 }
6843 .qr-image {
6844 margin: 5px;
6845 }
6846 .qr-hint,
6847 .qr-warning {
6848 padding: 2px;
6849 max-width: 320px;
6850 }
6851 .more-info {
6852 cursor: help;
6853 border-bottom: 1px dashed #000;
6854 text-decoration: none;
6855 }
6856 .version {
6857 position: absolute;
6858 top: 5px;
6859 right: 5px;
6860 }
6861 .csv {
6862 margin-top: 20px;
6863 margin-bottom: 20px;
6864 white-space: pre;
6865 overflow-wrap: normal;
6866 overflow-x: scroll;
6867 font-family: monospace;
6868 }
6869 </style>
6870 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
6871 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
6872 <meta content="bitcoin mnemonic converter" name="description" />
6873 <meta content="Ian Coleman" name="author" />
6874 <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
6875 </head>
6876 <body>
6877 <div class="container">
6878
6879 <h1 class="text-center">Mnemonic Code Converter</h1>
6880 <p class="version">v0.3.3</p>
6881 <hr>
6882 <div class="row">
6883 <div class="col-md-12">
6884 <h2>Mnemonic</h2>
6885 <form class="form-horizontal" role="form">
6886 <div class="form-group">
6887 <div class="col-sm-2"></div>
6888 <div class="col-sm-10">
6889 <p>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum).</p>
6890 <p>
6891 For more info see the
6892 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a>.
6893 </p>
6894 </div>
6895 </div>
6896 <div class="form-group generate-container">
6897 <label class="col-sm-2 control-label"></label>
6898 <div class="col-sm-10">
6899 <div class="form-inline">
6900 <div class="input-group-inline">
6901 <span>Generate a random mnemonic, or enter your own below</span>:
6902 <button class="btn generate">Generate</button>
6903 <select id="strength" class="strength form-control">
6904 <option value="3">3</option>
6905 <option value="6">6</option>
6906 <option value="9">9</option>
6907 <option value="12">12</option>
6908 <option value="15" selected>15</option>
6909 <option value="18">18</option>
6910 <option value="21">21</option>
6911 <option value="24">24</option>
6912 </select>
6913 <span>words</span>
6914 </div>
6915 </div>
6916 </div>
6917 </div>
6918 <div class="entropy-container hidden">
6919 <div class="form-group text-danger">
6920 <label class="col-sm-2 control-label">Warning</label>
6921 <div class="col-sm-10 form-control-static">
6922 <span>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
6923 <a href="#entropy-notes">Read more</a>
6924 </div>
6925 </div>
6926 <div class="form-group">
6927 <label for="entropy" class="col-sm-2 control-label">Entropy</label>
6928 <div class="col-sm-7">
6929 <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts either binary, base 6, 6-sided dice, base 10, hexadecimal or cards"></textarea>
6930 <div class="row filter-warning text-danger hidden">
6931 <p class="col-sm-12">
6932 <strong>
6933 Some characters have been discarded
6934 </strong>
6935 </p>
6936 </div>
6937 <div class="row">
6938 <label class="col-sm-3 control-label"><span class="more-info" title="Based on estimates from zxcvbn using Filtered Entropy">Time To Crack</span></label>
6939 <div class="crack-time col-sm-3 form-control-static"></div>
6940 <label class="col-sm-3 control-label">Event Count</label>
6941 <div class="event-count col-sm-3 form-control-static"></div>
6942 </div>
6943 <div class="row">
6944 <label class="col-sm-3 control-label">Entropy Type</label>
6945 <div class="type col-sm-3 form-control-static"></div>
6946 <label class="col-sm-3 control-label">Bits Per Event</label>
6947 <div class="bits-per-event col-sm-3 form-control-static"></div>
6948 </div>
6949 <div class="row">
6950 <label class="col-sm-3 control-label">Raw Entropy Words</label>
6951 <div class="word-count col-sm-3 form-control-static"></div>
6952 <label class="col-sm-3 control-label"><span class="more-info" title="Total bits of entropy may be less than indicated if any entropy event uses a weak source.">Total Bits</span></label>
6953 <div class="bits col-sm-3 form-control-static"></div>
6954 </div>
6955 <label class="col-sm-3 control-label">Filtered Entropy</label>
6956 <div class="filtered col-sm-9 form-control-static"></div>
6957 <label class="col-sm-3 control-label">Raw Binary</label>
6958 <div class="binary col-sm-9 form-control-static"></div>
6959 <label class="col-sm-3 control-label">Word Indexes</label>
6960 <div class="word-indexes col-sm-9 form-control-static">&nbsp;</div>
6961 <label class="col-sm-3 control-label">Mnemonic Length</label>
6962 <div class="col-sm-9">
6963 <select class="mnemonic-length form-control">
6964 <option value="raw" selected>Use Raw Entropy (3 words per 32 bits)</option>
6965 <option value="12">12 <span>Words</span></option>
6966 <option value="15">15 <span>Words</option>
6967 <option value="18">18 <span>Words</span></option>
6968 <option value="21">21 <span>Words</span></option>
6969 <option value="24">24 <span>Words</span></option>
6970 </select>
6971 </div>
6972 </div>
6973 <div class="col-sm-3">
6974 <p>Valid entropy values include:</p>
6975 <ul>
6976 <li><strong>Binary</strong> [0-1]<br>101010011</li>
6977 <li><strong>Base 6</strong> [0-5]<br>123434014</li>
6978 <li><strong>Dice</strong> [1-6]<br>62535634</li>
6979 <li><strong>Base 10</strong> [0-9]<br>90834528</li>
6980 <li><strong>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
6981 <li><strong>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
6982 </ul>
6983 </div>
6984 </div>
6985 </div>
6986 <div class="form-group">
6987 <div class="col-sm-2"></div>
6988 <div class="col-sm-10 checkbox">
6989 <label>
6990 <input type="checkbox" class="use-entropy">
6991 <span>Show entropy details</span>
6992 </label>
6993 </div>
6994 </div>
6995 <div class="form-group">
6996 <label class="col-sm-2 control-label">Mnemonic Language</label>
6997 <div class="col-sm-10 languages">
6998 <div class="form-control no-border">
6999 <a href="#english">English</a>
7000 <a href="#japanese" title="Japanese">日本語</a>
7001 <a href="#spanish" title="Spanish">Español</a>
7002 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
7003 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
7004 <a href="#french" title="French">Français</a>
7005 <a href="#italian" title="Italian">Italiano</a>
7006 </div>
7007 </div>
7008 </div>
7009 <div class="form-group">
7010 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
7011 <div class="col-sm-10">
7012 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
7013 </div>
7014 </div>
7015 <div class="form-group">
7016 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
7017 <div class="col-sm-10">
7018 <textarea id="passphrase" class="passphrase form-control"></textarea>
7019 </div>
7020 </div>
7021 <div class="form-group">
7022 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
7023 <div class="col-sm-10">
7024 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
7025 </div>
7026 </div>
7027 <div class="form-group">
7028 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
7029 <div class="col-sm-10">
7030 <select id="network-phrase" class="network form-control">
7031 <!-- populated by javascript -->
7032 </select>
7033 </div>
7034 </div>
7035 <div class="form-group">
7036 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
7037 <div class="col-sm-10">
7038 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
7039 </div>
7040 </div>
7041 <div class="form-group litecoin-ltub-container hidden">
7042 <label for="litecoin-use-ltub" class="col-sm-2 control-label">Prefixes</label>
7043 <div class="col-sm-10 checkbox">
7044 <label>
7045 <input type="checkbox" id="litecoin-use-ltub" class="litecoin-use-ltub" checked="checked">
7046 Use <code>Ltpv / Ltub</code> instead of <code>xprv / xpub</code>
7047 </label>
7048 </div>
7049 </div>
7050 </form>
7051 </div>
7052 </div>
7053
7054 <hr>
7055
7056 <div class="row">
7057 <div class="col-md-12">
7058 <h2>Derivation Path</h2>
7059 <ul class="derivation-type nav nav-tabs" role="tablist">
7060 <li id="bip32-tab">
7061 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
7062 </li>
7063 <li id="bip44-tab" class="active">
7064 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
7065 </li>
7066 <li id="bip49-tab">
7067 <a href="#bip49" role="tab" data-toggle="tab">BIP49</a>
7068 </li>
7069 <li id="bip84-tab">
7070 <a href="#bip84" role="tab" data-toggle="tab">BIP84</a>
7071 </li>
7072 <li id="bip141-tab">
7073 <a href="#bip141" role="tab" data-toggle="tab">BIP141</a>
7074 </li>
7075 </ul>
7076 <div class="derivation-type tab-content">
7077 <div id="bip44" class="tab-pane active">
7078 <form class="form-horizontal" role="form">
7079 <br>
7080 <div class="col-sm-2"></div>
7081 <div class="col-sm-10">
7082 <p>
7083 For more info see the
7084 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
7085 </p>
7086 </div>
7087 <div class="form-group">
7088 <label for="purpose" class="col-sm-2 control-label">
7089 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
7090 </label>
7091 <div class="col-sm-10">
7092 <input id="purpose" type="text" class="purpose form-control" value="44" readonly>
7093 </div>
7094 </div>
7095 <div class="form-group">
7096 <label for="coin" class="col-sm-2 control-label">
7097 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
7098 </label>
7099 <div class="col-sm-10">
7100 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7101 </div>
7102 </div>
7103 <div class="form-group">
7104 <label for="account" class="col-sm-2 control-label">
7105 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
7106 </label>
7107 <div class="col-sm-10">
7108 <input id="account" type="text" class="account form-control" value="0">
7109 </div>
7110 </div>
7111 <div class="form-group">
7112 <label for="change" class="col-sm-2 control-label">
7113 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
7114 </label>
7115 <div class="col-sm-10">
7116 <input id="change" type="text" class="change form-control" value="0">
7117 </div>
7118 </div>
7119 <div class="form-group">
7120 <label class="col-sm-2 control-label">
7121 </label>
7122 <div class="col-sm-10">
7123 <p>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
7124 </div>
7125 </div>
7126 <div class="form-group">
7127 <label for="account-xprv" class="col-sm-2 control-label">
7128 <span>Account Extended Private Key</span>
7129 </label>
7130 <div class="col-sm-10">
7131 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7132 </div>
7133 </div>
7134 <div class="form-group">
7135 <label for="account-xpub" class="col-sm-2 control-label">
7136 <span>Account Extended Public Key</span>
7137 </label>
7138 <div class="col-sm-10">
7139 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7140 </div>
7141 </div>
7142 <div class="form-group">
7143 <label class="col-sm-2 control-label">
7144 </label>
7145 <div class="col-sm-10">
7146 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7147 </div>
7148 </div>
7149 <div class="form-group">
7150 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7151 <div class="col-sm-10">
7152 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
7153 </div>
7154 </div>
7155 </form>
7156 </div>
7157 <div id="bip32" class="tab-pane">
7158 <form class="form-horizontal" role="form">
7159 <br>
7160 <div class="col-sm-2"></div>
7161 <div class="col-sm-10">
7162 <p>
7163 For more info see the
7164 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
7165 </p>
7166 </div>
7167 <div class="form-group">
7168 <label for="bip32-client" class="col-sm-2 control-label">Client</label>
7169 <div class="col-sm-10">
7170 <select id="bip32-client" class="client form-control">
7171 <option value="custom">Custom derivation path</option>
7172 <!-- populated by javascript -->
7173 </select>
7174 </div>
7175 </div>
7176 <div class="form-group">
7177 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7178 <div class="col-sm-10">
7179 <input id="bip32-path" type="text" class="path form-control" value="m/0">
7180 </div>
7181 </div>
7182 <div class="form-group">
7183 <div class="col-sm-2"></div>
7184 <label class="col-sm-10">
7185 <input class="hardened-addresses" type="checkbox">
7186 <span>Use hardened addresses</span>
7187 </label>
7188 </div>
7189 <div class="form-group">
7190 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
7191 <div class="col-sm-10">
7192 <p class="form-control no-border">
7193 Use path <code>m/0'/0'</code> with hardened addresses.
7194 </p>
7195 <p class="form-control no-border">
7196 For more info see the
7197 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
7198 </p>
7199 </div>
7200 </div>
7201 <div class="form-group">
7202 <label for="core-path" class="col-sm-2 control-label">Multibit</label>
7203 <div class="col-sm-10">
7204 <p class="form-control no-border">
7205 <span>Use path <code>m/0'/0</code>.</span>
7206 </p>
7207 <p class="form-control no-border">
7208 <span>For more info see</span>
7209 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
7210 </p>
7211 </div>
7212 </div>
7213 <div class="form-group">
7214 <label class="col-sm-2 control-label">Block Explorers</label>
7215 <div class="col-sm-10">
7216 <p class="form-control no-border">
7217 <span>Use path <code>m/44'/0'/0'</code>.</span>
7218 <span>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
7219 </p>
7220 <p class="form-control no-border">
7221 <span>Can be used with</span>:
7222 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
7223 </p>
7224 </div>
7225 </div>
7226 </form>
7227 </div>
7228 <div id="bip49" class="tab-pane">
7229 <form class="form-horizontal" role="form">
7230 <br>
7231 <div class="unavailable hidden">
7232 <div class="form-group">
7233 <div class="col-sm-2"></div>
7234 <div class="col-sm-10">
7235 <p>BIP49 is unavailable for this coin.</p>
7236 </div>
7237 </div>
7238 </div>
7239 <div class="available">
7240 <div class="col-sm-2"></div>
7241 <div class="col-sm-10">
7242 <p>
7243 For more info see the
7244 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">BIP49 spec</a>.
7245 </p>
7246 </div>
7247 <div class="form-group">
7248 <label for="purpose" class="col-sm-2 control-label">
7249 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
7250 </label>
7251 <div class="col-sm-10">
7252 <input id="purpose" type="text" class="purpose form-control" value="49" readonly>
7253 </div>
7254 </div>
7255 <div class="form-group">
7256 <label for="coin" class="col-sm-2 control-label">
7257 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
7258 </label>
7259 <div class="col-sm-10">
7260 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7261 </div>
7262 </div>
7263 <div class="form-group">
7264 <label for="account" class="col-sm-2 control-label">
7265 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
7266 </label>
7267 <div class="col-sm-10">
7268 <input id="account" type="text" class="account form-control" value="0">
7269 </div>
7270 </div>
7271 <div class="form-group">
7272 <label for="change" class="col-sm-2 control-label">
7273 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
7274 </label>
7275 <div class="col-sm-10">
7276 <input id="change" type="text" class="change form-control" value="0">
7277 </div>
7278 </div>
7279 <div class="form-group">
7280 <label class="col-sm-2 control-label">
7281 </label>
7282 <div class="col-sm-10">
7283 <p>The account extended keys can be used for importing to most BIP49 compatible wallets.</p>
7284 </div>
7285 </div>
7286 <div class="form-group">
7287 <label for="account-xprv" class="col-sm-2 control-label">
7288 <span>Account Extended Private Key</span>
7289 </label>
7290 <div class="col-sm-10">
7291 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7292 </div>
7293 </div>
7294 <div class="form-group">
7295 <label for="account-xpub" class="col-sm-2 control-label">
7296 <span>Account Extended Public Key</span>
7297 </label>
7298 <div class="col-sm-10">
7299 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7300 </div>
7301 </div>
7302 <div class="form-group">
7303 <label class="col-sm-2 control-label">
7304 </label>
7305 <div class="col-sm-10">
7306 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7307 </div>
7308 </div>
7309 <div class="form-group">
7310 <label for="bip49-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7311 <div class="col-sm-10">
7312 <input id="bip49-path" type="text" class="path form-control" value="m/49'/0'/0'/0" readonly="readonly">
7313 </div>
7314 </div>
7315 </div>
7316 </form>
7317 </div>
7318 <div id="bip141" class="tab-pane">
7319 <form class="form-horizontal" role="form">
7320 <br>
7321 <div class="unavailable hidden">
7322 <div class="form-group">
7323 <div class="col-sm-2"></div>
7324 <div class="col-sm-10">
7325 <p>BIP141 is unavailable for this coin.</p>
7326 </div>
7327 </div>
7328 </div>
7329 <div class="available">
7330 <div class="col-sm-2"></div>
7331 <div class="col-sm-10">
7332 <p>
7333 For more info see the
7334 <a href="https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki" target="_blank">BIP141 spec</a>
7335 </p>
7336 </div>
7337 <div class="form-group">
7338 <label for="bip141-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7339 <div class="col-sm-10">
7340 <input id="bip141-path" type="text" class="bip141-path form-control" value="m/0">
7341 </div>
7342 </div>
7343 <div class="form-group">
7344 <label class="col-sm-2 control-label">Script Semantics</label>
7345 <div class="col-sm-10">
7346 <select class="form-control bip141-semantics">
7347 <option value="p2wpkh">P2WPKH</option>
7348 <option value="p2wpkh-p2sh" selected>P2WPKH nested in P2SH</option>
7349 </select>
7350 </div>
7351 </div>
7352 </div>
7353 </form>
7354 </div>
7355 <div id="bip84" class="tab-pane">
7356 <form class="form-horizontal" role="form">
7357 <br>
7358 <div class="col-sm-2"></div>
7359 <div class="col-sm-10">
7360 <p>
7361 For more info see the
7362 <a href="https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki" target="_blank">BIP84 spec</a>.
7363 </p>
7364 </div>
7365 <div class="form-group">
7366 <label for="purpose" class="col-sm-2 control-label">
7367 Purpose
7368 </label>
7369 <div class="col-sm-10">
7370 <input id="purpose" type="text" class="purpose form-control" value="84" readonly>
7371 </div>
7372 </div>
7373 <div class="form-group">
7374 <label for="coin" class="col-sm-2 control-label">
7375 Coin
7376 </label>
7377 <div class="col-sm-10">
7378 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7379 </div>
7380 </div>
7381 <div class="form-group">
7382 <label for="account" class="col-sm-2 control-label">
7383 Account
7384 </label>
7385 <div class="col-sm-10">
7386 <input id="account" type="text" class="account form-control" value="0">
7387 </div>
7388 </div>
7389 <div class="form-group">
7390 <label for="change" class="col-sm-2 control-label">
7391 External / Internal
7392 </label>
7393 <div class="col-sm-10">
7394 <input id="change" type="text" class="change form-control" value="0">
7395 </div>
7396 </div>
7397 <div class="form-group">
7398 <label class="col-sm-2 control-label">
7399 </label>
7400 <div class="col-sm-10">
7401 <p>The account extended keys can be used for importing to most BIP84 compatible wallets.</p>
7402 </div>
7403 </div>
7404 <div class="form-group">
7405 <label for="account-xprv" class="col-sm-2 control-label">
7406 <span>Account Extended Private Key</span>
7407 </label>
7408 <div class="col-sm-10">
7409 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7410 </div>
7411 </div>
7412 <div class="form-group">
7413 <label for="account-xpub" class="col-sm-2 control-label">
7414 <span>Account Extended Public Key</span>
7415 </label>
7416 <div class="col-sm-10">
7417 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7418 </div>
7419 </div>
7420 <div class="form-group">
7421 <label class="col-sm-2 control-label">
7422 </label>
7423 <div class="col-sm-10">
7424 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7425 </div>
7426 </div>
7427 <div class="form-group">
7428 <label for="bip84-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7429 <div class="col-sm-10">
7430 <input id="bip84-path" type="text" class="path form-control" value="m/84'/0'/0'/0" readonly="readonly">
7431 </div>
7432 </div>
7433 </form>
7434 </div>
7435 </div>
7436 <form class="form-horizontal" role="form">
7437 <div class="form-group">
7438 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Private Key</label>
7439 <div class="col-sm-10">
7440 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
7441 </div>
7442 </div>
7443 <div class="form-group">
7444 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Public Key</label>
7445 <div class="col-sm-10">
7446 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
7447 </div>
7448 </div>
7449 </form>
7450 </div>
7451 </div>
7452
7453 <hr>
7454
7455 <div class="row">
7456 <div class="col-md-12">
7457 <h2>Derived Addresses</h2>
7458 <p>Note these addresses are derived from the BIP32 Extended Key</p>
7459 </div>
7460 <div class="col-md-12 use-bitpay-addresses-container hidden">
7461 <div class="checkbox">
7462 <label>
7463 <input type="checkbox" class="use-bitpay-addresses">
7464 <span>Use BitPay-style addresses for Bitcoin Cash (ie starting with 'C' instead of '1')</span>
7465 </label>
7466 </div>
7467 </div>
7468 <div class="col-md-12">
7469 <div class="checkbox">
7470 <label>
7471 <input type="checkbox" class="use-bip38">
7472 <span>Encrypt private keys using BIP38 and this password:</span>
7473 </label>
7474 <input class="bip38-password">
7475 <span>Enabling BIP38 means each key will take take several minutes to generate.</span>
7476 </div>
7477 </div>
7478 <ul class="addresses-type nav nav-tabs" role="tablist">
7479 <li id="table-tab" class="active">
7480 <a href="#table" role="tab" data-toggle="tab">Table</a>
7481 </li>
7482 <li id="csv-tab">
7483 <a href="#csv" role="tab" data-toggle="tab">CSV</a>
7484 </li>
7485 </ul>
7486 <div class="addresses-type tab-content">
7487 <div id="table" class="tab-pane active">
7488 <div class="col-md-12">
7489 <table class="table table-striped">
7490 <thead>
7491 <th>
7492 <div class="input-group">
7493 <span>Path</span>&nbsp;&nbsp;
7494 <button class="index-toggle">Toggle</button>
7495 </div>
7496 </th>
7497 <th>
7498 <div class="input-group">
7499 <span>Address</span>&nbsp;&nbsp;
7500 <button class="address-toggle">Toggle</button>
7501 </div>
7502 </th>
7503 <th>
7504 <div class="input-group">
7505 <span>Public Key</span>&nbsp;&nbsp;
7506 <button class="public-key-toggle">Toggle</button>
7507 </div>
7508 </th>
7509 <th>
7510 <div class="input-group">
7511 <span>Private Key</span>&nbsp;&nbsp;
7512 <button class="private-key-toggle">Toggle</button>
7513 </div>
7514 </th>
7515 </thead>
7516 <tbody class="addresses monospace">
7517 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7518 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7519 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7520 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7521 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7522 </tbody>
7523 </table>
7524 </div>
7525 </div>
7526 <div id="csv" class="tab-pane">
7527 <div class="col-md-12">
7528 <textarea class="csv form-control" rows="25" readonly></textarea>
7529 </div>
7530 </div>
7531 </div>
7532 </div>
7533 <span>Show</span>
7534 <input type="number" class="rows-to-add" value="20">
7535 <button class="more">more rows</button>
7536 <span>starting from index</span>
7537 <input type="number" class="more-rows-start-index">
7538 <span>(leave blank to generate from next index)</span>
7539
7540 <hr>
7541
7542 <div class="row">
7543 <div class="col-md-12">
7544 <h2>More info</h2>
7545 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
7546 <p>
7547 Read more at the
7548 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
7549 </p>
7550 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
7551 <p>
7552 Read more at the
7553 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
7554 </p>
7555 <p>
7556 See the demo at
7557 <a href="http://bip32.org/" target="_blank">bip32.org</a>
7558 </p>
7559 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
7560 <p>
7561 Read more at the
7562 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
7563 </p>
7564 <h3>BIP49 <span class="small">Derivation scheme for P2WPKH-nested-in-P2SH based accounts</span></h3>
7565 <p>
7566 Read more at the
7567 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">official BIP49 spec</a>
7568 </p>
7569 <h3>Private Keys</h3>
7570 <p>
7571 <span>
7572 Use private keys at
7573 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
7574 </span>
7575 <span>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
7576 </p>
7577 <h3 id="entropy-notes">Entropy</h3>
7578 <p>
7579 <span>
7580 Entropy values must be sourced from a
7581 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
7582 </span>
7583 <span>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
7584 <span>
7585 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or street address,
7586 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
7587 random enough for the needs of this tool.
7588 </span>
7589 </p>
7590 <p>
7591 <strong><span>Do not store entropy.</span></strong>
7592 </p>
7593 <p>
7594 <span>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
7595 <span>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
7596 <span><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
7597 </p>
7598 <p>
7599 <span>
7600 The random mnemonic generator on this page uses a
7601 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
7602 </span>
7603 <span>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
7604 <span>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
7605 <span>In that case you might choose to use your own source of entropy.</span>
7606 </p>
7607 <p>
7608 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank">You are not a good source of entropy.</a>
7609 </p>
7610 <h3>License</h3>
7611 <p>
7612 <span>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
7613 </span>
7614 </p>
7615 <p>The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.</p>
7616 </div>
7617 </div>
7618
7619 <hr>
7620
7621 <div class="row">
7622 <div class="col-md-12">
7623 <h2>Alternative Tools</h2>
7624 <p>This tool is interoperable with any BIP39 wallet.</p>
7625 <p>Some similar tools to this one (ie not consumer wallets) are</p>
7626 <p>
7627 <a href="https://bip32jp.github.io/english/">
7628 https://bip32jp.github.io/english/
7629 </a>
7630 </p>
7631 </div>
7632 </div>
7633
7634 <hr>
7635
7636 <div class="row">
7637 <div class="col-md-12">
7638
7639 <h2>Offline Usage</h2>
7640
7641 <p>
7642 You can use this tool without having to be online.
7643 </p>
7644 <p>
7645 In your browser, select file save-as, and save this page
7646 as a file.
7647 </p>
7648 <p>
7649 Double-click that file to open it in a browser
7650 on any offline computer.
7651 </p>
7652 <p>
7653 <span>Alternatively, download the file from the repository</span>
7654 -
7655 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
7656 </p>
7657
7658 </div>
7659 </div>
7660
7661 <hr>
7662
7663 <div class="row">
7664 <div class="col-md-12">
7665
7666 <h2>This project is 100% open-source code</h2>
7667
7668 <p>
7669 <span>Get the source code from the repository</span>
7670 -
7671 <a href="https://github.com/iancoleman/bip39" target="_blank">
7672 https://github.com/iancoleman/bip39
7673 </a>
7674 </p>
7675
7676 <h3>Libraries</h3>
7677
7678 <p>
7679 <span>BitcoinJS - </span>
7680 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
7681 https://github.com/bitcoinjs/bitcoinjs-lib
7682 </a>
7683 </p>
7684
7685 <p>
7686 <span>jsBIP39 - </span>
7687 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
7688 https://github.com/iancoleman/jsbip39
7689 </a>
7690 </p>
7691
7692 <p>
7693 <span>sjcl - </span>
7694 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
7695 https://github.com/bitwiseshiftleft/sjcl
7696 </a>
7697 </p>
7698
7699 <p>
7700 <span>jQuery - </span>
7701 <a href="https://jquery.com/" target="_blank">
7702 https://jquery.com/
7703 </a>
7704 </p>
7705
7706 <p>
7707 <span>Twitter Bootstrap - </span>
7708 <a href="http://getbootstrap.com/" target="_blank">
7709 http://getbootstrap.com/
7710 </a>
7711 </p>
7712
7713 </div>
7714 </div>
7715
7716 </div>
7717
7718 <div class="qr-container hidden">
7719 <div class="qr-hint bg-primary hidden">Click field to hide QR</div>
7720 <div class="qr-hint bg-primary">Click field to show QR</div>
7721 <div class="qr-hider hidden">
7722 <div class="qr-image"></div>
7723 <div class="qr-warning bg-primary">Caution: Scanner may keep history</div>
7724 </div>
7725 </div>
7726
7727 <div class="feedback-container">
7728 <div class="feedback">Loading...</div>
7729 </div>
7730
7731 <script type="text/template" id="address-row-template">
7732 <tr>
7733 <td class="index"><span></span></td>
7734 <td class="address"><span data-show-qr></span></td>
7735 <td class="pubkey"><span data-show-qr></span></td>
7736 <td class="privkey"><span data-show-qr></span></td>
7737 </tr>
7738 </script>
7739 <script>// From
7740 // https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
7741 // Required for ethereumjs-utils.js when run in phantomjs-2.1.1
7742 // but is not required in any modern browsers.
7743 // For more information, see
7744 // https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
7745
7746 //----------------------------------------------------------------------
7747 //
7748 // ECMAScript 2015 Polyfills
7749 //
7750 //----------------------------------------------------------------------
7751
7752 (function (global) {
7753 "use strict";
7754
7755 // Set this to always override native implementations, for testing
7756 // the polyfill in browsers with partial/full ES2015 support.
7757 var OVERRIDE_NATIVE_FOR_TESTING = false;
7758
7759 var undefined = (void 0); // Paranoia
7760
7761 // Helpers
7762
7763 function strict(o) {
7764 return o === global ? undefined : o;
7765 }
7766
7767 function hook(o, p, f) {
7768 var op = o[p];
7769 console.assert(typeof op === 'function', 'Hooking a non-function');
7770 o[p] = function() {
7771 var o = strict(this);
7772 var r = f.apply(o, arguments);
7773 return r !== undefined ? r : op.apply(o, arguments);
7774 };
7775 }
7776
7777 function isSymbol(s) {
7778 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
7779 }
7780
7781 function getPropertyDescriptor(target, name) {
7782 var desc = Object.getOwnPropertyDescriptor(target, name);
7783 var proto = Object.getPrototypeOf(target);
7784 while (!desc && proto) {
7785 desc = Object.getOwnPropertyDescriptor(proto, name);
7786 proto = Object.getPrototypeOf(proto);
7787 }
7788 return desc;
7789 }
7790
7791 var enqueue = (function(nativePromise, nativeSetImmediate) {
7792 if (nativePromise)
7793 return function(job) { nativePromise.resolve().then(function() { job(); }); };
7794 if (nativeSetImmediate)
7795 return function(job) { nativeSetImmediate(job); };
7796 return function(job) { setTimeout(job, 0); };
7797 }(global['Promise'], global['setImmediate']));
7798
7799 function define(o, p, v, override) {
7800 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
7801 return;
7802
7803 if (typeof v === 'function') {
7804 // Sanity check that functions are appropriately named (where possible)
7805 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
7806 Object.defineProperty(o, p, {
7807 value: v,
7808 configurable: true,
7809 enumerable: false,
7810 writable: true
7811 });
7812 } else {
7813 Object.defineProperty(o, p, {
7814 value: v,
7815 configurable: false,
7816 enumerable: false,
7817 writable: false
7818 });
7819 }
7820 }
7821
7822 function set_internal(o, p, v) {
7823 Object.defineProperty(o, p, {
7824 value: v,
7825 configurable: false,
7826 enumerable: false,
7827 writable: true
7828 });
7829 }
7830
7831 // Snapshot intrinsic functions
7832 var $isNaN = global.isNaN,
7833 $parseInt = global.parseInt,
7834 $parseFloat = global.parseFloat;
7835
7836 var E = Math.E,
7837 LOG10E = Math.LOG10E,
7838 LOG2E = Math.LOG2E,
7839 abs = Math.abs,
7840 ceil = Math.ceil,
7841 exp = Math.exp,
7842 floor = Math.floor,
7843 log = Math.log,
7844 max = Math.max,
7845 min = Math.min,
7846 pow = Math.pow,
7847 random = Math.random,
7848 sqrt = Math.sqrt;
7849
7850 var orig_match = String.prototype.match,
7851 orig_replace = String.prototype.replace,
7852 orig_search = String.prototype.search,
7853 orig_split = String.prototype.split;
7854
7855 // These are used for implementing the polyfills, but not exported.
7856
7857 // Inspired by https://gist.github.com/1638059
7858 /** @constructor */
7859 function EphemeronTable() {
7860 var secretKey = ObjectCreate(null);
7861
7862 function conceal(o) {
7863 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
7864 Object.defineProperty(o, 'valueOf', {
7865 value: (function(secretKey) {
7866 return function (k) {
7867 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
7868 };
7869 }(secretKey)),
7870 configurable: true,
7871 writeable: true,
7872 enumerable: false
7873 });
7874 return secrets;
7875 }
7876
7877 function reveal(o) {
7878 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
7879 return v === o ? null : v;
7880 }
7881
7882 return {
7883 clear: function() {
7884 secretKey = ObjectCreate(null);
7885 },
7886 remove: function(key) {
7887 var secrets = reveal(key);
7888 if (secrets && HasOwnProperty(secrets, 'value')) {
7889 delete secrets.value;
7890 return true;
7891 }
7892 return false;
7893 },
7894 get: function(key, defaultValue) {
7895 var secrets = reveal(key);
7896 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
7897 },
7898 has: function(key) {
7899 var secrets = reveal(key);
7900 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
7901 },
7902 set: function(key, value) {
7903 var secrets = reveal(key) || conceal(key);
7904 secrets.value = value;
7905 }
7906 };
7907 }
7908
7909 var empty = Object.create(null);
7910
7911 //----------------------------------------------------------------------
7912 //
7913 // ECMAScript 2015
7914 // http://www.ecma-international.org/ecma-262/6.0/
7915 //
7916 //----------------------------------------------------------------------
7917
7918 // ---------------------------------------
7919 // 19.4 Symbol Objects
7920 // ---------------------------------------
7921
7922 // NOTE: Symbols are defined here - out of spec order - since we need the
7923 // properties and prototype to be populated for other polyfills.
7924
7925 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
7926
7927 var symbolForKey;
7928 (function() {
7929 var secret = Object.create(null);
7930 var symbolMap = {};
7931 symbolForKey = function(k) {
7932 return symbolMap[k];
7933 };
7934
7935 var GlobalSymbolRegistry = [];
7936
7937 function unique(bits) {
7938 return Array(bits + 1).join('x').replace(/x/g, function() {
7939 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
7940 });
7941 }
7942
7943 // 19.4.1 The Symbol Constructor
7944 // 19.4.1.1 Symbol ( description=undefined )
7945 function Symbol(description) {
7946 if (!(this instanceof Symbol)) return new Symbol(description, secret);
7947 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
7948
7949 var descString = description === undefined ? undefined : String(description);
7950
7951 set_internal(this, '[[SymbolData]]', unique(128));
7952 set_internal(this, '[[Description]]', descString);
7953
7954 symbolMap[this] = this;
7955 return this;
7956 }
7957
7958 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
7959 global.Symbol = Symbol;
7960
7961 // 19.4.2 Properties of the Symbol Constructor
7962
7963 // 19.4.2.1 Symbol.for (key)
7964 define(Symbol, 'for', function for_(key) {
7965 var stringKey = String(key);
7966 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
7967 var e = GlobalSymbolRegistry[i];
7968 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
7969 }
7970 var newSymbol = Symbol(key);
7971 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
7972 return newSymbol;
7973 });
7974
7975 // 19.4.2.2 Symbol.hasInstance
7976 // 19.4.2.3 Symbol.isConcatSpreadable
7977
7978 // 19.4.2.4 Symbol.iterator
7979 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
7980
7981 // 19.4.2.5 Symbol.keyFor (sym)
7982 define(Symbol, 'keyFor', function keyFor(sym) {
7983 if (!(sym instanceof Symbol)) throw TypeError();
7984 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
7985 var e = GlobalSymbolRegistry[i];
7986 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
7987 }
7988 return undefined;
7989 });
7990
7991 // 19.4.2.6 Symbol.match
7992 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
7993
7994 // 19.4.2.7 Symbol.prototype
7995
7996 // 19.4.2.8 Symbol.replace
7997 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
7998
7999 // 19.4.2.9 Symbol.search
8000 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
8001
8002 // 19.4.2.10 Symbol.species
8003
8004 // 19.4.2.11 Symbol.search
8005 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
8006
8007 // 19.4.2.12 Symbol.toPrimitive
8008
8009 // 19.4.2.13 Symbol.toStringTag
8010 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
8011
8012 // 19.4.2.14 Symbol.unscopables
8013
8014 // 19.4.3 Properties of the Symbol Prototype Object
8015 // 19.4.3.1 Symbol.prototype.constructor
8016
8017 // 19.4.3.2 Symbol.prototype.toString ( )
8018 Object.defineProperty(Symbol.prototype, 'toString', {
8019 value: function toString() {
8020 var s = strict(this);
8021 var desc = s['[[Description]]'];
8022 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
8023 },
8024 configurable: true, writeable: true, enumerable: false });
8025
8026 // 19.4.3.3 Symbol.prototype.valueOf ( )
8027 Object.defineProperty(Symbol.prototype, 'valueOf', {
8028 value: function valueOf() {
8029 // To prevent automatic string conversion:
8030 throw TypeError();
8031
8032 // Spec has approximately the following:
8033 //var s = strict(this);
8034 //if (Type(s) === 'symbol') return s;
8035 //if (Type(s) !== 'object') throw TypeError();
8036 //if (!('[[SymbolData]]' in s)) throw TypeError();
8037 //return s['[[SymbolData]]'];
8038 },
8039 configurable: true, writeable: true, enumerable: false });
8040
8041 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
8042 // (Done later to polyfill partial implementations)
8043
8044 // 19.4.4 Properties of Symbol Instances
8045 }());
8046
8047 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
8048
8049 // Defined here so that other prototypes can reference it
8050 // 25.1.2 The %IteratorPrototype% Object
8051 var $IteratorPrototype$ = {};
8052
8053 //----------------------------------------
8054 // 6 ECMAScript Data Types and Values
8055 //----------------------------------------
8056
8057 // 6.1 ECMAScript Language Types
8058
8059 // "Type(x)" is used as shorthand for "the type of x"...
8060 function Type(v) {
8061 switch (typeof v) {
8062 case 'undefined': return 'undefined';
8063 case 'boolean': return 'boolean';
8064 case 'number': return 'number';
8065 case 'string': return 'string';
8066 case 'symbol': return 'symbol';
8067 default:
8068 if (v === null) return 'null';
8069 if (v instanceof global.Symbol) return 'symbol';
8070 return 'object';
8071 }
8072 }
8073
8074 // 6.1.5.1 Well-Known Symbols
8075 var $$iterator = global.Symbol.iterator,
8076 $$match = global.Symbol.match,
8077 $$replace = global.Symbol.replace,
8078 $$search = global.Symbol.search,
8079 $$split = global.Symbol.split,
8080 $$toStringTag = global.Symbol.toStringTag;
8081
8082 //----------------------------------------
8083 // 7 Abstract Operations
8084 //----------------------------------------
8085
8086 //----------------------------------------
8087 // 7.1 Type Conversion
8088 //----------------------------------------
8089
8090 // 7.1.1 ToPrimitive ( input [, PreferredType] )
8091 // just use valueOf()
8092
8093 // 7.1.2 ToBoolean ( argument )
8094 // just use Boolean()
8095
8096 // 7.1.3 ToNumber ( argument )
8097 // just use Number()
8098
8099 // 7.1.4 ToInteger ( argument )
8100 function ToInteger(n) {
8101 n = Number(n);
8102 if ($isNaN(n)) return 0;
8103 if (n === 0 || n === Infinity || n === -Infinity) return n;
8104 return ((n < 0) ? -1 : 1) * floor(abs(n));
8105 }
8106
8107 // 7.1.5 ToInt32 ( argument )
8108 function ToInt32(v) { return v >> 0; }
8109
8110 // 7.1.6 ToUint32 ( argument )
8111 function ToUint32(v) { return v >>> 0; }
8112
8113 // 7.1.7 ToInt16 ( argument )
8114 function ToInt16(v) { return (v << 16) >> 16; }
8115
8116 // 7.1.8 ToUint16 ( argument )
8117 function ToUint16(v) { return v & 0xFFFF; }
8118
8119 // 7.1.9 ToInt8 ( argument )
8120 function ToInt8(v) { return (v << 24) >> 24; }
8121
8122 // 7.1.10 ToUint8 ( argument )
8123 function ToUint8(v) { return v & 0xFF; }
8124
8125 // 7.1.11 ToUint8Clamp ( argument )
8126 function ToUint8Clamp(argument) {
8127 var number = Number(argument);
8128 if ($isNaN(number)) return 0;
8129 if (number <= 0) return 0;
8130 if (number >= 255) return 255;
8131 var f = floor(number);
8132 if ((f + 0.5) < number) return f + 1;
8133 if (number < (f + 0.5)) return f;
8134 if (f % 2) return f + 1;
8135 return f;
8136 }
8137
8138 // 7.1.12 ToString ( argument )
8139 // just use String()
8140
8141 // 7.1.13 ToObject ( argument )
8142 function ToObject(v) {
8143 if (v === null || v === undefined) throw TypeError();
8144 return Object(v);
8145 }
8146
8147 // 7.1.14 ToPropertyKey ( argument )
8148 function ToPropertyKey(v) {
8149 return String(v);
8150 }
8151
8152 // 7.1.15 ToLength ( argument )
8153 function ToLength(v) {
8154 var len = ToInteger(v);
8155 if (len <= 0) return 0;
8156 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
8157 return min(len, 0x20000000000000 - 1); // 2^53-1
8158 }
8159
8160 // 7.1.16 CanonicalNumericIndexString ( argument )
8161
8162 //----------------------------------------
8163 // 7.2 Testing and Comparison Operations
8164 //----------------------------------------
8165
8166 // 7.2.1 RequireObjectCoercible ( argument )
8167 // 7.2.2 IsArray ( argument )
8168
8169 // 7.2.3 IsCallable ( argument )
8170 function IsCallable(o) { return typeof o === 'function'; }
8171
8172 // 7.2.4 IsConstructor ( argument )
8173 function IsConstructor(o) {
8174 // Hacks for Safari 7 TypedArray XXXConstructor objects
8175 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
8176 if (/Function/.test(Object.prototype.toString.call(o))) return true;
8177 // TODO: Can this be improved on?
8178 return typeof o === 'function';
8179 }
8180
8181 // 7.2.5 IsExtensible (O)
8182 // 7.2.6 IsInteger ( argument )
8183
8184 // 7.2.7 IsPropertyKey ( argument )
8185 function IsPropertyKey(argument) {
8186 if (Type(argument) === 'string') return true;
8187 if (Type(argument) === 'symbol') return true;
8188 return false;
8189 }
8190
8191 // 7.2.8 IsRegExp ( argument )
8192 // 7.2.5 IsConstructor ( argument )
8193
8194 // 7.2.9 SameValue(x, y)
8195 function SameValue(x, y) {
8196 if (typeof x !== typeof y) return false;
8197 switch (typeof x) {
8198 case 'undefined':
8199 return true;
8200 case 'number':
8201 if (x !== x && y !== y) return true;
8202 if (x === 0 && y === 0) return 1/x === 1/y;
8203 return x === y;
8204 case 'boolean':
8205 case 'string':
8206 case 'object':
8207 default:
8208 return x === y;
8209 }
8210 }
8211
8212 // 7.2.10 SameValueZero(x, y)
8213 function SameValueZero(x, y) {
8214 if (typeof x !== typeof y) return false;
8215 switch (typeof x) {
8216 case 'undefined':
8217 return true;
8218 case 'number':
8219 if (x !== x && y !== y) return true;
8220 return x === y;
8221 case 'boolean':
8222 case 'string':
8223 case 'object':
8224 default:
8225 return x === y;
8226 }
8227 }
8228
8229 //----------------------------------------
8230 // 7.3 Operations on Objects
8231 //----------------------------------------
8232
8233 // 7.3.1 Get (O, P)
8234 // - just use o.p or o[p]
8235
8236 // 7.3.2 GetV (V, P)
8237 function GetV(v, p) {
8238 var o = ToObject(v);
8239 return o[p];
8240 }
8241
8242 // 7.3.3 Set (O, P, V, Throw)
8243 // - just use o.p = v or o[p] = v
8244
8245
8246
8247
8248 // 7.3.9 GetMethod (O, P)
8249 function GetMethod(o, p) {
8250 var func = GetV(o, p);
8251 if (func === undefined || func === null) return undefined;
8252 if (!IsCallable(func)) throw TypeError();
8253 return func;
8254 }
8255
8256 // 7.3.10 HasProperty (O, P)
8257 function HasProperty(o, p) {
8258 while (o) {
8259 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
8260 if (Type(o) !== 'object') return false;
8261 o = Object.getPrototypeOf(o);
8262 }
8263 return false;
8264 }
8265
8266 // 7.3.11 HasOwnProperty (O, P)
8267 function HasOwnProperty(o, p) {
8268 return Object.prototype.hasOwnProperty.call(o, p);
8269 }
8270
8271 //----------------------------------------
8272 // 7.4 Operations on Iterator Objects
8273 //----------------------------------------
8274
8275 // 7.4.1 GetIterator ( obj, method )
8276 function GetIterator(obj, method) {
8277 if (arguments.length < 2)
8278 method = GetMethod(obj, $$iterator);
8279 var iterator = method.call(obj);
8280 if (Type(iterator) !== 'object') throw TypeError();
8281 return iterator;
8282 }
8283
8284 // 7.4.2 IteratorNext ( iterator, value )
8285 function IteratorNext(iterator, value) {
8286 if (arguments.length < 2)
8287 var result = iterator.next();
8288 else
8289 result = iterator.next(value);
8290 if (Type(result) !== 'object') throw TypeError();
8291 return result;
8292 }
8293
8294 // 7.4.3 IteratorComplete ( iterResult )
8295 function IteratorComplete(iterResult) {
8296 console.assert(Type(iterResult) === 'object');
8297 return Boolean(iterResult.done);
8298 }
8299
8300 // 7.4.4 IteratorValue ( iterResult )
8301 function IteratorValue(iterResult) {
8302 console.assert(Type(iterResult) === 'object');
8303 return iterResult.value;
8304 }
8305
8306 // 7.4.5 IteratorStep ( iterator )
8307 function IteratorStep( iterator, value ) {
8308 var result = IteratorNext(iterator, value);
8309 var done = result['done'];
8310 if (Boolean(done) === true) return false;
8311 return result;
8312 }
8313
8314 // 7.4.6 IteratorClose( iterator, completion )
8315 function IteratorClose( iterator, completion ) {
8316 console.assert(Type(iterator) === 'object');
8317 var _return = GetMethod(iterator, 'return');
8318 if (_return === undefined) return completion;
8319 try {
8320 var innerResult = _return[iterator]();
8321 } catch (result) {
8322 // TODO: If completion.[[type]] is throw, return completion
8323 return result;
8324 }
8325 if (Type(innerResult) !== 'object') throw TypeError();
8326 return completion;
8327 }
8328
8329 // 7.4.7 CreateIterResultObject (value, done)
8330 function CreateIterResultObject(value, done) {
8331 console.assert(Type(done) === 'boolean');
8332 var obj = {};
8333 obj["value"] = value;
8334 obj["done"] = done;
8335 return obj;
8336 }
8337
8338 // 7.4.8 CreateListIterator (list)
8339 // 7.4.8.1 ListIterator next( )
8340 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
8341 // 7.4.9.1 CompoundIterator next( )
8342
8343 //----------------------------------------
8344 // 8 Executable Code and Execution Contexts
8345 //----------------------------------------
8346
8347 //----------------------------------------
8348 // 8.4 Jobs and Job Queues
8349 //----------------------------------------
8350
8351 // 8.4.1 EnqueueJob ( queueName, job, arguments)
8352 function EnqueueJob(queueName, job, args) {
8353 var fn = function() { job.apply(undefined, args); };
8354 enqueue(fn);
8355 }
8356
8357 // 8.4.2 NextJob result
8358 function NextJob(result) {
8359 // no-op
8360 }
8361
8362 //----------------------------------------
8363 // 9 Ordinary and Exotic Objects Behaviors
8364 //----------------------------------------
8365
8366 // 9.1.11 [[Enumerate]] ()
8367 function Enumerate(obj) {
8368 var e = [];
8369 if (Object(obj) !== obj) return e;
8370 var visited = new Set;
8371 while (obj !== null) {
8372 Object.getOwnPropertyNames(obj).forEach(function(name) {
8373 if (!visited.has(name)) {
8374 var desc = Object.getOwnPropertyDescriptor(obj, name);
8375 if (desc) {
8376 visited.add(name);
8377 if (desc.enumerable) e.push(name);
8378 }
8379 }
8380 });
8381 obj = Object.getPrototypeOf(obj);
8382 }
8383 return e[$$iterator]();
8384 }
8385
8386 // 9.1.12 [[OwnPropertyKeys]] ( )
8387 function OwnPropertyKeys(o) {
8388 return Object.getOwnPropertyNames(o);
8389 }
8390
8391 // 9.1.13 ObjectCreate(proto, internalSlotsList)
8392 function ObjectCreate(proto, internalSlotsList) {
8393 return Object.create(proto, internalSlotsList);
8394 }
8395
8396 // ---------------------------------------
8397 // 19 Fundamental Objects
8398 // ---------------------------------------
8399
8400 // ---------------------------------------
8401 // 19.1 Object Objects
8402 // ---------------------------------------
8403
8404 // 19.1.1 The Object Constructor
8405 // 19.1.1.1 Object ( [ value ] )
8406 // 19.1.2 Properties of the Object Constructor
8407 // 19.1.2.1 Object.assign ( target, ...sources )
8408 define(
8409 Object, 'assign',
8410 function assign(target, /*...*/sources) {
8411 var to = ToObject(target);
8412 if (arguments.length < 2) return to;
8413
8414 var sourcesIndex = 1;
8415 while (sourcesIndex < arguments.length) {
8416 var nextSource = arguments[sourcesIndex++];
8417 if (nextSource === undefined || nextSource === null) {
8418 var keys = [];
8419 } else {
8420 var from = ToObject(nextSource);
8421 keys = OwnPropertyKeys(from);
8422 }
8423 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
8424 var nextKey = keys[keysIndex];
8425 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
8426 if (desc !== undefined && desc.enumerable) {
8427 var propValue = from[nextKey];
8428 to[nextKey] = propValue;
8429 }
8430 }
8431 }
8432 return to;
8433 });
8434
8435 // 19.1.2.2 Object.create ( O [ , Properties ] )
8436 // 19.1.2.3 Object.defineProperties ( O, Properties )
8437 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
8438 // 19.1.2.5 Object.freeze ( O )
8439 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
8440
8441 (function() {
8442 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
8443 $getOwnPropertyNames = Object.getOwnPropertyNames,
8444 $keys = Object.keys,
8445 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
8446
8447 function isStringKey(k) { return !symbolForKey(k); }
8448
8449 // 19.1.2.7 Object.getOwnPropertyNames ( O )
8450 define(
8451 Object, 'getOwnPropertyNames',
8452 function getOwnPropertyNames(o) {
8453 if (Object.prototype.toString.call(o) === '[object Window]') {
8454 // Workaround for cross-realm calling by IE itself.
8455 // https://github.com/inexorabletash/polyfill/issues/96
8456 try {
8457 return $getOwnPropertyNames(o).filter(isStringKey);
8458 } catch (_) {
8459 return $window_names.slice();
8460 }
8461 }
8462 return $getOwnPropertyNames(o).filter(isStringKey);
8463 }, !nativeSymbols);
8464
8465 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
8466 define(
8467 Object, 'getOwnPropertySymbols',
8468 function getOwnPropertySymbols(o) {
8469 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
8470 }, !nativeSymbols);
8471
8472 // 19.1.2.14 Object.keys ( O )
8473 define(
8474 Object, 'keys',
8475 function keys(o) {
8476 return $keys(o).filter(isStringKey);
8477 }, !nativeSymbols);
8478 }());
8479
8480 // 19.1.2.9 Object.getPrototypeOf ( O )
8481 // 19.1.2.10 Object.is ( value1, value2 )
8482 define(
8483 Object, 'is',
8484 function is(value1, value2) {
8485 return SameValue(value1, value2);
8486 });
8487
8488 // 19.1.2.11 Object.isExtensible ( O )
8489 // 19.1.2.12 Object.isFrozen ( O )
8490 // 19.1.2.13 Object.isSealed ( O )
8491
8492 // 19.1.2.14 Object.keys ( O )
8493 // see above
8494
8495 // 19.1.2.15 Object.preventExtensions ( O )
8496 // 19.1.2.16 Object.prototype
8497 // 19.1.2.17 Object.seal ( O )
8498
8499 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
8500 define(
8501 Object, 'setPrototypeOf',
8502 function setPrototypeOf(o, proto) {
8503 if (Type(o) !== 'object') throw TypeError();
8504 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
8505 o.__proto__ = proto;
8506 return o;
8507 }
8508 );
8509
8510 // 19.1.3 Properties of the Object Prototype Object
8511 // 19.1.3.1 Object.prototype.constructor
8512 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
8513 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
8514 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
8515 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
8516 // 19.1.3.6 Object.prototype.toString ( )
8517 hook(Object.prototype, 'toString',
8518 function() {
8519 var o = strict(this);
8520 if (o === Object(o) && $$toStringTag in o) {
8521 return '[object ' + o[$$toStringTag] + ']';
8522 }
8523 return undefined;
8524 });
8525
8526 // 19.1.3.7 Object.prototype.valueOf ( )
8527 // 19.1.4 Properties of Object Instances
8528
8529 // ---------------------------------------
8530 // 19.2 Function Objects
8531 // ---------------------------------------
8532
8533 // 19.2.1 The Function Constructor
8534 // 19.2.1.1 Function ( p1, p2, … , pn, body )
8535 // 19.2.2 Properties of the Function Constructor
8536 // 19.2.2.1 Function.length
8537 // 19.2.2.2 Function.prototype
8538 // 19.2.3 Properties of the Function Prototype Object
8539 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
8540 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
8541 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
8542 // 19.2.3.4 Function.prototype.constructor
8543 // 19.2.3.5 Function.prototype.toString ( )
8544 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
8545 // 19.2.4 Function Instances
8546 // 19.2.4.1 length
8547 // 19.2.4.2 name
8548 // 19.2.4.3 prototype
8549
8550 // (No polyfillable changes from ES5)
8551
8552 // ---------------------------------------
8553 // 19.3 Boolean Objects
8554 // ---------------------------------------
8555
8556 // 19.3.1 The Boolean Constructor
8557 // 19.3.1.1 Boolean ( value )
8558 // 19.3.2 Properties of the Boolean Constructor
8559 // 19.3.2.1 Boolean.prototype
8560 // 19.3.3 Properties of the Boolean Prototype Object
8561 // 19.3.3.1 Boolean.prototype.constructor
8562 // 19.3.3.2 Boolean.prototype.toString ( )
8563 // 19.3.3.3 Boolean.prototype.valueOf ( )
8564 // 19.3.4 Properties of Boolean Instances
8565
8566 // (No polyfillable changes from ES5)
8567
8568 // ---------------------------------------
8569 // 19.4 Symbol Objects
8570 // ---------------------------------------
8571
8572 // Moved earlier in this script, so that other polyfills can depend on them.
8573
8574 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
8575 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
8576
8577 // ---------------------------------------
8578 // 19.5 Error Objects
8579 // ---------------------------------------
8580
8581 // 19.5.1 The Error Constructor
8582 // 19.5.1.1 Error ( message )
8583 // 19.5.1.2 new Error( ...argumentsList )
8584 // 19.5.2 Properties of the Error Constructor
8585 // 19.5.2.1 Error.prototype
8586 // 19.5.3 Properties of the Error Prototype Object
8587 // 19.5.3.1 Error.prototype.constructor
8588 // 19.5.3.2 Error.prototype.message
8589 // 19.5.3.3 Error.prototype.name
8590 // 19.5.3.4 Error.prototype.toString ( )
8591 // 19.5.4 Properties of Error Instances
8592 // 19.5.5 Native Error Types Used in This Standard
8593 // 19.5.5.1 EvalError
8594 // 19.5.5.2 RangeError
8595 // 19.5.5.3 ReferenceError
8596 // 19.5.5.4 SyntaxError
8597 // 19.5.5.5 TypeError
8598 // 19.5.5.6 URIError
8599 // 19.5.6 NativeError Object Structure
8600 // 19.5.6.1 NativeError Constructors
8601 // 19.5.6.1.1 NativeError ( message )
8602 // 19.5.6.1.2 new NativeError ( ...argumentsList )
8603 // 19.5.6.2 Properties of the NativeError Constructors
8604 // 19.5.6.2.1 NativeError.prototype
8605 // 19.5.6.3 Properties of the NativeError Prototype Objects
8606 // 19.5.6.4 Properties of NativeError Instances
8607
8608 // (No polyfillable changes from ES5)
8609
8610 // ---------------------------------------
8611 // 20 Numbers and Dates
8612 // ---------------------------------------
8613
8614 // ---------------------------------------
8615 // 20.1 Number Objects
8616 // ---------------------------------------
8617
8618 // 20.1.1 The Number Constructor
8619 // 20.1.1.1 Number ( [ value ] )
8620 // 20.1.1.2 new Number ( ...argumentsList )
8621 // 20.1.2 Properties of the Number Constructor
8622
8623 // 20.1.2.1 Number.EPSILON
8624 define(
8625 Number, 'EPSILON',
8626 (function () {
8627 var next, result;
8628 for (next = 1; 1 + next !== 1; next = next / 2)
8629 result = next;
8630 return result;
8631 }()));
8632
8633 // 20.1.2.2 Number.isFinite ( number )
8634 define(
8635 Number, 'isFinite',
8636 function isFinite(number) {
8637 if (Type(number) !== 'number') return false;
8638 if (number !== number || number === +Infinity || number === -Infinity) return false;
8639 return true;
8640 });
8641
8642 // 20.1.2.3 Number.isInteger ( number )
8643 define(
8644 Number, 'isInteger',
8645 function isInteger(number) {
8646 if (Type(number) !== 'number') return false;
8647 if (number !== number || number === +Infinity || number === -Infinity) return false;
8648 var integer = ToInteger(number);
8649 if (integer !== number) return false;
8650 return true;
8651 });
8652
8653 // 20.1.2.4 Number.isNaN ( number )
8654 define(
8655 Number, 'isNaN',
8656 function isNaN(number) {
8657 if (Type(number) !== 'number') return false;
8658 if (number !== number) return true;
8659 return false;
8660 });
8661
8662 // 20.1.2.5 Number.isSafeInteger ( number )
8663 define(
8664 Number, 'isSafeInteger',
8665 function isSafeInteger(number) {
8666 if (Type(number) !== 'number') return false;
8667 if (number !== number || number === +Infinity || number === -Infinity) return false;
8668 var integer = ToInteger(number);
8669 if (integer !== number) return false;
8670 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
8671 return true;
8672 return false;
8673 });
8674
8675 // 20.1.2.6 Number.MAX_SAFE_INTEGER
8676 define(
8677 Number, 'MAX_SAFE_INTEGER',
8678 9007199254740991); // 2^53-1
8679
8680 // 20.1.2.7 Number.MAX_VALUE
8681
8682 // 20.1.2.8 Number.MIN_SAFE_INTEGER
8683 define(
8684 Number, 'MIN_SAFE_INTEGER',
8685 -9007199254740991); // -2^53+1
8686
8687 // 20.1.2.9 Number.MIN_VALUE
8688 // 20.1.2.10 Number.NaN
8689 // 20.1.2.11 Number.NEGATIVE_INFINITY
8690
8691 // 20.1.2.12 Number.parseFloat ( string )
8692 define(Number, 'parseFloat', $parseFloat);
8693
8694 // 20.1.2.13 Number.parseInt ( string, radix )
8695 define(Number, 'parseInt', $parseInt);
8696
8697 // 20.1.2.14 Number.POSITIVE_INFINITY
8698 // 20.1.2.15 Number.prototype
8699
8700 // 20.1.3 Properties of the Number Prototype Object
8701 // 20.1.3.1 Number.prototype.constructor
8702 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
8703 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
8704 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
8705 // 20.1.3.5 Number.prototype.toPrecision ( precision )
8706 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
8707 // 20.1.3.7 Number.prototype.valueOf ( )
8708 // 20.1.4 Properties of Number Instances
8709
8710 // ---------------------------------------
8711 // 20.2 The Math Object
8712 // ---------------------------------------
8713
8714 // 20.2.1 Value Properties of the Math Object
8715 // 20.2.1.1 Math.E
8716 // 20.2.1.2 Math.LN10
8717 // 20.2.1.3 Math.LN2
8718 // 20.2.1.4 Math.LOG10E
8719 // 20.2.1.5 Math.LOG2E
8720 // 20.2.1.6 Math.PI
8721 // 20.2.1.7 Math.SQRT1_2
8722 // 20.2.1.8 Math.SQRT2
8723
8724 // 20.2.1.9 Math [ @@toStringTag ]
8725 define(Math, $$toStringTag, 'Math');
8726
8727 // 20.2.2 Function Properties of the Math Object
8728 // 20.2.2.1 Math.abs ( x )
8729 // 20.2.2.2 Math.acos ( x )
8730
8731 // 20.2.2.3 Math.acosh(x)
8732 define(
8733 Math, 'acosh',
8734 function acosh(x) {
8735 x = Number(x);
8736 return log(x + sqrt(x * x - 1));
8737 });
8738
8739 // 20.2.2.4 Math.asin ( x )
8740
8741 // 20.2.2.5 Math.asinh( x )
8742 define(
8743 Math, 'asinh',
8744 function asinh(x) {
8745 x = Number(x);
8746 if (SameValue(x, -0)) {
8747 return x;
8748 }
8749 var s = sqrt(x * x + 1);
8750 return (s === -x) ? log(0) : log(x + s);
8751 });
8752
8753 // 20.2.2.6 Math.atan ( x )
8754
8755 // 20.2.2.7 Math.atanh( x )
8756 define(
8757 Math, 'atanh',
8758 function atanh(x) {
8759 x = Number(x);
8760 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
8761 });
8762
8763 // 20.2.2.8 Math.atan2 ( y, x )
8764
8765 // 20.2.2.9 Math.cbrt ( x )
8766 define(
8767 Math, 'cbrt',
8768 function cbrt(x) {
8769 x = Number(x);
8770 if ($isNaN(x/x)) {
8771 return x;
8772 }
8773 var r = pow(abs(x), 1/3);
8774 var t = x/r/r;
8775 return r + (r * (t-r) / (2*r + t));
8776 });
8777
8778 // 20.2.2.10 Math.ceil ( x )
8779
8780 // 20.2.2.11 Math.clz32 ( x )
8781 define(
8782 Math, 'clz32',
8783 function clz32(x) {
8784 function clz8(x) {
8785 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
8786 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
8787 }
8788 x = ToUint32(x);
8789 return x & 0xff000000 ? clz8(x >> 24) :
8790 x & 0xff0000 ? clz8(x >> 16) + 8 :
8791 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
8792 });
8793
8794
8795
8796 // 20.2.2.12 Math.cos ( x )
8797
8798 // 20.2.2.13 Math.cosh ( x )
8799 define(
8800 Math, 'cosh',
8801 function cosh(x) {
8802 x = Number(x);
8803 return (pow(E, x) + pow(E, -x)) / 2;
8804 });
8805
8806 // 20.2.2.14 Math.exp ( x )
8807
8808 // 20.2.2.15 Math.expm1 ( x )
8809 define(
8810 Math, 'expm1',
8811 function expm1(x) {
8812 x = Number(x);
8813 // from: http://www.johndcook.com/cpp_log1p.html
8814 if (SameValue(x, -0)) {
8815 return -0;
8816 } else if (abs(x) < 1e-5) {
8817 return x + 0.5 * x * x; // two terms of Taylor expansion
8818 } else {
8819 return exp(x) - 1;
8820 }
8821 });
8822
8823 // 20.2.2.16 Math.floor ( x )
8824
8825 // 20.2.2.17 Math.fround ( x )
8826 define(
8827 Math, 'fround',
8828 function fround(x) {
8829 if ($isNaN(x)) {
8830 return NaN;
8831 }
8832 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
8833 return x;
8834 }
8835 return (new Float32Array([x]))[0];
8836 });
8837
8838 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
8839 define(
8840 Math, 'hypot',
8841 function hypot() {
8842 var values = [];
8843 var m = 0, sawNaN = false;
8844 for (var i = 0; i < arguments.length; ++i) {
8845 var n = abs(Number(arguments[i]));
8846 if (n === Infinity) return n;
8847 if (n !== n) sawNaN = true;
8848 if (n > m) m = n;
8849 values[i] = n;
8850 }
8851 if (sawNaN) return NaN;
8852 if (m === 0) return +0;
8853 var sum = +0;
8854 for (i = 0; i < values.length; ++i) {
8855 var r = values[i] / m;
8856 sum = sum + r * r;
8857 }
8858 return m * sqrt(sum);
8859 });
8860
8861 // 20.2.2.19 Math.imul ( x, y )
8862 define(
8863 Math, 'imul',
8864 function imul(x, y) {
8865 var a = ToUint32(x);
8866 var b = ToUint32(y);
8867 // (slow but accurate)
8868 var ah = (a >>> 16) & 0xffff;
8869 var al = a & 0xffff;
8870 var bh = (b >>> 16) & 0xffff;
8871 var bl = b & 0xffff;
8872 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
8873 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
8874 );
8875
8876 // 20.2.2.20 Math.log ( x )
8877
8878 // 20.2.2.21 Math.log1p ( x )
8879 define(
8880 Math, 'log1p',
8881 function log1p(x) {
8882 x = Number(x);
8883 // from: http://www.johndcook.com/cpp_expm1.html
8884 if (x < -1) {
8885 return NaN;
8886 } else if (SameValue(x, -0)) {
8887 return -0;
8888 } else if (abs(x) > 1e-4) {
8889 return log(1 + x);
8890 } else {
8891 return (-0.5 * x + 1) * x;
8892 }
8893 });
8894
8895 // 20.2.2.22 Math.log10 ( x )
8896 define(
8897 Math, 'log10',
8898 function log10(x) {
8899 x = Number(x);
8900 return log(x) * LOG10E;
8901 });
8902
8903 // 20.2.2.23 Math.log2 ( x )
8904 define(
8905 Math, 'log2',
8906 function log2(x) {
8907 x = Number(x);
8908 return log(x) * LOG2E;
8909 });
8910
8911 // 20.2.2.24 Math.max ( value1, value2 , ...values )
8912 // 20.2.2.25 Math.min ( value1, value2 , ...values )
8913 // 20.2.2.26 Math.pow ( x, y )
8914 // 20.2.2.27 Math.random ( )
8915 // 20.2.2.28 Math.round ( x )
8916
8917 // 20.2.2.29 Math.sign(x)
8918 define(
8919 Math, 'sign',
8920 function sign(x) {
8921 x = Number(x);
8922 return x < 0 ? -1 : x > 0 ? 1 : x;
8923 });
8924
8925 // 20.2.2.30 Math.sin ( x )
8926
8927 // 20.2.2.31 Math.sinh( x )
8928 define(
8929 Math, 'sinh',
8930 function sinh(x) {
8931 x = Number(x);
8932 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
8933 });
8934
8935 // 20.2.2.32 Math.sqrt ( x )
8936 // 20.2.2.33 Math.tan ( x )
8937
8938 // 20.2.2.34 Math.tanh ( x )
8939 define(
8940 Math, 'tanh',
8941 function tanh(x) {
8942 x = Number(x);
8943 var n = pow(E, 2 * x) - 1,
8944 d = pow(E, 2 * x) + 1;
8945 if (SameValue(x, -0))
8946 return x;
8947 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
8948 });
8949
8950 // 20.2.2.35 Math.trunc ( x )
8951 define(
8952 Math, 'trunc',
8953 function trunc(x) {
8954 x = Number(x);
8955 return $isNaN(x) ? NaN :
8956 x < 0 ? ceil(x) : floor(x);
8957 });
8958
8959 // ---------------------------------------
8960 // 20.3 Date Objects
8961 // ---------------------------------------
8962
8963 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
8964 // 20.3.1.1 Time Values and Time Range
8965 // 20.3.1.2 Day Number and Time within Day
8966 // 20.3.1.3 Year Number
8967 // 20.3.1.4 Month Number
8968 // 20.3.1.5 Date Number
8969 // 20.3.1.6 Week Day
8970 // 20.3.1.7 Local Time Zone Adjustment
8971 // 20.3.1.8 Daylight Saving Time Adjustment
8972 // 20.3.1.9 Local Time
8973 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
8974 // 20.3.1.11 MakeTime (hour, min, sec, ms)
8975 // 20.3.1.12 MakeDay (year, month, date)
8976 // 20.3.1.13 MakeDate (day, time)
8977 // 20.3.1.14 TimeClip (time)
8978 // 20.3.1.15 Date Time String Format
8979 // 20.3.1.15.1 Extended years
8980 // 20.3.2 The Date Constructor
8981 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
8982 // 20.3.2.2 Date ( value )
8983 // 20.3.2.3 Date ( )
8984 // 20.3.3 Properties of the Date Constructor
8985 // 20.3.3.1 Date.now ( )
8986 // 20.3.3.2 Date.parse (string)
8987 // 20.3.3.3 Date.prototype
8988 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
8989 // 20.3.4 Properties of the Date Prototype Object
8990 // 20.3.4.1 Date.prototype.constructor
8991 // 20.3.4.2 Date.prototype.getDate ( )
8992 // 20.3.4.3 Date.prototype.getDay ( )
8993 // 20.3.4.4 Date.prototype.getFullYear ( )
8994 // 20.3.4.5 Date.prototype.getHours ( )
8995 // 20.3.4.6 Date.prototype.getMilliseconds ( )
8996 // 20.3.4.7 Date.prototype.getMinutes ( )
8997 // 20.3.4.8 Date.prototype.getMonth ( )
8998 // 20.3.4.9 Date.prototype.getSeconds ( )
8999 // 20.3.4.10 Date.prototype.getTime ( )
9000 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
9001 // 20.3.4.12 Date.prototype.getUTCDate ( )
9002 // 20.3.4.13 Date.prototype.getUTCDay ( )
9003 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
9004 // 20.3.4.15 Date.prototype.getUTCHours ( )
9005 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
9006 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
9007 // 20.3.4.18 Date.prototype.getUTCMonth ( )
9008 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
9009 // 20.3.4.20 Date.prototype.setDate ( date )
9010 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
9011 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
9012 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
9013 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
9014 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
9015 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
9016 // 20.3.4.27 Date.prototype.setTime ( time )
9017 // 20.3.4.28 Date.prototype.setUTCDate ( date )
9018 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
9019 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
9020 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
9021 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
9022 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
9023 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
9024 // 20.3.4.35 Date.prototype.toDateString ( )
9025 // 20.3.4.36 Date.prototype.toISOString ( )
9026 // 20.3.4.37 Date.prototype.toJSON ( key )
9027 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
9028 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
9029 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
9030 // 20.3.4.41 Date.prototype.toString ( )
9031 // 20.3.4.42 Date.prototype.toTimeString ( )
9032 // 20.3.4.43 Date.prototype.toUTCString ( )
9033 // 20.3.4.44 Date.prototype.valueOf ( )
9034 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
9035 // 20.3.5 Properties of Date Instances
9036
9037 // (No polyfillable changes from ES5)
9038
9039 // ---------------------------------------
9040 // 21 Text Processing
9041 // ---------------------------------------
9042
9043 var string_regexp_dispatch = (function() {
9044 var faux = {}, secret = Symbol();
9045 faux[Symbol.match] = function() { return secret; };
9046 return ("").match(faux) === secret;
9047 }());
9048
9049 // 21.1 String Objects
9050 // 21.1.1 The String Constructor
9051 // 21.1.1.1 String ( value )
9052 // 21.1.2 Properties of the String Constructor
9053 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
9054
9055 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
9056 define(
9057 String, 'fromCodePoint',
9058 function fromCodePoint(/*...codePoints*/) {
9059 var codePoints = arguments,
9060 length = codePoints.length,
9061 elements = [],
9062 nextIndex = 0;
9063 while (nextIndex < length) {
9064 var next = codePoints[nextIndex];
9065 var nextCP = Number(next);
9066 if (!SameValue(nextCP, ToInteger(nextCP)) ||
9067 nextCP < 0 || nextCP > 0x10FFFF) {
9068 throw RangeError('Invalid code point ' + nextCP);
9069 }
9070 if (nextCP < 0x10000) {
9071 elements.push(String.fromCharCode(nextCP));
9072 } else {
9073 nextCP -= 0x10000;
9074 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
9075 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
9076 }
9077 nextIndex += 1;
9078 }
9079 return elements.join('');
9080 });
9081
9082 // 21.1.2.3 String.prototype
9083
9084 // 21.1.2.4 String.raw ( template , ...substitutions )
9085 define(
9086 String, 'raw',
9087 function raw(template /*, ...substitutions*/) {
9088 var substitutions = [].slice.call(arguments, 1);
9089
9090 var cooked = Object(template);
9091 var rawValue = cooked['raw'];
9092 var raw = Object(rawValue);
9093 var len = raw['length'];
9094 var literalSegments = ToLength(len);
9095 if (literalSegments <= 0) return '';
9096 var stringElements = [];
9097 var nextIndex = 0;
9098 while (true) {
9099 var next = raw[nextIndex];
9100 var nextSeg = String(next);
9101 stringElements.push(nextSeg);
9102 if (nextIndex + 1 === literalSegments)
9103 return stringElements.join('');
9104 next = substitutions[nextIndex];
9105 var nextSub = String(next);
9106 stringElements.push(nextSub);
9107 nextIndex = nextIndex + 1;
9108 }
9109 });
9110
9111 // See https://githib.com/inexorabletash/uate for a more useful version.
9112
9113 // 21.1.3 Properties of the String Prototype Object
9114 // 21.1.3.1 String.prototype.charAt ( pos )
9115 // 21.1.3.2 String.prototype.charCodeAt ( pos )
9116
9117 // 21.1.3.3 String.prototype.codePointAt ( pos )
9118 define(
9119 String.prototype, 'codePointAt',
9120 function codePointAt(pos) {
9121 var o = strict(this);
9122 var s = String(o);
9123 var position = ToInteger(pos);
9124 var size = s.length;
9125 if (position < 0 || position >= size) return undefined;
9126 var first = s.charCodeAt(position);
9127 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
9128 var second = s.charCodeAt(position + 1);
9129 if (second < 0xDC00 || second > 0xDFFF) return first;
9130 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
9131 });
9132
9133 // 21.1.3.4 String.prototype.concat ( ...args )
9134 // 21.1.3.5 String.prototype.constructor
9135
9136 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
9137 define(
9138 String.prototype, 'endsWith',
9139 function endsWith(searchString) {
9140 var endPosition = arguments[1];
9141
9142 var o = strict(this);
9143 var s = String(o);
9144 var searchStr = String(searchString);
9145 var len = s.length;
9146 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
9147 var end = min(max(pos, 0), len);
9148 var searchLength = searchStr.length;
9149 var start = end - searchLength;
9150 if (start < 0) return false;
9151 if (s.substring(start, start + searchLength) === searchStr) return true;
9152 return false;
9153 });
9154
9155 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
9156 define(
9157 String.prototype, 'includes',
9158 function includes(searchString) {
9159 var position = arguments[1];
9160
9161 var o = strict(this);
9162 var s = String(o);
9163 var searchStr = String(searchString);
9164 var pos = ToInteger(position);
9165 var len = s.length;
9166 var start = min(max(pos, 0), len);
9167 return s.indexOf(searchStr, start) !== -1;
9168 });
9169
9170 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
9171 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
9172 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
9173 // 21.1.3.11 String.prototype.match ( regexp )
9174 define(
9175 String.prototype, 'match',
9176 function match(regexp) {
9177 var o = strict(this);
9178 var s = String(o);
9179 if (HasProperty(regexp, $$match)) var rx = regexp;
9180 else rx = new RegExp(regexp);
9181 return rx[$$match](s);
9182 }, !string_regexp_dispatch);
9183
9184 // 21.1.3.12 String.prototype.normalize ( [ form ] )
9185
9186 // Not practical due to table sizes; if needed, pull in:
9187 // https://github.com/walling/unorm/
9188
9189 // 21.1.3.13 String.prototype.repeat ( count )
9190 define(
9191 String.prototype, 'repeat',
9192 function repeat(count) {
9193 var o = strict(this);
9194 var s = String(o);
9195 var n = ToInteger(count);
9196 if (n < 0) throw RangeError();
9197 if (n === Infinity) throw RangeError();
9198 var t = new Array(n + 1).join(s);
9199 return t;
9200 });
9201
9202 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
9203 define(
9204 String.prototype, 'replace',
9205 function replace(searchValue, replaceValue) {
9206 var o = strict(this);
9207 if (HasProperty(searchValue, $$replace))
9208 return searchValue[$$replace](o, replaceValue);
9209 return orig_replace.call(o, searchValue, replaceValue);
9210 }, !string_regexp_dispatch);
9211
9212 // 21.1.3.15 String.prototype.search ( regexp )
9213 define(
9214 String.prototype, 'search',
9215 function search(regexp) {
9216 var o = strict(this);
9217 var string = String(o);
9218 if (HasProperty(regexp, $$search)) var rx = regexp;
9219 else rx = new RegExp(regexp);
9220 return rx[$$search](string);
9221 }, !string_regexp_dispatch);
9222
9223 // 21.1.3.16 String.prototype.slice ( start, end )
9224 // 21.1.3.17 String.prototype.split ( separator, limit )
9225 define(
9226 String.prototype, 'split',
9227 function split(separator, limit) {
9228 var o = strict(this);
9229 if (HasProperty(separator, $$split))
9230 return separator[$$split](o, limit);
9231 return orig_split.call(o, separator, limit);
9232 }, !string_regexp_dispatch);
9233
9234 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
9235 define(
9236 String.prototype, 'startsWith',
9237 function startsWith(searchString) {
9238 var position = arguments[1];
9239
9240 var o = strict(this);
9241 var s = String(o);
9242 var searchStr = String(searchString);
9243 var pos = ToInteger(position);
9244 var len = s.length;
9245 var start = min(max(pos, 0), len);
9246 var searchLength = searchStr.length;
9247 if (searchLength + start > len) return false;
9248 if (s.substring(start, start + searchLength) === searchStr) return true;
9249 return false;
9250 });
9251
9252 // 21.1.3.19 String.prototype.substring ( start, end )
9253 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
9254 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
9255 // 21.1.3.22 String.prototype.toLowerCase ( )
9256 // 21.1.3.23 String.prototype.toString ( )
9257 // 21.1.3.24 String.prototype.toUpperCase ( )
9258 // 21.1.3.25 String.prototype.trim ( )
9259 // 21.1.3.26 String.prototype.valueOf ( )
9260
9261 // 21.1.3.27 String.prototype [ @@iterator ]( )
9262 define(
9263 String.prototype, $$iterator,
9264 function entries() {
9265 return CreateStringIterator(this, 'value');
9266 });
9267
9268 // 21.1.4 Properties of String Instances
9269 // 21.1.4.1 length
9270
9271 // 21.1.5 String Iterator Objects
9272 /** @constructor */
9273 function StringIterator() {}
9274
9275 // 21.1.5.1 CreateStringIterator Abstract Operation
9276 function CreateStringIterator(string, kind) {
9277 var s = String(string);
9278 var iterator = new StringIterator;
9279 set_internal(iterator, '[[IteratedString]]', s);
9280 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
9281 set_internal(iterator, '[[StringIterationKind]]', kind);
9282 return iterator;
9283 }
9284
9285 // 21.1.5.2 The %StringIteratorPrototype% Object
9286 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
9287 StringIterator.prototype = $StringIteratorPrototype$;
9288
9289 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
9290 define(
9291 $StringIteratorPrototype$, 'next',
9292 function next() {
9293 var o = ToObject(this);
9294 var s = String(o['[[IteratedString]]']),
9295 index = o['[[StringIteratorNextIndex]]'],
9296 len = s.length;
9297 if (index >= len) {
9298 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
9299 return CreateIterResultObject(undefined, true);
9300 }
9301 var cp = s.codePointAt(index);
9302 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
9303 return CreateIterResultObject(String.fromCodePoint(cp), false);
9304 });
9305
9306 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
9307 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
9308
9309 // 21.1.5.3 Properties of String Iterator Instances
9310
9311 // ---------------------------------------
9312 // 21.2 RegExp (Regular Expression) Objects
9313 // ---------------------------------------
9314
9315 // 21.2.1 Patterns
9316 // 21.2.2 Pattern Semantics
9317 // 21.2.2.1 Notation
9318 // 21.2.2.2 Pattern
9319 // 21.2.2.3 Disjunction
9320 // 21.2.2.4 Alternative
9321 // 21.2.2.5 Term
9322 // 21.2.2.6 Assertion
9323 // 21.2.2.7 Quantifier
9324 // 21.2.2.8 Atom
9325 // 21.2.2.9 AtomEscape
9326 // 21.2.2.10 CharacterEscape
9327 // 21.2.2.11 DecimalEscape
9328 // 21.2.2.12 CharacterClassEscape
9329 // 21.2.2.13 CharacterClass
9330 // 21.2.2.14 ClassRanges
9331 // 21.2.2.15 NonemptyClassRanges
9332 // 21.2.2.16 NonemptyClassRangesNoDash
9333 // 21.2.2.17 ClassAtom
9334 // 21.2.2.18 ClassAtomNoDash
9335 // 21.2.2.19 ClassEscape
9336 // 21.2.3 The RegExp Constructor
9337 // 21.2.3.1 RegExp ( pattern, flags )
9338 // 21.2.3.2 new RegExp( ...argumentsList )
9339 // 21.2.3.3 Abstract Operations for the RegExp Constructor
9340 // 21.2.4 Properties of the RegExp Constructor
9341 // 21.2.4.1 RegExp.prototype
9342 // 21.2.5 Properties of the RegExp Prototype Object
9343 // 21.2.5.1 RegExp.prototype.constructor
9344 // 21.2.5.2 RegExp.prototype.exec ( string )
9345
9346 // 21.2.5.3 get RegExp.prototype.flags
9347 if (!('flags' in RegExp.prototype)) {
9348 Object.defineProperty(
9349 RegExp.prototype, 'flags', {
9350 get: function() {
9351 var s = String(this);
9352 return s.substring(s.lastIndexOf('/') + 1);
9353 }
9354 });
9355 }
9356
9357 // 21.2.5.4 get RegExp.prototype.global
9358 // 21.2.5.5 get RegExp.prototype.ignoreCase
9359
9360 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
9361 define(RegExp.prototype, $$match, function(string) {
9362 var o = strict(this);
9363 return orig_match.call(string, o);
9364 });
9365
9366 // 21.2.5.7 get RegExp.prototype.multiline
9367
9368 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
9369 define(RegExp.prototype, $$replace, function(string, replaceValue) {
9370 var o = strict(this);
9371 return orig_replace.call(string, o, replaceValue);
9372 });
9373
9374 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
9375 define(RegExp.prototype, $$search, function(string) {
9376 var o = strict(this);
9377 return orig_search.call(string, o);
9378 });
9379
9380 // 21.2.5.10 get RegExp.prototype.source
9381
9382 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
9383 define(RegExp.prototype, $$split, function(string, limit) {
9384 var o = strict(this);
9385 return orig_split.call(string, o, limit);
9386 });
9387
9388 // 21.2.5.12 get RegExp.prototype.sticky
9389 // 21.2.5.13 RegExp.prototype.test( S )
9390 // 21.2.5.14 RegExp.prototype.toString ( )
9391 // 21.2.5.15 get RegExp.prototype.unicode
9392
9393 // 21.2.6 Properties of RegExp Instances
9394 // 21.2.6.1 lastIndex
9395
9396 // (No polyfillable changes from ES5)
9397
9398 // ---------------------------------------
9399 // 22 Indexed Collections
9400 // ---------------------------------------
9401
9402 // ---------------------------------------
9403 // 22.1 Array Objects
9404 // ---------------------------------------
9405
9406 // 22.1.1 The Array Constructor
9407 // 22.1.1.1 Array ( )
9408 // 22.1.1.2 Array (len)
9409 // 22.1.1.3 Array (...items )
9410
9411 // 22.1.2 Properties of the Array Constructor
9412
9413 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
9414 define(
9415 Array, 'from',
9416 function from(items) {
9417 var mapfn = arguments[1];
9418 var thisArg = arguments[2];
9419
9420 var c = strict(this);
9421 if (mapfn === undefined) {
9422 var mapping = false;
9423 } else {
9424 if (!IsCallable(mapfn)) throw TypeError();
9425 var t = thisArg;
9426 mapping = true;
9427 }
9428 var usingIterator = GetMethod(items, $$iterator);
9429 if (usingIterator !== undefined) {
9430 if (IsConstructor(c)) {
9431 var a = new c();
9432 } else {
9433 a = new Array(0);
9434 }
9435 var iterator = GetIterator(items, usingIterator);
9436 var k = 0;
9437 while (true) {
9438 var next = IteratorStep(iterator);
9439 if (next === false) {
9440 a.length = k;
9441 return a;
9442 }
9443 var nextValue = IteratorValue(next);
9444 if (mapping)
9445 var mappedValue = mapfn.call(t, nextValue);
9446 else
9447 mappedValue = nextValue;
9448 a[k] = mappedValue;
9449 k += 1;
9450 }
9451 }
9452 var arrayLike = ToObject(items);
9453 var lenValue = arrayLike.length;
9454 var len = ToLength(lenValue);
9455 if (IsConstructor(c)) {
9456 a = new c(len);
9457 } else {
9458 a = new Array(len);
9459 }
9460 k = 0;
9461 while (k < len) {
9462 var kValue = arrayLike[k];
9463 if (mapping)
9464 mappedValue = mapfn.call(t, kValue, k);
9465 else
9466 mappedValue = kValue;
9467 a[k] = mappedValue;
9468 k += 1;
9469 }
9470 a.length = len;
9471 return a;
9472 });
9473
9474 // 22.1.2.2 Array.isArray ( arg )
9475
9476 // 22.1.2.3 Array.of ( ...items )
9477 define(
9478 Array, 'of',
9479 function of() {
9480 var items = arguments;
9481
9482 var lenValue = items.length;
9483 var len = ToUint32(lenValue);
9484 var c = strict(this), a;
9485 if (IsConstructor(c)) {
9486 a = new c(len);
9487 a = ToObject(a);
9488 } else {
9489 a = new Array(len);
9490 }
9491 var k = 0;
9492 while (k < len) {
9493 a[k] = items[k];
9494 k += 1;
9495 }
9496 a.length = len;
9497 return a;
9498 });
9499
9500 // 22.1.2.4 Array.prototype
9501 // 22.1.2.5 get Array [ @@species ]
9502 // 22.1.3 Properties of the Array Prototype Object
9503 // 22.1.3.1 Array.prototype.concat ( ...arguments )
9504 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
9505 // 22.1.3.2 Array.prototype.constructor
9506 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
9507 define(
9508 Array.prototype, 'copyWithin',
9509 function copyWithin(target, start/*, end*/) {
9510 var end = arguments[2];
9511
9512 var o = ToObject(this);
9513 var lenVal = o.length;
9514 var len = ToLength(lenVal);
9515 len = max(len, 0);
9516 var relativeTarget = ToInteger(target);
9517 var to;
9518 if (relativeTarget < 0)
9519 to = max(len + relativeTarget, 0);
9520 else
9521 to = min(relativeTarget, len);
9522 var relativeStart = ToInteger(start);
9523 var from;
9524 if (relativeStart < 0)
9525 from = max(len + relativeStart, 0);
9526 else
9527 from = min(relativeStart, len);
9528 var relativeEnd;
9529 if (end === undefined)
9530 relativeEnd = len;
9531 else
9532 relativeEnd = ToInteger(end);
9533 var final;
9534 if (relativeEnd < 0)
9535 final = max(len + relativeEnd, 0);
9536 else
9537 final = min(relativeEnd, len);
9538 var count = min(final - from, len - to);
9539 var direction;
9540 if (from < to && to < from + count) {
9541 direction = -1;
9542 from = from + count - 1;
9543 to = to + count - 1;
9544 } else {
9545 direction = 1;
9546 }
9547 while (count > 0) {
9548 var fromKey = String(from);
9549 var toKey = String(to);
9550 var fromPresent = HasProperty(o, fromKey);
9551 if (fromPresent) {
9552 var fromVal = o[fromKey];
9553 o[toKey] = fromVal;
9554 } else {
9555 delete o[toKey];
9556 }
9557 from = from + direction;
9558 to = to + direction;
9559 count = count - 1;
9560 }
9561 return o;
9562 });
9563
9564 // 22.1.3.4 Array.prototype.entries ( )
9565 var nativeArrayIteratorMethods =
9566 ('entries' in Array.prototype && 'next' in [].entries());
9567
9568 define(
9569 Array.prototype, 'entries',
9570 function entries() {
9571 return CreateArrayIterator(this, 'key+value');
9572 }, !nativeArrayIteratorMethods);
9573
9574 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
9575
9576 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
9577 define(
9578 Array.prototype, 'fill',
9579 function fill(value/*, start, end*/) {
9580 var start = arguments[1],
9581 end = arguments[2];
9582
9583 var o = ToObject(this);
9584 var lenVal = o.length;
9585 var len = ToLength(lenVal);
9586 len = max(len, 0);
9587 var relativeStart = ToInteger(start);
9588 var k;
9589 if (relativeStart < 0)
9590 k = max((len + relativeStart), 0);
9591 else
9592 k = min(relativeStart, len);
9593 var relativeEnd;
9594 if (end === undefined)
9595 relativeEnd = len;
9596 else
9597 relativeEnd = ToInteger(end);
9598 var final;
9599 if (relativeEnd < 0)
9600 final = max((len + relativeEnd), 0);
9601 else
9602 final = min(relativeEnd, len);
9603 while (k < final) {
9604 var pk = String(k);
9605 o[pk] = value;
9606 k += 1;
9607 }
9608 return o;
9609 });
9610
9611 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
9612
9613 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
9614 define(
9615 Array.prototype, 'find',
9616 function find(predicate) {
9617 var o = ToObject(this);
9618 var lenValue = o.length;
9619 var len = ToInteger(lenValue);
9620 if (!IsCallable(predicate)) throw TypeError();
9621 var t = arguments.length > 1 ? arguments[1] : undefined;
9622 var k = 0;
9623 while (k < len) {
9624 var pk = String(k);
9625 var kPresent = HasProperty(o, pk);
9626 if (kPresent) {
9627 var kValue = o[pk];
9628 var testResult = predicate.call(t, kValue, k, o);
9629 if (Boolean(testResult)) {
9630 return kValue;
9631 }
9632 }
9633 ++k;
9634 }
9635 return undefined;
9636 });
9637
9638 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
9639 define(
9640 Array.prototype, 'findIndex',
9641 function findIndex(predicate) {
9642 var o = ToObject(this);
9643 var lenValue = o.length;
9644 var len = ToLength(lenValue);
9645 if (!IsCallable(predicate)) throw TypeError();
9646 var t = arguments.length > 1 ? arguments[1] : undefined;
9647 var k = 0;
9648 while (k < len) {
9649 var pk = String(k);
9650 var kPresent = HasProperty(o, pk);
9651 if (kPresent) {
9652 var kValue = o[pk];
9653 var testResult = predicate.call(t, kValue, k, o);
9654 if (Boolean(testResult)) {
9655 return k;
9656 }
9657 }
9658 ++k;
9659 }
9660 return -1;
9661 });
9662
9663 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
9664 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
9665 // 22.1.3.12 Array.prototype.join (separator)
9666
9667 // 22.1.3.13 Array.prototype.keys ( )
9668 define(
9669 Array.prototype, 'keys',
9670 function keys() {
9671 return CreateArrayIterator(this, 'key');
9672 }, !nativeArrayIteratorMethods);
9673
9674 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
9675 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
9676 // 22.1.3.16 Array.prototype.pop ( )
9677 // 22.1.3.17 Array.prototype.push ( ...items )
9678 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
9679 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
9680 // 22.1.3.20 Array.prototype.reverse ( )
9681 // 22.1.3.21 Array.prototype.shift ( )
9682 // 22.1.3.22 Array.prototype.slice (start, end)
9683 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
9684 // 22.1.3.24 Array.prototype.sort (comparefn)
9685 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
9686 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
9687 // 22.1.3.27 Array.prototype.toString ( )
9688 // 22.1.3.28 Array.prototype.unshift ( ...items )
9689
9690 // 22.1.3.29 Array.prototype.values ( )
9691 define(
9692 Array.prototype, 'values',
9693 function values() {
9694 return CreateArrayIterator(this, 'value');
9695 }, !nativeArrayIteratorMethods);
9696
9697 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
9698 define(
9699 Array.prototype, $$iterator,
9700 Array.prototype.values
9701 );
9702
9703 // 22.1.3.31 Array.prototype [ @@unscopables ]
9704 // 22.1.4 Properties of Array Instances
9705 // 22.1.4.1 length
9706
9707 // 22.1.5 Array Iterator Objects
9708 function ArrayIterator() {}
9709
9710 // 22.1.5.1 CreateArrayIterator Abstract Operation
9711 function CreateArrayIterator(array, kind) {
9712 var o = ToObject(array);
9713 var iterator = new ArrayIterator;
9714 set_internal(iterator, '[[IteratedObject]]', o);
9715 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
9716 set_internal(iterator, '[[ArrayIterationKind]]', kind);
9717 return iterator;
9718 }
9719
9720 // 22.1.5.2 The %ArrayIteratorPrototype% Object
9721 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
9722 ArrayIterator.prototype = $ArrayIteratorPrototype$;
9723
9724 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
9725 define(
9726 $ArrayIteratorPrototype$, 'next',
9727 function next() {
9728 var o = strict(this);
9729 if (Type(o) !== 'object') throw TypeError();
9730 var a = o['[[IteratedObject]]'],
9731 index = o['[[ArrayIteratorNextIndex]]'],
9732 itemKind = o['[[ArrayIterationKind]]'],
9733 lenValue = a.length,
9734 len = ToUint32(lenValue),
9735 elementKey,
9736 elementValue;
9737 if (itemKind.indexOf('sparse') !== -1) {
9738 var found = false;
9739 while (!found && index < len) {
9740 elementKey = String(index);
9741 found = HasProperty(a, elementKey);
9742 if (!found) {
9743 index += 1;
9744 }
9745 }
9746 }
9747 if (index >= len) {
9748 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
9749 return CreateIterResultObject(undefined, true);
9750 }
9751 elementKey = index;
9752 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
9753 if (itemKind.indexOf('value') !== -1)
9754 elementValue = a[elementKey];
9755 if (itemKind.indexOf('key+value') !== -1)
9756 return CreateIterResultObject([elementKey, elementValue], false);
9757 if (itemKind.indexOf('key') !== -1)
9758 return CreateIterResultObject(elementKey, false);
9759 if (itemKind === 'value')
9760 return CreateIterResultObject(elementValue, false);
9761 throw Error('Internal error');
9762 });
9763
9764 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
9765 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
9766
9767 // 22.1.5.3 Properties of Array Iterator Instances
9768
9769
9770 // ---------------------------------------
9771 // 22.2 TypedArray Objects
9772 // ---------------------------------------
9773
9774 // See typedarray.js for TypedArray polyfill
9775
9776 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
9777 'Int16Array', 'Uint16Array',
9778 'Int32Array', 'Uint32Array',
9779 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
9780 if (!($TypedArrayName$ in global))
9781 return;
9782 var $TypedArray$ = global[$TypedArrayName$];
9783
9784 // 22.2.1 The %TypedArray% Intrinsic Object
9785 // 22.2.1.1 %TypedArray% ( length )
9786 // 22.2.1.2 %TypedArray% ( typedArray )
9787 // 22.2.1.3 %TypedArray% ( object )
9788 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
9789 // 22.2.1.5 %TypedArray% ( all other argument combinations )
9790 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
9791
9792 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
9793 define(
9794 $TypedArray$, 'from',
9795 function from(source) {
9796 var mapfn = arguments[1];
9797 var thisArg = arguments[2];
9798
9799 var c = strict(this);
9800 if (!IsConstructor(c)) throw TypeError();
9801 if (mapfn === undefined) {
9802 var mapping = false;
9803 } else {
9804 if (IsCallable(mapfn)) throw TypeError();
9805 var t = thisArg;
9806 mapping = true;
9807 }
9808 var usingIterator = GetMethod(source, $$iterator);
9809 if (usingIterator !== undefined) {
9810 var iterator = GetIterator(source, usingIterator);
9811 var values = [];
9812 var next = true;
9813 while (next !== false) {
9814 next = IteratorStep(iterator);
9815 if (next !== false) {
9816 var nextValue = IteratorValue(next);
9817 values.push(nextValue);
9818 }
9819 }
9820 var len = values.length;
9821 var newObj = new c(len);
9822 var k = 0;
9823 while (k < len) {
9824 var kValue = values.shift();
9825 if (mapping) {
9826 var mappedValue = mapfn.call(t, kValue);
9827 } else {
9828 mappedValue = kValue;
9829 }
9830 newObj[k] = mappedValue;
9831 ++k;
9832 }
9833 console.assert(values.length === 0);
9834 return newObj;
9835 }
9836 var arrayLike = ToObject(source);
9837 var lenValue = arrayLike.length;
9838 len = ToLength(lenValue);
9839 newObj = new c(len);
9840 k = 0;
9841 while (k < len) {
9842 kValue = arrayLike[k];
9843 if (mapping) {
9844 mappedValue = mapfn.call(t, kValue, k);
9845 } else {
9846 mappedValue = kValue;
9847 }
9848 newObj[k] = mappedValue;
9849 ++k;
9850 }
9851 return newObj;
9852 });
9853
9854 // 22.2.2.2 %TypedArray%.of ( ...items )
9855 define(
9856 $TypedArray$, 'of',
9857 function of() {
9858 var items = arguments;
9859
9860 var len = items.length;
9861 var c = strict(this);
9862 var newObj = new c(len);
9863 var k = 0;
9864 while (k < len) {
9865 newObj[k] = items[k];
9866 ++k;
9867 }
9868 return newObj;
9869 });
9870
9871 // 22.2.2.3 %TypedArray%.prototype
9872 // 22.2.2.4 get %TypedArray% [ @@species ]
9873 // 22.2.3 Properties of the %TypedArrayPrototype% Object
9874 // 22.2.3.1 get %TypedArray%.prototype.buffer
9875 // 22.2.3.2 get %TypedArray%.prototype.byteLength
9876 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
9877 // 22.2.3.4 %TypedArray%.prototype.constructor
9878
9879 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
9880 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
9881
9882 // 22.2.3.6 %TypedArray%.prototype.entries ( )
9883 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
9884
9885 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
9886 define($TypedArray$.prototype, 'every', Array.prototype.every);
9887
9888 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
9889 define(
9890 $TypedArray$.prototype, 'fill',
9891 //Array.prototype.fill // Doesn't work in Safari 7
9892 function fill(value/*, start, end*/) {
9893 var start = arguments[1],
9894 end = arguments[2];
9895
9896 var o = ToObject(this);
9897 var lenVal = o.length;
9898 var len = ToLength(lenVal);
9899 len = max(len, 0);
9900 var relativeStart = ToInteger(start);
9901 var k;
9902 if (relativeStart < 0) k = max((len + relativeStart), 0);
9903 else k = min(relativeStart, len);
9904 var relativeEnd;
9905 if (end === undefined) relativeEnd = len;
9906 else relativeEnd = ToInteger(end);
9907 var final;
9908 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
9909 else final = min(relativeEnd, len);
9910 while (k < final) {
9911 var pk = String(k);
9912 o[pk] = value;
9913 k += 1;
9914 }
9915 return o;
9916 });
9917
9918 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
9919 define(
9920 $TypedArray$.prototype, 'filter',
9921 function filter(callbackfn) {
9922 var thisArg = arguments[1];
9923
9924 var o = ToObject(this);
9925 var lenVal = o.length;
9926 var len = ToLength(lenVal);
9927 if (!IsCallable(callbackfn)) throw TypeError();
9928 var t = thisArg;
9929 var c = o.constructor;
9930 var kept = [];
9931 var k = 0;
9932 var captured = 0;
9933 while (k < len) {
9934 var kValue = o[k];
9935 var selected = callbackfn.call(t, kValue, k, o);
9936 if (selected) {
9937 kept.push(kValue);
9938 ++captured;
9939 }
9940 ++k;
9941 }
9942 var a = new c(captured);
9943 var n = 0;
9944 for (var i = 0; i < kept.length; ++i) {
9945 var e = kept[i];
9946 a[n] = e;
9947 ++n;
9948 }
9949 return a;
9950 });
9951
9952 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
9953 define($TypedArray$.prototype, 'find', Array.prototype.find);
9954
9955 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
9956 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
9957
9958 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
9959 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
9960
9961 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
9962 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
9963
9964 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
9965 define($TypedArray$.prototype, 'join', Array.prototype.join);
9966
9967 // 22.2.3.15 %TypedArray%.prototype.keys ( )
9968 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
9969
9970 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
9971 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
9972
9973 // 22.2.3.17 get %TypedArray%.prototype.length
9974
9975 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
9976 define(
9977 $TypedArray$.prototype, 'map',
9978 function map(callbackfn) {
9979 var thisArg = arguments[1];
9980
9981 var o = ToObject(this);
9982 var lenValue = o.length;
9983 var len = ToLength(lenValue);
9984 if (!IsCallable(callbackfn)) throw TypeError();
9985 var t = thisArg;
9986 var a = undefined;
9987 var c = o.constructor;
9988 if (IsConstructor(c))
9989 a = new c(len);
9990 if (a === undefined)
9991 a = new Array(len);
9992 var k = 0;
9993 while (k < len) {
9994 var kPresent = HasProperty(o, k);
9995 if (kPresent) {
9996 var kValue = o[k];
9997 var mappedValue = callbackfn.call(t, kValue, k, o);
9998 a[k] = mappedValue;
9999 }
10000 ++k;
10001 }
10002 return a;
10003 });
10004
10005 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
10006 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
10007
10008 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
10009 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
10010
10011 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
10012 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
10013
10014 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
10015 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
10016 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
10017
10018 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
10019 define(
10020 $TypedArray$.prototype, 'slice',
10021 function slice(start, end) {
10022 var o = ToObject(this);
10023 var lenVal = o.length;
10024 var len = ToLength(lenVal);
10025 var relativeStart = ToInteger(start);
10026 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
10027 var relativeEnd = (end === undefined) ? len : ToInteger(end);
10028 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
10029 var count = final - k;
10030 var c = o.constructor;
10031 if (IsConstructor(c)) {
10032 var a = new c(count);
10033 } else {
10034 throw TypeError();
10035 }
10036 var n = 0;
10037 while (k < final) {
10038 var kValue = o[k];
10039 a[n] = kValue;
10040 ++k;
10041 ++n;
10042 }
10043 return a;
10044 });
10045
10046 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
10047 define($TypedArray$.prototype, 'some', Array.prototype.some);
10048
10049 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
10050 define(
10051 $TypedArray$.prototype, 'sort',
10052 function sort() {
10053 var comparefn = arguments[0];
10054
10055 function sortCompare(x, y) {
10056 console.assert(Type(x) === 'number' && Type(y) === 'number');
10057 if (x !== x && y !== y) return +0;
10058 if (x !== x) return 1;
10059 if (y !== y) return -1;
10060 if (comparefn !== undefined) {
10061 return comparefn(x, y);
10062 }
10063 if (x < y) return -1;
10064 if (x > y) return 1;
10065 return +0;
10066 }
10067 return Array.prototype.sort.call(this, sortCompare);
10068 });
10069
10070 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
10071 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
10072 // 22.2.3.28 %TypedArray%.prototype.toString ( )
10073
10074 // 22.2.3.29 %TypedArray%.prototype.values ( )
10075 define($TypedArray$.prototype, 'values', Array.prototype.values);
10076
10077 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
10078 define(
10079 $TypedArray$.prototype, $$iterator,
10080 $TypedArray$.prototype.values
10081 );
10082
10083 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
10084 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
10085
10086 // 22.2.4 The TypedArray Constructors
10087 // 22.2.4.1TypedArray( ... argumentsList)
10088 // 22.2.5 Properties of the TypedArray Constructors
10089 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
10090 // 22.2.5.2 TypedArray.prototype
10091 // 22.2.6 Properties of TypedArray Prototype Objects
10092 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
10093 // 22.2.6.2 TypedArray.prototype.constructor
10094 // 22.2.7 Properties of TypedArray Instances
10095 });
10096
10097 // ---------------------------------------
10098 // 23 Keyed Collection
10099 // ---------------------------------------
10100
10101 // ---------------------------------------
10102 // 23.1 Map Objects
10103 // ---------------------------------------
10104
10105 (function() {
10106 // 23.1.1 The Map Constructor
10107
10108 // 23.1.1.1 Map ( [ iterable ] )
10109 /** @constructor */
10110 function Map(/*iterable*/) {
10111 var map = strict(this);
10112 var iterable = arguments[0];
10113
10114 if (Type(map) !== 'object') throw TypeError();
10115 if ('[[MapData]]' in map) throw TypeError();
10116
10117 if (iterable !== undefined) {
10118 var adder = map['set'];
10119 if (!IsCallable(adder)) throw TypeError();
10120 var iter = GetIterator(ToObject(iterable));
10121 }
10122 set_internal(map, '[[MapData]]', { keys: [], values: [] });
10123 if (iter === undefined) return map;
10124 while (true) {
10125 var next = IteratorStep(iter);
10126 if (next === false)
10127 return map;
10128 var nextItem = IteratorValue(next);
10129 if (Type(nextItem) !== 'object') throw TypeError();
10130 var k = nextItem[0];
10131 var v = nextItem[1];
10132 adder.call(map, k, v);
10133 }
10134
10135 return map;
10136 }
10137
10138 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
10139 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
10140 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
10141 (new global.Map([['a', 1]]).size !== 1))
10142 global.Map = Map;
10143
10144
10145 function MapDataIndexOf(mapData, key) {
10146 var i;
10147 if (key === key) return mapData.keys.indexOf(key);
10148 // Slow case for NaN
10149 for (i = 0; i < mapData.keys.length; i += 1)
10150 if (SameValueZero(mapData.keys[i], key)) return i;
10151 return -1;
10152 }
10153
10154 // 23.1.1.2 new Map ( ... argumentsList )
10155 // 23.1.2 Properties of the Map Constructor
10156 // 23.1.2.1 Map.prototype
10157 var $MapPrototype$ = {};
10158 Map.prototype = $MapPrototype$;
10159
10160 // 23.1.2.2 get Map [ @@species ]
10161
10162 // 23.1.3 Properties of the Map Prototype Object
10163 // 23.1.3.1 Map.prototype.clear ()
10164 define(
10165 Map.prototype, 'clear',
10166 function clear() {
10167 var m = strict(this);
10168 if (Type(m) !== 'object') throw TypeError();
10169 if (!('[[MapData]]' in m)) throw TypeError();
10170 if (m['[[MapData]]'] === undefined) throw TypeError();
10171 var entries = m['[[MapData]]'];
10172 entries.keys.length = 0;
10173 entries.values.length = 0;
10174 return undefined;
10175 });
10176
10177 // 23.1.3.2 Map.prototype.constructor
10178
10179 // 23.1.3.3 Map.prototype.delete ( key )
10180 define(
10181 Map.prototype, 'delete',
10182 function delete_(key) {
10183 var m = strict(this);
10184 if (Type(m) !== 'object') throw TypeError();
10185 if (!('[[MapData]]' in m)) throw TypeError();
10186 if (m['[[MapData]]'] === undefined) throw TypeError();
10187 var entries = m['[[MapData]]'];
10188 var i = MapDataIndexOf(entries, key);
10189 if (i < 0) return false;
10190 entries.keys[i] = empty;
10191 entries.values[i] = empty;
10192 return true;
10193 });
10194
10195 // 23.1.3.4 Map.prototype.entries ( )
10196 define(
10197 Map.prototype, 'entries',
10198 function entries() {
10199 var m = strict(this);
10200 if (Type(m) !== 'object') throw TypeError();
10201 return CreateMapIterator(m, 'key+value');
10202 });
10203
10204 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
10205 define(
10206 Map.prototype, 'forEach',
10207 function forEach(callbackfn /*, thisArg*/) {
10208 var thisArg = arguments[1];
10209
10210 var m = strict(this);
10211 if (Type(m) !== 'object') throw TypeError();
10212 if (!('[[MapData]]' in m)) throw TypeError();
10213 if (m['[[MapData]]'] === undefined) throw TypeError();
10214 var entries = m['[[MapData]]'];
10215
10216 if (!IsCallable(callbackfn)) {
10217 throw TypeError('First argument to forEach is not callable.');
10218 }
10219 for (var i = 0; i < entries.keys.length; ++i) {
10220 if (entries.keys[i] !== empty) {
10221 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
10222 }
10223 }
10224 return undefined;
10225 });
10226
10227 // 23.1.3.6 Map.prototype.get ( key )
10228 define(
10229 Map.prototype, 'get',
10230 function get(key) {
10231 var m = strict(this);
10232 if (Type(m) !== 'object') throw TypeError();
10233 if (!('[[MapData]]' in m)) throw TypeError();
10234 if (m['[[MapData]]'] === undefined) throw TypeError();
10235 var entries = m['[[MapData]]'];
10236 var i = MapDataIndexOf(entries, key);
10237 if (i >= 0) return entries.values[i];
10238 return undefined;
10239 });
10240
10241 // 23.1.3.7 Map.prototype.has ( key )
10242 define(
10243 Map.prototype, 'has',
10244 function has(key) {
10245 var m = strict(this);
10246 if (Type(m) !== 'object') throw TypeError();
10247 if (!('[[MapData]]' in m)) throw TypeError();
10248 if (m['[[MapData]]'] === undefined) throw TypeError();
10249 var entries = m['[[MapData]]'];
10250 if (MapDataIndexOf(entries, key) >= 0) return true;
10251 return false;
10252 });
10253
10254 // 23.1.3.8 Map.prototype.keys ( )
10255 define(
10256 Map.prototype, 'keys',
10257 function keys() {
10258 var m = strict(this);
10259 if (Type(m) !== 'object') throw TypeError();
10260 return CreateMapIterator(m, 'key');
10261 });
10262
10263 // 23.1.3.9 Map.prototype.set ( key , value )
10264 define(
10265 Map.prototype, 'set',
10266 function set(key, value) {
10267 var m = strict(this);
10268 if (Type(m) !== 'object') throw TypeError();
10269 if (!('[[MapData]]' in m)) throw TypeError();
10270 if (m['[[MapData]]'] === undefined) throw TypeError();
10271 var entries = m['[[MapData]]'];
10272 var i = MapDataIndexOf(entries, key);
10273 if (i < 0) i = entries.keys.length;
10274 if (SameValue(key, -0)) key = 0;
10275 entries.keys[i] = key;
10276 entries.values[i] = value;
10277 return m;
10278 });
10279
10280 // 23.1.3.10 get Map.prototype.size
10281 Object.defineProperty(
10282 Map.prototype, 'size', {
10283 get: function() {
10284 var m = strict(this);
10285 if (Type(m) !== 'object') throw TypeError();
10286 if (!('[[MapData]]' in m)) throw TypeError();
10287 if (m['[[MapData]]'] === undefined) throw TypeError();
10288 var entries = m['[[MapData]]'];
10289 var count = 0;
10290 for (var i = 0; i < entries.keys.length; ++i) {
10291 if (entries.keys[i] !== empty)
10292 count = count + 1;
10293 }
10294 return count;
10295 }
10296 });
10297
10298 // 23.1.3.11 Map.prototype.values ( )
10299 define(
10300 Map.prototype, 'values',
10301 function values() {
10302 var m = strict(this);
10303 if (Type(m) !== 'object') throw TypeError();
10304 return CreateMapIterator(m, 'value');
10305 });
10306
10307 // 23.1.3.12 Map.prototype [ @@iterator ]( )
10308 define(
10309 Map.prototype, $$iterator,
10310 function() {
10311 var m = strict(this);
10312 if (Type(m) !== 'object') throw TypeError();
10313 return CreateMapIterator(m, 'key+value');
10314 });
10315
10316 // 23.1.3.13 Map.prototype [ @@toStringTag ]
10317 define(global.Map.prototype, $$toStringTag, 'Map');
10318
10319 // 23.1.4 Properties of Map Instances
10320 // 23.1.5 Map Iterator Objects
10321
10322 /** @constructor */
10323 function MapIterator() {}
10324
10325 // 23.1.5.1 CreateMapIterator Abstract Operation
10326 function CreateMapIterator(map, kind) {
10327 if (Type(map) !== 'object') throw TypeError();
10328 if (!('[[MapData]]' in map)) throw TypeError();
10329 if (map['[[MapData]]'] === undefined) throw TypeError();
10330 var iterator = new MapIterator;
10331 set_internal(iterator, '[[Map]]', map);
10332 set_internal(iterator, '[[MapNextIndex]]', 0);
10333 set_internal(iterator, '[[MapIterationKind]]', kind);
10334 return iterator;
10335 }
10336
10337 // 23.1.5.2 The %MapIteratorPrototype% Object
10338 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
10339 MapIterator.prototype = $MapIteratorPrototype$;
10340
10341 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
10342 define(
10343 $MapIteratorPrototype$, 'next',
10344 function next() {
10345 var o = strict(this);
10346 if (Type(o) !== 'object') throw TypeError();
10347 var m = o['[[Map]]'],
10348 index = o['[[MapNextIndex]]'],
10349 itemKind = o['[[MapIterationKind]]'],
10350 entries = m['[[MapData]]'];
10351 while (index < entries.keys.length) {
10352 var e = {key: entries.keys[index], value: entries.values[index]};
10353 index = index += 1;
10354 set_internal(o, '[[MapNextIndex]]', index);
10355 if (e.key !== empty) {
10356 if (itemKind === 'key') {
10357 return CreateIterResultObject(e.key, false);
10358 } else if (itemKind === 'value') {
10359 return CreateIterResultObject(e.value, false);
10360 } else {
10361 return CreateIterResultObject([e.key, e.value], false);
10362 }
10363 }
10364 }
10365 return CreateIterResultObject(undefined, true);
10366 });
10367
10368 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
10369 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
10370
10371 // 23.1.5.3 Properties of Map Iterator Instances
10372 }());
10373
10374 // ---------------------------------------
10375 // 23.2 Set Objects
10376 // ---------------------------------------
10377
10378 (function() {
10379 // 23.2.1 The Set Constructor
10380 // 23.2.1.1 Set ( [ iterable ] )
10381
10382 /** @constructor */
10383 function Set(/*iterable*/) {
10384 var set = strict(this);
10385 var iterable = arguments[0];
10386
10387 if (Type(set) !== 'object') throw TypeError();
10388 if ('[[SetData]]' in set) throw TypeError();
10389
10390 if (iterable !== undefined) {
10391 var adder = set['add'];
10392 if (!IsCallable(adder)) throw TypeError();
10393 var iter = GetIterator(ToObject(iterable));
10394 }
10395 set_internal(set, '[[SetData]]', []);
10396 if (iter === undefined) return set;
10397 while (true) {
10398 var next = IteratorStep(iter);
10399 if (next === false)
10400 return set;
10401 var nextValue = IteratorValue(next);
10402 adder.call(set, nextValue);
10403 }
10404
10405 return set;
10406 }
10407
10408 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
10409 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
10410 (new global.Set([1]).size !== 1))
10411 global.Set = Set;
10412
10413 function SetDataIndexOf(setData, key) {
10414 var i;
10415 if (key === key)
10416 return setData.indexOf(key);
10417 // Slow case for NaN
10418 for (i = 0; i < setData.length; i += 1)
10419 if (SameValueZero(setData[i], key)) return i;
10420 return -1;
10421 }
10422
10423 // 23.2.1.2 new Set ( ...argumentsList )
10424 // 23.2.2 Properties of the Set Constructor
10425
10426 // 23.2.2.1 Set.prototype
10427 var $SetPrototype$ = {};
10428 Set.prototype = $SetPrototype$;
10429
10430 // 23.2.2.2 get Set [ @@species ]
10431 // 23.2.3 Properties of the Set Prototype Object
10432
10433 // 23.2.3.1 Set.prototype.add (value )
10434 define(
10435 Set.prototype, 'add',
10436 function add(value) {
10437 var s = strict(this);
10438 if (Type(s) !== 'object') throw TypeError();
10439 if (!('[[SetData]]' in s)) throw TypeError();
10440 if (s['[[SetData]]'] === undefined) throw TypeError();
10441 if (SameValue(value, -0)) value = 0;
10442 var entries = s['[[SetData]]'];
10443 var i = SetDataIndexOf(entries, value);
10444 if (i < 0) i = s['[[SetData]]'].length;
10445 s['[[SetData]]'][i] = value;
10446
10447 return s;
10448 });
10449
10450 // 23.2.3.2 Set.prototype.clear ()
10451 define(
10452 Set.prototype, 'clear',
10453 function clear() {
10454 var s = strict(this);
10455 if (Type(s) !== 'object') throw TypeError();
10456 if (!('[[SetData]]' in s)) throw TypeError();
10457 if (s['[[SetData]]'] === undefined) throw TypeError();
10458 var entries = s['[[SetData]]'];
10459 entries.length = 0;
10460 return undefined;
10461 });
10462
10463 // 23.2.3.3 Set.prototype.constructor
10464 // 23.2.3.4 Set.prototype.delete ( value )
10465 define(
10466 Set.prototype, 'delete',
10467 function delete_(value) {
10468 var s = strict(this);
10469 if (Type(s) !== 'object') throw TypeError();
10470 if (!('[[SetData]]' in s)) throw TypeError();
10471 if (s['[[SetData]]'] === undefined) throw TypeError();
10472 var entries = s['[[SetData]]'];
10473 var i = SetDataIndexOf(entries, value);
10474 if (i < 0) return false;
10475 entries[i] = empty;
10476 return true;
10477 });
10478
10479 // 23.2.3.5 Set.prototype.entries ( )
10480 define(
10481 Set.prototype, 'entries',
10482 function entries() {
10483 var s = strict(this);
10484 if (Type(s) !== 'object') throw TypeError();
10485 return CreateSetIterator(s, 'key+value');
10486 });
10487
10488 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
10489 define(
10490 Set.prototype, 'forEach',
10491 function forEach(callbackfn/*, thisArg*/) {
10492 var thisArg = arguments[1];
10493
10494 var s = strict(this);
10495 if (Type(s) !== 'object') throw TypeError();
10496 if (!('[[SetData]]' in s)) throw TypeError();
10497 if (s['[[SetData]]'] === undefined) throw TypeError();
10498 var entries = s['[[SetData]]'];
10499
10500 if (!IsCallable(callbackfn)) {
10501 throw TypeError('First argument to forEach is not callable.');
10502 }
10503 for (var i = 0; i < entries.length; ++i) {
10504 if (entries[i] !== empty) {
10505 callbackfn.call(thisArg, entries[i], entries[i], s);
10506 }
10507 }
10508 });
10509
10510 // 23.2.3.7 Set.prototype.has ( value )
10511 define(
10512 Set.prototype, 'has',
10513 function has(key) {
10514 var s = strict(this);
10515 if (Type(s) !== 'object') throw TypeError();
10516 if (!('[[SetData]]' in s)) throw TypeError();
10517 if (s['[[SetData]]'] === undefined) throw TypeError();
10518 var entries = s['[[SetData]]'];
10519 return SetDataIndexOf(entries, key) !== -1;
10520 });
10521
10522 // 23.2.3.8 Set.prototype.keys ( )
10523 // See Set.prototype.values
10524
10525 // 23.2.3.9 get Set.prototype.size
10526 Object.defineProperty(
10527 Set.prototype, 'size', {
10528 get: function() {
10529 var s = strict(this);
10530 if (Type(s) !== 'object') throw TypeError();
10531 if (!('[[SetData]]' in s)) throw TypeError();
10532 if (s['[[SetData]]'] === undefined) throw TypeError();
10533 var entries = s['[[SetData]]'];
10534 var count = 0;
10535 for (var i = 0; i < entries.length; ++i) {
10536 if (entries[i] !== empty)
10537 count = count + 1;
10538 }
10539 return count;
10540 }
10541 });
10542
10543 // 23.2.3.10 Set.prototype.values ( )
10544 define(
10545 Set.prototype, 'values',
10546 function values() {
10547 var s = strict(this);
10548 if (Type(s) !== 'object') throw TypeError();
10549 return CreateSetIterator(s, 'value');
10550 });
10551 // NOTE: function name is still 'values':
10552 Set.prototype.keys = Set.prototype.values;
10553
10554 // 23.2.3.11 Set.prototype [@@iterator ] ( )
10555 define(
10556 Set.prototype, $$iterator,
10557 function() {
10558 var s = strict(this);
10559 if (Type(s) !== 'object') throw TypeError();
10560 return CreateSetIterator(s);
10561 });
10562
10563 // 23.2.3.12 Set.prototype [ @@toStringTag ]
10564 define(global.Set.prototype, $$toStringTag, 'Set');
10565
10566 // 23.2.4 Properties of Set Instances
10567 // 23.2.5 Set Iterator Objects
10568 /** @constructor */
10569 function SetIterator() {}
10570
10571 // 23.2.5.1 CreateSetIterator Abstract Operation
10572 function CreateSetIterator(set, kind) {
10573 if (Type(set) !== 'object') throw TypeError();
10574 if (!('[[SetData]]' in set)) throw TypeError();
10575 if (set['[[SetData]]'] === undefined) throw TypeError();
10576 var iterator = new SetIterator;
10577 set_internal(iterator, '[[IteratedSet]]', set);
10578 set_internal(iterator, '[[SetNextIndex]]', 0);
10579 set_internal(iterator, '[[SetIterationKind]]', kind);
10580 return iterator;
10581 }
10582
10583 // 23.2.5.2 The %SetIteratorPrototype% Object
10584 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
10585 SetIterator.prototype = $SetIteratorPrototype$;
10586
10587 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
10588 define(
10589 $SetIteratorPrototype$, 'next',
10590 function next() {
10591 var o = strict(this);
10592 if (Type(o) !== 'object') throw TypeError();
10593 var s = o['[[IteratedSet]]'],
10594 index = o['[[SetNextIndex]]'],
10595 itemKind = o['[[SetIterationKind]]'],
10596 entries = s['[[SetData]]'];
10597 while (index < entries.length) {
10598 var e = entries[index];
10599 index = index += 1;
10600 set_internal(o, '[[SetNextIndex]]', index);
10601 if (e !== empty) {
10602 if (itemKind === 'key+value')
10603 return CreateIterResultObject([e, e], false);
10604 return CreateIterResultObject(e, false);
10605 }
10606 }
10607 return CreateIterResultObject(undefined, true);
10608 });
10609
10610 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
10611 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
10612
10613 // 23.2.5.3 Properties of Set Iterator Instances
10614
10615 }());
10616
10617 // ---------------------------------------
10618 // 23.3 WeakMap Objects
10619 // ---------------------------------------
10620
10621 (function() {
10622 // 23.3.1 The WeakMap Constructor
10623 // 23.3.1.1 WeakMap ( [ iterable ] )
10624 /** @constructor */
10625 function WeakMap(/*iterable*/) {
10626 var map = strict(this);
10627 var iterable = arguments[0];
10628
10629 if (Type(map) !== 'object') throw TypeError();
10630 if ('[[WeakMapData]]' in map) throw TypeError();
10631
10632 if (iterable !== undefined) {
10633 var adder = map['set'];
10634 if (!IsCallable(adder)) throw TypeError();
10635 var iter = GetIterator(ToObject(iterable));
10636 }
10637 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
10638 if (iter === undefined) return map;
10639 while (true) {
10640 var next = IteratorStep(iter);
10641 if (next === false)
10642 return map;
10643 var nextValue = IteratorValue(next);
10644 if (Type(nextValue) !== 'object') throw TypeError();
10645 var k = nextValue[0];
10646 var v = nextValue[1];
10647 adder.call(map, k, v);
10648 }
10649
10650 return map;
10651 }
10652
10653 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
10654 global.WeakMap = WeakMap;
10655
10656 // 23.3.2 Properties of the WeakMap Constructor
10657 // 23.3.2.1 WeakMap.prototype
10658 var $WeakMapPrototype$ = {};
10659 WeakMap.prototype = $WeakMapPrototype$;
10660
10661
10662
10663 // 23.3.2.2 WeakMap[ @@create ] ( )
10664 // 23.3.3 Properties of the WeakMap Prototype Object
10665
10666 // 23.3.3.1 WeakMap.prototype.constructor
10667
10668 // 23.3.3.2 WeakMap.prototype.delete ( key )
10669 define(
10670 WeakMap.prototype, 'delete',
10671 function delete_(key) {
10672 var M = strict(this);
10673 if (Type(M) !== 'object') throw TypeError();
10674 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10675 if (Type(key) !== 'object') throw TypeError('Expected object');
10676 return M['[[WeakMapData]]'].remove(key);
10677 });
10678
10679 // 23.3.3.3 WeakMap.prototype.get ( key )
10680 define(
10681 WeakMap.prototype, 'get',
10682 function get(key, defaultValue) {
10683 var M = strict(this);
10684 if (Type(M) !== 'object') throw TypeError();
10685 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10686 if (Type(key) !== 'object') throw TypeError('Expected object');
10687 return M['[[WeakMapData]]'].get(key, defaultValue);
10688 });
10689
10690 // 23.3.3.4 WeakMap.prototype.has ( key )
10691 define(
10692 WeakMap.prototype, 'has',
10693 function has(key) {
10694 var M = strict(this);
10695 if (Type(M) !== 'object') throw TypeError();
10696 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10697 if (Type(key) !== 'object') throw TypeError('Expected object');
10698 return M['[[WeakMapData]]'].has(key);
10699 });
10700
10701 // 23.3.3.5 WeakMap.prototype.set ( key , value )
10702 define(
10703 WeakMap.prototype, 'set',
10704 function set(key, value) {
10705 var M = strict(this);
10706 if (Type(M) !== 'object') throw TypeError();
10707 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10708 if (Type(key) !== 'object') throw TypeError('Expected object');
10709 M['[[WeakMapData]]'].set(key, value);
10710 return M;
10711 });
10712
10713 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
10714 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
10715
10716 // 23.3.4 Properties of WeakMap Instances
10717
10718 // Polyfills for incomplete native implementations:
10719 (function() {
10720 var wm = new global.WeakMap();
10721 var orig = global.WeakMap.prototype.set;
10722 define(global.WeakMap.prototype, 'set', function set() {
10723 orig.apply(this, arguments);
10724 return this;
10725 }, wm.set({}, 0) !== wm);
10726 }());
10727 }());
10728
10729 // ---------------------------------------
10730 // 23.4 WeakSet Objects
10731 // ---------------------------------------
10732
10733 (function() {
10734 // 23.4.1 The WeakSet Constructor
10735 // 23.4.1.1 WeakSet ( [ iterable ] )
10736 /** @constructor */
10737 function WeakSet(/*iterable*/) {
10738 var set = strict(this);
10739 var iterable = arguments[0];
10740
10741 if (Type(set) !== 'object') throw TypeError();
10742 if ('[[WeakSetData]]' in set) throw TypeError();
10743
10744 if (iterable !== undefined) {
10745 var adder = set['add'];
10746 if (!IsCallable(adder)) throw TypeError();
10747 var iter = GetIterator(ToObject(iterable));
10748 }
10749 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
10750 if (iter === undefined) return set;
10751 while (true) {
10752 var next = IteratorStep(iter);
10753 if (next === false)
10754 return set;
10755 var nextValue = IteratorValue(next);
10756 adder.call(set, nextValue);
10757 }
10758
10759 return set;
10760 }
10761
10762 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
10763 global.WeakSet = WeakSet;
10764
10765 // 23.4.2 Properties of the WeakSet Constructor
10766 // 23.4.2.1 WeakSet.prototype
10767 var $WeakSetPrototype$ = {};
10768 WeakSet.prototype = $WeakSetPrototype$;
10769
10770 // 23.4.3 Properties of the WeakSet Prototype Object
10771 // 23.4.3.1 WeakSet.prototype.add (value )
10772 define(
10773 WeakSet.prototype, 'add',
10774 function add(value) {
10775 var S = strict(this);
10776 if (Type(S) !== 'object') throw TypeError();
10777 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10778 if (Type(value) !== 'object') throw TypeError('Expected object');
10779 S['[[WeakSetData]]'].set(value, true);
10780 return S;
10781 });
10782
10783 // 23.4.3.2 WeakSet.prototype.constructor
10784 // 23.4.3.3 WeakSet.prototype.delete ( value )
10785 define(
10786 WeakSet.prototype, 'delete',
10787 function delete_(value) {
10788 var S = strict(this);
10789 if (Type(S) !== 'object') throw TypeError();
10790 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10791 if (Type(value) !== 'object') throw TypeError('Expected object');
10792 return S['[[WeakSetData]]'].remove(value);
10793 });
10794
10795 // 23.4.3.4 WeakSet.prototype.has ( value )
10796 define(
10797 WeakSet.prototype, 'has',
10798 function has(key) {
10799 var S = strict(this);
10800 if (Type(S) !== 'object') throw TypeError();
10801 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10802 if (Type(key) !== 'object') throw TypeError('Expected object');
10803 return S['[[WeakSetData]]'].has(key);
10804 });
10805
10806 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
10807 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
10808
10809 // 23.4.4 Properties of WeakSet Instances
10810
10811 // Polyfills for incomplete native implementations:
10812 (function() {
10813 var ws = new global.WeakSet();
10814 var orig = global.WeakSet.prototype.add;
10815 define(global.WeakSet.prototype, 'add', function add() {
10816 orig.apply(this, arguments);
10817 return this;
10818 }, ws.add({}) !== ws);
10819 }());
10820 }());
10821
10822 // ---------------------------------------
10823 // 24 Structured Data
10824 // ---------------------------------------
10825
10826 // ---------------------------------------
10827 // 24.1 ArrayBuffer Objects
10828 // ---------------------------------------
10829
10830 // See typedarray.js for TypedArray polyfill
10831
10832 (function() {
10833 if (!('ArrayBuffer' in global))
10834 return;
10835
10836 // 24.1.1 Abstract Operations For ArrayBuffer Objects
10837 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
10838 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
10839 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
10840 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
10841 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
10842 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
10843 // 24.1.2 The ArrayBuffer Constructor
10844 // 24.1.2.1 ArrayBuffer( length )
10845 // 24.1.3 Properties of the ArrayBuffer Constructor
10846
10847 // 24.1.3.1 ArrayBuffer.isView ( arg )
10848 define(
10849 ArrayBuffer, 'isView',
10850 function isView(arg) {
10851 if (Type(arg) !== 'object') return false;
10852 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
10853 return false;
10854 });
10855
10856 // 24.1.3.2 ArrayBuffer.prototype
10857 // 24.1.3.3 get ArrayBuffer [ @@species ]
10858 // 24.1.4 Properties of the ArrayBuffer Prototype Object
10859 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
10860 // 24.1.4.2 ArrayBuffer.prototype.constructor
10861 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
10862
10863 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
10864 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
10865
10866 // 24.1.5 Properties of the ArrayBuffer Instances
10867 }());
10868
10869 // ---------------------------------------
10870 // 24.2 DataView Objects
10871 // ---------------------------------------
10872
10873 // See typedarray.js for TypedArray polyfill
10874
10875 (function() {
10876 if (!('DataView' in global))
10877 return;
10878
10879 // 24.2.1 Abstract Operations For DataView Objects
10880 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
10881 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
10882 // 24.2.2 The DataView Constructor
10883 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
10884 // 24.2.3 Properties of the DataView Constructor
10885 // 24.2.3.1 DataView.prototype
10886 // 24.2.4 Properties of the DataView Prototype Object
10887 // 24.2.4.1 get DataView.prototype.buffer
10888 // 24.2.4.2 get DataView.prototype.byteLength
10889 // 24.2.4.3 get DataView.prototype.byteOffset
10890 // 24.2.4.4 DataView.prototype.constructor
10891 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
10892 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
10893 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
10894 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
10895 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
10896 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
10897 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
10898 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
10899 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
10900 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
10901 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
10902 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
10903 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
10904 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
10905 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
10906 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
10907
10908 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
10909 define(DataView.prototype, $$toStringTag, 'DataView');
10910
10911 // 24.2.5 Properties of DataView Instances
10912 }());
10913
10914 // ---------------------------------------
10915 // 24.3 The JSON Object
10916 // ---------------------------------------
10917
10918 // 24.3.1 JSON.parse ( text [ , reviver ] )
10919 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
10920 // 24.3.3 JSON [ @@toStringTag ]
10921 define(JSON, $$toStringTag, 'JSON');
10922
10923 // ---------------------------------------
10924 // 25.1 Iteration
10925 // ---------------------------------------
10926
10927 // 25.1.1 Common Iteration Interfaces
10928 // 25.1.1.1 The Iterable Interface
10929 // 25.1.1.2 The Iterator Interface
10930 // 25.1.1.3 The IteratorResult Interface
10931
10932 // 25.1.2 The %IteratorPrototype% Object
10933 // Defined earlier, so other prototypes can reference it.
10934 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
10935 define($IteratorPrototype$, $$iterator, function() {
10936 return this;
10937 });
10938
10939
10940 // ---------------------------------------
10941 // 25.4 Promise Objects
10942 // ---------------------------------------
10943
10944 (function() {
10945 // 25.4 Promise Objects
10946
10947 // 25.4.1 Promise Abstract Operations
10948
10949 // 25.4.1.1 PromiseCapability Records
10950 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
10951
10952 function IfAbruptRejectPromise(value, capability) {
10953 var rejectResult = capability['[[Reject]]'].call(undefined, value);
10954 return capability['[[Promise]]'];
10955 }
10956
10957 // 25.4.1.2 PromiseReaction Records
10958
10959 // 25.4.1.3 CreateResolvingFunctions ( promise )
10960
10961 function CreateResolvingFunctions(promise) {
10962 var alreadyResolved = {'[[value]]': false};
10963 var resolve = PromiseResolveFunction();
10964 set_internal(resolve, '[[Promise]]', promise);
10965 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
10966 var reject = PromiseRejectFunction();
10967 set_internal(reject, '[[Promise]]', promise);
10968 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
10969 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
10970 }
10971
10972 // 25.4.1.3.1 Promise Reject Functions
10973
10974 function PromiseRejectFunction() {
10975 var F = function(reason) {
10976 console.assert(Type(F['[[Promise]]']) === 'object');
10977 var promise = F['[[Promise]]'];
10978 var alreadyResolved = F['[[AlreadyResolved]]'];
10979 if (alreadyResolved['[[value]]']) return undefined;
10980 set_internal(alreadyResolved, '[[value]]', true);
10981 return RejectPromise(promise, reason);
10982 };
10983 return F;
10984 }
10985
10986 // 25.4.1.3.2 Promise Resolve Functions
10987
10988 function PromiseResolveFunction() {
10989 var F = function(resolution) {
10990 console.assert(Type(F['[[Promise]]']) === 'object');
10991 var promise = F['[[Promise]]'];
10992 var alreadyResolved = F['[[AlreadyResolved]]'];
10993 if (alreadyResolved['[[value]]']) return undefined;
10994 set_internal(alreadyResolved, '[[value]]', true);
10995
10996 if (SameValue(resolution, promise)) {
10997 var selfResolutionError = TypeError();
10998 return RejectPromise(promise, selfResolutionError);
10999 }
11000 if (Type(resolution) !== 'object')
11001 return FulfillPromise(promise, resolution);
11002 try {
11003 var then = resolution['then'];
11004 } catch(then) {
11005 return RejectPromise(promise, then);
11006 }
11007 if (!IsCallable(then))
11008 return FulfillPromise(promise, resolution);
11009 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
11010 return undefined;
11011 };
11012 return F;
11013 }
11014
11015 // 25.4.1.4 FulfillPromise ( promise, value )
11016
11017 function FulfillPromise(promise, value) {
11018 console.assert(promise['[[PromiseState]]'] === 'pending');
11019 var reactions = promise['[[PromiseFulfillReactions]]'];
11020 set_internal(promise, '[[PromiseResult]]', value);
11021 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
11022 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
11023 set_internal(promise, '[[PromiseState]]', 'fulfilled');
11024 return TriggerPromiseReactions(reactions, value);
11025 }
11026
11027 // 25.4.1.5 NewPromiseCapability ( C )
11028
11029 function NewPromiseCapability(c) {
11030 // To keep Promise hermetic, this doesn't look much like the spec.
11031 return CreatePromiseCapabilityRecord(undefined, c);
11032 }
11033
11034 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
11035
11036 function CreatePromiseCapabilityRecord(promise, constructor) {
11037 // To keep Promise hermetic, this doesn't look much like the spec.
11038 console.assert(IsConstructor(constructor));
11039 var promiseCapability = {};
11040 set_internal(promiseCapability, '[[Promise]]', promise);
11041 set_internal(promiseCapability, '[[Resolve]]', undefined);
11042 set_internal(promiseCapability, '[[Reject]]', undefined);
11043 var executor = GetCapabilitiesExecutor();
11044 set_internal(executor, '[[Capability]]', promiseCapability);
11045
11046 // NOTE: Differs from spec; object is constructed here
11047 var constructorResult = promise = new constructor(executor);
11048 set_internal(promiseCapability, '[[Promise]]', promise);
11049
11050 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
11051 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
11052 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
11053 return promiseCapability;
11054 }
11055
11056 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
11057
11058 function GetCapabilitiesExecutor() {
11059 var F = function(resolve, reject) {
11060 console.assert(F['[[Capability]]']);
11061 var promiseCapability = F['[[Capability]]'];
11062 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
11063 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
11064 set_internal(promiseCapability, '[[Resolve]]', resolve);
11065 set_internal(promiseCapability, '[[Reject]]', reject);
11066 return undefined;
11067 };
11068 return F;
11069 }
11070
11071 // 25.4.1.6 IsPromise ( x )
11072
11073 function IsPromise(x) {
11074 if (Type(x) !== 'object') return false;
11075 if (!('[[PromiseState]]' in x)) return false;
11076 if (x['[[PromiseState]]'] === undefined) return false;
11077 return true;
11078 }
11079
11080 // 25.4.1.7 RejectPromise ( promise, reason )
11081
11082 function RejectPromise(promise, reason) {
11083 console.assert(promise['[[PromiseState]]'] === 'pending');
11084 var reactions = promise['[[PromiseRejectReactions]]'];
11085 set_internal(promise, '[[PromiseResult]]', reason);
11086 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
11087 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
11088 set_internal(promise, '[[PromiseState]]', 'rejected');
11089 return TriggerPromiseReactions(reactions, reason);
11090 }
11091
11092 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
11093
11094 function TriggerPromiseReactions(reactions, argument) {
11095 for (var i = 0, len = reactions.length; i < len; ++i)
11096 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
11097 return undefined;
11098 }
11099
11100 // 25.4.2 Promise Jobs
11101
11102 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
11103
11104 function PromiseReactionJob(reaction, argument) {
11105 var promiseCapability = reaction['[[Capabilities]]'];
11106 var handler = reaction['[[Handler]]'];
11107 var handlerResult, status;
11108 try {
11109 if (handler === 'Identity') handlerResult = argument;
11110 else if (handler === 'Thrower') throw argument;
11111 else handlerResult = handler.call(undefined, argument);
11112 } catch (handlerResult) {
11113 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
11114 NextJob(status); return;
11115 }
11116 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
11117 NextJob(status);
11118 }
11119
11120 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
11121
11122 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
11123 // SPEC BUG: promise vs. promiseToResolve
11124 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
11125 try {
11126 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
11127 resolvingFunctions['[[Reject]]']);
11128 } catch (thenCallResult) {
11129 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
11130 NextJob(status); return;
11131 }
11132 NextJob(thenCallResult);
11133 }
11134
11135 // 25.4.3 The Promise Constructor
11136
11137 // 25.4.3.1 Promise ( executor )
11138
11139 function Promise(executor) {
11140 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
11141 Object.defineProperty(this, '[[PromiseState]]', config);
11142 Object.defineProperty(this, '[[PromiseConstructor]]', config);
11143 Object.defineProperty(this, '[[PromiseResult]]', config);
11144 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
11145 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
11146
11147 var promise = this;
11148 if (Type(promise) !== 'object') throw new TypeError();
11149 if (!('[[PromiseState]]' in promise)) throw TypeError();
11150 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
11151 if (!IsCallable(executor)) throw TypeError();
11152
11153 set_internal(promise, '[[PromiseConstructor]]', Promise);
11154
11155 return InitializePromise(promise, executor);
11156 }
11157
11158 // 25.4.3.1.1 InitializePromise ( promise, executor )
11159
11160 function InitializePromise(promise, executor) {
11161 console.assert('[[PromiseState]]' in promise);
11162 console.assert(IsCallable(executor));
11163 set_internal(promise, '[[PromiseState]]', 'pending');
11164 set_internal(promise, '[[PromiseFulfillReactions]]', []);
11165 set_internal(promise, '[[PromiseRejectReactions]]', []);
11166 var resolvingFunctions = CreateResolvingFunctions(promise);
11167 try {
11168 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
11169 resolvingFunctions['[[Reject]]']);
11170 } catch (completion) {
11171 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
11172 }
11173 return promise;
11174 }
11175
11176 // 25.4.4 Properties of the Promise Constructor
11177 // 25.4.4.1 Promise.all ( iterable )
11178
11179 define(Promise, 'all', function all(iterable) {
11180 var c = strict(this);
11181 var promiseCapability = NewPromiseCapability(c);
11182 try {
11183 var iterator = GetIterator(iterable);
11184 } catch (value) {
11185 promiseCapability['[[Reject]]'].call(undefined, value);
11186 return promiseCapability['[[Promise]]'];
11187 }
11188 var values = [];
11189 var remainingElementsCount = { value: 1 };
11190 var index = 0;
11191 while (true) {
11192 try {
11193 var next = IteratorStep(iterator);
11194 } catch (value) {
11195 promiseCapability['[[Reject]]'].call(undefined, value);
11196 return promiseCapability['[[Promise]]'];
11197 }
11198 if (!next) {
11199 remainingElementsCount.value -= 1;
11200 if (remainingElementsCount.value === 0) {
11201 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
11202
11203
11204 }
11205 return promiseCapability['[[Promise]]'];
11206 }
11207 try {
11208 var nextValue = IteratorValue(next);
11209 } catch (value) {
11210 promiseCapability['[[Reject]]'].call(undefined, value);
11211 return promiseCapability['[[Promise]]'];
11212 }
11213 try {
11214 var nextPromise = c.resolve(nextValue);
11215 } catch (value) {
11216 promiseCapability['[[Reject]]'].call(undefined, value);
11217 return promiseCapability['[[Promise]]'];
11218 }
11219 var resolveElement = PromiseAllResolveElementFunction();
11220 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
11221 set_internal(resolveElement, '[[Index]]', index);
11222 set_internal(resolveElement, '[[Values]]', values);
11223 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
11224 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
11225 remainingElementsCount.value += 1;
11226 try {
11227 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
11228 } catch (value) {
11229 promiseCapability['[[Reject]]'].call(undefined, value);
11230 return promiseCapability['[[Promise]]'];
11231 }
11232 index += 1;
11233 }
11234 });
11235
11236 // 25.4.4.1.1 Promise.all Resolve Element Functions
11237
11238 function PromiseAllResolveElementFunction() {
11239 var F = function(x) {
11240 var alreadyCalled = F['[[AlreadyCalled]]'];
11241 if (alreadyCalled.value) return undefined;
11242 alreadyCalled.value = true;
11243 var index = F['[[Index]]'];
11244 var values = F['[[Values]]'];
11245 var promiseCapability = F['[[Capabilities]]'];
11246 var remainingElementsCount = F['[[RemainingElements]]'];
11247 try {
11248 values[index] = x;
11249 } catch (result) {
11250 promiseCapability['[[Reject]]'].call(undefined, result);
11251 return promiseCapability['[[Promise]]'];
11252 }
11253 remainingElementsCount.value -= 1;
11254 if (remainingElementsCount.value === 0)
11255 return promiseCapability['[[Resolve]]'].call(undefined, values);
11256 return undefined;
11257 };
11258 return F;
11259 }
11260
11261 // 25.4.4.2 Promise.prototype
11262
11263 Promise.prototype = {};
11264
11265 // 25.4.4.3 Promise.race ( iterable )
11266
11267 define(Promise, 'race', function race(iterable) {
11268 var c = strict(this);
11269 var promiseCapability = NewPromiseCapability(c);
11270 try {
11271 var iterator = GetIterator(iterable);
11272 } catch (value) {
11273 promiseCapability['[[Reject]]'].call(undefined, value);
11274 return promiseCapability['[[Promise]]'];
11275 }
11276 while (true) {
11277 try {
11278 var next = IteratorStep(iterator);
11279 } catch (value) {
11280 promiseCapability['[[Reject]]'].call(undefined, value);
11281 return promiseCapability['[[Promise]]'];
11282 }
11283 if (!next) return promiseCapability['[[Promise]]'];
11284 try {
11285 var nextValue = IteratorValue(next);
11286 } catch (value) {
11287 promiseCapability['[[Reject]]'].call(undefined, value);
11288 return promiseCapability['[[Promise]]'];
11289 }
11290 try {
11291 var nextPromise = c.resolve(nextValue);
11292 } catch (value) {
11293 promiseCapability['[[Reject]]'].call(undefined, value);
11294 return promiseCapability['[[Promise]]'];
11295 }
11296 try {
11297 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
11298 } catch (value) {
11299 promiseCapability['[[Reject]]'].call(undefined, value);
11300 return promiseCapability['[[Promise]]'];
11301 }
11302 }
11303 });
11304
11305 // 25.4.4.4 Promise.reject ( r )
11306
11307 define(Promise, 'reject', function reject(r) {
11308 var c = strict(this);
11309 var promiseCapability = NewPromiseCapability(c);
11310 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
11311 return promiseCapability['[[Promise]]'];
11312 });
11313
11314 // 25.4.4.5 Promise.resolve ( x )
11315
11316 define(Promise, 'resolve', function resolve(x) {
11317 var c = strict(this);
11318 if (IsPromise(x)) {
11319 var constructor = x['[[PromiseConstructor]]'];
11320 if (SameValue(constructor, c)) return x;
11321 }
11322 var promiseCapability = NewPromiseCapability(c);
11323 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
11324 return promiseCapability['[[Promise]]'];
11325 });
11326
11327 // 25.4.4.6 Promise [ @@create ] ( )
11328 // 25.4.4.6.1 AllocatePromise ( constructor )
11329 // 25.4.5 Properties of the Promise Prototype Object
11330 // 25.4.5.1 Promise.prototype.catch ( onRejected )
11331
11332 define(Promise.prototype, 'catch', function catch_(onRejected) {
11333 var promise = this;
11334 return promise.then(undefined, onRejected);
11335 });
11336
11337 // 25.4.5.2 Promise.prototype.constructor
11338
11339 Promise.prototype.constructor = Promise;
11340
11341 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
11342
11343 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
11344 var promise = this;
11345 if (!IsPromise(promise)) throw TypeError();
11346 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
11347 if (!IsCallable(onRejected)) onRejected = 'Thrower';
11348 var c = promise.constructor;
11349 var promiseCapability = NewPromiseCapability(c);
11350 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
11351 '[[Handler]]': onFulfilled };
11352 var rejectReaction = { '[[Capabilities]]': promiseCapability,
11353 '[[Handler]]': onRejected };
11354 if (promise['[[PromiseState]]'] === 'pending') {
11355 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
11356 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
11357 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
11358 var value = promise['[[PromiseResult]]'];
11359 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
11360 } else if (promise['[[PromiseState]]'] === 'rejected') {
11361 var reason = promise['[[PromiseResult]]'];
11362 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
11363 }
11364 return promiseCapability['[[Promise]]'];
11365 });
11366
11367 // 25.4.6 Properties of Promise Instances
11368
11369 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
11370 global.Promise = Promise;
11371
11372 // Patch early Promise.cast vs. Promise.resolve implementations
11373 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
11374 }());
11375
11376 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
11377 define(Promise.prototype, $$toStringTag, 'Promise');
11378
11379 // ---------------------------------------
11380 // 26 Reflection
11381 // ---------------------------------------
11382
11383 (function() {
11384 // 26.1 The Reflect Object
11385 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
11386 global.Reflect = {};
11387
11388 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
11389 define(
11390 Reflect, 'apply',
11391 function apply(target, thisArgument, argumentsList) {
11392 if (!IsCallable(target)) throw TypeError();
11393 return Function.prototype.apply.call(target, thisArgument, argumentsList);
11394 });
11395
11396 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
11397 define(
11398 Reflect, 'construct',
11399 function construct(target, argumentsList) {
11400 return __cons(target, argumentsList);
11401 });
11402
11403 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
11404 define(
11405 Reflect, 'defineProperty',
11406 function defineProperty(target, propertyKey, attributes) {
11407 try {
11408 Object.defineProperty(target, propertyKey, attributes);
11409 return true;
11410 } catch (_) {
11411 return false;
11412 }
11413 });
11414
11415 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
11416 define(
11417 Reflect, 'deleteProperty',
11418 function deleteProperty(target,name) {
11419 try {
11420 delete target[name];
11421 return !HasOwnProperty(target, name);
11422 } catch (_) {
11423 return false;
11424 }
11425 });
11426
11427 // 26.1.5 Reflect.enumerate ( target )
11428 define(
11429 Reflect, 'enumerate',
11430 function enumerate(target) {
11431 target = ToObject(target);
11432 var iterator = Enumerate(target);
11433 return iterator;
11434 });
11435
11436 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
11437 define(
11438 Reflect, 'get',
11439 function get(target, name, receiver) {
11440 target = ToObject(target);
11441 name = String(name);
11442 receiver = (receiver === undefined) ? target : ToObject(receiver);
11443 var desc = getPropertyDescriptor(target, name);
11444 if (desc && 'get' in desc)
11445 return Function.prototype.call.call(desc['get'], receiver);
11446 return target[name];
11447 });
11448
11449 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
11450 define(
11451 Reflect, 'getOwnPropertyDescriptor',
11452 Object.getOwnPropertyDescriptor);
11453
11454 // 26.1.8 Reflect.getPrototypeOf ( target )
11455 define(
11456 Reflect, 'getPrototypeOf',
11457 Object.getPrototypeOf);
11458
11459 // 26.1.9 Reflect.has ( target, propertyKey )
11460 define(
11461 Reflect, 'has',
11462 function has(target,name) {
11463 return String(name) in ToObject(target);
11464 });
11465
11466 // 26.1.10 Reflect.isExtensible (target)
11467 define(
11468 Reflect, 'isExtensible',
11469 Object.isExtensible);
11470
11471 // 26.1.11 Reflect.ownKeys ( target )
11472 define(
11473 Reflect, 'ownKeys',
11474 function ownKeys(target) {
11475 var obj = ToObject(target);
11476 return Object.getOwnPropertyNames(obj);
11477 });
11478
11479 // 26.1.12 Reflect.preventExtensions ( target )
11480 define(
11481 Reflect, 'preventExtensions',
11482 function preventExtensions(target) {
11483 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
11484 });
11485
11486 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
11487 define(
11488 Reflect, 'set',
11489 function set(target, name, value, receiver) {
11490 target = ToObject(target);
11491 name = String(name);
11492 receiver = (receiver === undefined) ? target : ToObject(receiver);
11493 var desc = getPropertyDescriptor(target, name);
11494 try {
11495 if (desc && 'set' in desc)
11496 Function.prototype.call.call(desc['set'], receiver, value);
11497 else
11498 target[name] = value;
11499 return true;
11500 } catch (_) {
11501 return false;
11502 }
11503 });
11504
11505 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
11506 define(
11507 Reflect, 'setPrototypeOf',
11508 function setPrototypeOf(target, proto) {
11509 try {
11510 target.__proto__ = proto;
11511 return Reflect.getPrototypeOf(target) === proto;
11512 } catch(_) {
11513 return false;
11514 }
11515 });
11516
11517 }());
11518
11519 // ---------------------------------------
11520 // 26.2 Proxy Objects
11521 // ---------------------------------------
11522
11523 // Not polyfillable.
11524
11525 }(self));
11526
11527 // This helper is defined outside the main scope so that the use of
11528 // 'eval' does not taint the scope for minifiers.
11529 function __cons(t, a) {
11530 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
11531 }
11532 </script>
11533 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.foo = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
11534 'use strict'
11535
11536 exports.byteLength = byteLength
11537 exports.toByteArray = toByteArray
11538 exports.fromByteArray = fromByteArray
11539
11540 var lookup = []
11541 var revLookup = []
11542 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
11543
11544 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
11545 for (var i = 0, len = code.length; i < len; ++i) {
11546 lookup[i] = code[i]
11547 revLookup[code.charCodeAt(i)] = i
11548 }
11549
11550 revLookup['-'.charCodeAt(0)] = 62
11551 revLookup['_'.charCodeAt(0)] = 63
11552
11553 function placeHoldersCount (b64) {
11554 var len = b64.length
11555 if (len % 4 > 0) {
11556 throw new Error('Invalid string. Length must be a multiple of 4')
11557 }
11558
11559 // the number of equal signs (place holders)
11560 // if there are two placeholders, than the two characters before it
11561 // represent one byte
11562 // if there is only one, then the three characters before it represent 2 bytes
11563 // this is just a cheap hack to not do indexOf twice
11564 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
11565 }
11566
11567 function byteLength (b64) {
11568 // base64 is 4/3 + up to two characters of the original data
11569 return b64.length * 3 / 4 - placeHoldersCount(b64)
11570 }
11571
11572 function toByteArray (b64) {
11573 var i, j, l, tmp, placeHolders, arr
11574 var len = b64.length
11575 placeHolders = placeHoldersCount(b64)
11576
11577 arr = new Arr(len * 3 / 4 - placeHolders)
11578
11579 // if there are placeholders, only get up to the last complete 4 chars
11580 l = placeHolders > 0 ? len - 4 : len
11581
11582 var L = 0
11583
11584 for (i = 0, j = 0; i < l; i += 4, j += 3) {
11585 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
11586 arr[L++] = (tmp >> 16) & 0xFF
11587 arr[L++] = (tmp >> 8) & 0xFF
11588 arr[L++] = tmp & 0xFF
11589 }
11590
11591 if (placeHolders === 2) {
11592 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
11593 arr[L++] = tmp & 0xFF
11594 } else if (placeHolders === 1) {
11595 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
11596 arr[L++] = (tmp >> 8) & 0xFF
11597 arr[L++] = tmp & 0xFF
11598 }
11599
11600 return arr
11601 }
11602
11603 function tripletToBase64 (num) {
11604 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
11605 }
11606
11607 function encodeChunk (uint8, start, end) {
11608 var tmp
11609 var output = []
11610 for (var i = start; i < end; i += 3) {
11611 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
11612 output.push(tripletToBase64(tmp))
11613 }
11614 return output.join('')
11615 }
11616
11617 function fromByteArray (uint8) {
11618 var tmp
11619 var len = uint8.length
11620 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
11621 var output = ''
11622 var parts = []
11623 var maxChunkLength = 16383 // must be multiple of 3
11624
11625 // go through the array every three bytes, we'll deal with trailing stuff later
11626 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
11627 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
11628 }
11629
11630 // pad the end with zeros, but make sure to not forget the extra bytes
11631 if (extraBytes === 1) {
11632 tmp = uint8[len - 1]
11633 output += lookup[tmp >> 2]
11634 output += lookup[(tmp << 4) & 0x3F]
11635 output += '=='
11636 } else if (extraBytes === 2) {
11637 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
11638 output += lookup[tmp >> 10]
11639 output += lookup[(tmp >> 4) & 0x3F]
11640 output += lookup[(tmp << 2) & 0x3F]
11641 output += '='
11642 }
11643
11644 parts.push(output)
11645
11646 return parts.join('')
11647 }
11648
11649 },{}],2:[function(require,module,exports){
11650 /*!
11651 * The buffer module from node.js, for the browser.
11652 *
11653 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
11654 * @license MIT
11655 */
11656 /* eslint-disable no-proto */
11657
11658 'use strict'
11659
11660 var base64 = require('base64-js')
11661 var ieee754 = require('ieee754')
11662
11663 exports.Buffer = Buffer
11664 exports.SlowBuffer = SlowBuffer
11665 exports.INSPECT_MAX_BYTES = 50
11666
11667 var K_MAX_LENGTH = 0x7fffffff
11668 exports.kMaxLength = K_MAX_LENGTH
11669
11670 /**
11671 * If `Buffer.TYPED_ARRAY_SUPPORT`:
11672 * === true Use Uint8Array implementation (fastest)
11673 * === false Print warning and recommend using `buffer` v4.x which has an Object
11674 * implementation (most compatible, even IE6)
11675 *
11676 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
11677 * Opera 11.6+, iOS 4.2+.
11678 *
11679 * We report that the browser does not support typed arrays if the are not subclassable
11680 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
11681 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
11682 * for __proto__ and has a buggy typed array implementation.
11683 */
11684 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
11685
11686 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
11687 typeof console.error === 'function') {
11688 console.error(
11689 'This browser lacks typed array (Uint8Array) support which is required by ' +
11690 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
11691 )
11692 }
11693
11694 function typedArraySupport () {
11695 // Can typed array instances can be augmented?
11696 try {
11697 var arr = new Uint8Array(1)
11698 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
11699 return arr.foo() === 42
11700 } catch (e) {
11701 return false
11702 }
11703 }
11704
11705 function createBuffer (length) {
11706 if (length > K_MAX_LENGTH) {
11707 throw new RangeError('Invalid typed array length')
11708 }
11709 // Return an augmented `Uint8Array` instance
11710 var buf = new Uint8Array(length)
11711 buf.__proto__ = Buffer.prototype
11712 return buf
11713 }
11714
11715 /**
11716 * The Buffer constructor returns instances of `Uint8Array` that have their
11717 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
11718 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
11719 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
11720 * returns a single octet.
11721 *
11722 * The `Uint8Array` prototype remains unmodified.
11723 */
11724
11725 function Buffer (arg, encodingOrOffset, length) {
11726 // Common case.
11727 if (typeof arg === 'number') {
11728 if (typeof encodingOrOffset === 'string') {
11729 throw new Error(
11730 'If encoding is specified then the first argument must be a string'
11731 )
11732 }
11733 return allocUnsafe(arg)
11734 }
11735 return from(arg, encodingOrOffset, length)
11736 }
11737
11738 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
11739 if (typeof Symbol !== 'undefined' && Symbol.species &&
11740 Buffer[Symbol.species] === Buffer) {
11741 Object.defineProperty(Buffer, Symbol.species, {
11742 value: null,
11743 configurable: true,
11744 enumerable: false,
11745 writable: false
11746 })
11747 }
11748
11749 Buffer.poolSize = 8192 // not used by this implementation
11750
11751 function from (value, encodingOrOffset, length) {
11752 if (typeof value === 'number') {
11753 throw new TypeError('"value" argument must not be a number')
11754 }
11755
11756 if (value instanceof ArrayBuffer) {
11757 return fromArrayBuffer(value, encodingOrOffset, length)
11758 }
11759
11760 if (typeof value === 'string') {
11761 return fromString(value, encodingOrOffset)
11762 }
11763
11764 return fromObject(value)
11765 }
11766
11767 /**
11768 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
11769 * if value is a number.
11770 * Buffer.from(str[, encoding])
11771 * Buffer.from(array)
11772 * Buffer.from(buffer)
11773 * Buffer.from(arrayBuffer[, byteOffset[, length]])
11774 **/
11775 Buffer.from = function (value, encodingOrOffset, length) {
11776 return from(value, encodingOrOffset, length)
11777 }
11778
11779 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
11780 // https://github.com/feross/buffer/pull/148
11781 Buffer.prototype.__proto__ = Uint8Array.prototype
11782 Buffer.__proto__ = Uint8Array
11783
11784 function assertSize (size) {
11785 if (typeof size !== 'number') {
11786 throw new TypeError('"size" argument must be a number')
11787 } else if (size < 0) {
11788 throw new RangeError('"size" argument must not be negative')
11789 }
11790 }
11791
11792 function alloc (size, fill, encoding) {
11793 assertSize(size)
11794 if (size <= 0) {
11795 return createBuffer(size)
11796 }
11797 if (fill !== undefined) {
11798 // Only pay attention to encoding if it's a string. This
11799 // prevents accidentally sending in a number that would
11800 // be interpretted as a start offset.
11801 return typeof encoding === 'string'
11802 ? createBuffer(size).fill(fill, encoding)
11803 : createBuffer(size).fill(fill)
11804 }
11805 return createBuffer(size)
11806 }
11807
11808 /**
11809 * Creates a new filled Buffer instance.
11810 * alloc(size[, fill[, encoding]])
11811 **/
11812 Buffer.alloc = function (size, fill, encoding) {
11813 return alloc(size, fill, encoding)
11814 }
11815
11816 function allocUnsafe (size) {
11817 assertSize(size)
11818 return createBuffer(size < 0 ? 0 : checked(size) | 0)
11819 }
11820
11821 /**
11822 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
11823 * */
11824 Buffer.allocUnsafe = function (size) {
11825 return allocUnsafe(size)
11826 }
11827 /**
11828 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
11829 */
11830 Buffer.allocUnsafeSlow = function (size) {
11831 return allocUnsafe(size)
11832 }
11833
11834 function fromString (string, encoding) {
11835 if (typeof encoding !== 'string' || encoding === '') {
11836 encoding = 'utf8'
11837 }
11838
11839 if (!Buffer.isEncoding(encoding)) {
11840 throw new TypeError('"encoding" must be a valid string encoding')
11841 }
11842
11843 var length = byteLength(string, encoding) | 0
11844 var buf = createBuffer(length)
11845
11846 var actual = buf.write(string, encoding)
11847
11848 if (actual !== length) {
11849 // Writing a hex string, for example, that contains invalid characters will
11850 // cause everything after the first invalid character to be ignored. (e.g.
11851 // 'abxxcd' will be treated as 'ab')
11852 buf = buf.slice(0, actual)
11853 }
11854
11855 return buf
11856 }
11857
11858 function fromArrayLike (array) {
11859 var length = array.length < 0 ? 0 : checked(array.length) | 0
11860 var buf = createBuffer(length)
11861 for (var i = 0; i < length; i += 1) {
11862 buf[i] = array[i] & 255
11863 }
11864 return buf
11865 }
11866
11867 function fromArrayBuffer (array, byteOffset, length) {
11868 if (byteOffset < 0 || array.byteLength < byteOffset) {
11869 throw new RangeError('\'offset\' is out of bounds')
11870 }
11871
11872 if (array.byteLength < byteOffset + (length || 0)) {
11873 throw new RangeError('\'length\' is out of bounds')
11874 }
11875
11876 var buf
11877 if (byteOffset === undefined && length === undefined) {
11878 buf = new Uint8Array(array)
11879 } else if (length === undefined) {
11880 buf = new Uint8Array(array, byteOffset)
11881 } else {
11882 buf = new Uint8Array(array, byteOffset, length)
11883 }
11884
11885 // Return an augmented `Uint8Array` instance
11886 buf.__proto__ = Buffer.prototype
11887 return buf
11888 }
11889
11890 function fromObject (obj) {
11891 if (Buffer.isBuffer(obj)) {
11892 var len = checked(obj.length) | 0
11893 var buf = createBuffer(len)
11894
11895 if (buf.length === 0) {
11896 return buf
11897 }
11898
11899 obj.copy(buf, 0, 0, len)
11900 return buf
11901 }
11902
11903 if (obj) {
11904 if (isArrayBufferView(obj) || 'length' in obj) {
11905 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
11906 return createBuffer(0)
11907 }
11908 return fromArrayLike(obj)
11909 }
11910
11911 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
11912 return fromArrayLike(obj.data)
11913 }
11914 }
11915
11916 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
11917 }
11918
11919 function checked (length) {
11920 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
11921 // length is NaN (which is otherwise coerced to zero.)
11922 if (length >= K_MAX_LENGTH) {
11923 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
11924 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
11925 }
11926 return length | 0
11927 }
11928
11929 function SlowBuffer (length) {
11930 if (+length != length) { // eslint-disable-line eqeqeq
11931 length = 0
11932 }
11933 return Buffer.alloc(+length)
11934 }
11935
11936 Buffer.isBuffer = function isBuffer (b) {
11937 return b != null && b._isBuffer === true
11938 }
11939
11940 Buffer.compare = function compare (a, b) {
11941 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
11942 throw new TypeError('Arguments must be Buffers')
11943 }
11944
11945 if (a === b) return 0
11946
11947 var x = a.length
11948 var y = b.length
11949
11950 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
11951 if (a[i] !== b[i]) {
11952 x = a[i]
11953 y = b[i]
11954 break
11955 }
11956 }
11957
11958 if (x < y) return -1
11959 if (y < x) return 1
11960 return 0
11961 }
11962
11963 Buffer.isEncoding = function isEncoding (encoding) {
11964 switch (String(encoding).toLowerCase()) {
11965 case 'hex':
11966 case 'utf8':
11967 case 'utf-8':
11968 case 'ascii':
11969 case 'latin1':
11970 case 'binary':
11971 case 'base64':
11972 case 'ucs2':
11973 case 'ucs-2':
11974 case 'utf16le':
11975 case 'utf-16le':
11976 return true
11977 default:
11978 return false
11979 }
11980 }
11981
11982 Buffer.concat = function concat (list, length) {
11983 if (!Array.isArray(list)) {
11984 throw new TypeError('"list" argument must be an Array of Buffers')
11985 }
11986
11987 if (list.length === 0) {
11988 return Buffer.alloc(0)
11989 }
11990
11991 var i
11992 if (length === undefined) {
11993 length = 0
11994 for (i = 0; i < list.length; ++i) {
11995 length += list[i].length
11996 }
11997 }
11998
11999 var buffer = Buffer.allocUnsafe(length)
12000 var pos = 0
12001 for (i = 0; i < list.length; ++i) {
12002 var buf = list[i]
12003 if (!Buffer.isBuffer(buf)) {
12004 throw new TypeError('"list" argument must be an Array of Buffers')
12005 }
12006 buf.copy(buffer, pos)
12007 pos += buf.length
12008 }
12009 return buffer
12010 }
12011
12012 function byteLength (string, encoding) {
12013 if (Buffer.isBuffer(string)) {
12014 return string.length
12015 }
12016 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
12017 return string.byteLength
12018 }
12019 if (typeof string !== 'string') {
12020 string = '' + string
12021 }
12022
12023 var len = string.length
12024 if (len === 0) return 0
12025
12026 // Use a for loop to avoid recursion
12027 var loweredCase = false
12028 for (;;) {
12029 switch (encoding) {
12030 case 'ascii':
12031 case 'latin1':
12032 case 'binary':
12033 return len
12034 case 'utf8':
12035 case 'utf-8':
12036 case undefined:
12037 return utf8ToBytes(string).length
12038 case 'ucs2':
12039 case 'ucs-2':
12040 case 'utf16le':
12041 case 'utf-16le':
12042 return len * 2
12043 case 'hex':
12044 return len >>> 1
12045 case 'base64':
12046 return base64ToBytes(string).length
12047 default:
12048 if (loweredCase) return utf8ToBytes(string).length // assume utf8
12049 encoding = ('' + encoding).toLowerCase()
12050 loweredCase = true
12051 }
12052 }
12053 }
12054 Buffer.byteLength = byteLength
12055
12056 function slowToString (encoding, start, end) {
12057 var loweredCase = false
12058
12059 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
12060 // property of a typed array.
12061
12062 // This behaves neither like String nor Uint8Array in that we set start/end
12063 // to their upper/lower bounds if the value passed is out of range.
12064 // undefined is handled specially as per ECMA-262 6th Edition,
12065 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
12066 if (start === undefined || start < 0) {
12067 start = 0
12068 }
12069 // Return early if start > this.length. Done here to prevent potential uint32
12070 // coercion fail below.
12071 if (start > this.length) {
12072 return ''
12073 }
12074
12075 if (end === undefined || end > this.length) {
12076 end = this.length
12077 }
12078
12079 if (end <= 0) {
12080 return ''
12081 }
12082
12083 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
12084 end >>>= 0
12085 start >>>= 0
12086
12087 if (end <= start) {
12088 return ''
12089 }
12090
12091 if (!encoding) encoding = 'utf8'
12092
12093 while (true) {
12094 switch (encoding) {
12095 case 'hex':
12096 return hexSlice(this, start, end)
12097
12098 case 'utf8':
12099 case 'utf-8':
12100 return utf8Slice(this, start, end)
12101
12102 case 'ascii':
12103 return asciiSlice(this, start, end)
12104
12105 case 'latin1':
12106 case 'binary':
12107 return latin1Slice(this, start, end)
12108
12109 case 'base64':
12110 return base64Slice(this, start, end)
12111
12112 case 'ucs2':
12113 case 'ucs-2':
12114 case 'utf16le':
12115 case 'utf-16le':
12116 return utf16leSlice(this, start, end)
12117
12118 default:
12119 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
12120 encoding = (encoding + '').toLowerCase()
12121 loweredCase = true
12122 }
12123 }
12124 }
12125
12126 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
12127 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
12128 // reliably in a browserify context because there could be multiple different
12129 // copies of the 'buffer' package in use. This method works even for Buffer
12130 // instances that were created from another copy of the `buffer` package.
12131 // See: https://github.com/feross/buffer/issues/154
12132 Buffer.prototype._isBuffer = true
12133
12134 function swap (b, n, m) {
12135 var i = b[n]
12136 b[n] = b[m]
12137 b[m] = i
12138 }
12139
12140 Buffer.prototype.swap16 = function swap16 () {
12141 var len = this.length
12142 if (len % 2 !== 0) {
12143 throw new RangeError('Buffer size must be a multiple of 16-bits')
12144 }
12145 for (var i = 0; i < len; i += 2) {
12146 swap(this, i, i + 1)
12147 }
12148 return this
12149 }
12150
12151 Buffer.prototype.swap32 = function swap32 () {
12152 var len = this.length
12153 if (len % 4 !== 0) {
12154 throw new RangeError('Buffer size must be a multiple of 32-bits')
12155 }
12156 for (var i = 0; i < len; i += 4) {
12157 swap(this, i, i + 3)
12158 swap(this, i + 1, i + 2)
12159 }
12160 return this
12161 }
12162
12163 Buffer.prototype.swap64 = function swap64 () {
12164 var len = this.length
12165 if (len % 8 !== 0) {
12166 throw new RangeError('Buffer size must be a multiple of 64-bits')
12167 }
12168 for (var i = 0; i < len; i += 8) {
12169 swap(this, i, i + 7)
12170 swap(this, i + 1, i + 6)
12171 swap(this, i + 2, i + 5)
12172 swap(this, i + 3, i + 4)
12173 }
12174 return this
12175 }
12176
12177 Buffer.prototype.toString = function toString () {
12178 var length = this.length
12179 if (length === 0) return ''
12180 if (arguments.length === 0) return utf8Slice(this, 0, length)
12181 return slowToString.apply(this, arguments)
12182 }
12183
12184 Buffer.prototype.equals = function equals (b) {
12185 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
12186 if (this === b) return true
12187 return Buffer.compare(this, b) === 0
12188 }
12189
12190 Buffer.prototype.inspect = function inspect () {
12191 var str = ''
12192 var max = exports.INSPECT_MAX_BYTES
12193 if (this.length > 0) {
12194 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
12195 if (this.length > max) str += ' ... '
12196 }
12197 return '<Buffer ' + str + '>'
12198 }
12199
12200 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
12201 if (!Buffer.isBuffer(target)) {
12202 throw new TypeError('Argument must be a Buffer')
12203 }
12204
12205 if (start === undefined) {
12206 start = 0
12207 }
12208 if (end === undefined) {
12209 end = target ? target.length : 0
12210 }
12211 if (thisStart === undefined) {
12212 thisStart = 0
12213 }
12214 if (thisEnd === undefined) {
12215 thisEnd = this.length
12216 }
12217
12218 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
12219 throw new RangeError('out of range index')
12220 }
12221
12222 if (thisStart >= thisEnd && start >= end) {
12223 return 0
12224 }
12225 if (thisStart >= thisEnd) {
12226 return -1
12227 }
12228 if (start >= end) {
12229 return 1
12230 }
12231
12232 start >>>= 0
12233 end >>>= 0
12234 thisStart >>>= 0
12235 thisEnd >>>= 0
12236
12237 if (this === target) return 0
12238
12239 var x = thisEnd - thisStart
12240 var y = end - start
12241 var len = Math.min(x, y)
12242
12243 var thisCopy = this.slice(thisStart, thisEnd)
12244 var targetCopy = target.slice(start, end)
12245
12246 for (var i = 0; i < len; ++i) {
12247 if (thisCopy[i] !== targetCopy[i]) {
12248 x = thisCopy[i]
12249 y = targetCopy[i]
12250 break
12251 }
12252 }
12253
12254 if (x < y) return -1
12255 if (y < x) return 1
12256 return 0
12257 }
12258
12259 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
12260 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
12261 //
12262 // Arguments:
12263 // - buffer - a Buffer to search
12264 // - val - a string, Buffer, or number
12265 // - byteOffset - an index into `buffer`; will be clamped to an int32
12266 // - encoding - an optional encoding, relevant is val is a string
12267 // - dir - true for indexOf, false for lastIndexOf
12268 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
12269 // Empty buffer means no match
12270 if (buffer.length === 0) return -1
12271
12272 // Normalize byteOffset
12273 if (typeof byteOffset === 'string') {
12274 encoding = byteOffset
12275 byteOffset = 0
12276 } else if (byteOffset > 0x7fffffff) {
12277 byteOffset = 0x7fffffff
12278 } else if (byteOffset < -0x80000000) {
12279 byteOffset = -0x80000000
12280 }
12281 byteOffset = +byteOffset // Coerce to Number.
12282 if (numberIsNaN(byteOffset)) {
12283 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
12284 byteOffset = dir ? 0 : (buffer.length - 1)
12285 }
12286
12287 // Normalize byteOffset: negative offsets start from the end of the buffer
12288 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
12289 if (byteOffset >= buffer.length) {
12290 if (dir) return -1
12291 else byteOffset = buffer.length - 1
12292 } else if (byteOffset < 0) {
12293 if (dir) byteOffset = 0
12294 else return -1
12295 }
12296
12297 // Normalize val
12298 if (typeof val === 'string') {
12299 val = Buffer.from(val, encoding)
12300 }
12301
12302 // Finally, search either indexOf (if dir is true) or lastIndexOf
12303 if (Buffer.isBuffer(val)) {
12304 // Special case: looking for empty string/buffer always fails
12305 if (val.length === 0) {
12306 return -1
12307 }
12308 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
12309 } else if (typeof val === 'number') {
12310 val = val & 0xFF // Search for a byte value [0-255]
12311 if (typeof Uint8Array.prototype.indexOf === 'function') {
12312 if (dir) {
12313 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
12314 } else {
12315 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
12316 }
12317 }
12318 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
12319 }
12320
12321 throw new TypeError('val must be string, number or Buffer')
12322 }
12323
12324 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
12325 var indexSize = 1
12326 var arrLength = arr.length
12327 var valLength = val.length
12328
12329 if (encoding !== undefined) {
12330 encoding = String(encoding).toLowerCase()
12331 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
12332 encoding === 'utf16le' || encoding === 'utf-16le') {
12333 if (arr.length < 2 || val.length < 2) {
12334 return -1
12335 }
12336 indexSize = 2
12337 arrLength /= 2
12338 valLength /= 2
12339 byteOffset /= 2
12340 }
12341 }
12342
12343 function read (buf, i) {
12344 if (indexSize === 1) {
12345 return buf[i]
12346 } else {
12347 return buf.readUInt16BE(i * indexSize)
12348 }
12349 }
12350
12351 var i
12352 if (dir) {
12353 var foundIndex = -1
12354 for (i = byteOffset; i < arrLength; i++) {
12355 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
12356 if (foundIndex === -1) foundIndex = i
12357 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
12358 } else {
12359 if (foundIndex !== -1) i -= i - foundIndex
12360 foundIndex = -1
12361 }
12362 }
12363 } else {
12364 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
12365 for (i = byteOffset; i >= 0; i--) {
12366 var found = true
12367 for (var j = 0; j < valLength; j++) {
12368 if (read(arr, i + j) !== read(val, j)) {
12369 found = false
12370 break
12371 }
12372 }
12373 if (found) return i
12374 }
12375 }
12376
12377 return -1
12378 }
12379
12380 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
12381 return this.indexOf(val, byteOffset, encoding) !== -1
12382 }
12383
12384 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
12385 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
12386 }
12387
12388 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
12389 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
12390 }
12391
12392 function hexWrite (buf, string, offset, length) {
12393 offset = Number(offset) || 0
12394 var remaining = buf.length - offset
12395 if (!length) {
12396 length = remaining
12397 } else {
12398 length = Number(length)
12399 if (length > remaining) {
12400 length = remaining
12401 }
12402 }
12403
12404 // must be an even number of digits
12405 var strLen = string.length
12406 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
12407
12408 if (length > strLen / 2) {
12409 length = strLen / 2
12410 }
12411 for (var i = 0; i < length; ++i) {
12412 var parsed = parseInt(string.substr(i * 2, 2), 16)
12413 if (numberIsNaN(parsed)) return i
12414 buf[offset + i] = parsed
12415 }
12416 return i
12417 }
12418
12419 function utf8Write (buf, string, offset, length) {
12420 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
12421 }
12422
12423 function asciiWrite (buf, string, offset, length) {
12424 return blitBuffer(asciiToBytes(string), buf, offset, length)
12425 }
12426
12427 function latin1Write (buf, string, offset, length) {
12428 return asciiWrite(buf, string, offset, length)
12429 }
12430
12431 function base64Write (buf, string, offset, length) {
12432 return blitBuffer(base64ToBytes(string), buf, offset, length)
12433 }
12434
12435 function ucs2Write (buf, string, offset, length) {
12436 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
12437 }
12438
12439 Buffer.prototype.write = function write (string, offset, length, encoding) {
12440 // Buffer#write(string)
12441 if (offset === undefined) {
12442 encoding = 'utf8'
12443 length = this.length
12444 offset = 0
12445 // Buffer#write(string, encoding)
12446 } else if (length === undefined && typeof offset === 'string') {
12447 encoding = offset
12448 length = this.length
12449 offset = 0
12450 // Buffer#write(string, offset[, length][, encoding])
12451 } else if (isFinite(offset)) {
12452 offset = offset >>> 0
12453 if (isFinite(length)) {
12454 length = length >>> 0
12455 if (encoding === undefined) encoding = 'utf8'
12456 } else {
12457 encoding = length
12458 length = undefined
12459 }
12460 } else {
12461 throw new Error(
12462 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
12463 )
12464 }
12465
12466 var remaining = this.length - offset
12467 if (length === undefined || length > remaining) length = remaining
12468
12469 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
12470 throw new RangeError('Attempt to write outside buffer bounds')
12471 }
12472
12473 if (!encoding) encoding = 'utf8'
12474
12475 var loweredCase = false
12476 for (;;) {
12477 switch (encoding) {
12478 case 'hex':
12479 return hexWrite(this, string, offset, length)
12480
12481 case 'utf8':
12482 case 'utf-8':
12483 return utf8Write(this, string, offset, length)
12484
12485 case 'ascii':
12486 return asciiWrite(this, string, offset, length)
12487
12488 case 'latin1':
12489 case 'binary':
12490 return latin1Write(this, string, offset, length)
12491
12492 case 'base64':
12493 // Warning: maxLength not taken into account in base64Write
12494 return base64Write(this, string, offset, length)
12495
12496 case 'ucs2':
12497 case 'ucs-2':
12498 case 'utf16le':
12499 case 'utf-16le':
12500 return ucs2Write(this, string, offset, length)
12501
12502 default:
12503 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
12504 encoding = ('' + encoding).toLowerCase()
12505 loweredCase = true
12506 }
12507 }
12508 }
12509
12510 Buffer.prototype.toJSON = function toJSON () {
12511 return {
12512 type: 'Buffer',
12513 data: Array.prototype.slice.call(this._arr || this, 0)
12514 }
12515 }
12516
12517 function base64Slice (buf, start, end) {
12518 if (start === 0 && end === buf.length) {
12519 return base64.fromByteArray(buf)
12520 } else {
12521 return base64.fromByteArray(buf.slice(start, end))
12522 }
12523 }
12524
12525 function utf8Slice (buf, start, end) {
12526 end = Math.min(buf.length, end)
12527 var res = []
12528
12529 var i = start
12530 while (i < end) {
12531 var firstByte = buf[i]
12532 var codePoint = null
12533 var bytesPerSequence = (firstByte > 0xEF) ? 4
12534 : (firstByte > 0xDF) ? 3
12535 : (firstByte > 0xBF) ? 2
12536 : 1
12537
12538 if (i + bytesPerSequence <= end) {
12539 var secondByte, thirdByte, fourthByte, tempCodePoint
12540
12541 switch (bytesPerSequence) {
12542 case 1:
12543 if (firstByte < 0x80) {
12544 codePoint = firstByte
12545 }
12546 break
12547 case 2:
12548 secondByte = buf[i + 1]
12549 if ((secondByte & 0xC0) === 0x80) {
12550 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
12551 if (tempCodePoint > 0x7F) {
12552 codePoint = tempCodePoint
12553 }
12554 }
12555 break
12556 case 3:
12557 secondByte = buf[i + 1]
12558 thirdByte = buf[i + 2]
12559 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
12560 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
12561 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
12562 codePoint = tempCodePoint
12563 }
12564 }
12565 break
12566 case 4:
12567 secondByte = buf[i + 1]
12568 thirdByte = buf[i + 2]
12569 fourthByte = buf[i + 3]
12570 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
12571 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
12572 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
12573 codePoint = tempCodePoint
12574 }
12575 }
12576 }
12577 }
12578
12579 if (codePoint === null) {
12580 // we did not generate a valid codePoint so insert a
12581 // replacement char (U+FFFD) and advance only 1 byte
12582 codePoint = 0xFFFD
12583 bytesPerSequence = 1
12584 } else if (codePoint > 0xFFFF) {
12585 // encode to utf16 (surrogate pair dance)
12586 codePoint -= 0x10000
12587 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
12588 codePoint = 0xDC00 | codePoint & 0x3FF
12589 }
12590
12591 res.push(codePoint)
12592 i += bytesPerSequence
12593 }
12594
12595 return decodeCodePointsArray(res)
12596 }
12597
12598 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
12599 // the lowest limit is Chrome, with 0x10000 args.
12600 // We go 1 magnitude less, for safety
12601 var MAX_ARGUMENTS_LENGTH = 0x1000
12602
12603 function decodeCodePointsArray (codePoints) {
12604 var len = codePoints.length
12605 if (len <= MAX_ARGUMENTS_LENGTH) {
12606 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
12607 }
12608
12609 // Decode in chunks to avoid "call stack size exceeded".
12610 var res = ''
12611 var i = 0
12612 while (i < len) {
12613 res += String.fromCharCode.apply(
12614 String,
12615 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
12616 )
12617 }
12618 return res
12619 }
12620
12621 function asciiSlice (buf, start, end) {
12622 var ret = ''
12623 end = Math.min(buf.length, end)
12624
12625 for (var i = start; i < end; ++i) {
12626 ret += String.fromCharCode(buf[i] & 0x7F)
12627 }
12628 return ret
12629 }
12630
12631 function latin1Slice (buf, start, end) {
12632 var ret = ''
12633 end = Math.min(buf.length, end)
12634
12635 for (var i = start; i < end; ++i) {
12636 ret += String.fromCharCode(buf[i])
12637 }
12638 return ret
12639 }
12640
12641 function hexSlice (buf, start, end) {
12642 var len = buf.length
12643
12644 if (!start || start < 0) start = 0
12645 if (!end || end < 0 || end > len) end = len
12646
12647 var out = ''
12648 for (var i = start; i < end; ++i) {
12649 out += toHex(buf[i])
12650 }
12651 return out
12652 }
12653
12654 function utf16leSlice (buf, start, end) {
12655 var bytes = buf.slice(start, end)
12656 var res = ''
12657 for (var i = 0; i < bytes.length; i += 2) {
12658 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
12659 }
12660 return res
12661 }
12662
12663 Buffer.prototype.slice = function slice (start, end) {
12664 var len = this.length
12665 start = ~~start
12666 end = end === undefined ? len : ~~end
12667
12668 if (start < 0) {
12669 start += len
12670 if (start < 0) start = 0
12671 } else if (start > len) {
12672 start = len
12673 }
12674
12675 if (end < 0) {
12676 end += len
12677 if (end < 0) end = 0
12678 } else if (end > len) {
12679 end = len
12680 }
12681
12682 if (end < start) end = start
12683
12684 var newBuf = this.subarray(start, end)
12685 // Return an augmented `Uint8Array` instance
12686 newBuf.__proto__ = Buffer.prototype
12687 return newBuf
12688 }
12689
12690 /*
12691 * Need to make sure that buffer isn't trying to write out of bounds.
12692 */
12693 function checkOffset (offset, ext, length) {
12694 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
12695 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
12696 }
12697
12698 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
12699 offset = offset >>> 0
12700 byteLength = byteLength >>> 0
12701 if (!noAssert) checkOffset(offset, byteLength, this.length)
12702
12703 var val = this[offset]
12704 var mul = 1
12705 var i = 0
12706 while (++i < byteLength && (mul *= 0x100)) {
12707 val += this[offset + i] * mul
12708 }
12709
12710 return val
12711 }
12712
12713 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
12714 offset = offset >>> 0
12715 byteLength = byteLength >>> 0
12716 if (!noAssert) {
12717 checkOffset(offset, byteLength, this.length)
12718 }
12719
12720 var val = this[offset + --byteLength]
12721 var mul = 1
12722 while (byteLength > 0 && (mul *= 0x100)) {
12723 val += this[offset + --byteLength] * mul
12724 }
12725
12726 return val
12727 }
12728
12729 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
12730 offset = offset >>> 0
12731 if (!noAssert) checkOffset(offset, 1, this.length)
12732 return this[offset]
12733 }
12734
12735 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
12736 offset = offset >>> 0
12737 if (!noAssert) checkOffset(offset, 2, this.length)
12738 return this[offset] | (this[offset + 1] << 8)
12739 }
12740
12741 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
12742 offset = offset >>> 0
12743 if (!noAssert) checkOffset(offset, 2, this.length)
12744 return (this[offset] << 8) | this[offset + 1]
12745 }
12746
12747 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
12748 offset = offset >>> 0
12749 if (!noAssert) checkOffset(offset, 4, this.length)
12750
12751 return ((this[offset]) |
12752 (this[offset + 1] << 8) |
12753 (this[offset + 2] << 16)) +
12754 (this[offset + 3] * 0x1000000)
12755 }
12756
12757 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
12758 offset = offset >>> 0
12759 if (!noAssert) checkOffset(offset, 4, this.length)
12760
12761 return (this[offset] * 0x1000000) +
12762 ((this[offset + 1] << 16) |
12763 (this[offset + 2] << 8) |
12764 this[offset + 3])
12765 }
12766
12767 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
12768 offset = offset >>> 0
12769 byteLength = byteLength >>> 0
12770 if (!noAssert) checkOffset(offset, byteLength, this.length)
12771
12772 var val = this[offset]
12773 var mul = 1
12774 var i = 0
12775 while (++i < byteLength && (mul *= 0x100)) {
12776 val += this[offset + i] * mul
12777 }
12778 mul *= 0x80
12779
12780 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
12781
12782 return val
12783 }
12784
12785 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
12786 offset = offset >>> 0
12787 byteLength = byteLength >>> 0
12788 if (!noAssert) checkOffset(offset, byteLength, this.length)
12789
12790 var i = byteLength
12791 var mul = 1
12792 var val = this[offset + --i]
12793 while (i > 0 && (mul *= 0x100)) {
12794 val += this[offset + --i] * mul
12795 }
12796 mul *= 0x80
12797
12798 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
12799
12800 return val
12801 }
12802
12803 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
12804 offset = offset >>> 0
12805 if (!noAssert) checkOffset(offset, 1, this.length)
12806 if (!(this[offset] & 0x80)) return (this[offset])
12807 return ((0xff - this[offset] + 1) * -1)
12808 }
12809
12810 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
12811 offset = offset >>> 0
12812 if (!noAssert) checkOffset(offset, 2, this.length)
12813 var val = this[offset] | (this[offset + 1] << 8)
12814 return (val & 0x8000) ? val | 0xFFFF0000 : val
12815 }
12816
12817 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
12818 offset = offset >>> 0
12819 if (!noAssert) checkOffset(offset, 2, this.length)
12820 var val = this[offset + 1] | (this[offset] << 8)
12821 return (val & 0x8000) ? val | 0xFFFF0000 : val
12822 }
12823
12824 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
12825 offset = offset >>> 0
12826 if (!noAssert) checkOffset(offset, 4, this.length)
12827
12828 return (this[offset]) |
12829 (this[offset + 1] << 8) |
12830 (this[offset + 2] << 16) |
12831 (this[offset + 3] << 24)
12832 }
12833
12834 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
12835 offset = offset >>> 0
12836 if (!noAssert) checkOffset(offset, 4, this.length)
12837
12838 return (this[offset] << 24) |
12839 (this[offset + 1] << 16) |
12840 (this[offset + 2] << 8) |
12841 (this[offset + 3])
12842 }
12843
12844 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
12845 offset = offset >>> 0
12846 if (!noAssert) checkOffset(offset, 4, this.length)
12847 return ieee754.read(this, offset, true, 23, 4)
12848 }
12849
12850 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
12851 offset = offset >>> 0
12852 if (!noAssert) checkOffset(offset, 4, this.length)
12853 return ieee754.read(this, offset, false, 23, 4)
12854 }
12855
12856 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
12857 offset = offset >>> 0
12858 if (!noAssert) checkOffset(offset, 8, this.length)
12859 return ieee754.read(this, offset, true, 52, 8)
12860 }
12861
12862 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
12863 offset = offset >>> 0
12864 if (!noAssert) checkOffset(offset, 8, this.length)
12865 return ieee754.read(this, offset, false, 52, 8)
12866 }
12867
12868 function checkInt (buf, value, offset, ext, max, min) {
12869 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
12870 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
12871 if (offset + ext > buf.length) throw new RangeError('Index out of range')
12872 }
12873
12874 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
12875 value = +value
12876 offset = offset >>> 0
12877 byteLength = byteLength >>> 0
12878 if (!noAssert) {
12879 var maxBytes = Math.pow(2, 8 * byteLength) - 1
12880 checkInt(this, value, offset, byteLength, maxBytes, 0)
12881 }
12882
12883 var mul = 1
12884 var i = 0
12885 this[offset] = value & 0xFF
12886 while (++i < byteLength && (mul *= 0x100)) {
12887 this[offset + i] = (value / mul) & 0xFF
12888 }
12889
12890 return offset + byteLength
12891 }
12892
12893 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
12894 value = +value
12895 offset = offset >>> 0
12896 byteLength = byteLength >>> 0
12897 if (!noAssert) {
12898 var maxBytes = Math.pow(2, 8 * byteLength) - 1
12899 checkInt(this, value, offset, byteLength, maxBytes, 0)
12900 }
12901
12902 var i = byteLength - 1
12903 var mul = 1
12904 this[offset + i] = value & 0xFF
12905 while (--i >= 0 && (mul *= 0x100)) {
12906 this[offset + i] = (value / mul) & 0xFF
12907 }
12908
12909 return offset + byteLength
12910 }
12911
12912 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
12913 value = +value
12914 offset = offset >>> 0
12915 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
12916 this[offset] = (value & 0xff)
12917 return offset + 1
12918 }
12919
12920 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
12921 value = +value
12922 offset = offset >>> 0
12923 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
12924 this[offset] = (value & 0xff)
12925 this[offset + 1] = (value >>> 8)
12926 return offset + 2
12927 }
12928
12929 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
12930 value = +value
12931 offset = offset >>> 0
12932 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
12933 this[offset] = (value >>> 8)
12934 this[offset + 1] = (value & 0xff)
12935 return offset + 2
12936 }
12937
12938 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
12939 value = +value
12940 offset = offset >>> 0
12941 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
12942 this[offset + 3] = (value >>> 24)
12943 this[offset + 2] = (value >>> 16)
12944 this[offset + 1] = (value >>> 8)
12945 this[offset] = (value & 0xff)
12946 return offset + 4
12947 }
12948
12949 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
12950 value = +value
12951 offset = offset >>> 0
12952 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
12953 this[offset] = (value >>> 24)
12954 this[offset + 1] = (value >>> 16)
12955 this[offset + 2] = (value >>> 8)
12956 this[offset + 3] = (value & 0xff)
12957 return offset + 4
12958 }
12959
12960 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
12961 value = +value
12962 offset = offset >>> 0
12963 if (!noAssert) {
12964 var limit = Math.pow(2, (8 * byteLength) - 1)
12965
12966 checkInt(this, value, offset, byteLength, limit - 1, -limit)
12967 }
12968
12969 var i = 0
12970 var mul = 1
12971 var sub = 0
12972 this[offset] = value & 0xFF
12973 while (++i < byteLength && (mul *= 0x100)) {
12974 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
12975 sub = 1
12976 }
12977 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
12978 }
12979
12980 return offset + byteLength
12981 }
12982
12983 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
12984 value = +value
12985 offset = offset >>> 0
12986 if (!noAssert) {
12987 var limit = Math.pow(2, (8 * byteLength) - 1)
12988
12989 checkInt(this, value, offset, byteLength, limit - 1, -limit)
12990 }
12991
12992 var i = byteLength - 1
12993 var mul = 1
12994 var sub = 0
12995 this[offset + i] = value & 0xFF
12996 while (--i >= 0 && (mul *= 0x100)) {
12997 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
12998 sub = 1
12999 }
13000 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
13001 }
13002
13003 return offset + byteLength
13004 }
13005
13006 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
13007 value = +value
13008 offset = offset >>> 0
13009 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
13010 if (value < 0) value = 0xff + value + 1
13011 this[offset] = (value & 0xff)
13012 return offset + 1
13013 }
13014
13015 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
13016 value = +value
13017 offset = offset >>> 0
13018 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
13019 this[offset] = (value & 0xff)
13020 this[offset + 1] = (value >>> 8)
13021 return offset + 2
13022 }
13023
13024 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
13025 value = +value
13026 offset = offset >>> 0
13027 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
13028 this[offset] = (value >>> 8)
13029 this[offset + 1] = (value & 0xff)
13030 return offset + 2
13031 }
13032
13033 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
13034 value = +value
13035 offset = offset >>> 0
13036 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
13037 this[offset] = (value & 0xff)
13038 this[offset + 1] = (value >>> 8)
13039 this[offset + 2] = (value >>> 16)
13040 this[offset + 3] = (value >>> 24)
13041 return offset + 4
13042 }
13043
13044 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
13045 value = +value
13046 offset = offset >>> 0
13047 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
13048 if (value < 0) value = 0xffffffff + value + 1
13049 this[offset] = (value >>> 24)
13050 this[offset + 1] = (value >>> 16)
13051 this[offset + 2] = (value >>> 8)
13052 this[offset + 3] = (value & 0xff)
13053 return offset + 4
13054 }
13055
13056 function checkIEEE754 (buf, value, offset, ext, max, min) {
13057 if (offset + ext > buf.length) throw new RangeError('Index out of range')
13058 if (offset < 0) throw new RangeError('Index out of range')
13059 }
13060
13061 function writeFloat (buf, value, offset, littleEndian, noAssert) {
13062 value = +value
13063 offset = offset >>> 0
13064 if (!noAssert) {
13065 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
13066 }
13067 ieee754.write(buf, value, offset, littleEndian, 23, 4)
13068 return offset + 4
13069 }
13070
13071 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
13072 return writeFloat(this, value, offset, true, noAssert)
13073 }
13074
13075 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
13076 return writeFloat(this, value, offset, false, noAssert)
13077 }
13078
13079 function writeDouble (buf, value, offset, littleEndian, noAssert) {
13080 value = +value
13081 offset = offset >>> 0
13082 if (!noAssert) {
13083 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
13084 }
13085 ieee754.write(buf, value, offset, littleEndian, 52, 8)
13086 return offset + 8
13087 }
13088
13089 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
13090 return writeDouble(this, value, offset, true, noAssert)
13091 }
13092
13093 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
13094 return writeDouble(this, value, offset, false, noAssert)
13095 }
13096
13097 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
13098 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
13099 if (!start) start = 0
13100 if (!end && end !== 0) end = this.length
13101 if (targetStart >= target.length) targetStart = target.length
13102 if (!targetStart) targetStart = 0
13103 if (end > 0 && end < start) end = start
13104
13105 // Copy 0 bytes; we're done
13106 if (end === start) return 0
13107 if (target.length === 0 || this.length === 0) return 0
13108
13109 // Fatal error conditions
13110 if (targetStart < 0) {
13111 throw new RangeError('targetStart out of bounds')
13112 }
13113 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
13114 if (end < 0) throw new RangeError('sourceEnd out of bounds')
13115
13116 // Are we oob?
13117 if (end > this.length) end = this.length
13118 if (target.length - targetStart < end - start) {
13119 end = target.length - targetStart + start
13120 }
13121
13122 var len = end - start
13123 var i
13124
13125 if (this === target && start < targetStart && targetStart < end) {
13126 // descending copy from end
13127 for (i = len - 1; i >= 0; --i) {
13128 target[i + targetStart] = this[i + start]
13129 }
13130 } else if (len < 1000) {
13131 // ascending copy from start
13132 for (i = 0; i < len; ++i) {
13133 target[i + targetStart] = this[i + start]
13134 }
13135 } else {
13136 Uint8Array.prototype.set.call(
13137 target,
13138 this.subarray(start, start + len),
13139 targetStart
13140 )
13141 }
13142
13143 return len
13144 }
13145
13146 // Usage:
13147 // buffer.fill(number[, offset[, end]])
13148 // buffer.fill(buffer[, offset[, end]])
13149 // buffer.fill(string[, offset[, end]][, encoding])
13150 Buffer.prototype.fill = function fill (val, start, end, encoding) {
13151 // Handle string cases:
13152 if (typeof val === 'string') {
13153 if (typeof start === 'string') {
13154 encoding = start
13155 start = 0
13156 end = this.length
13157 } else if (typeof end === 'string') {
13158 encoding = end
13159 end = this.length
13160 }
13161 if (val.length === 1) {
13162 var code = val.charCodeAt(0)
13163 if (code < 256) {
13164 val = code
13165 }
13166 }
13167 if (encoding !== undefined && typeof encoding !== 'string') {
13168 throw new TypeError('encoding must be a string')
13169 }
13170 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
13171 throw new TypeError('Unknown encoding: ' + encoding)
13172 }
13173 } else if (typeof val === 'number') {
13174 val = val & 255
13175 }
13176
13177 // Invalid ranges are not set to a default, so can range check early.
13178 if (start < 0 || this.length < start || this.length < end) {
13179 throw new RangeError('Out of range index')
13180 }
13181
13182 if (end <= start) {
13183 return this
13184 }
13185
13186 start = start >>> 0
13187 end = end === undefined ? this.length : end >>> 0
13188
13189 if (!val) val = 0
13190
13191 var i
13192 if (typeof val === 'number') {
13193 for (i = start; i < end; ++i) {
13194 this[i] = val
13195 }
13196 } else {
13197 var bytes = Buffer.isBuffer(val)
13198 ? val
13199 : new Buffer(val, encoding)
13200 var len = bytes.length
13201 for (i = 0; i < end - start; ++i) {
13202 this[i + start] = bytes[i % len]
13203 }
13204 }
13205
13206 return this
13207 }
13208
13209 // HELPER FUNCTIONS
13210 // ================
13211
13212 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
13213
13214 function base64clean (str) {
13215 // Node strips out invalid characters like \n and \t from the string, base64-js does not
13216 str = str.trim().replace(INVALID_BASE64_RE, '')
13217 // Node converts strings with length < 2 to ''
13218 if (str.length < 2) return ''
13219 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
13220 while (str.length % 4 !== 0) {
13221 str = str + '='
13222 }
13223 return str
13224 }
13225
13226 function toHex (n) {
13227 if (n < 16) return '0' + n.toString(16)
13228 return n.toString(16)
13229 }
13230
13231 function utf8ToBytes (string, units) {
13232 units = units || Infinity
13233 var codePoint
13234 var length = string.length
13235 var leadSurrogate = null
13236 var bytes = []
13237
13238 for (var i = 0; i < length; ++i) {
13239 codePoint = string.charCodeAt(i)
13240
13241 // is surrogate component
13242 if (codePoint > 0xD7FF && codePoint < 0xE000) {
13243 // last char was a lead
13244 if (!leadSurrogate) {
13245 // no lead yet
13246 if (codePoint > 0xDBFF) {
13247 // unexpected trail
13248 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13249 continue
13250 } else if (i + 1 === length) {
13251 // unpaired lead
13252 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13253 continue
13254 }
13255
13256 // valid lead
13257 leadSurrogate = codePoint
13258
13259 continue
13260 }
13261
13262 // 2 leads in a row
13263 if (codePoint < 0xDC00) {
13264 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13265 leadSurrogate = codePoint
13266 continue
13267 }
13268
13269 // valid surrogate pair
13270 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
13271 } else if (leadSurrogate) {
13272 // valid bmp char, but last char was a lead
13273 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13274 }
13275
13276 leadSurrogate = null
13277
13278 // encode utf8
13279 if (codePoint < 0x80) {
13280 if ((units -= 1) < 0) break
13281 bytes.push(codePoint)
13282 } else if (codePoint < 0x800) {
13283 if ((units -= 2) < 0) break
13284 bytes.push(
13285 codePoint >> 0x6 | 0xC0,
13286 codePoint & 0x3F | 0x80
13287 )
13288 } else if (codePoint < 0x10000) {
13289 if ((units -= 3) < 0) break
13290 bytes.push(
13291 codePoint >> 0xC | 0xE0,
13292 codePoint >> 0x6 & 0x3F | 0x80,
13293 codePoint & 0x3F | 0x80
13294 )
13295 } else if (codePoint < 0x110000) {
13296 if ((units -= 4) < 0) break
13297 bytes.push(
13298 codePoint >> 0x12 | 0xF0,
13299 codePoint >> 0xC & 0x3F | 0x80,
13300 codePoint >> 0x6 & 0x3F | 0x80,
13301 codePoint & 0x3F | 0x80
13302 )
13303 } else {
13304 throw new Error('Invalid code point')
13305 }
13306 }
13307
13308 return bytes
13309 }
13310
13311 function asciiToBytes (str) {
13312 var byteArray = []
13313 for (var i = 0; i < str.length; ++i) {
13314 // Node's code seems to be doing this and not & 0x7F..
13315 byteArray.push(str.charCodeAt(i) & 0xFF)
13316 }
13317 return byteArray
13318 }
13319
13320 function utf16leToBytes (str, units) {
13321 var c, hi, lo
13322 var byteArray = []
13323 for (var i = 0; i < str.length; ++i) {
13324 if ((units -= 2) < 0) break
13325
13326 c = str.charCodeAt(i)
13327 hi = c >> 8
13328 lo = c % 256
13329 byteArray.push(lo)
13330 byteArray.push(hi)
13331 }
13332
13333 return byteArray
13334 }
13335
13336 function base64ToBytes (str) {
13337 return base64.toByteArray(base64clean(str))
13338 }
13339
13340 function blitBuffer (src, dst, offset, length) {
13341 for (var i = 0; i < length; ++i) {
13342 if ((i + offset >= dst.length) || (i >= src.length)) break
13343 dst[i + offset] = src[i]
13344 }
13345 return i
13346 }
13347
13348 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
13349 function isArrayBufferView (obj) {
13350 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
13351 }
13352
13353 function numberIsNaN (obj) {
13354 return obj !== obj // eslint-disable-line no-self-compare
13355 }
13356
13357 },{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){
13358 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
13359 var e, m
13360 var eLen = nBytes * 8 - mLen - 1
13361 var eMax = (1 << eLen) - 1
13362 var eBias = eMax >> 1
13363 var nBits = -7
13364 var i = isLE ? (nBytes - 1) : 0
13365 var d = isLE ? -1 : 1
13366 var s = buffer[offset + i]
13367
13368 i += d
13369
13370 e = s & ((1 << (-nBits)) - 1)
13371 s >>= (-nBits)
13372 nBits += eLen
13373 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
13374
13375 m = e & ((1 << (-nBits)) - 1)
13376 e >>= (-nBits)
13377 nBits += mLen
13378 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
13379
13380 if (e === 0) {
13381 e = 1 - eBias
13382 } else if (e === eMax) {
13383 return m ? NaN : ((s ? -1 : 1) * Infinity)
13384 } else {
13385 m = m + Math.pow(2, mLen)
13386 e = e - eBias
13387 }
13388 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
13389 }
13390
13391 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
13392 var e, m, c
13393 var eLen = nBytes * 8 - mLen - 1
13394 var eMax = (1 << eLen) - 1
13395 var eBias = eMax >> 1
13396 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
13397 var i = isLE ? 0 : (nBytes - 1)
13398 var d = isLE ? 1 : -1
13399 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
13400
13401 value = Math.abs(value)
13402
13403 if (isNaN(value) || value === Infinity) {
13404 m = isNaN(value) ? 1 : 0
13405 e = eMax
13406 } else {
13407 e = Math.floor(Math.log(value) / Math.LN2)
13408 if (value * (c = Math.pow(2, -e)) < 1) {
13409 e--
13410 c *= 2
13411 }
13412 if (e + eBias >= 1) {
13413 value += rt / c
13414 } else {
13415 value += rt * Math.pow(2, 1 - eBias)
13416 }
13417 if (value * c >= 2) {
13418 e++
13419 c /= 2
13420 }
13421
13422 if (e + eBias >= eMax) {
13423 m = 0
13424 e = eMax
13425 } else if (e + eBias >= 1) {
13426 m = (value * c - 1) * Math.pow(2, mLen)
13427 e = e + eBias
13428 } else {
13429 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
13430 e = 0
13431 }
13432 }
13433
13434 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
13435
13436 e = (e << mLen) | m
13437 eLen += mLen
13438 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
13439
13440 buffer[offset + i - d] |= s * 128
13441 }
13442
13443 },{}],4:[function(require,module,exports){
13444 window.basex = require('base-x')
13445 },{"base-x":5}],5:[function(require,module,exports){
13446 // base-x encoding
13447 // Forked from https://github.com/cryptocoinjs/bs58
13448 // Originally written by Mike Hearn for BitcoinJ
13449 // Copyright (c) 2011 Google Inc
13450 // Ported to JavaScript by Stefan Thomas
13451 // Merged Buffer refactorings from base58-native by Stephen Pair
13452 // Copyright (c) 2013 BitPay Inc
13453
13454 var Buffer = require('safe-buffer').Buffer
13455
13456 module.exports = function base (ALPHABET) {
13457 var ALPHABET_MAP = {}
13458 var BASE = ALPHABET.length
13459 var LEADER = ALPHABET.charAt(0)
13460
13461 // pre-compute lookup table
13462 for (var z = 0; z < ALPHABET.length; z++) {
13463 var x = ALPHABET.charAt(z)
13464
13465 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
13466 ALPHABET_MAP[x] = z
13467 }
13468
13469 function encode (source) {
13470 if (source.length === 0) return ''
13471
13472 var digits = [0]
13473 for (var i = 0; i < source.length; ++i) {
13474 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
13475 carry += digits[j] << 8
13476 digits[j] = carry % BASE
13477 carry = (carry / BASE) | 0
13478 }
13479
13480 while (carry > 0) {
13481 digits.push(carry % BASE)
13482 carry = (carry / BASE) | 0
13483 }
13484 }
13485
13486 var string = ''
13487
13488 // deal with leading zeros
13489 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
13490 // convert digits to a string
13491 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
13492
13493 return string
13494 }
13495
13496 function decodeUnsafe (string) {
13497 if (string.length === 0) return Buffer.allocUnsafe(0)
13498
13499 var bytes = [0]
13500 for (var i = 0; i < string.length; i++) {
13501 var value = ALPHABET_MAP[string[i]]
13502 if (value === undefined) return
13503
13504 for (var j = 0, carry = value; j < bytes.length; ++j) {
13505 carry += bytes[j] * BASE
13506 bytes[j] = carry & 0xff
13507 carry >>= 8
13508 }
13509
13510 while (carry > 0) {
13511 bytes.push(carry & 0xff)
13512 carry >>= 8
13513 }
13514 }
13515
13516 // deal with leading zeros
13517 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
13518 bytes.push(0)
13519 }
13520
13521 return Buffer.from(bytes.reverse())
13522 }
13523
13524 function decode (string) {
13525 var buffer = decodeUnsafe(string)
13526 if (buffer) return buffer
13527
13528 throw new Error('Non-base' + BASE + ' character')
13529 }
13530
13531 return {
13532 encode: encode,
13533 decodeUnsafe: decodeUnsafe,
13534 decode: decode
13535 }
13536 }
13537
13538 },{"safe-buffer":6}],6:[function(require,module,exports){
13539 module.exports = require('buffer')
13540
13541 },{"buffer":2}]},{},[4])(4)
13542 });</script>
13543 <script>(function (root) {
13544 "use strict";
13545
13546 /***** unorm.js *****/
13547
13548 /*
13549 * UnicodeNormalizer 1.0.0
13550 * Copyright (c) 2008 Matsuza
13551 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
13552 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
13553 * $Rev: 13309 $
13554 */
13555
13556 var DEFAULT_FEATURE = [null, 0, {}];
13557 var CACHE_THRESHOLD = 10;
13558 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
13559 var NCount = VCount * TCount; // 588
13560 var SCount = LCount * NCount; // 11172
13561
13562 var UChar = function(cp, feature){
13563 this.codepoint = cp;
13564 this.feature = feature;
13565 };
13566
13567 // Strategies
13568 var cache = {};
13569 var cacheCounter = [];
13570 for (var i = 0; i <= 0xFF; ++i){
13571 cacheCounter[i] = 0;
13572 }
13573
13574 function fromCache(next, cp, needFeature){
13575 var ret = cache[cp];
13576 if(!ret){
13577 ret = next(cp, needFeature);
13578 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
13579 cache[cp] = ret;
13580 }
13581 }
13582 return ret;
13583 }
13584
13585 function fromData(next, cp, needFeature){
13586 var hash = cp & 0xFF00;
13587 var dunit = UChar.udata[hash] || {};
13588 var f = dunit[cp];
13589 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
13590 }
13591 function fromCpOnly(next, cp, needFeature){
13592 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
13593 }
13594 function fromRuleBasedJamo(next, cp, needFeature){
13595 var j;
13596 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
13597 return next(cp, needFeature);
13598 }
13599 if(LBase <= cp && cp < LBase + LCount){
13600 var c = {};
13601 var base = (cp - LBase) * VCount;
13602 for (j = 0; j < VCount; ++j){
13603 c[VBase + j] = SBase + TCount * (j + base);
13604 }
13605 return new UChar(cp, [,,c]);
13606 }
13607
13608 var SIndex = cp - SBase;
13609 var TIndex = SIndex % TCount;
13610 var feature = [];
13611 if(TIndex !== 0){
13612 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
13613 } else {
13614 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
13615 feature[2] = {};
13616 for (j = 1; j < TCount; ++j){
13617 feature[2][TBase + j] = cp + j;
13618 }
13619 }
13620 return new UChar(cp, feature);
13621 }
13622 function fromCpFilter(next, cp, needFeature){
13623 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
13624 }
13625
13626 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
13627
13628 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
13629 return function (cp, needFeature) {
13630 return strategy(next, cp, needFeature);
13631 };
13632 }, null);
13633
13634 UChar.isHighSurrogate = function(cp){
13635 return cp >= 0xD800 && cp <= 0xDBFF;
13636 };
13637 UChar.isLowSurrogate = function(cp){
13638 return cp >= 0xDC00 && cp <= 0xDFFF;
13639 };
13640
13641 UChar.prototype.prepFeature = function(){
13642 if(!this.feature){
13643 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
13644 }
13645 };
13646
13647 UChar.prototype.toString = function(){
13648 if(this.codepoint < 0x10000){
13649 return String.fromCharCode(this.codepoint);
13650 } else {
13651 var x = this.codepoint - 0x10000;
13652 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
13653 }
13654 };
13655
13656 UChar.prototype.getDecomp = function(){
13657 this.prepFeature();
13658 return this.feature[0] || null;
13659 };
13660
13661 UChar.prototype.isCompatibility = function(){
13662 this.prepFeature();
13663 return !!this.feature[1] && (this.feature[1] & (1 << 8));
13664 };
13665 UChar.prototype.isExclude = function(){
13666 this.prepFeature();
13667 return !!this.feature[1] && (this.feature[1] & (1 << 9));
13668 };
13669 UChar.prototype.getCanonicalClass = function(){
13670 this.prepFeature();
13671 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
13672 };
13673 UChar.prototype.getComposite = function(following){
13674 this.prepFeature();
13675 if(!this.feature[2]){
13676 return null;
13677 }
13678 var cp = this.feature[2][following.codepoint];
13679 return cp ? UChar.fromCharCode(cp) : null;
13680 };
13681
13682 var UCharIterator = function(str){
13683 this.str = str;
13684 this.cursor = 0;
13685 };
13686 UCharIterator.prototype.next = function(){
13687 if(!!this.str && this.cursor < this.str.length){
13688 var cp = this.str.charCodeAt(this.cursor++);
13689 var d;
13690 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
13691 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
13692 ++this.cursor;
13693 }
13694 return UChar.fromCharCode(cp);
13695 } else {
13696 this.str = null;
13697 return null;
13698 }
13699 };
13700
13701 var RecursDecompIterator = function(it, cano){
13702 this.it = it;
13703 this.canonical = cano;
13704 this.resBuf = [];
13705 };
13706
13707 RecursDecompIterator.prototype.next = function(){
13708 function recursiveDecomp(cano, uchar){
13709 var decomp = uchar.getDecomp();
13710 if(!!decomp && !(cano && uchar.isCompatibility())){
13711 var ret = [];
13712 for(var i = 0; i < decomp.length; ++i){
13713 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
13714 ret = ret.concat(a);
13715 }
13716 return ret;
13717 } else {
13718 return [uchar];
13719 }
13720 }
13721 if(this.resBuf.length === 0){
13722 var uchar = this.it.next();
13723 if(!uchar){
13724 return null;
13725 }
13726 this.resBuf = recursiveDecomp(this.canonical, uchar);
13727 }
13728 return this.resBuf.shift();
13729 };
13730
13731 var DecompIterator = function(it){
13732 this.it = it;
13733 this.resBuf = [];
13734 };
13735
13736 DecompIterator.prototype.next = function(){
13737 var cc;
13738 if(this.resBuf.length === 0){
13739 do{
13740 var uchar = this.it.next();
13741 if(!uchar){
13742 break;
13743 }
13744 cc = uchar.getCanonicalClass();
13745 var inspt = this.resBuf.length;
13746 if(cc !== 0){
13747 for(; inspt > 0; --inspt){
13748 var uchar2 = this.resBuf[inspt - 1];
13749 var cc2 = uchar2.getCanonicalClass();
13750 if(cc2 <= cc){
13751 break;
13752 }
13753 }
13754 }
13755 this.resBuf.splice(inspt, 0, uchar);
13756 } while(cc !== 0);
13757 }
13758 return this.resBuf.shift();
13759 };
13760
13761 var CompIterator = function(it){
13762 this.it = it;
13763 this.procBuf = [];
13764 this.resBuf = [];
13765 this.lastClass = null;
13766 };
13767
13768 CompIterator.prototype.next = function(){
13769 while(this.resBuf.length === 0){
13770 var uchar = this.it.next();
13771 if(!uchar){
13772 this.resBuf = this.procBuf;
13773 this.procBuf = [];
13774 break;
13775 }
13776 if(this.procBuf.length === 0){
13777 this.lastClass = uchar.getCanonicalClass();
13778 this.procBuf.push(uchar);
13779 } else {
13780 var starter = this.procBuf[0];
13781 var composite = starter.getComposite(uchar);
13782 var cc = uchar.getCanonicalClass();
13783 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
13784 this.procBuf[0] = composite;
13785 } else {
13786 if(cc === 0){
13787 this.resBuf = this.procBuf;
13788 this.procBuf = [];
13789 }
13790 this.lastClass = cc;
13791 this.procBuf.push(uchar);
13792 }
13793 }
13794 }
13795 return this.resBuf.shift();
13796 };
13797
13798 var createIterator = function(mode, str){
13799 switch(mode){
13800 case "NFD":
13801 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
13802 case "NFKD":
13803 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
13804 case "NFC":
13805 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
13806 case "NFKC":
13807 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
13808 }
13809 throw mode + " is invalid";
13810 };
13811 var normalize = function(mode, str){
13812 var it = createIterator(mode, str);
13813 var ret = "";
13814 var uchar;
13815 while(!!(uchar = it.next())){
13816 ret += uchar.toString();
13817 }
13818 return ret;
13819 };
13820
13821 /* API functions */
13822 function nfd(str){
13823 return normalize("NFD", str);
13824 }
13825
13826 function nfkd(str){
13827 return normalize("NFKD", str);
13828 }
13829
13830 function nfc(str){
13831 return normalize("NFC", str);
13832 }
13833
13834 function nfkc(str){
13835 return normalize("NFKC", str);
13836 }
13837
13838 /* Unicode data */
13839 UChar.udata={
13840 0:{60:[,,{824:8814}],61:[,,{824:8800}],62:[,,{824:8815}],65:[,,{768:192,769:193,770:194,771:195,772:256,774:258,775:550,776:196,777:7842,778:197,780:461,783:512,785:514,803:7840,805:7680,808:260}],66:[,,{775:7682,803:7684,817:7686}],67:[,,{769:262,770:264,775:266,780:268,807:199}],68:[,,{775:7690,780:270,803:7692,807:7696,813:7698,817:7694}],69:[,,{768:200,769:201,770:202,771:7868,772:274,774:276,775:278,776:203,777:7866,780:282,783:516,785:518,803:7864,807:552,808:280,813:7704,816:7706}],70:[,,{775:7710}],71:[,,{769:500,770:284,772:7712,774:286,775:288,780:486,807:290}],72:[,,{770:292,775:7714,776:7718,780:542,803:7716,807:7720,814:7722}],73:[,,{768:204,769:205,770:206,771:296,772:298,774:300,775:304,776:207,777:7880,780:463,783:520,785:522,803:7882,808:302,816:7724}],74:[,,{770:308}],75:[,,{769:7728,780:488,803:7730,807:310,817:7732}],76:[,,{769:313,780:317,803:7734,807:315,813:7740,817:7738}],77:[,,{769:7742,775:7744,803:7746}],78:[,,{768:504,769:323,771:209,775:7748,780:327,803:7750,807:325,813:7754,817:7752}],79:[,,{768:210,769:211,770:212,771:213,772:332,774:334,775:558,776:214,777:7886,779:336,780:465,783:524,785:526,795:416,803:7884,808:490}],80:[,,{769:7764,775:7766}],82:[,,{769:340,775:7768,780:344,783:528,785:530,803:7770,807:342,817:7774}],83:[,,{769:346,770:348,775:7776,780:352,803:7778,806:536,807:350}],84:[,,{775:7786,780:356,803:7788,806:538,807:354,813:7792,817:7790}],85:[,,{768:217,769:218,770:219,771:360,772:362,774:364,776:220,777:7910,778:366,779:368,780:467,783:532,785:534,795:431,803:7908,804:7794,808:370,813:7798,816:7796}],86:[,,{771:7804,803:7806}],87:[,,{768:7808,769:7810,770:372,775:7814,776:7812,803:7816}],88:[,,{775:7818,776:7820}],89:[,,{768:7922,769:221,770:374,771:7928,772:562,775:7822,776:376,777:7926,803:7924}],90:[,,{769:377,770:7824,775:379,780:381,803:7826,817:7828}],97:[,,{768:224,769:225,770:226,771:227,772:257,774:259,775:551,776:228,777:7843,778:229,780:462,783:513,785:515,803:7841,805:7681,808:261}],98:[,,{775:7683,803:7685,817:7687}],99:[,,{769:263,770:265,775:267,780:269,807:231}],100:[,,{775:7691,780:271,803:7693,807:7697,813:7699,817:7695}],101:[,,{768:232,769:233,770:234,771:7869,772:275,774:277,775:279,776:235,777:7867,780:283,783:517,785:519,803:7865,807:553,808:281,813:7705,816:7707}],102:[,,{775:7711}],103:[,,{769:501,770:285,772:7713,774:287,775:289,780:487,807:291}],104:[,,{770:293,775:7715,776:7719,780:543,803:7717,807:7721,814:7723,817:7830}],105:[,,{768:236,769:237,770:238,771:297,772:299,774:301,776:239,777:7881,780:464,783:521,785:523,803:7883,808:303,816:7725}],106:[,,{770:309,780:496}],107:[,,{769:7729,780:489,803:7731,807:311,817:7733}],108:[,,{769:314,780:318,803:7735,807:316,813:7741,817:7739}],109:[,,{769:7743,775:7745,803:7747}],110:[,,{768:505,769:324,771:241,775:7749,780:328,803:7751,807:326,813:7755,817:7753}],111:[,,{768:242,769:243,770:244,771:245,772:333,774:335,775:559,776:246,777:7887,779:337,780:466,783:525,785:527,795:417,803:7885,808:491}],112:[,,{769:7765,775:7767}],114:[,,{769:341,775:7769,780:345,783:529,785:531,803:7771,807:343,817:7775}],115:[,,{769:347,770:349,775:7777,780:353,803:7779,806:537,807:351}],116:[,,{775:7787,776:7831,780:357,803:7789,806:539,807:355,813:7793,817:7791}],117:[,,{768:249,769:250,770:251,771:361,772:363,774:365,776:252,777:7911,778:367,779:369,780:468,783:533,785:535,795:432,803:7909,804:7795,808:371,813:7799,816:7797}],118:[,,{771:7805,803:7807}],119:[,,{768:7809,769:7811,770:373,775:7815,776:7813,778:7832,803:7817}],120:[,,{775:7819,776:7821}],121:[,,{768:7923,769:253,770:375,771:7929,772:563,775:7823,776:255,777:7927,778:7833,803:7925}],122:[,,{769:378,770:7825,775:380,780:382,803:7827,817:7829}],160:[[32],256],168:[[32,776],256,{768:8173,769:901,834:8129}],170:[[97],256],175:[[32,772],256],178:[[50],256],179:[[51],256],180:[[32,769],256],181:[[956],256],184:[[32,807],256],185:[[49],256],186:[[111],256],188:[[49,8260,52],256],189:[[49,8260,50],256],190:[[51,8260,52],256],192:[[65,768]],193:[[65,769]],194:[[65,770],,{768:7846,769:7844,771:7850,777:7848}],195:[[65,771]],196:[[65,776],,{772:478}],197:[[65,778],,{769:506}],198:[,,{769:508,772:482}],199:[[67,807],,{769:7688}],200:[[69,768]],201:[[69,769]],202:[[69,770],,{768:7872,769:7870,771:7876,777:7874}],203:[[69,776]],204:[[73,768]],205:[[73,769]],206:[[73,770]],207:[[73,776],,{769:7726}],209:[[78,771]],210:[[79,768]],211:[[79,769]],212:[[79,770],,{768:7890,769:7888,771:7894,777:7892}],213:[[79,771],,{769:7756,772:556,776:7758}],214:[[79,776],,{772:554}],216:[,,{769:510}],217:[[85,768]],218:[[85,769]],219:[[85,770]],220:[[85,776],,{768:475,769:471,772:469,780:473}],221:[[89,769]],224:[[97,768]],225:[[97,769]],226:[[97,770],,{768:7847,769:7845,771:7851,777:7849}],227:[[97,771]],228:[[97,776],,{772:479}],229:[[97,778],,{769:507}],230:[,,{769:509,772:483}],231:[[99,807],,{769:7689}],232:[[101,768]],233:[[101,769]],234:[[101,770],,{768:7873,769:7871,771:7877,777:7875}],235:[[101,776]],236:[[105,768]],237:[[105,769]],238:[[105,770]],239:[[105,776],,{769:7727}],241:[[110,771]],242:[[111,768]],243:[[111,769]],244:[[111,770],,{768:7891,769:7889,771:7895,777:7893}],245:[[111,771],,{769:7757,772:557,776:7759}],246:[[111,776],,{772:555}],248:[,,{769:511}],249:[[117,768]],250:[[117,769]],251:[[117,770]],252:[[117,776],,{768:476,769:472,772:470,780:474}],253:[[121,769]],255:[[121,776]]},
13841 256:{256:[[65,772]],257:[[97,772]],258:[[65,774],,{768:7856,769:7854,771:7860,777:7858}],259:[[97,774],,{768:7857,769:7855,771:7861,777:7859}],260:[[65,808]],261:[[97,808]],262:[[67,769]],263:[[99,769]],264:[[67,770]],265:[[99,770]],266:[[67,775]],267:[[99,775]],268:[[67,780]],269:[[99,780]],270:[[68,780]],271:[[100,780]],274:[[69,772],,{768:7700,769:7702}],275:[[101,772],,{768:7701,769:7703}],276:[[69,774]],277:[[101,774]],278:[[69,775]],279:[[101,775]],280:[[69,808]],281:[[101,808]],282:[[69,780]],283:[[101,780]],284:[[71,770]],285:[[103,770]],286:[[71,774]],287:[[103,774]],288:[[71,775]],289:[[103,775]],290:[[71,807]],291:[[103,807]],292:[[72,770]],293:[[104,770]],296:[[73,771]],297:[[105,771]],298:[[73,772]],299:[[105,772]],300:[[73,774]],301:[[105,774]],302:[[73,808]],303:[[105,808]],304:[[73,775]],306:[[73,74],256],307:[[105,106],256],308:[[74,770]],309:[[106,770]],310:[[75,807]],311:[[107,807]],313:[[76,769]],314:[[108,769]],315:[[76,807]],316:[[108,807]],317:[[76,780]],318:[[108,780]],319:[[76,183],256],320:[[108,183],256],323:[[78,769]],324:[[110,769]],325:[[78,807]],326:[[110,807]],327:[[78,780]],328:[[110,780]],329:[[700,110],256],332:[[79,772],,{768:7760,769:7762}],333:[[111,772],,{768:7761,769:7763}],334:[[79,774]],335:[[111,774]],336:[[79,779]],337:[[111,779]],340:[[82,769]],341:[[114,769]],342:[[82,807]],343:[[114,807]],344:[[82,780]],345:[[114,780]],346:[[83,769],,{775:7780}],347:[[115,769],,{775:7781}],348:[[83,770]],349:[[115,770]],350:[[83,807]],351:[[115,807]],352:[[83,780],,{775:7782}],353:[[115,780],,{775:7783}],354:[[84,807]],355:[[116,807]],356:[[84,780]],357:[[116,780]],360:[[85,771],,{769:7800}],361:[[117,771],,{769:7801}],362:[[85,772],,{776:7802}],363:[[117,772],,{776:7803}],364:[[85,774]],365:[[117,774]],366:[[85,778]],367:[[117,778]],368:[[85,779]],369:[[117,779]],370:[[85,808]],371:[[117,808]],372:[[87,770]],373:[[119,770]],374:[[89,770]],375:[[121,770]],376:[[89,776]],377:[[90,769]],378:[[122,769]],379:[[90,775]],380:[[122,775]],381:[[90,780]],382:[[122,780]],383:[[115],256,{775:7835}],416:[[79,795],,{768:7900,769:7898,771:7904,777:7902,803:7906}],417:[[111,795],,{768:7901,769:7899,771:7905,777:7903,803:7907}],431:[[85,795],,{768:7914,769:7912,771:7918,777:7916,803:7920}],432:[[117,795],,{768:7915,769:7913,771:7919,777:7917,803:7921}],439:[,,{780:494}],452:[[68,381],256],453:[[68,382],256],454:[[100,382],256],455:[[76,74],256],456:[[76,106],256],457:[[108,106],256],458:[[78,74],256],459:[[78,106],256],460:[[110,106],256],461:[[65,780]],462:[[97,780]],463:[[73,780]],464:[[105,780]],465:[[79,780]],466:[[111,780]],467:[[85,780]],468:[[117,780]],469:[[220,772]],470:[[252,772]],471:[[220,769]],472:[[252,769]],473:[[220,780]],474:[[252,780]],475:[[220,768]],476:[[252,768]],478:[[196,772]],479:[[228,772]],480:[[550,772]],481:[[551,772]],482:[[198,772]],483:[[230,772]],486:[[71,780]],487:[[103,780]],488:[[75,780]],489:[[107,780]],490:[[79,808],,{772:492}],491:[[111,808],,{772:493}],492:[[490,772]],493:[[491,772]],494:[[439,780]],495:[[658,780]],496:[[106,780]],497:[[68,90],256],498:[[68,122],256],499:[[100,122],256],500:[[71,769]],501:[[103,769]],504:[[78,768]],505:[[110,768]],506:[[197,769]],507:[[229,769]],508:[[198,769]],509:[[230,769]],510:[[216,769]],511:[[248,769]],66045:[,220]},
13842 512:{512:[[65,783]],513:[[97,783]],514:[[65,785]],515:[[97,785]],516:[[69,783]],517:[[101,783]],518:[[69,785]],519:[[101,785]],520:[[73,783]],521:[[105,783]],522:[[73,785]],523:[[105,785]],524:[[79,783]],525:[[111,783]],526:[[79,785]],527:[[111,785]],528:[[82,783]],529:[[114,783]],530:[[82,785]],531:[[114,785]],532:[[85,783]],533:[[117,783]],534:[[85,785]],535:[[117,785]],536:[[83,806]],537:[[115,806]],538:[[84,806]],539:[[116,806]],542:[[72,780]],543:[[104,780]],550:[[65,775],,{772:480}],551:[[97,775],,{772:481}],552:[[69,807],,{774:7708}],553:[[101,807],,{774:7709}],554:[[214,772]],555:[[246,772]],556:[[213,772]],557:[[245,772]],558:[[79,775],,{772:560}],559:[[111,775],,{772:561}],560:[[558,772]],561:[[559,772]],562:[[89,772]],563:[[121,772]],658:[,,{780:495}],688:[[104],256],689:[[614],256],690:[[106],256],691:[[114],256],692:[[633],256],693:[[635],256],694:[[641],256],695:[[119],256],696:[[121],256],728:[[32,774],256],729:[[32,775],256],730:[[32,778],256],731:[[32,808],256],732:[[32,771],256],733:[[32,779],256],736:[[611],256],737:[[108],256],738:[[115],256],739:[[120],256],740:[[661],256],66272:[,220]},
13843 768:{768:[,230],769:[,230],770:[,230],771:[,230],772:[,230],773:[,230],774:[,230],775:[,230],776:[,230,{769:836}],777:[,230],778:[,230],779:[,230],780:[,230],781:[,230],782:[,230],783:[,230],784:[,230],785:[,230],786:[,230],787:[,230],788:[,230],789:[,232],790:[,220],791:[,220],792:[,220],793:[,220],794:[,232],795:[,216],796:[,220],797:[,220],798:[,220],799:[,220],800:[,220],801:[,202],802:[,202],803:[,220],804:[,220],805:[,220],806:[,220],807:[,202],808:[,202],809:[,220],810:[,220],811:[,220],812:[,220],813:[,220],814:[,220],815:[,220],816:[,220],817:[,220],818:[,220],819:[,220],820:[,1],821:[,1],822:[,1],823:[,1],824:[,1],825:[,220],826:[,220],827:[,220],828:[,220],829:[,230],830:[,230],831:[,230],832:[[768],230],833:[[769],230],834:[,230],835:[[787],230],836:[[776,769],230],837:[,240],838:[,230],839:[,220],840:[,220],841:[,220],842:[,230],843:[,230],844:[,230],845:[,220],846:[,220],848:[,230],849:[,230],850:[,230],851:[,220],852:[,220],853:[,220],854:[,220],855:[,230],856:[,232],857:[,220],858:[,220],859:[,230],860:[,233],861:[,234],862:[,234],863:[,233],864:[,234],865:[,234],866:[,233],867:[,230],868:[,230],869:[,230],870:[,230],871:[,230],872:[,230],873:[,230],874:[,230],875:[,230],876:[,230],877:[,230],878:[,230],879:[,230],884:[[697]],890:[[32,837],256],894:[[59]],900:[[32,769],256],901:[[168,769]],902:[[913,769]],903:[[183]],904:[[917,769]],905:[[919,769]],906:[[921,769]],908:[[927,769]],910:[[933,769]],911:[[937,769]],912:[[970,769]],913:[,,{768:8122,769:902,772:8121,774:8120,787:7944,788:7945,837:8124}],917:[,,{768:8136,769:904,787:7960,788:7961}],919:[,,{768:8138,769:905,787:7976,788:7977,837:8140}],921:[,,{768:8154,769:906,772:8153,774:8152,776:938,787:7992,788:7993}],927:[,,{768:8184,769:908,787:8008,788:8009}],929:[,,{788:8172}],933:[,,{768:8170,769:910,772:8169,774:8168,776:939,788:8025}],937:[,,{768:8186,769:911,787:8040,788:8041,837:8188}],938:[[921,776]],939:[[933,776]],940:[[945,769],,{837:8116}],941:[[949,769]],942:[[951,769],,{837:8132}],943:[[953,769]],944:[[971,769]],945:[,,{768:8048,769:940,772:8113,774:8112,787:7936,788:7937,834:8118,837:8115}],949:[,,{768:8050,769:941,787:7952,788:7953}],951:[,,{768:8052,769:942,787:7968,788:7969,834:8134,837:8131}],953:[,,{768:8054,769:943,772:8145,774:8144,776:970,787:7984,788:7985,834:8150}],959:[,,{768:8056,769:972,787:8000,788:8001}],961:[,,{787:8164,788:8165}],965:[,,{768:8058,769:973,772:8161,774:8160,776:971,787:8016,788:8017,834:8166}],969:[,,{768:8060,769:974,787:8032,788:8033,834:8182,837:8179}],970:[[953,776],,{768:8146,769:912,834:8151}],971:[[965,776],,{768:8162,769:944,834:8167}],972:[[959,769]],973:[[965,769]],974:[[969,769],,{837:8180}],976:[[946],256],977:[[952],256],978:[[933],256,{769:979,776:980}],979:[[978,769]],980:[[978,776]],981:[[966],256],982:[[960],256],1008:[[954],256],1009:[[961],256],1010:[[962],256],1012:[[920],256],1013:[[949],256],1017:[[931],256],66422:[,230],66423:[,230],66424:[,230],66425:[,230],66426:[,230]},
13844 1024:{1024:[[1045,768]],1025:[[1045,776]],1027:[[1043,769]],1030:[,,{776:1031}],1031:[[1030,776]],1036:[[1050,769]],1037:[[1048,768]],1038:[[1059,774]],1040:[,,{774:1232,776:1234}],1043:[,,{769:1027}],1045:[,,{768:1024,774:1238,776:1025}],1046:[,,{774:1217,776:1244}],1047:[,,{776:1246}],1048:[,,{768:1037,772:1250,774:1049,776:1252}],1049:[[1048,774]],1050:[,,{769:1036}],1054:[,,{776:1254}],1059:[,,{772:1262,774:1038,776:1264,779:1266}],1063:[,,{776:1268}],1067:[,,{776:1272}],1069:[,,{776:1260}],1072:[,,{774:1233,776:1235}],1075:[,,{769:1107}],1077:[,,{768:1104,774:1239,776:1105}],1078:[,,{774:1218,776:1245}],1079:[,,{776:1247}],1080:[,,{768:1117,772:1251,774:1081,776:1253}],1081:[[1080,774]],1082:[,,{769:1116}],1086:[,,{776:1255}],1091:[,,{772:1263,774:1118,776:1265,779:1267}],1095:[,,{776:1269}],1099:[,,{776:1273}],1101:[,,{776:1261}],1104:[[1077,768]],1105:[[1077,776]],1107:[[1075,769]],1110:[,,{776:1111}],1111:[[1110,776]],1116:[[1082,769]],1117:[[1080,768]],1118:[[1091,774]],1140:[,,{783:1142}],1141:[,,{783:1143}],1142:[[1140,783]],1143:[[1141,783]],1155:[,230],1156:[,230],1157:[,230],1158:[,230],1159:[,230],1217:[[1046,774]],1218:[[1078,774]],1232:[[1040,774]],1233:[[1072,774]],1234:[[1040,776]],1235:[[1072,776]],1238:[[1045,774]],1239:[[1077,774]],1240:[,,{776:1242}],1241:[,,{776:1243}],1242:[[1240,776]],1243:[[1241,776]],1244:[[1046,776]],1245:[[1078,776]],1246:[[1047,776]],1247:[[1079,776]],1250:[[1048,772]],1251:[[1080,772]],1252:[[1048,776]],1253:[[1080,776]],1254:[[1054,776]],1255:[[1086,776]],1256:[,,{776:1258}],1257:[,,{776:1259}],1258:[[1256,776]],1259:[[1257,776]],1260:[[1069,776]],1261:[[1101,776]],1262:[[1059,772]],1263:[[1091,772]],1264:[[1059,776]],1265:[[1091,776]],1266:[[1059,779]],1267:[[1091,779]],1268:[[1063,776]],1269:[[1095,776]],1272:[[1067,776]],1273:[[1099,776]]},
13845 1280:{1415:[[1381,1410],256],1425:[,220],1426:[,230],1427:[,230],1428:[,230],1429:[,230],1430:[,220],1431:[,230],1432:[,230],1433:[,230],1434:[,222],1435:[,220],1436:[,230],1437:[,230],1438:[,230],1439:[,230],1440:[,230],1441:[,230],1442:[,220],1443:[,220],1444:[,220],1445:[,220],1446:[,220],1447:[,220],1448:[,230],1449:[,230],1450:[,220],1451:[,230],1452:[,230],1453:[,222],1454:[,228],1455:[,230],1456:[,10],1457:[,11],1458:[,12],1459:[,13],1460:[,14],1461:[,15],1462:[,16],1463:[,17],1464:[,18],1465:[,19],1466:[,19],1467:[,20],1468:[,21],1469:[,22],1471:[,23],1473:[,24],1474:[,25],1476:[,230],1477:[,220],1479:[,18]},
13846 1536:{1552:[,230],1553:[,230],1554:[,230],1555:[,230],1556:[,230],1557:[,230],1558:[,230],1559:[,230],1560:[,30],1561:[,31],1562:[,32],1570:[[1575,1619]],1571:[[1575,1620]],1572:[[1608,1620]],1573:[[1575,1621]],1574:[[1610,1620]],1575:[,,{1619:1570,1620:1571,1621:1573}],1608:[,,{1620:1572}],1610:[,,{1620:1574}],1611:[,27],1612:[,28],1613:[,29],1614:[,30],1615:[,31],1616:[,32],1617:[,33],1618:[,34],1619:[,230],1620:[,230],1621:[,220],1622:[,220],1623:[,230],1624:[,230],1625:[,230],1626:[,230],1627:[,230],1628:[,220],1629:[,230],1630:[,230],1631:[,220],1648:[,35],1653:[[1575,1652],256],1654:[[1608,1652],256],1655:[[1735,1652],256],1656:[[1610,1652],256],1728:[[1749,1620]],1729:[,,{1620:1730}],1730:[[1729,1620]],1746:[,,{1620:1747}],1747:[[1746,1620]],1749:[,,{1620:1728}],1750:[,230],1751:[,230],1752:[,230],1753:[,230],1754:[,230],1755:[,230],1756:[,230],1759:[,230],1760:[,230],1761:[,230],1762:[,230],1763:[,220],1764:[,230],1767:[,230],1768:[,230],1770:[,220],1771:[,230],1772:[,230],1773:[,220]},
13847 1792:{1809:[,36],1840:[,230],1841:[,220],1842:[,230],1843:[,230],1844:[,220],1845:[,230],1846:[,230],1847:[,220],1848:[,220],1849:[,220],1850:[,230],1851:[,220],1852:[,220],1853:[,230],1854:[,220],1855:[,230],1856:[,230],1857:[,230],1858:[,220],1859:[,230],1860:[,220],1861:[,230],1862:[,220],1863:[,230],1864:[,220],1865:[,230],1866:[,230],2027:[,230],2028:[,230],2029:[,230],2030:[,230],2031:[,230],2032:[,230],2033:[,230],2034:[,220],2035:[,230]},
13848 2048:{2070:[,230],2071:[,230],2072:[,230],2073:[,230],2075:[,230],2076:[,230],2077:[,230],2078:[,230],2079:[,230],2080:[,230],2081:[,230],2082:[,230],2083:[,230],2085:[,230],2086:[,230],2087:[,230],2089:[,230],2090:[,230],2091:[,230],2092:[,230],2093:[,230],2137:[,220],2138:[,220],2139:[,220],2276:[,230],2277:[,230],2278:[,220],2279:[,230],2280:[,230],2281:[,220],2282:[,230],2283:[,230],2284:[,230],2285:[,220],2286:[,220],2287:[,220],2288:[,27],2289:[,28],2290:[,29],2291:[,230],2292:[,230],2293:[,230],2294:[,220],2295:[,230],2296:[,230],2297:[,220],2298:[,220],2299:[,230],2300:[,230],2301:[,230],2302:[,230],2303:[,230]},
13849 2304:{2344:[,,{2364:2345}],2345:[[2344,2364]],2352:[,,{2364:2353}],2353:[[2352,2364]],2355:[,,{2364:2356}],2356:[[2355,2364]],2364:[,7],2381:[,9],2385:[,230],2386:[,220],2387:[,230],2388:[,230],2392:[[2325,2364],512],2393:[[2326,2364],512],2394:[[2327,2364],512],2395:[[2332,2364],512],2396:[[2337,2364],512],2397:[[2338,2364],512],2398:[[2347,2364],512],2399:[[2351,2364],512],2492:[,7],2503:[,,{2494:2507,2519:2508}],2507:[[2503,2494]],2508:[[2503,2519]],2509:[,9],2524:[[2465,2492],512],2525:[[2466,2492],512],2527:[[2479,2492],512]},
13850 2560:{2611:[[2610,2620],512],2614:[[2616,2620],512],2620:[,7],2637:[,9],2649:[[2582,2620],512],2650:[[2583,2620],512],2651:[[2588,2620],512],2654:[[2603,2620],512],2748:[,7],2765:[,9],68109:[,220],68111:[,230],68152:[,230],68153:[,1],68154:[,220],68159:[,9],68325:[,230],68326:[,220]},
13851 2816:{2876:[,7],2887:[,,{2878:2891,2902:2888,2903:2892}],2888:[[2887,2902]],2891:[[2887,2878]],2892:[[2887,2903]],2893:[,9],2908:[[2849,2876],512],2909:[[2850,2876],512],2962:[,,{3031:2964}],2964:[[2962,3031]],3014:[,,{3006:3018,3031:3020}],3015:[,,{3006:3019}],3018:[[3014,3006]],3019:[[3015,3006]],3020:[[3014,3031]],3021:[,9]},
13852 3072:{3142:[,,{3158:3144}],3144:[[3142,3158]],3149:[,9],3157:[,84],3158:[,91],3260:[,7],3263:[,,{3285:3264}],3264:[[3263,3285]],3270:[,,{3266:3274,3285:3271,3286:3272}],3271:[[3270,3285]],3272:[[3270,3286]],3274:[[3270,3266],,{3285:3275}],3275:[[3274,3285]],3277:[,9]},
13853 3328:{3398:[,,{3390:3402,3415:3404}],3399:[,,{3390:3403}],3402:[[3398,3390]],3403:[[3399,3390]],3404:[[3398,3415]],3405:[,9],3530:[,9],3545:[,,{3530:3546,3535:3548,3551:3550}],3546:[[3545,3530]],3548:[[3545,3535],,{3530:3549}],3549:[[3548,3530]],3550:[[3545,3551]]},
13854 3584:{3635:[[3661,3634],256],3640:[,103],3641:[,103],3642:[,9],3656:[,107],3657:[,107],3658:[,107],3659:[,107],3763:[[3789,3762],256],3768:[,118],3769:[,118],3784:[,122],3785:[,122],3786:[,122],3787:[,122],3804:[[3755,3737],256],3805:[[3755,3745],256]},
13855 3840:{3852:[[3851],256],3864:[,220],3865:[,220],3893:[,220],3895:[,220],3897:[,216],3907:[[3906,4023],512],3917:[[3916,4023],512],3922:[[3921,4023],512],3927:[[3926,4023],512],3932:[[3931,4023],512],3945:[[3904,4021],512],3953:[,129],3954:[,130],3955:[[3953,3954],512],3956:[,132],3957:[[3953,3956],512],3958:[[4018,3968],512],3959:[[4018,3969],256],3960:[[4019,3968],512],3961:[[4019,3969],256],3962:[,130],3963:[,130],3964:[,130],3965:[,130],3968:[,130],3969:[[3953,3968],512],3970:[,230],3971:[,230],3972:[,9],3974:[,230],3975:[,230],3987:[[3986,4023],512],3997:[[3996,4023],512],4002:[[4001,4023],512],4007:[[4006,4023],512],4012:[[4011,4023],512],4025:[[3984,4021],512],4038:[,220]},
13856 4096:{4133:[,,{4142:4134}],4134:[[4133,4142]],4151:[,7],4153:[,9],4154:[,9],4237:[,220],4348:[[4316],256],69702:[,9],69759:[,9],69785:[,,{69818:69786}],69786:[[69785,69818]],69787:[,,{69818:69788}],69788:[[69787,69818]],69797:[,,{69818:69803}],69803:[[69797,69818]],69817:[,9],69818:[,7]},
13857 4352:{69888:[,230],69889:[,230],69890:[,230],69934:[[69937,69927]],69935:[[69938,69927]],69937:[,,{69927:69934}],69938:[,,{69927:69935}],69939:[,9],69940:[,9],70003:[,7],70080:[,9]},
13858 4608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
13859 4864:{4957:[,230],4958:[,230],4959:[,230],70460:[,7],70471:[,,{70462:70475,70487:70476}],70475:[[70471,70462]],70476:[[70471,70487]],70477:[,9],70502:[,230],70503:[,230],70504:[,230],70505:[,230],70506:[,230],70507:[,230],70508:[,230],70512:[,230],70513:[,230],70514:[,230],70515:[,230],70516:[,230]},
13860 5120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
13861 5376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
13862 5632:{71231:[,9],71350:[,9],71351:[,7]},
13863 5888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
13864 6144:{6313:[,228]},
13865 6400:{6457:[,222],6458:[,230],6459:[,220]},
13866 6656:{6679:[,230],6680:[,220],6752:[,9],6773:[,230],6774:[,230],6775:[,230],6776:[,230],6777:[,230],6778:[,230],6779:[,230],6780:[,230],6783:[,220],6832:[,230],6833:[,230],6834:[,230],6835:[,230],6836:[,230],6837:[,220],6838:[,220],6839:[,220],6840:[,220],6841:[,220],6842:[,220],6843:[,230],6844:[,230],6845:[,220]},
13867 6912:{6917:[,,{6965:6918}],6918:[[6917,6965]],6919:[,,{6965:6920}],6920:[[6919,6965]],6921:[,,{6965:6922}],6922:[[6921,6965]],6923:[,,{6965:6924}],6924:[[6923,6965]],6925:[,,{6965:6926}],6926:[[6925,6965]],6929:[,,{6965:6930}],6930:[[6929,6965]],6964:[,7],6970:[,,{6965:6971}],6971:[[6970,6965]],6972:[,,{6965:6973}],6973:[[6972,6965]],6974:[,,{6965:6976}],6975:[,,{6965:6977}],6976:[[6974,6965]],6977:[[6975,6965]],6978:[,,{6965:6979}],6979:[[6978,6965]],6980:[,9],7019:[,230],7020:[,220],7021:[,230],7022:[,230],7023:[,230],7024:[,230],7025:[,230],7026:[,230],7027:[,230],7082:[,9],7083:[,9],7142:[,7],7154:[,9],7155:[,9]},
13868 7168:{7223:[,7],7376:[,230],7377:[,230],7378:[,230],7380:[,1],7381:[,220],7382:[,220],7383:[,220],7384:[,220],7385:[,220],7386:[,230],7387:[,230],7388:[,220],7389:[,220],7390:[,220],7391:[,220],7392:[,230],7394:[,1],7395:[,1],7396:[,1],7397:[,1],7398:[,1],7399:[,1],7400:[,1],7405:[,220],7412:[,230],7416:[,230],7417:[,230]},
13869 7424:{7468:[[65],256],7469:[[198],256],7470:[[66],256],7472:[[68],256],7473:[[69],256],7474:[[398],256],7475:[[71],256],7476:[[72],256],7477:[[73],256],7478:[[74],256],7479:[[75],256],7480:[[76],256],7481:[[77],256],7482:[[78],256],7484:[[79],256],7485:[[546],256],7486:[[80],256],7487:[[82],256],7488:[[84],256],7489:[[85],256],7490:[[87],256],7491:[[97],256],7492:[[592],256],7493:[[593],256],7494:[[7426],256],7495:[[98],256],7496:[[100],256],7497:[[101],256],7498:[[601],256],7499:[[603],256],7500:[[604],256],7501:[[103],256],7503:[[107],256],7504:[[109],256],7505:[[331],256],7506:[[111],256],7507:[[596],256],7508:[[7446],256],7509:[[7447],256],7510:[[112],256],7511:[[116],256],7512:[[117],256],7513:[[7453],256],7514:[[623],256],7515:[[118],256],7516:[[7461],256],7517:[[946],256],7518:[[947],256],7519:[[948],256],7520:[[966],256],7521:[[967],256],7522:[[105],256],7523:[[114],256],7524:[[117],256],7525:[[118],256],7526:[[946],256],7527:[[947],256],7528:[[961],256],7529:[[966],256],7530:[[967],256],7544:[[1085],256],7579:[[594],256],7580:[[99],256],7581:[[597],256],7582:[[240],256],7583:[[604],256],7584:[[102],256],7585:[[607],256],7586:[[609],256],7587:[[613],256],7588:[[616],256],7589:[[617],256],7590:[[618],256],7591:[[7547],256],7592:[[669],256],7593:[[621],256],7594:[[7557],256],7595:[[671],256],7596:[[625],256],7597:[[624],256],7598:[[626],256],7599:[[627],256],7600:[[628],256],7601:[[629],256],7602:[[632],256],7603:[[642],256],7604:[[643],256],7605:[[427],256],7606:[[649],256],7607:[[650],256],7608:[[7452],256],7609:[[651],256],7610:[[652],256],7611:[[122],256],7612:[[656],256],7613:[[657],256],7614:[[658],256],7615:[[952],256],7616:[,230],7617:[,230],7618:[,220],7619:[,230],7620:[,230],7621:[,230],7622:[,230],7623:[,230],7624:[,230],7625:[,230],7626:[,220],7627:[,230],7628:[,230],7629:[,234],7630:[,214],7631:[,220],7632:[,202],7633:[,230],7634:[,230],7635:[,230],7636:[,230],7637:[,230],7638:[,230],7639:[,230],7640:[,230],7641:[,230],7642:[,230],7643:[,230],7644:[,230],7645:[,230],7646:[,230],7647:[,230],7648:[,230],7649:[,230],7650:[,230],7651:[,230],7652:[,230],7653:[,230],7654:[,230],7655:[,230],7656:[,230],7657:[,230],7658:[,230],7659:[,230],7660:[,230],7661:[,230],7662:[,230],7663:[,230],7664:[,230],7665:[,230],7666:[,230],7667:[,230],7668:[,230],7669:[,230],7676:[,233],7677:[,220],7678:[,230],7679:[,220]},
13870 7680:{7680:[[65,805]],7681:[[97,805]],7682:[[66,775]],7683:[[98,775]],7684:[[66,803]],7685:[[98,803]],7686:[[66,817]],7687:[[98,817]],7688:[[199,769]],7689:[[231,769]],7690:[[68,775]],7691:[[100,775]],7692:[[68,803]],7693:[[100,803]],7694:[[68,817]],7695:[[100,817]],7696:[[68,807]],7697:[[100,807]],7698:[[68,813]],7699:[[100,813]],7700:[[274,768]],7701:[[275,768]],7702:[[274,769]],7703:[[275,769]],7704:[[69,813]],7705:[[101,813]],7706:[[69,816]],7707:[[101,816]],7708:[[552,774]],7709:[[553,774]],7710:[[70,775]],7711:[[102,775]],7712:[[71,772]],7713:[[103,772]],7714:[[72,775]],7715:[[104,775]],7716:[[72,803]],7717:[[104,803]],7718:[[72,776]],7719:[[104,776]],7720:[[72,807]],7721:[[104,807]],7722:[[72,814]],7723:[[104,814]],7724:[[73,816]],7725:[[105,816]],7726:[[207,769]],7727:[[239,769]],7728:[[75,769]],7729:[[107,769]],7730:[[75,803]],7731:[[107,803]],7732:[[75,817]],7733:[[107,817]],7734:[[76,803],,{772:7736}],7735:[[108,803],,{772:7737}],7736:[[7734,772]],7737:[[7735,772]],7738:[[76,817]],7739:[[108,817]],7740:[[76,813]],7741:[[108,813]],7742:[[77,769]],7743:[[109,769]],7744:[[77,775]],7745:[[109,775]],7746:[[77,803]],7747:[[109,803]],7748:[[78,775]],7749:[[110,775]],7750:[[78,803]],7751:[[110,803]],7752:[[78,817]],7753:[[110,817]],7754:[[78,813]],7755:[[110,813]],7756:[[213,769]],7757:[[245,769]],7758:[[213,776]],7759:[[245,776]],7760:[[332,768]],7761:[[333,768]],7762:[[332,769]],7763:[[333,769]],7764:[[80,769]],7765:[[112,769]],7766:[[80,775]],7767:[[112,775]],7768:[[82,775]],7769:[[114,775]],7770:[[82,803],,{772:7772}],7771:[[114,803],,{772:7773}],7772:[[7770,772]],7773:[[7771,772]],7774:[[82,817]],7775:[[114,817]],7776:[[83,775]],7777:[[115,775]],7778:[[83,803],,{775:7784}],7779:[[115,803],,{775:7785}],7780:[[346,775]],7781:[[347,775]],7782:[[352,775]],7783:[[353,775]],7784:[[7778,775]],7785:[[7779,775]],7786:[[84,775]],7787:[[116,775]],7788:[[84,803]],7789:[[116,803]],7790:[[84,817]],7791:[[116,817]],7792:[[84,813]],7793:[[116,813]],7794:[[85,804]],7795:[[117,804]],7796:[[85,816]],7797:[[117,816]],7798:[[85,813]],7799:[[117,813]],7800:[[360,769]],7801:[[361,769]],7802:[[362,776]],7803:[[363,776]],7804:[[86,771]],7805:[[118,771]],7806:[[86,803]],7807:[[118,803]],7808:[[87,768]],7809:[[119,768]],7810:[[87,769]],7811:[[119,769]],7812:[[87,776]],7813:[[119,776]],7814:[[87,775]],7815:[[119,775]],7816:[[87,803]],7817:[[119,803]],7818:[[88,775]],7819:[[120,775]],7820:[[88,776]],7821:[[120,776]],7822:[[89,775]],7823:[[121,775]],7824:[[90,770]],7825:[[122,770]],7826:[[90,803]],7827:[[122,803]],7828:[[90,817]],7829:[[122,817]],7830:[[104,817]],7831:[[116,776]],7832:[[119,778]],7833:[[121,778]],7834:[[97,702],256],7835:[[383,775]],7840:[[65,803],,{770:7852,774:7862}],7841:[[97,803],,{770:7853,774:7863}],7842:[[65,777]],7843:[[97,777]],7844:[[194,769]],7845:[[226,769]],7846:[[194,768]],7847:[[226,768]],7848:[[194,777]],7849:[[226,777]],7850:[[194,771]],7851:[[226,771]],7852:[[7840,770]],7853:[[7841,770]],7854:[[258,769]],7855:[[259,769]],7856:[[258,768]],7857:[[259,768]],7858:[[258,777]],7859:[[259,777]],7860:[[258,771]],7861:[[259,771]],7862:[[7840,774]],7863:[[7841,774]],7864:[[69,803],,{770:7878}],7865:[[101,803],,{770:7879}],7866:[[69,777]],7867:[[101,777]],7868:[[69,771]],7869:[[101,771]],7870:[[202,769]],7871:[[234,769]],7872:[[202,768]],7873:[[234,768]],7874:[[202,777]],7875:[[234,777]],7876:[[202,771]],7877:[[234,771]],7878:[[7864,770]],7879:[[7865,770]],7880:[[73,777]],7881:[[105,777]],7882:[[73,803]],7883:[[105,803]],7884:[[79,803],,{770:7896}],7885:[[111,803],,{770:7897}],7886:[[79,777]],7887:[[111,777]],7888:[[212,769]],7889:[[244,769]],7890:[[212,768]],7891:[[244,768]],7892:[[212,777]],7893:[[244,777]],7894:[[212,771]],7895:[[244,771]],7896:[[7884,770]],7897:[[7885,770]],7898:[[416,769]],7899:[[417,769]],7900:[[416,768]],7901:[[417,768]],7902:[[416,777]],7903:[[417,777]],7904:[[416,771]],7905:[[417,771]],7906:[[416,803]],7907:[[417,803]],7908:[[85,803]],7909:[[117,803]],7910:[[85,777]],7911:[[117,777]],7912:[[431,769]],7913:[[432,769]],7914:[[431,768]],7915:[[432,768]],7916:[[431,777]],7917:[[432,777]],7918:[[431,771]],7919:[[432,771]],7920:[[431,803]],7921:[[432,803]],7922:[[89,768]],7923:[[121,768]],7924:[[89,803]],7925:[[121,803]],7926:[[89,777]],7927:[[121,777]],7928:[[89,771]],7929:[[121,771]]},
13871 7936:{7936:[[945,787],,{768:7938,769:7940,834:7942,837:8064}],7937:[[945,788],,{768:7939,769:7941,834:7943,837:8065}],7938:[[7936,768],,{837:8066}],7939:[[7937,768],,{837:8067}],7940:[[7936,769],,{837:8068}],7941:[[7937,769],,{837:8069}],7942:[[7936,834],,{837:8070}],7943:[[7937,834],,{837:8071}],7944:[[913,787],,{768:7946,769:7948,834:7950,837:8072}],7945:[[913,788],,{768:7947,769:7949,834:7951,837:8073}],7946:[[7944,768],,{837:8074}],7947:[[7945,768],,{837:8075}],7948:[[7944,769],,{837:8076}],7949:[[7945,769],,{837:8077}],7950:[[7944,834],,{837:8078}],7951:[[7945,834],,{837:8079}],7952:[[949,787],,{768:7954,769:7956}],7953:[[949,788],,{768:7955,769:7957}],7954:[[7952,768]],7955:[[7953,768]],7956:[[7952,769]],7957:[[7953,769]],7960:[[917,787],,{768:7962,769:7964}],7961:[[917,788],,{768:7963,769:7965}],7962:[[7960,768]],7963:[[7961,768]],7964:[[7960,769]],7965:[[7961,769]],7968:[[951,787],,{768:7970,769:7972,834:7974,837:8080}],7969:[[951,788],,{768:7971,769:7973,834:7975,837:8081}],7970:[[7968,768],,{837:8082}],7971:[[7969,768],,{837:8083}],7972:[[7968,769],,{837:8084}],7973:[[7969,769],,{837:8085}],7974:[[7968,834],,{837:8086}],7975:[[7969,834],,{837:8087}],7976:[[919,787],,{768:7978,769:7980,834:7982,837:8088}],7977:[[919,788],,{768:7979,769:7981,834:7983,837:8089}],7978:[[7976,768],,{837:8090}],7979:[[7977,768],,{837:8091}],7980:[[7976,769],,{837:8092}],7981:[[7977,769],,{837:8093}],7982:[[7976,834],,{837:8094}],7983:[[7977,834],,{837:8095}],7984:[[953,787],,{768:7986,769:7988,834:7990}],7985:[[953,788],,{768:7987,769:7989,834:7991}],7986:[[7984,768]],7987:[[7985,768]],7988:[[7984,769]],7989:[[7985,769]],7990:[[7984,834]],7991:[[7985,834]],7992:[[921,787],,{768:7994,769:7996,834:7998}],7993:[[921,788],,{768:7995,769:7997,834:7999}],7994:[[7992,768]],7995:[[7993,768]],7996:[[7992,769]],7997:[[7993,769]],7998:[[7992,834]],7999:[[7993,834]],8000:[[959,787],,{768:8002,769:8004}],8001:[[959,788],,{768:8003,769:8005}],8002:[[8000,768]],8003:[[8001,768]],8004:[[8000,769]],8005:[[8001,769]],8008:[[927,787],,{768:8010,769:8012}],8009:[[927,788],,{768:8011,769:8013}],8010:[[8008,768]],8011:[[8009,768]],8012:[[8008,769]],8013:[[8009,769]],8016:[[965,787],,{768:8018,769:8020,834:8022}],8017:[[965,788],,{768:8019,769:8021,834:8023}],8018:[[8016,768]],8019:[[8017,768]],8020:[[8016,769]],8021:[[8017,769]],8022:[[8016,834]],8023:[[8017,834]],8025:[[933,788],,{768:8027,769:8029,834:8031}],8027:[[8025,768]],8029:[[8025,769]],8031:[[8025,834]],8032:[[969,787],,{768:8034,769:8036,834:8038,837:8096}],8033:[[969,788],,{768:8035,769:8037,834:8039,837:8097}],8034:[[8032,768],,{837:8098}],8035:[[8033,768],,{837:8099}],8036:[[8032,769],,{837:8100}],8037:[[8033,769],,{837:8101}],8038:[[8032,834],,{837:8102}],8039:[[8033,834],,{837:8103}],8040:[[937,787],,{768:8042,769:8044,834:8046,837:8104}],8041:[[937,788],,{768:8043,769:8045,834:8047,837:8105}],8042:[[8040,768],,{837:8106}],8043:[[8041,768],,{837:8107}],8044:[[8040,769],,{837:8108}],8045:[[8041,769],,{837:8109}],8046:[[8040,834],,{837:8110}],8047:[[8041,834],,{837:8111}],8048:[[945,768],,{837:8114}],8049:[[940]],8050:[[949,768]],8051:[[941]],8052:[[951,768],,{837:8130}],8053:[[942]],8054:[[953,768]],8055:[[943]],8056:[[959,768]],8057:[[972]],8058:[[965,768]],8059:[[973]],8060:[[969,768],,{837:8178}],8061:[[974]],8064:[[7936,837]],8065:[[7937,837]],8066:[[7938,837]],8067:[[7939,837]],8068:[[7940,837]],8069:[[7941,837]],8070:[[7942,837]],8071:[[7943,837]],8072:[[7944,837]],8073:[[7945,837]],8074:[[7946,837]],8075:[[7947,837]],8076:[[7948,837]],8077:[[7949,837]],8078:[[7950,837]],8079:[[7951,837]],8080:[[7968,837]],8081:[[7969,837]],8082:[[7970,837]],8083:[[7971,837]],8084:[[7972,837]],8085:[[7973,837]],8086:[[7974,837]],8087:[[7975,837]],8088:[[7976,837]],8089:[[7977,837]],8090:[[7978,837]],8091:[[7979,837]],8092:[[7980,837]],8093:[[7981,837]],8094:[[7982,837]],8095:[[7983,837]],8096:[[8032,837]],8097:[[8033,837]],8098:[[8034,837]],8099:[[8035,837]],8100:[[8036,837]],8101:[[8037,837]],8102:[[8038,837]],8103:[[8039,837]],8104:[[8040,837]],8105:[[8041,837]],8106:[[8042,837]],8107:[[8043,837]],8108:[[8044,837]],8109:[[8045,837]],8110:[[8046,837]],8111:[[8047,837]],8112:[[945,774]],8113:[[945,772]],8114:[[8048,837]],8115:[[945,837]],8116:[[940,837]],8118:[[945,834],,{837:8119}],8119:[[8118,837]],8120:[[913,774]],8121:[[913,772]],8122:[[913,768]],8123:[[902]],8124:[[913,837]],8125:[[32,787],256],8126:[[953]],8127:[[32,787],256,{768:8141,769:8142,834:8143}],8128:[[32,834],256],8129:[[168,834]],8130:[[8052,837]],8131:[[951,837]],8132:[[942,837]],8134:[[951,834],,{837:8135}],8135:[[8134,837]],8136:[[917,768]],8137:[[904]],8138:[[919,768]],8139:[[905]],8140:[[919,837]],8141:[[8127,768]],8142:[[8127,769]],8143:[[8127,834]],8144:[[953,774]],8145:[[953,772]],8146:[[970,768]],8147:[[912]],8150:[[953,834]],8151:[[970,834]],8152:[[921,774]],8153:[[921,772]],8154:[[921,768]],8155:[[906]],8157:[[8190,768]],8158:[[8190,769]],8159:[[8190,834]],8160:[[965,774]],8161:[[965,772]],8162:[[971,768]],8163:[[944]],8164:[[961,787]],8165:[[961,788]],8166:[[965,834]],8167:[[971,834]],8168:[[933,774]],8169:[[933,772]],8170:[[933,768]],8171:[[910]],8172:[[929,788]],8173:[[168,768]],8174:[[901]],8175:[[96]],8178:[[8060,837]],8179:[[969,837]],8180:[[974,837]],8182:[[969,834],,{837:8183}],8183:[[8182,837]],8184:[[927,768]],8185:[[908]],8186:[[937,768]],8187:[[911]],8188:[[937,837]],8189:[[180]],8190:[[32,788],256,{768:8157,769:8158,834:8159}]},
13872 8192:{8192:[[8194]],8193:[[8195]],8194:[[32],256],8195:[[32],256],8196:[[32],256],8197:[[32],256],8198:[[32],256],8199:[[32],256],8200:[[32],256],8201:[[32],256],8202:[[32],256],8209:[[8208],256],8215:[[32,819],256],8228:[[46],256],8229:[[46,46],256],8230:[[46,46,46],256],8239:[[32],256],8243:[[8242,8242],256],8244:[[8242,8242,8242],256],8246:[[8245,8245],256],8247:[[8245,8245,8245],256],8252:[[33,33],256],8254:[[32,773],256],8263:[[63,63],256],8264:[[63,33],256],8265:[[33,63],256],8279:[[8242,8242,8242,8242],256],8287:[[32],256],8304:[[48],256],8305:[[105],256],8308:[[52],256],8309:[[53],256],8310:[[54],256],8311:[[55],256],8312:[[56],256],8313:[[57],256],8314:[[43],256],8315:[[8722],256],8316:[[61],256],8317:[[40],256],8318:[[41],256],8319:[[110],256],8320:[[48],256],8321:[[49],256],8322:[[50],256],8323:[[51],256],8324:[[52],256],8325:[[53],256],8326:[[54],256],8327:[[55],256],8328:[[56],256],8329:[[57],256],8330:[[43],256],8331:[[8722],256],8332:[[61],256],8333:[[40],256],8334:[[41],256],8336:[[97],256],8337:[[101],256],8338:[[111],256],8339:[[120],256],8340:[[601],256],8341:[[104],256],8342:[[107],256],8343:[[108],256],8344:[[109],256],8345:[[110],256],8346:[[112],256],8347:[[115],256],8348:[[116],256],8360:[[82,115],256],8400:[,230],8401:[,230],8402:[,1],8403:[,1],8404:[,230],8405:[,230],8406:[,230],8407:[,230],8408:[,1],8409:[,1],8410:[,1],8411:[,230],8412:[,230],8417:[,230],8421:[,1],8422:[,1],8423:[,230],8424:[,220],8425:[,230],8426:[,1],8427:[,1],8428:[,220],8429:[,220],8430:[,220],8431:[,220],8432:[,230]},
13873 8448:{8448:[[97,47,99],256],8449:[[97,47,115],256],8450:[[67],256],8451:[[176,67],256],8453:[[99,47,111],256],8454:[[99,47,117],256],8455:[[400],256],8457:[[176,70],256],8458:[[103],256],8459:[[72],256],8460:[[72],256],8461:[[72],256],8462:[[104],256],8463:[[295],256],8464:[[73],256],8465:[[73],256],8466:[[76],256],8467:[[108],256],8469:[[78],256],8470:[[78,111],256],8473:[[80],256],8474:[[81],256],8475:[[82],256],8476:[[82],256],8477:[[82],256],8480:[[83,77],256],8481:[[84,69,76],256],8482:[[84,77],256],8484:[[90],256],8486:[[937]],8488:[[90],256],8490:[[75]],8491:[[197]],8492:[[66],256],8493:[[67],256],8495:[[101],256],8496:[[69],256],8497:[[70],256],8499:[[77],256],8500:[[111],256],8501:[[1488],256],8502:[[1489],256],8503:[[1490],256],8504:[[1491],256],8505:[[105],256],8507:[[70,65,88],256],8508:[[960],256],8509:[[947],256],8510:[[915],256],8511:[[928],256],8512:[[8721],256],8517:[[68],256],8518:[[100],256],8519:[[101],256],8520:[[105],256],8521:[[106],256],8528:[[49,8260,55],256],8529:[[49,8260,57],256],8530:[[49,8260,49,48],256],8531:[[49,8260,51],256],8532:[[50,8260,51],256],8533:[[49,8260,53],256],8534:[[50,8260,53],256],8535:[[51,8260,53],256],8536:[[52,8260,53],256],8537:[[49,8260,54],256],8538:[[53,8260,54],256],8539:[[49,8260,56],256],8540:[[51,8260,56],256],8541:[[53,8260,56],256],8542:[[55,8260,56],256],8543:[[49,8260],256],8544:[[73],256],8545:[[73,73],256],8546:[[73,73,73],256],8547:[[73,86],256],8548:[[86],256],8549:[[86,73],256],8550:[[86,73,73],256],8551:[[86,73,73,73],256],8552:[[73,88],256],8553:[[88],256],8554:[[88,73],256],8555:[[88,73,73],256],8556:[[76],256],8557:[[67],256],8558:[[68],256],8559:[[77],256],8560:[[105],256],8561:[[105,105],256],8562:[[105,105,105],256],8563:[[105,118],256],8564:[[118],256],8565:[[118,105],256],8566:[[118,105,105],256],8567:[[118,105,105,105],256],8568:[[105,120],256],8569:[[120],256],8570:[[120,105],256],8571:[[120,105,105],256],8572:[[108],256],8573:[[99],256],8574:[[100],256],8575:[[109],256],8585:[[48,8260,51],256],8592:[,,{824:8602}],8594:[,,{824:8603}],8596:[,,{824:8622}],8602:[[8592,824]],8603:[[8594,824]],8622:[[8596,824]],8653:[[8656,824]],8654:[[8660,824]],8655:[[8658,824]],8656:[,,{824:8653}],8658:[,,{824:8655}],8660:[,,{824:8654}]},
13874 8704:{8707:[,,{824:8708}],8708:[[8707,824]],8712:[,,{824:8713}],8713:[[8712,824]],8715:[,,{824:8716}],8716:[[8715,824]],8739:[,,{824:8740}],8740:[[8739,824]],8741:[,,{824:8742}],8742:[[8741,824]],8748:[[8747,8747],256],8749:[[8747,8747,8747],256],8751:[[8750,8750],256],8752:[[8750,8750,8750],256],8764:[,,{824:8769}],8769:[[8764,824]],8771:[,,{824:8772}],8772:[[8771,824]],8773:[,,{824:8775}],8775:[[8773,824]],8776:[,,{824:8777}],8777:[[8776,824]],8781:[,,{824:8813}],8800:[[61,824]],8801:[,,{824:8802}],8802:[[8801,824]],8804:[,,{824:8816}],8805:[,,{824:8817}],8813:[[8781,824]],8814:[[60,824]],8815:[[62,824]],8816:[[8804,824]],8817:[[8805,824]],8818:[,,{824:8820}],8819:[,,{824:8821}],8820:[[8818,824]],8821:[[8819,824]],8822:[,,{824:8824}],8823:[,,{824:8825}],8824:[[8822,824]],8825:[[8823,824]],8826:[,,{824:8832}],8827:[,,{824:8833}],8828:[,,{824:8928}],8829:[,,{824:8929}],8832:[[8826,824]],8833:[[8827,824]],8834:[,,{824:8836}],8835:[,,{824:8837}],8836:[[8834,824]],8837:[[8835,824]],8838:[,,{824:8840}],8839:[,,{824:8841}],8840:[[8838,824]],8841:[[8839,824]],8849:[,,{824:8930}],8850:[,,{824:8931}],8866:[,,{824:8876}],8872:[,,{824:8877}],8873:[,,{824:8878}],8875:[,,{824:8879}],8876:[[8866,824]],8877:[[8872,824]],8878:[[8873,824]],8879:[[8875,824]],8882:[,,{824:8938}],8883:[,,{824:8939}],8884:[,,{824:8940}],8885:[,,{824:8941}],8928:[[8828,824]],8929:[[8829,824]],8930:[[8849,824]],8931:[[8850,824]],8938:[[8882,824]],8939:[[8883,824]],8940:[[8884,824]],8941:[[8885,824]]},
13875 8960:{9001:[[12296]],9002:[[12297]]},
13876 9216:{9312:[[49],256],9313:[[50],256],9314:[[51],256],9315:[[52],256],9316:[[53],256],9317:[[54],256],9318:[[55],256],9319:[[56],256],9320:[[57],256],9321:[[49,48],256],9322:[[49,49],256],9323:[[49,50],256],9324:[[49,51],256],9325:[[49,52],256],9326:[[49,53],256],9327:[[49,54],256],9328:[[49,55],256],9329:[[49,56],256],9330:[[49,57],256],9331:[[50,48],256],9332:[[40,49,41],256],9333:[[40,50,41],256],9334:[[40,51,41],256],9335:[[40,52,41],256],9336:[[40,53,41],256],9337:[[40,54,41],256],9338:[[40,55,41],256],9339:[[40,56,41],256],9340:[[40,57,41],256],9341:[[40,49,48,41],256],9342:[[40,49,49,41],256],9343:[[40,49,50,41],256],9344:[[40,49,51,41],256],9345:[[40,49,52,41],256],9346:[[40,49,53,41],256],9347:[[40,49,54,41],256],9348:[[40,49,55,41],256],9349:[[40,49,56,41],256],9350:[[40,49,57,41],256],9351:[[40,50,48,41],256],9352:[[49,46],256],9353:[[50,46],256],9354:[[51,46],256],9355:[[52,46],256],9356:[[53,46],256],9357:[[54,46],256],9358:[[55,46],256],9359:[[56,46],256],9360:[[57,46],256],9361:[[49,48,46],256],9362:[[49,49,46],256],9363:[[49,50,46],256],9364:[[49,51,46],256],9365:[[49,52,46],256],9366:[[49,53,46],256],9367:[[49,54,46],256],9368:[[49,55,46],256],9369:[[49,56,46],256],9370:[[49,57,46],256],9371:[[50,48,46],256],9372:[[40,97,41],256],9373:[[40,98,41],256],9374:[[40,99,41],256],9375:[[40,100,41],256],9376:[[40,101,41],256],9377:[[40,102,41],256],9378:[[40,103,41],256],9379:[[40,104,41],256],9380:[[40,105,41],256],9381:[[40,106,41],256],9382:[[40,107,41],256],9383:[[40,108,41],256],9384:[[40,109,41],256],9385:[[40,110,41],256],9386:[[40,111,41],256],9387:[[40,112,41],256],9388:[[40,113,41],256],9389:[[40,114,41],256],9390:[[40,115,41],256],9391:[[40,116,41],256],9392:[[40,117,41],256],9393:[[40,118,41],256],9394:[[40,119,41],256],9395:[[40,120,41],256],9396:[[40,121,41],256],9397:[[40,122,41],256],9398:[[65],256],9399:[[66],256],9400:[[67],256],9401:[[68],256],9402:[[69],256],9403:[[70],256],9404:[[71],256],9405:[[72],256],9406:[[73],256],9407:[[74],256],9408:[[75],256],9409:[[76],256],9410:[[77],256],9411:[[78],256],9412:[[79],256],9413:[[80],256],9414:[[81],256],9415:[[82],256],9416:[[83],256],9417:[[84],256],9418:[[85],256],9419:[[86],256],9420:[[87],256],9421:[[88],256],9422:[[89],256],9423:[[90],256],9424:[[97],256],9425:[[98],256],9426:[[99],256],9427:[[100],256],9428:[[101],256],9429:[[102],256],9430:[[103],256],9431:[[104],256],9432:[[105],256],9433:[[106],256],9434:[[107],256],9435:[[108],256],9436:[[109],256],9437:[[110],256],9438:[[111],256],9439:[[112],256],9440:[[113],256],9441:[[114],256],9442:[[115],256],9443:[[116],256],9444:[[117],256],9445:[[118],256],9446:[[119],256],9447:[[120],256],9448:[[121],256],9449:[[122],256],9450:[[48],256]},
13877 10752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
13878 11264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
13879 11520:{11631:[[11617],256],11647:[,9],11744:[,230],11745:[,230],11746:[,230],11747:[,230],11748:[,230],11749:[,230],11750:[,230],11751:[,230],11752:[,230],11753:[,230],11754:[,230],11755:[,230],11756:[,230],11757:[,230],11758:[,230],11759:[,230],11760:[,230],11761:[,230],11762:[,230],11763:[,230],11764:[,230],11765:[,230],11766:[,230],11767:[,230],11768:[,230],11769:[,230],11770:[,230],11771:[,230],11772:[,230],11773:[,230],11774:[,230],11775:[,230]},
13880 11776:{11935:[[27597],256],12019:[[40863],256]},
13881 12032:{12032:[[19968],256],12033:[[20008],256],12034:[[20022],256],12035:[[20031],256],12036:[[20057],256],12037:[[20101],256],12038:[[20108],256],12039:[[20128],256],12040:[[20154],256],12041:[[20799],256],12042:[[20837],256],12043:[[20843],256],12044:[[20866],256],12045:[[20886],256],12046:[[20907],256],12047:[[20960],256],12048:[[20981],256],12049:[[20992],256],12050:[[21147],256],12051:[[21241],256],12052:[[21269],256],12053:[[21274],256],12054:[[21304],256],12055:[[21313],256],12056:[[21340],256],12057:[[21353],256],12058:[[21378],256],12059:[[21430],256],12060:[[21448],256],12061:[[21475],256],12062:[[22231],256],12063:[[22303],256],12064:[[22763],256],12065:[[22786],256],12066:[[22794],256],12067:[[22805],256],12068:[[22823],256],12069:[[22899],256],12070:[[23376],256],12071:[[23424],256],12072:[[23544],256],12073:[[23567],256],12074:[[23586],256],12075:[[23608],256],12076:[[23662],256],12077:[[23665],256],12078:[[24027],256],12079:[[24037],256],12080:[[24049],256],12081:[[24062],256],12082:[[24178],256],12083:[[24186],256],12084:[[24191],256],12085:[[24308],256],12086:[[24318],256],12087:[[24331],256],12088:[[24339],256],12089:[[24400],256],12090:[[24417],256],12091:[[24435],256],12092:[[24515],256],12093:[[25096],256],12094:[[25142],256],12095:[[25163],256],12096:[[25903],256],12097:[[25908],256],12098:[[25991],256],12099:[[26007],256],12100:[[26020],256],12101:[[26041],256],12102:[[26080],256],12103:[[26085],256],12104:[[26352],256],12105:[[26376],256],12106:[[26408],256],12107:[[27424],256],12108:[[27490],256],12109:[[27513],256],12110:[[27571],256],12111:[[27595],256],12112:[[27604],256],12113:[[27611],256],12114:[[27663],256],12115:[[27668],256],12116:[[27700],256],12117:[[28779],256],12118:[[29226],256],12119:[[29238],256],12120:[[29243],256],12121:[[29247],256],12122:[[29255],256],12123:[[29273],256],12124:[[29275],256],12125:[[29356],256],12126:[[29572],256],12127:[[29577],256],12128:[[29916],256],12129:[[29926],256],12130:[[29976],256],12131:[[29983],256],12132:[[29992],256],12133:[[30000],256],12134:[[30091],256],12135:[[30098],256],12136:[[30326],256],12137:[[30333],256],12138:[[30382],256],12139:[[30399],256],12140:[[30446],256],12141:[[30683],256],12142:[[30690],256],12143:[[30707],256],12144:[[31034],256],12145:[[31160],256],12146:[[31166],256],12147:[[31348],256],12148:[[31435],256],12149:[[31481],256],12150:[[31859],256],12151:[[31992],256],12152:[[32566],256],12153:[[32593],256],12154:[[32650],256],12155:[[32701],256],12156:[[32769],256],12157:[[32780],256],12158:[[32786],256],12159:[[32819],256],12160:[[32895],256],12161:[[32905],256],12162:[[33251],256],12163:[[33258],256],12164:[[33267],256],12165:[[33276],256],12166:[[33292],256],12167:[[33307],256],12168:[[33311],256],12169:[[33390],256],12170:[[33394],256],12171:[[33400],256],12172:[[34381],256],12173:[[34411],256],12174:[[34880],256],12175:[[34892],256],12176:[[34915],256],12177:[[35198],256],12178:[[35211],256],12179:[[35282],256],12180:[[35328],256],12181:[[35895],256],12182:[[35910],256],12183:[[35925],256],12184:[[35960],256],12185:[[35997],256],12186:[[36196],256],12187:[[36208],256],12188:[[36275],256],12189:[[36523],256],12190:[[36554],256],12191:[[36763],256],12192:[[36784],256],12193:[[36789],256],12194:[[37009],256],12195:[[37193],256],12196:[[37318],256],12197:[[37324],256],12198:[[37329],256],12199:[[38263],256],12200:[[38272],256],12201:[[38428],256],12202:[[38582],256],12203:[[38585],256],12204:[[38632],256],12205:[[38737],256],12206:[[38750],256],12207:[[38754],256],12208:[[38761],256],12209:[[38859],256],12210:[[38893],256],12211:[[38899],256],12212:[[38913],256],12213:[[39080],256],12214:[[39131],256],12215:[[39135],256],12216:[[39318],256],12217:[[39321],256],12218:[[39340],256],12219:[[39592],256],12220:[[39640],256],12221:[[39647],256],12222:[[39717],256],12223:[[39727],256],12224:[[39730],256],12225:[[39740],256],12226:[[39770],256],12227:[[40165],256],12228:[[40565],256],12229:[[40575],256],12230:[[40613],256],12231:[[40635],256],12232:[[40643],256],12233:[[40653],256],12234:[[40657],256],12235:[[40697],256],12236:[[40701],256],12237:[[40718],256],12238:[[40723],256],12239:[[40736],256],12240:[[40763],256],12241:[[40778],256],12242:[[40786],256],12243:[[40845],256],12244:[[40860],256],12245:[[40864],256]},
13882 12288:{12288:[[32],256],12330:[,218],12331:[,228],12332:[,232],12333:[,222],12334:[,224],12335:[,224],12342:[[12306],256],12344:[[21313],256],12345:[[21316],256],12346:[[21317],256],12358:[,,{12441:12436}],12363:[,,{12441:12364}],12364:[[12363,12441]],12365:[,,{12441:12366}],12366:[[12365,12441]],12367:[,,{12441:12368}],12368:[[12367,12441]],12369:[,,{12441:12370}],12370:[[12369,12441]],12371:[,,{12441:12372}],12372:[[12371,12441]],12373:[,,{12441:12374}],12374:[[12373,12441]],12375:[,,{12441:12376}],12376:[[12375,12441]],12377:[,,{12441:12378}],12378:[[12377,12441]],12379:[,,{12441:12380}],12380:[[12379,12441]],12381:[,,{12441:12382}],12382:[[12381,12441]],12383:[,,{12441:12384}],12384:[[12383,12441]],12385:[,,{12441:12386}],12386:[[12385,12441]],12388:[,,{12441:12389}],12389:[[12388,12441]],12390:[,,{12441:12391}],12391:[[12390,12441]],12392:[,,{12441:12393}],12393:[[12392,12441]],12399:[,,{12441:12400,12442:12401}],12400:[[12399,12441]],12401:[[12399,12442]],12402:[,,{12441:12403,12442:12404}],12403:[[12402,12441]],12404:[[12402,12442]],12405:[,,{12441:12406,12442:12407}],12406:[[12405,12441]],12407:[[12405,12442]],12408:[,,{12441:12409,12442:12410}],12409:[[12408,12441]],12410:[[12408,12442]],12411:[,,{12441:12412,12442:12413}],12412:[[12411,12441]],12413:[[12411,12442]],12436:[[12358,12441]],12441:[,8],12442:[,8],12443:[[32,12441],256],12444:[[32,12442],256],12445:[,,{12441:12446}],12446:[[12445,12441]],12447:[[12424,12426],256],12454:[,,{12441:12532}],12459:[,,{12441:12460}],12460:[[12459,12441]],12461:[,,{12441:12462}],12462:[[12461,12441]],12463:[,,{12441:12464}],12464:[[12463,12441]],12465:[,,{12441:12466}],12466:[[12465,12441]],12467:[,,{12441:12468}],12468:[[12467,12441]],12469:[,,{12441:12470}],12470:[[12469,12441]],12471:[,,{12441:12472}],12472:[[12471,12441]],12473:[,,{12441:12474}],12474:[[12473,12441]],12475:[,,{12441:12476}],12476:[[12475,12441]],12477:[,,{12441:12478}],12478:[[12477,12441]],12479:[,,{12441:12480}],12480:[[12479,12441]],12481:[,,{12441:12482}],12482:[[12481,12441]],12484:[,,{12441:12485}],12485:[[12484,12441]],12486:[,,{12441:12487}],12487:[[12486,12441]],12488:[,,{12441:12489}],12489:[[12488,12441]],12495:[,,{12441:12496,12442:12497}],12496:[[12495,12441]],12497:[[12495,12442]],12498:[,,{12441:12499,12442:12500}],12499:[[12498,12441]],12500:[[12498,12442]],12501:[,,{12441:12502,12442:12503}],12502:[[12501,12441]],12503:[[12501,12442]],12504:[,,{12441:12505,12442:12506}],12505:[[12504,12441]],12506:[[12504,12442]],12507:[,,{12441:12508,12442:12509}],12508:[[12507,12441]],12509:[[12507,12442]],12527:[,,{12441:12535}],12528:[,,{12441:12536}],12529:[,,{12441:12537}],12530:[,,{12441:12538}],12532:[[12454,12441]],12535:[[12527,12441]],12536:[[12528,12441]],12537:[[12529,12441]],12538:[[12530,12441]],12541:[,,{12441:12542}],12542:[[12541,12441]],12543:[[12467,12488],256]},
13883 12544:{12593:[[4352],256],12594:[[4353],256],12595:[[4522],256],12596:[[4354],256],12597:[[4524],256],12598:[[4525],256],12599:[[4355],256],12600:[[4356],256],12601:[[4357],256],12602:[[4528],256],12603:[[4529],256],12604:[[4530],256],12605:[[4531],256],12606:[[4532],256],12607:[[4533],256],12608:[[4378],256],12609:[[4358],256],12610:[[4359],256],12611:[[4360],256],12612:[[4385],256],12613:[[4361],256],12614:[[4362],256],12615:[[4363],256],12616:[[4364],256],12617:[[4365],256],12618:[[4366],256],12619:[[4367],256],12620:[[4368],256],12621:[[4369],256],12622:[[4370],256],12623:[[4449],256],12624:[[4450],256],12625:[[4451],256],12626:[[4452],256],12627:[[4453],256],12628:[[4454],256],12629:[[4455],256],12630:[[4456],256],12631:[[4457],256],12632:[[4458],256],12633:[[4459],256],12634:[[4460],256],12635:[[4461],256],12636:[[4462],256],12637:[[4463],256],12638:[[4464],256],12639:[[4465],256],12640:[[4466],256],12641:[[4467],256],12642:[[4468],256],12643:[[4469],256],12644:[[4448],256],12645:[[4372],256],12646:[[4373],256],12647:[[4551],256],12648:[[4552],256],12649:[[4556],256],12650:[[4558],256],12651:[[4563],256],12652:[[4567],256],12653:[[4569],256],12654:[[4380],256],12655:[[4573],256],12656:[[4575],256],12657:[[4381],256],12658:[[4382],256],12659:[[4384],256],12660:[[4386],256],12661:[[4387],256],12662:[[4391],256],12663:[[4393],256],12664:[[4395],256],12665:[[4396],256],12666:[[4397],256],12667:[[4398],256],12668:[[4399],256],12669:[[4402],256],12670:[[4406],256],12671:[[4416],256],12672:[[4423],256],12673:[[4428],256],12674:[[4593],256],12675:[[4594],256],12676:[[4439],256],12677:[[4440],256],12678:[[4441],256],12679:[[4484],256],12680:[[4485],256],12681:[[4488],256],12682:[[4497],256],12683:[[4498],256],12684:[[4500],256],12685:[[4510],256],12686:[[4513],256],12690:[[19968],256],12691:[[20108],256],12692:[[19977],256],12693:[[22235],256],12694:[[19978],256],12695:[[20013],256],12696:[[19979],256],12697:[[30002],256],12698:[[20057],256],12699:[[19993],256],12700:[[19969],256],12701:[[22825],256],12702:[[22320],256],12703:[[20154],256]},
13884 12800:{12800:[[40,4352,41],256],12801:[[40,4354,41],256],12802:[[40,4355,41],256],12803:[[40,4357,41],256],12804:[[40,4358,41],256],12805:[[40,4359,41],256],12806:[[40,4361,41],256],12807:[[40,4363,41],256],12808:[[40,4364,41],256],12809:[[40,4366,41],256],12810:[[40,4367,41],256],12811:[[40,4368,41],256],12812:[[40,4369,41],256],12813:[[40,4370,41],256],12814:[[40,4352,4449,41],256],12815:[[40,4354,4449,41],256],12816:[[40,4355,4449,41],256],12817:[[40,4357,4449,41],256],12818:[[40,4358,4449,41],256],12819:[[40,4359,4449,41],256],12820:[[40,4361,4449,41],256],12821:[[40,4363,4449,41],256],12822:[[40,4364,4449,41],256],12823:[[40,4366,4449,41],256],12824:[[40,4367,4449,41],256],12825:[[40,4368,4449,41],256],12826:[[40,4369,4449,41],256],12827:[[40,4370,4449,41],256],12828:[[40,4364,4462,41],256],12829:[[40,4363,4457,4364,4453,4523,41],256],12830:[[40,4363,4457,4370,4462,41],256],12832:[[40,19968,41],256],12833:[[40,20108,41],256],12834:[[40,19977,41],256],12835:[[40,22235,41],256],12836:[[40,20116,41],256],12837:[[40,20845,41],256],12838:[[40,19971,41],256],12839:[[40,20843,41],256],12840:[[40,20061,41],256],12841:[[40,21313,41],256],12842:[[40,26376,41],256],12843:[[40,28779,41],256],12844:[[40,27700,41],256],12845:[[40,26408,41],256],12846:[[40,37329,41],256],12847:[[40,22303,41],256],12848:[[40,26085,41],256],12849:[[40,26666,41],256],12850:[[40,26377,41],256],12851:[[40,31038,41],256],12852:[[40,21517,41],256],12853:[[40,29305,41],256],12854:[[40,36001,41],256],12855:[[40,31069,41],256],12856:[[40,21172,41],256],12857:[[40,20195,41],256],12858:[[40,21628,41],256],12859:[[40,23398,41],256],12860:[[40,30435,41],256],12861:[[40,20225,41],256],12862:[[40,36039,41],256],12863:[[40,21332,41],256],12864:[[40,31085,41],256],12865:[[40,20241,41],256],12866:[[40,33258,41],256],12867:[[40,33267,41],256],12868:[[21839],256],12869:[[24188],256],12870:[[25991],256],12871:[[31631],256],12880:[[80,84,69],256],12881:[[50,49],256],12882:[[50,50],256],12883:[[50,51],256],12884:[[50,52],256],12885:[[50,53],256],12886:[[50,54],256],12887:[[50,55],256],12888:[[50,56],256],12889:[[50,57],256],12890:[[51,48],256],12891:[[51,49],256],12892:[[51,50],256],12893:[[51,51],256],12894:[[51,52],256],12895:[[51,53],256],12896:[[4352],256],12897:[[4354],256],12898:[[4355],256],12899:[[4357],256],12900:[[4358],256],12901:[[4359],256],12902:[[4361],256],12903:[[4363],256],12904:[[4364],256],12905:[[4366],256],12906:[[4367],256],12907:[[4368],256],12908:[[4369],256],12909:[[4370],256],12910:[[4352,4449],256],12911:[[4354,4449],256],12912:[[4355,4449],256],12913:[[4357,4449],256],12914:[[4358,4449],256],12915:[[4359,4449],256],12916:[[4361,4449],256],12917:[[4363,4449],256],12918:[[4364,4449],256],12919:[[4366,4449],256],12920:[[4367,4449],256],12921:[[4368,4449],256],12922:[[4369,4449],256],12923:[[4370,4449],256],12924:[[4366,4449,4535,4352,4457],256],12925:[[4364,4462,4363,4468],256],12926:[[4363,4462],256],12928:[[19968],256],12929:[[20108],256],12930:[[19977],256],12931:[[22235],256],12932:[[20116],256],12933:[[20845],256],12934:[[19971],256],12935:[[20843],256],12936:[[20061],256],12937:[[21313],256],12938:[[26376],256],12939:[[28779],256],12940:[[27700],256],12941:[[26408],256],12942:[[37329],256],12943:[[22303],256],12944:[[26085],256],12945:[[26666],256],12946:[[26377],256],12947:[[31038],256],12948:[[21517],256],12949:[[29305],256],12950:[[36001],256],12951:[[31069],256],12952:[[21172],256],12953:[[31192],256],12954:[[30007],256],12955:[[22899],256],12956:[[36969],256],12957:[[20778],256],12958:[[21360],256],12959:[[27880],256],12960:[[38917],256],12961:[[20241],256],12962:[[20889],256],12963:[[27491],256],12964:[[19978],256],12965:[[20013],256],12966:[[19979],256],12967:[[24038],256],12968:[[21491],256],12969:[[21307],256],12970:[[23447],256],12971:[[23398],256],12972:[[30435],256],12973:[[20225],256],12974:[[36039],256],12975:[[21332],256],12976:[[22812],256],12977:[[51,54],256],12978:[[51,55],256],12979:[[51,56],256],12980:[[51,57],256],12981:[[52,48],256],12982:[[52,49],256],12983:[[52,50],256],12984:[[52,51],256],12985:[[52,52],256],12986:[[52,53],256],12987:[[52,54],256],12988:[[52,55],256],12989:[[52,56],256],12990:[[52,57],256],12991:[[53,48],256],12992:[[49,26376],256],12993:[[50,26376],256],12994:[[51,26376],256],12995:[[52,26376],256],12996:[[53,26376],256],12997:[[54,26376],256],12998:[[55,26376],256],12999:[[56,26376],256],13000:[[57,26376],256],13001:[[49,48,26376],256],13002:[[49,49,26376],256],13003:[[49,50,26376],256],13004:[[72,103],256],13005:[[101,114,103],256],13006:[[101,86],256],13007:[[76,84,68],256],13008:[[12450],256],13009:[[12452],256],13010:[[12454],256],13011:[[12456],256],13012:[[12458],256],13013:[[12459],256],13014:[[12461],256],13015:[[12463],256],13016:[[12465],256],13017:[[12467],256],13018:[[12469],256],13019:[[12471],256],13020:[[12473],256],13021:[[12475],256],13022:[[12477],256],13023:[[12479],256],13024:[[12481],256],13025:[[12484],256],13026:[[12486],256],13027:[[12488],256],13028:[[12490],256],13029:[[12491],256],13030:[[12492],256],13031:[[12493],256],13032:[[12494],256],13033:[[12495],256],13034:[[12498],256],13035:[[12501],256],13036:[[12504],256],13037:[[12507],256],13038:[[12510],256],13039:[[12511],256],13040:[[12512],256],13041:[[12513],256],13042:[[12514],256],13043:[[12516],256],13044:[[12518],256],13045:[[12520],256],13046:[[12521],256],13047:[[12522],256],13048:[[12523],256],13049:[[12524],256],13050:[[12525],256],13051:[[12527],256],13052:[[12528],256],13053:[[12529],256],13054:[[12530],256]},
13885 13056:{13056:[[12450,12497,12540,12488],256],13057:[[12450,12523,12501,12449],256],13058:[[12450,12531,12506,12450],256],13059:[[12450,12540,12523],256],13060:[[12452,12491,12531,12464],256],13061:[[12452,12531,12481],256],13062:[[12454,12457,12531],256],13063:[[12456,12473,12463,12540,12489],256],13064:[[12456,12540,12459,12540],256],13065:[[12458,12531,12473],256],13066:[[12458,12540,12512],256],13067:[[12459,12452,12522],256],13068:[[12459,12521,12483,12488],256],13069:[[12459,12525,12522,12540],256],13070:[[12460,12525,12531],256],13071:[[12460,12531,12510],256],13072:[[12462,12460],256],13073:[[12462,12491,12540],256],13074:[[12461,12517,12522,12540],256],13075:[[12462,12523,12480,12540],256],13076:[[12461,12525],256],13077:[[12461,12525,12464,12521,12512],256],13078:[[12461,12525,12513,12540,12488,12523],256],13079:[[12461,12525,12527,12483,12488],256],13080:[[12464,12521,12512],256],13081:[[12464,12521,12512,12488,12531],256],13082:[[12463,12523,12476,12452,12525],256],13083:[[12463,12525,12540,12493],256],13084:[[12465,12540,12473],256],13085:[[12467,12523,12490],256],13086:[[12467,12540,12509],256],13087:[[12469,12452,12463,12523],256],13088:[[12469,12531,12481,12540,12512],256],13089:[[12471,12522,12531,12464],256],13090:[[12475,12531,12481],256],13091:[[12475,12531,12488],256],13092:[[12480,12540,12473],256],13093:[[12487,12471],256],13094:[[12489,12523],256],13095:[[12488,12531],256],13096:[[12490,12494],256],13097:[[12494,12483,12488],256],13098:[[12495,12452,12484],256],13099:[[12497,12540,12475,12531,12488],256],13100:[[12497,12540,12484],256],13101:[[12496,12540,12524,12523],256],13102:[[12500,12450,12473,12488,12523],256],13103:[[12500,12463,12523],256],13104:[[12500,12467],256],13105:[[12499,12523],256],13106:[[12501,12449,12521,12483,12489],256],13107:[[12501,12451,12540,12488],256],13108:[[12502,12483,12471,12455,12523],256],13109:[[12501,12521,12531],256],13110:[[12504,12463,12479,12540,12523],256],13111:[[12506,12477],256],13112:[[12506,12491,12498],256],13113:[[12504,12523,12484],256],13114:[[12506,12531,12473],256],13115:[[12506,12540,12472],256],13116:[[12505,12540,12479],256],13117:[[12509,12452,12531,12488],256],13118:[[12508,12523,12488],256],13119:[[12507,12531],256],13120:[[12509,12531,12489],256],13121:[[12507,12540,12523],256],13122:[[12507,12540,12531],256],13123:[[12510,12452,12463,12525],256],13124:[[12510,12452,12523],256],13125:[[12510,12483,12495],256],13126:[[12510,12523,12463],256],13127:[[12510,12531,12471,12519,12531],256],13128:[[12511,12463,12525,12531],256],13129:[[12511,12522],256],13130:[[12511,12522,12496,12540,12523],256],13131:[[12513,12460],256],13132:[[12513,12460,12488,12531],256],13133:[[12513,12540,12488,12523],256],13134:[[12516,12540,12489],256],13135:[[12516,12540,12523],256],13136:[[12518,12450,12531],256],13137:[[12522,12483,12488,12523],256],13138:[[12522,12521],256],13139:[[12523,12500,12540],256],13140:[[12523,12540,12502,12523],256],13141:[[12524,12512],256],13142:[[12524,12531,12488,12466,12531],256],13143:[[12527,12483,12488],256],13144:[[48,28857],256],13145:[[49,28857],256],13146:[[50,28857],256],13147:[[51,28857],256],13148:[[52,28857],256],13149:[[53,28857],256],13150:[[54,28857],256],13151:[[55,28857],256],13152:[[56,28857],256],13153:[[57,28857],256],13154:[[49,48,28857],256],13155:[[49,49,28857],256],13156:[[49,50,28857],256],13157:[[49,51,28857],256],13158:[[49,52,28857],256],13159:[[49,53,28857],256],13160:[[49,54,28857],256],13161:[[49,55,28857],256],13162:[[49,56,28857],256],13163:[[49,57,28857],256],13164:[[50,48,28857],256],13165:[[50,49,28857],256],13166:[[50,50,28857],256],13167:[[50,51,28857],256],13168:[[50,52,28857],256],13169:[[104,80,97],256],13170:[[100,97],256],13171:[[65,85],256],13172:[[98,97,114],256],13173:[[111,86],256],13174:[[112,99],256],13175:[[100,109],256],13176:[[100,109,178],256],13177:[[100,109,179],256],13178:[[73,85],256],13179:[[24179,25104],256],13180:[[26157,21644],256],13181:[[22823,27491],256],13182:[[26126,27835],256],13183:[[26666,24335,20250,31038],256],13184:[[112,65],256],13185:[[110,65],256],13186:[[956,65],256],13187:[[109,65],256],13188:[[107,65],256],13189:[[75,66],256],13190:[[77,66],256],13191:[[71,66],256],13192:[[99,97,108],256],13193:[[107,99,97,108],256],13194:[[112,70],256],13195:[[110,70],256],13196:[[956,70],256],13197:[[956,103],256],13198:[[109,103],256],13199:[[107,103],256],13200:[[72,122],256],13201:[[107,72,122],256],13202:[[77,72,122],256],13203:[[71,72,122],256],13204:[[84,72,122],256],13205:[[956,8467],256],13206:[[109,8467],256],13207:[[100,8467],256],13208:[[107,8467],256],13209:[[102,109],256],13210:[[110,109],256],13211:[[956,109],256],13212:[[109,109],256],13213:[[99,109],256],13214:[[107,109],256],13215:[[109,109,178],256],13216:[[99,109,178],256],13217:[[109,178],256],13218:[[107,109,178],256],13219:[[109,109,179],256],13220:[[99,109,179],256],13221:[[109,179],256],13222:[[107,109,179],256],13223:[[109,8725,115],256],13224:[[109,8725,115,178],256],13225:[[80,97],256],13226:[[107,80,97],256],13227:[[77,80,97],256],13228:[[71,80,97],256],13229:[[114,97,100],256],13230:[[114,97,100,8725,115],256],13231:[[114,97,100,8725,115,178],256],13232:[[112,115],256],13233:[[110,115],256],13234:[[956,115],256],13235:[[109,115],256],13236:[[112,86],256],13237:[[110,86],256],13238:[[956,86],256],13239:[[109,86],256],13240:[[107,86],256],13241:[[77,86],256],13242:[[112,87],256],13243:[[110,87],256],13244:[[956,87],256],13245:[[109,87],256],13246:[[107,87],256],13247:[[77,87],256],13248:[[107,937],256],13249:[[77,937],256],13250:[[97,46,109,46],256],13251:[[66,113],256],13252:[[99,99],256],13253:[[99,100],256],13254:[[67,8725,107,103],256],13255:[[67,111,46],256],13256:[[100,66],256],13257:[[71,121],256],13258:[[104,97],256],13259:[[72,80],256],13260:[[105,110],256],13261:[[75,75],256],13262:[[75,77],256],13263:[[107,116],256],13264:[[108,109],256],13265:[[108,110],256],13266:[[108,111,103],256],13267:[[108,120],256],13268:[[109,98],256],13269:[[109,105,108],256],13270:[[109,111,108],256],13271:[[80,72],256],13272:[[112,46,109,46],256],13273:[[80,80,77],256],13274:[[80,82],256],13275:[[115,114],256],13276:[[83,118],256],13277:[[87,98],256],13278:[[86,8725,109],256],13279:[[65,8725,109],256],13280:[[49,26085],256],13281:[[50,26085],256],13282:[[51,26085],256],13283:[[52,26085],256],13284:[[53,26085],256],13285:[[54,26085],256],13286:[[55,26085],256],13287:[[56,26085],256],13288:[[57,26085],256],13289:[[49,48,26085],256],13290:[[49,49,26085],256],13291:[[49,50,26085],256],13292:[[49,51,26085],256],13293:[[49,52,26085],256],13294:[[49,53,26085],256],13295:[[49,54,26085],256],13296:[[49,55,26085],256],13297:[[49,56,26085],256],13298:[[49,57,26085],256],13299:[[50,48,26085],256],13300:[[50,49,26085],256],13301:[[50,50,26085],256],13302:[[50,51,26085],256],13303:[[50,52,26085],256],13304:[[50,53,26085],256],13305:[[50,54,26085],256],13306:[[50,55,26085],256],13307:[[50,56,26085],256],13308:[[50,57,26085],256],13309:[[51,48,26085],256],13310:[[51,49,26085],256],13311:[[103,97,108],256]},
13886 27136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
13887 27392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
13888 42496:{42607:[,230],42612:[,230],42613:[,230],42614:[,230],42615:[,230],42616:[,230],42617:[,230],42618:[,230],42619:[,230],42620:[,230],42621:[,230],42652:[[1098],256],42653:[[1100],256],42655:[,230],42736:[,230],42737:[,230]},
13889 42752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
13890 43008:{43014:[,9],43204:[,9],43232:[,230],43233:[,230],43234:[,230],43235:[,230],43236:[,230],43237:[,230],43238:[,230],43239:[,230],43240:[,230],43241:[,230],43242:[,230],43243:[,230],43244:[,230],43245:[,230],43246:[,230],43247:[,230],43248:[,230],43249:[,230]},
13891 43264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
13892 43520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
13893 43776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
13894 48128:{113822:[,1]},
13895 53504:{119134:[[119127,119141],512],119135:[[119128,119141],512],119136:[[119135,119150],512],119137:[[119135,119151],512],119138:[[119135,119152],512],119139:[[119135,119153],512],119140:[[119135,119154],512],119141:[,216],119142:[,216],119143:[,1],119144:[,1],119145:[,1],119149:[,226],119150:[,216],119151:[,216],119152:[,216],119153:[,216],119154:[,216],119163:[,220],119164:[,220],119165:[,220],119166:[,220],119167:[,220],119168:[,220],119169:[,220],119170:[,220],119173:[,230],119174:[,230],119175:[,230],119176:[,230],119177:[,230],119178:[,220],119179:[,220],119210:[,230],119211:[,230],119212:[,230],119213:[,230],119227:[[119225,119141],512],119228:[[119226,119141],512],119229:[[119227,119150],512],119230:[[119228,119150],512],119231:[[119227,119151],512],119232:[[119228,119151],512]},
13896 53760:{119362:[,230],119363:[,230],119364:[,230]},
13897 54272:{119808:[[65],256],119809:[[66],256],119810:[[67],256],119811:[[68],256],119812:[[69],256],119813:[[70],256],119814:[[71],256],119815:[[72],256],119816:[[73],256],119817:[[74],256],119818:[[75],256],119819:[[76],256],119820:[[77],256],119821:[[78],256],119822:[[79],256],119823:[[80],256],119824:[[81],256],119825:[[82],256],119826:[[83],256],119827:[[84],256],119828:[[85],256],119829:[[86],256],119830:[[87],256],119831:[[88],256],119832:[[89],256],119833:[[90],256],119834:[[97],256],119835:[[98],256],119836:[[99],256],119837:[[100],256],119838:[[101],256],119839:[[102],256],119840:[[103],256],119841:[[104],256],119842:[[105],256],119843:[[106],256],119844:[[107],256],119845:[[108],256],119846:[[109],256],119847:[[110],256],119848:[[111],256],119849:[[112],256],119850:[[113],256],119851:[[114],256],119852:[[115],256],119853:[[116],256],119854:[[117],256],119855:[[118],256],119856:[[119],256],119857:[[120],256],119858:[[121],256],119859:[[122],256],119860:[[65],256],119861:[[66],256],119862:[[67],256],119863:[[68],256],119864:[[69],256],119865:[[70],256],119866:[[71],256],119867:[[72],256],119868:[[73],256],119869:[[74],256],119870:[[75],256],119871:[[76],256],119872:[[77],256],119873:[[78],256],119874:[[79],256],119875:[[80],256],119876:[[81],256],119877:[[82],256],119878:[[83],256],119879:[[84],256],119880:[[85],256],119881:[[86],256],119882:[[87],256],119883:[[88],256],119884:[[89],256],119885:[[90],256],119886:[[97],256],119887:[[98],256],119888:[[99],256],119889:[[100],256],119890:[[101],256],119891:[[102],256],119892:[[103],256],119894:[[105],256],119895:[[106],256],119896:[[107],256],119897:[[108],256],119898:[[109],256],119899:[[110],256],119900:[[111],256],119901:[[112],256],119902:[[113],256],119903:[[114],256],119904:[[115],256],119905:[[116],256],119906:[[117],256],119907:[[118],256],119908:[[119],256],119909:[[120],256],119910:[[121],256],119911:[[122],256],119912:[[65],256],119913:[[66],256],119914:[[67],256],119915:[[68],256],119916:[[69],256],119917:[[70],256],119918:[[71],256],119919:[[72],256],119920:[[73],256],119921:[[74],256],119922:[[75],256],119923:[[76],256],119924:[[77],256],119925:[[78],256],119926:[[79],256],119927:[[80],256],119928:[[81],256],119929:[[82],256],119930:[[83],256],119931:[[84],256],119932:[[85],256],119933:[[86],256],119934:[[87],256],119935:[[88],256],119936:[[89],256],119937:[[90],256],119938:[[97],256],119939:[[98],256],119940:[[99],256],119941:[[100],256],119942:[[101],256],119943:[[102],256],119944:[[103],256],119945:[[104],256],119946:[[105],256],119947:[[106],256],119948:[[107],256],119949:[[108],256],119950:[[109],256],119951:[[110],256],119952:[[111],256],119953:[[112],256],119954:[[113],256],119955:[[114],256],119956:[[115],256],119957:[[116],256],119958:[[117],256],119959:[[118],256],119960:[[119],256],119961:[[120],256],119962:[[121],256],119963:[[122],256],119964:[[65],256],119966:[[67],256],119967:[[68],256],119970:[[71],256],119973:[[74],256],119974:[[75],256],119977:[[78],256],119978:[[79],256],119979:[[80],256],119980:[[81],256],119982:[[83],256],119983:[[84],256],119984:[[85],256],119985:[[86],256],119986:[[87],256],119987:[[88],256],119988:[[89],256],119989:[[90],256],119990:[[97],256],119991:[[98],256],119992:[[99],256],119993:[[100],256],119995:[[102],256],119997:[[104],256],119998:[[105],256],119999:[[106],256],120000:[[107],256],120001:[[108],256],120002:[[109],256],120003:[[110],256],120005:[[112],256],120006:[[113],256],120007:[[114],256],120008:[[115],256],120009:[[116],256],120010:[[117],256],120011:[[118],256],120012:[[119],256],120013:[[120],256],120014:[[121],256],120015:[[122],256],120016:[[65],256],120017:[[66],256],120018:[[67],256],120019:[[68],256],120020:[[69],256],120021:[[70],256],120022:[[71],256],120023:[[72],256],120024:[[73],256],120025:[[74],256],120026:[[75],256],120027:[[76],256],120028:[[77],256],120029:[[78],256],120030:[[79],256],120031:[[80],256],120032:[[81],256],120033:[[82],256],120034:[[83],256],120035:[[84],256],120036:[[85],256],120037:[[86],256],120038:[[87],256],120039:[[88],256],120040:[[89],256],120041:[[90],256],120042:[[97],256],120043:[[98],256],120044:[[99],256],120045:[[100],256],120046:[[101],256],120047:[[102],256],120048:[[103],256],120049:[[104],256],120050:[[105],256],120051:[[106],256],120052:[[107],256],120053:[[108],256],120054:[[109],256],120055:[[110],256],120056:[[111],256],120057:[[112],256],120058:[[113],256],120059:[[114],256],120060:[[115],256],120061:[[116],256],120062:[[117],256],120063:[[118],256]},
13898 54528:{120064:[[119],256],120065:[[120],256],120066:[[121],256],120067:[[122],256],120068:[[65],256],120069:[[66],256],120071:[[68],256],120072:[[69],256],120073:[[70],256],120074:[[71],256],120077:[[74],256],120078:[[75],256],120079:[[76],256],120080:[[77],256],120081:[[78],256],120082:[[79],256],120083:[[80],256],120084:[[81],256],120086:[[83],256],120087:[[84],256],120088:[[85],256],120089:[[86],256],120090:[[87],256],120091:[[88],256],120092:[[89],256],120094:[[97],256],120095:[[98],256],120096:[[99],256],120097:[[100],256],120098:[[101],256],120099:[[102],256],120100:[[103],256],120101:[[104],256],120102:[[105],256],120103:[[106],256],120104:[[107],256],120105:[[108],256],120106:[[109],256],120107:[[110],256],120108:[[111],256],120109:[[112],256],120110:[[113],256],120111:[[114],256],120112:[[115],256],120113:[[116],256],120114:[[117],256],120115:[[118],256],120116:[[119],256],120117:[[120],256],120118:[[121],256],120119:[[122],256],120120:[[65],256],120121:[[66],256],120123:[[68],256],120124:[[69],256],120125:[[70],256],120126:[[71],256],120128:[[73],256],120129:[[74],256],120130:[[75],256],120131:[[76],256],120132:[[77],256],120134:[[79],256],120138:[[83],256],120139:[[84],256],120140:[[85],256],120141:[[86],256],120142:[[87],256],120143:[[88],256],120144:[[89],256],120146:[[97],256],120147:[[98],256],120148:[[99],256],120149:[[100],256],120150:[[101],256],120151:[[102],256],120152:[[103],256],120153:[[104],256],120154:[[105],256],120155:[[106],256],120156:[[107],256],120157:[[108],256],120158:[[109],256],120159:[[110],256],120160:[[111],256],120161:[[112],256],120162:[[113],256],120163:[[114],256],120164:[[115],256],120165:[[116],256],120166:[[117],256],120167:[[118],256],120168:[[119],256],120169:[[120],256],120170:[[121],256],120171:[[122],256],120172:[[65],256],120173:[[66],256],120174:[[67],256],120175:[[68],256],120176:[[69],256],120177:[[70],256],120178:[[71],256],120179:[[72],256],120180:[[73],256],120181:[[74],256],120182:[[75],256],120183:[[76],256],120184:[[77],256],120185:[[78],256],120186:[[79],256],120187:[[80],256],120188:[[81],256],120189:[[82],256],120190:[[83],256],120191:[[84],256],120192:[[85],256],120193:[[86],256],120194:[[87],256],120195:[[88],256],120196:[[89],256],120197:[[90],256],120198:[[97],256],120199:[[98],256],120200:[[99],256],120201:[[100],256],120202:[[101],256],120203:[[102],256],120204:[[103],256],120205:[[104],256],120206:[[105],256],120207:[[106],256],120208:[[107],256],120209:[[108],256],120210:[[109],256],120211:[[110],256],120212:[[111],256],120213:[[112],256],120214:[[113],256],120215:[[114],256],120216:[[115],256],120217:[[116],256],120218:[[117],256],120219:[[118],256],120220:[[119],256],120221:[[120],256],120222:[[121],256],120223:[[122],256],120224:[[65],256],120225:[[66],256],120226:[[67],256],120227:[[68],256],120228:[[69],256],120229:[[70],256],120230:[[71],256],120231:[[72],256],120232:[[73],256],120233:[[74],256],120234:[[75],256],120235:[[76],256],120236:[[77],256],120237:[[78],256],120238:[[79],256],120239:[[80],256],120240:[[81],256],120241:[[82],256],120242:[[83],256],120243:[[84],256],120244:[[85],256],120245:[[86],256],120246:[[87],256],120247:[[88],256],120248:[[89],256],120249:[[90],256],120250:[[97],256],120251:[[98],256],120252:[[99],256],120253:[[100],256],120254:[[101],256],120255:[[102],256],120256:[[103],256],120257:[[104],256],120258:[[105],256],120259:[[106],256],120260:[[107],256],120261:[[108],256],120262:[[109],256],120263:[[110],256],120264:[[111],256],120265:[[112],256],120266:[[113],256],120267:[[114],256],120268:[[115],256],120269:[[116],256],120270:[[117],256],120271:[[118],256],120272:[[119],256],120273:[[120],256],120274:[[121],256],120275:[[122],256],120276:[[65],256],120277:[[66],256],120278:[[67],256],120279:[[68],256],120280:[[69],256],120281:[[70],256],120282:[[71],256],120283:[[72],256],120284:[[73],256],120285:[[74],256],120286:[[75],256],120287:[[76],256],120288:[[77],256],120289:[[78],256],120290:[[79],256],120291:[[80],256],120292:[[81],256],120293:[[82],256],120294:[[83],256],120295:[[84],256],120296:[[85],256],120297:[[86],256],120298:[[87],256],120299:[[88],256],120300:[[89],256],120301:[[90],256],120302:[[97],256],120303:[[98],256],120304:[[99],256],120305:[[100],256],120306:[[101],256],120307:[[102],256],120308:[[103],256],120309:[[104],256],120310:[[105],256],120311:[[106],256],120312:[[107],256],120313:[[108],256],120314:[[109],256],120315:[[110],256],120316:[[111],256],120317:[[112],256],120318:[[113],256],120319:[[114],256]},
13899 54784:{120320:[[115],256],120321:[[116],256],120322:[[117],256],120323:[[118],256],120324:[[119],256],120325:[[120],256],120326:[[121],256],120327:[[122],256],120328:[[65],256],120329:[[66],256],120330:[[67],256],120331:[[68],256],120332:[[69],256],120333:[[70],256],120334:[[71],256],120335:[[72],256],120336:[[73],256],120337:[[74],256],120338:[[75],256],120339:[[76],256],120340:[[77],256],120341:[[78],256],120342:[[79],256],120343:[[80],256],120344:[[81],256],120345:[[82],256],120346:[[83],256],120347:[[84],256],120348:[[85],256],120349:[[86],256],120350:[[87],256],120351:[[88],256],120352:[[89],256],120353:[[90],256],120354:[[97],256],120355:[[98],256],120356:[[99],256],120357:[[100],256],120358:[[101],256],120359:[[102],256],120360:[[103],256],120361:[[104],256],120362:[[105],256],120363:[[106],256],120364:[[107],256],120365:[[108],256],120366:[[109],256],120367:[[110],256],120368:[[111],256],120369:[[112],256],120370:[[113],256],120371:[[114],256],120372:[[115],256],120373:[[116],256],120374:[[117],256],120375:[[118],256],120376:[[119],256],120377:[[120],256],120378:[[121],256],120379:[[122],256],120380:[[65],256],120381:[[66],256],120382:[[67],256],120383:[[68],256],120384:[[69],256],120385:[[70],256],120386:[[71],256],120387:[[72],256],120388:[[73],256],120389:[[74],256],120390:[[75],256],120391:[[76],256],120392:[[77],256],120393:[[78],256],120394:[[79],256],120395:[[80],256],120396:[[81],256],120397:[[82],256],120398:[[83],256],120399:[[84],256],120400:[[85],256],120401:[[86],256],120402:[[87],256],120403:[[88],256],120404:[[89],256],120405:[[90],256],120406:[[97],256],120407:[[98],256],120408:[[99],256],120409:[[100],256],120410:[[101],256],120411:[[102],256],120412:[[103],256],120413:[[104],256],120414:[[105],256],120415:[[106],256],120416:[[107],256],120417:[[108],256],120418:[[109],256],120419:[[110],256],120420:[[111],256],120421:[[112],256],120422:[[113],256],120423:[[114],256],120424:[[115],256],120425:[[116],256],120426:[[117],256],120427:[[118],256],120428:[[119],256],120429:[[120],256],120430:[[121],256],120431:[[122],256],120432:[[65],256],120433:[[66],256],120434:[[67],256],120435:[[68],256],120436:[[69],256],120437:[[70],256],120438:[[71],256],120439:[[72],256],120440:[[73],256],120441:[[74],256],120442:[[75],256],120443:[[76],256],120444:[[77],256],120445:[[78],256],120446:[[79],256],120447:[[80],256],120448:[[81],256],120449:[[82],256],120450:[[83],256],120451:[[84],256],120452:[[85],256],120453:[[86],256],120454:[[87],256],120455:[[88],256],120456:[[89],256],120457:[[90],256],120458:[[97],256],120459:[[98],256],120460:[[99],256],120461:[[100],256],120462:[[101],256],120463:[[102],256],120464:[[103],256],120465:[[104],256],120466:[[105],256],120467:[[106],256],120468:[[107],256],120469:[[108],256],120470:[[109],256],120471:[[110],256],120472:[[111],256],120473:[[112],256],120474:[[113],256],120475:[[114],256],120476:[[115],256],120477:[[116],256],120478:[[117],256],120479:[[118],256],120480:[[119],256],120481:[[120],256],120482:[[121],256],120483:[[122],256],120484:[[305],256],120485:[[567],256],120488:[[913],256],120489:[[914],256],120490:[[915],256],120491:[[916],256],120492:[[917],256],120493:[[918],256],120494:[[919],256],120495:[[920],256],120496:[[921],256],120497:[[922],256],120498:[[923],256],120499:[[924],256],120500:[[925],256],120501:[[926],256],120502:[[927],256],120503:[[928],256],120504:[[929],256],120505:[[1012],256],120506:[[931],256],120507:[[932],256],120508:[[933],256],120509:[[934],256],120510:[[935],256],120511:[[936],256],120512:[[937],256],120513:[[8711],256],120514:[[945],256],120515:[[946],256],120516:[[947],256],120517:[[948],256],120518:[[949],256],120519:[[950],256],120520:[[951],256],120521:[[952],256],120522:[[953],256],120523:[[954],256],120524:[[955],256],120525:[[956],256],120526:[[957],256],120527:[[958],256],120528:[[959],256],120529:[[960],256],120530:[[961],256],120531:[[962],256],120532:[[963],256],120533:[[964],256],120534:[[965],256],120535:[[966],256],120536:[[967],256],120537:[[968],256],120538:[[969],256],120539:[[8706],256],120540:[[1013],256],120541:[[977],256],120542:[[1008],256],120543:[[981],256],120544:[[1009],256],120545:[[982],256],120546:[[913],256],120547:[[914],256],120548:[[915],256],120549:[[916],256],120550:[[917],256],120551:[[918],256],120552:[[919],256],120553:[[920],256],120554:[[921],256],120555:[[922],256],120556:[[923],256],120557:[[924],256],120558:[[925],256],120559:[[926],256],120560:[[927],256],120561:[[928],256],120562:[[929],256],120563:[[1012],256],120564:[[931],256],120565:[[932],256],120566:[[933],256],120567:[[934],256],120568:[[935],256],120569:[[936],256],120570:[[937],256],120571:[[8711],256],120572:[[945],256],120573:[[946],256],120574:[[947],256],120575:[[948],256]},
13900 55040:{120576:[[949],256],120577:[[950],256],120578:[[951],256],120579:[[952],256],120580:[[953],256],120581:[[954],256],120582:[[955],256],120583:[[956],256],120584:[[957],256],120585:[[958],256],120586:[[959],256],120587:[[960],256],120588:[[961],256],120589:[[962],256],120590:[[963],256],120591:[[964],256],120592:[[965],256],120593:[[966],256],120594:[[967],256],120595:[[968],256],120596:[[969],256],120597:[[8706],256],120598:[[1013],256],120599:[[977],256],120600:[[1008],256],120601:[[981],256],120602:[[1009],256],120603:[[982],256],120604:[[913],256],120605:[[914],256],120606:[[915],256],120607:[[916],256],120608:[[917],256],120609:[[918],256],120610:[[919],256],120611:[[920],256],120612:[[921],256],120613:[[922],256],120614:[[923],256],120615:[[924],256],120616:[[925],256],120617:[[926],256],120618:[[927],256],120619:[[928],256],120620:[[929],256],120621:[[1012],256],120622:[[931],256],120623:[[932],256],120624:[[933],256],120625:[[934],256],120626:[[935],256],120627:[[936],256],120628:[[937],256],120629:[[8711],256],120630:[[945],256],120631:[[946],256],120632:[[947],256],120633:[[948],256],120634:[[949],256],120635:[[950],256],120636:[[951],256],120637:[[952],256],120638:[[953],256],120639:[[954],256],120640:[[955],256],120641:[[956],256],120642:[[957],256],120643:[[958],256],120644:[[959],256],120645:[[960],256],120646:[[961],256],120647:[[962],256],120648:[[963],256],120649:[[964],256],120650:[[965],256],120651:[[966],256],120652:[[967],256],120653:[[968],256],120654:[[969],256],120655:[[8706],256],120656:[[1013],256],120657:[[977],256],120658:[[1008],256],120659:[[981],256],120660:[[1009],256],120661:[[982],256],120662:[[913],256],120663:[[914],256],120664:[[915],256],120665:[[916],256],120666:[[917],256],120667:[[918],256],120668:[[919],256],120669:[[920],256],120670:[[921],256],120671:[[922],256],120672:[[923],256],120673:[[924],256],120674:[[925],256],120675:[[926],256],120676:[[927],256],120677:[[928],256],120678:[[929],256],120679:[[1012],256],120680:[[931],256],120681:[[932],256],120682:[[933],256],120683:[[934],256],120684:[[935],256],120685:[[936],256],120686:[[937],256],120687:[[8711],256],120688:[[945],256],120689:[[946],256],120690:[[947],256],120691:[[948],256],120692:[[949],256],120693:[[950],256],120694:[[951],256],120695:[[952],256],120696:[[953],256],120697:[[954],256],120698:[[955],256],120699:[[956],256],120700:[[957],256],120701:[[958],256],120702:[[959],256],120703:[[960],256],120704:[[961],256],120705:[[962],256],120706:[[963],256],120707:[[964],256],120708:[[965],256],120709:[[966],256],120710:[[967],256],120711:[[968],256],120712:[[969],256],120713:[[8706],256],120714:[[1013],256],120715:[[977],256],120716:[[1008],256],120717:[[981],256],120718:[[1009],256],120719:[[982],256],120720:[[913],256],120721:[[914],256],120722:[[915],256],120723:[[916],256],120724:[[917],256],120725:[[918],256],120726:[[919],256],120727:[[920],256],120728:[[921],256],120729:[[922],256],120730:[[923],256],120731:[[924],256],120732:[[925],256],120733:[[926],256],120734:[[927],256],120735:[[928],256],120736:[[929],256],120737:[[1012],256],120738:[[931],256],120739:[[932],256],120740:[[933],256],120741:[[934],256],120742:[[935],256],120743:[[936],256],120744:[[937],256],120745:[[8711],256],120746:[[945],256],120747:[[946],256],120748:[[947],256],120749:[[948],256],120750:[[949],256],120751:[[950],256],120752:[[951],256],120753:[[952],256],120754:[[953],256],120755:[[954],256],120756:[[955],256],120757:[[956],256],120758:[[957],256],120759:[[958],256],120760:[[959],256],120761:[[960],256],120762:[[961],256],120763:[[962],256],120764:[[963],256],120765:[[964],256],120766:[[965],256],120767:[[966],256],120768:[[967],256],120769:[[968],256],120770:[[969],256],120771:[[8706],256],120772:[[1013],256],120773:[[977],256],120774:[[1008],256],120775:[[981],256],120776:[[1009],256],120777:[[982],256],120778:[[988],256],120779:[[989],256],120782:[[48],256],120783:[[49],256],120784:[[50],256],120785:[[51],256],120786:[[52],256],120787:[[53],256],120788:[[54],256],120789:[[55],256],120790:[[56],256],120791:[[57],256],120792:[[48],256],120793:[[49],256],120794:[[50],256],120795:[[51],256],120796:[[52],256],120797:[[53],256],120798:[[54],256],120799:[[55],256],120800:[[56],256],120801:[[57],256],120802:[[48],256],120803:[[49],256],120804:[[50],256],120805:[[51],256],120806:[[52],256],120807:[[53],256],120808:[[54],256],120809:[[55],256],120810:[[56],256],120811:[[57],256],120812:[[48],256],120813:[[49],256],120814:[[50],256],120815:[[51],256],120816:[[52],256],120817:[[53],256],120818:[[54],256],120819:[[55],256],120820:[[56],256],120821:[[57],256],120822:[[48],256],120823:[[49],256],120824:[[50],256],120825:[[51],256],120826:[[52],256],120827:[[53],256],120828:[[54],256],120829:[[55],256],120830:[[56],256],120831:[[57],256]},
13901 59392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
13902 60928:{126464:[[1575],256],126465:[[1576],256],126466:[[1580],256],126467:[[1583],256],126469:[[1608],256],126470:[[1586],256],126471:[[1581],256],126472:[[1591],256],126473:[[1610],256],126474:[[1603],256],126475:[[1604],256],126476:[[1605],256],126477:[[1606],256],126478:[[1587],256],126479:[[1593],256],126480:[[1601],256],126481:[[1589],256],126482:[[1602],256],126483:[[1585],256],126484:[[1588],256],126485:[[1578],256],126486:[[1579],256],126487:[[1582],256],126488:[[1584],256],126489:[[1590],256],126490:[[1592],256],126491:[[1594],256],126492:[[1646],256],126493:[[1722],256],126494:[[1697],256],126495:[[1647],256],126497:[[1576],256],126498:[[1580],256],126500:[[1607],256],126503:[[1581],256],126505:[[1610],256],126506:[[1603],256],126507:[[1604],256],126508:[[1605],256],126509:[[1606],256],126510:[[1587],256],126511:[[1593],256],126512:[[1601],256],126513:[[1589],256],126514:[[1602],256],126516:[[1588],256],126517:[[1578],256],126518:[[1579],256],126519:[[1582],256],126521:[[1590],256],126523:[[1594],256],126530:[[1580],256],126535:[[1581],256],126537:[[1610],256],126539:[[1604],256],126541:[[1606],256],126542:[[1587],256],126543:[[1593],256],126545:[[1589],256],126546:[[1602],256],126548:[[1588],256],126551:[[1582],256],126553:[[1590],256],126555:[[1594],256],126557:[[1722],256],126559:[[1647],256],126561:[[1576],256],126562:[[1580],256],126564:[[1607],256],126567:[[1581],256],126568:[[1591],256],126569:[[1610],256],126570:[[1603],256],126572:[[1605],256],126573:[[1606],256],126574:[[1587],256],126575:[[1593],256],126576:[[1601],256],126577:[[1589],256],126578:[[1602],256],126580:[[1588],256],126581:[[1578],256],126582:[[1579],256],126583:[[1582],256],126585:[[1590],256],126586:[[1592],256],126587:[[1594],256],126588:[[1646],256],126590:[[1697],256],126592:[[1575],256],126593:[[1576],256],126594:[[1580],256],126595:[[1583],256],126596:[[1607],256],126597:[[1608],256],126598:[[1586],256],126599:[[1581],256],126600:[[1591],256],126601:[[1610],256],126603:[[1604],256],126604:[[1605],256],126605:[[1606],256],126606:[[1587],256],126607:[[1593],256],126608:[[1601],256],126609:[[1589],256],126610:[[1602],256],126611:[[1585],256],126612:[[1588],256],126613:[[1578],256],126614:[[1579],256],126615:[[1582],256],126616:[[1584],256],126617:[[1590],256],126618:[[1592],256],126619:[[1594],256],126625:[[1576],256],126626:[[1580],256],126627:[[1583],256],126629:[[1608],256],126630:[[1586],256],126631:[[1581],256],126632:[[1591],256],126633:[[1610],256],126635:[[1604],256],126636:[[1605],256],126637:[[1606],256],126638:[[1587],256],126639:[[1593],256],126640:[[1601],256],126641:[[1589],256],126642:[[1602],256],126643:[[1585],256],126644:[[1588],256],126645:[[1578],256],126646:[[1579],256],126647:[[1582],256],126648:[[1584],256],126649:[[1590],256],126650:[[1592],256],126651:[[1594],256]},
13903 61696:{127232:[[48,46],256],127233:[[48,44],256],127234:[[49,44],256],127235:[[50,44],256],127236:[[51,44],256],127237:[[52,44],256],127238:[[53,44],256],127239:[[54,44],256],127240:[[55,44],256],127241:[[56,44],256],127242:[[57,44],256],127248:[[40,65,41],256],127249:[[40,66,41],256],127250:[[40,67,41],256],127251:[[40,68,41],256],127252:[[40,69,41],256],127253:[[40,70,41],256],127254:[[40,71,41],256],127255:[[40,72,41],256],127256:[[40,73,41],256],127257:[[40,74,41],256],127258:[[40,75,41],256],127259:[[40,76,41],256],127260:[[40,77,41],256],127261:[[40,78,41],256],127262:[[40,79,41],256],127263:[[40,80,41],256],127264:[[40,81,41],256],127265:[[40,82,41],256],127266:[[40,83,41],256],127267:[[40,84,41],256],127268:[[40,85,41],256],127269:[[40,86,41],256],127270:[[40,87,41],256],127271:[[40,88,41],256],127272:[[40,89,41],256],127273:[[40,90,41],256],127274:[[12308,83,12309],256],127275:[[67],256],127276:[[82],256],127277:[[67,68],256],127278:[[87,90],256],127280:[[65],256],127281:[[66],256],127282:[[67],256],127283:[[68],256],127284:[[69],256],127285:[[70],256],127286:[[71],256],127287:[[72],256],127288:[[73],256],127289:[[74],256],127290:[[75],256],127291:[[76],256],127292:[[77],256],127293:[[78],256],127294:[[79],256],127295:[[80],256],127296:[[81],256],127297:[[82],256],127298:[[83],256],127299:[[84],256],127300:[[85],256],127301:[[86],256],127302:[[87],256],127303:[[88],256],127304:[[89],256],127305:[[90],256],127306:[[72,86],256],127307:[[77,86],256],127308:[[83,68],256],127309:[[83,83],256],127310:[[80,80,86],256],127311:[[87,67],256],127338:[[77,67],256],127339:[[77,68],256],127376:[[68,74],256]},
13904 61952:{127488:[[12411,12363],256],127489:[[12467,12467],256],127490:[[12469],256],127504:[[25163],256],127505:[[23383],256],127506:[[21452],256],127507:[[12487],256],127508:[[20108],256],127509:[[22810],256],127510:[[35299],256],127511:[[22825],256],127512:[[20132],256],127513:[[26144],256],127514:[[28961],256],127515:[[26009],256],127516:[[21069],256],127517:[[24460],256],127518:[[20877],256],127519:[[26032],256],127520:[[21021],256],127521:[[32066],256],127522:[[29983],256],127523:[[36009],256],127524:[[22768],256],127525:[[21561],256],127526:[[28436],256],127527:[[25237],256],127528:[[25429],256],127529:[[19968],256],127530:[[19977],256],127531:[[36938],256],127532:[[24038],256],127533:[[20013],256],127534:[[21491],256],127535:[[25351],256],127536:[[36208],256],127537:[[25171],256],127538:[[31105],256],127539:[[31354],256],127540:[[21512],256],127541:[[28288],256],127542:[[26377],256],127543:[[26376],256],127544:[[30003],256],127545:[[21106],256],127546:[[21942],256],127552:[[12308,26412,12309],256],127553:[[12308,19977,12309],256],127554:[[12308,20108,12309],256],127555:[[12308,23433,12309],256],127556:[[12308,28857,12309],256],127557:[[12308,25171,12309],256],127558:[[12308,30423,12309],256],127559:[[12308,21213,12309],256],127560:[[12308,25943,12309],256],127568:[[24471],256],127569:[[21487],256]},
13905 63488:{194560:[[20029]],194561:[[20024]],194562:[[20033]],194563:[[131362]],194564:[[20320]],194565:[[20398]],194566:[[20411]],194567:[[20482]],194568:[[20602]],194569:[[20633]],194570:[[20711]],194571:[[20687]],194572:[[13470]],194573:[[132666]],194574:[[20813]],194575:[[20820]],194576:[[20836]],194577:[[20855]],194578:[[132380]],194579:[[13497]],194580:[[20839]],194581:[[20877]],194582:[[132427]],194583:[[20887]],194584:[[20900]],194585:[[20172]],194586:[[20908]],194587:[[20917]],194588:[[168415]],194589:[[20981]],194590:[[20995]],194591:[[13535]],194592:[[21051]],194593:[[21062]],194594:[[21106]],194595:[[21111]],194596:[[13589]],194597:[[21191]],194598:[[21193]],194599:[[21220]],194600:[[21242]],194601:[[21253]],194602:[[21254]],194603:[[21271]],194604:[[21321]],194605:[[21329]],194606:[[21338]],194607:[[21363]],194608:[[21373]],194609:[[21375]],194610:[[21375]],194611:[[21375]],194612:[[133676]],194613:[[28784]],194614:[[21450]],194615:[[21471]],194616:[[133987]],194617:[[21483]],194618:[[21489]],194619:[[21510]],194620:[[21662]],194621:[[21560]],194622:[[21576]],194623:[[21608]],194624:[[21666]],194625:[[21750]],194626:[[21776]],194627:[[21843]],194628:[[21859]],194629:[[21892]],194630:[[21892]],194631:[[21913]],194632:[[21931]],194633:[[21939]],194634:[[21954]],194635:[[22294]],194636:[[22022]],194637:[[22295]],194638:[[22097]],194639:[[22132]],194640:[[20999]],194641:[[22766]],194642:[[22478]],194643:[[22516]],194644:[[22541]],194645:[[22411]],194646:[[22578]],194647:[[22577]],194648:[[22700]],194649:[[136420]],194650:[[22770]],194651:[[22775]],194652:[[22790]],194653:[[22810]],194654:[[22818]],194655:[[22882]],194656:[[136872]],194657:[[136938]],194658:[[23020]],194659:[[23067]],194660:[[23079]],194661:[[23000]],194662:[[23142]],194663:[[14062]],194664:[[14076]],194665:[[23304]],194666:[[23358]],194667:[[23358]],194668:[[137672]],194669:[[23491]],194670:[[23512]],194671:[[23527]],194672:[[23539]],194673:[[138008]],194674:[[23551]],194675:[[23558]],194676:[[24403]],194677:[[23586]],194678:[[14209]],194679:[[23648]],194680:[[23662]],194681:[[23744]],194682:[[23693]],194683:[[138724]],194684:[[23875]],194685:[[138726]],194686:[[23918]],194687:[[23915]],194688:[[23932]],194689:[[24033]],194690:[[24034]],194691:[[14383]],194692:[[24061]],194693:[[24104]],194694:[[24125]],194695:[[24169]],194696:[[14434]],194697:[[139651]],194698:[[14460]],194699:[[24240]],194700:[[24243]],194701:[[24246]],194702:[[24266]],194703:[[172946]],194704:[[24318]],194705:[[140081]],194706:[[140081]],194707:[[33281]],194708:[[24354]],194709:[[24354]],194710:[[14535]],194711:[[144056]],194712:[[156122]],194713:[[24418]],194714:[[24427]],194715:[[14563]],194716:[[24474]],194717:[[24525]],194718:[[24535]],194719:[[24569]],194720:[[24705]],194721:[[14650]],194722:[[14620]],194723:[[24724]],194724:[[141012]],194725:[[24775]],194726:[[24904]],194727:[[24908]],194728:[[24910]],194729:[[24908]],194730:[[24954]],194731:[[24974]],194732:[[25010]],194733:[[24996]],194734:[[25007]],194735:[[25054]],194736:[[25074]],194737:[[25078]],194738:[[25104]],194739:[[25115]],194740:[[25181]],194741:[[25265]],194742:[[25300]],194743:[[25424]],194744:[[142092]],194745:[[25405]],194746:[[25340]],194747:[[25448]],194748:[[25475]],194749:[[25572]],194750:[[142321]],194751:[[25634]],194752:[[25541]],194753:[[25513]],194754:[[14894]],194755:[[25705]],194756:[[25726]],194757:[[25757]],194758:[[25719]],194759:[[14956]],194760:[[25935]],194761:[[25964]],194762:[[143370]],194763:[[26083]],194764:[[26360]],194765:[[26185]],194766:[[15129]],194767:[[26257]],194768:[[15112]],194769:[[15076]],194770:[[20882]],194771:[[20885]],194772:[[26368]],194773:[[26268]],194774:[[32941]],194775:[[17369]],194776:[[26391]],194777:[[26395]],194778:[[26401]],194779:[[26462]],194780:[[26451]],194781:[[144323]],194782:[[15177]],194783:[[26618]],194784:[[26501]],194785:[[26706]],194786:[[26757]],194787:[[144493]],194788:[[26766]],194789:[[26655]],194790:[[26900]],194791:[[15261]],194792:[[26946]],194793:[[27043]],194794:[[27114]],194795:[[27304]],194796:[[145059]],194797:[[27355]],194798:[[15384]],194799:[[27425]],194800:[[145575]],194801:[[27476]],194802:[[15438]],194803:[[27506]],194804:[[27551]],194805:[[27578]],194806:[[27579]],194807:[[146061]],194808:[[138507]],194809:[[146170]],194810:[[27726]],194811:[[146620]],194812:[[27839]],194813:[[27853]],194814:[[27751]],194815:[[27926]]},
13906 63744:{63744:[[35912]],63745:[[26356]],63746:[[36554]],63747:[[36040]],63748:[[28369]],63749:[[20018]],63750:[[21477]],63751:[[40860]],63752:[[40860]],63753:[[22865]],63754:[[37329]],63755:[[21895]],63756:[[22856]],63757:[[25078]],63758:[[30313]],63759:[[32645]],63760:[[34367]],63761:[[34746]],63762:[[35064]],63763:[[37007]],63764:[[27138]],63765:[[27931]],63766:[[28889]],63767:[[29662]],63768:[[33853]],63769:[[37226]],63770:[[39409]],63771:[[20098]],63772:[[21365]],63773:[[27396]],63774:[[29211]],63775:[[34349]],63776:[[40478]],63777:[[23888]],63778:[[28651]],63779:[[34253]],63780:[[35172]],63781:[[25289]],63782:[[33240]],63783:[[34847]],63784:[[24266]],63785:[[26391]],63786:[[28010]],63787:[[29436]],63788:[[37070]],63789:[[20358]],63790:[[20919]],63791:[[21214]],63792:[[25796]],63793:[[27347]],63794:[[29200]],63795:[[30439]],63796:[[32769]],63797:[[34310]],63798:[[34396]],63799:[[36335]],63800:[[38706]],63801:[[39791]],63802:[[40442]],63803:[[30860]],63804:[[31103]],63805:[[32160]],63806:[[33737]],63807:[[37636]],63808:[[40575]],63809:[[35542]],63810:[[22751]],63811:[[24324]],63812:[[31840]],63813:[[32894]],63814:[[29282]],63815:[[30922]],63816:[[36034]],63817:[[38647]],63818:[[22744]],63819:[[23650]],63820:[[27155]],63821:[[28122]],63822:[[28431]],63823:[[32047]],63824:[[32311]],63825:[[38475]],63826:[[21202]],63827:[[32907]],63828:[[20956]],63829:[[20940]],63830:[[31260]],63831:[[32190]],63832:[[33777]],63833:[[38517]],63834:[[35712]],63835:[[25295]],63836:[[27138]],63837:[[35582]],63838:[[20025]],63839:[[23527]],63840:[[24594]],63841:[[29575]],63842:[[30064]],63843:[[21271]],63844:[[30971]],63845:[[20415]],63846:[[24489]],63847:[[19981]],63848:[[27852]],63849:[[25976]],63850:[[32034]],63851:[[21443]],63852:[[22622]],63853:[[30465]],63854:[[33865]],63855:[[35498]],63856:[[27578]],63857:[[36784]],63858:[[27784]],63859:[[25342]],63860:[[33509]],63861:[[25504]],63862:[[30053]],63863:[[20142]],63864:[[20841]],63865:[[20937]],63866:[[26753]],63867:[[31975]],63868:[[33391]],63869:[[35538]],63870:[[37327]],63871:[[21237]],63872:[[21570]],63873:[[22899]],63874:[[24300]],63875:[[26053]],63876:[[28670]],63877:[[31018]],63878:[[38317]],63879:[[39530]],63880:[[40599]],63881:[[40654]],63882:[[21147]],63883:[[26310]],63884:[[27511]],63885:[[36706]],63886:[[24180]],63887:[[24976]],63888:[[25088]],63889:[[25754]],63890:[[28451]],63891:[[29001]],63892:[[29833]],63893:[[31178]],63894:[[32244]],63895:[[32879]],63896:[[36646]],63897:[[34030]],63898:[[36899]],63899:[[37706]],63900:[[21015]],63901:[[21155]],63902:[[21693]],63903:[[28872]],63904:[[35010]],63905:[[35498]],63906:[[24265]],63907:[[24565]],63908:[[25467]],63909:[[27566]],63910:[[31806]],63911:[[29557]],63912:[[20196]],63913:[[22265]],63914:[[23527]],63915:[[23994]],63916:[[24604]],63917:[[29618]],63918:[[29801]],63919:[[32666]],63920:[[32838]],63921:[[37428]],63922:[[38646]],63923:[[38728]],63924:[[38936]],63925:[[20363]],63926:[[31150]],63927:[[37300]],63928:[[38584]],63929:[[24801]],63930:[[20102]],63931:[[20698]],63932:[[23534]],63933:[[23615]],63934:[[26009]],63935:[[27138]],63936:[[29134]],63937:[[30274]],63938:[[34044]],63939:[[36988]],63940:[[40845]],63941:[[26248]],63942:[[38446]],63943:[[21129]],63944:[[26491]],63945:[[26611]],63946:[[27969]],63947:[[28316]],63948:[[29705]],63949:[[30041]],63950:[[30827]],63951:[[32016]],63952:[[39006]],63953:[[20845]],63954:[[25134]],63955:[[38520]],63956:[[20523]],63957:[[23833]],63958:[[28138]],63959:[[36650]],63960:[[24459]],63961:[[24900]],63962:[[26647]],63963:[[29575]],63964:[[38534]],63965:[[21033]],63966:[[21519]],63967:[[23653]],63968:[[26131]],63969:[[26446]],63970:[[26792]],63971:[[27877]],63972:[[29702]],63973:[[30178]],63974:[[32633]],63975:[[35023]],63976:[[35041]],63977:[[37324]],63978:[[38626]],63979:[[21311]],63980:[[28346]],63981:[[21533]],63982:[[29136]],63983:[[29848]],63984:[[34298]],63985:[[38563]],63986:[[40023]],63987:[[40607]],63988:[[26519]],63989:[[28107]],63990:[[33256]],63991:[[31435]],63992:[[31520]],63993:[[31890]],63994:[[29376]],63995:[[28825]],63996:[[35672]],63997:[[20160]],63998:[[33590]],63999:[[21050]],194816:[[27966]],194817:[[28023]],194818:[[27969]],194819:[[28009]],194820:[[28024]],194821:[[28037]],194822:[[146718]],194823:[[27956]],194824:[[28207]],194825:[[28270]],194826:[[15667]],194827:[[28363]],194828:[[28359]],194829:[[147153]],194830:[[28153]],194831:[[28526]],194832:[[147294]],194833:[[147342]],194834:[[28614]],194835:[[28729]],194836:[[28702]],194837:[[28699]],194838:[[15766]],194839:[[28746]],194840:[[28797]],194841:[[28791]],194842:[[28845]],194843:[[132389]],194844:[[28997]],194845:[[148067]],194846:[[29084]],194847:[[148395]],194848:[[29224]],194849:[[29237]],194850:[[29264]],194851:[[149000]],194852:[[29312]],194853:[[29333]],194854:[[149301]],194855:[[149524]],194856:[[29562]],194857:[[29579]],194858:[[16044]],194859:[[29605]],194860:[[16056]],194861:[[16056]],194862:[[29767]],194863:[[29788]],194864:[[29809]],194865:[[29829]],194866:[[29898]],194867:[[16155]],194868:[[29988]],194869:[[150582]],194870:[[30014]],194871:[[150674]],194872:[[30064]],194873:[[139679]],194874:[[30224]],194875:[[151457]],194876:[[151480]],194877:[[151620]],194878:[[16380]],194879:[[16392]],194880:[[30452]],194881:[[151795]],194882:[[151794]],194883:[[151833]],194884:[[151859]],194885:[[30494]],194886:[[30495]],194887:[[30495]],194888:[[30538]],194889:[[16441]],194890:[[30603]],194891:[[16454]],194892:[[16534]],194893:[[152605]],194894:[[30798]],194895:[[30860]],194896:[[30924]],194897:[[16611]],194898:[[153126]],194899:[[31062]],194900:[[153242]],194901:[[153285]],194902:[[31119]],194903:[[31211]],194904:[[16687]],194905:[[31296]],194906:[[31306]],194907:[[31311]],194908:[[153980]],194909:[[154279]],194910:[[154279]],194911:[[31470]],194912:[[16898]],194913:[[154539]],194914:[[31686]],194915:[[31689]],194916:[[16935]],194917:[[154752]],194918:[[31954]],194919:[[17056]],194920:[[31976]],194921:[[31971]],194922:[[32000]],194923:[[155526]],194924:[[32099]],194925:[[17153]],194926:[[32199]],194927:[[32258]],194928:[[32325]],194929:[[17204]],194930:[[156200]],194931:[[156231]],194932:[[17241]],194933:[[156377]],194934:[[32634]],194935:[[156478]],194936:[[32661]],194937:[[32762]],194938:[[32773]],194939:[[156890]],194940:[[156963]],194941:[[32864]],194942:[[157096]],194943:[[32880]],194944:[[144223]],194945:[[17365]],194946:[[32946]],194947:[[33027]],194948:[[17419]],194949:[[33086]],194950:[[23221]],194951:[[157607]],194952:[[157621]],194953:[[144275]],194954:[[144284]],194955:[[33281]],194956:[[33284]],194957:[[36766]],194958:[[17515]],194959:[[33425]],194960:[[33419]],194961:[[33437]],194962:[[21171]],194963:[[33457]],194964:[[33459]],194965:[[33469]],194966:[[33510]],194967:[[158524]],194968:[[33509]],194969:[[33565]],194970:[[33635]],194971:[[33709]],194972:[[33571]],194973:[[33725]],194974:[[33767]],194975:[[33879]],194976:[[33619]],194977:[[33738]],194978:[[33740]],194979:[[33756]],194980:[[158774]],194981:[[159083]],194982:[[158933]],194983:[[17707]],194984:[[34033]],194985:[[34035]],194986:[[34070]],194987:[[160714]],194988:[[34148]],194989:[[159532]],194990:[[17757]],194991:[[17761]],194992:[[159665]],194993:[[159954]],194994:[[17771]],194995:[[34384]],194996:[[34396]],194997:[[34407]],194998:[[34409]],194999:[[34473]],195000:[[34440]],195001:[[34574]],195002:[[34530]],195003:[[34681]],195004:[[34600]],195005:[[34667]],195006:[[34694]],195007:[[17879]],195008:[[34785]],195009:[[34817]],195010:[[17913]],195011:[[34912]],195012:[[34915]],195013:[[161383]],195014:[[35031]],195015:[[35038]],195016:[[17973]],195017:[[35066]],195018:[[13499]],195019:[[161966]],195020:[[162150]],195021:[[18110]],195022:[[18119]],195023:[[35488]],195024:[[35565]],195025:[[35722]],195026:[[35925]],195027:[[162984]],195028:[[36011]],195029:[[36033]],195030:[[36123]],195031:[[36215]],195032:[[163631]],195033:[[133124]],195034:[[36299]],195035:[[36284]],195036:[[36336]],195037:[[133342]],195038:[[36564]],195039:[[36664]],195040:[[165330]],195041:[[165357]],195042:[[37012]],195043:[[37105]],195044:[[37137]],195045:[[165678]],195046:[[37147]],195047:[[37432]],195048:[[37591]],195049:[[37592]],195050:[[37500]],195051:[[37881]],195052:[[37909]],195053:[[166906]],195054:[[38283]],195055:[[18837]],195056:[[38327]],195057:[[167287]],195058:[[18918]],195059:[[38595]],195060:[[23986]],195061:[[38691]],195062:[[168261]],195063:[[168474]],195064:[[19054]],195065:[[19062]],195066:[[38880]],195067:[[168970]],195068:[[19122]],195069:[[169110]],195070:[[38923]],195071:[[38923]]},
13907 64000:{64000:[[20999]],64001:[[24230]],64002:[[25299]],64003:[[31958]],64004:[[23429]],64005:[[27934]],64006:[[26292]],64007:[[36667]],64008:[[34892]],64009:[[38477]],64010:[[35211]],64011:[[24275]],64012:[[20800]],64013:[[21952]],64016:[[22618]],64018:[[26228]],64021:[[20958]],64022:[[29482]],64023:[[30410]],64024:[[31036]],64025:[[31070]],64026:[[31077]],64027:[[31119]],64028:[[38742]],64029:[[31934]],64030:[[32701]],64032:[[34322]],64034:[[35576]],64037:[[36920]],64038:[[37117]],64042:[[39151]],64043:[[39164]],64044:[[39208]],64045:[[40372]],64046:[[37086]],64047:[[38583]],64048:[[20398]],64049:[[20711]],64050:[[20813]],64051:[[21193]],64052:[[21220]],64053:[[21329]],64054:[[21917]],64055:[[22022]],64056:[[22120]],64057:[[22592]],64058:[[22696]],64059:[[23652]],64060:[[23662]],64061:[[24724]],64062:[[24936]],64063:[[24974]],64064:[[25074]],64065:[[25935]],64066:[[26082]],64067:[[26257]],64068:[[26757]],64069:[[28023]],64070:[[28186]],64071:[[28450]],64072:[[29038]],64073:[[29227]],64074:[[29730]],64075:[[30865]],64076:[[31038]],64077:[[31049]],64078:[[31048]],64079:[[31056]],64080:[[31062]],64081:[[31069]],64082:[[31117]],64083:[[31118]],64084:[[31296]],64085:[[31361]],64086:[[31680]],64087:[[32244]],64088:[[32265]],64089:[[32321]],64090:[[32626]],64091:[[32773]],64092:[[33261]],64093:[[33401]],64094:[[33401]],64095:[[33879]],64096:[[35088]],64097:[[35222]],64098:[[35585]],64099:[[35641]],64100:[[36051]],64101:[[36104]],64102:[[36790]],64103:[[36920]],64104:[[38627]],64105:[[38911]],64106:[[38971]],64107:[[24693]],64108:[[148206]],64109:[[33304]],64112:[[20006]],64113:[[20917]],64114:[[20840]],64115:[[20352]],64116:[[20805]],64117:[[20864]],64118:[[21191]],64119:[[21242]],64120:[[21917]],64121:[[21845]],64122:[[21913]],64123:[[21986]],64124:[[22618]],64125:[[22707]],64126:[[22852]],64127:[[22868]],64128:[[23138]],64129:[[23336]],64130:[[24274]],64131:[[24281]],64132:[[24425]],64133:[[24493]],64134:[[24792]],64135:[[24910]],64136:[[24840]],64137:[[24974]],64138:[[24928]],64139:[[25074]],64140:[[25140]],64141:[[25540]],64142:[[25628]],64143:[[25682]],64144:[[25942]],64145:[[26228]],64146:[[26391]],64147:[[26395]],64148:[[26454]],64149:[[27513]],64150:[[27578]],64151:[[27969]],64152:[[28379]],64153:[[28363]],64154:[[28450]],64155:[[28702]],64156:[[29038]],64157:[[30631]],64158:[[29237]],64159:[[29359]],64160:[[29482]],64161:[[29809]],64162:[[29958]],64163:[[30011]],64164:[[30237]],64165:[[30239]],64166:[[30410]],64167:[[30427]],64168:[[30452]],64169:[[30538]],64170:[[30528]],64171:[[30924]],64172:[[31409]],64173:[[31680]],64174:[[31867]],64175:[[32091]],64176:[[32244]],64177:[[32574]],64178:[[32773]],64179:[[33618]],64180:[[33775]],64181:[[34681]],64182:[[35137]],64183:[[35206]],64184:[[35222]],64185:[[35519]],64186:[[35576]],64187:[[35531]],64188:[[35585]],64189:[[35582]],64190:[[35565]],64191:[[35641]],64192:[[35722]],64193:[[36104]],64194:[[36664]],64195:[[36978]],64196:[[37273]],64197:[[37494]],64198:[[38524]],64199:[[38627]],64200:[[38742]],64201:[[38875]],64202:[[38911]],64203:[[38923]],64204:[[38971]],64205:[[39698]],64206:[[40860]],64207:[[141386]],64208:[[141380]],64209:[[144341]],64210:[[15261]],64211:[[16408]],64212:[[16441]],64213:[[152137]],64214:[[154832]],64215:[[163539]],64216:[[40771]],64217:[[40846]],195072:[[38953]],195073:[[169398]],195074:[[39138]],195075:[[19251]],195076:[[39209]],195077:[[39335]],195078:[[39362]],195079:[[39422]],195080:[[19406]],195081:[[170800]],195082:[[39698]],195083:[[40000]],195084:[[40189]],195085:[[19662]],195086:[[19693]],195087:[[40295]],195088:[[172238]],195089:[[19704]],195090:[[172293]],195091:[[172558]],195092:[[172689]],195093:[[40635]],195094:[[19798]],195095:[[40697]],195096:[[40702]],195097:[[40709]],195098:[[40719]],195099:[[40726]],195100:[[40763]],195101:[[173568]]},
13908 64256:{64256:[[102,102],256],64257:[[102,105],256],64258:[[102,108],256],64259:[[102,102,105],256],64260:[[102,102,108],256],64261:[[383,116],256],64262:[[115,116],256],64275:[[1396,1398],256],64276:[[1396,1381],256],64277:[[1396,1387],256],64278:[[1406,1398],256],64279:[[1396,1389],256],64285:[[1497,1460],512],64286:[,26],64287:[[1522,1463],512],64288:[[1506],256],64289:[[1488],256],64290:[[1491],256],64291:[[1492],256],64292:[[1499],256],64293:[[1500],256],64294:[[1501],256],64295:[[1512],256],64296:[[1514],256],64297:[[43],256],64298:[[1513,1473],512],64299:[[1513,1474],512],64300:[[64329,1473],512],64301:[[64329,1474],512],64302:[[1488,1463],512],64303:[[1488,1464],512],64304:[[1488,1468],512],64305:[[1489,1468],512],64306:[[1490,1468],512],64307:[[1491,1468],512],64308:[[1492,1468],512],64309:[[1493,1468],512],64310:[[1494,1468],512],64312:[[1496,1468],512],64313:[[1497,1468],512],64314:[[1498,1468],512],64315:[[1499,1468],512],64316:[[1500,1468],512],64318:[[1502,1468],512],64320:[[1504,1468],512],64321:[[1505,1468],512],64323:[[1507,1468],512],64324:[[1508,1468],512],64326:[[1510,1468],512],64327:[[1511,1468],512],64328:[[1512,1468],512],64329:[[1513,1468],512],64330:[[1514,1468],512],64331:[[1493,1465],512],64332:[[1489,1471],512],64333:[[1499,1471],512],64334:[[1508,1471],512],64335:[[1488,1500],256],64336:[[1649],256],64337:[[1649],256],64338:[[1659],256],64339:[[1659],256],64340:[[1659],256],64341:[[1659],256],64342:[[1662],256],64343:[[1662],256],64344:[[1662],256],64345:[[1662],256],64346:[[1664],256],64347:[[1664],256],64348:[[1664],256],64349:[[1664],256],64350:[[1658],256],64351:[[1658],256],64352:[[1658],256],64353:[[1658],256],64354:[[1663],256],64355:[[1663],256],64356:[[1663],256],64357:[[1663],256],64358:[[1657],256],64359:[[1657],256],64360:[[1657],256],64361:[[1657],256],64362:[[1700],256],64363:[[1700],256],64364:[[1700],256],64365:[[1700],256],64366:[[1702],256],64367:[[1702],256],64368:[[1702],256],64369:[[1702],256],64370:[[1668],256],64371:[[1668],256],64372:[[1668],256],64373:[[1668],256],64374:[[1667],256],64375:[[1667],256],64376:[[1667],256],64377:[[1667],256],64378:[[1670],256],64379:[[1670],256],64380:[[1670],256],64381:[[1670],256],64382:[[1671],256],64383:[[1671],256],64384:[[1671],256],64385:[[1671],256],64386:[[1677],256],64387:[[1677],256],64388:[[1676],256],64389:[[1676],256],64390:[[1678],256],64391:[[1678],256],64392:[[1672],256],64393:[[1672],256],64394:[[1688],256],64395:[[1688],256],64396:[[1681],256],64397:[[1681],256],64398:[[1705],256],64399:[[1705],256],64400:[[1705],256],64401:[[1705],256],64402:[[1711],256],64403:[[1711],256],64404:[[1711],256],64405:[[1711],256],64406:[[1715],256],64407:[[1715],256],64408:[[1715],256],64409:[[1715],256],64410:[[1713],256],64411:[[1713],256],64412:[[1713],256],64413:[[1713],256],64414:[[1722],256],64415:[[1722],256],64416:[[1723],256],64417:[[1723],256],64418:[[1723],256],64419:[[1723],256],64420:[[1728],256],64421:[[1728],256],64422:[[1729],256],64423:[[1729],256],64424:[[1729],256],64425:[[1729],256],64426:[[1726],256],64427:[[1726],256],64428:[[1726],256],64429:[[1726],256],64430:[[1746],256],64431:[[1746],256],64432:[[1747],256],64433:[[1747],256],64467:[[1709],256],64468:[[1709],256],64469:[[1709],256],64470:[[1709],256],64471:[[1735],256],64472:[[1735],256],64473:[[1734],256],64474:[[1734],256],64475:[[1736],256],64476:[[1736],256],64477:[[1655],256],64478:[[1739],256],64479:[[1739],256],64480:[[1733],256],64481:[[1733],256],64482:[[1737],256],64483:[[1737],256],64484:[[1744],256],64485:[[1744],256],64486:[[1744],256],64487:[[1744],256],64488:[[1609],256],64489:[[1609],256],64490:[[1574,1575],256],64491:[[1574,1575],256],64492:[[1574,1749],256],64493:[[1574,1749],256],64494:[[1574,1608],256],64495:[[1574,1608],256],64496:[[1574,1735],256],64497:[[1574,1735],256],64498:[[1574,1734],256],64499:[[1574,1734],256],64500:[[1574,1736],256],64501:[[1574,1736],256],64502:[[1574,1744],256],64503:[[1574,1744],256],64504:[[1574,1744],256],64505:[[1574,1609],256],64506:[[1574,1609],256],64507:[[1574,1609],256],64508:[[1740],256],64509:[[1740],256],64510:[[1740],256],64511:[[1740],256]},
13909 64512:{64512:[[1574,1580],256],64513:[[1574,1581],256],64514:[[1574,1605],256],64515:[[1574,1609],256],64516:[[1574,1610],256],64517:[[1576,1580],256],64518:[[1576,1581],256],64519:[[1576,1582],256],64520:[[1576,1605],256],64521:[[1576,1609],256],64522:[[1576,1610],256],64523:[[1578,1580],256],64524:[[1578,1581],256],64525:[[1578,1582],256],64526:[[1578,1605],256],64527:[[1578,1609],256],64528:[[1578,1610],256],64529:[[1579,1580],256],64530:[[1579,1605],256],64531:[[1579,1609],256],64532:[[1579,1610],256],64533:[[1580,1581],256],64534:[[1580,1605],256],64535:[[1581,1580],256],64536:[[1581,1605],256],64537:[[1582,1580],256],64538:[[1582,1581],256],64539:[[1582,1605],256],64540:[[1587,1580],256],64541:[[1587,1581],256],64542:[[1587,1582],256],64543:[[1587,1605],256],64544:[[1589,1581],256],64545:[[1589,1605],256],64546:[[1590,1580],256],64547:[[1590,1581],256],64548:[[1590,1582],256],64549:[[1590,1605],256],64550:[[1591,1581],256],64551:[[1591,1605],256],64552:[[1592,1605],256],64553:[[1593,1580],256],64554:[[1593,1605],256],64555:[[1594,1580],256],64556:[[1594,1605],256],64557:[[1601,1580],256],64558:[[1601,1581],256],64559:[[1601,1582],256],64560:[[1601,1605],256],64561:[[1601,1609],256],64562:[[1601,1610],256],64563:[[1602,1581],256],64564:[[1602,1605],256],64565:[[1602,1609],256],64566:[[1602,1610],256],64567:[[1603,1575],256],64568:[[1603,1580],256],64569:[[1603,1581],256],64570:[[1603,1582],256],64571:[[1603,1604],256],64572:[[1603,1605],256],64573:[[1603,1609],256],64574:[[1603,1610],256],64575:[[1604,1580],256],64576:[[1604,1581],256],64577:[[1604,1582],256],64578:[[1604,1605],256],64579:[[1604,1609],256],64580:[[1604,1610],256],64581:[[1605,1580],256],64582:[[1605,1581],256],64583:[[1605,1582],256],64584:[[1605,1605],256],64585:[[1605,1609],256],64586:[[1605,1610],256],64587:[[1606,1580],256],64588:[[1606,1581],256],64589:[[1606,1582],256],64590:[[1606,1605],256],64591:[[1606,1609],256],64592:[[1606,1610],256],64593:[[1607,1580],256],64594:[[1607,1605],256],64595:[[1607,1609],256],64596:[[1607,1610],256],64597:[[1610,1580],256],64598:[[1610,1581],256],64599:[[1610,1582],256],64600:[[1610,1605],256],64601:[[1610,1609],256],64602:[[1610,1610],256],64603:[[1584,1648],256],64604:[[1585,1648],256],64605:[[1609,1648],256],64606:[[32,1612,1617],256],64607:[[32,1613,1617],256],64608:[[32,1614,1617],256],64609:[[32,1615,1617],256],64610:[[32,1616,1617],256],64611:[[32,1617,1648],256],64612:[[1574,1585],256],64613:[[1574,1586],256],64614:[[1574,1605],256],64615:[[1574,1606],256],64616:[[1574,1609],256],64617:[[1574,1610],256],64618:[[1576,1585],256],64619:[[1576,1586],256],64620:[[1576,1605],256],64621:[[1576,1606],256],64622:[[1576,1609],256],64623:[[1576,1610],256],64624:[[1578,1585],256],64625:[[1578,1586],256],64626:[[1578,1605],256],64627:[[1578,1606],256],64628:[[1578,1609],256],64629:[[1578,1610],256],64630:[[1579,1585],256],64631:[[1579,1586],256],64632:[[1579,1605],256],64633:[[1579,1606],256],64634:[[1579,1609],256],64635:[[1579,1610],256],64636:[[1601,1609],256],64637:[[1601,1610],256],64638:[[1602,1609],256],64639:[[1602,1610],256],64640:[[1603,1575],256],64641:[[1603,1604],256],64642:[[1603,1605],256],64643:[[1603,1609],256],64644:[[1603,1610],256],64645:[[1604,1605],256],64646:[[1604,1609],256],64647:[[1604,1610],256],64648:[[1605,1575],256],64649:[[1605,1605],256],64650:[[1606,1585],256],64651:[[1606,1586],256],64652:[[1606,1605],256],64653:[[1606,1606],256],64654:[[1606,1609],256],64655:[[1606,1610],256],64656:[[1609,1648],256],64657:[[1610,1585],256],64658:[[1610,1586],256],64659:[[1610,1605],256],64660:[[1610,1606],256],64661:[[1610,1609],256],64662:[[1610,1610],256],64663:[[1574,1580],256],64664:[[1574,1581],256],64665:[[1574,1582],256],64666:[[1574,1605],256],64667:[[1574,1607],256],64668:[[1576,1580],256],64669:[[1576,1581],256],64670:[[1576,1582],256],64671:[[1576,1605],256],64672:[[1576,1607],256],64673:[[1578,1580],256],64674:[[1578,1581],256],64675:[[1578,1582],256],64676:[[1578,1605],256],64677:[[1578,1607],256],64678:[[1579,1605],256],64679:[[1580,1581],256],64680:[[1580,1605],256],64681:[[1581,1580],256],64682:[[1581,1605],256],64683:[[1582,1580],256],64684:[[1582,1605],256],64685:[[1587,1580],256],64686:[[1587,1581],256],64687:[[1587,1582],256],64688:[[1587,1605],256],64689:[[1589,1581],256],64690:[[1589,1582],256],64691:[[1589,1605],256],64692:[[1590,1580],256],64693:[[1590,1581],256],64694:[[1590,1582],256],64695:[[1590,1605],256],64696:[[1591,1581],256],64697:[[1592,1605],256],64698:[[1593,1580],256],64699:[[1593,1605],256],64700:[[1594,1580],256],64701:[[1594,1605],256],64702:[[1601,1580],256],64703:[[1601,1581],256],64704:[[1601,1582],256],64705:[[1601,1605],256],64706:[[1602,1581],256],64707:[[1602,1605],256],64708:[[1603,1580],256],64709:[[1603,1581],256],64710:[[1603,1582],256],64711:[[1603,1604],256],64712:[[1603,1605],256],64713:[[1604,1580],256],64714:[[1604,1581],256],64715:[[1604,1582],256],64716:[[1604,1605],256],64717:[[1604,1607],256],64718:[[1605,1580],256],64719:[[1605,1581],256],64720:[[1605,1582],256],64721:[[1605,1605],256],64722:[[1606,1580],256],64723:[[1606,1581],256],64724:[[1606,1582],256],64725:[[1606,1605],256],64726:[[1606,1607],256],64727:[[1607,1580],256],64728:[[1607,1605],256],64729:[[1607,1648],256],64730:[[1610,1580],256],64731:[[1610,1581],256],64732:[[1610,1582],256],64733:[[1610,1605],256],64734:[[1610,1607],256],64735:[[1574,1605],256],64736:[[1574,1607],256],64737:[[1576,1605],256],64738:[[1576,1607],256],64739:[[1578,1605],256],64740:[[1578,1607],256],64741:[[1579,1605],256],64742:[[1579,1607],256],64743:[[1587,1605],256],64744:[[1587,1607],256],64745:[[1588,1605],256],64746:[[1588,1607],256],64747:[[1603,1604],256],64748:[[1603,1605],256],64749:[[1604,1605],256],64750:[[1606,1605],256],64751:[[1606,1607],256],64752:[[1610,1605],256],64753:[[1610,1607],256],64754:[[1600,1614,1617],256],64755:[[1600,1615,1617],256],64756:[[1600,1616,1617],256],64757:[[1591,1609],256],64758:[[1591,1610],256],64759:[[1593,1609],256],64760:[[1593,1610],256],64761:[[1594,1609],256],64762:[[1594,1610],256],64763:[[1587,1609],256],64764:[[1587,1610],256],64765:[[1588,1609],256],64766:[[1588,1610],256],64767:[[1581,1609],256]},
13910 64768:{64768:[[1581,1610],256],64769:[[1580,1609],256],64770:[[1580,1610],256],64771:[[1582,1609],256],64772:[[1582,1610],256],64773:[[1589,1609],256],64774:[[1589,1610],256],64775:[[1590,1609],256],64776:[[1590,1610],256],64777:[[1588,1580],256],64778:[[1588,1581],256],64779:[[1588,1582],256],64780:[[1588,1605],256],64781:[[1588,1585],256],64782:[[1587,1585],256],64783:[[1589,1585],256],64784:[[1590,1585],256],64785:[[1591,1609],256],64786:[[1591,1610],256],64787:[[1593,1609],256],64788:[[1593,1610],256],64789:[[1594,1609],256],64790:[[1594,1610],256],64791:[[1587,1609],256],64792:[[1587,1610],256],64793:[[1588,1609],256],64794:[[1588,1610],256],64795:[[1581,1609],256],64796:[[1581,1610],256],64797:[[1580,1609],256],64798:[[1580,1610],256],64799:[[1582,1609],256],64800:[[1582,1610],256],64801:[[1589,1609],256],64802:[[1589,1610],256],64803:[[1590,1609],256],64804:[[1590,1610],256],64805:[[1588,1580],256],64806:[[1588,1581],256],64807:[[1588,1582],256],64808:[[1588,1605],256],64809:[[1588,1585],256],64810:[[1587,1585],256],64811:[[1589,1585],256],64812:[[1590,1585],256],64813:[[1588,1580],256],64814:[[1588,1581],256],64815:[[1588,1582],256],64816:[[1588,1605],256],64817:[[1587,1607],256],64818:[[1588,1607],256],64819:[[1591,1605],256],64820:[[1587,1580],256],64821:[[1587,1581],256],64822:[[1587,1582],256],64823:[[1588,1580],256],64824:[[1588,1581],256],64825:[[1588,1582],256],64826:[[1591,1605],256],64827:[[1592,1605],256],64828:[[1575,1611],256],64829:[[1575,1611],256],64848:[[1578,1580,1605],256],64849:[[1578,1581,1580],256],64850:[[1578,1581,1580],256],64851:[[1578,1581,1605],256],64852:[[1578,1582,1605],256],64853:[[1578,1605,1580],256],64854:[[1578,1605,1581],256],64855:[[1578,1605,1582],256],64856:[[1580,1605,1581],256],64857:[[1580,1605,1581],256],64858:[[1581,1605,1610],256],64859:[[1581,1605,1609],256],64860:[[1587,1581,1580],256],64861:[[1587,1580,1581],256],64862:[[1587,1580,1609],256],64863:[[1587,1605,1581],256],64864:[[1587,1605,1581],256],64865:[[1587,1605,1580],256],64866:[[1587,1605,1605],256],64867:[[1587,1605,1605],256],64868:[[1589,1581,1581],256],64869:[[1589,1581,1581],256],64870:[[1589,1605,1605],256],64871:[[1588,1581,1605],256],64872:[[1588,1581,1605],256],64873:[[1588,1580,1610],256],64874:[[1588,1605,1582],256],64875:[[1588,1605,1582],256],64876:[[1588,1605,1605],256],64877:[[1588,1605,1605],256],64878:[[1590,1581,1609],256],64879:[[1590,1582,1605],256],64880:[[1590,1582,1605],256],64881:[[1591,1605,1581],256],64882:[[1591,1605,1581],256],64883:[[1591,1605,1605],256],64884:[[1591,1605,1610],256],64885:[[1593,1580,1605],256],64886:[[1593,1605,1605],256],64887:[[1593,1605,1605],256],64888:[[1593,1605,1609],256],64889:[[1594,1605,1605],256],64890:[[1594,1605,1610],256],64891:[[1594,1605,1609],256],64892:[[1601,1582,1605],256],64893:[[1601,1582,1605],256],64894:[[1602,1605,1581],256],64895:[[1602,1605,1605],256],64896:[[1604,1581,1605],256],64897:[[1604,1581,1610],256],64898:[[1604,1581,1609],256],64899:[[1604,1580,1580],256],64900:[[1604,1580,1580],256],64901:[[1604,1582,1605],256],64902:[[1604,1582,1605],256],64903:[[1604,1605,1581],256],64904:[[1604,1605,1581],256],64905:[[1605,1581,1580],256],64906:[[1605,1581,1605],256],64907:[[1605,1581,1610],256],64908:[[1605,1580,1581],256],64909:[[1605,1580,1605],256],64910:[[1605,1582,1580],256],64911:[[1605,1582,1605],256],64914:[[1605,1580,1582],256],64915:[[1607,1605,1580],256],64916:[[1607,1605,1605],256],64917:[[1606,1581,1605],256],64918:[[1606,1581,1609],256],64919:[[1606,1580,1605],256],64920:[[1606,1580,1605],256],64921:[[1606,1580,1609],256],64922:[[1606,1605,1610],256],64923:[[1606,1605,1609],256],64924:[[1610,1605,1605],256],64925:[[1610,1605,1605],256],64926:[[1576,1582,1610],256],64927:[[1578,1580,1610],256],64928:[[1578,1580,1609],256],64929:[[1578,1582,1610],256],64930:[[1578,1582,1609],256],64931:[[1578,1605,1610],256],64932:[[1578,1605,1609],256],64933:[[1580,1605,1610],256],64934:[[1580,1581,1609],256],64935:[[1580,1605,1609],256],64936:[[1587,1582,1609],256],64937:[[1589,1581,1610],256],64938:[[1588,1581,1610],256],64939:[[1590,1581,1610],256],64940:[[1604,1580,1610],256],64941:[[1604,1605,1610],256],64942:[[1610,1581,1610],256],64943:[[1610,1580,1610],256],64944:[[1610,1605,1610],256],64945:[[1605,1605,1610],256],64946:[[1602,1605,1610],256],64947:[[1606,1581,1610],256],64948:[[1602,1605,1581],256],64949:[[1604,1581,1605],256],64950:[[1593,1605,1610],256],64951:[[1603,1605,1610],256],64952:[[1606,1580,1581],256],64953:[[1605,1582,1610],256],64954:[[1604,1580,1605],256],64955:[[1603,1605,1605],256],64956:[[1604,1580,1605],256],64957:[[1606,1580,1581],256],64958:[[1580,1581,1610],256],64959:[[1581,1580,1610],256],64960:[[1605,1580,1610],256],64961:[[1601,1605,1610],256],64962:[[1576,1581,1610],256],64963:[[1603,1605,1605],256],64964:[[1593,1580,1605],256],64965:[[1589,1605,1605],256],64966:[[1587,1582,1610],256],64967:[[1606,1580,1610],256],65008:[[1589,1604,1746],256],65009:[[1602,1604,1746],256],65010:[[1575,1604,1604,1607],256],65011:[[1575,1603,1576,1585],256],65012:[[1605,1581,1605,1583],256],65013:[[1589,1604,1593,1605],256],65014:[[1585,1587,1608,1604],256],65015:[[1593,1604,1610,1607],256],65016:[[1608,1587,1604,1605],256],65017:[[1589,1604,1609],256],65018:[[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605],256],65019:[[1580,1604,32,1580,1604,1575,1604,1607],256],65020:[[1585,1740,1575,1604],256]},
13911 65024:{65040:[[44],256],65041:[[12289],256],65042:[[12290],256],65043:[[58],256],65044:[[59],256],65045:[[33],256],65046:[[63],256],65047:[[12310],256],65048:[[12311],256],65049:[[8230],256],65056:[,230],65057:[,230],65058:[,230],65059:[,230],65060:[,230],65061:[,230],65062:[,230],65063:[,220],65064:[,220],65065:[,220],65066:[,220],65067:[,220],65068:[,220],65069:[,220],65072:[[8229],256],65073:[[8212],256],65074:[[8211],256],65075:[[95],256],65076:[[95],256],65077:[[40],256],65078:[[41],256],65079:[[123],256],65080:[[125],256],65081:[[12308],256],65082:[[12309],256],65083:[[12304],256],65084:[[12305],256],65085:[[12298],256],65086:[[12299],256],65087:[[12296],256],65088:[[12297],256],65089:[[12300],256],65090:[[12301],256],65091:[[12302],256],65092:[[12303],256],65095:[[91],256],65096:[[93],256],65097:[[8254],256],65098:[[8254],256],65099:[[8254],256],65100:[[8254],256],65101:[[95],256],65102:[[95],256],65103:[[95],256],65104:[[44],256],65105:[[12289],256],65106:[[46],256],65108:[[59],256],65109:[[58],256],65110:[[63],256],65111:[[33],256],65112:[[8212],256],65113:[[40],256],65114:[[41],256],65115:[[123],256],65116:[[125],256],65117:[[12308],256],65118:[[12309],256],65119:[[35],256],65120:[[38],256],65121:[[42],256],65122:[[43],256],65123:[[45],256],65124:[[60],256],65125:[[62],256],65126:[[61],256],65128:[[92],256],65129:[[36],256],65130:[[37],256],65131:[[64],256],65136:[[32,1611],256],65137:[[1600,1611],256],65138:[[32,1612],256],65140:[[32,1613],256],65142:[[32,1614],256],65143:[[1600,1614],256],65144:[[32,1615],256],65145:[[1600,1615],256],65146:[[32,1616],256],65147:[[1600,1616],256],65148:[[32,1617],256],65149:[[1600,1617],256],65150:[[32,1618],256],65151:[[1600,1618],256],65152:[[1569],256],65153:[[1570],256],65154:[[1570],256],65155:[[1571],256],65156:[[1571],256],65157:[[1572],256],65158:[[1572],256],65159:[[1573],256],65160:[[1573],256],65161:[[1574],256],65162:[[1574],256],65163:[[1574],256],65164:[[1574],256],65165:[[1575],256],65166:[[1575],256],65167:[[1576],256],65168:[[1576],256],65169:[[1576],256],65170:[[1576],256],65171:[[1577],256],65172:[[1577],256],65173:[[1578],256],65174:[[1578],256],65175:[[1578],256],65176:[[1578],256],65177:[[1579],256],65178:[[1579],256],65179:[[1579],256],65180:[[1579],256],65181:[[1580],256],65182:[[1580],256],65183:[[1580],256],65184:[[1580],256],65185:[[1581],256],65186:[[1581],256],65187:[[1581],256],65188:[[1581],256],65189:[[1582],256],65190:[[1582],256],65191:[[1582],256],65192:[[1582],256],65193:[[1583],256],65194:[[1583],256],65195:[[1584],256],65196:[[1584],256],65197:[[1585],256],65198:[[1585],256],65199:[[1586],256],65200:[[1586],256],65201:[[1587],256],65202:[[1587],256],65203:[[1587],256],65204:[[1587],256],65205:[[1588],256],65206:[[1588],256],65207:[[1588],256],65208:[[1588],256],65209:[[1589],256],65210:[[1589],256],65211:[[1589],256],65212:[[1589],256],65213:[[1590],256],65214:[[1590],256],65215:[[1590],256],65216:[[1590],256],65217:[[1591],256],65218:[[1591],256],65219:[[1591],256],65220:[[1591],256],65221:[[1592],256],65222:[[1592],256],65223:[[1592],256],65224:[[1592],256],65225:[[1593],256],65226:[[1593],256],65227:[[1593],256],65228:[[1593],256],65229:[[1594],256],65230:[[1594],256],65231:[[1594],256],65232:[[1594],256],65233:[[1601],256],65234:[[1601],256],65235:[[1601],256],65236:[[1601],256],65237:[[1602],256],65238:[[1602],256],65239:[[1602],256],65240:[[1602],256],65241:[[1603],256],65242:[[1603],256],65243:[[1603],256],65244:[[1603],256],65245:[[1604],256],65246:[[1604],256],65247:[[1604],256],65248:[[1604],256],65249:[[1605],256],65250:[[1605],256],65251:[[1605],256],65252:[[1605],256],65253:[[1606],256],65254:[[1606],256],65255:[[1606],256],65256:[[1606],256],65257:[[1607],256],65258:[[1607],256],65259:[[1607],256],65260:[[1607],256],65261:[[1608],256],65262:[[1608],256],65263:[[1609],256],65264:[[1609],256],65265:[[1610],256],65266:[[1610],256],65267:[[1610],256],65268:[[1610],256],65269:[[1604,1570],256],65270:[[1604,1570],256],65271:[[1604,1571],256],65272:[[1604,1571],256],65273:[[1604,1573],256],65274:[[1604,1573],256],65275:[[1604,1575],256],65276:[[1604,1575],256]},
13912 65280:{65281:[[33],256],65282:[[34],256],65283:[[35],256],65284:[[36],256],65285:[[37],256],65286:[[38],256],65287:[[39],256],65288:[[40],256],65289:[[41],256],65290:[[42],256],65291:[[43],256],65292:[[44],256],65293:[[45],256],65294:[[46],256],65295:[[47],256],65296:[[48],256],65297:[[49],256],65298:[[50],256],65299:[[51],256],65300:[[52],256],65301:[[53],256],65302:[[54],256],65303:[[55],256],65304:[[56],256],65305:[[57],256],65306:[[58],256],65307:[[59],256],65308:[[60],256],65309:[[61],256],65310:[[62],256],65311:[[63],256],65312:[[64],256],65313:[[65],256],65314:[[66],256],65315:[[67],256],65316:[[68],256],65317:[[69],256],65318:[[70],256],65319:[[71],256],65320:[[72],256],65321:[[73],256],65322:[[74],256],65323:[[75],256],65324:[[76],256],65325:[[77],256],65326:[[78],256],65327:[[79],256],65328:[[80],256],65329:[[81],256],65330:[[82],256],65331:[[83],256],65332:[[84],256],65333:[[85],256],65334:[[86],256],65335:[[87],256],65336:[[88],256],65337:[[89],256],65338:[[90],256],65339:[[91],256],65340:[[92],256],65341:[[93],256],65342:[[94],256],65343:[[95],256],65344:[[96],256],65345:[[97],256],65346:[[98],256],65347:[[99],256],65348:[[100],256],65349:[[101],256],65350:[[102],256],65351:[[103],256],65352:[[104],256],65353:[[105],256],65354:[[106],256],65355:[[107],256],65356:[[108],256],65357:[[109],256],65358:[[110],256],65359:[[111],256],65360:[[112],256],65361:[[113],256],65362:[[114],256],65363:[[115],256],65364:[[116],256],65365:[[117],256],65366:[[118],256],65367:[[119],256],65368:[[120],256],65369:[[121],256],65370:[[122],256],65371:[[123],256],65372:[[124],256],65373:[[125],256],65374:[[126],256],65375:[[10629],256],65376:[[10630],256],65377:[[12290],256],65378:[[12300],256],65379:[[12301],256],65380:[[12289],256],65381:[[12539],256],65382:[[12530],256],65383:[[12449],256],65384:[[12451],256],65385:[[12453],256],65386:[[12455],256],65387:[[12457],256],65388:[[12515],256],65389:[[12517],256],65390:[[12519],256],65391:[[12483],256],65392:[[12540],256],65393:[[12450],256],65394:[[12452],256],65395:[[12454],256],65396:[[12456],256],65397:[[12458],256],65398:[[12459],256],65399:[[12461],256],65400:[[12463],256],65401:[[12465],256],65402:[[12467],256],65403:[[12469],256],65404:[[12471],256],65405:[[12473],256],65406:[[12475],256],65407:[[12477],256],65408:[[12479],256],65409:[[12481],256],65410:[[12484],256],65411:[[12486],256],65412:[[12488],256],65413:[[12490],256],65414:[[12491],256],65415:[[12492],256],65416:[[12493],256],65417:[[12494],256],65418:[[12495],256],65419:[[12498],256],65420:[[12501],256],65421:[[12504],256],65422:[[12507],256],65423:[[12510],256],65424:[[12511],256],65425:[[12512],256],65426:[[12513],256],65427:[[12514],256],65428:[[12516],256],65429:[[12518],256],65430:[[12520],256],65431:[[12521],256],65432:[[12522],256],65433:[[12523],256],65434:[[12524],256],65435:[[12525],256],65436:[[12527],256],65437:[[12531],256],65438:[[12441],256],65439:[[12442],256],65440:[[12644],256],65441:[[12593],256],65442:[[12594],256],65443:[[12595],256],65444:[[12596],256],65445:[[12597],256],65446:[[12598],256],65447:[[12599],256],65448:[[12600],256],65449:[[12601],256],65450:[[12602],256],65451:[[12603],256],65452:[[12604],256],65453:[[12605],256],65454:[[12606],256],65455:[[12607],256],65456:[[12608],256],65457:[[12609],256],65458:[[12610],256],65459:[[12611],256],65460:[[12612],256],65461:[[12613],256],65462:[[12614],256],65463:[[12615],256],65464:[[12616],256],65465:[[12617],256],65466:[[12618],256],65467:[[12619],256],65468:[[12620],256],65469:[[12621],256],65470:[[12622],256],65474:[[12623],256],65475:[[12624],256],65476:[[12625],256],65477:[[12626],256],65478:[[12627],256],65479:[[12628],256],65482:[[12629],256],65483:[[12630],256],65484:[[12631],256],65485:[[12632],256],65486:[[12633],256],65487:[[12634],256],65490:[[12635],256],65491:[[12636],256],65492:[[12637],256],65493:[[12638],256],65494:[[12639],256],65495:[[12640],256],65498:[[12641],256],65499:[[12642],256],65500:[[12643],256],65504:[[162],256],65505:[[163],256],65506:[[172],256],65507:[[175],256],65508:[[166],256],65509:[[165],256],65510:[[8361],256],65512:[[9474],256],65513:[[8592],256],65514:[[8593],256],65515:[[8594],256],65516:[[8595],256],65517:[[9632],256],65518:[[9675],256]}
13913
13914 };
13915
13916 /***** Module to export */
13917 var unorm = {
13918 nfc: nfc,
13919 nfd: nfd,
13920 nfkc: nfkc,
13921 nfkd: nfkd
13922 };
13923
13924 /*globals module:true,define:true*/
13925
13926 // CommonJS
13927 if (typeof module === "object") {
13928 module.exports = unorm;
13929
13930 // AMD
13931 } else if (typeof define === "function" && define.amd) {
13932 define("unorm", function () {
13933 return unorm;
13934 });
13935
13936 // Global
13937 } else {
13938 root.unorm = unorm;
13939 }
13940
13941 /***** Export as shim for String::normalize method *****/
13942 /*
13943 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
13944
13945 21.1.3.12 String.prototype.normalize(form="NFC")
13946 When the normalize method is called with one argument form, the following steps are taken:
13947
13948 1. Let O be CheckObjectCoercible(this value).
13949 2. Let S be ToString(O).
13950 3. ReturnIfAbrupt(S).
13951 4. If form is not provided or undefined let form be "NFC".
13952 5. Let f be ToString(form).
13953 6. ReturnIfAbrupt(f).
13954 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
13955 8. Let ns be the String value is the result of normalizing S into the normalization form named by f as specified in Unicode Standard Annex #15, UnicodeNormalizatoin Forms.
13956 9. Return ns.
13957
13958 The length property of the normalize method is 0.
13959
13960 *NOTE* The normalize function is intentionally generic; it does not require that its this value be a String object. Therefore it can be transferred to other kinds of objects for use as a method.
13961 */
13962 unorm.shimApplied = false;
13963
13964 if (!String.prototype.normalize) {
13965 String.prototype.normalize = function(form) {
13966 var str = "" + this;
13967 form = form === undefined ? "NFC" : form;
13968
13969 if (form === "NFC") {
13970 return unorm.nfc(str);
13971 } else if (form === "NFD") {
13972 return unorm.nfd(str);
13973 } else if (form === "NFKC") {
13974 return unorm.nfkc(str);
13975 } else if (form === "NFKD") {
13976 return unorm.nfkd(str);
13977 } else {
13978 throw new RangeError("Invalid normalization form: " + form);
13979 }
13980 };
13981
13982 unorm.shimApplied = true;
13983 }
13984 }(this));
13985 </script>
13986 <script>/*!
13987 * jQuery JavaScript Library v3.2.1
13988 * https://jquery.com/
13989 *
13990 * Includes Sizzle.js
13991 * https://sizzlejs.com/
13992 *
13993 * Copyright JS Foundation and other contributors
13994 * Released under the MIT license
13995 * https://jquery.org/license
13996 *
13997 * Date: 2017-03-20T18:59Z
13998 */
13999 ( function( global, factory ) {
14000
14001 "use strict";
14002
14003 if ( typeof module === "object" && typeof module.exports === "object" ) {
14004
14005 // For CommonJS and CommonJS-like environments where a proper `window`
14006 // is present, execute the factory and get jQuery.
14007 // For environments that do not have a `window` with a `document`
14008 // (such as Node.js), expose a factory as module.exports.
14009 // This accentuates the need for the creation of a real `window`.
14010 // e.g. var jQuery = require("jquery")(window);
14011 // See ticket #14549 for more info.
14012 module.exports = global.document ?
14013 factory( global, true ) :
14014 function( w ) {
14015 if ( !w.document ) {
14016 throw new Error( "jQuery requires a window with a document" );
14017 }
14018 return factory( w );
14019 };
14020 } else {
14021 factory( global );
14022 }
14023
14024 // Pass this if window is not defined yet
14025 } )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
14026
14027 // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
14028 // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
14029 // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
14030 // enough that all such attempts are guarded in a try block.
14031 "use strict";
14032
14033 var arr = [];
14034
14035 var document = window.document;
14036
14037 var getProto = Object.getPrototypeOf;
14038
14039 var slice = arr.slice;
14040
14041 var concat = arr.concat;
14042
14043 var push = arr.push;
14044
14045 var indexOf = arr.indexOf;
14046
14047 var class2type = {};
14048
14049 var toString = class2type.toString;
14050
14051 var hasOwn = class2type.hasOwnProperty;
14052
14053 var fnToString = hasOwn.toString;
14054
14055 var ObjectFunctionString = fnToString.call( Object );
14056
14057 var support = {};
14058
14059
14060
14061 function DOMEval( code, doc ) {
14062 doc = doc || document;
14063
14064 var script = doc.createElement( "script" );
14065
14066 script.text = code;
14067 doc.head.appendChild( script ).parentNode.removeChild( script );
14068 }
14069 /* global Symbol */
14070 // Defining this global in .eslintrc.json would create a danger of using the global
14071 // unguarded in another place, it seems safer to define global only for this module
14072
14073
14074
14075 var
14076 version = "3.2.1",
14077
14078 // Define a local copy of jQuery
14079 jQuery = function( selector, context ) {
14080
14081 // The jQuery object is actually just the init constructor 'enhanced'
14082 // Need init if jQuery is called (just allow error to be thrown if not included)
14083 return new jQuery.fn.init( selector, context );
14084 },
14085
14086 // Support: Android <=4.0 only
14087 // Make sure we trim BOM and NBSP
14088 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
14089
14090 // Matches dashed string for camelizing
14091 rmsPrefix = /^-ms-/,
14092 rdashAlpha = /-([a-z])/g,
14093
14094 // Used by jQuery.camelCase as callback to replace()
14095 fcamelCase = function( all, letter ) {
14096 return letter.toUpperCase();
14097 };
14098
14099 jQuery.fn = jQuery.prototype = {
14100
14101 // The current version of jQuery being used
14102 jquery: version,
14103
14104 constructor: jQuery,
14105
14106 // The default length of a jQuery object is 0
14107 length: 0,
14108
14109 toArray: function() {
14110 return slice.call( this );
14111 },
14112
14113 // Get the Nth element in the matched element set OR
14114 // Get the whole matched element set as a clean array
14115 get: function( num ) {
14116
14117 // Return all the elements in a clean array
14118 if ( num == null ) {
14119 return slice.call( this );
14120 }
14121
14122 // Return just the one element from the set
14123 return num < 0 ? this[ num + this.length ] : this[ num ];
14124 },
14125
14126 // Take an array of elements and push it onto the stack
14127 // (returning the new matched element set)
14128 pushStack: function( elems ) {
14129
14130 // Build a new jQuery matched element set
14131 var ret = jQuery.merge( this.constructor(), elems );
14132
14133 // Add the old object onto the stack (as a reference)
14134 ret.prevObject = this;
14135
14136 // Return the newly-formed element set
14137 return ret;
14138 },
14139
14140 // Execute a callback for every element in the matched set.
14141 each: function( callback ) {
14142 return jQuery.each( this, callback );
14143 },
14144
14145 map: function( callback ) {
14146 return this.pushStack( jQuery.map( this, function( elem, i ) {
14147 return callback.call( elem, i, elem );
14148 } ) );
14149 },
14150
14151 slice: function() {
14152 return this.pushStack( slice.apply( this, arguments ) );
14153 },
14154
14155 first: function() {
14156 return this.eq( 0 );
14157 },
14158
14159 last: function() {
14160 return this.eq( -1 );
14161 },
14162
14163 eq: function( i ) {
14164 var len = this.length,
14165 j = +i + ( i < 0 ? len : 0 );
14166 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
14167 },
14168
14169 end: function() {
14170 return this.prevObject || this.constructor();
14171 },
14172
14173 // For internal use only.
14174 // Behaves like an Array's method, not like a jQuery method.
14175 push: push,
14176 sort: arr.sort,
14177 splice: arr.splice
14178 };
14179
14180 jQuery.extend = jQuery.fn.extend = function() {
14181 var options, name, src, copy, copyIsArray, clone,
14182 target = arguments[ 0 ] || {},
14183 i = 1,
14184 length = arguments.length,
14185 deep = false;
14186
14187 // Handle a deep copy situation
14188 if ( typeof target === "boolean" ) {
14189 deep = target;
14190
14191 // Skip the boolean and the target
14192 target = arguments[ i ] || {};
14193 i++;
14194 }
14195
14196 // Handle case when target is a string or something (possible in deep copy)
14197 if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
14198 target = {};
14199 }
14200
14201 // Extend jQuery itself if only one argument is passed
14202 if ( i === length ) {
14203 target = this;
14204 i--;
14205 }
14206
14207 for ( ; i < length; i++ ) {
14208
14209 // Only deal with non-null/undefined values
14210 if ( ( options = arguments[ i ] ) != null ) {
14211
14212 // Extend the base object
14213 for ( name in options ) {
14214 src = target[ name ];
14215 copy = options[ name ];
14216
14217 // Prevent never-ending loop
14218 if ( target === copy ) {
14219 continue;
14220 }
14221
14222 // Recurse if we're merging plain objects or arrays
14223 if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
14224 ( copyIsArray = Array.isArray( copy ) ) ) ) {
14225
14226 if ( copyIsArray ) {
14227 copyIsArray = false;
14228 clone = src && Array.isArray( src ) ? src : [];
14229
14230 } else {
14231 clone = src && jQuery.isPlainObject( src ) ? src : {};
14232 }
14233
14234 // Never move original objects, clone them
14235 target[ name ] = jQuery.extend( deep, clone, copy );
14236
14237 // Don't bring in undefined values
14238 } else if ( copy !== undefined ) {
14239 target[ name ] = copy;
14240 }
14241 }
14242 }
14243 }
14244
14245 // Return the modified object
14246 return target;
14247 };
14248
14249 jQuery.extend( {
14250
14251 // Unique for each copy of jQuery on the page
14252 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
14253
14254 // Assume jQuery is ready without the ready module
14255 isReady: true,
14256
14257 error: function( msg ) {
14258 throw new Error( msg );
14259 },
14260
14261 noop: function() {},
14262
14263 isFunction: function( obj ) {
14264 return jQuery.type( obj ) === "function";
14265 },
14266
14267 isWindow: function( obj ) {
14268 return obj != null && obj === obj.window;
14269 },
14270
14271 isNumeric: function( obj ) {
14272
14273 // As of jQuery 3.0, isNumeric is limited to
14274 // strings and numbers (primitives or objects)
14275 // that can be coerced to finite numbers (gh-2662)
14276 var type = jQuery.type( obj );
14277 return ( type === "number" || type === "string" ) &&
14278
14279 // parseFloat NaNs numeric-cast false positives ("")
14280 // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
14281 // subtraction forces infinities to NaN
14282 !isNaN( obj - parseFloat( obj ) );
14283 },
14284
14285 isPlainObject: function( obj ) {
14286 var proto, Ctor;
14287
14288 // Detect obvious negatives
14289 // Use toString instead of jQuery.type to catch host objects
14290 if ( !obj || toString.call( obj ) !== "[object Object]" ) {
14291 return false;
14292 }
14293
14294 proto = getProto( obj );
14295
14296 // Objects with no prototype (e.g., `Object.create( null )`) are plain
14297 if ( !proto ) {
14298 return true;
14299 }
14300
14301 // Objects with prototype are plain iff they were constructed by a global Object function
14302 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
14303 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
14304 },
14305
14306 isEmptyObject: function( obj ) {
14307
14308 /* eslint-disable no-unused-vars */
14309 // See https://github.com/eslint/eslint/issues/6125
14310 var name;
14311
14312 for ( name in obj ) {
14313 return false;
14314 }
14315 return true;
14316 },
14317
14318 type: function( obj ) {
14319 if ( obj == null ) {
14320 return obj + "";
14321 }
14322
14323 // Support: Android <=2.3 only (functionish RegExp)
14324 return typeof obj === "object" || typeof obj === "function" ?
14325 class2type[ toString.call( obj ) ] || "object" :
14326 typeof obj;
14327 },
14328
14329 // Evaluates a script in a global context
14330 globalEval: function( code ) {
14331 DOMEval( code );
14332 },
14333
14334 // Convert dashed to camelCase; used by the css and data modules
14335 // Support: IE <=9 - 11, Edge 12 - 13
14336 // Microsoft forgot to hump their vendor prefix (#9572)
14337 camelCase: function( string ) {
14338 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
14339 },
14340
14341 each: function( obj, callback ) {
14342 var length, i = 0;
14343
14344 if ( isArrayLike( obj ) ) {
14345 length = obj.length;
14346 for ( ; i < length; i++ ) {
14347 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
14348 break;
14349 }
14350 }
14351 } else {
14352 for ( i in obj ) {
14353 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
14354 break;
14355 }
14356 }
14357 }
14358
14359 return obj;
14360 },
14361
14362 // Support: Android <=4.0 only
14363 trim: function( text ) {
14364 return text == null ?
14365 "" :
14366 ( text + "" ).replace( rtrim, "" );
14367 },
14368
14369 // results is for internal usage only
14370 makeArray: function( arr, results ) {
14371 var ret = results || [];
14372
14373 if ( arr != null ) {
14374 if ( isArrayLike( Object( arr ) ) ) {
14375 jQuery.merge( ret,
14376 typeof arr === "string" ?
14377 [ arr ] : arr
14378 );
14379 } else {
14380 push.call( ret, arr );
14381 }
14382 }
14383
14384 return ret;
14385 },
14386
14387 inArray: function( elem, arr, i ) {
14388 return arr == null ? -1 : indexOf.call( arr, elem, i );
14389 },
14390
14391 // Support: Android <=4.0 only, PhantomJS 1 only
14392 // push.apply(_, arraylike) throws on ancient WebKit
14393 merge: function( first, second ) {
14394 var len = +second.length,
14395 j = 0,
14396 i = first.length;
14397
14398 for ( ; j < len; j++ ) {
14399 first[ i++ ] = second[ j ];
14400 }
14401
14402 first.length = i;
14403
14404 return first;
14405 },
14406
14407 grep: function( elems, callback, invert ) {
14408 var callbackInverse,
14409 matches = [],
14410 i = 0,
14411 length = elems.length,
14412 callbackExpect = !invert;
14413
14414 // Go through the array, only saving the items
14415 // that pass the validator function
14416 for ( ; i < length; i++ ) {
14417 callbackInverse = !callback( elems[ i ], i );
14418 if ( callbackInverse !== callbackExpect ) {
14419 matches.push( elems[ i ] );
14420 }
14421 }
14422
14423 return matches;
14424 },
14425
14426 // arg is for internal usage only
14427 map: function( elems, callback, arg ) {
14428 var length, value,
14429 i = 0,
14430 ret = [];
14431
14432 // Go through the array, translating each of the items to their new values
14433 if ( isArrayLike( elems ) ) {
14434 length = elems.length;
14435 for ( ; i < length; i++ ) {
14436 value = callback( elems[ i ], i, arg );
14437
14438 if ( value != null ) {
14439 ret.push( value );
14440 }
14441 }
14442
14443 // Go through every key on the object,
14444 } else {
14445 for ( i in elems ) {
14446 value = callback( elems[ i ], i, arg );
14447
14448 if ( value != null ) {
14449 ret.push( value );
14450 }
14451 }
14452 }
14453
14454 // Flatten any nested arrays
14455 return concat.apply( [], ret );
14456 },
14457
14458 // A global GUID counter for objects
14459 guid: 1,
14460
14461 // Bind a function to a context, optionally partially applying any
14462 // arguments.
14463 proxy: function( fn, context ) {
14464 var tmp, args, proxy;
14465
14466 if ( typeof context === "string" ) {
14467 tmp = fn[ context ];
14468 context = fn;
14469 fn = tmp;
14470 }
14471
14472 // Quick check to determine if target is callable, in the spec
14473 // this throws a TypeError, but we will just return undefined.
14474 if ( !jQuery.isFunction( fn ) ) {
14475 return undefined;
14476 }
14477
14478 // Simulated bind
14479 args = slice.call( arguments, 2 );
14480 proxy = function() {
14481 return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
14482 };
14483
14484 // Set the guid of unique handler to the same of original handler, so it can be removed
14485 proxy.guid = fn.guid = fn.guid || jQuery.guid++;
14486
14487 return proxy;
14488 },
14489
14490 now: Date.now,
14491
14492 // jQuery.support is not used in Core but other projects attach their
14493 // properties to it so it needs to exist.
14494 support: support
14495 } );
14496
14497 if ( typeof Symbol === "function" ) {
14498 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
14499 }
14500
14501 // Populate the class2type map
14502 jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
14503 function( i, name ) {
14504 class2type[ "[object " + name + "]" ] = name.toLowerCase();
14505 } );
14506
14507 function isArrayLike( obj ) {
14508
14509 // Support: real iOS 8.2 only (not reproducible in simulator)
14510 // `in` check used to prevent JIT error (gh-2145)
14511 // hasOwn isn't used here due to false negatives
14512 // regarding Nodelist length in IE
14513 var length = !!obj && "length" in obj && obj.length,
14514 type = jQuery.type( obj );
14515
14516 if ( type === "function" || jQuery.isWindow( obj ) ) {
14517 return false;
14518 }
14519
14520 return type === "array" || length === 0 ||
14521 typeof length === "number" && length > 0 && ( length - 1 ) in obj;
14522 }
14523 var Sizzle =
14524 /*!
14525 * Sizzle CSS Selector Engine v2.3.3
14526 * https://sizzlejs.com/
14527 *
14528 * Copyright jQuery Foundation and other contributors
14529 * Released under the MIT license
14530 * http://jquery.org/license
14531 *
14532 * Date: 2016-08-08
14533 */
14534 (function( window ) {
14535
14536 var i,
14537 support,
14538 Expr,
14539 getText,
14540 isXML,
14541 tokenize,
14542 compile,
14543 select,
14544 outermostContext,
14545 sortInput,
14546 hasDuplicate,
14547
14548 // Local document vars
14549 setDocument,
14550 document,
14551 docElem,
14552 documentIsHTML,
14553 rbuggyQSA,
14554 rbuggyMatches,
14555 matches,
14556 contains,
14557
14558 // Instance-specific data
14559 expando = "sizzle" + 1 * new Date(),
14560 preferredDoc = window.document,
14561 dirruns = 0,
14562 done = 0,
14563 classCache = createCache(),
14564 tokenCache = createCache(),
14565 compilerCache = createCache(),
14566 sortOrder = function( a, b ) {
14567 if ( a === b ) {
14568 hasDuplicate = true;
14569 }
14570 return 0;
14571 },
14572
14573 // Instance methods
14574 hasOwn = ({}).hasOwnProperty,
14575 arr = [],
14576 pop = arr.pop,
14577 push_native = arr.push,
14578 push = arr.push,
14579 slice = arr.slice,
14580 // Use a stripped-down indexOf as it's faster than native
14581 // https://jsperf.com/thor-indexof-vs-for/5
14582 indexOf = function( list, elem ) {
14583 var i = 0,
14584 len = list.length;
14585 for ( ; i < len; i++ ) {
14586 if ( list[i] === elem ) {
14587 return i;
14588 }
14589 }
14590 return -1;
14591 },
14592
14593 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
14594
14595 // Regular expressions
14596
14597 // http://www.w3.org/TR/css3-selectors/#whitespace
14598 whitespace = "[\\x20\\t\\r\\n\\f]",
14599
14600 // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
14601 identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
14602
14603 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
14604 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
14605 // Operator (capture 2)
14606 "*([*^$|!~]?=)" + whitespace +
14607 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
14608 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
14609 "*\\]",
14610
14611 pseudos = ":(" + identifier + ")(?:\\((" +
14612 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
14613 // 1. quoted (capture 3; capture 4 or capture 5)
14614 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
14615 // 2. simple (capture 6)
14616 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
14617 // 3. anything else (capture 2)
14618 ".*" +
14619 ")\\)|)",
14620
14621 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
14622 rwhitespace = new RegExp( whitespace + "+", "g" ),
14623 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
14624
14625 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
14626 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
14627
14628 rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
14629
14630 rpseudo = new RegExp( pseudos ),
14631 ridentifier = new RegExp( "^" + identifier + "$" ),
14632
14633 matchExpr = {
14634 "ID": new RegExp( "^#(" + identifier + ")" ),
14635 "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
14636 "TAG": new RegExp( "^(" + identifier + "|[*])" ),
14637 "ATTR": new RegExp( "^" + attributes ),
14638 "PSEUDO": new RegExp( "^" + pseudos ),
14639 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
14640 "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
14641 "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
14642 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
14643 // For use in libraries implementing .is()
14644 // We use this for POS matching in `select`
14645 "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
14646 whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
14647 },
14648
14649 rinputs = /^(?:input|select|textarea|button)$/i,
14650 rheader = /^h\d$/i,
14651
14652 rnative = /^[^{]+\{\s*\[native \w/,
14653
14654 // Easily-parseable/retrievable ID or TAG or CLASS selectors
14655 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
14656
14657 rsibling = /[+~]/,
14658
14659 // CSS escapes
14660 // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
14661 runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
14662 funescape = function( _, escaped, escapedWhitespace ) {
14663 var high = "0x" + escaped - 0x10000;
14664 // NaN means non-codepoint
14665 // Support: Firefox<24
14666 // Workaround erroneous numeric interpretation of +"0x"
14667 return high !== high || escapedWhitespace ?
14668 escaped :
14669 high < 0 ?
14670 // BMP codepoint
14671 String.fromCharCode( high + 0x10000 ) :
14672 // Supplemental Plane codepoint (surrogate pair)
14673 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
14674 },
14675
14676 // CSS string/identifier serialization
14677 // https://drafts.csswg.org/cssom/#common-serializing-idioms
14678 rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
14679 fcssescape = function( ch, asCodePoint ) {
14680 if ( asCodePoint ) {
14681
14682 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
14683 if ( ch === "\0" ) {
14684 return "\uFFFD";
14685 }
14686
14687 // Control characters and (dependent upon position) numbers get escaped as code points
14688 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
14689 }
14690
14691 // Other potentially-special ASCII characters get backslash-escaped
14692 return "\\" + ch;
14693 },
14694
14695 // Used for iframes
14696 // See setDocument()
14697 // Removing the function wrapper causes a "Permission Denied"
14698 // error in IE
14699 unloadHandler = function() {
14700 setDocument();
14701 },
14702
14703 disabledAncestor = addCombinator(
14704 function( elem ) {
14705 return elem.disabled === true && ("form" in elem || "label" in elem);
14706 },
14707 { dir: "parentNode", next: "legend" }
14708 );
14709
14710 // Optimize for push.apply( _, NodeList )
14711 try {
14712 push.apply(
14713 (arr = slice.call( preferredDoc.childNodes )),
14714 preferredDoc.childNodes
14715 );
14716 // Support: Android<4.0
14717 // Detect silently failing push.apply
14718 arr[ preferredDoc.childNodes.length ].nodeType;
14719 } catch ( e ) {
14720 push = { apply: arr.length ?
14721
14722 // Leverage slice if possible
14723 function( target, els ) {
14724 push_native.apply( target, slice.call(els) );
14725 } :
14726
14727 // Support: IE<9
14728 // Otherwise append directly
14729 function( target, els ) {
14730 var j = target.length,
14731 i = 0;
14732 // Can't trust NodeList.length
14733 while ( (target[j++] = els[i++]) ) {}
14734 target.length = j - 1;
14735 }
14736 };
14737 }
14738
14739 function Sizzle( selector, context, results, seed ) {
14740 var m, i, elem, nid, match, groups, newSelector,
14741 newContext = context && context.ownerDocument,
14742
14743 // nodeType defaults to 9, since context defaults to document
14744 nodeType = context ? context.nodeType : 9;
14745
14746 results = results || [];
14747
14748 // Return early from calls with invalid selector or context
14749 if ( typeof selector !== "string" || !selector ||
14750 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
14751
14752 return results;
14753 }
14754
14755 // Try to shortcut find operations (as opposed to filters) in HTML documents
14756 if ( !seed ) {
14757
14758 if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
14759 setDocument( context );
14760 }
14761 context = context || document;
14762
14763 if ( documentIsHTML ) {
14764
14765 // If the selector is sufficiently simple, try using a "get*By*" DOM method
14766 // (excepting DocumentFragment context, where the methods don't exist)
14767 if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
14768
14769 // ID selector
14770 if ( (m = match[1]) ) {
14771
14772 // Document context
14773 if ( nodeType === 9 ) {
14774 if ( (elem = context.getElementById( m )) ) {
14775
14776 // Support: IE, Opera, Webkit
14777 // TODO: identify versions
14778 // getElementById can match elements by name instead of ID
14779 if ( elem.id === m ) {
14780 results.push( elem );
14781 return results;
14782 }
14783 } else {
14784 return results;
14785 }
14786
14787 // Element context
14788 } else {
14789
14790 // Support: IE, Opera, Webkit
14791 // TODO: identify versions
14792 // getElementById can match elements by name instead of ID
14793 if ( newContext && (elem = newContext.getElementById( m )) &&
14794 contains( context, elem ) &&
14795 elem.id === m ) {
14796
14797 results.push( elem );
14798 return results;
14799 }
14800 }
14801
14802 // Type selector
14803 } else if ( match[2] ) {
14804 push.apply( results, context.getElementsByTagName( selector ) );
14805 return results;
14806
14807 // Class selector
14808 } else if ( (m = match[3]) && support.getElementsByClassName &&
14809 context.getElementsByClassName ) {
14810
14811 push.apply( results, context.getElementsByClassName( m ) );
14812 return results;
14813 }
14814 }
14815
14816 // Take advantage of querySelectorAll
14817 if ( support.qsa &&
14818 !compilerCache[ selector + " " ] &&
14819 (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
14820
14821 if ( nodeType !== 1 ) {
14822 newContext = context;
14823 newSelector = selector;
14824
14825 // qSA looks outside Element context, which is not what we want
14826 // Thanks to Andrew Dupont for this workaround technique
14827 // Support: IE <=8
14828 // Exclude object elements
14829 } else if ( context.nodeName.toLowerCase() !== "object" ) {
14830
14831 // Capture the context ID, setting it first if necessary
14832 if ( (nid = context.getAttribute( "id" )) ) {
14833 nid = nid.replace( rcssescape, fcssescape );
14834 } else {
14835 context.setAttribute( "id", (nid = expando) );
14836 }
14837
14838 // Prefix every selector in the list
14839 groups = tokenize( selector );
14840 i = groups.length;
14841 while ( i-- ) {
14842 groups[i] = "#" + nid + " " + toSelector( groups[i] );
14843 }
14844 newSelector = groups.join( "," );
14845
14846 // Expand context for sibling selectors
14847 newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
14848 context;
14849 }
14850
14851 if ( newSelector ) {
14852 try {
14853 push.apply( results,
14854 newContext.querySelectorAll( newSelector )
14855 );
14856 return results;
14857 } catch ( qsaError ) {
14858 } finally {
14859 if ( nid === expando ) {
14860 context.removeAttribute( "id" );
14861 }
14862 }
14863 }
14864 }
14865 }
14866 }
14867
14868 // All others
14869 return select( selector.replace( rtrim, "$1" ), context, results, seed );
14870 }
14871
14872 /**
14873 * Create key-value caches of limited size
14874 * @returns {function(string, object)} Returns the Object data after storing it on itself with
14875 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
14876 * deleting the oldest entry
14877 */
14878 function createCache() {
14879 var keys = [];
14880
14881 function cache( key, value ) {
14882 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
14883 if ( keys.push( key + " " ) > Expr.cacheLength ) {
14884 // Only keep the most recent entries
14885 delete cache[ keys.shift() ];
14886 }
14887 return (cache[ key + " " ] = value);
14888 }
14889 return cache;
14890 }
14891
14892 /**
14893 * Mark a function for special use by Sizzle
14894 * @param {Function} fn The function to mark
14895 */
14896 function markFunction( fn ) {
14897 fn[ expando ] = true;
14898 return fn;
14899 }
14900
14901 /**
14902 * Support testing using an element
14903 * @param {Function} fn Passed the created element and returns a boolean result
14904 */
14905 function assert( fn ) {
14906 var el = document.createElement("fieldset");
14907
14908 try {
14909 return !!fn( el );
14910 } catch (e) {
14911 return false;
14912 } finally {
14913 // Remove from its parent by default
14914 if ( el.parentNode ) {
14915 el.parentNode.removeChild( el );
14916 }
14917 // release memory in IE
14918 el = null;
14919 }
14920 }
14921
14922 /**
14923 * Adds the same handler for all of the specified attrs
14924 * @param {String} attrs Pipe-separated list of attributes
14925 * @param {Function} handler The method that will be applied
14926 */
14927 function addHandle( attrs, handler ) {
14928 var arr = attrs.split("|"),
14929 i = arr.length;
14930
14931 while ( i-- ) {
14932 Expr.attrHandle[ arr[i] ] = handler;
14933 }
14934 }
14935
14936 /**
14937 * Checks document order of two siblings
14938 * @param {Element} a
14939 * @param {Element} b
14940 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
14941 */
14942 function siblingCheck( a, b ) {
14943 var cur = b && a,
14944 diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
14945 a.sourceIndex - b.sourceIndex;
14946
14947 // Use IE sourceIndex if available on both nodes
14948 if ( diff ) {
14949 return diff;
14950 }
14951
14952 // Check if b follows a
14953 if ( cur ) {
14954 while ( (cur = cur.nextSibling) ) {
14955 if ( cur === b ) {
14956 return -1;
14957 }
14958 }
14959 }
14960
14961 return a ? 1 : -1;
14962 }
14963
14964 /**
14965 * Returns a function to use in pseudos for input types
14966 * @param {String} type
14967 */
14968 function createInputPseudo( type ) {
14969 return function( elem ) {
14970 var name = elem.nodeName.toLowerCase();
14971 return name === "input" && elem.type === type;
14972 };
14973 }
14974
14975 /**
14976 * Returns a function to use in pseudos for buttons
14977 * @param {String} type
14978 */
14979 function createButtonPseudo( type ) {
14980 return function( elem ) {
14981 var name = elem.nodeName.toLowerCase();
14982 return (name === "input" || name === "button") && elem.type === type;
14983 };
14984 }
14985
14986 /**
14987 * Returns a function to use in pseudos for :enabled/:disabled
14988 * @param {Boolean} disabled true for :disabled; false for :enabled
14989 */
14990 function createDisabledPseudo( disabled ) {
14991
14992 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
14993 return function( elem ) {
14994
14995 // Only certain elements can match :enabled or :disabled
14996 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
14997 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
14998 if ( "form" in elem ) {
14999
15000 // Check for inherited disabledness on relevant non-disabled elements:
15001 // * listed form-associated elements in a disabled fieldset
15002 // https://html.spec.whatwg.org/multipage/forms.html#category-listed
15003 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
15004 // * option elements in a disabled optgroup
15005 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
15006 // All such elements have a "form" property.
15007 if ( elem.parentNode && elem.disabled === false ) {
15008
15009 // Option elements defer to a parent optgroup if present
15010 if ( "label" in elem ) {
15011 if ( "label" in elem.parentNode ) {
15012 return elem.parentNode.disabled === disabled;
15013 } else {
15014 return elem.disabled === disabled;
15015 }
15016 }
15017
15018 // Support: IE 6 - 11
15019 // Use the isDisabled shortcut property to check for disabled fieldset ancestors
15020 return elem.isDisabled === disabled ||
15021
15022 // Where there is no isDisabled, check manually
15023 /* jshint -W018 */
15024 elem.isDisabled !== !disabled &&
15025 disabledAncestor( elem ) === disabled;
15026 }
15027
15028 return elem.disabled === disabled;
15029
15030 // Try to winnow out elements that can't be disabled before trusting the disabled property.
15031 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
15032 // even exist on them, let alone have a boolean value.
15033 } else if ( "label" in elem ) {
15034 return elem.disabled === disabled;
15035 }
15036
15037 // Remaining elements are neither :enabled nor :disabled
15038 return false;
15039 };
15040 }
15041
15042 /**
15043 * Returns a function to use in pseudos for positionals
15044 * @param {Function} fn
15045 */
15046 function createPositionalPseudo( fn ) {
15047 return markFunction(function( argument ) {
15048 argument = +argument;
15049 return markFunction(function( seed, matches ) {
15050 var j,
15051 matchIndexes = fn( [], seed.length, argument ),
15052 i = matchIndexes.length;
15053
15054 // Match elements found at the specified indexes
15055 while ( i-- ) {
15056 if ( seed[ (j = matchIndexes[i]) ] ) {
15057 seed[j] = !(matches[j] = seed[j]);
15058 }
15059 }
15060 });
15061 });
15062 }
15063
15064 /**
15065 * Checks a node for validity as a Sizzle context
15066 * @param {Element|Object=} context
15067 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
15068 */
15069 function testContext( context ) {
15070 return context && typeof context.getElementsByTagName !== "undefined" && context;
15071 }
15072
15073 // Expose support vars for convenience
15074 support = Sizzle.support = {};
15075
15076 /**
15077 * Detects XML nodes
15078 * @param {Element|Object} elem An element or a document
15079 * @returns {Boolean} True iff elem is a non-HTML XML node
15080 */
15081 isXML = Sizzle.isXML = function( elem ) {
15082 // documentElement is verified for cases where it doesn't yet exist
15083 // (such as loading iframes in IE - #4833)
15084 var documentElement = elem && (elem.ownerDocument || elem).documentElement;
15085 return documentElement ? documentElement.nodeName !== "HTML" : false;
15086 };
15087
15088 /**
15089 * Sets document-related variables once based on the current document
15090 * @param {Element|Object} [doc] An element or document object to use to set the document
15091 * @returns {Object} Returns the current document
15092 */
15093 setDocument = Sizzle.setDocument = function( node ) {
15094 var hasCompare, subWindow,
15095 doc = node ? node.ownerDocument || node : preferredDoc;
15096
15097 // Return early if doc is invalid or already selected
15098 if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
15099 return document;
15100 }
15101
15102 // Update global variables
15103 document = doc;
15104 docElem = document.documentElement;
15105 documentIsHTML = !isXML( document );
15106
15107 // Support: IE 9-11, Edge
15108 // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
15109 if ( preferredDoc !== document &&
15110 (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
15111
15112 // Support: IE 11, Edge
15113 if ( subWindow.addEventListener ) {
15114 subWindow.addEventListener( "unload", unloadHandler, false );
15115
15116 // Support: IE 9 - 10 only
15117 } else if ( subWindow.attachEvent ) {
15118 subWindow.attachEvent( "onunload", unloadHandler );
15119 }
15120 }
15121
15122 /* Attributes
15123 ---------------------------------------------------------------------- */
15124
15125 // Support: IE<8
15126 // Verify that getAttribute really returns attributes and not properties
15127 // (excepting IE8 booleans)
15128 support.attributes = assert(function( el ) {
15129 el.className = "i";
15130 return !el.getAttribute("className");
15131 });
15132
15133 /* getElement(s)By*
15134 ---------------------------------------------------------------------- */
15135
15136 // Check if getElementsByTagName("*") returns only elements
15137 support.getElementsByTagName = assert(function( el ) {
15138 el.appendChild( document.createComment("") );
15139 return !el.getElementsByTagName("*").length;
15140 });
15141
15142 // Support: IE<9
15143 support.getElementsByClassName = rnative.test( document.getElementsByClassName );
15144
15145 // Support: IE<10
15146 // Check if getElementById returns elements by name
15147 // The broken getElementById methods don't pick up programmatically-set names,
15148 // so use a roundabout getElementsByName test
15149 support.getById = assert(function( el ) {
15150 docElem.appendChild( el ).id = expando;
15151 return !document.getElementsByName || !document.getElementsByName( expando ).length;
15152 });
15153
15154 // ID filter and find
15155 if ( support.getById ) {
15156 Expr.filter["ID"] = function( id ) {
15157 var attrId = id.replace( runescape, funescape );
15158 return function( elem ) {
15159 return elem.getAttribute("id") === attrId;
15160 };
15161 };
15162 Expr.find["ID"] = function( id, context ) {
15163 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
15164 var elem = context.getElementById( id );
15165 return elem ? [ elem ] : [];
15166 }
15167 };
15168 } else {
15169 Expr.filter["ID"] = function( id ) {
15170 var attrId = id.replace( runescape, funescape );
15171 return function( elem ) {
15172 var node = typeof elem.getAttributeNode !== "undefined" &&
15173 elem.getAttributeNode("id");
15174 return node && node.value === attrId;
15175 };
15176 };
15177
15178 // Support: IE 6 - 7 only
15179 // getElementById is not reliable as a find shortcut
15180 Expr.find["ID"] = function( id, context ) {
15181 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
15182 var node, i, elems,
15183 elem = context.getElementById( id );
15184
15185 if ( elem ) {
15186
15187 // Verify the id attribute
15188 node = elem.getAttributeNode("id");
15189 if ( node && node.value === id ) {
15190 return [ elem ];
15191 }
15192
15193 // Fall back on getElementsByName
15194 elems = context.getElementsByName( id );
15195 i = 0;
15196 while ( (elem = elems[i++]) ) {
15197 node = elem.getAttributeNode("id");
15198 if ( node && node.value === id ) {
15199 return [ elem ];
15200 }
15201 }
15202 }
15203
15204 return [];
15205 }
15206 };
15207 }
15208
15209 // Tag
15210 Expr.find["TAG"] = support.getElementsByTagName ?
15211 function( tag, context ) {
15212 if ( typeof context.getElementsByTagName !== "undefined" ) {
15213 return context.getElementsByTagName( tag );
15214
15215 // DocumentFragment nodes don't have gEBTN
15216 } else if ( support.qsa ) {
15217 return context.querySelectorAll( tag );
15218 }
15219 } :
15220
15221 function( tag, context ) {
15222 var elem,
15223 tmp = [],
15224 i = 0,
15225 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
15226 results = context.getElementsByTagName( tag );
15227
15228 // Filter out possible comments
15229 if ( tag === "*" ) {
15230 while ( (elem = results[i++]) ) {
15231 if ( elem.nodeType === 1 ) {
15232 tmp.push( elem );
15233 }
15234 }
15235
15236 return tmp;
15237 }
15238 return results;
15239 };
15240
15241 // Class
15242 Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
15243 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
15244 return context.getElementsByClassName( className );
15245 }
15246 };
15247
15248 /* QSA/matchesSelector
15249 ---------------------------------------------------------------------- */
15250
15251 // QSA and matchesSelector support
15252
15253 // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
15254 rbuggyMatches = [];
15255
15256 // qSa(:focus) reports false when true (Chrome 21)
15257 // We allow this because of a bug in IE8/9 that throws an error
15258 // whenever `document.activeElement` is accessed on an iframe
15259 // So, we allow :focus to pass through QSA all the time to avoid the IE error
15260 // See https://bugs.jquery.com/ticket/13378
15261 rbuggyQSA = [];
15262
15263 if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
15264 // Build QSA regex
15265 // Regex strategy adopted from Diego Perini
15266 assert(function( el ) {
15267 // Select is set to empty string on purpose
15268 // This is to test IE's treatment of not explicitly
15269 // setting a boolean content attribute,
15270 // since its presence should be enough
15271 // https://bugs.jquery.com/ticket/12359
15272 docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
15273 "<select id='" + expando + "-\r\\' msallowcapture=''>" +
15274 "<option selected=''></option></select>";
15275
15276 // Support: IE8, Opera 11-12.16
15277 // Nothing should be selected when empty strings follow ^= or $= or *=
15278 // The test attribute must be unknown in Opera but "safe" for WinRT
15279 // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
15280 if ( el.querySelectorAll("[msallowcapture^='']").length ) {
15281 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
15282 }
15283
15284 // Support: IE8
15285 // Boolean attributes and "value" are not treated correctly
15286 if ( !el.querySelectorAll("[selected]").length ) {
15287 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
15288 }
15289
15290 // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
15291 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
15292 rbuggyQSA.push("~=");
15293 }
15294
15295 // Webkit/Opera - :checked should return selected option elements
15296 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
15297 // IE8 throws error here and will not see later tests
15298 if ( !el.querySelectorAll(":checked").length ) {
15299 rbuggyQSA.push(":checked");
15300 }
15301
15302 // Support: Safari 8+, iOS 8+
15303 // https://bugs.webkit.org/show_bug.cgi?id=136851
15304 // In-page `selector#id sibling-combinator selector` fails
15305 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
15306 rbuggyQSA.push(".#.+[+~]");
15307 }
15308 });
15309
15310 assert(function( el ) {
15311 el.innerHTML = "<a href='' disabled='disabled'></a>" +
15312 "<select disabled='disabled'><option/></select>";
15313
15314 // Support: Windows 8 Native Apps
15315 // The type and name attributes are restricted during .innerHTML assignment
15316 var input = document.createElement("input");
15317 input.setAttribute( "type", "hidden" );
15318 el.appendChild( input ).setAttribute( "name", "D" );
15319
15320 // Support: IE8
15321 // Enforce case-sensitivity of name attribute
15322 if ( el.querySelectorAll("[name=d]").length ) {
15323 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
15324 }
15325
15326 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
15327 // IE8 throws error here and will not see later tests
15328 if ( el.querySelectorAll(":enabled").length !== 2 ) {
15329 rbuggyQSA.push( ":enabled", ":disabled" );
15330 }
15331
15332 // Support: IE9-11+
15333 // IE's :disabled selector does not pick up the children of disabled fieldsets
15334 docElem.appendChild( el ).disabled = true;
15335 if ( el.querySelectorAll(":disabled").length !== 2 ) {
15336 rbuggyQSA.push( ":enabled", ":disabled" );
15337 }
15338
15339 // Opera 10-11 does not throw on post-comma invalid pseudos
15340 el.querySelectorAll("*,:x");
15341 rbuggyQSA.push(",.*:");
15342 });
15343 }
15344
15345 if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
15346 docElem.webkitMatchesSelector ||
15347 docElem.mozMatchesSelector ||
15348 docElem.oMatchesSelector ||
15349 docElem.msMatchesSelector) )) ) {
15350
15351 assert(function( el ) {
15352 // Check to see if it's possible to do matchesSelector
15353 // on a disconnected node (IE 9)
15354 support.disconnectedMatch = matches.call( el, "*" );
15355
15356 // This should fail with an exception
15357 // Gecko does not error, returns false instead
15358 matches.call( el, "[s!='']:x" );
15359 rbuggyMatches.push( "!=", pseudos );
15360 });
15361 }
15362
15363 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
15364 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
15365
15366 /* Contains
15367 ---------------------------------------------------------------------- */
15368 hasCompare = rnative.test( docElem.compareDocumentPosition );
15369
15370 // Element contains another
15371 // Purposefully self-exclusive
15372 // As in, an element does not contain itself
15373 contains = hasCompare || rnative.test( docElem.contains ) ?
15374 function( a, b ) {
15375 var adown = a.nodeType === 9 ? a.documentElement : a,
15376 bup = b && b.parentNode;
15377 return a === bup || !!( bup && bup.nodeType === 1 && (
15378 adown.contains ?
15379 adown.contains( bup ) :
15380 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
15381 ));
15382 } :
15383 function( a, b ) {
15384 if ( b ) {
15385 while ( (b = b.parentNode) ) {
15386 if ( b === a ) {
15387 return true;
15388 }
15389 }
15390 }
15391 return false;
15392 };
15393
15394 /* Sorting
15395 ---------------------------------------------------------------------- */
15396
15397 // Document order sorting
15398 sortOrder = hasCompare ?
15399 function( a, b ) {
15400
15401 // Flag for duplicate removal
15402 if ( a === b ) {
15403 hasDuplicate = true;
15404 return 0;
15405 }
15406
15407 // Sort on method existence if only one input has compareDocumentPosition
15408 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
15409 if ( compare ) {
15410 return compare;
15411 }
15412
15413 // Calculate position if both inputs belong to the same document
15414 compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
15415 a.compareDocumentPosition( b ) :
15416
15417 // Otherwise we know they are disconnected
15418 1;
15419
15420 // Disconnected nodes
15421 if ( compare & 1 ||
15422 (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
15423
15424 // Choose the first element that is related to our preferred document
15425 if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
15426 return -1;
15427 }
15428 if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
15429 return 1;
15430 }
15431
15432 // Maintain original order
15433 return sortInput ?
15434 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
15435 0;
15436 }
15437
15438 return compare & 4 ? -1 : 1;
15439 } :
15440 function( a, b ) {
15441 // Exit early if the nodes are identical
15442 if ( a === b ) {
15443 hasDuplicate = true;
15444 return 0;
15445 }
15446
15447 var cur,
15448 i = 0,
15449 aup = a.parentNode,
15450 bup = b.parentNode,
15451 ap = [ a ],
15452 bp = [ b ];
15453
15454 // Parentless nodes are either documents or disconnected
15455 if ( !aup || !bup ) {
15456 return a === document ? -1 :
15457 b === document ? 1 :
15458 aup ? -1 :
15459 bup ? 1 :
15460 sortInput ?
15461 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
15462 0;
15463
15464 // If the nodes are siblings, we can do a quick check
15465 } else if ( aup === bup ) {
15466 return siblingCheck( a, b );
15467 }
15468
15469 // Otherwise we need full lists of their ancestors for comparison
15470 cur = a;
15471 while ( (cur = cur.parentNode) ) {
15472 ap.unshift( cur );
15473 }
15474 cur = b;
15475 while ( (cur = cur.parentNode) ) {
15476 bp.unshift( cur );
15477 }
15478
15479 // Walk down the tree looking for a discrepancy
15480 while ( ap[i] === bp[i] ) {
15481 i++;
15482 }
15483
15484 return i ?
15485 // Do a sibling check if the nodes have a common ancestor
15486 siblingCheck( ap[i], bp[i] ) :
15487
15488 // Otherwise nodes in our document sort first
15489 ap[i] === preferredDoc ? -1 :
15490 bp[i] === preferredDoc ? 1 :
15491 0;
15492 };
15493
15494 return document;
15495 };
15496
15497 Sizzle.matches = function( expr, elements ) {
15498 return Sizzle( expr, null, null, elements );
15499 };
15500
15501 Sizzle.matchesSelector = function( elem, expr ) {
15502 // Set document vars if needed
15503 if ( ( elem.ownerDocument || elem ) !== document ) {
15504 setDocument( elem );
15505 }
15506
15507 // Make sure that attribute selectors are quoted
15508 expr = expr.replace( rattributeQuotes, "='$1']" );
15509
15510 if ( support.matchesSelector && documentIsHTML &&
15511 !compilerCache[ expr + " " ] &&
15512 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
15513 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
15514
15515 try {
15516 var ret = matches.call( elem, expr );
15517
15518 // IE 9's matchesSelector returns false on disconnected nodes
15519 if ( ret || support.disconnectedMatch ||
15520 // As well, disconnected nodes are said to be in a document
15521 // fragment in IE 9
15522 elem.document && elem.document.nodeType !== 11 ) {
15523 return ret;
15524 }
15525 } catch (e) {}
15526 }
15527
15528 return Sizzle( expr, document, null, [ elem ] ).length > 0;
15529 };
15530
15531 Sizzle.contains = function( context, elem ) {
15532 // Set document vars if needed
15533 if ( ( context.ownerDocument || context ) !== document ) {
15534 setDocument( context );
15535 }
15536 return contains( context, elem );
15537 };
15538
15539 Sizzle.attr = function( elem, name ) {
15540 // Set document vars if needed
15541 if ( ( elem.ownerDocument || elem ) !== document ) {
15542 setDocument( elem );
15543 }
15544
15545 var fn = Expr.attrHandle[ name.toLowerCase() ],
15546 // Don't get fooled by Object.prototype properties (jQuery #13807)
15547 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
15548 fn( elem, name, !documentIsHTML ) :
15549 undefined;
15550
15551 return val !== undefined ?
15552 val :
15553 support.attributes || !documentIsHTML ?
15554 elem.getAttribute( name ) :
15555 (val = elem.getAttributeNode(name)) && val.specified ?
15556 val.value :
15557 null;
15558 };
15559
15560 Sizzle.escape = function( sel ) {
15561 return (sel + "").replace( rcssescape, fcssescape );
15562 };
15563
15564 Sizzle.error = function( msg ) {
15565 throw new Error( "Syntax error, unrecognized expression: " + msg );
15566 };
15567
15568 /**
15569 * Document sorting and removing duplicates
15570 * @param {ArrayLike} results
15571 */
15572 Sizzle.uniqueSort = function( results ) {
15573 var elem,
15574 duplicates = [],
15575 j = 0,
15576 i = 0;
15577
15578 // Unless we *know* we can detect duplicates, assume their presence
15579 hasDuplicate = !support.detectDuplicates;
15580 sortInput = !support.sortStable && results.slice( 0 );
15581 results.sort( sortOrder );
15582
15583 if ( hasDuplicate ) {
15584 while ( (elem = results[i++]) ) {
15585 if ( elem === results[ i ] ) {
15586 j = duplicates.push( i );
15587 }
15588 }
15589 while ( j-- ) {
15590 results.splice( duplicates[ j ], 1 );
15591 }
15592 }
15593
15594 // Clear input after sorting to release objects
15595 // See https://github.com/jquery/sizzle/pull/225
15596 sortInput = null;
15597
15598 return results;
15599 };
15600
15601 /**
15602 * Utility function for retrieving the text value of an array of DOM nodes
15603 * @param {Array|Element} elem
15604 */
15605 getText = Sizzle.getText = function( elem ) {
15606 var node,
15607 ret = "",
15608 i = 0,
15609 nodeType = elem.nodeType;
15610
15611 if ( !nodeType ) {
15612 // If no nodeType, this is expected to be an array
15613 while ( (node = elem[i++]) ) {
15614 // Do not traverse comment nodes
15615 ret += getText( node );
15616 }
15617 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
15618 // Use textContent for elements
15619 // innerText usage removed for consistency of new lines (jQuery #11153)
15620 if ( typeof elem.textContent === "string" ) {
15621 return elem.textContent;
15622 } else {
15623 // Traverse its children
15624 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
15625 ret += getText( elem );
15626 }
15627 }
15628 } else if ( nodeType === 3 || nodeType === 4 ) {
15629 return elem.nodeValue;
15630 }
15631 // Do not include comment or processing instruction nodes
15632
15633 return ret;
15634 };
15635
15636 Expr = Sizzle.selectors = {
15637
15638 // Can be adjusted by the user
15639 cacheLength: 50,
15640
15641 createPseudo: markFunction,
15642
15643 match: matchExpr,
15644
15645 attrHandle: {},
15646
15647 find: {},
15648
15649 relative: {
15650 ">": { dir: "parentNode", first: true },
15651 " ": { dir: "parentNode" },
15652 "+": { dir: "previousSibling", first: true },
15653 "~": { dir: "previousSibling" }
15654 },
15655
15656 preFilter: {
15657 "ATTR": function( match ) {
15658 match[1] = match[1].replace( runescape, funescape );
15659
15660 // Move the given value to match[3] whether quoted or unquoted
15661 match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
15662
15663 if ( match[2] === "~=" ) {
15664 match[3] = " " + match[3] + " ";
15665 }
15666
15667 return match.slice( 0, 4 );
15668 },
15669
15670 "CHILD": function( match ) {
15671 /* matches from matchExpr["CHILD"]
15672 1 type (only|nth|...)
15673 2 what (child|of-type)
15674 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
15675 4 xn-component of xn+y argument ([+-]?\d*n|)
15676 5 sign of xn-component
15677 6 x of xn-component
15678 7 sign of y-component
15679 8 y of y-component
15680 */
15681 match[1] = match[1].toLowerCase();
15682
15683 if ( match[1].slice( 0, 3 ) === "nth" ) {
15684 // nth-* requires argument
15685 if ( !match[3] ) {
15686 Sizzle.error( match[0] );
15687 }
15688
15689 // numeric x and y parameters for Expr.filter.CHILD
15690 // remember that false/true cast respectively to 0/1
15691 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
15692 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
15693
15694 // other types prohibit arguments
15695 } else if ( match[3] ) {
15696 Sizzle.error( match[0] );
15697 }
15698
15699 return match;
15700 },
15701
15702 "PSEUDO": function( match ) {
15703 var excess,
15704 unquoted = !match[6] && match[2];
15705
15706 if ( matchExpr["CHILD"].test( match[0] ) ) {
15707 return null;
15708 }
15709
15710 // Accept quoted arguments as-is
15711 if ( match[3] ) {
15712 match[2] = match[4] || match[5] || "";
15713
15714 // Strip excess characters from unquoted arguments
15715 } else if ( unquoted && rpseudo.test( unquoted ) &&
15716 // Get excess from tokenize (recursively)
15717 (excess = tokenize( unquoted, true )) &&
15718 // advance to the next closing parenthesis
15719 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
15720
15721 // excess is a negative index
15722 match[0] = match[0].slice( 0, excess );
15723 match[2] = unquoted.slice( 0, excess );
15724 }
15725
15726 // Return only captures needed by the pseudo filter method (type and argument)
15727 return match.slice( 0, 3 );
15728 }
15729 },
15730
15731 filter: {
15732
15733 "TAG": function( nodeNameSelector ) {
15734 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
15735 return nodeNameSelector === "*" ?
15736 function() { return true; } :
15737 function( elem ) {
15738 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
15739 };
15740 },
15741
15742 "CLASS": function( className ) {
15743 var pattern = classCache[ className + " " ];
15744
15745 return pattern ||
15746 (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
15747 classCache( className, function( elem ) {
15748 return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
15749 });
15750 },
15751
15752 "ATTR": function( name, operator, check ) {
15753 return function( elem ) {
15754 var result = Sizzle.attr( elem, name );
15755
15756 if ( result == null ) {
15757 return operator === "!=";
15758 }
15759 if ( !operator ) {
15760 return true;
15761 }
15762
15763 result += "";
15764
15765 return operator === "=" ? result === check :
15766 operator === "!=" ? result !== check :
15767 operator === "^=" ? check && result.indexOf( check ) === 0 :
15768 operator === "*=" ? check && result.indexOf( check ) > -1 :
15769 operator === "$=" ? check && result.slice( -check.length ) === check :
15770 operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
15771 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
15772 false;
15773 };
15774 },
15775
15776 "CHILD": function( type, what, argument, first, last ) {
15777 var simple = type.slice( 0, 3 ) !== "nth",
15778 forward = type.slice( -4 ) !== "last",
15779 ofType = what === "of-type";
15780
15781 return first === 1 && last === 0 ?
15782
15783 // Shortcut for :nth-*(n)
15784 function( elem ) {
15785 return !!elem.parentNode;
15786 } :
15787
15788 function( elem, context, xml ) {
15789 var cache, uniqueCache, outerCache, node, nodeIndex, start,
15790 dir = simple !== forward ? "nextSibling" : "previousSibling",
15791 parent = elem.parentNode,
15792 name = ofType && elem.nodeName.toLowerCase(),
15793 useCache = !xml && !ofType,
15794 diff = false;
15795
15796 if ( parent ) {
15797
15798 // :(first|last|only)-(child|of-type)
15799 if ( simple ) {
15800 while ( dir ) {
15801 node = elem;
15802 while ( (node = node[ dir ]) ) {
15803 if ( ofType ?
15804 node.nodeName.toLowerCase() === name :
15805 node.nodeType === 1 ) {
15806
15807 return false;
15808 }
15809 }
15810 // Reverse direction for :only-* (if we haven't yet done so)
15811 start = dir = type === "only" && !start && "nextSibling";
15812 }
15813 return true;
15814 }
15815
15816 start = [ forward ? parent.firstChild : parent.lastChild ];
15817
15818 // non-xml :nth-child(...) stores cache data on `parent`
15819 if ( forward && useCache ) {
15820
15821 // Seek `elem` from a previously-cached index
15822
15823 // ...in a gzip-friendly way
15824 node = parent;
15825 outerCache = node[ expando ] || (node[ expando ] = {});
15826
15827 // Support: IE <9 only
15828 // Defend against cloned attroperties (jQuery gh-1709)
15829 uniqueCache = outerCache[ node.uniqueID ] ||
15830 (outerCache[ node.uniqueID ] = {});
15831
15832 cache = uniqueCache[ type ] || [];
15833 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
15834 diff = nodeIndex && cache[ 2 ];
15835 node = nodeIndex && parent.childNodes[ nodeIndex ];
15836
15837 while ( (node = ++nodeIndex && node && node[ dir ] ||
15838
15839 // Fallback to seeking `elem` from the start
15840 (diff = nodeIndex = 0) || start.pop()) ) {
15841
15842 // When found, cache indexes on `parent` and break
15843 if ( node.nodeType === 1 && ++diff && node === elem ) {
15844 uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
15845 break;
15846 }
15847 }
15848
15849 } else {
15850 // Use previously-cached element index if available
15851 if ( useCache ) {
15852 // ...in a gzip-friendly way
15853 node = elem;
15854 outerCache = node[ expando ] || (node[ expando ] = {});
15855
15856 // Support: IE <9 only
15857 // Defend against cloned attroperties (jQuery gh-1709)
15858 uniqueCache = outerCache[ node.uniqueID ] ||
15859 (outerCache[ node.uniqueID ] = {});
15860
15861 cache = uniqueCache[ type ] || [];
15862 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
15863 diff = nodeIndex;
15864 }
15865
15866 // xml :nth-child(...)
15867 // or :nth-last-child(...) or :nth(-last)?-of-type(...)
15868 if ( diff === false ) {
15869 // Use the same loop as above to seek `elem` from the start
15870 while ( (node = ++nodeIndex && node && node[ dir ] ||
15871 (diff = nodeIndex = 0) || start.pop()) ) {
15872
15873 if ( ( ofType ?
15874 node.nodeName.toLowerCase() === name :
15875 node.nodeType === 1 ) &&
15876 ++diff ) {
15877
15878 // Cache the index of each encountered element
15879 if ( useCache ) {
15880 outerCache = node[ expando ] || (node[ expando ] = {});
15881
15882 // Support: IE <9 only
15883 // Defend against cloned attroperties (jQuery gh-1709)
15884 uniqueCache = outerCache[ node.uniqueID ] ||
15885 (outerCache[ node.uniqueID ] = {});
15886
15887 uniqueCache[ type ] = [ dirruns, diff ];
15888 }
15889
15890 if ( node === elem ) {
15891 break;
15892 }
15893 }
15894 }
15895 }
15896 }
15897
15898 // Incorporate the offset, then check against cycle size
15899 diff -= last;
15900 return diff === first || ( diff % first === 0 && diff / first >= 0 );
15901 }
15902 };
15903 },
15904
15905 "PSEUDO": function( pseudo, argument ) {
15906 // pseudo-class names are case-insensitive
15907 // http://www.w3.org/TR/selectors/#pseudo-classes
15908 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
15909 // Remember that setFilters inherits from pseudos
15910 var args,
15911 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
15912 Sizzle.error( "unsupported pseudo: " + pseudo );
15913
15914 // The user may use createPseudo to indicate that
15915 // arguments are needed to create the filter function
15916 // just as Sizzle does
15917 if ( fn[ expando ] ) {
15918 return fn( argument );
15919 }
15920
15921 // But maintain support for old signatures
15922 if ( fn.length > 1 ) {
15923 args = [ pseudo, pseudo, "", argument ];
15924 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
15925 markFunction(function( seed, matches ) {
15926 var idx,
15927 matched = fn( seed, argument ),
15928 i = matched.length;
15929 while ( i-- ) {
15930 idx = indexOf( seed, matched[i] );
15931 seed[ idx ] = !( matches[ idx ] = matched[i] );
15932 }
15933 }) :
15934 function( elem ) {
15935 return fn( elem, 0, args );
15936 };
15937 }
15938
15939 return fn;
15940 }
15941 },
15942
15943 pseudos: {
15944 // Potentially complex pseudos
15945 "not": markFunction(function( selector ) {
15946 // Trim the selector passed to compile
15947 // to avoid treating leading and trailing
15948 // spaces as combinators
15949 var input = [],
15950 results = [],
15951 matcher = compile( selector.replace( rtrim, "$1" ) );
15952
15953 return matcher[ expando ] ?
15954 markFunction(function( seed, matches, context, xml ) {
15955 var elem,
15956 unmatched = matcher( seed, null, xml, [] ),
15957 i = seed.length;
15958
15959 // Match elements unmatched by `matcher`
15960 while ( i-- ) {
15961 if ( (elem = unmatched[i]) ) {
15962 seed[i] = !(matches[i] = elem);
15963 }
15964 }
15965 }) :
15966 function( elem, context, xml ) {
15967 input[0] = elem;
15968 matcher( input, null, xml, results );
15969 // Don't keep the element (issue #299)
15970 input[0] = null;
15971 return !results.pop();
15972 };
15973 }),
15974
15975 "has": markFunction(function( selector ) {
15976 return function( elem ) {
15977 return Sizzle( selector, elem ).length > 0;
15978 };
15979 }),
15980
15981 "contains": markFunction(function( text ) {
15982 text = text.replace( runescape, funescape );
15983 return function( elem ) {
15984 return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
15985 };
15986 }),
15987
15988 // "Whether an element is represented by a :lang() selector
15989 // is based solely on the element's language value
15990 // being equal to the identifier C,
15991 // or beginning with the identifier C immediately followed by "-".
15992 // The matching of C against the element's language value is performed case-insensitively.
15993 // The identifier C does not have to be a valid language name."
15994 // http://www.w3.org/TR/selectors/#lang-pseudo
15995 "lang": markFunction( function( lang ) {
15996 // lang value must be a valid identifier
15997 if ( !ridentifier.test(lang || "") ) {
15998 Sizzle.error( "unsupported lang: " + lang );
15999 }
16000 lang = lang.replace( runescape, funescape ).toLowerCase();
16001 return function( elem ) {
16002 var elemLang;
16003 do {
16004 if ( (elemLang = documentIsHTML ?
16005 elem.lang :
16006 elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
16007
16008 elemLang = elemLang.toLowerCase();
16009 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
16010 }
16011 } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
16012 return false;
16013 };
16014 }),
16015
16016 // Miscellaneous
16017 "target": function( elem ) {
16018 var hash = window.location && window.location.hash;
16019 return hash && hash.slice( 1 ) === elem.id;
16020 },
16021
16022 "root": function( elem ) {
16023 return elem === docElem;
16024 },
16025
16026 "focus": function( elem ) {
16027 return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
16028 },
16029
16030 // Boolean properties
16031 "enabled": createDisabledPseudo( false ),
16032 "disabled": createDisabledPseudo( true ),
16033
16034 "checked": function( elem ) {
16035 // In CSS3, :checked should return both checked and selected elements
16036 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
16037 var nodeName = elem.nodeName.toLowerCase();
16038 return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
16039 },
16040
16041 "selected": function( elem ) {
16042 // Accessing this property makes selected-by-default
16043 // options in Safari work properly
16044 if ( elem.parentNode ) {
16045 elem.parentNode.selectedIndex;
16046 }
16047
16048 return elem.selected === true;
16049 },
16050
16051 // Contents
16052 "empty": function( elem ) {
16053 // http://www.w3.org/TR/selectors/#empty-pseudo
16054 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
16055 // but not by others (comment: 8; processing instruction: 7; etc.)
16056 // nodeType < 6 works because attributes (2) do not appear as children
16057 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
16058 if ( elem.nodeType < 6 ) {
16059 return false;
16060 }
16061 }
16062 return true;
16063 },
16064
16065 "parent": function( elem ) {
16066 return !Expr.pseudos["empty"]( elem );
16067 },
16068
16069 // Element/input types
16070 "header": function( elem ) {
16071 return rheader.test( elem.nodeName );
16072 },
16073
16074 "input": function( elem ) {
16075 return rinputs.test( elem.nodeName );
16076 },
16077
16078 "button": function( elem ) {
16079 var name = elem.nodeName.toLowerCase();
16080 return name === "input" && elem.type === "button" || name === "button";
16081 },
16082
16083 "text": function( elem ) {
16084 var attr;
16085 return elem.nodeName.toLowerCase() === "input" &&
16086 elem.type === "text" &&
16087
16088 // Support: IE<8
16089 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
16090 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
16091 },
16092
16093 // Position-in-collection
16094 "first": createPositionalPseudo(function() {
16095 return [ 0 ];
16096 }),
16097
16098 "last": createPositionalPseudo(function( matchIndexes, length ) {
16099 return [ length - 1 ];
16100 }),
16101
16102 "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
16103 return [ argument < 0 ? argument + length : argument ];
16104 }),
16105
16106 "even": createPositionalPseudo(function( matchIndexes, length ) {
16107 var i = 0;
16108 for ( ; i < length; i += 2 ) {
16109 matchIndexes.push( i );
16110 }
16111 return matchIndexes;
16112 }),
16113
16114 "odd": createPositionalPseudo(function( matchIndexes, length ) {
16115 var i = 1;
16116 for ( ; i < length; i += 2 ) {
16117 matchIndexes.push( i );
16118 }
16119 return matchIndexes;
16120 }),
16121
16122 "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
16123 var i = argument < 0 ? argument + length : argument;
16124 for ( ; --i >= 0; ) {
16125 matchIndexes.push( i );
16126 }
16127 return matchIndexes;
16128 }),
16129
16130 "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
16131 var i = argument < 0 ? argument + length : argument;
16132 for ( ; ++i < length; ) {
16133 matchIndexes.push( i );
16134 }
16135 return matchIndexes;
16136 })
16137 }
16138 };
16139
16140 Expr.pseudos["nth"] = Expr.pseudos["eq"];
16141
16142 // Add button/input type pseudos
16143 for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
16144 Expr.pseudos[ i ] = createInputPseudo( i );
16145 }
16146 for ( i in { submit: true, reset: true } ) {
16147 Expr.pseudos[ i ] = createButtonPseudo( i );
16148 }
16149
16150 // Easy API for creating new setFilters
16151 function setFilters() {}
16152 setFilters.prototype = Expr.filters = Expr.pseudos;
16153 Expr.setFilters = new setFilters();
16154
16155 tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
16156 var matched, match, tokens, type,
16157 soFar, groups, preFilters,
16158 cached = tokenCache[ selector + " " ];
16159
16160 if ( cached ) {
16161 return parseOnly ? 0 : cached.slice( 0 );
16162 }
16163
16164 soFar = selector;
16165 groups = [];
16166 preFilters = Expr.preFilter;
16167
16168 while ( soFar ) {
16169
16170 // Comma and first run
16171 if ( !matched || (match = rcomma.exec( soFar )) ) {
16172 if ( match ) {
16173 // Don't consume trailing commas as valid
16174 soFar = soFar.slice( match[0].length ) || soFar;
16175 }
16176 groups.push( (tokens = []) );
16177 }
16178
16179 matched = false;
16180
16181 // Combinators
16182 if ( (match = rcombinators.exec( soFar )) ) {
16183 matched = match.shift();
16184 tokens.push({
16185 value: matched,
16186 // Cast descendant combinators to space
16187 type: match[0].replace( rtrim, " " )
16188 });
16189 soFar = soFar.slice( matched.length );
16190 }
16191
16192 // Filters
16193 for ( type in Expr.filter ) {
16194 if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
16195 (match = preFilters[ type ]( match ))) ) {
16196 matched = match.shift();
16197 tokens.push({
16198 value: matched,
16199 type: type,
16200 matches: match
16201 });
16202 soFar = soFar.slice( matched.length );
16203 }
16204 }
16205
16206 if ( !matched ) {
16207 break;
16208 }
16209 }
16210
16211 // Return the length of the invalid excess
16212 // if we're just parsing
16213 // Otherwise, throw an error or return tokens
16214 return parseOnly ?
16215 soFar.length :
16216 soFar ?
16217 Sizzle.error( selector ) :
16218 // Cache the tokens
16219 tokenCache( selector, groups ).slice( 0 );
16220 };
16221
16222 function toSelector( tokens ) {
16223 var i = 0,
16224 len = tokens.length,
16225 selector = "";
16226 for ( ; i < len; i++ ) {
16227 selector += tokens[i].value;
16228 }
16229 return selector;
16230 }
16231
16232 function addCombinator( matcher, combinator, base ) {
16233 var dir = combinator.dir,
16234 skip = combinator.next,
16235 key = skip || dir,
16236 checkNonElements = base && key === "parentNode",
16237 doneName = done++;
16238
16239 return combinator.first ?
16240 // Check against closest ancestor/preceding element
16241 function( elem, context, xml ) {
16242 while ( (elem = elem[ dir ]) ) {
16243 if ( elem.nodeType === 1 || checkNonElements ) {
16244 return matcher( elem, context, xml );
16245 }
16246 }
16247 return false;
16248 } :
16249
16250 // Check against all ancestor/preceding elements
16251 function( elem, context, xml ) {
16252 var oldCache, uniqueCache, outerCache,
16253 newCache = [ dirruns, doneName ];
16254
16255 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
16256 if ( xml ) {
16257 while ( (elem = elem[ dir ]) ) {
16258 if ( elem.nodeType === 1 || checkNonElements ) {
16259 if ( matcher( elem, context, xml ) ) {
16260 return true;
16261 }
16262 }
16263 }
16264 } else {
16265 while ( (elem = elem[ dir ]) ) {
16266 if ( elem.nodeType === 1 || checkNonElements ) {
16267 outerCache = elem[ expando ] || (elem[ expando ] = {});
16268
16269 // Support: IE <9 only
16270 // Defend against cloned attroperties (jQuery gh-1709)
16271 uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
16272
16273 if ( skip && skip === elem.nodeName.toLowerCase() ) {
16274 elem = elem[ dir ] || elem;
16275 } else if ( (oldCache = uniqueCache[ key ]) &&
16276 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
16277
16278 // Assign to newCache so results back-propagate to previous elements
16279 return (newCache[ 2 ] = oldCache[ 2 ]);
16280 } else {
16281 // Reuse newcache so results back-propagate to previous elements
16282 uniqueCache[ key ] = newCache;
16283
16284 // A match means we're done; a fail means we have to keep checking
16285 if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
16286 return true;
16287 }
16288 }
16289 }
16290 }
16291 }
16292 return false;
16293 };
16294 }
16295
16296 function elementMatcher( matchers ) {
16297 return matchers.length > 1 ?
16298 function( elem, context, xml ) {
16299 var i = matchers.length;
16300 while ( i-- ) {
16301 if ( !matchers[i]( elem, context, xml ) ) {
16302 return false;
16303 }
16304 }
16305 return true;
16306 } :
16307 matchers[0];
16308 }
16309
16310 function multipleContexts( selector, contexts, results ) {
16311 var i = 0,
16312 len = contexts.length;
16313 for ( ; i < len; i++ ) {
16314 Sizzle( selector, contexts[i], results );
16315 }
16316 return results;
16317 }
16318
16319 function condense( unmatched, map, filter, context, xml ) {
16320 var elem,
16321 newUnmatched = [],
16322 i = 0,
16323 len = unmatched.length,
16324 mapped = map != null;
16325
16326 for ( ; i < len; i++ ) {
16327 if ( (elem = unmatched[i]) ) {
16328 if ( !filter || filter( elem, context, xml ) ) {
16329 newUnmatched.push( elem );
16330 if ( mapped ) {
16331 map.push( i );
16332 }
16333 }
16334 }
16335 }
16336
16337 return newUnmatched;
16338 }
16339
16340 function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
16341 if ( postFilter && !postFilter[ expando ] ) {
16342 postFilter = setMatcher( postFilter );
16343 }
16344 if ( postFinder && !postFinder[ expando ] ) {
16345 postFinder = setMatcher( postFinder, postSelector );
16346 }
16347 return markFunction(function( seed, results, context, xml ) {
16348 var temp, i, elem,
16349 preMap = [],
16350 postMap = [],
16351 preexisting = results.length,
16352
16353 // Get initial elements from seed or context
16354 elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
16355
16356 // Prefilter to get matcher input, preserving a map for seed-results synchronization
16357 matcherIn = preFilter && ( seed || !selector ) ?
16358 condense( elems, preMap, preFilter, context, xml ) :
16359 elems,
16360
16361 matcherOut = matcher ?
16362 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
16363 postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
16364
16365 // ...intermediate processing is necessary
16366 [] :
16367
16368 // ...otherwise use results directly
16369 results :
16370 matcherIn;
16371
16372 // Find primary matches
16373 if ( matcher ) {
16374 matcher( matcherIn, matcherOut, context, xml );
16375 }
16376
16377 // Apply postFilter
16378 if ( postFilter ) {
16379 temp = condense( matcherOut, postMap );
16380 postFilter( temp, [], context, xml );
16381
16382 // Un-match failing elements by moving them back to matcherIn
16383 i = temp.length;
16384 while ( i-- ) {
16385 if ( (elem = temp[i]) ) {
16386 matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
16387 }
16388 }
16389 }
16390
16391 if ( seed ) {
16392 if ( postFinder || preFilter ) {
16393 if ( postFinder ) {
16394 // Get the final matcherOut by condensing this intermediate into postFinder contexts
16395 temp = [];
16396 i = matcherOut.length;
16397 while ( i-- ) {
16398 if ( (elem = matcherOut[i]) ) {
16399 // Restore matcherIn since elem is not yet a final match
16400 temp.push( (matcherIn[i] = elem) );
16401 }
16402 }
16403 postFinder( null, (matcherOut = []), temp, xml );
16404 }
16405
16406 // Move matched elements from seed to results to keep them synchronized
16407 i = matcherOut.length;
16408 while ( i-- ) {
16409 if ( (elem = matcherOut[i]) &&
16410 (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
16411
16412 seed[temp] = !(results[temp] = elem);
16413 }
16414 }
16415 }
16416
16417 // Add elements to results, through postFinder if defined
16418 } else {
16419 matcherOut = condense(
16420 matcherOut === results ?
16421 matcherOut.splice( preexisting, matcherOut.length ) :
16422 matcherOut
16423 );
16424 if ( postFinder ) {
16425 postFinder( null, results, matcherOut, xml );
16426 } else {
16427 push.apply( results, matcherOut );
16428 }
16429 }
16430 });
16431 }
16432
16433 function matcherFromTokens( tokens ) {
16434 var checkContext, matcher, j,
16435 len = tokens.length,
16436 leadingRelative = Expr.relative[ tokens[0].type ],
16437 implicitRelative = leadingRelative || Expr.relative[" "],
16438 i = leadingRelative ? 1 : 0,
16439
16440 // The foundational matcher ensures that elements are reachable from top-level context(s)
16441 matchContext = addCombinator( function( elem ) {
16442 return elem === checkContext;
16443 }, implicitRelative, true ),
16444 matchAnyContext = addCombinator( function( elem ) {
16445 return indexOf( checkContext, elem ) > -1;
16446 }, implicitRelative, true ),
16447 matchers = [ function( elem, context, xml ) {
16448 var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
16449 (checkContext = context).nodeType ?
16450 matchContext( elem, context, xml ) :
16451 matchAnyContext( elem, context, xml ) );
16452 // Avoid hanging onto element (issue #299)
16453 checkContext = null;
16454 return ret;
16455 } ];
16456
16457 for ( ; i < len; i++ ) {
16458 if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
16459 matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
16460 } else {
16461 matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
16462
16463 // Return special upon seeing a positional matcher
16464 if ( matcher[ expando ] ) {
16465 // Find the next relative operator (if any) for proper handling
16466 j = ++i;
16467 for ( ; j < len; j++ ) {
16468 if ( Expr.relative[ tokens[j].type ] ) {
16469 break;
16470 }
16471 }
16472 return setMatcher(
16473 i > 1 && elementMatcher( matchers ),
16474 i > 1 && toSelector(
16475 // If the preceding token was a descendant combinator, insert an implicit any-element `*`
16476 tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
16477 ).replace( rtrim, "$1" ),
16478 matcher,
16479 i < j && matcherFromTokens( tokens.slice( i, j ) ),
16480 j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
16481 j < len && toSelector( tokens )
16482 );
16483 }
16484 matchers.push( matcher );
16485 }
16486 }
16487
16488 return elementMatcher( matchers );
16489 }
16490
16491 function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
16492 var bySet = setMatchers.length > 0,
16493 byElement = elementMatchers.length > 0,
16494 superMatcher = function( seed, context, xml, results, outermost ) {
16495 var elem, j, matcher,
16496 matchedCount = 0,
16497 i = "0",
16498 unmatched = seed && [],
16499 setMatched = [],
16500 contextBackup = outermostContext,
16501 // We must always have either seed elements or outermost context
16502 elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
16503 // Use integer dirruns iff this is the outermost matcher
16504 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
16505 len = elems.length;
16506
16507 if ( outermost ) {
16508 outermostContext = context === document || context || outermost;
16509 }
16510
16511 // Add elements passing elementMatchers directly to results
16512 // Support: IE<9, Safari
16513 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
16514 for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
16515 if ( byElement && elem ) {
16516 j = 0;
16517 if ( !context && elem.ownerDocument !== document ) {
16518 setDocument( elem );
16519 xml = !documentIsHTML;
16520 }
16521 while ( (matcher = elementMatchers[j++]) ) {
16522 if ( matcher( elem, context || document, xml) ) {
16523 results.push( elem );
16524 break;
16525 }
16526 }
16527 if ( outermost ) {
16528 dirruns = dirrunsUnique;
16529 }
16530 }
16531
16532 // Track unmatched elements for set filters
16533 if ( bySet ) {
16534 // They will have gone through all possible matchers
16535 if ( (elem = !matcher && elem) ) {
16536 matchedCount--;
16537 }
16538
16539 // Lengthen the array for every element, matched or not
16540 if ( seed ) {
16541 unmatched.push( elem );
16542 }
16543 }
16544 }
16545
16546 // `i` is now the count of elements visited above, and adding it to `matchedCount`
16547 // makes the latter nonnegative.
16548 matchedCount += i;
16549
16550 // Apply set filters to unmatched elements
16551 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
16552 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
16553 // no element matchers and no seed.
16554 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
16555 // case, which will result in a "00" `matchedCount` that differs from `i` but is also
16556 // numerically zero.
16557 if ( bySet && i !== matchedCount ) {
16558 j = 0;
16559 while ( (matcher = setMatchers[j++]) ) {
16560 matcher( unmatched, setMatched, context, xml );
16561 }
16562
16563 if ( seed ) {
16564 // Reintegrate element matches to eliminate the need for sorting
16565 if ( matchedCount > 0 ) {
16566 while ( i-- ) {
16567 if ( !(unmatched[i] || setMatched[i]) ) {
16568 setMatched[i] = pop.call( results );
16569 }
16570 }
16571 }
16572
16573 // Discard index placeholder values to get only actual matches
16574 setMatched = condense( setMatched );
16575 }
16576
16577 // Add matches to results
16578 push.apply( results, setMatched );
16579
16580 // Seedless set matches succeeding multiple successful matchers stipulate sorting
16581 if ( outermost && !seed && setMatched.length > 0 &&
16582 ( matchedCount + setMatchers.length ) > 1 ) {
16583
16584 Sizzle.uniqueSort( results );
16585 }
16586 }
16587
16588 // Override manipulation of globals by nested matchers
16589 if ( outermost ) {
16590 dirruns = dirrunsUnique;
16591 outermostContext = contextBackup;
16592 }
16593
16594 return unmatched;
16595 };
16596
16597 return bySet ?
16598 markFunction( superMatcher ) :
16599 superMatcher;
16600 }
16601
16602 compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
16603 var i,
16604 setMatchers = [],
16605 elementMatchers = [],
16606 cached = compilerCache[ selector + " " ];
16607
16608 if ( !cached ) {
16609 // Generate a function of recursive functions that can be used to check each element
16610 if ( !match ) {
16611 match = tokenize( selector );
16612 }
16613 i = match.length;
16614 while ( i-- ) {
16615 cached = matcherFromTokens( match[i] );
16616 if ( cached[ expando ] ) {
16617 setMatchers.push( cached );
16618 } else {
16619 elementMatchers.push( cached );
16620 }
16621 }
16622
16623 // Cache the compiled function
16624 cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
16625
16626 // Save selector and tokenization
16627 cached.selector = selector;
16628 }
16629 return cached;
16630 };
16631
16632 /**
16633 * A low-level selection function that works with Sizzle's compiled
16634 * selector functions
16635 * @param {String|Function} selector A selector or a pre-compiled
16636 * selector function built with Sizzle.compile
16637 * @param {Element} context
16638 * @param {Array} [results]
16639 * @param {Array} [seed] A set of elements to match against
16640 */
16641 select = Sizzle.select = function( selector, context, results, seed ) {
16642 var i, tokens, token, type, find,
16643 compiled = typeof selector === "function" && selector,
16644 match = !seed && tokenize( (selector = compiled.selector || selector) );
16645
16646 results = results || [];
16647
16648 // Try to minimize operations if there is only one selector in the list and no seed
16649 // (the latter of which guarantees us context)
16650 if ( match.length === 1 ) {
16651
16652 // Reduce context if the leading compound selector is an ID
16653 tokens = match[0] = match[0].slice( 0 );
16654 if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
16655 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
16656
16657 context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
16658 if ( !context ) {
16659 return results;
16660
16661 // Precompiled matchers will still verify ancestry, so step up a level
16662 } else if ( compiled ) {
16663 context = context.parentNode;
16664 }
16665
16666 selector = selector.slice( tokens.shift().value.length );
16667 }
16668
16669 // Fetch a seed set for right-to-left matching
16670 i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
16671 while ( i-- ) {
16672 token = tokens[i];
16673
16674 // Abort if we hit a combinator
16675 if ( Expr.relative[ (type = token.type) ] ) {
16676 break;
16677 }
16678 if ( (find = Expr.find[ type ]) ) {
16679 // Search, expanding context for leading sibling combinators
16680 if ( (seed = find(
16681 token.matches[0].replace( runescape, funescape ),
16682 rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
16683 )) ) {
16684
16685 // If seed is empty or no tokens remain, we can return early
16686 tokens.splice( i, 1 );
16687 selector = seed.length && toSelector( tokens );
16688 if ( !selector ) {
16689 push.apply( results, seed );
16690 return results;
16691 }
16692
16693 break;
16694 }
16695 }
16696 }
16697 }
16698
16699 // Compile and execute a filtering function if one is not provided
16700 // Provide `match` to avoid retokenization if we modified the selector above
16701 ( compiled || compile( selector, match ) )(
16702 seed,
16703 context,
16704 !documentIsHTML,
16705 results,
16706 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
16707 );
16708 return results;
16709 };
16710
16711 // One-time assignments
16712
16713 // Sort stability
16714 support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
16715
16716 // Support: Chrome 14-35+
16717 // Always assume duplicates if they aren't passed to the comparison function
16718 support.detectDuplicates = !!hasDuplicate;
16719
16720 // Initialize against the default document
16721 setDocument();
16722
16723 // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
16724 // Detached nodes confoundingly follow *each other*
16725 support.sortDetached = assert(function( el ) {
16726 // Should return 1, but returns 4 (following)
16727 return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
16728 });
16729
16730 // Support: IE<8
16731 // Prevent attribute/property "interpolation"
16732 // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
16733 if ( !assert(function( el ) {
16734 el.innerHTML = "<a href='#'></a>";
16735 return el.firstChild.getAttribute("href") === "#" ;
16736 }) ) {
16737 addHandle( "type|href|height|width", function( elem, name, isXML ) {
16738 if ( !isXML ) {
16739 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
16740 }
16741 });
16742 }
16743
16744 // Support: IE<9
16745 // Use defaultValue in place of getAttribute("value")
16746 if ( !support.attributes || !assert(function( el ) {
16747 el.innerHTML = "<input/>";
16748 el.firstChild.setAttribute( "value", "" );
16749 return el.firstChild.getAttribute( "value" ) === "";
16750 }) ) {
16751 addHandle( "value", function( elem, name, isXML ) {
16752 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
16753 return elem.defaultValue;
16754 }
16755 });
16756 }
16757
16758 // Support: IE<9
16759 // Use getAttributeNode to fetch booleans when getAttribute lies
16760 if ( !assert(function( el ) {
16761 return el.getAttribute("disabled") == null;
16762 }) ) {
16763 addHandle( booleans, function( elem, name, isXML ) {
16764 var val;
16765 if ( !isXML ) {
16766 return elem[ name ] === true ? name.toLowerCase() :
16767 (val = elem.getAttributeNode( name )) && val.specified ?
16768 val.value :
16769 null;
16770 }
16771 });
16772 }
16773
16774 return Sizzle;
16775
16776 })( window );
16777
16778
16779
16780 jQuery.find = Sizzle;
16781 jQuery.expr = Sizzle.selectors;
16782
16783 // Deprecated
16784 jQuery.expr[ ":" ] = jQuery.expr.pseudos;
16785 jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
16786 jQuery.text = Sizzle.getText;
16787 jQuery.isXMLDoc = Sizzle.isXML;
16788 jQuery.contains = Sizzle.contains;
16789 jQuery.escapeSelector = Sizzle.escape;
16790
16791
16792
16793
16794 var dir = function( elem, dir, until ) {
16795 var matched = [],
16796 truncate = until !== undefined;
16797
16798 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
16799 if ( elem.nodeType === 1 ) {
16800 if ( truncate && jQuery( elem ).is( until ) ) {
16801 break;
16802 }
16803 matched.push( elem );
16804 }
16805 }
16806 return matched;
16807 };
16808
16809
16810 var siblings = function( n, elem ) {
16811 var matched = [];
16812
16813 for ( ; n; n = n.nextSibling ) {
16814 if ( n.nodeType === 1 && n !== elem ) {
16815 matched.push( n );
16816 }
16817 }
16818
16819 return matched;
16820 };
16821
16822
16823 var rneedsContext = jQuery.expr.match.needsContext;
16824
16825
16826
16827 function nodeName( elem, name ) {
16828
16829 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
16830
16831 };
16832 var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
16833
16834
16835
16836 var risSimple = /^.[^:#\[\.,]*$/;
16837
16838 // Implement the identical functionality for filter and not
16839 function winnow( elements, qualifier, not ) {
16840 if ( jQuery.isFunction( qualifier ) ) {
16841 return jQuery.grep( elements, function( elem, i ) {
16842 return !!qualifier.call( elem, i, elem ) !== not;
16843 } );
16844 }
16845
16846 // Single element
16847 if ( qualifier.nodeType ) {
16848 return jQuery.grep( elements, function( elem ) {
16849 return ( elem === qualifier ) !== not;
16850 } );
16851 }
16852
16853 // Arraylike of elements (jQuery, arguments, Array)
16854 if ( typeof qualifier !== "string" ) {
16855 return jQuery.grep( elements, function( elem ) {
16856 return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
16857 } );
16858 }
16859
16860 // Simple selector that can be filtered directly, removing non-Elements
16861 if ( risSimple.test( qualifier ) ) {
16862 return jQuery.filter( qualifier, elements, not );
16863 }
16864
16865 // Complex selector, compare the two sets, removing non-Elements
16866 qualifier = jQuery.filter( qualifier, elements );
16867 return jQuery.grep( elements, function( elem ) {
16868 return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
16869 } );
16870 }
16871
16872 jQuery.filter = function( expr, elems, not ) {
16873 var elem = elems[ 0 ];
16874
16875 if ( not ) {
16876 expr = ":not(" + expr + ")";
16877 }
16878
16879 if ( elems.length === 1 && elem.nodeType === 1 ) {
16880 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
16881 }
16882
16883 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
16884 return elem.nodeType === 1;
16885 } ) );
16886 };
16887
16888 jQuery.fn.extend( {
16889 find: function( selector ) {
16890 var i, ret,
16891 len = this.length,
16892 self = this;
16893
16894 if ( typeof selector !== "string" ) {
16895 return this.pushStack( jQuery( selector ).filter( function() {
16896 for ( i = 0; i < len; i++ ) {
16897 if ( jQuery.contains( self[ i ], this ) ) {
16898 return true;
16899 }
16900 }
16901 } ) );
16902 }
16903
16904 ret = this.pushStack( [] );
16905
16906 for ( i = 0; i < len; i++ ) {
16907 jQuery.find( selector, self[ i ], ret );
16908 }
16909
16910 return len > 1 ? jQuery.uniqueSort( ret ) : ret;
16911 },
16912 filter: function( selector ) {
16913 return this.pushStack( winnow( this, selector || [], false ) );
16914 },
16915 not: function( selector ) {
16916 return this.pushStack( winnow( this, selector || [], true ) );
16917 },
16918 is: function( selector ) {
16919 return !!winnow(
16920 this,
16921
16922 // If this is a positional/relative selector, check membership in the returned set
16923 // so $("p:first").is("p:last") won't return true for a doc with two "p".
16924 typeof selector === "string" && rneedsContext.test( selector ) ?
16925 jQuery( selector ) :
16926 selector || [],
16927 false
16928 ).length;
16929 }
16930 } );
16931
16932
16933 // Initialize a jQuery object
16934
16935
16936 // A central reference to the root jQuery(document)
16937 var rootjQuery,
16938
16939 // A simple way to check for HTML strings
16940 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
16941 // Strict HTML recognition (#11290: must start with <)
16942 // Shortcut simple #id case for speed
16943 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
16944
16945 init = jQuery.fn.init = function( selector, context, root ) {
16946 var match, elem;
16947
16948 // HANDLE: $(""), $(null), $(undefined), $(false)
16949 if ( !selector ) {
16950 return this;
16951 }
16952
16953 // Method init() accepts an alternate rootjQuery
16954 // so migrate can support jQuery.sub (gh-2101)
16955 root = root || rootjQuery;
16956
16957 // Handle HTML strings
16958 if ( typeof selector === "string" ) {
16959 if ( selector[ 0 ] === "<" &&
16960 selector[ selector.length - 1 ] === ">" &&
16961 selector.length >= 3 ) {
16962
16963 // Assume that strings that start and end with <> are HTML and skip the regex check
16964 match = [ null, selector, null ];
16965
16966 } else {
16967 match = rquickExpr.exec( selector );
16968 }
16969
16970 // Match html or make sure no context is specified for #id
16971 if ( match && ( match[ 1 ] || !context ) ) {
16972
16973 // HANDLE: $(html) -> $(array)
16974 if ( match[ 1 ] ) {
16975 context = context instanceof jQuery ? context[ 0 ] : context;
16976
16977 // Option to run scripts is true for back-compat
16978 // Intentionally let the error be thrown if parseHTML is not present
16979 jQuery.merge( this, jQuery.parseHTML(
16980 match[ 1 ],
16981 context && context.nodeType ? context.ownerDocument || context : document,
16982 true
16983 ) );
16984
16985 // HANDLE: $(html, props)
16986 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
16987 for ( match in context ) {
16988
16989 // Properties of context are called as methods if possible
16990 if ( jQuery.isFunction( this[ match ] ) ) {
16991 this[ match ]( context[ match ] );
16992
16993 // ...and otherwise set as attributes
16994 } else {
16995 this.attr( match, context[ match ] );
16996 }
16997 }
16998 }
16999
17000 return this;
17001
17002 // HANDLE: $(#id)
17003 } else {
17004 elem = document.getElementById( match[ 2 ] );
17005
17006 if ( elem ) {
17007
17008 // Inject the element directly into the jQuery object
17009 this[ 0 ] = elem;
17010 this.length = 1;
17011 }
17012 return this;
17013 }
17014
17015 // HANDLE: $(expr, $(...))
17016 } else if ( !context || context.jquery ) {
17017 return ( context || root ).find( selector );
17018
17019 // HANDLE: $(expr, context)
17020 // (which is just equivalent to: $(context).find(expr)
17021 } else {
17022 return this.constructor( context ).find( selector );
17023 }
17024
17025 // HANDLE: $(DOMElement)
17026 } else if ( selector.nodeType ) {
17027 this[ 0 ] = selector;
17028 this.length = 1;
17029 return this;
17030
17031 // HANDLE: $(function)
17032 // Shortcut for document ready
17033 } else if ( jQuery.isFunction( selector ) ) {
17034 return root.ready !== undefined ?
17035 root.ready( selector ) :
17036
17037 // Execute immediately if ready is not present
17038 selector( jQuery );
17039 }
17040
17041 return jQuery.makeArray( selector, this );
17042 };
17043
17044 // Give the init function the jQuery prototype for later instantiation
17045 init.prototype = jQuery.fn;
17046
17047 // Initialize central reference
17048 rootjQuery = jQuery( document );
17049
17050
17051 var rparentsprev = /^(?:parents|prev(?:Until|All))/,
17052
17053 // Methods guaranteed to produce a unique set when starting from a unique set
17054 guaranteedUnique = {
17055 children: true,
17056 contents: true,
17057 next: true,
17058 prev: true
17059 };
17060
17061 jQuery.fn.extend( {
17062 has: function( target ) {
17063 var targets = jQuery( target, this ),
17064 l = targets.length;
17065
17066 return this.filter( function() {
17067 var i = 0;
17068 for ( ; i < l; i++ ) {
17069 if ( jQuery.contains( this, targets[ i ] ) ) {
17070 return true;
17071 }
17072 }
17073 } );
17074 },
17075
17076 closest: function( selectors, context ) {
17077 var cur,
17078 i = 0,
17079 l = this.length,
17080 matched = [],
17081 targets = typeof selectors !== "string" && jQuery( selectors );
17082
17083 // Positional selectors never match, since there's no _selection_ context
17084 if ( !rneedsContext.test( selectors ) ) {
17085 for ( ; i < l; i++ ) {
17086 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
17087
17088 // Always skip document fragments
17089 if ( cur.nodeType < 11 && ( targets ?
17090 targets.index( cur ) > -1 :
17091
17092 // Don't pass non-elements to Sizzle
17093 cur.nodeType === 1 &&
17094 jQuery.find.matchesSelector( cur, selectors ) ) ) {
17095
17096 matched.push( cur );
17097 break;
17098 }
17099 }
17100 }
17101 }
17102
17103 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
17104 },
17105
17106 // Determine the position of an element within the set
17107 index: function( elem ) {
17108
17109 // No argument, return index in parent
17110 if ( !elem ) {
17111 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
17112 }
17113
17114 // Index in selector
17115 if ( typeof elem === "string" ) {
17116 return indexOf.call( jQuery( elem ), this[ 0 ] );
17117 }
17118
17119 // Locate the position of the desired element
17120 return indexOf.call( this,
17121
17122 // If it receives a jQuery object, the first element is used
17123 elem.jquery ? elem[ 0 ] : elem
17124 );
17125 },
17126
17127 add: function( selector, context ) {
17128 return this.pushStack(
17129 jQuery.uniqueSort(
17130 jQuery.merge( this.get(), jQuery( selector, context ) )
17131 )
17132 );
17133 },
17134
17135 addBack: function( selector ) {
17136 return this.add( selector == null ?
17137 this.prevObject : this.prevObject.filter( selector )
17138 );
17139 }
17140 } );
17141
17142 function sibling( cur, dir ) {
17143 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
17144 return cur;
17145 }
17146
17147 jQuery.each( {
17148 parent: function( elem ) {
17149 var parent = elem.parentNode;
17150 return parent && parent.nodeType !== 11 ? parent : null;
17151 },
17152 parents: function( elem ) {
17153 return dir( elem, "parentNode" );
17154 },
17155 parentsUntil: function( elem, i, until ) {
17156 return dir( elem, "parentNode", until );
17157 },
17158 next: function( elem ) {
17159 return sibling( elem, "nextSibling" );
17160 },
17161 prev: function( elem ) {
17162 return sibling( elem, "previousSibling" );
17163 },
17164 nextAll: function( elem ) {
17165 return dir( elem, "nextSibling" );
17166 },
17167 prevAll: function( elem ) {
17168 return dir( elem, "previousSibling" );
17169 },
17170 nextUntil: function( elem, i, until ) {
17171 return dir( elem, "nextSibling", until );
17172 },
17173 prevUntil: function( elem, i, until ) {
17174 return dir( elem, "previousSibling", until );
17175 },
17176 siblings: function( elem ) {
17177 return siblings( ( elem.parentNode || {} ).firstChild, elem );
17178 },
17179 children: function( elem ) {
17180 return siblings( elem.firstChild );
17181 },
17182 contents: function( elem ) {
17183 if ( nodeName( elem, "iframe" ) ) {
17184 return elem.contentDocument;
17185 }
17186
17187 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
17188 // Treat the template element as a regular one in browsers that
17189 // don't support it.
17190 if ( nodeName( elem, "template" ) ) {
17191 elem = elem.content || elem;
17192 }
17193
17194 return jQuery.merge( [], elem.childNodes );
17195 }
17196 }, function( name, fn ) {
17197 jQuery.fn[ name ] = function( until, selector ) {
17198 var matched = jQuery.map( this, fn, until );
17199
17200 if ( name.slice( -5 ) !== "Until" ) {
17201 selector = until;
17202 }
17203
17204 if ( selector && typeof selector === "string" ) {
17205 matched = jQuery.filter( selector, matched );
17206 }
17207
17208 if ( this.length > 1 ) {
17209
17210 // Remove duplicates
17211 if ( !guaranteedUnique[ name ] ) {
17212 jQuery.uniqueSort( matched );
17213 }
17214
17215 // Reverse order for parents* and prev-derivatives
17216 if ( rparentsprev.test( name ) ) {
17217 matched.reverse();
17218 }
17219 }
17220
17221 return this.pushStack( matched );
17222 };
17223 } );
17224 var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
17225
17226
17227
17228 // Convert String-formatted options into Object-formatted ones
17229 function createOptions( options ) {
17230 var object = {};
17231 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
17232 object[ flag ] = true;
17233 } );
17234 return object;
17235 }
17236
17237 /*
17238 * Create a callback list using the following parameters:
17239 *
17240 * options: an optional list of space-separated options that will change how
17241 * the callback list behaves or a more traditional option object
17242 *
17243 * By default a callback list will act like an event callback list and can be
17244 * "fired" multiple times.
17245 *
17246 * Possible options:
17247 *
17248 * once: will ensure the callback list can only be fired once (like a Deferred)
17249 *
17250 * memory: will keep track of previous values and will call any callback added
17251 * after the list has been fired right away with the latest "memorized"
17252 * values (like a Deferred)
17253 *
17254 * unique: will ensure a callback can only be added once (no duplicate in the list)
17255 *
17256 * stopOnFalse: interrupt callings when a callback returns false
17257 *
17258 */
17259 jQuery.Callbacks = function( options ) {
17260
17261 // Convert options from String-formatted to Object-formatted if needed
17262 // (we check in cache first)
17263 options = typeof options === "string" ?
17264 createOptions( options ) :
17265 jQuery.extend( {}, options );
17266
17267 var // Flag to know if list is currently firing
17268 firing,
17269
17270 // Last fire value for non-forgettable lists
17271 memory,
17272
17273 // Flag to know if list was already fired
17274 fired,
17275
17276 // Flag to prevent firing
17277 locked,
17278
17279 // Actual callback list
17280 list = [],
17281
17282 // Queue of execution data for repeatable lists
17283 queue = [],
17284
17285 // Index of currently firing callback (modified by add/remove as needed)
17286 firingIndex = -1,
17287
17288 // Fire callbacks
17289 fire = function() {
17290
17291 // Enforce single-firing
17292 locked = locked || options.once;
17293
17294 // Execute callbacks for all pending executions,
17295 // respecting firingIndex overrides and runtime changes
17296 fired = firing = true;
17297 for ( ; queue.length; firingIndex = -1 ) {
17298 memory = queue.shift();
17299 while ( ++firingIndex < list.length ) {
17300
17301 // Run callback and check for early termination
17302 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
17303 options.stopOnFalse ) {
17304
17305 // Jump to end and forget the data so .add doesn't re-fire
17306 firingIndex = list.length;
17307 memory = false;
17308 }
17309 }
17310 }
17311
17312 // Forget the data if we're done with it
17313 if ( !options.memory ) {
17314 memory = false;
17315 }
17316
17317 firing = false;
17318
17319 // Clean up if we're done firing for good
17320 if ( locked ) {
17321
17322 // Keep an empty list if we have data for future add calls
17323 if ( memory ) {
17324 list = [];
17325
17326 // Otherwise, this object is spent
17327 } else {
17328 list = "";
17329 }
17330 }
17331 },
17332
17333 // Actual Callbacks object
17334 self = {
17335
17336 // Add a callback or a collection of callbacks to the list
17337 add: function() {
17338 if ( list ) {
17339
17340 // If we have memory from a past run, we should fire after adding
17341 if ( memory && !firing ) {
17342 firingIndex = list.length - 1;
17343 queue.push( memory );
17344 }
17345
17346 ( function add( args ) {
17347 jQuery.each( args, function( _, arg ) {
17348 if ( jQuery.isFunction( arg ) ) {
17349 if ( !options.unique || !self.has( arg ) ) {
17350 list.push( arg );
17351 }
17352 } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
17353
17354 // Inspect recursively
17355 add( arg );
17356 }
17357 } );
17358 } )( arguments );
17359
17360 if ( memory && !firing ) {
17361 fire();
17362 }
17363 }
17364 return this;
17365 },
17366
17367 // Remove a callback from the list
17368 remove: function() {
17369 jQuery.each( arguments, function( _, arg ) {
17370 var index;
17371 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
17372 list.splice( index, 1 );
17373
17374 // Handle firing indexes
17375 if ( index <= firingIndex ) {
17376 firingIndex--;
17377 }
17378 }
17379 } );
17380 return this;
17381 },
17382
17383 // Check if a given callback is in the list.
17384 // If no argument is given, return whether or not list has callbacks attached.
17385 has: function( fn ) {
17386 return fn ?
17387 jQuery.inArray( fn, list ) > -1 :
17388 list.length > 0;
17389 },
17390
17391 // Remove all callbacks from the list
17392 empty: function() {
17393 if ( list ) {
17394 list = [];
17395 }
17396 return this;
17397 },
17398
17399 // Disable .fire and .add
17400 // Abort any current/pending executions
17401 // Clear all callbacks and values
17402 disable: function() {
17403 locked = queue = [];
17404 list = memory = "";
17405 return this;
17406 },
17407 disabled: function() {
17408 return !list;
17409 },
17410
17411 // Disable .fire
17412 // Also disable .add unless we have memory (since it would have no effect)
17413 // Abort any pending executions
17414 lock: function() {
17415 locked = queue = [];
17416 if ( !memory && !firing ) {
17417 list = memory = "";
17418 }
17419 return this;
17420 },
17421 locked: function() {
17422 return !!locked;
17423 },
17424
17425 // Call all callbacks with the given context and arguments
17426 fireWith: function( context, args ) {
17427 if ( !locked ) {
17428 args = args || [];
17429 args = [ context, args.slice ? args.slice() : args ];
17430 queue.push( args );
17431 if ( !firing ) {
17432 fire();
17433 }
17434 }
17435 return this;
17436 },
17437
17438 // Call all the callbacks with the given arguments
17439 fire: function() {
17440 self.fireWith( this, arguments );
17441 return this;
17442 },
17443
17444 // To know if the callbacks have already been called at least once
17445 fired: function() {
17446 return !!fired;
17447 }
17448 };
17449
17450 return self;
17451 };
17452
17453
17454 function Identity( v ) {
17455 return v;
17456 }
17457 function Thrower( ex ) {
17458 throw ex;
17459 }
17460
17461 function adoptValue( value, resolve, reject, noValue ) {
17462 var method;
17463
17464 try {
17465
17466 // Check for promise aspect first to privilege synchronous behavior
17467 if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
17468 method.call( value ).done( resolve ).fail( reject );
17469
17470 // Other thenables
17471 } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
17472 method.call( value, resolve, reject );
17473
17474 // Other non-thenables
17475 } else {
17476
17477 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
17478 // * false: [ value ].slice( 0 ) => resolve( value )
17479 // * true: [ value ].slice( 1 ) => resolve()
17480 resolve.apply( undefined, [ value ].slice( noValue ) );
17481 }
17482
17483 // For Promises/A+, convert exceptions into rejections
17484 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
17485 // Deferred#then to conditionally suppress rejection.
17486 } catch ( value ) {
17487
17488 // Support: Android 4.0 only
17489 // Strict mode functions invoked without .call/.apply get global-object context
17490 reject.apply( undefined, [ value ] );
17491 }
17492 }
17493
17494 jQuery.extend( {
17495
17496 Deferred: function( func ) {
17497 var tuples = [
17498
17499 // action, add listener, callbacks,
17500 // ... .then handlers, argument index, [final state]
17501 [ "notify", "progress", jQuery.Callbacks( "memory" ),
17502 jQuery.Callbacks( "memory" ), 2 ],
17503 [ "resolve", "done", jQuery.Callbacks( "once memory" ),
17504 jQuery.Callbacks( "once memory" ), 0, "resolved" ],
17505 [ "reject", "fail", jQuery.Callbacks( "once memory" ),
17506 jQuery.Callbacks( "once memory" ), 1, "rejected" ]
17507 ],
17508 state = "pending",
17509 promise = {
17510 state: function() {
17511 return state;
17512 },
17513 always: function() {
17514 deferred.done( arguments ).fail( arguments );
17515 return this;
17516 },
17517 "catch": function( fn ) {
17518 return promise.then( null, fn );
17519 },
17520
17521 // Keep pipe for back-compat
17522 pipe: function( /* fnDone, fnFail, fnProgress */ ) {
17523 var fns = arguments;
17524
17525 return jQuery.Deferred( function( newDefer ) {
17526 jQuery.each( tuples, function( i, tuple ) {
17527
17528 // Map tuples (progress, done, fail) to arguments (done, fail, progress)
17529 var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
17530
17531 // deferred.progress(function() { bind to newDefer or newDefer.notify })
17532 // deferred.done(function() { bind to newDefer or newDefer.resolve })
17533 // deferred.fail(function() { bind to newDefer or newDefer.reject })
17534 deferred[ tuple[ 1 ] ]( function() {
17535 var returned = fn && fn.apply( this, arguments );
17536 if ( returned && jQuery.isFunction( returned.promise ) ) {
17537 returned.promise()
17538 .progress( newDefer.notify )
17539 .done( newDefer.resolve )
17540 .fail( newDefer.reject );
17541 } else {
17542 newDefer[ tuple[ 0 ] + "With" ](
17543 this,
17544 fn ? [ returned ] : arguments
17545 );
17546 }
17547 } );
17548 } );
17549 fns = null;
17550 } ).promise();
17551 },
17552 then: function( onFulfilled, onRejected, onProgress ) {
17553 var maxDepth = 0;
17554 function resolve( depth, deferred, handler, special ) {
17555 return function() {
17556 var that = this,
17557 args = arguments,
17558 mightThrow = function() {
17559 var returned, then;
17560
17561 // Support: Promises/A+ section 2.3.3.3.3
17562 // https://promisesaplus.com/#point-59
17563 // Ignore double-resolution attempts
17564 if ( depth < maxDepth ) {
17565 return;
17566 }
17567
17568 returned = handler.apply( that, args );
17569
17570 // Support: Promises/A+ section 2.3.1
17571 // https://promisesaplus.com/#point-48
17572 if ( returned === deferred.promise() ) {
17573 throw new TypeError( "Thenable self-resolution" );
17574 }
17575
17576 // Support: Promises/A+ sections 2.3.3.1, 3.5
17577 // https://promisesaplus.com/#point-54
17578 // https://promisesaplus.com/#point-75
17579 // Retrieve `then` only once
17580 then = returned &&
17581
17582 // Support: Promises/A+ section 2.3.4
17583 // https://promisesaplus.com/#point-64
17584 // Only check objects and functions for thenability
17585 ( typeof returned === "object" ||
17586 typeof returned === "function" ) &&
17587 returned.then;
17588
17589 // Handle a returned thenable
17590 if ( jQuery.isFunction( then ) ) {
17591
17592 // Special processors (notify) just wait for resolution
17593 if ( special ) {
17594 then.call(
17595 returned,
17596 resolve( maxDepth, deferred, Identity, special ),
17597 resolve( maxDepth, deferred, Thrower, special )
17598 );
17599
17600 // Normal processors (resolve) also hook into progress
17601 } else {
17602
17603 // ...and disregard older resolution values
17604 maxDepth++;
17605
17606 then.call(
17607 returned,
17608 resolve( maxDepth, deferred, Identity, special ),
17609 resolve( maxDepth, deferred, Thrower, special ),
17610 resolve( maxDepth, deferred, Identity,
17611 deferred.notifyWith )
17612 );
17613 }
17614
17615 // Handle all other returned values
17616 } else {
17617
17618 // Only substitute handlers pass on context
17619 // and multiple values (non-spec behavior)
17620 if ( handler !== Identity ) {
17621 that = undefined;
17622 args = [ returned ];
17623 }
17624
17625 // Process the value(s)
17626 // Default process is resolve
17627 ( special || deferred.resolveWith )( that, args );
17628 }
17629 },
17630
17631 // Only normal processors (resolve) catch and reject exceptions
17632 process = special ?
17633 mightThrow :
17634 function() {
17635 try {
17636 mightThrow();
17637 } catch ( e ) {
17638
17639 if ( jQuery.Deferred.exceptionHook ) {
17640 jQuery.Deferred.exceptionHook( e,
17641 process.stackTrace );
17642 }
17643
17644 // Support: Promises/A+ section 2.3.3.3.4.1
17645 // https://promisesaplus.com/#point-61
17646 // Ignore post-resolution exceptions
17647 if ( depth + 1 >= maxDepth ) {
17648
17649 // Only substitute handlers pass on context
17650 // and multiple values (non-spec behavior)
17651 if ( handler !== Thrower ) {
17652 that = undefined;
17653 args = [ e ];
17654 }
17655
17656 deferred.rejectWith( that, args );
17657 }
17658 }
17659 };
17660
17661 // Support: Promises/A+ section 2.3.3.3.1
17662 // https://promisesaplus.com/#point-57
17663 // Re-resolve promises immediately to dodge false rejection from
17664 // subsequent errors
17665 if ( depth ) {
17666 process();
17667 } else {
17668
17669 // Call an optional hook to record the stack, in case of exception
17670 // since it's otherwise lost when execution goes async
17671 if ( jQuery.Deferred.getStackHook ) {
17672 process.stackTrace = jQuery.Deferred.getStackHook();
17673 }
17674 window.setTimeout( process );
17675 }
17676 };
17677 }
17678
17679 return jQuery.Deferred( function( newDefer ) {
17680
17681 // progress_handlers.add( ... )
17682 tuples[ 0 ][ 3 ].add(
17683 resolve(
17684 0,
17685 newDefer,
17686 jQuery.isFunction( onProgress ) ?
17687 onProgress :
17688 Identity,
17689 newDefer.notifyWith
17690 )
17691 );
17692
17693 // fulfilled_handlers.add( ... )
17694 tuples[ 1 ][ 3 ].add(
17695 resolve(
17696 0,
17697 newDefer,
17698 jQuery.isFunction( onFulfilled ) ?
17699 onFulfilled :
17700 Identity
17701 )
17702 );
17703
17704 // rejected_handlers.add( ... )
17705 tuples[ 2 ][ 3 ].add(
17706 resolve(
17707 0,
17708 newDefer,
17709 jQuery.isFunction( onRejected ) ?
17710 onRejected :
17711 Thrower
17712 )
17713 );
17714 } ).promise();
17715 },
17716
17717 // Get a promise for this deferred
17718 // If obj is provided, the promise aspect is added to the object
17719 promise: function( obj ) {
17720 return obj != null ? jQuery.extend( obj, promise ) : promise;
17721 }
17722 },
17723 deferred = {};
17724
17725 // Add list-specific methods
17726 jQuery.each( tuples, function( i, tuple ) {
17727 var list = tuple[ 2 ],
17728 stateString = tuple[ 5 ];
17729
17730 // promise.progress = list.add
17731 // promise.done = list.add
17732 // promise.fail = list.add
17733 promise[ tuple[ 1 ] ] = list.add;
17734
17735 // Handle state
17736 if ( stateString ) {
17737 list.add(
17738 function() {
17739
17740 // state = "resolved" (i.e., fulfilled)
17741 // state = "rejected"
17742 state = stateString;
17743 },
17744
17745 // rejected_callbacks.disable
17746 // fulfilled_callbacks.disable
17747 tuples[ 3 - i ][ 2 ].disable,
17748
17749 // progress_callbacks.lock
17750 tuples[ 0 ][ 2 ].lock
17751 );
17752 }
17753
17754 // progress_handlers.fire
17755 // fulfilled_handlers.fire
17756 // rejected_handlers.fire
17757 list.add( tuple[ 3 ].fire );
17758
17759 // deferred.notify = function() { deferred.notifyWith(...) }
17760 // deferred.resolve = function() { deferred.resolveWith(...) }
17761 // deferred.reject = function() { deferred.rejectWith(...) }
17762 deferred[ tuple[ 0 ] ] = function() {
17763 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
17764 return this;
17765 };
17766
17767 // deferred.notifyWith = list.fireWith
17768 // deferred.resolveWith = list.fireWith
17769 // deferred.rejectWith = list.fireWith
17770 deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
17771 } );
17772
17773 // Make the deferred a promise
17774 promise.promise( deferred );
17775
17776 // Call given func if any
17777 if ( func ) {
17778 func.call( deferred, deferred );
17779 }
17780
17781 // All done!
17782 return deferred;
17783 },
17784
17785 // Deferred helper
17786 when: function( singleValue ) {
17787 var
17788
17789 // count of uncompleted subordinates
17790 remaining = arguments.length,
17791
17792 // count of unprocessed arguments
17793 i = remaining,
17794
17795 // subordinate fulfillment data
17796 resolveContexts = Array( i ),
17797 resolveValues = slice.call( arguments ),
17798
17799 // the master Deferred
17800 master = jQuery.Deferred(),
17801
17802 // subordinate callback factory
17803 updateFunc = function( i ) {
17804 return function( value ) {
17805 resolveContexts[ i ] = this;
17806 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
17807 if ( !( --remaining ) ) {
17808 master.resolveWith( resolveContexts, resolveValues );
17809 }
17810 };
17811 };
17812
17813 // Single- and empty arguments are adopted like Promise.resolve
17814 if ( remaining <= 1 ) {
17815 adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
17816 !remaining );
17817
17818 // Use .then() to unwrap secondary thenables (cf. gh-3000)
17819 if ( master.state() === "pending" ||
17820 jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
17821
17822 return master.then();
17823 }
17824 }
17825
17826 // Multiple arguments are aggregated like Promise.all array elements
17827 while ( i-- ) {
17828 adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
17829 }
17830
17831 return master.promise();
17832 }
17833 } );
17834
17835
17836 // These usually indicate a programmer mistake during development,
17837 // warn about them ASAP rather than swallowing them by default.
17838 var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
17839
17840 jQuery.Deferred.exceptionHook = function( error, stack ) {
17841
17842 // Support: IE 8 - 9 only
17843 // Console exists when dev tools are open, which can happen at any time
17844 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
17845 window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
17846 }
17847 };
17848
17849
17850
17851
17852 jQuery.readyException = function( error ) {
17853 window.setTimeout( function() {
17854 throw error;
17855 } );
17856 };
17857
17858
17859
17860
17861 // The deferred used on DOM ready
17862 var readyList = jQuery.Deferred();
17863
17864 jQuery.fn.ready = function( fn ) {
17865
17866 readyList
17867 .then( fn )
17868
17869 // Wrap jQuery.readyException in a function so that the lookup
17870 // happens at the time of error handling instead of callback
17871 // registration.
17872 .catch( function( error ) {
17873 jQuery.readyException( error );
17874 } );
17875
17876 return this;
17877 };
17878
17879 jQuery.extend( {
17880
17881 // Is the DOM ready to be used? Set to true once it occurs.
17882 isReady: false,
17883
17884 // A counter to track how many items to wait for before
17885 // the ready event fires. See #6781
17886 readyWait: 1,
17887
17888 // Handle when the DOM is ready
17889 ready: function( wait ) {
17890
17891 // Abort if there are pending holds or we're already ready
17892 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
17893 return;
17894 }
17895
17896 // Remember that the DOM is ready
17897 jQuery.isReady = true;
17898
17899 // If a normal DOM Ready event fired, decrement, and wait if need be
17900 if ( wait !== true && --jQuery.readyWait > 0 ) {
17901 return;
17902 }
17903
17904 // If there are functions bound, to execute
17905 readyList.resolveWith( document, [ jQuery ] );
17906 }
17907 } );
17908
17909 jQuery.ready.then = readyList.then;
17910
17911 // The ready event handler and self cleanup method
17912 function completed() {
17913 document.removeEventListener( "DOMContentLoaded", completed );
17914 window.removeEventListener( "load", completed );
17915 jQuery.ready();
17916 }
17917
17918 // Catch cases where $(document).ready() is called
17919 // after the browser event has already occurred.
17920 // Support: IE <=9 - 10 only
17921 // Older IE sometimes signals "interactive" too soon
17922 if ( document.readyState === "complete" ||
17923 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
17924
17925 // Handle it asynchronously to allow scripts the opportunity to delay ready
17926 window.setTimeout( jQuery.ready );
17927
17928 } else {
17929
17930 // Use the handy event callback
17931 document.addEventListener( "DOMContentLoaded", completed );
17932
17933 // A fallback to window.onload, that will always work
17934 window.addEventListener( "load", completed );
17935 }
17936
17937
17938
17939
17940 // Multifunctional method to get and set values of a collection
17941 // The value/s can optionally be executed if it's a function
17942 var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
17943 var i = 0,
17944 len = elems.length,
17945 bulk = key == null;
17946
17947 // Sets many values
17948 if ( jQuery.type( key ) === "object" ) {
17949 chainable = true;
17950 for ( i in key ) {
17951 access( elems, fn, i, key[ i ], true, emptyGet, raw );
17952 }
17953
17954 // Sets one value
17955 } else if ( value !== undefined ) {
17956 chainable = true;
17957
17958 if ( !jQuery.isFunction( value ) ) {
17959 raw = true;
17960 }
17961
17962 if ( bulk ) {
17963
17964 // Bulk operations run against the entire set
17965 if ( raw ) {
17966 fn.call( elems, value );
17967 fn = null;
17968
17969 // ...except when executing function values
17970 } else {
17971 bulk = fn;
17972 fn = function( elem, key, value ) {
17973 return bulk.call( jQuery( elem ), value );
17974 };
17975 }
17976 }
17977
17978 if ( fn ) {
17979 for ( ; i < len; i++ ) {
17980 fn(
17981 elems[ i ], key, raw ?
17982 value :
17983 value.call( elems[ i ], i, fn( elems[ i ], key ) )
17984 );
17985 }
17986 }
17987 }
17988
17989 if ( chainable ) {
17990 return elems;
17991 }
17992
17993 // Gets
17994 if ( bulk ) {
17995 return fn.call( elems );
17996 }
17997
17998 return len ? fn( elems[ 0 ], key ) : emptyGet;
17999 };
18000 var acceptData = function( owner ) {
18001
18002 // Accepts only:
18003 // - Node
18004 // - Node.ELEMENT_NODE
18005 // - Node.DOCUMENT_NODE
18006 // - Object
18007 // - Any
18008 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
18009 };
18010
18011
18012
18013
18014 function Data() {
18015 this.expando = jQuery.expando + Data.uid++;
18016 }
18017
18018 Data.uid = 1;
18019
18020 Data.prototype = {
18021
18022 cache: function( owner ) {
18023
18024 // Check if the owner object already has a cache
18025 var value = owner[ this.expando ];
18026
18027 // If not, create one
18028 if ( !value ) {
18029 value = {};
18030
18031 // We can accept data for non-element nodes in modern browsers,
18032 // but we should not, see #8335.
18033 // Always return an empty object.
18034 if ( acceptData( owner ) ) {
18035
18036 // If it is a node unlikely to be stringify-ed or looped over
18037 // use plain assignment
18038 if ( owner.nodeType ) {
18039 owner[ this.expando ] = value;
18040
18041 // Otherwise secure it in a non-enumerable property
18042 // configurable must be true to allow the property to be
18043 // deleted when data is removed
18044 } else {
18045 Object.defineProperty( owner, this.expando, {
18046 value: value,
18047 configurable: true
18048 } );
18049 }
18050 }
18051 }
18052
18053 return value;
18054 },
18055 set: function( owner, data, value ) {
18056 var prop,
18057 cache = this.cache( owner );
18058
18059 // Handle: [ owner, key, value ] args
18060 // Always use camelCase key (gh-2257)
18061 if ( typeof data === "string" ) {
18062 cache[ jQuery.camelCase( data ) ] = value;
18063
18064 // Handle: [ owner, { properties } ] args
18065 } else {
18066
18067 // Copy the properties one-by-one to the cache object
18068 for ( prop in data ) {
18069 cache[ jQuery.camelCase( prop ) ] = data[ prop ];
18070 }
18071 }
18072 return cache;
18073 },
18074 get: function( owner, key ) {
18075 return key === undefined ?
18076 this.cache( owner ) :
18077
18078 // Always use camelCase key (gh-2257)
18079 owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
18080 },
18081 access: function( owner, key, value ) {
18082
18083 // In cases where either:
18084 //
18085 // 1. No key was specified
18086 // 2. A string key was specified, but no value provided
18087 //
18088 // Take the "read" path and allow the get method to determine
18089 // which value to return, respectively either:
18090 //
18091 // 1. The entire cache object
18092 // 2. The data stored at the key
18093 //
18094 if ( key === undefined ||
18095 ( ( key && typeof key === "string" ) && value === undefined ) ) {
18096
18097 return this.get( owner, key );
18098 }
18099
18100 // When the key is not a string, or both a key and value
18101 // are specified, set or extend (existing objects) with either:
18102 //
18103 // 1. An object of properties
18104 // 2. A key and value
18105 //
18106 this.set( owner, key, value );
18107
18108 // Since the "set" path can have two possible entry points
18109 // return the expected data based on which path was taken[*]
18110 return value !== undefined ? value : key;
18111 },
18112 remove: function( owner, key ) {
18113 var i,
18114 cache = owner[ this.expando ];
18115
18116 if ( cache === undefined ) {
18117 return;
18118 }
18119
18120 if ( key !== undefined ) {
18121
18122 // Support array or space separated string of keys
18123 if ( Array.isArray( key ) ) {
18124
18125 // If key is an array of keys...
18126 // We always set camelCase keys, so remove that.
18127 key = key.map( jQuery.camelCase );
18128 } else {
18129 key = jQuery.camelCase( key );
18130
18131 // If a key with the spaces exists, use it.
18132 // Otherwise, create an array by matching non-whitespace
18133 key = key in cache ?
18134 [ key ] :
18135 ( key.match( rnothtmlwhite ) || [] );
18136 }
18137
18138 i = key.length;
18139
18140 while ( i-- ) {
18141 delete cache[ key[ i ] ];
18142 }
18143 }
18144
18145 // Remove the expando if there's no more data
18146 if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
18147
18148 // Support: Chrome <=35 - 45
18149 // Webkit & Blink performance suffers when deleting properties
18150 // from DOM nodes, so set to undefined instead
18151 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
18152 if ( owner.nodeType ) {
18153 owner[ this.expando ] = undefined;
18154 } else {
18155 delete owner[ this.expando ];
18156 }
18157 }
18158 },
18159 hasData: function( owner ) {
18160 var cache = owner[ this.expando ];
18161 return cache !== undefined && !jQuery.isEmptyObject( cache );
18162 }
18163 };
18164 var dataPriv = new Data();
18165
18166 var dataUser = new Data();
18167
18168
18169
18170 // Implementation Summary
18171 //
18172 // 1. Enforce API surface and semantic compatibility with 1.9.x branch
18173 // 2. Improve the module's maintainability by reducing the storage
18174 // paths to a single mechanism.
18175 // 3. Use the same single mechanism to support "private" and "user" data.
18176 // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
18177 // 5. Avoid exposing implementation details on user objects (eg. expando properties)
18178 // 6. Provide a clear path for implementation upgrade to WeakMap in 2014
18179
18180 var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
18181 rmultiDash = /[A-Z]/g;
18182
18183 function getData( data ) {
18184 if ( data === "true" ) {
18185 return true;
18186 }
18187
18188 if ( data === "false" ) {
18189 return false;
18190 }
18191
18192 if ( data === "null" ) {
18193 return null;
18194 }
18195
18196 // Only convert to a number if it doesn't change the string
18197 if ( data === +data + "" ) {
18198 return +data;
18199 }
18200
18201 if ( rbrace.test( data ) ) {
18202 return JSON.parse( data );
18203 }
18204
18205 return data;
18206 }
18207
18208 function dataAttr( elem, key, data ) {
18209 var name;
18210
18211 // If nothing was found internally, try to fetch any
18212 // data from the HTML5 data-* attribute
18213 if ( data === undefined && elem.nodeType === 1 ) {
18214 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
18215 data = elem.getAttribute( name );
18216
18217 if ( typeof data === "string" ) {
18218 try {
18219 data = getData( data );
18220 } catch ( e ) {}
18221
18222 // Make sure we set the data so it isn't changed later
18223 dataUser.set( elem, key, data );
18224 } else {
18225 data = undefined;
18226 }
18227 }
18228 return data;
18229 }
18230
18231 jQuery.extend( {
18232 hasData: function( elem ) {
18233 return dataUser.hasData( elem ) || dataPriv.hasData( elem );
18234 },
18235
18236 data: function( elem, name, data ) {
18237 return dataUser.access( elem, name, data );
18238 },
18239
18240 removeData: function( elem, name ) {
18241 dataUser.remove( elem, name );
18242 },
18243
18244 // TODO: Now that all calls to _data and _removeData have been replaced
18245 // with direct calls to dataPriv methods, these can be deprecated.
18246 _data: function( elem, name, data ) {
18247 return dataPriv.access( elem, name, data );
18248 },
18249
18250 _removeData: function( elem, name ) {
18251 dataPriv.remove( elem, name );
18252 }
18253 } );
18254
18255 jQuery.fn.extend( {
18256 data: function( key, value ) {
18257 var i, name, data,
18258 elem = this[ 0 ],
18259 attrs = elem && elem.attributes;
18260
18261 // Gets all values
18262 if ( key === undefined ) {
18263 if ( this.length ) {
18264 data = dataUser.get( elem );
18265
18266 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
18267 i = attrs.length;
18268 while ( i-- ) {
18269
18270 // Support: IE 11 only
18271 // The attrs elements can be null (#14894)
18272 if ( attrs[ i ] ) {
18273 name = attrs[ i ].name;
18274 if ( name.indexOf( "data-" ) === 0 ) {
18275 name = jQuery.camelCase( name.slice( 5 ) );
18276 dataAttr( elem, name, data[ name ] );
18277 }
18278 }
18279 }
18280 dataPriv.set( elem, "hasDataAttrs", true );
18281 }
18282 }
18283
18284 return data;
18285 }
18286
18287 // Sets multiple values
18288 if ( typeof key === "object" ) {
18289 return this.each( function() {
18290 dataUser.set( this, key );
18291 } );
18292 }
18293
18294 return access( this, function( value ) {
18295 var data;
18296
18297 // The calling jQuery object (element matches) is not empty
18298 // (and therefore has an element appears at this[ 0 ]) and the
18299 // `value` parameter was not undefined. An empty jQuery object
18300 // will result in `undefined` for elem = this[ 0 ] which will
18301 // throw an exception if an attempt to read a data cache is made.
18302 if ( elem && value === undefined ) {
18303
18304 // Attempt to get data from the cache
18305 // The key will always be camelCased in Data
18306 data = dataUser.get( elem, key );
18307 if ( data !== undefined ) {
18308 return data;
18309 }
18310
18311 // Attempt to "discover" the data in
18312 // HTML5 custom data-* attrs
18313 data = dataAttr( elem, key );
18314 if ( data !== undefined ) {
18315 return data;
18316 }
18317
18318 // We tried really hard, but the data doesn't exist.
18319 return;
18320 }
18321
18322 // Set the data...
18323 this.each( function() {
18324
18325 // We always store the camelCased key
18326 dataUser.set( this, key, value );
18327 } );
18328 }, null, value, arguments.length > 1, null, true );
18329 },
18330
18331 removeData: function( key ) {
18332 return this.each( function() {
18333 dataUser.remove( this, key );
18334 } );
18335 }
18336 } );
18337
18338
18339 jQuery.extend( {
18340 queue: function( elem, type, data ) {
18341 var queue;
18342
18343 if ( elem ) {
18344 type = ( type || "fx" ) + "queue";
18345 queue = dataPriv.get( elem, type );
18346
18347 // Speed up dequeue by getting out quickly if this is just a lookup
18348 if ( data ) {
18349 if ( !queue || Array.isArray( data ) ) {
18350 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
18351 } else {
18352 queue.push( data );
18353 }
18354 }
18355 return queue || [];
18356 }
18357 },
18358
18359 dequeue: function( elem, type ) {
18360 type = type || "fx";
18361
18362 var queue = jQuery.queue( elem, type ),
18363 startLength = queue.length,
18364 fn = queue.shift(),
18365 hooks = jQuery._queueHooks( elem, type ),
18366 next = function() {
18367 jQuery.dequeue( elem, type );
18368 };
18369
18370 // If the fx queue is dequeued, always remove the progress sentinel
18371 if ( fn === "inprogress" ) {
18372 fn = queue.shift();
18373 startLength--;
18374 }
18375
18376 if ( fn ) {
18377
18378 // Add a progress sentinel to prevent the fx queue from being
18379 // automatically dequeued
18380 if ( type === "fx" ) {
18381 queue.unshift( "inprogress" );
18382 }
18383
18384 // Clear up the last queue stop function
18385 delete hooks.stop;
18386 fn.call( elem, next, hooks );
18387 }
18388
18389 if ( !startLength && hooks ) {
18390 hooks.empty.fire();
18391 }
18392 },
18393
18394 // Not public - generate a queueHooks object, or return the current one
18395 _queueHooks: function( elem, type ) {
18396 var key = type + "queueHooks";
18397 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
18398 empty: jQuery.Callbacks( "once memory" ).add( function() {
18399 dataPriv.remove( elem, [ type + "queue", key ] );
18400 } )
18401 } );
18402 }
18403 } );
18404
18405 jQuery.fn.extend( {
18406 queue: function( type, data ) {
18407 var setter = 2;
18408
18409 if ( typeof type !== "string" ) {
18410 data = type;
18411 type = "fx";
18412 setter--;
18413 }
18414
18415 if ( arguments.length < setter ) {
18416 return jQuery.queue( this[ 0 ], type );
18417 }
18418
18419 return data === undefined ?
18420 this :
18421 this.each( function() {
18422 var queue = jQuery.queue( this, type, data );
18423
18424 // Ensure a hooks for this queue
18425 jQuery._queueHooks( this, type );
18426
18427 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
18428 jQuery.dequeue( this, type );
18429 }
18430 } );
18431 },
18432 dequeue: function( type ) {
18433 return this.each( function() {
18434 jQuery.dequeue( this, type );
18435 } );
18436 },
18437 clearQueue: function( type ) {
18438 return this.queue( type || "fx", [] );
18439 },
18440
18441 // Get a promise resolved when queues of a certain type
18442 // are emptied (fx is the type by default)
18443 promise: function( type, obj ) {
18444 var tmp,
18445 count = 1,
18446 defer = jQuery.Deferred(),
18447 elements = this,
18448 i = this.length,
18449 resolve = function() {
18450 if ( !( --count ) ) {
18451 defer.resolveWith( elements, [ elements ] );
18452 }
18453 };
18454
18455 if ( typeof type !== "string" ) {
18456 obj = type;
18457 type = undefined;
18458 }
18459 type = type || "fx";
18460
18461 while ( i-- ) {
18462 tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
18463 if ( tmp && tmp.empty ) {
18464 count++;
18465 tmp.empty.add( resolve );
18466 }
18467 }
18468 resolve();
18469 return defer.promise( obj );
18470 }
18471 } );
18472 var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
18473
18474 var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
18475
18476
18477 var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
18478
18479 var isHiddenWithinTree = function( elem, el ) {
18480
18481 // isHiddenWithinTree might be called from jQuery#filter function;
18482 // in that case, element will be second argument
18483 elem = el || elem;
18484
18485 // Inline style trumps all
18486 return elem.style.display === "none" ||
18487 elem.style.display === "" &&
18488
18489 // Otherwise, check computed style
18490 // Support: Firefox <=43 - 45
18491 // Disconnected elements can have computed display: none, so first confirm that elem is
18492 // in the document.
18493 jQuery.contains( elem.ownerDocument, elem ) &&
18494
18495 jQuery.css( elem, "display" ) === "none";
18496 };
18497
18498 var swap = function( elem, options, callback, args ) {
18499 var ret, name,
18500 old = {};
18501
18502 // Remember the old values, and insert the new ones
18503 for ( name in options ) {
18504 old[ name ] = elem.style[ name ];
18505 elem.style[ name ] = options[ name ];
18506 }
18507
18508 ret = callback.apply( elem, args || [] );
18509
18510 // Revert the old values
18511 for ( name in options ) {
18512 elem.style[ name ] = old[ name ];
18513 }
18514
18515 return ret;
18516 };
18517
18518
18519
18520
18521 function adjustCSS( elem, prop, valueParts, tween ) {
18522 var adjusted,
18523 scale = 1,
18524 maxIterations = 20,
18525 currentValue = tween ?
18526 function() {
18527 return tween.cur();
18528 } :
18529 function() {
18530 return jQuery.css( elem, prop, "" );
18531 },
18532 initial = currentValue(),
18533 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
18534
18535 // Starting value computation is required for potential unit mismatches
18536 initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
18537 rcssNum.exec( jQuery.css( elem, prop ) );
18538
18539 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
18540
18541 // Trust units reported by jQuery.css
18542 unit = unit || initialInUnit[ 3 ];
18543
18544 // Make sure we update the tween properties later on
18545 valueParts = valueParts || [];
18546
18547 // Iteratively approximate from a nonzero starting point
18548 initialInUnit = +initial || 1;
18549
18550 do {
18551
18552 // If previous iteration zeroed out, double until we get *something*.
18553 // Use string for doubling so we don't accidentally see scale as unchanged below
18554 scale = scale || ".5";
18555
18556 // Adjust and apply
18557 initialInUnit = initialInUnit / scale;
18558 jQuery.style( elem, prop, initialInUnit + unit );
18559
18560 // Update scale, tolerating zero or NaN from tween.cur()
18561 // Break the loop if scale is unchanged or perfect, or if we've just had enough.
18562 } while (
18563 scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
18564 );
18565 }
18566
18567 if ( valueParts ) {
18568 initialInUnit = +initialInUnit || +initial || 0;
18569
18570 // Apply relative offset (+=/-=) if specified
18571 adjusted = valueParts[ 1 ] ?
18572 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
18573 +valueParts[ 2 ];
18574 if ( tween ) {
18575 tween.unit = unit;
18576 tween.start = initialInUnit;
18577 tween.end = adjusted;
18578 }
18579 }
18580 return adjusted;
18581 }
18582
18583
18584 var defaultDisplayMap = {};
18585
18586 function getDefaultDisplay( elem ) {
18587 var temp,
18588 doc = elem.ownerDocument,
18589 nodeName = elem.nodeName,
18590 display = defaultDisplayMap[ nodeName ];
18591
18592 if ( display ) {
18593 return display;
18594 }
18595
18596 temp = doc.body.appendChild( doc.createElement( nodeName ) );
18597 display = jQuery.css( temp, "display" );
18598
18599 temp.parentNode.removeChild( temp );
18600
18601 if ( display === "none" ) {
18602 display = "block";
18603 }
18604 defaultDisplayMap[ nodeName ] = display;
18605
18606 return display;
18607 }
18608
18609 function showHide( elements, show ) {
18610 var display, elem,
18611 values = [],
18612 index = 0,
18613 length = elements.length;
18614
18615 // Determine new display value for elements that need to change
18616 for ( ; index < length; index++ ) {
18617 elem = elements[ index ];
18618 if ( !elem.style ) {
18619 continue;
18620 }
18621
18622 display = elem.style.display;
18623 if ( show ) {
18624
18625 // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
18626 // check is required in this first loop unless we have a nonempty display value (either
18627 // inline or about-to-be-restored)
18628 if ( display === "none" ) {
18629 values[ index ] = dataPriv.get( elem, "display" ) || null;
18630 if ( !values[ index ] ) {
18631 elem.style.display = "";
18632 }
18633 }
18634 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
18635 values[ index ] = getDefaultDisplay( elem );
18636 }
18637 } else {
18638 if ( display !== "none" ) {
18639 values[ index ] = "none";
18640
18641 // Remember what we're overwriting
18642 dataPriv.set( elem, "display", display );
18643 }
18644 }
18645 }
18646
18647 // Set the display of the elements in a second loop to avoid constant reflow
18648 for ( index = 0; index < length; index++ ) {
18649 if ( values[ index ] != null ) {
18650 elements[ index ].style.display = values[ index ];
18651 }
18652 }
18653
18654 return elements;
18655 }
18656
18657 jQuery.fn.extend( {
18658 show: function() {
18659 return showHide( this, true );
18660 },
18661 hide: function() {
18662 return showHide( this );
18663 },
18664 toggle: function( state ) {
18665 if ( typeof state === "boolean" ) {
18666 return state ? this.show() : this.hide();
18667 }
18668
18669 return this.each( function() {
18670 if ( isHiddenWithinTree( this ) ) {
18671 jQuery( this ).show();
18672 } else {
18673 jQuery( this ).hide();
18674 }
18675 } );
18676 }
18677 } );
18678 var rcheckableType = ( /^(?:checkbox|radio)$/i );
18679
18680 var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
18681
18682 var rscriptType = ( /^$|\/(?:java|ecma)script/i );
18683
18684
18685
18686 // We have to close these tags to support XHTML (#13200)
18687 var wrapMap = {
18688
18689 // Support: IE <=9 only
18690 option: [ 1, "<select multiple='multiple'>", "</select>" ],
18691
18692 // XHTML parsers do not magically insert elements in the
18693 // same way that tag soup parsers do. So we cannot shorten
18694 // this by omitting <tbody> or other required elements.
18695 thead: [ 1, "<table>", "</table>" ],
18696 col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
18697 tr: [ 2, "<table><tbody>", "</tbody></table>" ],
18698 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
18699
18700 _default: [ 0, "", "" ]
18701 };
18702
18703 // Support: IE <=9 only
18704 wrapMap.optgroup = wrapMap.option;
18705
18706 wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
18707 wrapMap.th = wrapMap.td;
18708
18709
18710 function getAll( context, tag ) {
18711
18712 // Support: IE <=9 - 11 only
18713 // Use typeof to avoid zero-argument method invocation on host objects (#15151)
18714 var ret;
18715
18716 if ( typeof context.getElementsByTagName !== "undefined" ) {
18717 ret = context.getElementsByTagName( tag || "*" );
18718
18719 } else if ( typeof context.querySelectorAll !== "undefined" ) {
18720 ret = context.querySelectorAll( tag || "*" );
18721
18722 } else {
18723 ret = [];
18724 }
18725
18726 if ( tag === undefined || tag && nodeName( context, tag ) ) {
18727 return jQuery.merge( [ context ], ret );
18728 }
18729
18730 return ret;
18731 }
18732
18733
18734 // Mark scripts as having already been evaluated
18735 function setGlobalEval( elems, refElements ) {
18736 var i = 0,
18737 l = elems.length;
18738
18739 for ( ; i < l; i++ ) {
18740 dataPriv.set(
18741 elems[ i ],
18742 "globalEval",
18743 !refElements || dataPriv.get( refElements[ i ], "globalEval" )
18744 );
18745 }
18746 }
18747
18748
18749 var rhtml = /<|&#?\w+;/;
18750
18751 function buildFragment( elems, context, scripts, selection, ignored ) {
18752 var elem, tmp, tag, wrap, contains, j,
18753 fragment = context.createDocumentFragment(),
18754 nodes = [],
18755 i = 0,
18756 l = elems.length;
18757
18758 for ( ; i < l; i++ ) {
18759 elem = elems[ i ];
18760
18761 if ( elem || elem === 0 ) {
18762
18763 // Add nodes directly
18764 if ( jQuery.type( elem ) === "object" ) {
18765
18766 // Support: Android <=4.0 only, PhantomJS 1 only
18767 // push.apply(_, arraylike) throws on ancient WebKit
18768 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
18769
18770 // Convert non-html into a text node
18771 } else if ( !rhtml.test( elem ) ) {
18772 nodes.push( context.createTextNode( elem ) );
18773
18774 // Convert html into DOM nodes
18775 } else {
18776 tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
18777
18778 // Deserialize a standard representation
18779 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
18780 wrap = wrapMap[ tag ] || wrapMap._default;
18781 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
18782
18783 // Descend through wrappers to the right content
18784 j = wrap[ 0 ];
18785 while ( j-- ) {
18786 tmp = tmp.lastChild;
18787 }
18788
18789 // Support: Android <=4.0 only, PhantomJS 1 only
18790 // push.apply(_, arraylike) throws on ancient WebKit
18791 jQuery.merge( nodes, tmp.childNodes );
18792
18793 // Remember the top-level container
18794 tmp = fragment.firstChild;
18795
18796 // Ensure the created nodes are orphaned (#12392)
18797 tmp.textContent = "";
18798 }
18799 }
18800 }
18801
18802 // Remove wrapper from fragment
18803 fragment.textContent = "";
18804
18805 i = 0;
18806 while ( ( elem = nodes[ i++ ] ) ) {
18807
18808 // Skip elements already in the context collection (trac-4087)
18809 if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
18810 if ( ignored ) {
18811 ignored.push( elem );
18812 }
18813 continue;
18814 }
18815
18816 contains = jQuery.contains( elem.ownerDocument, elem );
18817
18818 // Append to fragment
18819 tmp = getAll( fragment.appendChild( elem ), "script" );
18820
18821 // Preserve script evaluation history
18822 if ( contains ) {
18823 setGlobalEval( tmp );
18824 }
18825
18826 // Capture executables
18827 if ( scripts ) {
18828 j = 0;
18829 while ( ( elem = tmp[ j++ ] ) ) {
18830 if ( rscriptType.test( elem.type || "" ) ) {
18831 scripts.push( elem );
18832 }
18833 }
18834 }
18835 }
18836
18837 return fragment;
18838 }
18839
18840
18841 ( function() {
18842 var fragment = document.createDocumentFragment(),
18843 div = fragment.appendChild( document.createElement( "div" ) ),
18844 input = document.createElement( "input" );
18845
18846 // Support: Android 4.0 - 4.3 only
18847 // Check state lost if the name is set (#11217)
18848 // Support: Windows Web Apps (WWA)
18849 // `name` and `type` must use .setAttribute for WWA (#14901)
18850 input.setAttribute( "type", "radio" );
18851 input.setAttribute( "checked", "checked" );
18852 input.setAttribute( "name", "t" );
18853
18854 div.appendChild( input );
18855
18856 // Support: Android <=4.1 only
18857 // Older WebKit doesn't clone checked state correctly in fragments
18858 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
18859
18860 // Support: IE <=11 only
18861 // Make sure textarea (and checkbox) defaultValue is properly cloned
18862 div.innerHTML = "<textarea>x</textarea>";
18863 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
18864 } )();
18865 var documentElement = document.documentElement;
18866
18867
18868
18869 var
18870 rkeyEvent = /^key/,
18871 rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
18872 rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
18873
18874 function returnTrue() {
18875 return true;
18876 }
18877
18878 function returnFalse() {
18879 return false;
18880 }
18881
18882 // Support: IE <=9 only
18883 // See #13393 for more info
18884 function safeActiveElement() {
18885 try {
18886 return document.activeElement;
18887 } catch ( err ) { }
18888 }
18889
18890 function on( elem, types, selector, data, fn, one ) {
18891 var origFn, type;
18892
18893 // Types can be a map of types/handlers
18894 if ( typeof types === "object" ) {
18895
18896 // ( types-Object, selector, data )
18897 if ( typeof selector !== "string" ) {
18898
18899 // ( types-Object, data )
18900 data = data || selector;
18901 selector = undefined;
18902 }
18903 for ( type in types ) {
18904 on( elem, type, selector, data, types[ type ], one );
18905 }
18906 return elem;
18907 }
18908
18909 if ( data == null && fn == null ) {
18910
18911 // ( types, fn )
18912 fn = selector;
18913 data = selector = undefined;
18914 } else if ( fn == null ) {
18915 if ( typeof selector === "string" ) {
18916
18917 // ( types, selector, fn )
18918 fn = data;
18919 data = undefined;
18920 } else {
18921
18922 // ( types, data, fn )
18923 fn = data;
18924 data = selector;
18925 selector = undefined;
18926 }
18927 }
18928 if ( fn === false ) {
18929 fn = returnFalse;
18930 } else if ( !fn ) {
18931 return elem;
18932 }
18933
18934 if ( one === 1 ) {
18935 origFn = fn;
18936 fn = function( event ) {
18937
18938 // Can use an empty set, since event contains the info
18939 jQuery().off( event );
18940 return origFn.apply( this, arguments );
18941 };
18942
18943 // Use same guid so caller can remove using origFn
18944 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
18945 }
18946 return elem.each( function() {
18947 jQuery.event.add( this, types, fn, data, selector );
18948 } );
18949 }
18950
18951 /*
18952 * Helper functions for managing events -- not part of the public interface.
18953 * Props to Dean Edwards' addEvent library for many of the ideas.
18954 */
18955 jQuery.event = {
18956
18957 global: {},
18958
18959 add: function( elem, types, handler, data, selector ) {
18960
18961 var handleObjIn, eventHandle, tmp,
18962 events, t, handleObj,
18963 special, handlers, type, namespaces, origType,
18964 elemData = dataPriv.get( elem );
18965
18966 // Don't attach events to noData or text/comment nodes (but allow plain objects)
18967 if ( !elemData ) {
18968 return;
18969 }
18970
18971 // Caller can pass in an object of custom data in lieu of the handler
18972 if ( handler.handler ) {
18973 handleObjIn = handler;
18974 handler = handleObjIn.handler;
18975 selector = handleObjIn.selector;
18976 }
18977
18978 // Ensure that invalid selectors throw exceptions at attach time
18979 // Evaluate against documentElement in case elem is a non-element node (e.g., document)
18980 if ( selector ) {
18981 jQuery.find.matchesSelector( documentElement, selector );
18982 }
18983
18984 // Make sure that the handler has a unique ID, used to find/remove it later
18985 if ( !handler.guid ) {
18986 handler.guid = jQuery.guid++;
18987 }
18988
18989 // Init the element's event structure and main handler, if this is the first
18990 if ( !( events = elemData.events ) ) {
18991 events = elemData.events = {};
18992 }
18993 if ( !( eventHandle = elemData.handle ) ) {
18994 eventHandle = elemData.handle = function( e ) {
18995
18996 // Discard the second event of a jQuery.event.trigger() and
18997 // when an event is called after a page has unloaded
18998 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
18999 jQuery.event.dispatch.apply( elem, arguments ) : undefined;
19000 };
19001 }
19002
19003 // Handle multiple events separated by a space
19004 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
19005 t = types.length;
19006 while ( t-- ) {
19007 tmp = rtypenamespace.exec( types[ t ] ) || [];
19008 type = origType = tmp[ 1 ];
19009 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
19010
19011 // There *must* be a type, no attaching namespace-only handlers
19012 if ( !type ) {
19013 continue;
19014 }
19015
19016 // If event changes its type, use the special event handlers for the changed type
19017 special = jQuery.event.special[ type ] || {};
19018
19019 // If selector defined, determine special event api type, otherwise given type
19020 type = ( selector ? special.delegateType : special.bindType ) || type;
19021
19022 // Update special based on newly reset type
19023 special = jQuery.event.special[ type ] || {};
19024
19025 // handleObj is passed to all event handlers
19026 handleObj = jQuery.extend( {
19027 type: type,
19028 origType: origType,
19029 data: data,
19030 handler: handler,
19031 guid: handler.guid,
19032 selector: selector,
19033 needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
19034 namespace: namespaces.join( "." )
19035 }, handleObjIn );
19036
19037 // Init the event handler queue if we're the first
19038 if ( !( handlers = events[ type ] ) ) {
19039 handlers = events[ type ] = [];
19040 handlers.delegateCount = 0;
19041
19042 // Only use addEventListener if the special events handler returns false
19043 if ( !special.setup ||
19044 special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
19045
19046 if ( elem.addEventListener ) {
19047 elem.addEventListener( type, eventHandle );
19048 }
19049 }
19050 }
19051
19052 if ( special.add ) {
19053 special.add.call( elem, handleObj );
19054
19055 if ( !handleObj.handler.guid ) {
19056 handleObj.handler.guid = handler.guid;
19057 }
19058 }
19059
19060 // Add to the element's handler list, delegates in front
19061 if ( selector ) {
19062 handlers.splice( handlers.delegateCount++, 0, handleObj );
19063 } else {
19064 handlers.push( handleObj );
19065 }
19066
19067 // Keep track of which events have ever been used, for event optimization
19068 jQuery.event.global[ type ] = true;
19069 }
19070
19071 },
19072
19073 // Detach an event or set of events from an element
19074 remove: function( elem, types, handler, selector, mappedTypes ) {
19075
19076 var j, origCount, tmp,
19077 events, t, handleObj,
19078 special, handlers, type, namespaces, origType,
19079 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
19080
19081 if ( !elemData || !( events = elemData.events ) ) {
19082 return;
19083 }
19084
19085 // Once for each type.namespace in types; type may be omitted
19086 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
19087 t = types.length;
19088 while ( t-- ) {
19089 tmp = rtypenamespace.exec( types[ t ] ) || [];
19090 type = origType = tmp[ 1 ];
19091 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
19092
19093 // Unbind all events (on this namespace, if provided) for the element
19094 if ( !type ) {
19095 for ( type in events ) {
19096 jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
19097 }
19098 continue;
19099 }
19100
19101 special = jQuery.event.special[ type ] || {};
19102 type = ( selector ? special.delegateType : special.bindType ) || type;
19103 handlers = events[ type ] || [];
19104 tmp = tmp[ 2 ] &&
19105 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
19106
19107 // Remove matching events
19108 origCount = j = handlers.length;
19109 while ( j-- ) {
19110 handleObj = handlers[ j ];
19111
19112 if ( ( mappedTypes || origType === handleObj.origType ) &&
19113 ( !handler || handler.guid === handleObj.guid ) &&
19114 ( !tmp || tmp.test( handleObj.namespace ) ) &&
19115 ( !selector || selector === handleObj.selector ||
19116 selector === "**" && handleObj.selector ) ) {
19117 handlers.splice( j, 1 );
19118
19119 if ( handleObj.selector ) {
19120 handlers.delegateCount--;
19121 }
19122 if ( special.remove ) {
19123 special.remove.call( elem, handleObj );
19124 }
19125 }
19126 }
19127
19128 // Remove generic event handler if we removed something and no more handlers exist
19129 // (avoids potential for endless recursion during removal of special event handlers)
19130 if ( origCount && !handlers.length ) {
19131 if ( !special.teardown ||
19132 special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
19133
19134 jQuery.removeEvent( elem, type, elemData.handle );
19135 }
19136
19137 delete events[ type ];
19138 }
19139 }
19140
19141 // Remove data and the expando if it's no longer used
19142 if ( jQuery.isEmptyObject( events ) ) {
19143 dataPriv.remove( elem, "handle events" );
19144 }
19145 },
19146
19147 dispatch: function( nativeEvent ) {
19148
19149 // Make a writable jQuery.Event from the native event object
19150 var event = jQuery.event.fix( nativeEvent );
19151
19152 var i, j, ret, matched, handleObj, handlerQueue,
19153 args = new Array( arguments.length ),
19154 handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
19155 special = jQuery.event.special[ event.type ] || {};
19156
19157 // Use the fix-ed jQuery.Event rather than the (read-only) native event
19158 args[ 0 ] = event;
19159
19160 for ( i = 1; i < arguments.length; i++ ) {
19161 args[ i ] = arguments[ i ];
19162 }
19163
19164 event.delegateTarget = this;
19165
19166 // Call the preDispatch hook for the mapped type, and let it bail if desired
19167 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
19168 return;
19169 }
19170
19171 // Determine handlers
19172 handlerQueue = jQuery.event.handlers.call( this, event, handlers );
19173
19174 // Run delegates first; they may want to stop propagation beneath us
19175 i = 0;
19176 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
19177 event.currentTarget = matched.elem;
19178
19179 j = 0;
19180 while ( ( handleObj = matched.handlers[ j++ ] ) &&
19181 !event.isImmediatePropagationStopped() ) {
19182
19183 // Triggered event must either 1) have no namespace, or 2) have namespace(s)
19184 // a subset or equal to those in the bound event (both can have no namespace).
19185 if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
19186
19187 event.handleObj = handleObj;
19188 event.data = handleObj.data;
19189
19190 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
19191 handleObj.handler ).apply( matched.elem, args );
19192
19193 if ( ret !== undefined ) {
19194 if ( ( event.result = ret ) === false ) {
19195 event.preventDefault();
19196 event.stopPropagation();
19197 }
19198 }
19199 }
19200 }
19201 }
19202
19203 // Call the postDispatch hook for the mapped type
19204 if ( special.postDispatch ) {
19205 special.postDispatch.call( this, event );
19206 }
19207
19208 return event.result;
19209 },
19210
19211 handlers: function( event, handlers ) {
19212 var i, handleObj, sel, matchedHandlers, matchedSelectors,
19213 handlerQueue = [],
19214 delegateCount = handlers.delegateCount,
19215 cur = event.target;
19216
19217 // Find delegate handlers
19218 if ( delegateCount &&
19219
19220 // Support: IE <=9
19221 // Black-hole SVG <use> instance trees (trac-13180)
19222 cur.nodeType &&
19223
19224 // Support: Firefox <=42
19225 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
19226 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
19227 // Support: IE 11 only
19228 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
19229 !( event.type === "click" && event.button >= 1 ) ) {
19230
19231 for ( ; cur !== this; cur = cur.parentNode || this ) {
19232
19233 // Don't check non-elements (#13208)
19234 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
19235 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
19236 matchedHandlers = [];
19237 matchedSelectors = {};
19238 for ( i = 0; i < delegateCount; i++ ) {
19239 handleObj = handlers[ i ];
19240
19241 // Don't conflict with Object.prototype properties (#13203)
19242 sel = handleObj.selector + " ";
19243
19244 if ( matchedSelectors[ sel ] === undefined ) {
19245 matchedSelectors[ sel ] = handleObj.needsContext ?
19246 jQuery( sel, this ).index( cur ) > -1 :
19247 jQuery.find( sel, this, null, [ cur ] ).length;
19248 }
19249 if ( matchedSelectors[ sel ] ) {
19250 matchedHandlers.push( handleObj );
19251 }
19252 }
19253 if ( matchedHandlers.length ) {
19254 handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
19255 }
19256 }
19257 }
19258 }
19259
19260 // Add the remaining (directly-bound) handlers
19261 cur = this;
19262 if ( delegateCount < handlers.length ) {
19263 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
19264 }
19265
19266 return handlerQueue;
19267 },
19268
19269 addProp: function( name, hook ) {
19270 Object.defineProperty( jQuery.Event.prototype, name, {
19271 enumerable: true,
19272 configurable: true,
19273
19274 get: jQuery.isFunction( hook ) ?
19275 function() {
19276 if ( this.originalEvent ) {
19277 return hook( this.originalEvent );
19278 }
19279 } :
19280 function() {
19281 if ( this.originalEvent ) {
19282 return this.originalEvent[ name ];
19283 }
19284 },
19285
19286 set: function( value ) {
19287 Object.defineProperty( this, name, {
19288 enumerable: true,
19289 configurable: true,
19290 writable: true,
19291 value: value
19292 } );
19293 }
19294 } );
19295 },
19296
19297 fix: function( originalEvent ) {
19298 return originalEvent[ jQuery.expando ] ?
19299 originalEvent :
19300 new jQuery.Event( originalEvent );
19301 },
19302
19303 special: {
19304 load: {
19305
19306 // Prevent triggered image.load events from bubbling to window.load
19307 noBubble: true
19308 },
19309 focus: {
19310
19311 // Fire native event if possible so blur/focus sequence is correct
19312 trigger: function() {
19313 if ( this !== safeActiveElement() && this.focus ) {
19314 this.focus();
19315 return false;
19316 }
19317 },
19318 delegateType: "focusin"
19319 },
19320 blur: {
19321 trigger: function() {
19322 if ( this === safeActiveElement() && this.blur ) {
19323 this.blur();
19324 return false;
19325 }
19326 },
19327 delegateType: "focusout"
19328 },
19329 click: {
19330
19331 // For checkbox, fire native event so checked state will be right
19332 trigger: function() {
19333 if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
19334 this.click();
19335 return false;
19336 }
19337 },
19338
19339 // For cross-browser consistency, don't fire native .click() on links
19340 _default: function( event ) {
19341 return nodeName( event.target, "a" );
19342 }
19343 },
19344
19345 beforeunload: {
19346 postDispatch: function( event ) {
19347
19348 // Support: Firefox 20+
19349 // Firefox doesn't alert if the returnValue field is not set.
19350 if ( event.result !== undefined && event.originalEvent ) {
19351 event.originalEvent.returnValue = event.result;
19352 }
19353 }
19354 }
19355 }
19356 };
19357
19358 jQuery.removeEvent = function( elem, type, handle ) {
19359
19360 // This "if" is needed for plain objects
19361 if ( elem.removeEventListener ) {
19362 elem.removeEventListener( type, handle );
19363 }
19364 };
19365
19366 jQuery.Event = function( src, props ) {
19367
19368 // Allow instantiation without the 'new' keyword
19369 if ( !( this instanceof jQuery.Event ) ) {
19370 return new jQuery.Event( src, props );
19371 }
19372
19373 // Event object
19374 if ( src && src.type ) {
19375 this.originalEvent = src;
19376 this.type = src.type;
19377
19378 // Events bubbling up the document may have been marked as prevented
19379 // by a handler lower down the tree; reflect the correct value.
19380 this.isDefaultPrevented = src.defaultPrevented ||
19381 src.defaultPrevented === undefined &&
19382
19383 // Support: Android <=2.3 only
19384 src.returnValue === false ?
19385 returnTrue :
19386 returnFalse;
19387
19388 // Create target properties
19389 // Support: Safari <=6 - 7 only
19390 // Target should not be a text node (#504, #13143)
19391 this.target = ( src.target && src.target.nodeType === 3 ) ?
19392 src.target.parentNode :
19393 src.target;
19394
19395 this.currentTarget = src.currentTarget;
19396 this.relatedTarget = src.relatedTarget;
19397
19398 // Event type
19399 } else {
19400 this.type = src;
19401 }
19402
19403 // Put explicitly provided properties onto the event object
19404 if ( props ) {
19405 jQuery.extend( this, props );
19406 }
19407
19408 // Create a timestamp if incoming event doesn't have one
19409 this.timeStamp = src && src.timeStamp || jQuery.now();
19410
19411 // Mark it as fixed
19412 this[ jQuery.expando ] = true;
19413 };
19414
19415 // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
19416 // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
19417 jQuery.Event.prototype = {
19418 constructor: jQuery.Event,
19419 isDefaultPrevented: returnFalse,
19420 isPropagationStopped: returnFalse,
19421 isImmediatePropagationStopped: returnFalse,
19422 isSimulated: false,
19423
19424 preventDefault: function() {
19425 var e = this.originalEvent;
19426
19427 this.isDefaultPrevented = returnTrue;
19428
19429 if ( e && !this.isSimulated ) {
19430 e.preventDefault();
19431 }
19432 },
19433 stopPropagation: function() {
19434 var e = this.originalEvent;
19435
19436 this.isPropagationStopped = returnTrue;
19437
19438 if ( e && !this.isSimulated ) {
19439 e.stopPropagation();
19440 }
19441 },
19442 stopImmediatePropagation: function() {
19443 var e = this.originalEvent;
19444
19445 this.isImmediatePropagationStopped = returnTrue;
19446
19447 if ( e && !this.isSimulated ) {
19448 e.stopImmediatePropagation();
19449 }
19450
19451 this.stopPropagation();
19452 }
19453 };
19454
19455 // Includes all common event props including KeyEvent and MouseEvent specific props
19456 jQuery.each( {
19457 altKey: true,
19458 bubbles: true,
19459 cancelable: true,
19460 changedTouches: true,
19461 ctrlKey: true,
19462 detail: true,
19463 eventPhase: true,
19464 metaKey: true,
19465 pageX: true,
19466 pageY: true,
19467 shiftKey: true,
19468 view: true,
19469 "char": true,
19470 charCode: true,
19471 key: true,
19472 keyCode: true,
19473 button: true,
19474 buttons: true,
19475 clientX: true,
19476 clientY: true,
19477 offsetX: true,
19478 offsetY: true,
19479 pointerId: true,
19480 pointerType: true,
19481 screenX: true,
19482 screenY: true,
19483 targetTouches: true,
19484 toElement: true,
19485 touches: true,
19486
19487 which: function( event ) {
19488 var button = event.button;
19489
19490 // Add which for key events
19491 if ( event.which == null && rkeyEvent.test( event.type ) ) {
19492 return event.charCode != null ? event.charCode : event.keyCode;
19493 }
19494
19495 // Add which for click: 1 === left; 2 === middle; 3 === right
19496 if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
19497 if ( button & 1 ) {
19498 return 1;
19499 }
19500
19501 if ( button & 2 ) {
19502 return 3;
19503 }
19504
19505 if ( button & 4 ) {
19506 return 2;
19507 }
19508
19509 return 0;
19510 }
19511
19512 return event.which;
19513 }
19514 }, jQuery.event.addProp );
19515
19516 // Create mouseenter/leave events using mouseover/out and event-time checks
19517 // so that event delegation works in jQuery.
19518 // Do the same for pointerenter/pointerleave and pointerover/pointerout
19519 //
19520 // Support: Safari 7 only
19521 // Safari sends mouseenter too often; see:
19522 // https://bugs.chromium.org/p/chromium/issues/detail?id=470258
19523 // for the description of the bug (it existed in older Chrome versions as well).
19524 jQuery.each( {
19525 mouseenter: "mouseover",
19526 mouseleave: "mouseout",
19527 pointerenter: "pointerover",
19528 pointerleave: "pointerout"
19529 }, function( orig, fix ) {
19530 jQuery.event.special[ orig ] = {
19531 delegateType: fix,
19532 bindType: fix,
19533
19534 handle: function( event ) {
19535 var ret,
19536 target = this,
19537 related = event.relatedTarget,
19538 handleObj = event.handleObj;
19539
19540 // For mouseenter/leave call the handler if related is outside the target.
19541 // NB: No relatedTarget if the mouse left/entered the browser window
19542 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
19543 event.type = handleObj.origType;
19544 ret = handleObj.handler.apply( this, arguments );
19545 event.type = fix;
19546 }
19547 return ret;
19548 }
19549 };
19550 } );
19551
19552 jQuery.fn.extend( {
19553
19554 on: function( types, selector, data, fn ) {
19555 return on( this, types, selector, data, fn );
19556 },
19557 one: function( types, selector, data, fn ) {
19558 return on( this, types, selector, data, fn, 1 );
19559 },
19560 off: function( types, selector, fn ) {
19561 var handleObj, type;
19562 if ( types && types.preventDefault && types.handleObj ) {
19563
19564 // ( event ) dispatched jQuery.Event
19565 handleObj = types.handleObj;
19566 jQuery( types.delegateTarget ).off(
19567 handleObj.namespace ?
19568 handleObj.origType + "." + handleObj.namespace :
19569 handleObj.origType,
19570 handleObj.selector,
19571 handleObj.handler
19572 );
19573 return this;
19574 }
19575 if ( typeof types === "object" ) {
19576
19577 // ( types-object [, selector] )
19578 for ( type in types ) {
19579 this.off( type, selector, types[ type ] );
19580 }
19581 return this;
19582 }
19583 if ( selector === false || typeof selector === "function" ) {
19584
19585 // ( types [, fn] )
19586 fn = selector;
19587 selector = undefined;
19588 }
19589 if ( fn === false ) {
19590 fn = returnFalse;
19591 }
19592 return this.each( function() {
19593 jQuery.event.remove( this, types, fn, selector );
19594 } );
19595 }
19596 } );
19597
19598
19599 var
19600
19601 /* eslint-disable max-len */
19602
19603 // See https://github.com/eslint/eslint/issues/3229
19604 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
19605
19606 /* eslint-enable */
19607
19608 // Support: IE <=10 - 11, Edge 12 - 13
19609 // In IE/Edge using regex groups here causes severe slowdowns.
19610 // See https://connect.microsoft.com/IE/feedback/details/1736512/
19611 rnoInnerhtml = /<script|<style|<link/i,
19612
19613 // checked="checked" or checked
19614 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
19615 rscriptTypeMasked = /^true\/(.*)/,
19616 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
19617
19618 // Prefer a tbody over its parent table for containing new rows
19619 function manipulationTarget( elem, content ) {
19620 if ( nodeName( elem, "table" ) &&
19621 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
19622
19623 return jQuery( ">tbody", elem )[ 0 ] || elem;
19624 }
19625
19626 return elem;
19627 }
19628
19629 // Replace/restore the type attribute of script elements for safe DOM manipulation
19630 function disableScript( elem ) {
19631 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
19632 return elem;
19633 }
19634 function restoreScript( elem ) {
19635 var match = rscriptTypeMasked.exec( elem.type );
19636
19637 if ( match ) {
19638 elem.type = match[ 1 ];
19639 } else {
19640 elem.removeAttribute( "type" );
19641 }
19642
19643 return elem;
19644 }
19645
19646 function cloneCopyEvent( src, dest ) {
19647 var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
19648
19649 if ( dest.nodeType !== 1 ) {
19650 return;
19651 }
19652
19653 // 1. Copy private data: events, handlers, etc.
19654 if ( dataPriv.hasData( src ) ) {
19655 pdataOld = dataPriv.access( src );
19656 pdataCur = dataPriv.set( dest, pdataOld );
19657 events = pdataOld.events;
19658
19659 if ( events ) {
19660 delete pdataCur.handle;
19661 pdataCur.events = {};
19662
19663 for ( type in events ) {
19664 for ( i = 0, l = events[ type ].length; i < l; i++ ) {
19665 jQuery.event.add( dest, type, events[ type ][ i ] );
19666 }
19667 }
19668 }
19669 }
19670
19671 // 2. Copy user data
19672 if ( dataUser.hasData( src ) ) {
19673 udataOld = dataUser.access( src );
19674 udataCur = jQuery.extend( {}, udataOld );
19675
19676 dataUser.set( dest, udataCur );
19677 }
19678 }
19679
19680 // Fix IE bugs, see support tests
19681 function fixInput( src, dest ) {
19682 var nodeName = dest.nodeName.toLowerCase();
19683
19684 // Fails to persist the checked state of a cloned checkbox or radio button.
19685 if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
19686 dest.checked = src.checked;
19687
19688 // Fails to return the selected option to the default selected state when cloning options
19689 } else if ( nodeName === "input" || nodeName === "textarea" ) {
19690 dest.defaultValue = src.defaultValue;
19691 }
19692 }
19693
19694 function domManip( collection, args, callback, ignored ) {
19695
19696 // Flatten any nested arrays
19697 args = concat.apply( [], args );
19698
19699 var fragment, first, scripts, hasScripts, node, doc,
19700 i = 0,
19701 l = collection.length,
19702 iNoClone = l - 1,
19703 value = args[ 0 ],
19704 isFunction = jQuery.isFunction( value );
19705
19706 // We can't cloneNode fragments that contain checked, in WebKit
19707 if ( isFunction ||
19708 ( l > 1 && typeof value === "string" &&
19709 !support.checkClone && rchecked.test( value ) ) ) {
19710 return collection.each( function( index ) {
19711 var self = collection.eq( index );
19712 if ( isFunction ) {
19713 args[ 0 ] = value.call( this, index, self.html() );
19714 }
19715 domManip( self, args, callback, ignored );
19716 } );
19717 }
19718
19719 if ( l ) {
19720 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
19721 first = fragment.firstChild;
19722
19723 if ( fragment.childNodes.length === 1 ) {
19724 fragment = first;
19725 }
19726
19727 // Require either new content or an interest in ignored elements to invoke the callback
19728 if ( first || ignored ) {
19729 scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
19730 hasScripts = scripts.length;
19731
19732 // Use the original fragment for the last item
19733 // instead of the first because it can end up
19734 // being emptied incorrectly in certain situations (#8070).
19735 for ( ; i < l; i++ ) {
19736 node = fragment;
19737
19738 if ( i !== iNoClone ) {
19739 node = jQuery.clone( node, true, true );
19740
19741 // Keep references to cloned scripts for later restoration
19742 if ( hasScripts ) {
19743
19744 // Support: Android <=4.0 only, PhantomJS 1 only
19745 // push.apply(_, arraylike) throws on ancient WebKit
19746 jQuery.merge( scripts, getAll( node, "script" ) );
19747 }
19748 }
19749
19750 callback.call( collection[ i ], node, i );
19751 }
19752
19753 if ( hasScripts ) {
19754 doc = scripts[ scripts.length - 1 ].ownerDocument;
19755
19756 // Reenable scripts
19757 jQuery.map( scripts, restoreScript );
19758
19759 // Evaluate executable scripts on first document insertion
19760 for ( i = 0; i < hasScripts; i++ ) {
19761 node = scripts[ i ];
19762 if ( rscriptType.test( node.type || "" ) &&
19763 !dataPriv.access( node, "globalEval" ) &&
19764 jQuery.contains( doc, node ) ) {
19765
19766 if ( node.src ) {
19767
19768 // Optional AJAX dependency, but won't run scripts if not present
19769 if ( jQuery._evalUrl ) {
19770 jQuery._evalUrl( node.src );
19771 }
19772 } else {
19773 DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
19774 }
19775 }
19776 }
19777 }
19778 }
19779 }
19780
19781 return collection;
19782 }
19783
19784 function remove( elem, selector, keepData ) {
19785 var node,
19786 nodes = selector ? jQuery.filter( selector, elem ) : elem,
19787 i = 0;
19788
19789 for ( ; ( node = nodes[ i ] ) != null; i++ ) {
19790 if ( !keepData && node.nodeType === 1 ) {
19791 jQuery.cleanData( getAll( node ) );
19792 }
19793
19794 if ( node.parentNode ) {
19795 if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
19796 setGlobalEval( getAll( node, "script" ) );
19797 }
19798 node.parentNode.removeChild( node );
19799 }
19800 }
19801
19802 return elem;
19803 }
19804
19805 jQuery.extend( {
19806 htmlPrefilter: function( html ) {
19807 return html.replace( rxhtmlTag, "<$1></$2>" );
19808 },
19809
19810 clone: function( elem, dataAndEvents, deepDataAndEvents ) {
19811 var i, l, srcElements, destElements,
19812 clone = elem.cloneNode( true ),
19813 inPage = jQuery.contains( elem.ownerDocument, elem );
19814
19815 // Fix IE cloning issues
19816 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
19817 !jQuery.isXMLDoc( elem ) ) {
19818
19819 // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
19820 destElements = getAll( clone );
19821 srcElements = getAll( elem );
19822
19823 for ( i = 0, l = srcElements.length; i < l; i++ ) {
19824 fixInput( srcElements[ i ], destElements[ i ] );
19825 }
19826 }
19827
19828 // Copy the events from the original to the clone
19829 if ( dataAndEvents ) {
19830 if ( deepDataAndEvents ) {
19831 srcElements = srcElements || getAll( elem );
19832 destElements = destElements || getAll( clone );
19833
19834 for ( i = 0, l = srcElements.length; i < l; i++ ) {
19835 cloneCopyEvent( srcElements[ i ], destElements[ i ] );
19836 }
19837 } else {
19838 cloneCopyEvent( elem, clone );
19839 }
19840 }
19841
19842 // Preserve script evaluation history
19843 destElements = getAll( clone, "script" );
19844 if ( destElements.length > 0 ) {
19845 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
19846 }
19847
19848 // Return the cloned set
19849 return clone;
19850 },
19851
19852 cleanData: function( elems ) {
19853 var data, elem, type,
19854 special = jQuery.event.special,
19855 i = 0;
19856
19857 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
19858 if ( acceptData( elem ) ) {
19859 if ( ( data = elem[ dataPriv.expando ] ) ) {
19860 if ( data.events ) {
19861 for ( type in data.events ) {
19862 if ( special[ type ] ) {
19863 jQuery.event.remove( elem, type );
19864
19865 // This is a shortcut to avoid jQuery.event.remove's overhead
19866 } else {
19867 jQuery.removeEvent( elem, type, data.handle );
19868 }
19869 }
19870 }
19871
19872 // Support: Chrome <=35 - 45+
19873 // Assign undefined instead of using delete, see Data#remove
19874 elem[ dataPriv.expando ] = undefined;
19875 }
19876 if ( elem[ dataUser.expando ] ) {
19877
19878 // Support: Chrome <=35 - 45+
19879 // Assign undefined instead of using delete, see Data#remove
19880 elem[ dataUser.expando ] = undefined;
19881 }
19882 }
19883 }
19884 }
19885 } );
19886
19887 jQuery.fn.extend( {
19888 detach: function( selector ) {
19889 return remove( this, selector, true );
19890 },
19891
19892 remove: function( selector ) {
19893 return remove( this, selector );
19894 },
19895
19896 text: function( value ) {
19897 return access( this, function( value ) {
19898 return value === undefined ?
19899 jQuery.text( this ) :
19900 this.empty().each( function() {
19901 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19902 this.textContent = value;
19903 }
19904 } );
19905 }, null, value, arguments.length );
19906 },
19907
19908 append: function() {
19909 return domManip( this, arguments, function( elem ) {
19910 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19911 var target = manipulationTarget( this, elem );
19912 target.appendChild( elem );
19913 }
19914 } );
19915 },
19916
19917 prepend: function() {
19918 return domManip( this, arguments, function( elem ) {
19919 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19920 var target = manipulationTarget( this, elem );
19921 target.insertBefore( elem, target.firstChild );
19922 }
19923 } );
19924 },
19925
19926 before: function() {
19927 return domManip( this, arguments, function( elem ) {
19928 if ( this.parentNode ) {
19929 this.parentNode.insertBefore( elem, this );
19930 }
19931 } );
19932 },
19933
19934 after: function() {
19935 return domManip( this, arguments, function( elem ) {
19936 if ( this.parentNode ) {
19937 this.parentNode.insertBefore( elem, this.nextSibling );
19938 }
19939 } );
19940 },
19941
19942 empty: function() {
19943 var elem,
19944 i = 0;
19945
19946 for ( ; ( elem = this[ i ] ) != null; i++ ) {
19947 if ( elem.nodeType === 1 ) {
19948
19949 // Prevent memory leaks
19950 jQuery.cleanData( getAll( elem, false ) );
19951
19952 // Remove any remaining nodes
19953 elem.textContent = "";
19954 }
19955 }
19956
19957 return this;
19958 },
19959
19960 clone: function( dataAndEvents, deepDataAndEvents ) {
19961 dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
19962 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
19963
19964 return this.map( function() {
19965 return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
19966 } );
19967 },
19968
19969 html: function( value ) {
19970 return access( this, function( value ) {
19971 var elem = this[ 0 ] || {},
19972 i = 0,
19973 l = this.length;
19974
19975 if ( value === undefined && elem.nodeType === 1 ) {
19976 return elem.innerHTML;
19977 }
19978
19979 // See if we can take a shortcut and just use innerHTML
19980 if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
19981 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
19982
19983 value = jQuery.htmlPrefilter( value );
19984
19985 try {
19986 for ( ; i < l; i++ ) {
19987 elem = this[ i ] || {};
19988
19989 // Remove element nodes and prevent memory leaks
19990 if ( elem.nodeType === 1 ) {
19991 jQuery.cleanData( getAll( elem, false ) );
19992 elem.innerHTML = value;
19993 }
19994 }
19995
19996 elem = 0;
19997
19998 // If using innerHTML throws an exception, use the fallback method
19999 } catch ( e ) {}
20000 }
20001
20002 if ( elem ) {
20003 this.empty().append( value );
20004 }
20005 }, null, value, arguments.length );
20006 },
20007
20008 replaceWith: function() {
20009 var ignored = [];
20010
20011 // Make the changes, replacing each non-ignored context element with the new content
20012 return domManip( this, arguments, function( elem ) {
20013 var parent = this.parentNode;
20014
20015 if ( jQuery.inArray( this, ignored ) < 0 ) {
20016 jQuery.cleanData( getAll( this ) );
20017 if ( parent ) {
20018 parent.replaceChild( elem, this );
20019 }
20020 }
20021
20022 // Force callback invocation
20023 }, ignored );
20024 }
20025 } );
20026
20027 jQuery.each( {
20028 appendTo: "append",
20029 prependTo: "prepend",
20030 insertBefore: "before",
20031 insertAfter: "after",
20032 replaceAll: "replaceWith"
20033 }, function( name, original ) {
20034 jQuery.fn[ name ] = function( selector ) {
20035 var elems,
20036 ret = [],
20037 insert = jQuery( selector ),
20038 last = insert.length - 1,
20039 i = 0;
20040
20041 for ( ; i <= last; i++ ) {
20042 elems = i === last ? this : this.clone( true );
20043 jQuery( insert[ i ] )[ original ]( elems );
20044
20045 // Support: Android <=4.0 only, PhantomJS 1 only
20046 // .get() because push.apply(_, arraylike) throws on ancient WebKit
20047 push.apply( ret, elems.get() );
20048 }
20049
20050 return this.pushStack( ret );
20051 };
20052 } );
20053 var rmargin = ( /^margin/ );
20054
20055 var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
20056
20057 var getStyles = function( elem ) {
20058
20059 // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
20060 // IE throws on elements created in popups
20061 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
20062 var view = elem.ownerDocument.defaultView;
20063
20064 if ( !view || !view.opener ) {
20065 view = window;
20066 }
20067
20068 return view.getComputedStyle( elem );
20069 };
20070
20071
20072
20073 ( function() {
20074
20075 // Executing both pixelPosition & boxSizingReliable tests require only one layout
20076 // so they're executed at the same time to save the second computation.
20077 function computeStyleTests() {
20078
20079 // This is a singleton, we need to execute it only once
20080 if ( !div ) {
20081 return;
20082 }
20083
20084 div.style.cssText =
20085 "box-sizing:border-box;" +
20086 "position:relative;display:block;" +
20087 "margin:auto;border:1px;padding:1px;" +
20088 "top:1%;width:50%";
20089 div.innerHTML = "";
20090 documentElement.appendChild( container );
20091
20092 var divStyle = window.getComputedStyle( div );
20093 pixelPositionVal = divStyle.top !== "1%";
20094
20095 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
20096 reliableMarginLeftVal = divStyle.marginLeft === "2px";
20097 boxSizingReliableVal = divStyle.width === "4px";
20098
20099 // Support: Android 4.0 - 4.3 only
20100 // Some styles come back with percentage values, even though they shouldn't
20101 div.style.marginRight = "50%";
20102 pixelMarginRightVal = divStyle.marginRight === "4px";
20103
20104 documentElement.removeChild( container );
20105
20106 // Nullify the div so it wouldn't be stored in the memory and
20107 // it will also be a sign that checks already performed
20108 div = null;
20109 }
20110
20111 var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
20112 container = document.createElement( "div" ),
20113 div = document.createElement( "div" );
20114
20115 // Finish early in limited (non-browser) environments
20116 if ( !div.style ) {
20117 return;
20118 }
20119
20120 // Support: IE <=9 - 11 only
20121 // Style of cloned element affects source element cloned (#8908)
20122 div.style.backgroundClip = "content-box";
20123 div.cloneNode( true ).style.backgroundClip = "";
20124 support.clearCloneStyle = div.style.backgroundClip === "content-box";
20125
20126 container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
20127 "padding:0;margin-top:1px;position:absolute";
20128 container.appendChild( div );
20129
20130 jQuery.extend( support, {
20131 pixelPosition: function() {
20132 computeStyleTests();
20133 return pixelPositionVal;
20134 },
20135 boxSizingReliable: function() {
20136 computeStyleTests();
20137 return boxSizingReliableVal;
20138 },
20139 pixelMarginRight: function() {
20140 computeStyleTests();
20141 return pixelMarginRightVal;
20142 },
20143 reliableMarginLeft: function() {
20144 computeStyleTests();
20145 return reliableMarginLeftVal;
20146 }
20147 } );
20148 } )();
20149
20150
20151 function curCSS( elem, name, computed ) {
20152 var width, minWidth, maxWidth, ret,
20153
20154 // Support: Firefox 51+
20155 // Retrieving style before computed somehow
20156 // fixes an issue with getting wrong values
20157 // on detached elements
20158 style = elem.style;
20159
20160 computed = computed || getStyles( elem );
20161
20162 // getPropertyValue is needed for:
20163 // .css('filter') (IE 9 only, #12537)
20164 // .css('--customProperty) (#3144)
20165 if ( computed ) {
20166 ret = computed.getPropertyValue( name ) || computed[ name ];
20167
20168 if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
20169 ret = jQuery.style( elem, name );
20170 }
20171
20172 // A tribute to the "awesome hack by Dean Edwards"
20173 // Android Browser returns percentage for some values,
20174 // but width seems to be reliably pixels.
20175 // This is against the CSSOM draft spec:
20176 // https://drafts.csswg.org/cssom/#resolved-values
20177 if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
20178
20179 // Remember the original values
20180 width = style.width;
20181 minWidth = style.minWidth;
20182 maxWidth = style.maxWidth;
20183
20184 // Put in the new values to get a computed value out
20185 style.minWidth = style.maxWidth = style.width = ret;
20186 ret = computed.width;
20187
20188 // Revert the changed values
20189 style.width = width;
20190 style.minWidth = minWidth;
20191 style.maxWidth = maxWidth;
20192 }
20193 }
20194
20195 return ret !== undefined ?
20196
20197 // Support: IE <=9 - 11 only
20198 // IE returns zIndex value as an integer.
20199 ret + "" :
20200 ret;
20201 }
20202
20203
20204 function addGetHookIf( conditionFn, hookFn ) {
20205
20206 // Define the hook, we'll check on the first run if it's really needed.
20207 return {
20208 get: function() {
20209 if ( conditionFn() ) {
20210
20211 // Hook not needed (or it's not possible to use it due
20212 // to missing dependency), remove it.
20213 delete this.get;
20214 return;
20215 }
20216
20217 // Hook needed; redefine it so that the support test is not executed again.
20218 return ( this.get = hookFn ).apply( this, arguments );
20219 }
20220 };
20221 }
20222
20223
20224 var
20225
20226 // Swappable if display is none or starts with table
20227 // except "table", "table-cell", or "table-caption"
20228 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
20229 rdisplayswap = /^(none|table(?!-c[ea]).+)/,
20230 rcustomProp = /^--/,
20231 cssShow = { position: "absolute", visibility: "hidden", display: "block" },
20232 cssNormalTransform = {
20233 letterSpacing: "0",
20234 fontWeight: "400"
20235 },
20236
20237 cssPrefixes = [ "Webkit", "Moz", "ms" ],
20238 emptyStyle = document.createElement( "div" ).style;
20239
20240 // Return a css property mapped to a potentially vendor prefixed property
20241 function vendorPropName( name ) {
20242
20243 // Shortcut for names that are not vendor prefixed
20244 if ( name in emptyStyle ) {
20245 return name;
20246 }
20247
20248 // Check for vendor prefixed names
20249 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
20250 i = cssPrefixes.length;
20251
20252 while ( i-- ) {
20253 name = cssPrefixes[ i ] + capName;
20254 if ( name in emptyStyle ) {
20255 return name;
20256 }
20257 }
20258 }
20259
20260 // Return a property mapped along what jQuery.cssProps suggests or to
20261 // a vendor prefixed property.
20262 function finalPropName( name ) {
20263 var ret = jQuery.cssProps[ name ];
20264 if ( !ret ) {
20265 ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
20266 }
20267 return ret;
20268 }
20269
20270 function setPositiveNumber( elem, value, subtract ) {
20271
20272 // Any relative (+/-) values have already been
20273 // normalized at this point
20274 var matches = rcssNum.exec( value );
20275 return matches ?
20276
20277 // Guard against undefined "subtract", e.g., when used as in cssHooks
20278 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
20279 value;
20280 }
20281
20282 function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
20283 var i,
20284 val = 0;
20285
20286 // If we already have the right measurement, avoid augmentation
20287 if ( extra === ( isBorderBox ? "border" : "content" ) ) {
20288 i = 4;
20289
20290 // Otherwise initialize for horizontal or vertical properties
20291 } else {
20292 i = name === "width" ? 1 : 0;
20293 }
20294
20295 for ( ; i < 4; i += 2 ) {
20296
20297 // Both box models exclude margin, so add it if we want it
20298 if ( extra === "margin" ) {
20299 val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
20300 }
20301
20302 if ( isBorderBox ) {
20303
20304 // border-box includes padding, so remove it if we want content
20305 if ( extra === "content" ) {
20306 val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
20307 }
20308
20309 // At this point, extra isn't border nor margin, so remove border
20310 if ( extra !== "margin" ) {
20311 val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
20312 }
20313 } else {
20314
20315 // At this point, extra isn't content, so add padding
20316 val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
20317
20318 // At this point, extra isn't content nor padding, so add border
20319 if ( extra !== "padding" ) {
20320 val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
20321 }
20322 }
20323 }
20324
20325 return val;
20326 }
20327
20328 function getWidthOrHeight( elem, name, extra ) {
20329
20330 // Start with computed style
20331 var valueIsBorderBox,
20332 styles = getStyles( elem ),
20333 val = curCSS( elem, name, styles ),
20334 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
20335
20336 // Computed unit is not pixels. Stop here and return.
20337 if ( rnumnonpx.test( val ) ) {
20338 return val;
20339 }
20340
20341 // Check for style in case a browser which returns unreliable values
20342 // for getComputedStyle silently falls back to the reliable elem.style
20343 valueIsBorderBox = isBorderBox &&
20344 ( support.boxSizingReliable() || val === elem.style[ name ] );
20345
20346 // Fall back to offsetWidth/Height when value is "auto"
20347 // This happens for inline elements with no explicit setting (gh-3571)
20348 if ( val === "auto" ) {
20349 val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];
20350 }
20351
20352 // Normalize "", auto, and prepare for extra
20353 val = parseFloat( val ) || 0;
20354
20355 // Use the active box-sizing model to add/subtract irrelevant styles
20356 return ( val +
20357 augmentWidthOrHeight(
20358 elem,
20359 name,
20360 extra || ( isBorderBox ? "border" : "content" ),
20361 valueIsBorderBox,
20362 styles
20363 )
20364 ) + "px";
20365 }
20366
20367 jQuery.extend( {
20368
20369 // Add in style property hooks for overriding the default
20370 // behavior of getting and setting a style property
20371 cssHooks: {
20372 opacity: {
20373 get: function( elem, computed ) {
20374 if ( computed ) {
20375
20376 // We should always get a number back from opacity
20377 var ret = curCSS( elem, "opacity" );
20378 return ret === "" ? "1" : ret;
20379 }
20380 }
20381 }
20382 },
20383
20384 // Don't automatically add "px" to these possibly-unitless properties
20385 cssNumber: {
20386 "animationIterationCount": true,
20387 "columnCount": true,
20388 "fillOpacity": true,
20389 "flexGrow": true,
20390 "flexShrink": true,
20391 "fontWeight": true,
20392 "lineHeight": true,
20393 "opacity": true,
20394 "order": true,
20395 "orphans": true,
20396 "widows": true,
20397 "zIndex": true,
20398 "zoom": true
20399 },
20400
20401 // Add in properties whose names you wish to fix before
20402 // setting or getting the value
20403 cssProps: {
20404 "float": "cssFloat"
20405 },
20406
20407 // Get and set the style property on a DOM Node
20408 style: function( elem, name, value, extra ) {
20409
20410 // Don't set styles on text and comment nodes
20411 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
20412 return;
20413 }
20414
20415 // Make sure that we're working with the right name
20416 var ret, type, hooks,
20417 origName = jQuery.camelCase( name ),
20418 isCustomProp = rcustomProp.test( name ),
20419 style = elem.style;
20420
20421 // Make sure that we're working with the right name. We don't
20422 // want to query the value if it is a CSS custom property
20423 // since they are user-defined.
20424 if ( !isCustomProp ) {
20425 name = finalPropName( origName );
20426 }
20427
20428 // Gets hook for the prefixed version, then unprefixed version
20429 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
20430
20431 // Check if we're setting a value
20432 if ( value !== undefined ) {
20433 type = typeof value;
20434
20435 // Convert "+=" or "-=" to relative numbers (#7345)
20436 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
20437 value = adjustCSS( elem, name, ret );
20438
20439 // Fixes bug #9237
20440 type = "number";
20441 }
20442
20443 // Make sure that null and NaN values aren't set (#7116)
20444 if ( value == null || value !== value ) {
20445 return;
20446 }
20447
20448 // If a number was passed in, add the unit (except for certain CSS properties)
20449 if ( type === "number" ) {
20450 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
20451 }
20452
20453 // background-* props affect original clone's values
20454 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
20455 style[ name ] = "inherit";
20456 }
20457
20458 // If a hook was provided, use that value, otherwise just set the specified value
20459 if ( !hooks || !( "set" in hooks ) ||
20460 ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
20461
20462 if ( isCustomProp ) {
20463 style.setProperty( name, value );
20464 } else {
20465 style[ name ] = value;
20466 }
20467 }
20468
20469 } else {
20470
20471 // If a hook was provided get the non-computed value from there
20472 if ( hooks && "get" in hooks &&
20473 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
20474
20475 return ret;
20476 }
20477
20478 // Otherwise just get the value from the style object
20479 return style[ name ];
20480 }
20481 },
20482
20483 css: function( elem, name, extra, styles ) {
20484 var val, num, hooks,
20485 origName = jQuery.camelCase( name ),
20486 isCustomProp = rcustomProp.test( name );
20487
20488 // Make sure that we're working with the right name. We don't
20489 // want to modify the value if it is a CSS custom property
20490 // since they are user-defined.
20491 if ( !isCustomProp ) {
20492 name = finalPropName( origName );
20493 }
20494
20495 // Try prefixed name followed by the unprefixed name
20496 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
20497
20498 // If a hook was provided get the computed value from there
20499 if ( hooks && "get" in hooks ) {
20500 val = hooks.get( elem, true, extra );
20501 }
20502
20503 // Otherwise, if a way to get the computed value exists, use that
20504 if ( val === undefined ) {
20505 val = curCSS( elem, name, styles );
20506 }
20507
20508 // Convert "normal" to computed value
20509 if ( val === "normal" && name in cssNormalTransform ) {
20510 val = cssNormalTransform[ name ];
20511 }
20512
20513 // Make numeric if forced or a qualifier was provided and val looks numeric
20514 if ( extra === "" || extra ) {
20515 num = parseFloat( val );
20516 return extra === true || isFinite( num ) ? num || 0 : val;
20517 }
20518
20519 return val;
20520 }
20521 } );
20522
20523 jQuery.each( [ "height", "width" ], function( i, name ) {
20524 jQuery.cssHooks[ name ] = {
20525 get: function( elem, computed, extra ) {
20526 if ( computed ) {
20527
20528 // Certain elements can have dimension info if we invisibly show them
20529 // but it must have a current display style that would benefit
20530 return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
20531
20532 // Support: Safari 8+
20533 // Table columns in Safari have non-zero offsetWidth & zero
20534 // getBoundingClientRect().width unless display is changed.
20535 // Support: IE <=11 only
20536 // Running getBoundingClientRect on a disconnected node
20537 // in IE throws an error.
20538 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
20539 swap( elem, cssShow, function() {
20540 return getWidthOrHeight( elem, name, extra );
20541 } ) :
20542 getWidthOrHeight( elem, name, extra );
20543 }
20544 },
20545
20546 set: function( elem, value, extra ) {
20547 var matches,
20548 styles = extra && getStyles( elem ),
20549 subtract = extra && augmentWidthOrHeight(
20550 elem,
20551 name,
20552 extra,
20553 jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
20554 styles
20555 );
20556
20557 // Convert to pixels if value adjustment is needed
20558 if ( subtract && ( matches = rcssNum.exec( value ) ) &&
20559 ( matches[ 3 ] || "px" ) !== "px" ) {
20560
20561 elem.style[ name ] = value;
20562 value = jQuery.css( elem, name );
20563 }
20564
20565 return setPositiveNumber( elem, value, subtract );
20566 }
20567 };
20568 } );
20569
20570 jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
20571 function( elem, computed ) {
20572 if ( computed ) {
20573 return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
20574 elem.getBoundingClientRect().left -
20575 swap( elem, { marginLeft: 0 }, function() {
20576 return elem.getBoundingClientRect().left;
20577 } )
20578 ) + "px";
20579 }
20580 }
20581 );
20582
20583 // These hooks are used by animate to expand properties
20584 jQuery.each( {
20585 margin: "",
20586 padding: "",
20587 border: "Width"
20588 }, function( prefix, suffix ) {
20589 jQuery.cssHooks[ prefix + suffix ] = {
20590 expand: function( value ) {
20591 var i = 0,
20592 expanded = {},
20593
20594 // Assumes a single number if not a string
20595 parts = typeof value === "string" ? value.split( " " ) : [ value ];
20596
20597 for ( ; i < 4; i++ ) {
20598 expanded[ prefix + cssExpand[ i ] + suffix ] =
20599 parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
20600 }
20601
20602 return expanded;
20603 }
20604 };
20605
20606 if ( !rmargin.test( prefix ) ) {
20607 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
20608 }
20609 } );
20610
20611 jQuery.fn.extend( {
20612 css: function( name, value ) {
20613 return access( this, function( elem, name, value ) {
20614 var styles, len,
20615 map = {},
20616 i = 0;
20617
20618 if ( Array.isArray( name ) ) {
20619 styles = getStyles( elem );
20620 len = name.length;
20621
20622 for ( ; i < len; i++ ) {
20623 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
20624 }
20625
20626 return map;
20627 }
20628
20629 return value !== undefined ?
20630 jQuery.style( elem, name, value ) :
20631 jQuery.css( elem, name );
20632 }, name, value, arguments.length > 1 );
20633 }
20634 } );
20635
20636
20637 function Tween( elem, options, prop, end, easing ) {
20638 return new Tween.prototype.init( elem, options, prop, end, easing );
20639 }
20640 jQuery.Tween = Tween;
20641
20642 Tween.prototype = {
20643 constructor: Tween,
20644 init: function( elem, options, prop, end, easing, unit ) {
20645 this.elem = elem;
20646 this.prop = prop;
20647 this.easing = easing || jQuery.easing._default;
20648 this.options = options;
20649 this.start = this.now = this.cur();
20650 this.end = end;
20651 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
20652 },
20653 cur: function() {
20654 var hooks = Tween.propHooks[ this.prop ];
20655
20656 return hooks && hooks.get ?
20657 hooks.get( this ) :
20658 Tween.propHooks._default.get( this );
20659 },
20660 run: function( percent ) {
20661 var eased,
20662 hooks = Tween.propHooks[ this.prop ];
20663
20664 if ( this.options.duration ) {
20665 this.pos = eased = jQuery.easing[ this.easing ](
20666 percent, this.options.duration * percent, 0, 1, this.options.duration
20667 );
20668 } else {
20669 this.pos = eased = percent;
20670 }
20671 this.now = ( this.end - this.start ) * eased + this.start;
20672
20673 if ( this.options.step ) {
20674 this.options.step.call( this.elem, this.now, this );
20675 }
20676
20677 if ( hooks && hooks.set ) {
20678 hooks.set( this );
20679 } else {
20680 Tween.propHooks._default.set( this );
20681 }
20682 return this;
20683 }
20684 };
20685
20686 Tween.prototype.init.prototype = Tween.prototype;
20687
20688 Tween.propHooks = {
20689 _default: {
20690 get: function( tween ) {
20691 var result;
20692
20693 // Use a property on the element directly when it is not a DOM element,
20694 // or when there is no matching style property that exists.
20695 if ( tween.elem.nodeType !== 1 ||
20696 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
20697 return tween.elem[ tween.prop ];
20698 }
20699
20700 // Passing an empty string as a 3rd parameter to .css will automatically
20701 // attempt a parseFloat and fallback to a string if the parse fails.
20702 // Simple values such as "10px" are parsed to Float;
20703 // complex values such as "rotate(1rad)" are returned as-is.
20704 result = jQuery.css( tween.elem, tween.prop, "" );
20705
20706 // Empty strings, null, undefined and "auto" are converted to 0.
20707 return !result || result === "auto" ? 0 : result;
20708 },
20709 set: function( tween ) {
20710
20711 // Use step hook for back compat.
20712 // Use cssHook if its there.
20713 // Use .style if available and use plain properties where available.
20714 if ( jQuery.fx.step[ tween.prop ] ) {
20715 jQuery.fx.step[ tween.prop ]( tween );
20716 } else if ( tween.elem.nodeType === 1 &&
20717 ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
20718 jQuery.cssHooks[ tween.prop ] ) ) {
20719 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
20720 } else {
20721 tween.elem[ tween.prop ] = tween.now;
20722 }
20723 }
20724 }
20725 };
20726
20727 // Support: IE <=9 only
20728 // Panic based approach to setting things on disconnected nodes
20729 Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
20730 set: function( tween ) {
20731 if ( tween.elem.nodeType && tween.elem.parentNode ) {
20732 tween.elem[ tween.prop ] = tween.now;
20733 }
20734 }
20735 };
20736
20737 jQuery.easing = {
20738 linear: function( p ) {
20739 return p;
20740 },
20741 swing: function( p ) {
20742 return 0.5 - Math.cos( p * Math.PI ) / 2;
20743 },
20744 _default: "swing"
20745 };
20746
20747 jQuery.fx = Tween.prototype.init;
20748
20749 // Back compat <1.8 extension point
20750 jQuery.fx.step = {};
20751
20752
20753
20754
20755 var
20756 fxNow, inProgress,
20757 rfxtypes = /^(?:toggle|show|hide)$/,
20758 rrun = /queueHooks$/;
20759
20760 function schedule() {
20761 if ( inProgress ) {
20762 if ( document.hidden === false && window.requestAnimationFrame ) {
20763 window.requestAnimationFrame( schedule );
20764 } else {
20765 window.setTimeout( schedule, jQuery.fx.interval );
20766 }
20767
20768 jQuery.fx.tick();
20769 }
20770 }
20771
20772 // Animations created synchronously will run synchronously
20773 function createFxNow() {
20774 window.setTimeout( function() {
20775 fxNow = undefined;
20776 } );
20777 return ( fxNow = jQuery.now() );
20778 }
20779
20780 // Generate parameters to create a standard animation
20781 function genFx( type, includeWidth ) {
20782 var which,
20783 i = 0,
20784 attrs = { height: type };
20785
20786 // If we include width, step value is 1 to do all cssExpand values,
20787 // otherwise step value is 2 to skip over Left and Right
20788 includeWidth = includeWidth ? 1 : 0;
20789 for ( ; i < 4; i += 2 - includeWidth ) {
20790 which = cssExpand[ i ];
20791 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
20792 }
20793
20794 if ( includeWidth ) {
20795 attrs.opacity = attrs.width = type;
20796 }
20797
20798 return attrs;
20799 }
20800
20801 function createTween( value, prop, animation ) {
20802 var tween,
20803 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
20804 index = 0,
20805 length = collection.length;
20806 for ( ; index < length; index++ ) {
20807 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
20808
20809 // We're done with this property
20810 return tween;
20811 }
20812 }
20813 }
20814
20815 function defaultPrefilter( elem, props, opts ) {
20816 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
20817 isBox = "width" in props || "height" in props,
20818 anim = this,
20819 orig = {},
20820 style = elem.style,
20821 hidden = elem.nodeType && isHiddenWithinTree( elem ),
20822 dataShow = dataPriv.get( elem, "fxshow" );
20823
20824 // Queue-skipping animations hijack the fx hooks
20825 if ( !opts.queue ) {
20826 hooks = jQuery._queueHooks( elem, "fx" );
20827 if ( hooks.unqueued == null ) {
20828 hooks.unqueued = 0;
20829 oldfire = hooks.empty.fire;
20830 hooks.empty.fire = function() {
20831 if ( !hooks.unqueued ) {
20832 oldfire();
20833 }
20834 };
20835 }
20836 hooks.unqueued++;
20837
20838 anim.always( function() {
20839
20840 // Ensure the complete handler is called before this completes
20841 anim.always( function() {
20842 hooks.unqueued--;
20843 if ( !jQuery.queue( elem, "fx" ).length ) {
20844 hooks.empty.fire();
20845 }
20846 } );
20847 } );
20848 }
20849
20850 // Detect show/hide animations
20851 for ( prop in props ) {
20852 value = props[ prop ];
20853 if ( rfxtypes.test( value ) ) {
20854 delete props[ prop ];
20855 toggle = toggle || value === "toggle";
20856 if ( value === ( hidden ? "hide" : "show" ) ) {
20857
20858 // Pretend to be hidden if this is a "show" and
20859 // there is still data from a stopped show/hide
20860 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
20861 hidden = true;
20862
20863 // Ignore all other no-op show/hide data
20864 } else {
20865 continue;
20866 }
20867 }
20868 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
20869 }
20870 }
20871
20872 // Bail out if this is a no-op like .hide().hide()
20873 propTween = !jQuery.isEmptyObject( props );
20874 if ( !propTween && jQuery.isEmptyObject( orig ) ) {
20875 return;
20876 }
20877
20878 // Restrict "overflow" and "display" styles during box animations
20879 if ( isBox && elem.nodeType === 1 ) {
20880
20881 // Support: IE <=9 - 11, Edge 12 - 13
20882 // Record all 3 overflow attributes because IE does not infer the shorthand
20883 // from identically-valued overflowX and overflowY
20884 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
20885
20886 // Identify a display type, preferring old show/hide data over the CSS cascade
20887 restoreDisplay = dataShow && dataShow.display;
20888 if ( restoreDisplay == null ) {
20889 restoreDisplay = dataPriv.get( elem, "display" );
20890 }
20891 display = jQuery.css( elem, "display" );
20892 if ( display === "none" ) {
20893 if ( restoreDisplay ) {
20894 display = restoreDisplay;
20895 } else {
20896
20897 // Get nonempty value(s) by temporarily forcing visibility
20898 showHide( [ elem ], true );
20899 restoreDisplay = elem.style.display || restoreDisplay;
20900 display = jQuery.css( elem, "display" );
20901 showHide( [ elem ] );
20902 }
20903 }
20904
20905 // Animate inline elements as inline-block
20906 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
20907 if ( jQuery.css( elem, "float" ) === "none" ) {
20908
20909 // Restore the original display value at the end of pure show/hide animations
20910 if ( !propTween ) {
20911 anim.done( function() {
20912 style.display = restoreDisplay;
20913 } );
20914 if ( restoreDisplay == null ) {
20915 display = style.display;
20916 restoreDisplay = display === "none" ? "" : display;
20917 }
20918 }
20919 style.display = "inline-block";
20920 }
20921 }
20922 }
20923
20924 if ( opts.overflow ) {
20925 style.overflow = "hidden";
20926 anim.always( function() {
20927 style.overflow = opts.overflow[ 0 ];
20928 style.overflowX = opts.overflow[ 1 ];
20929 style.overflowY = opts.overflow[ 2 ];
20930 } );
20931 }
20932
20933 // Implement show/hide animations
20934 propTween = false;
20935 for ( prop in orig ) {
20936
20937 // General show/hide setup for this element animation
20938 if ( !propTween ) {
20939 if ( dataShow ) {
20940 if ( "hidden" in dataShow ) {
20941 hidden = dataShow.hidden;
20942 }
20943 } else {
20944 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
20945 }
20946
20947 // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
20948 if ( toggle ) {
20949 dataShow.hidden = !hidden;
20950 }
20951
20952 // Show elements before animating them
20953 if ( hidden ) {
20954 showHide( [ elem ], true );
20955 }
20956
20957 /* eslint-disable no-loop-func */
20958
20959 anim.done( function() {
20960
20961 /* eslint-enable no-loop-func */
20962
20963 // The final step of a "hide" animation is actually hiding the element
20964 if ( !hidden ) {
20965 showHide( [ elem ] );
20966 }
20967 dataPriv.remove( elem, "fxshow" );
20968 for ( prop in orig ) {
20969 jQuery.style( elem, prop, orig[ prop ] );
20970 }
20971 } );
20972 }
20973
20974 // Per-property setup
20975 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
20976 if ( !( prop in dataShow ) ) {
20977 dataShow[ prop ] = propTween.start;
20978 if ( hidden ) {
20979 propTween.end = propTween.start;
20980 propTween.start = 0;
20981 }
20982 }
20983 }
20984 }
20985
20986 function propFilter( props, specialEasing ) {
20987 var index, name, easing, value, hooks;
20988
20989 // camelCase, specialEasing and expand cssHook pass
20990 for ( index in props ) {
20991 name = jQuery.camelCase( index );
20992 easing = specialEasing[ name ];
20993 value = props[ index ];
20994 if ( Array.isArray( value ) ) {
20995 easing = value[ 1 ];
20996 value = props[ index ] = value[ 0 ];
20997 }
20998
20999 if ( index !== name ) {
21000 props[ name ] = value;
21001 delete props[ index ];
21002 }
21003
21004 hooks = jQuery.cssHooks[ name ];
21005 if ( hooks && "expand" in hooks ) {
21006 value = hooks.expand( value );
21007 delete props[ name ];
21008
21009 // Not quite $.extend, this won't overwrite existing keys.
21010 // Reusing 'index' because we have the correct "name"
21011 for ( index in value ) {
21012 if ( !( index in props ) ) {
21013 props[ index ] = value[ index ];
21014 specialEasing[ index ] = easing;
21015 }
21016 }
21017 } else {
21018 specialEasing[ name ] = easing;
21019 }
21020 }
21021 }
21022
21023 function Animation( elem, properties, options ) {
21024 var result,
21025 stopped,
21026 index = 0,
21027 length = Animation.prefilters.length,
21028 deferred = jQuery.Deferred().always( function() {
21029
21030 // Don't match elem in the :animated selector
21031 delete tick.elem;
21032 } ),
21033 tick = function() {
21034 if ( stopped ) {
21035 return false;
21036 }
21037 var currentTime = fxNow || createFxNow(),
21038 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
21039
21040 // Support: Android 2.3 only
21041 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
21042 temp = remaining / animation.duration || 0,
21043 percent = 1 - temp,
21044 index = 0,
21045 length = animation.tweens.length;
21046
21047 for ( ; index < length; index++ ) {
21048 animation.tweens[ index ].run( percent );
21049 }
21050
21051 deferred.notifyWith( elem, [ animation, percent, remaining ] );
21052
21053 // If there's more to do, yield
21054 if ( percent < 1 && length ) {
21055 return remaining;
21056 }
21057
21058 // If this was an empty animation, synthesize a final progress notification
21059 if ( !length ) {
21060 deferred.notifyWith( elem, [ animation, 1, 0 ] );
21061 }
21062
21063 // Resolve the animation and report its conclusion
21064 deferred.resolveWith( elem, [ animation ] );
21065 return false;
21066 },
21067 animation = deferred.promise( {
21068 elem: elem,
21069 props: jQuery.extend( {}, properties ),
21070 opts: jQuery.extend( true, {
21071 specialEasing: {},
21072 easing: jQuery.easing._default
21073 }, options ),
21074 originalProperties: properties,
21075 originalOptions: options,
21076 startTime: fxNow || createFxNow(),
21077 duration: options.duration,
21078 tweens: [],
21079 createTween: function( prop, end ) {
21080 var tween = jQuery.Tween( elem, animation.opts, prop, end,
21081 animation.opts.specialEasing[ prop ] || animation.opts.easing );
21082 animation.tweens.push( tween );
21083 return tween;
21084 },
21085 stop: function( gotoEnd ) {
21086 var index = 0,
21087
21088 // If we are going to the end, we want to run all the tweens
21089 // otherwise we skip this part
21090 length = gotoEnd ? animation.tweens.length : 0;
21091 if ( stopped ) {
21092 return this;
21093 }
21094 stopped = true;
21095 for ( ; index < length; index++ ) {
21096 animation.tweens[ index ].run( 1 );
21097 }
21098
21099 // Resolve when we played the last frame; otherwise, reject
21100 if ( gotoEnd ) {
21101 deferred.notifyWith( elem, [ animation, 1, 0 ] );
21102 deferred.resolveWith( elem, [ animation, gotoEnd ] );
21103 } else {
21104 deferred.rejectWith( elem, [ animation, gotoEnd ] );
21105 }
21106 return this;
21107 }
21108 } ),
21109 props = animation.props;
21110
21111 propFilter( props, animation.opts.specialEasing );
21112
21113 for ( ; index < length; index++ ) {
21114 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
21115 if ( result ) {
21116 if ( jQuery.isFunction( result.stop ) ) {
21117 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
21118 jQuery.proxy( result.stop, result );
21119 }
21120 return result;
21121 }
21122 }
21123
21124 jQuery.map( props, createTween, animation );
21125
21126 if ( jQuery.isFunction( animation.opts.start ) ) {
21127 animation.opts.start.call( elem, animation );
21128 }
21129
21130 // Attach callbacks from options
21131 animation
21132 .progress( animation.opts.progress )
21133 .done( animation.opts.done, animation.opts.complete )
21134 .fail( animation.opts.fail )
21135 .always( animation.opts.always );
21136
21137 jQuery.fx.timer(
21138 jQuery.extend( tick, {
21139 elem: elem,
21140 anim: animation,
21141 queue: animation.opts.queue
21142 } )
21143 );
21144
21145 return animation;
21146 }
21147
21148 jQuery.Animation = jQuery.extend( Animation, {
21149
21150 tweeners: {
21151 "*": [ function( prop, value ) {
21152 var tween = this.createTween( prop, value );
21153 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
21154 return tween;
21155 } ]
21156 },
21157
21158 tweener: function( props, callback ) {
21159 if ( jQuery.isFunction( props ) ) {
21160 callback = props;
21161 props = [ "*" ];
21162 } else {
21163 props = props.match( rnothtmlwhite );
21164 }
21165
21166 var prop,
21167 index = 0,
21168 length = props.length;
21169
21170 for ( ; index < length; index++ ) {
21171 prop = props[ index ];
21172 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
21173 Animation.tweeners[ prop ].unshift( callback );
21174 }
21175 },
21176
21177 prefilters: [ defaultPrefilter ],
21178
21179 prefilter: function( callback, prepend ) {
21180 if ( prepend ) {
21181 Animation.prefilters.unshift( callback );
21182 } else {
21183 Animation.prefilters.push( callback );
21184 }
21185 }
21186 } );
21187
21188 jQuery.speed = function( speed, easing, fn ) {
21189 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
21190 complete: fn || !fn && easing ||
21191 jQuery.isFunction( speed ) && speed,
21192 duration: speed,
21193 easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
21194 };
21195
21196 // Go to the end state if fx are off
21197 if ( jQuery.fx.off ) {
21198 opt.duration = 0;
21199
21200 } else {
21201 if ( typeof opt.duration !== "number" ) {
21202 if ( opt.duration in jQuery.fx.speeds ) {
21203 opt.duration = jQuery.fx.speeds[ opt.duration ];
21204
21205 } else {
21206 opt.duration = jQuery.fx.speeds._default;
21207 }
21208 }
21209 }
21210
21211 // Normalize opt.queue - true/undefined/null -> "fx"
21212 if ( opt.queue == null || opt.queue === true ) {
21213 opt.queue = "fx";
21214 }
21215
21216 // Queueing
21217 opt.old = opt.complete;
21218
21219 opt.complete = function() {
21220 if ( jQuery.isFunction( opt.old ) ) {
21221 opt.old.call( this );
21222 }
21223
21224 if ( opt.queue ) {
21225 jQuery.dequeue( this, opt.queue );
21226 }
21227 };
21228
21229 return opt;
21230 };
21231
21232 jQuery.fn.extend( {
21233 fadeTo: function( speed, to, easing, callback ) {
21234
21235 // Show any hidden elements after setting opacity to 0
21236 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
21237
21238 // Animate to the value specified
21239 .end().animate( { opacity: to }, speed, easing, callback );
21240 },
21241 animate: function( prop, speed, easing, callback ) {
21242 var empty = jQuery.isEmptyObject( prop ),
21243 optall = jQuery.speed( speed, easing, callback ),
21244 doAnimation = function() {
21245
21246 // Operate on a copy of prop so per-property easing won't be lost
21247 var anim = Animation( this, jQuery.extend( {}, prop ), optall );
21248
21249 // Empty animations, or finishing resolves immediately
21250 if ( empty || dataPriv.get( this, "finish" ) ) {
21251 anim.stop( true );
21252 }
21253 };
21254 doAnimation.finish = doAnimation;
21255
21256 return empty || optall.queue === false ?
21257 this.each( doAnimation ) :
21258 this.queue( optall.queue, doAnimation );
21259 },
21260 stop: function( type, clearQueue, gotoEnd ) {
21261 var stopQueue = function( hooks ) {
21262 var stop = hooks.stop;
21263 delete hooks.stop;
21264 stop( gotoEnd );
21265 };
21266
21267 if ( typeof type !== "string" ) {
21268 gotoEnd = clearQueue;
21269 clearQueue = type;
21270 type = undefined;
21271 }
21272 if ( clearQueue && type !== false ) {
21273 this.queue( type || "fx", [] );
21274 }
21275
21276 return this.each( function() {
21277 var dequeue = true,
21278 index = type != null && type + "queueHooks",
21279 timers = jQuery.timers,
21280 data = dataPriv.get( this );
21281
21282 if ( index ) {
21283 if ( data[ index ] && data[ index ].stop ) {
21284 stopQueue( data[ index ] );
21285 }
21286 } else {
21287 for ( index in data ) {
21288 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
21289 stopQueue( data[ index ] );
21290 }
21291 }
21292 }
21293
21294 for ( index = timers.length; index--; ) {
21295 if ( timers[ index ].elem === this &&
21296 ( type == null || timers[ index ].queue === type ) ) {
21297
21298 timers[ index ].anim.stop( gotoEnd );
21299 dequeue = false;
21300 timers.splice( index, 1 );
21301 }
21302 }
21303
21304 // Start the next in the queue if the last step wasn't forced.
21305 // Timers currently will call their complete callbacks, which
21306 // will dequeue but only if they were gotoEnd.
21307 if ( dequeue || !gotoEnd ) {
21308 jQuery.dequeue( this, type );
21309 }
21310 } );
21311 },
21312 finish: function( type ) {
21313 if ( type !== false ) {
21314 type = type || "fx";
21315 }
21316 return this.each( function() {
21317 var index,
21318 data = dataPriv.get( this ),
21319 queue = data[ type + "queue" ],
21320 hooks = data[ type + "queueHooks" ],
21321 timers = jQuery.timers,
21322 length = queue ? queue.length : 0;
21323
21324 // Enable finishing flag on private data
21325 data.finish = true;
21326
21327 // Empty the queue first
21328 jQuery.queue( this, type, [] );
21329
21330 if ( hooks && hooks.stop ) {
21331 hooks.stop.call( this, true );
21332 }
21333
21334 // Look for any active animations, and finish them
21335 for ( index = timers.length; index--; ) {
21336 if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
21337 timers[ index ].anim.stop( true );
21338 timers.splice( index, 1 );
21339 }
21340 }
21341
21342 // Look for any animations in the old queue and finish them
21343 for ( index = 0; index < length; index++ ) {
21344 if ( queue[ index ] && queue[ index ].finish ) {
21345 queue[ index ].finish.call( this );
21346 }
21347 }
21348
21349 // Turn off finishing flag
21350 delete data.finish;
21351 } );
21352 }
21353 } );
21354
21355 jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
21356 var cssFn = jQuery.fn[ name ];
21357 jQuery.fn[ name ] = function( speed, easing, callback ) {
21358 return speed == null || typeof speed === "boolean" ?
21359 cssFn.apply( this, arguments ) :
21360 this.animate( genFx( name, true ), speed, easing, callback );
21361 };
21362 } );
21363
21364 // Generate shortcuts for custom animations
21365 jQuery.each( {
21366 slideDown: genFx( "show" ),
21367 slideUp: genFx( "hide" ),
21368 slideToggle: genFx( "toggle" ),
21369 fadeIn: { opacity: "show" },
21370 fadeOut: { opacity: "hide" },
21371 fadeToggle: { opacity: "toggle" }
21372 }, function( name, props ) {
21373 jQuery.fn[ name ] = function( speed, easing, callback ) {
21374 return this.animate( props, speed, easing, callback );
21375 };
21376 } );
21377
21378 jQuery.timers = [];
21379 jQuery.fx.tick = function() {
21380 var timer,
21381 i = 0,
21382 timers = jQuery.timers;
21383
21384 fxNow = jQuery.now();
21385
21386 for ( ; i < timers.length; i++ ) {
21387 timer = timers[ i ];
21388
21389 // Run the timer and safely remove it when done (allowing for external removal)
21390 if ( !timer() && timers[ i ] === timer ) {
21391 timers.splice( i--, 1 );
21392 }
21393 }
21394
21395 if ( !timers.length ) {
21396 jQuery.fx.stop();
21397 }
21398 fxNow = undefined;
21399 };
21400
21401 jQuery.fx.timer = function( timer ) {
21402 jQuery.timers.push( timer );
21403 jQuery.fx.start();
21404 };
21405
21406 jQuery.fx.interval = 13;
21407 jQuery.fx.start = function() {
21408 if ( inProgress ) {
21409 return;
21410 }
21411
21412 inProgress = true;
21413 schedule();
21414 };
21415
21416 jQuery.fx.stop = function() {
21417 inProgress = null;
21418 };
21419
21420 jQuery.fx.speeds = {
21421 slow: 600,
21422 fast: 200,
21423
21424 // Default speed
21425 _default: 400
21426 };
21427
21428
21429 // Based off of the plugin by Clint Helfers, with permission.
21430 // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
21431 jQuery.fn.delay = function( time, type ) {
21432 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
21433 type = type || "fx";
21434
21435 return this.queue( type, function( next, hooks ) {
21436 var timeout = window.setTimeout( next, time );
21437 hooks.stop = function() {
21438 window.clearTimeout( timeout );
21439 };
21440 } );
21441 };
21442
21443
21444 ( function() {
21445 var input = document.createElement( "input" ),
21446 select = document.createElement( "select" ),
21447 opt = select.appendChild( document.createElement( "option" ) );
21448
21449 input.type = "checkbox";
21450
21451 // Support: Android <=4.3 only
21452 // Default value for a checkbox should be "on"
21453 support.checkOn = input.value !== "";
21454
21455 // Support: IE <=11 only
21456 // Must access selectedIndex to make default options select
21457 support.optSelected = opt.selected;
21458
21459 // Support: IE <=11 only
21460 // An input loses its value after becoming a radio
21461 input = document.createElement( "input" );
21462 input.value = "t";
21463 input.type = "radio";
21464 support.radioValue = input.value === "t";
21465 } )();
21466
21467
21468 var boolHook,
21469 attrHandle = jQuery.expr.attrHandle;
21470
21471 jQuery.fn.extend( {
21472 attr: function( name, value ) {
21473 return access( this, jQuery.attr, name, value, arguments.length > 1 );
21474 },
21475
21476 removeAttr: function( name ) {
21477 return this.each( function() {
21478 jQuery.removeAttr( this, name );
21479 } );
21480 }
21481 } );
21482
21483 jQuery.extend( {
21484 attr: function( elem, name, value ) {
21485 var ret, hooks,
21486 nType = elem.nodeType;
21487
21488 // Don't get/set attributes on text, comment and attribute nodes
21489 if ( nType === 3 || nType === 8 || nType === 2 ) {
21490 return;
21491 }
21492
21493 // Fallback to prop when attributes are not supported
21494 if ( typeof elem.getAttribute === "undefined" ) {
21495 return jQuery.prop( elem, name, value );
21496 }
21497
21498 // Attribute hooks are determined by the lowercase version
21499 // Grab necessary hook if one is defined
21500 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
21501 hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
21502 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
21503 }
21504
21505 if ( value !== undefined ) {
21506 if ( value === null ) {
21507 jQuery.removeAttr( elem, name );
21508 return;
21509 }
21510
21511 if ( hooks && "set" in hooks &&
21512 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
21513 return ret;
21514 }
21515
21516 elem.setAttribute( name, value + "" );
21517 return value;
21518 }
21519
21520 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
21521 return ret;
21522 }
21523
21524 ret = jQuery.find.attr( elem, name );
21525
21526 // Non-existent attributes return null, we normalize to undefined
21527 return ret == null ? undefined : ret;
21528 },
21529
21530 attrHooks: {
21531 type: {
21532 set: function( elem, value ) {
21533 if ( !support.radioValue && value === "radio" &&
21534 nodeName( elem, "input" ) ) {
21535 var val = elem.value;
21536 elem.setAttribute( "type", value );
21537 if ( val ) {
21538 elem.value = val;
21539 }
21540 return value;
21541 }
21542 }
21543 }
21544 },
21545
21546 removeAttr: function( elem, value ) {
21547 var name,
21548 i = 0,
21549
21550 // Attribute names can contain non-HTML whitespace characters
21551 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
21552 attrNames = value && value.match( rnothtmlwhite );
21553
21554 if ( attrNames && elem.nodeType === 1 ) {
21555 while ( ( name = attrNames[ i++ ] ) ) {
21556 elem.removeAttribute( name );
21557 }
21558 }
21559 }
21560 } );
21561
21562 // Hooks for boolean attributes
21563 boolHook = {
21564 set: function( elem, value, name ) {
21565 if ( value === false ) {
21566
21567 // Remove boolean attributes when set to false
21568 jQuery.removeAttr( elem, name );
21569 } else {
21570 elem.setAttribute( name, name );
21571 }
21572 return name;
21573 }
21574 };
21575
21576 jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
21577 var getter = attrHandle[ name ] || jQuery.find.attr;
21578
21579 attrHandle[ name ] = function( elem, name, isXML ) {
21580 var ret, handle,
21581 lowercaseName = name.toLowerCase();
21582
21583 if ( !isXML ) {
21584
21585 // Avoid an infinite loop by temporarily removing this function from the getter
21586 handle = attrHandle[ lowercaseName ];
21587 attrHandle[ lowercaseName ] = ret;
21588 ret = getter( elem, name, isXML ) != null ?
21589 lowercaseName :
21590 null;
21591 attrHandle[ lowercaseName ] = handle;
21592 }
21593 return ret;
21594 };
21595 } );
21596
21597
21598
21599
21600 var rfocusable = /^(?:input|select|textarea|button)$/i,
21601 rclickable = /^(?:a|area)$/i;
21602
21603 jQuery.fn.extend( {
21604 prop: function( name, value ) {
21605 return access( this, jQuery.prop, name, value, arguments.length > 1 );
21606 },
21607
21608 removeProp: function( name ) {
21609 return this.each( function() {
21610 delete this[ jQuery.propFix[ name ] || name ];
21611 } );
21612 }
21613 } );
21614
21615 jQuery.extend( {
21616 prop: function( elem, name, value ) {
21617 var ret, hooks,
21618 nType = elem.nodeType;
21619
21620 // Don't get/set properties on text, comment and attribute nodes
21621 if ( nType === 3 || nType === 8 || nType === 2 ) {
21622 return;
21623 }
21624
21625 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
21626
21627 // Fix name and attach hooks
21628 name = jQuery.propFix[ name ] || name;
21629 hooks = jQuery.propHooks[ name ];
21630 }
21631
21632 if ( value !== undefined ) {
21633 if ( hooks && "set" in hooks &&
21634 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
21635 return ret;
21636 }
21637
21638 return ( elem[ name ] = value );
21639 }
21640
21641 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
21642 return ret;
21643 }
21644
21645 return elem[ name ];
21646 },
21647
21648 propHooks: {
21649 tabIndex: {
21650 get: function( elem ) {
21651
21652 // Support: IE <=9 - 11 only
21653 // elem.tabIndex doesn't always return the
21654 // correct value when it hasn't been explicitly set
21655 // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
21656 // Use proper attribute retrieval(#12072)
21657 var tabindex = jQuery.find.attr( elem, "tabindex" );
21658
21659 if ( tabindex ) {
21660 return parseInt( tabindex, 10 );
21661 }
21662
21663 if (
21664 rfocusable.test( elem.nodeName ) ||
21665 rclickable.test( elem.nodeName ) &&
21666 elem.href
21667 ) {
21668 return 0;
21669 }
21670
21671 return -1;
21672 }
21673 }
21674 },
21675
21676 propFix: {
21677 "for": "htmlFor",
21678 "class": "className"
21679 }
21680 } );
21681
21682 // Support: IE <=11 only
21683 // Accessing the selectedIndex property
21684 // forces the browser to respect setting selected
21685 // on the option
21686 // The getter ensures a default option is selected
21687 // when in an optgroup
21688 // eslint rule "no-unused-expressions" is disabled for this code
21689 // since it considers such accessions noop
21690 if ( !support.optSelected ) {
21691 jQuery.propHooks.selected = {
21692 get: function( elem ) {
21693
21694 /* eslint no-unused-expressions: "off" */
21695
21696 var parent = elem.parentNode;
21697 if ( parent && parent.parentNode ) {
21698 parent.parentNode.selectedIndex;
21699 }
21700 return null;
21701 },
21702 set: function( elem ) {
21703
21704 /* eslint no-unused-expressions: "off" */
21705
21706 var parent = elem.parentNode;
21707 if ( parent ) {
21708 parent.selectedIndex;
21709
21710 if ( parent.parentNode ) {
21711 parent.parentNode.selectedIndex;
21712 }
21713 }
21714 }
21715 };
21716 }
21717
21718 jQuery.each( [
21719 "tabIndex",
21720 "readOnly",
21721 "maxLength",
21722 "cellSpacing",
21723 "cellPadding",
21724 "rowSpan",
21725 "colSpan",
21726 "useMap",
21727 "frameBorder",
21728 "contentEditable"
21729 ], function() {
21730 jQuery.propFix[ this.toLowerCase() ] = this;
21731 } );
21732
21733
21734
21735
21736 // Strip and collapse whitespace according to HTML spec
21737 // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace
21738 function stripAndCollapse( value ) {
21739 var tokens = value.match( rnothtmlwhite ) || [];
21740 return tokens.join( " " );
21741 }
21742
21743
21744 function getClass( elem ) {
21745 return elem.getAttribute && elem.getAttribute( "class" ) || "";
21746 }
21747
21748 jQuery.fn.extend( {
21749 addClass: function( value ) {
21750 var classes, elem, cur, curValue, clazz, j, finalValue,
21751 i = 0;
21752
21753 if ( jQuery.isFunction( value ) ) {
21754 return this.each( function( j ) {
21755 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
21756 } );
21757 }
21758
21759 if ( typeof value === "string" && value ) {
21760 classes = value.match( rnothtmlwhite ) || [];
21761
21762 while ( ( elem = this[ i++ ] ) ) {
21763 curValue = getClass( elem );
21764 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
21765
21766 if ( cur ) {
21767 j = 0;
21768 while ( ( clazz = classes[ j++ ] ) ) {
21769 if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
21770 cur += clazz + " ";
21771 }
21772 }
21773
21774 // Only assign if different to avoid unneeded rendering.
21775 finalValue = stripAndCollapse( cur );
21776 if ( curValue !== finalValue ) {
21777 elem.setAttribute( "class", finalValue );
21778 }
21779 }
21780 }
21781 }
21782
21783 return this;
21784 },
21785
21786 removeClass: function( value ) {
21787 var classes, elem, cur, curValue, clazz, j, finalValue,
21788 i = 0;
21789
21790 if ( jQuery.isFunction( value ) ) {
21791 return this.each( function( j ) {
21792 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
21793 } );
21794 }
21795
21796 if ( !arguments.length ) {
21797 return this.attr( "class", "" );
21798 }
21799
21800 if ( typeof value === "string" && value ) {
21801 classes = value.match( rnothtmlwhite ) || [];
21802
21803 while ( ( elem = this[ i++ ] ) ) {
21804 curValue = getClass( elem );
21805
21806 // This expression is here for better compressibility (see addClass)
21807 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
21808
21809 if ( cur ) {
21810 j = 0;
21811 while ( ( clazz = classes[ j++ ] ) ) {
21812
21813 // Remove *all* instances
21814 while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
21815 cur = cur.replace( " " + clazz + " ", " " );
21816 }
21817 }
21818
21819 // Only assign if different to avoid unneeded rendering.
21820 finalValue = stripAndCollapse( cur );
21821 if ( curValue !== finalValue ) {
21822 elem.setAttribute( "class", finalValue );
21823 }
21824 }
21825 }
21826 }
21827
21828 return this;
21829 },
21830
21831 toggleClass: function( value, stateVal ) {
21832 var type = typeof value;
21833
21834 if ( typeof stateVal === "boolean" && type === "string" ) {
21835 return stateVal ? this.addClass( value ) : this.removeClass( value );
21836 }
21837
21838 if ( jQuery.isFunction( value ) ) {
21839 return this.each( function( i ) {
21840 jQuery( this ).toggleClass(
21841 value.call( this, i, getClass( this ), stateVal ),
21842 stateVal
21843 );
21844 } );
21845 }
21846
21847 return this.each( function() {
21848 var className, i, self, classNames;
21849
21850 if ( type === "string" ) {
21851
21852 // Toggle individual class names
21853 i = 0;
21854 self = jQuery( this );
21855 classNames = value.match( rnothtmlwhite ) || [];
21856
21857 while ( ( className = classNames[ i++ ] ) ) {
21858
21859 // Check each className given, space separated list
21860 if ( self.hasClass( className ) ) {
21861 self.removeClass( className );
21862 } else {
21863 self.addClass( className );
21864 }
21865 }
21866
21867 // Toggle whole class name
21868 } else if ( value === undefined || type === "boolean" ) {
21869 className = getClass( this );
21870 if ( className ) {
21871
21872 // Store className if set
21873 dataPriv.set( this, "__className__", className );
21874 }
21875
21876 // If the element has a class name or if we're passed `false`,
21877 // then remove the whole classname (if there was one, the above saved it).
21878 // Otherwise bring back whatever was previously saved (if anything),
21879 // falling back to the empty string if nothing was stored.
21880 if ( this.setAttribute ) {
21881 this.setAttribute( "class",
21882 className || value === false ?
21883 "" :
21884 dataPriv.get( this, "__className__" ) || ""
21885 );
21886 }
21887 }
21888 } );
21889 },
21890
21891 hasClass: function( selector ) {
21892 var className, elem,
21893 i = 0;
21894
21895 className = " " + selector + " ";
21896 while ( ( elem = this[ i++ ] ) ) {
21897 if ( elem.nodeType === 1 &&
21898 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
21899 return true;
21900 }
21901 }
21902
21903 return false;
21904 }
21905 } );
21906
21907
21908
21909
21910 var rreturn = /\r/g;
21911
21912 jQuery.fn.extend( {
21913 val: function( value ) {
21914 var hooks, ret, isFunction,
21915 elem = this[ 0 ];
21916
21917 if ( !arguments.length ) {
21918 if ( elem ) {
21919 hooks = jQuery.valHooks[ elem.type ] ||
21920 jQuery.valHooks[ elem.nodeName.toLowerCase() ];
21921
21922 if ( hooks &&
21923 "get" in hooks &&
21924 ( ret = hooks.get( elem, "value" ) ) !== undefined
21925 ) {
21926 return ret;
21927 }
21928
21929 ret = elem.value;
21930
21931 // Handle most common string cases
21932 if ( typeof ret === "string" ) {
21933 return ret.replace( rreturn, "" );
21934 }
21935
21936 // Handle cases where value is null/undef or number
21937 return ret == null ? "" : ret;
21938 }
21939
21940 return;
21941 }
21942
21943 isFunction = jQuery.isFunction( value );
21944
21945 return this.each( function( i ) {
21946 var val;
21947
21948 if ( this.nodeType !== 1 ) {
21949 return;
21950 }
21951
21952 if ( isFunction ) {
21953 val = value.call( this, i, jQuery( this ).val() );
21954 } else {
21955 val = value;
21956 }
21957
21958 // Treat null/undefined as ""; convert numbers to string
21959 if ( val == null ) {
21960 val = "";
21961
21962 } else if ( typeof val === "number" ) {
21963 val += "";
21964
21965 } else if ( Array.isArray( val ) ) {
21966 val = jQuery.map( val, function( value ) {
21967 return value == null ? "" : value + "";
21968 } );
21969 }
21970
21971 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
21972
21973 // If set returns undefined, fall back to normal setting
21974 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
21975 this.value = val;
21976 }
21977 } );
21978 }
21979 } );
21980
21981 jQuery.extend( {
21982 valHooks: {
21983 option: {
21984 get: function( elem ) {
21985
21986 var val = jQuery.find.attr( elem, "value" );
21987 return val != null ?
21988 val :
21989
21990 // Support: IE <=10 - 11 only
21991 // option.text throws exceptions (#14686, #14858)
21992 // Strip and collapse whitespace
21993 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
21994 stripAndCollapse( jQuery.text( elem ) );
21995 }
21996 },
21997 select: {
21998 get: function( elem ) {
21999 var value, option, i,
22000 options = elem.options,
22001 index = elem.selectedIndex,
22002 one = elem.type === "select-one",
22003 values = one ? null : [],
22004 max = one ? index + 1 : options.length;
22005
22006 if ( index < 0 ) {
22007 i = max;
22008
22009 } else {
22010 i = one ? index : 0;
22011 }
22012
22013 // Loop through all the selected options
22014 for ( ; i < max; i++ ) {
22015 option = options[ i ];
22016
22017 // Support: IE <=9 only
22018 // IE8-9 doesn't update selected after form reset (#2551)
22019 if ( ( option.selected || i === index ) &&
22020
22021 // Don't return options that are disabled or in a disabled optgroup
22022 !option.disabled &&
22023 ( !option.parentNode.disabled ||
22024 !nodeName( option.parentNode, "optgroup" ) ) ) {
22025
22026 // Get the specific value for the option
22027 value = jQuery( option ).val();
22028
22029 // We don't need an array for one selects
22030 if ( one ) {
22031 return value;
22032 }
22033
22034 // Multi-Selects return an array
22035 values.push( value );
22036 }
22037 }
22038
22039 return values;
22040 },
22041
22042 set: function( elem, value ) {
22043 var optionSet, option,
22044 options = elem.options,
22045 values = jQuery.makeArray( value ),
22046 i = options.length;
22047
22048 while ( i-- ) {
22049 option = options[ i ];
22050
22051 /* eslint-disable no-cond-assign */
22052
22053 if ( option.selected =
22054 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
22055 ) {
22056 optionSet = true;
22057 }
22058
22059 /* eslint-enable no-cond-assign */
22060 }
22061
22062 // Force browsers to behave consistently when non-matching value is set
22063 if ( !optionSet ) {
22064 elem.selectedIndex = -1;
22065 }
22066 return values;
22067 }
22068 }
22069 }
22070 } );
22071
22072 // Radios and checkboxes getter/setter
22073 jQuery.each( [ "radio", "checkbox" ], function() {
22074 jQuery.valHooks[ this ] = {
22075 set: function( elem, value ) {
22076 if ( Array.isArray( value ) ) {
22077 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
22078 }
22079 }
22080 };
22081 if ( !support.checkOn ) {
22082 jQuery.valHooks[ this ].get = function( elem ) {
22083 return elem.getAttribute( "value" ) === null ? "on" : elem.value;
22084 };
22085 }
22086 } );
22087
22088
22089
22090
22091 // Return jQuery for attributes-only inclusion
22092
22093
22094 var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
22095
22096 jQuery.extend( jQuery.event, {
22097
22098 trigger: function( event, data, elem, onlyHandlers ) {
22099
22100 var i, cur, tmp, bubbleType, ontype, handle, special,
22101 eventPath = [ elem || document ],
22102 type = hasOwn.call( event, "type" ) ? event.type : event,
22103 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
22104
22105 cur = tmp = elem = elem || document;
22106
22107 // Don't do events on text and comment nodes
22108 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
22109 return;
22110 }
22111
22112 // focus/blur morphs to focusin/out; ensure we're not firing them right now
22113 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
22114 return;
22115 }
22116
22117 if ( type.indexOf( "." ) > -1 ) {
22118
22119 // Namespaced trigger; create a regexp to match event type in handle()
22120 namespaces = type.split( "." );
22121 type = namespaces.shift();
22122 namespaces.sort();
22123 }
22124 ontype = type.indexOf( ":" ) < 0 && "on" + type;
22125
22126 // Caller can pass in a jQuery.Event object, Object, or just an event type string
22127 event = event[ jQuery.expando ] ?
22128 event :
22129 new jQuery.Event( type, typeof event === "object" && event );
22130
22131 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
22132 event.isTrigger = onlyHandlers ? 2 : 3;
22133 event.namespace = namespaces.join( "." );
22134 event.rnamespace = event.namespace ?
22135 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
22136 null;
22137
22138 // Clean up the event in case it is being reused
22139 event.result = undefined;
22140 if ( !event.target ) {
22141 event.target = elem;
22142 }
22143
22144 // Clone any incoming data and prepend the event, creating the handler arg list
22145 data = data == null ?
22146 [ event ] :
22147 jQuery.makeArray( data, [ event ] );
22148
22149 // Allow special events to draw outside the lines
22150 special = jQuery.event.special[ type ] || {};
22151 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
22152 return;
22153 }
22154
22155 // Determine event propagation path in advance, per W3C events spec (#9951)
22156 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
22157 if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
22158
22159 bubbleType = special.delegateType || type;
22160 if ( !rfocusMorph.test( bubbleType + type ) ) {
22161 cur = cur.parentNode;
22162 }
22163 for ( ; cur; cur = cur.parentNode ) {
22164 eventPath.push( cur );
22165 tmp = cur;
22166 }
22167
22168 // Only add window if we got to document (e.g., not plain obj or detached DOM)
22169 if ( tmp === ( elem.ownerDocument || document ) ) {
22170 eventPath.push( tmp.defaultView || tmp.parentWindow || window );
22171 }
22172 }
22173
22174 // Fire handlers on the event path
22175 i = 0;
22176 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
22177
22178 event.type = i > 1 ?
22179 bubbleType :
22180 special.bindType || type;
22181
22182 // jQuery handler
22183 handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
22184 dataPriv.get( cur, "handle" );
22185 if ( handle ) {
22186 handle.apply( cur, data );
22187 }
22188
22189 // Native handler
22190 handle = ontype && cur[ ontype ];
22191 if ( handle && handle.apply && acceptData( cur ) ) {
22192 event.result = handle.apply( cur, data );
22193 if ( event.result === false ) {
22194 event.preventDefault();
22195 }
22196 }
22197 }
22198 event.type = type;
22199
22200 // If nobody prevented the default action, do it now
22201 if ( !onlyHandlers && !event.isDefaultPrevented() ) {
22202
22203 if ( ( !special._default ||
22204 special._default.apply( eventPath.pop(), data ) === false ) &&
22205 acceptData( elem ) ) {
22206
22207 // Call a native DOM method on the target with the same name as the event.
22208 // Don't do default actions on window, that's where global variables be (#6170)
22209 if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
22210
22211 // Don't re-trigger an onFOO event when we call its FOO() method
22212 tmp = elem[ ontype ];
22213
22214 if ( tmp ) {
22215 elem[ ontype ] = null;
22216 }
22217
22218 // Prevent re-triggering of the same event, since we already bubbled it above
22219 jQuery.event.triggered = type;
22220 elem[ type ]();
22221 jQuery.event.triggered = undefined;
22222
22223 if ( tmp ) {
22224 elem[ ontype ] = tmp;
22225 }
22226 }
22227 }
22228 }
22229
22230 return event.result;
22231 },
22232
22233 // Piggyback on a donor event to simulate a different one
22234 // Used only for `focus(in | out)` events
22235 simulate: function( type, elem, event ) {
22236 var e = jQuery.extend(
22237 new jQuery.Event(),
22238 event,
22239 {
22240 type: type,
22241 isSimulated: true
22242 }
22243 );
22244
22245 jQuery.event.trigger( e, null, elem );
22246 }
22247
22248 } );
22249
22250 jQuery.fn.extend( {
22251
22252 trigger: function( type, data ) {
22253 return this.each( function() {
22254 jQuery.event.trigger( type, data, this );
22255 } );
22256 },
22257 triggerHandler: function( type, data ) {
22258 var elem = this[ 0 ];
22259 if ( elem ) {
22260 return jQuery.event.trigger( type, data, elem, true );
22261 }
22262 }
22263 } );
22264
22265
22266 jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
22267 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
22268 "change select submit keydown keypress keyup contextmenu" ).split( " " ),
22269 function( i, name ) {
22270
22271 // Handle event binding
22272 jQuery.fn[ name ] = function( data, fn ) {
22273 return arguments.length > 0 ?
22274 this.on( name, null, data, fn ) :
22275 this.trigger( name );
22276 };
22277 } );
22278
22279 jQuery.fn.extend( {
22280 hover: function( fnOver, fnOut ) {
22281 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
22282 }
22283 } );
22284
22285
22286
22287
22288 support.focusin = "onfocusin" in window;
22289
22290
22291 // Support: Firefox <=44
22292 // Firefox doesn't have focus(in | out) events
22293 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
22294 //
22295 // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
22296 // focus(in | out) events fire after focus & blur events,
22297 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
22298 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
22299 if ( !support.focusin ) {
22300 jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
22301
22302 // Attach a single capturing handler on the document while someone wants focusin/focusout
22303 var handler = function( event ) {
22304 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
22305 };
22306
22307 jQuery.event.special[ fix ] = {
22308 setup: function() {
22309 var doc = this.ownerDocument || this,
22310 attaches = dataPriv.access( doc, fix );
22311
22312 if ( !attaches ) {
22313 doc.addEventListener( orig, handler, true );
22314 }
22315 dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
22316 },
22317 teardown: function() {
22318 var doc = this.ownerDocument || this,
22319 attaches = dataPriv.access( doc, fix ) - 1;
22320
22321 if ( !attaches ) {
22322 doc.removeEventListener( orig, handler, true );
22323 dataPriv.remove( doc, fix );
22324
22325 } else {
22326 dataPriv.access( doc, fix, attaches );
22327 }
22328 }
22329 };
22330 } );
22331 }
22332 var location = window.location;
22333
22334 var nonce = jQuery.now();
22335
22336 var rquery = ( /\?/ );
22337
22338
22339
22340 // Cross-browser xml parsing
22341 jQuery.parseXML = function( data ) {
22342 var xml;
22343 if ( !data || typeof data !== "string" ) {
22344 return null;
22345 }
22346
22347 // Support: IE 9 - 11 only
22348 // IE throws on parseFromString with invalid input.
22349 try {
22350 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
22351 } catch ( e ) {
22352 xml = undefined;
22353 }
22354
22355 if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
22356 jQuery.error( "Invalid XML: " + data );
22357 }
22358 return xml;
22359 };
22360
22361
22362 var
22363 rbracket = /\[\]$/,
22364 rCRLF = /\r?\n/g,
22365 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
22366 rsubmittable = /^(?:input|select|textarea|keygen)/i;
22367
22368 function buildParams( prefix, obj, traditional, add ) {
22369 var name;
22370
22371 if ( Array.isArray( obj ) ) {
22372
22373 // Serialize array item.
22374 jQuery.each( obj, function( i, v ) {
22375 if ( traditional || rbracket.test( prefix ) ) {
22376
22377 // Treat each array item as a scalar.
22378 add( prefix, v );
22379
22380 } else {
22381
22382 // Item is non-scalar (array or object), encode its numeric index.
22383 buildParams(
22384 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
22385 v,
22386 traditional,
22387 add
22388 );
22389 }
22390 } );
22391
22392 } else if ( !traditional && jQuery.type( obj ) === "object" ) {
22393
22394 // Serialize object item.
22395 for ( name in obj ) {
22396 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
22397 }
22398
22399 } else {
22400
22401 // Serialize scalar item.
22402 add( prefix, obj );
22403 }
22404 }
22405
22406 // Serialize an array of form elements or a set of
22407 // key/values into a query string
22408 jQuery.param = function( a, traditional ) {
22409 var prefix,
22410 s = [],
22411 add = function( key, valueOrFunction ) {
22412
22413 // If value is a function, invoke it and use its return value
22414 var value = jQuery.isFunction( valueOrFunction ) ?
22415 valueOrFunction() :
22416 valueOrFunction;
22417
22418 s[ s.length ] = encodeURIComponent( key ) + "=" +
22419 encodeURIComponent( value == null ? "" : value );
22420 };
22421
22422 // If an array was passed in, assume that it is an array of form elements.
22423 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
22424
22425 // Serialize the form elements
22426 jQuery.each( a, function() {
22427 add( this.name, this.value );
22428 } );
22429
22430 } else {
22431
22432 // If traditional, encode the "old" way (the way 1.3.2 or older
22433 // did it), otherwise encode params recursively.
22434 for ( prefix in a ) {
22435 buildParams( prefix, a[ prefix ], traditional, add );
22436 }
22437 }
22438
22439 // Return the resulting serialization
22440 return s.join( "&" );
22441 };
22442
22443 jQuery.fn.extend( {
22444 serialize: function() {
22445 return jQuery.param( this.serializeArray() );
22446 },
22447 serializeArray: function() {
22448 return this.map( function() {
22449
22450 // Can add propHook for "elements" to filter or add form elements
22451 var elements = jQuery.prop( this, "elements" );
22452 return elements ? jQuery.makeArray( elements ) : this;
22453 } )
22454 .filter( function() {
22455 var type = this.type;
22456
22457 // Use .is( ":disabled" ) so that fieldset[disabled] works
22458 return this.name && !jQuery( this ).is( ":disabled" ) &&
22459 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
22460 ( this.checked || !rcheckableType.test( type ) );
22461 } )
22462 .map( function( i, elem ) {
22463 var val = jQuery( this ).val();
22464
22465 if ( val == null ) {
22466 return null;
22467 }
22468
22469 if ( Array.isArray( val ) ) {
22470 return jQuery.map( val, function( val ) {
22471 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
22472 } );
22473 }
22474
22475 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
22476 } ).get();
22477 }
22478 } );
22479
22480
22481 var
22482 r20 = /%20/g,
22483 rhash = /#.*$/,
22484 rantiCache = /([?&])_=[^&]*/,
22485 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
22486
22487 // #7653, #8125, #8152: local protocol detection
22488 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
22489 rnoContent = /^(?:GET|HEAD)$/,
22490 rprotocol = /^\/\//,
22491
22492 /* Prefilters
22493 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
22494 * 2) These are called:
22495 * - BEFORE asking for a transport
22496 * - AFTER param serialization (s.data is a string if s.processData is true)
22497 * 3) key is the dataType
22498 * 4) the catchall symbol "*" can be used
22499 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
22500 */
22501 prefilters = {},
22502
22503 /* Transports bindings
22504 * 1) key is the dataType
22505 * 2) the catchall symbol "*" can be used
22506 * 3) selection will start with transport dataType and THEN go to "*" if needed
22507 */
22508 transports = {},
22509
22510 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
22511 allTypes = "*/".concat( "*" ),
22512
22513 // Anchor tag for parsing the document origin
22514 originAnchor = document.createElement( "a" );
22515 originAnchor.href = location.href;
22516
22517 // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
22518 function addToPrefiltersOrTransports( structure ) {
22519
22520 // dataTypeExpression is optional and defaults to "*"
22521 return function( dataTypeExpression, func ) {
22522
22523 if ( typeof dataTypeExpression !== "string" ) {
22524 func = dataTypeExpression;
22525 dataTypeExpression = "*";
22526 }
22527
22528 var dataType,
22529 i = 0,
22530 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
22531
22532 if ( jQuery.isFunction( func ) ) {
22533
22534 // For each dataType in the dataTypeExpression
22535 while ( ( dataType = dataTypes[ i++ ] ) ) {
22536
22537 // Prepend if requested
22538 if ( dataType[ 0 ] === "+" ) {
22539 dataType = dataType.slice( 1 ) || "*";
22540 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
22541
22542 // Otherwise append
22543 } else {
22544 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
22545 }
22546 }
22547 }
22548 };
22549 }
22550
22551 // Base inspection function for prefilters and transports
22552 function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
22553
22554 var inspected = {},
22555 seekingTransport = ( structure === transports );
22556
22557 function inspect( dataType ) {
22558 var selected;
22559 inspected[ dataType ] = true;
22560 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
22561 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
22562 if ( typeof dataTypeOrTransport === "string" &&
22563 !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
22564
22565 options.dataTypes.unshift( dataTypeOrTransport );
22566 inspect( dataTypeOrTransport );
22567 return false;
22568 } else if ( seekingTransport ) {
22569 return !( selected = dataTypeOrTransport );
22570 }
22571 } );
22572 return selected;
22573 }
22574
22575 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
22576 }
22577
22578 // A special extend for ajax options
22579 // that takes "flat" options (not to be deep extended)
22580 // Fixes #9887
22581 function ajaxExtend( target, src ) {
22582 var key, deep,
22583 flatOptions = jQuery.ajaxSettings.flatOptions || {};
22584
22585 for ( key in src ) {
22586 if ( src[ key ] !== undefined ) {
22587 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
22588 }
22589 }
22590 if ( deep ) {
22591 jQuery.extend( true, target, deep );
22592 }
22593
22594 return target;
22595 }
22596
22597 /* Handles responses to an ajax request:
22598 * - finds the right dataType (mediates between content-type and expected dataType)
22599 * - returns the corresponding response
22600 */
22601 function ajaxHandleResponses( s, jqXHR, responses ) {
22602
22603 var ct, type, finalDataType, firstDataType,
22604 contents = s.contents,
22605 dataTypes = s.dataTypes;
22606
22607 // Remove auto dataType and get content-type in the process
22608 while ( dataTypes[ 0 ] === "*" ) {
22609 dataTypes.shift();
22610 if ( ct === undefined ) {
22611 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
22612 }
22613 }
22614
22615 // Check if we're dealing with a known content-type
22616 if ( ct ) {
22617 for ( type in contents ) {
22618 if ( contents[ type ] && contents[ type ].test( ct ) ) {
22619 dataTypes.unshift( type );
22620 break;
22621 }
22622 }
22623 }
22624
22625 // Check to see if we have a response for the expected dataType
22626 if ( dataTypes[ 0 ] in responses ) {
22627 finalDataType = dataTypes[ 0 ];
22628 } else {
22629
22630 // Try convertible dataTypes
22631 for ( type in responses ) {
22632 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
22633 finalDataType = type;
22634 break;
22635 }
22636 if ( !firstDataType ) {
22637 firstDataType = type;
22638 }
22639 }
22640
22641 // Or just use first one
22642 finalDataType = finalDataType || firstDataType;
22643 }
22644
22645 // If we found a dataType
22646 // We add the dataType to the list if needed
22647 // and return the corresponding response
22648 if ( finalDataType ) {
22649 if ( finalDataType !== dataTypes[ 0 ] ) {
22650 dataTypes.unshift( finalDataType );
22651 }
22652 return responses[ finalDataType ];
22653 }
22654 }
22655
22656 /* Chain conversions given the request and the original response
22657 * Also sets the responseXXX fields on the jqXHR instance
22658 */
22659 function ajaxConvert( s, response, jqXHR, isSuccess ) {
22660 var conv2, current, conv, tmp, prev,
22661 converters = {},
22662
22663 // Work with a copy of dataTypes in case we need to modify it for conversion
22664 dataTypes = s.dataTypes.slice();
22665
22666 // Create converters map with lowercased keys
22667 if ( dataTypes[ 1 ] ) {
22668 for ( conv in s.converters ) {
22669 converters[ conv.toLowerCase() ] = s.converters[ conv ];
22670 }
22671 }
22672
22673 current = dataTypes.shift();
22674
22675 // Convert to each sequential dataType
22676 while ( current ) {
22677
22678 if ( s.responseFields[ current ] ) {
22679 jqXHR[ s.responseFields[ current ] ] = response;
22680 }
22681
22682 // Apply the dataFilter if provided
22683 if ( !prev && isSuccess && s.dataFilter ) {
22684 response = s.dataFilter( response, s.dataType );
22685 }
22686
22687 prev = current;
22688 current = dataTypes.shift();
22689
22690 if ( current ) {
22691
22692 // There's only work to do if current dataType is non-auto
22693 if ( current === "*" ) {
22694
22695 current = prev;
22696
22697 // Convert response if prev dataType is non-auto and differs from current
22698 } else if ( prev !== "*" && prev !== current ) {
22699
22700 // Seek a direct converter
22701 conv = converters[ prev + " " + current ] || converters[ "* " + current ];
22702
22703 // If none found, seek a pair
22704 if ( !conv ) {
22705 for ( conv2 in converters ) {
22706
22707 // If conv2 outputs current
22708 tmp = conv2.split( " " );
22709 if ( tmp[ 1 ] === current ) {
22710
22711 // If prev can be converted to accepted input
22712 conv = converters[ prev + " " + tmp[ 0 ] ] ||
22713 converters[ "* " + tmp[ 0 ] ];
22714 if ( conv ) {
22715
22716 // Condense equivalence converters
22717 if ( conv === true ) {
22718 conv = converters[ conv2 ];
22719
22720 // Otherwise, insert the intermediate dataType
22721 } else if ( converters[ conv2 ] !== true ) {
22722 current = tmp[ 0 ];
22723 dataTypes.unshift( tmp[ 1 ] );
22724 }
22725 break;
22726 }
22727 }
22728 }
22729 }
22730
22731 // Apply converter (if not an equivalence)
22732 if ( conv !== true ) {
22733
22734 // Unless errors are allowed to bubble, catch and return them
22735 if ( conv && s.throws ) {
22736 response = conv( response );
22737 } else {
22738 try {
22739 response = conv( response );
22740 } catch ( e ) {
22741 return {
22742 state: "parsererror",
22743 error: conv ? e : "No conversion from " + prev + " to " + current
22744 };
22745 }
22746 }
22747 }
22748 }
22749 }
22750 }
22751
22752 return { state: "success", data: response };
22753 }
22754
22755 jQuery.extend( {
22756
22757 // Counter for holding the number of active queries
22758 active: 0,
22759
22760 // Last-Modified header cache for next request
22761 lastModified: {},
22762 etag: {},
22763
22764 ajaxSettings: {
22765 url: location.href,
22766 type: "GET",
22767 isLocal: rlocalProtocol.test( location.protocol ),
22768 global: true,
22769 processData: true,
22770 async: true,
22771 contentType: "application/x-www-form-urlencoded; charset=UTF-8",
22772
22773 /*
22774 timeout: 0,
22775 data: null,
22776 dataType: null,
22777 username: null,
22778 password: null,
22779 cache: null,
22780 throws: false,
22781 traditional: false,
22782 headers: {},
22783 */
22784
22785 accepts: {
22786 "*": allTypes,
22787 text: "text/plain",
22788 html: "text/html",
22789 xml: "application/xml, text/xml",
22790 json: "application/json, text/javascript"
22791 },
22792
22793 contents: {
22794 xml: /\bxml\b/,
22795 html: /\bhtml/,
22796 json: /\bjson\b/
22797 },
22798
22799 responseFields: {
22800 xml: "responseXML",
22801 text: "responseText",
22802 json: "responseJSON"
22803 },
22804
22805 // Data converters
22806 // Keys separate source (or catchall "*") and destination types with a single space
22807 converters: {
22808
22809 // Convert anything to text
22810 "* text": String,
22811
22812 // Text to html (true = no transformation)
22813 "text html": true,
22814
22815 // Evaluate text as a json expression
22816 "text json": JSON.parse,
22817
22818 // Parse text as xml
22819 "text xml": jQuery.parseXML
22820 },
22821
22822 // For options that shouldn't be deep extended:
22823 // you can add your own custom options here if
22824 // and when you create one that shouldn't be
22825 // deep extended (see ajaxExtend)
22826 flatOptions: {
22827 url: true,
22828 context: true
22829 }
22830 },
22831
22832 // Creates a full fledged settings object into target
22833 // with both ajaxSettings and settings fields.
22834 // If target is omitted, writes into ajaxSettings.
22835 ajaxSetup: function( target, settings ) {
22836 return settings ?
22837
22838 // Building a settings object
22839 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
22840
22841 // Extending ajaxSettings
22842 ajaxExtend( jQuery.ajaxSettings, target );
22843 },
22844
22845 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
22846 ajaxTransport: addToPrefiltersOrTransports( transports ),
22847
22848 // Main method
22849 ajax: function( url, options ) {
22850
22851 // If url is an object, simulate pre-1.5 signature
22852 if ( typeof url === "object" ) {
22853 options = url;
22854 url = undefined;
22855 }
22856
22857 // Force options to be an object
22858 options = options || {};
22859
22860 var transport,
22861
22862 // URL without anti-cache param
22863 cacheURL,
22864
22865 // Response headers
22866 responseHeadersString,
22867 responseHeaders,
22868
22869 // timeout handle
22870 timeoutTimer,
22871
22872 // Url cleanup var
22873 urlAnchor,
22874
22875 // Request state (becomes false upon send and true upon completion)
22876 completed,
22877
22878 // To know if global events are to be dispatched
22879 fireGlobals,
22880
22881 // Loop variable
22882 i,
22883
22884 // uncached part of the url
22885 uncached,
22886
22887 // Create the final options object
22888 s = jQuery.ajaxSetup( {}, options ),
22889
22890 // Callbacks context
22891 callbackContext = s.context || s,
22892
22893 // Context for global events is callbackContext if it is a DOM node or jQuery collection
22894 globalEventContext = s.context &&
22895 ( callbackContext.nodeType || callbackContext.jquery ) ?
22896 jQuery( callbackContext ) :
22897 jQuery.event,
22898
22899 // Deferreds
22900 deferred = jQuery.Deferred(),
22901 completeDeferred = jQuery.Callbacks( "once memory" ),
22902
22903 // Status-dependent callbacks
22904 statusCode = s.statusCode || {},
22905
22906 // Headers (they are sent all at once)
22907 requestHeaders = {},
22908 requestHeadersNames = {},
22909
22910 // Default abort message
22911 strAbort = "canceled",
22912
22913 // Fake xhr
22914 jqXHR = {
22915 readyState: 0,
22916
22917 // Builds headers hashtable if needed
22918 getResponseHeader: function( key ) {
22919 var match;
22920 if ( completed ) {
22921 if ( !responseHeaders ) {
22922 responseHeaders = {};
22923 while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
22924 responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
22925 }
22926 }
22927 match = responseHeaders[ key.toLowerCase() ];
22928 }
22929 return match == null ? null : match;
22930 },
22931
22932 // Raw string
22933 getAllResponseHeaders: function() {
22934 return completed ? responseHeadersString : null;
22935 },
22936
22937 // Caches the header
22938 setRequestHeader: function( name, value ) {
22939 if ( completed == null ) {
22940 name = requestHeadersNames[ name.toLowerCase() ] =
22941 requestHeadersNames[ name.toLowerCase() ] || name;
22942 requestHeaders[ name ] = value;
22943 }
22944 return this;
22945 },
22946
22947 // Overrides response content-type header
22948 overrideMimeType: function( type ) {
22949 if ( completed == null ) {
22950 s.mimeType = type;
22951 }
22952 return this;
22953 },
22954
22955 // Status-dependent callbacks
22956 statusCode: function( map ) {
22957 var code;
22958 if ( map ) {
22959 if ( completed ) {
22960
22961 // Execute the appropriate callbacks
22962 jqXHR.always( map[ jqXHR.status ] );
22963 } else {
22964
22965 // Lazy-add the new callbacks in a way that preserves old ones
22966 for ( code in map ) {
22967 statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
22968 }
22969 }
22970 }
22971 return this;
22972 },
22973
22974 // Cancel the request
22975 abort: function( statusText ) {
22976 var finalText = statusText || strAbort;
22977 if ( transport ) {
22978 transport.abort( finalText );
22979 }
22980 done( 0, finalText );
22981 return this;
22982 }
22983 };
22984
22985 // Attach deferreds
22986 deferred.promise( jqXHR );
22987
22988 // Add protocol if not provided (prefilters might expect it)
22989 // Handle falsy url in the settings object (#10093: consistency with old signature)
22990 // We also use the url parameter if available
22991 s.url = ( ( url || s.url || location.href ) + "" )
22992 .replace( rprotocol, location.protocol + "//" );
22993
22994 // Alias method option to type as per ticket #12004
22995 s.type = options.method || options.type || s.method || s.type;
22996
22997 // Extract dataTypes list
22998 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
22999
23000 // A cross-domain request is in order when the origin doesn't match the current origin.
23001 if ( s.crossDomain == null ) {
23002 urlAnchor = document.createElement( "a" );
23003
23004 // Support: IE <=8 - 11, Edge 12 - 13
23005 // IE throws exception on accessing the href property if url is malformed,
23006 // e.g. http://example.com:80x/
23007 try {
23008 urlAnchor.href = s.url;
23009
23010 // Support: IE <=8 - 11 only
23011 // Anchor's host property isn't correctly set when s.url is relative
23012 urlAnchor.href = urlAnchor.href;
23013 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
23014 urlAnchor.protocol + "//" + urlAnchor.host;
23015 } catch ( e ) {
23016
23017 // If there is an error parsing the URL, assume it is crossDomain,
23018 // it can be rejected by the transport if it is invalid
23019 s.crossDomain = true;
23020 }
23021 }
23022
23023 // Convert data if not already a string
23024 if ( s.data && s.processData && typeof s.data !== "string" ) {
23025 s.data = jQuery.param( s.data, s.traditional );
23026 }
23027
23028 // Apply prefilters
23029 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
23030
23031 // If request was aborted inside a prefilter, stop there
23032 if ( completed ) {
23033 return jqXHR;
23034 }
23035
23036 // We can fire global events as of now if asked to
23037 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
23038 fireGlobals = jQuery.event && s.global;
23039
23040 // Watch for a new set of requests
23041 if ( fireGlobals && jQuery.active++ === 0 ) {
23042 jQuery.event.trigger( "ajaxStart" );
23043 }
23044
23045 // Uppercase the type
23046 s.type = s.type.toUpperCase();
23047
23048 // Determine if request has content
23049 s.hasContent = !rnoContent.test( s.type );
23050
23051 // Save the URL in case we're toying with the If-Modified-Since
23052 // and/or If-None-Match header later on
23053 // Remove hash to simplify url manipulation
23054 cacheURL = s.url.replace( rhash, "" );
23055
23056 // More options handling for requests with no content
23057 if ( !s.hasContent ) {
23058
23059 // Remember the hash so we can put it back
23060 uncached = s.url.slice( cacheURL.length );
23061
23062 // If data is available, append data to url
23063 if ( s.data ) {
23064 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
23065
23066 // #9682: remove data so that it's not used in an eventual retry
23067 delete s.data;
23068 }
23069
23070 // Add or update anti-cache param if needed
23071 if ( s.cache === false ) {
23072 cacheURL = cacheURL.replace( rantiCache, "$1" );
23073 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
23074 }
23075
23076 // Put hash and anti-cache on the URL that will be requested (gh-1732)
23077 s.url = cacheURL + uncached;
23078
23079 // Change '%20' to '+' if this is encoded form body content (gh-2658)
23080 } else if ( s.data && s.processData &&
23081 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
23082 s.data = s.data.replace( r20, "+" );
23083 }
23084
23085 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
23086 if ( s.ifModified ) {
23087 if ( jQuery.lastModified[ cacheURL ] ) {
23088 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
23089 }
23090 if ( jQuery.etag[ cacheURL ] ) {
23091 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
23092 }
23093 }
23094
23095 // Set the correct header, if data is being sent
23096 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
23097 jqXHR.setRequestHeader( "Content-Type", s.contentType );
23098 }
23099
23100 // Set the Accepts header for the server, depending on the dataType
23101 jqXHR.setRequestHeader(
23102 "Accept",
23103 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
23104 s.accepts[ s.dataTypes[ 0 ] ] +
23105 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
23106 s.accepts[ "*" ]
23107 );
23108
23109 // Check for headers option
23110 for ( i in s.headers ) {
23111 jqXHR.setRequestHeader( i, s.headers[ i ] );
23112 }
23113
23114 // Allow custom headers/mimetypes and early abort
23115 if ( s.beforeSend &&
23116 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
23117
23118 // Abort if not done already and return
23119 return jqXHR.abort();
23120 }
23121
23122 // Aborting is no longer a cancellation
23123 strAbort = "abort";
23124
23125 // Install callbacks on deferreds
23126 completeDeferred.add( s.complete );
23127 jqXHR.done( s.success );
23128 jqXHR.fail( s.error );
23129
23130 // Get transport
23131 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
23132
23133 // If no transport, we auto-abort
23134 if ( !transport ) {
23135 done( -1, "No Transport" );
23136 } else {
23137 jqXHR.readyState = 1;
23138
23139 // Send global event
23140 if ( fireGlobals ) {
23141 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
23142 }
23143
23144 // If request was aborted inside ajaxSend, stop there
23145 if ( completed ) {
23146 return jqXHR;
23147 }
23148
23149 // Timeout
23150 if ( s.async && s.timeout > 0 ) {
23151 timeoutTimer = window.setTimeout( function() {
23152 jqXHR.abort( "timeout" );
23153 }, s.timeout );
23154 }
23155
23156 try {
23157 completed = false;
23158 transport.send( requestHeaders, done );
23159 } catch ( e ) {
23160
23161 // Rethrow post-completion exceptions
23162 if ( completed ) {
23163 throw e;
23164 }
23165
23166 // Propagate others as results
23167 done( -1, e );
23168 }
23169 }
23170
23171 // Callback for when everything is done
23172 function done( status, nativeStatusText, responses, headers ) {
23173 var isSuccess, success, error, response, modified,
23174 statusText = nativeStatusText;
23175
23176 // Ignore repeat invocations
23177 if ( completed ) {
23178 return;
23179 }
23180
23181 completed = true;
23182
23183 // Clear timeout if it exists
23184 if ( timeoutTimer ) {
23185 window.clearTimeout( timeoutTimer );
23186 }
23187
23188 // Dereference transport for early garbage collection
23189 // (no matter how long the jqXHR object will be used)
23190 transport = undefined;
23191
23192 // Cache response headers
23193 responseHeadersString = headers || "";
23194
23195 // Set readyState
23196 jqXHR.readyState = status > 0 ? 4 : 0;
23197
23198 // Determine if successful
23199 isSuccess = status >= 200 && status < 300 || status === 304;
23200
23201 // Get response data
23202 if ( responses ) {
23203 response = ajaxHandleResponses( s, jqXHR, responses );
23204 }
23205
23206 // Convert no matter what (that way responseXXX fields are always set)
23207 response = ajaxConvert( s, response, jqXHR, isSuccess );
23208
23209 // If successful, handle type chaining
23210 if ( isSuccess ) {
23211
23212 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
23213 if ( s.ifModified ) {
23214 modified = jqXHR.getResponseHeader( "Last-Modified" );
23215 if ( modified ) {
23216 jQuery.lastModified[ cacheURL ] = modified;
23217 }
23218 modified = jqXHR.getResponseHeader( "etag" );
23219 if ( modified ) {
23220 jQuery.etag[ cacheURL ] = modified;
23221 }
23222 }
23223
23224 // if no content
23225 if ( status === 204 || s.type === "HEAD" ) {
23226 statusText = "nocontent";
23227
23228 // if not modified
23229 } else if ( status === 304 ) {
23230 statusText = "notmodified";
23231
23232 // If we have data, let's convert it
23233 } else {
23234 statusText = response.state;
23235 success = response.data;
23236 error = response.error;
23237 isSuccess = !error;
23238 }
23239 } else {
23240
23241 // Extract error from statusText and normalize for non-aborts
23242 error = statusText;
23243 if ( status || !statusText ) {
23244 statusText = "error";
23245 if ( status < 0 ) {
23246 status = 0;
23247 }
23248 }
23249 }
23250
23251 // Set data for the fake xhr object
23252 jqXHR.status = status;
23253 jqXHR.statusText = ( nativeStatusText || statusText ) + "";
23254
23255 // Success/Error
23256 if ( isSuccess ) {
23257 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
23258 } else {
23259 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
23260 }
23261
23262 // Status-dependent callbacks
23263 jqXHR.statusCode( statusCode );
23264 statusCode = undefined;
23265
23266 if ( fireGlobals ) {
23267 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
23268 [ jqXHR, s, isSuccess ? success : error ] );
23269 }
23270
23271 // Complete
23272 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
23273
23274 if ( fireGlobals ) {
23275 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
23276
23277 // Handle the global AJAX counter
23278 if ( !( --jQuery.active ) ) {
23279 jQuery.event.trigger( "ajaxStop" );
23280 }
23281 }
23282 }
23283
23284 return jqXHR;
23285 },
23286
23287 getJSON: function( url, data, callback ) {
23288 return jQuery.get( url, data, callback, "json" );
23289 },
23290
23291 getScript: function( url, callback ) {
23292 return jQuery.get( url, undefined, callback, "script" );
23293 }
23294 } );
23295
23296 jQuery.each( [ "get", "post" ], function( i, method ) {
23297 jQuery[ method ] = function( url, data, callback, type ) {
23298
23299 // Shift arguments if data argument was omitted
23300 if ( jQuery.isFunction( data ) ) {
23301 type = type || callback;
23302 callback = data;
23303 data = undefined;
23304 }
23305
23306 // The url can be an options object (which then must have .url)
23307 return jQuery.ajax( jQuery.extend( {
23308 url: url,
23309 type: method,
23310 dataType: type,
23311 data: data,
23312 success: callback
23313 }, jQuery.isPlainObject( url ) && url ) );
23314 };
23315 } );
23316
23317
23318 jQuery._evalUrl = function( url ) {
23319 return jQuery.ajax( {
23320 url: url,
23321
23322 // Make this explicit, since user can override this through ajaxSetup (#11264)
23323 type: "GET",
23324 dataType: "script",
23325 cache: true,
23326 async: false,
23327 global: false,
23328 "throws": true
23329 } );
23330 };
23331
23332
23333 jQuery.fn.extend( {
23334 wrapAll: function( html ) {
23335 var wrap;
23336
23337 if ( this[ 0 ] ) {
23338 if ( jQuery.isFunction( html ) ) {
23339 html = html.call( this[ 0 ] );
23340 }
23341
23342 // The elements to wrap the target around
23343 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
23344
23345 if ( this[ 0 ].parentNode ) {
23346 wrap.insertBefore( this[ 0 ] );
23347 }
23348
23349 wrap.map( function() {
23350 var elem = this;
23351
23352 while ( elem.firstElementChild ) {
23353 elem = elem.firstElementChild;
23354 }
23355
23356 return elem;
23357 } ).append( this );
23358 }
23359
23360 return this;
23361 },
23362
23363 wrapInner: function( html ) {
23364 if ( jQuery.isFunction( html ) ) {
23365 return this.each( function( i ) {
23366 jQuery( this ).wrapInner( html.call( this, i ) );
23367 } );
23368 }
23369
23370 return this.each( function() {
23371 var self = jQuery( this ),
23372 contents = self.contents();
23373
23374 if ( contents.length ) {
23375 contents.wrapAll( html );
23376
23377 } else {
23378 self.append( html );
23379 }
23380 } );
23381 },
23382
23383 wrap: function( html ) {
23384 var isFunction = jQuery.isFunction( html );
23385
23386 return this.each( function( i ) {
23387 jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
23388 } );
23389 },
23390
23391 unwrap: function( selector ) {
23392 this.parent( selector ).not( "body" ).each( function() {
23393 jQuery( this ).replaceWith( this.childNodes );
23394 } );
23395 return this;
23396 }
23397 } );
23398
23399
23400 jQuery.expr.pseudos.hidden = function( elem ) {
23401 return !jQuery.expr.pseudos.visible( elem );
23402 };
23403 jQuery.expr.pseudos.visible = function( elem ) {
23404 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
23405 };
23406
23407
23408
23409
23410 jQuery.ajaxSettings.xhr = function() {
23411 try {
23412 return new window.XMLHttpRequest();
23413 } catch ( e ) {}
23414 };
23415
23416 var xhrSuccessStatus = {
23417
23418 // File protocol always yields status code 0, assume 200
23419 0: 200,
23420
23421 // Support: IE <=9 only
23422 // #1450: sometimes IE returns 1223 when it should be 204
23423 1223: 204
23424 },
23425 xhrSupported = jQuery.ajaxSettings.xhr();
23426
23427 support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
23428 support.ajax = xhrSupported = !!xhrSupported;
23429
23430 jQuery.ajaxTransport( function( options ) {
23431 var callback, errorCallback;
23432
23433 // Cross domain only allowed if supported through XMLHttpRequest
23434 if ( support.cors || xhrSupported && !options.crossDomain ) {
23435 return {
23436 send: function( headers, complete ) {
23437 var i,
23438 xhr = options.xhr();
23439
23440 xhr.open(
23441 options.type,
23442 options.url,
23443 options.async,
23444 options.username,
23445 options.password
23446 );
23447
23448 // Apply custom fields if provided
23449 if ( options.xhrFields ) {
23450 for ( i in options.xhrFields ) {
23451 xhr[ i ] = options.xhrFields[ i ];
23452 }
23453 }
23454
23455 // Override mime type if needed
23456 if ( options.mimeType && xhr.overrideMimeType ) {
23457 xhr.overrideMimeType( options.mimeType );
23458 }
23459
23460 // X-Requested-With header
23461 // For cross-domain requests, seeing as conditions for a preflight are
23462 // akin to a jigsaw puzzle, we simply never set it to be sure.
23463 // (it can always be set on a per-request basis or even using ajaxSetup)
23464 // For same-domain requests, won't change header if already provided.
23465 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
23466 headers[ "X-Requested-With" ] = "XMLHttpRequest";
23467 }
23468
23469 // Set headers
23470 for ( i in headers ) {
23471 xhr.setRequestHeader( i, headers[ i ] );
23472 }
23473
23474 // Callback
23475 callback = function( type ) {
23476 return function() {
23477 if ( callback ) {
23478 callback = errorCallback = xhr.onload =
23479 xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
23480
23481 if ( type === "abort" ) {
23482 xhr.abort();
23483 } else if ( type === "error" ) {
23484
23485 // Support: IE <=9 only
23486 // On a manual native abort, IE9 throws
23487 // errors on any property access that is not readyState
23488 if ( typeof xhr.status !== "number" ) {
23489 complete( 0, "error" );
23490 } else {
23491 complete(
23492
23493 // File: protocol always yields status 0; see #8605, #14207
23494 xhr.status,
23495 xhr.statusText
23496 );
23497 }
23498 } else {
23499 complete(
23500 xhrSuccessStatus[ xhr.status ] || xhr.status,
23501 xhr.statusText,
23502
23503 // Support: IE <=9 only
23504 // IE9 has no XHR2 but throws on binary (trac-11426)
23505 // For XHR2 non-text, let the caller handle it (gh-2498)
23506 ( xhr.responseType || "text" ) !== "text" ||
23507 typeof xhr.responseText !== "string" ?
23508 { binary: xhr.response } :
23509 { text: xhr.responseText },
23510 xhr.getAllResponseHeaders()
23511 );
23512 }
23513 }
23514 };
23515 };
23516
23517 // Listen to events
23518 xhr.onload = callback();
23519 errorCallback = xhr.onerror = callback( "error" );
23520
23521 // Support: IE 9 only
23522 // Use onreadystatechange to replace onabort
23523 // to handle uncaught aborts
23524 if ( xhr.onabort !== undefined ) {
23525 xhr.onabort = errorCallback;
23526 } else {
23527 xhr.onreadystatechange = function() {
23528
23529 // Check readyState before timeout as it changes
23530 if ( xhr.readyState === 4 ) {
23531
23532 // Allow onerror to be called first,
23533 // but that will not handle a native abort
23534 // Also, save errorCallback to a variable
23535 // as xhr.onerror cannot be accessed
23536 window.setTimeout( function() {
23537 if ( callback ) {
23538 errorCallback();
23539 }
23540 } );
23541 }
23542 };
23543 }
23544
23545 // Create the abort callback
23546 callback = callback( "abort" );
23547
23548 try {
23549
23550 // Do send the request (this may raise an exception)
23551 xhr.send( options.hasContent && options.data || null );
23552 } catch ( e ) {
23553
23554 // #14683: Only rethrow if this hasn't been notified as an error yet
23555 if ( callback ) {
23556 throw e;
23557 }
23558 }
23559 },
23560
23561 abort: function() {
23562 if ( callback ) {
23563 callback();
23564 }
23565 }
23566 };
23567 }
23568 } );
23569
23570
23571
23572
23573 // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
23574 jQuery.ajaxPrefilter( function( s ) {
23575 if ( s.crossDomain ) {
23576 s.contents.script = false;
23577 }
23578 } );
23579
23580 // Install script dataType
23581 jQuery.ajaxSetup( {
23582 accepts: {
23583 script: "text/javascript, application/javascript, " +
23584 "application/ecmascript, application/x-ecmascript"
23585 },
23586 contents: {
23587 script: /\b(?:java|ecma)script\b/
23588 },
23589 converters: {
23590 "text script": function( text ) {
23591 jQuery.globalEval( text );
23592 return text;
23593 }
23594 }
23595 } );
23596
23597 // Handle cache's special case and crossDomain
23598 jQuery.ajaxPrefilter( "script", function( s ) {
23599 if ( s.cache === undefined ) {
23600 s.cache = false;
23601 }
23602 if ( s.crossDomain ) {
23603 s.type = "GET";
23604 }
23605 } );
23606
23607 // Bind script tag hack transport
23608 jQuery.ajaxTransport( "script", function( s ) {
23609
23610 // This transport only deals with cross domain requests
23611 if ( s.crossDomain ) {
23612 var script, callback;
23613 return {
23614 send: function( _, complete ) {
23615 script = jQuery( "<script>" ).prop( {
23616 charset: s.scriptCharset,
23617 src: s.url
23618 } ).on(
23619 "load error",
23620 callback = function( evt ) {
23621 script.remove();
23622 callback = null;
23623 if ( evt ) {
23624 complete( evt.type === "error" ? 404 : 200, evt.type );
23625 }
23626 }
23627 );
23628
23629 // Use native DOM manipulation to avoid our domManip AJAX trickery
23630 document.head.appendChild( script[ 0 ] );
23631 },
23632 abort: function() {
23633 if ( callback ) {
23634 callback();
23635 }
23636 }
23637 };
23638 }
23639 } );
23640
23641
23642
23643
23644 var oldCallbacks = [],
23645 rjsonp = /(=)\?(?=&|$)|\?\?/;
23646
23647 // Default jsonp settings
23648 jQuery.ajaxSetup( {
23649 jsonp: "callback",
23650 jsonpCallback: function() {
23651 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
23652 this[ callback ] = true;
23653 return callback;
23654 }
23655 } );
23656
23657 // Detect, normalize options and install callbacks for jsonp requests
23658 jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
23659
23660 var callbackName, overwritten, responseContainer,
23661 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
23662 "url" :
23663 typeof s.data === "string" &&
23664 ( s.contentType || "" )
23665 .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
23666 rjsonp.test( s.data ) && "data"
23667 );
23668
23669 // Handle iff the expected data type is "jsonp" or we have a parameter to set
23670 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
23671
23672 // Get callback name, remembering preexisting value associated with it
23673 callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
23674 s.jsonpCallback() :
23675 s.jsonpCallback;
23676
23677 // Insert callback into url or form data
23678 if ( jsonProp ) {
23679 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
23680 } else if ( s.jsonp !== false ) {
23681 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
23682 }
23683
23684 // Use data converter to retrieve json after script execution
23685 s.converters[ "script json" ] = function() {
23686 if ( !responseContainer ) {
23687 jQuery.error( callbackName + " was not called" );
23688 }
23689 return responseContainer[ 0 ];
23690 };
23691
23692 // Force json dataType
23693 s.dataTypes[ 0 ] = "json";
23694
23695 // Install callback
23696 overwritten = window[ callbackName ];
23697 window[ callbackName ] = function() {
23698 responseContainer = arguments;
23699 };
23700
23701 // Clean-up function (fires after converters)
23702 jqXHR.always( function() {
23703
23704 // If previous value didn't exist - remove it
23705 if ( overwritten === undefined ) {
23706 jQuery( window ).removeProp( callbackName );
23707
23708 // Otherwise restore preexisting value
23709 } else {
23710 window[ callbackName ] = overwritten;
23711 }
23712
23713 // Save back as free
23714 if ( s[ callbackName ] ) {
23715
23716 // Make sure that re-using the options doesn't screw things around
23717 s.jsonpCallback = originalSettings.jsonpCallback;
23718
23719 // Save the callback name for future use
23720 oldCallbacks.push( callbackName );
23721 }
23722
23723 // Call if it was a function and we have a response
23724 if ( responseContainer && jQuery.isFunction( overwritten ) ) {
23725 overwritten( responseContainer[ 0 ] );
23726 }
23727
23728 responseContainer = overwritten = undefined;
23729 } );
23730
23731 // Delegate to script
23732 return "script";
23733 }
23734 } );
23735
23736
23737
23738
23739 // Support: Safari 8 only
23740 // In Safari 8 documents created via document.implementation.createHTMLDocument
23741 // collapse sibling forms: the second one becomes a child of the first one.
23742 // Because of that, this security measure has to be disabled in Safari 8.
23743 // https://bugs.webkit.org/show_bug.cgi?id=137337
23744 support.createHTMLDocument = ( function() {
23745 var body = document.implementation.createHTMLDocument( "" ).body;
23746 body.innerHTML = "<form></form><form></form>";
23747 return body.childNodes.length === 2;
23748 } )();
23749
23750
23751 // Argument "data" should be string of html
23752 // context (optional): If specified, the fragment will be created in this context,
23753 // defaults to document
23754 // keepScripts (optional): If true, will include scripts passed in the html string
23755 jQuery.parseHTML = function( data, context, keepScripts ) {
23756 if ( typeof data !== "string" ) {
23757 return [];
23758 }
23759 if ( typeof context === "boolean" ) {
23760 keepScripts = context;
23761 context = false;
23762 }
23763
23764 var base, parsed, scripts;
23765
23766 if ( !context ) {
23767
23768 // Stop scripts or inline event handlers from being executed immediately
23769 // by using document.implementation
23770 if ( support.createHTMLDocument ) {
23771 context = document.implementation.createHTMLDocument( "" );
23772
23773 // Set the base href for the created document
23774 // so any parsed elements with URLs
23775 // are based on the document's URL (gh-2965)
23776 base = context.createElement( "base" );
23777 base.href = document.location.href;
23778 context.head.appendChild( base );
23779 } else {
23780 context = document;
23781 }
23782 }
23783
23784 parsed = rsingleTag.exec( data );
23785 scripts = !keepScripts && [];
23786
23787 // Single tag
23788 if ( parsed ) {
23789 return [ context.createElement( parsed[ 1 ] ) ];
23790 }
23791
23792 parsed = buildFragment( [ data ], context, scripts );
23793
23794 if ( scripts && scripts.length ) {
23795 jQuery( scripts ).remove();
23796 }
23797
23798 return jQuery.merge( [], parsed.childNodes );
23799 };
23800
23801
23802 /**
23803 * Load a url into a page
23804 */
23805 jQuery.fn.load = function( url, params, callback ) {
23806 var selector, type, response,
23807 self = this,
23808 off = url.indexOf( " " );
23809
23810 if ( off > -1 ) {
23811 selector = stripAndCollapse( url.slice( off ) );
23812 url = url.slice( 0, off );
23813 }
23814
23815 // If it's a function
23816 if ( jQuery.isFunction( params ) ) {
23817
23818 // We assume that it's the callback
23819 callback = params;
23820 params = undefined;
23821
23822 // Otherwise, build a param string
23823 } else if ( params && typeof params === "object" ) {
23824 type = "POST";
23825 }
23826
23827 // If we have elements to modify, make the request
23828 if ( self.length > 0 ) {
23829 jQuery.ajax( {
23830 url: url,
23831
23832 // If "type" variable is undefined, then "GET" method will be used.
23833 // Make value of this field explicit since
23834 // user can override it through ajaxSetup method
23835 type: type || "GET",
23836 dataType: "html",
23837 data: params
23838 } ).done( function( responseText ) {
23839
23840 // Save response for use in complete callback
23841 response = arguments;
23842
23843 self.html( selector ?
23844
23845 // If a selector was specified, locate the right elements in a dummy div
23846 // Exclude scripts to avoid IE 'Permission Denied' errors
23847 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
23848
23849 // Otherwise use the full result
23850 responseText );
23851
23852 // If the request succeeds, this function gets "data", "status", "jqXHR"
23853 // but they are ignored because response was set above.
23854 // If it fails, this function gets "jqXHR", "status", "error"
23855 } ).always( callback && function( jqXHR, status ) {
23856 self.each( function() {
23857 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
23858 } );
23859 } );
23860 }
23861
23862 return this;
23863 };
23864
23865
23866
23867
23868 // Attach a bunch of functions for handling common AJAX events
23869 jQuery.each( [
23870 "ajaxStart",
23871 "ajaxStop",
23872 "ajaxComplete",
23873 "ajaxError",
23874 "ajaxSuccess",
23875 "ajaxSend"
23876 ], function( i, type ) {
23877 jQuery.fn[ type ] = function( fn ) {
23878 return this.on( type, fn );
23879 };
23880 } );
23881
23882
23883
23884
23885 jQuery.expr.pseudos.animated = function( elem ) {
23886 return jQuery.grep( jQuery.timers, function( fn ) {
23887 return elem === fn.elem;
23888 } ).length;
23889 };
23890
23891
23892
23893
23894 jQuery.offset = {
23895 setOffset: function( elem, options, i ) {
23896 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
23897 position = jQuery.css( elem, "position" ),
23898 curElem = jQuery( elem ),
23899 props = {};
23900
23901 // Set position first, in-case top/left are set even on static elem
23902 if ( position === "static" ) {
23903 elem.style.position = "relative";
23904 }
23905
23906 curOffset = curElem.offset();
23907 curCSSTop = jQuery.css( elem, "top" );
23908 curCSSLeft = jQuery.css( elem, "left" );
23909 calculatePosition = ( position === "absolute" || position === "fixed" ) &&
23910 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
23911
23912 // Need to be able to calculate position if either
23913 // top or left is auto and position is either absolute or fixed
23914 if ( calculatePosition ) {
23915 curPosition = curElem.position();
23916 curTop = curPosition.top;
23917 curLeft = curPosition.left;
23918
23919 } else {
23920 curTop = parseFloat( curCSSTop ) || 0;
23921 curLeft = parseFloat( curCSSLeft ) || 0;
23922 }
23923
23924 if ( jQuery.isFunction( options ) ) {
23925
23926 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
23927 options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
23928 }
23929
23930 if ( options.top != null ) {
23931 props.top = ( options.top - curOffset.top ) + curTop;
23932 }
23933 if ( options.left != null ) {
23934 props.left = ( options.left - curOffset.left ) + curLeft;
23935 }
23936
23937 if ( "using" in options ) {
23938 options.using.call( elem, props );
23939
23940 } else {
23941 curElem.css( props );
23942 }
23943 }
23944 };
23945
23946 jQuery.fn.extend( {
23947 offset: function( options ) {
23948
23949 // Preserve chaining for setter
23950 if ( arguments.length ) {
23951 return options === undefined ?
23952 this :
23953 this.each( function( i ) {
23954 jQuery.offset.setOffset( this, options, i );
23955 } );
23956 }
23957
23958 var doc, docElem, rect, win,
23959 elem = this[ 0 ];
23960
23961 if ( !elem ) {
23962 return;
23963 }
23964
23965 // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
23966 // Support: IE <=11 only
23967 // Running getBoundingClientRect on a
23968 // disconnected node in IE throws an error
23969 if ( !elem.getClientRects().length ) {
23970 return { top: 0, left: 0 };
23971 }
23972
23973 rect = elem.getBoundingClientRect();
23974
23975 doc = elem.ownerDocument;
23976 docElem = doc.documentElement;
23977 win = doc.defaultView;
23978
23979 return {
23980 top: rect.top + win.pageYOffset - docElem.clientTop,
23981 left: rect.left + win.pageXOffset - docElem.clientLeft
23982 };
23983 },
23984
23985 position: function() {
23986 if ( !this[ 0 ] ) {
23987 return;
23988 }
23989
23990 var offsetParent, offset,
23991 elem = this[ 0 ],
23992 parentOffset = { top: 0, left: 0 };
23993
23994 // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
23995 // because it is its only offset parent
23996 if ( jQuery.css( elem, "position" ) === "fixed" ) {
23997
23998 // Assume getBoundingClientRect is there when computed position is fixed
23999 offset = elem.getBoundingClientRect();
24000
24001 } else {
24002
24003 // Get *real* offsetParent
24004 offsetParent = this.offsetParent();
24005
24006 // Get correct offsets
24007 offset = this.offset();
24008 if ( !nodeName( offsetParent[ 0 ], "html" ) ) {
24009 parentOffset = offsetParent.offset();
24010 }
24011
24012 // Add offsetParent borders
24013 parentOffset = {
24014 top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
24015 left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
24016 };
24017 }
24018
24019 // Subtract parent offsets and element margins
24020 return {
24021 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
24022 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
24023 };
24024 },
24025
24026 // This method will return documentElement in the following cases:
24027 // 1) For the element inside the iframe without offsetParent, this method will return
24028 // documentElement of the parent window
24029 // 2) For the hidden or detached element
24030 // 3) For body or html element, i.e. in case of the html node - it will return itself
24031 //
24032 // but those exceptions were never presented as a real life use-cases
24033 // and might be considered as more preferable results.
24034 //
24035 // This logic, however, is not guaranteed and can change at any point in the future
24036 offsetParent: function() {
24037 return this.map( function() {
24038 var offsetParent = this.offsetParent;
24039
24040 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
24041 offsetParent = offsetParent.offsetParent;
24042 }
24043
24044 return offsetParent || documentElement;
24045 } );
24046 }
24047 } );
24048
24049 // Create scrollLeft and scrollTop methods
24050 jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
24051 var top = "pageYOffset" === prop;
24052
24053 jQuery.fn[ method ] = function( val ) {
24054 return access( this, function( elem, method, val ) {
24055
24056 // Coalesce documents and windows
24057 var win;
24058 if ( jQuery.isWindow( elem ) ) {
24059 win = elem;
24060 } else if ( elem.nodeType === 9 ) {
24061 win = elem.defaultView;
24062 }
24063
24064 if ( val === undefined ) {
24065 return win ? win[ prop ] : elem[ method ];
24066 }
24067
24068 if ( win ) {
24069 win.scrollTo(
24070 !top ? val : win.pageXOffset,
24071 top ? val : win.pageYOffset
24072 );
24073
24074 } else {
24075 elem[ method ] = val;
24076 }
24077 }, method, val, arguments.length );
24078 };
24079 } );
24080
24081 // Support: Safari <=7 - 9.1, Chrome <=37 - 49
24082 // Add the top/left cssHooks using jQuery.fn.position
24083 // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
24084 // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
24085 // getComputedStyle returns percent when specified for top/left/bottom/right;
24086 // rather than make the css module depend on the offset module, just check for it here
24087 jQuery.each( [ "top", "left" ], function( i, prop ) {
24088 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
24089 function( elem, computed ) {
24090 if ( computed ) {
24091 computed = curCSS( elem, prop );
24092
24093 // If curCSS returns percentage, fallback to offset
24094 return rnumnonpx.test( computed ) ?
24095 jQuery( elem ).position()[ prop ] + "px" :
24096 computed;
24097 }
24098 }
24099 );
24100 } );
24101
24102
24103 // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
24104 jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
24105 jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
24106 function( defaultExtra, funcName ) {
24107
24108 // Margin is only for outerHeight, outerWidth
24109 jQuery.fn[ funcName ] = function( margin, value ) {
24110 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
24111 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
24112
24113 return access( this, function( elem, type, value ) {
24114 var doc;
24115
24116 if ( jQuery.isWindow( elem ) ) {
24117
24118 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
24119 return funcName.indexOf( "outer" ) === 0 ?
24120 elem[ "inner" + name ] :
24121 elem.document.documentElement[ "client" + name ];
24122 }
24123
24124 // Get document width or height
24125 if ( elem.nodeType === 9 ) {
24126 doc = elem.documentElement;
24127
24128 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
24129 // whichever is greatest
24130 return Math.max(
24131 elem.body[ "scroll" + name ], doc[ "scroll" + name ],
24132 elem.body[ "offset" + name ], doc[ "offset" + name ],
24133 doc[ "client" + name ]
24134 );
24135 }
24136
24137 return value === undefined ?
24138
24139 // Get width or height on the element, requesting but not forcing parseFloat
24140 jQuery.css( elem, type, extra ) :
24141
24142 // Set width or height on the element
24143 jQuery.style( elem, type, value, extra );
24144 }, type, chainable ? margin : undefined, chainable );
24145 };
24146 } );
24147 } );
24148
24149
24150 jQuery.fn.extend( {
24151
24152 bind: function( types, data, fn ) {
24153 return this.on( types, null, data, fn );
24154 },
24155 unbind: function( types, fn ) {
24156 return this.off( types, null, fn );
24157 },
24158
24159 delegate: function( selector, types, data, fn ) {
24160 return this.on( types, selector, data, fn );
24161 },
24162 undelegate: function( selector, types, fn ) {
24163
24164 // ( namespace ) or ( selector, types [, fn] )
24165 return arguments.length === 1 ?
24166 this.off( selector, "**" ) :
24167 this.off( types, selector || "**", fn );
24168 }
24169 } );
24170
24171 jQuery.holdReady = function( hold ) {
24172 if ( hold ) {
24173 jQuery.readyWait++;
24174 } else {
24175 jQuery.ready( true );
24176 }
24177 };
24178 jQuery.isArray = Array.isArray;
24179 jQuery.parseJSON = JSON.parse;
24180 jQuery.nodeName = nodeName;
24181
24182
24183
24184
24185 // Register as a named AMD module, since jQuery can be concatenated with other
24186 // files that may use define, but not via a proper concatenation script that
24187 // understands anonymous AMD modules. A named AMD is safest and most robust
24188 // way to register. Lowercase jquery is used because AMD module names are
24189 // derived from file names, and jQuery is normally delivered in a lowercase
24190 // file name. Do this after creating the global so that if an AMD module wants
24191 // to call noConflict to hide this version of jQuery, it will work.
24192
24193 // Note that for maximum portability, libraries that are not jQuery should
24194 // declare themselves as anonymous modules, and avoid setting a global if an
24195 // AMD loader is present. jQuery is a special case. For more information, see
24196 // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
24197
24198 if ( typeof define === "function" && define.amd ) {
24199 define( "jquery", [], function() {
24200 return jQuery;
24201 } );
24202 }
24203
24204
24205
24206
24207 var
24208
24209 // Map over jQuery in case of overwrite
24210 _jQuery = window.jQuery,
24211
24212 // Map over the $ in case of overwrite
24213 _$ = window.$;
24214
24215 jQuery.noConflict = function( deep ) {
24216 if ( window.$ === jQuery ) {
24217 window.$ = _$;
24218 }
24219
24220 if ( deep && window.jQuery === jQuery ) {
24221 window.jQuery = _jQuery;
24222 }
24223
24224 return jQuery;
24225 };
24226
24227 // Expose jQuery and $ identifiers, even in AMD
24228 // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
24229 // and CommonJS for browser emulators (#13566)
24230 if ( !noGlobal ) {
24231 window.jQuery = window.$ = jQuery;
24232 }
24233
24234
24235
24236
24237 return jQuery;
24238 } );
24239 </script>
24240 <script>/*!
24241 * Bootstrap v3.3.7 (http://getbootstrap.com)
24242 * Copyright 2011-2016 Twitter, Inc.
24243 * Licensed under the MIT license
24244 */
24245
24246 if (typeof jQuery === 'undefined') {
24247 throw new Error('Bootstrap\'s JavaScript requires jQuery')
24248 }
24249
24250 +function ($) {
24251 'use strict';
24252 var version = $.fn.jquery.split(' ')[0].split('.')
24253 if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
24254 throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
24255 }
24256 }(jQuery);
24257
24258 /* ========================================================================
24259 * Bootstrap: transition.js v3.3.7
24260 * http://getbootstrap.com/javascript/#transitions
24261 * ========================================================================
24262 * Copyright 2011-2016 Twitter, Inc.
24263 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24264 * ======================================================================== */
24265
24266
24267 +function ($) {
24268 'use strict';
24269
24270 // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
24271 // ============================================================
24272
24273 function transitionEnd() {
24274 var el = document.createElement('bootstrap')
24275
24276 var transEndEventNames = {
24277 WebkitTransition : 'webkitTransitionEnd',
24278 MozTransition : 'transitionend',
24279 OTransition : 'oTransitionEnd otransitionend',
24280 transition : 'transitionend'
24281 }
24282
24283 for (var name in transEndEventNames) {
24284 if (el.style[name] !== undefined) {
24285 return { end: transEndEventNames[name] }
24286 }
24287 }
24288
24289 return false // explicit for ie8 ( ._.)
24290 }
24291
24292 // http://blog.alexmaccaw.com/css-transitions
24293 $.fn.emulateTransitionEnd = function (duration) {
24294 var called = false
24295 var $el = this
24296 $(this).one('bsTransitionEnd', function () { called = true })
24297 var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
24298 setTimeout(callback, duration)
24299 return this
24300 }
24301
24302 $(function () {
24303 $.support.transition = transitionEnd()
24304
24305 if (!$.support.transition) return
24306
24307 $.event.special.bsTransitionEnd = {
24308 bindType: $.support.transition.end,
24309 delegateType: $.support.transition.end,
24310 handle: function (e) {
24311 if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
24312 }
24313 }
24314 })
24315
24316 }(jQuery);
24317
24318 /* ========================================================================
24319 * Bootstrap: alert.js v3.3.7
24320 * http://getbootstrap.com/javascript/#alerts
24321 * ========================================================================
24322 * Copyright 2011-2016 Twitter, Inc.
24323 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24324 * ======================================================================== */
24325
24326
24327 +function ($) {
24328 'use strict';
24329
24330 // ALERT CLASS DEFINITION
24331 // ======================
24332
24333 var dismiss = '[data-dismiss="alert"]'
24334 var Alert = function (el) {
24335 $(el).on('click', dismiss, this.close)
24336 }
24337
24338 Alert.VERSION = '3.3.7'
24339
24340 Alert.TRANSITION_DURATION = 150
24341
24342 Alert.prototype.close = function (e) {
24343 var $this = $(this)
24344 var selector = $this.attr('data-target')
24345
24346 if (!selector) {
24347 selector = $this.attr('href')
24348 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
24349 }
24350
24351 var $parent = $(selector === '#' ? [] : selector)
24352
24353 if (e) e.preventDefault()
24354
24355 if (!$parent.length) {
24356 $parent = $this.closest('.alert')
24357 }
24358
24359 $parent.trigger(e = $.Event('close.bs.alert'))
24360
24361 if (e.isDefaultPrevented()) return
24362
24363 $parent.removeClass('in')
24364
24365 function removeElement() {
24366 // detach from parent, fire event then clean up data
24367 $parent.detach().trigger('closed.bs.alert').remove()
24368 }
24369
24370 $.support.transition && $parent.hasClass('fade') ?
24371 $parent
24372 .one('bsTransitionEnd', removeElement)
24373 .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
24374 removeElement()
24375 }
24376
24377
24378 // ALERT PLUGIN DEFINITION
24379 // =======================
24380
24381 function Plugin(option) {
24382 return this.each(function () {
24383 var $this = $(this)
24384 var data = $this.data('bs.alert')
24385
24386 if (!data) $this.data('bs.alert', (data = new Alert(this)))
24387 if (typeof option == 'string') data[option].call($this)
24388 })
24389 }
24390
24391 var old = $.fn.alert
24392
24393 $.fn.alert = Plugin
24394 $.fn.alert.Constructor = Alert
24395
24396
24397 // ALERT NO CONFLICT
24398 // =================
24399
24400 $.fn.alert.noConflict = function () {
24401 $.fn.alert = old
24402 return this
24403 }
24404
24405
24406 // ALERT DATA-API
24407 // ==============
24408
24409 $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
24410
24411 }(jQuery);
24412
24413 /* ========================================================================
24414 * Bootstrap: button.js v3.3.7
24415 * http://getbootstrap.com/javascript/#buttons
24416 * ========================================================================
24417 * Copyright 2011-2016 Twitter, Inc.
24418 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24419 * ======================================================================== */
24420
24421
24422 +function ($) {
24423 'use strict';
24424
24425 // BUTTON PUBLIC CLASS DEFINITION
24426 // ==============================
24427
24428 var Button = function (element, options) {
24429 this.$element = $(element)
24430 this.options = $.extend({}, Button.DEFAULTS, options)
24431 this.isLoading = false
24432 }
24433
24434 Button.VERSION = '3.3.7'
24435
24436 Button.DEFAULTS = {
24437 loadingText: 'loading...'
24438 }
24439
24440 Button.prototype.setState = function (state) {
24441 var d = 'disabled'
24442 var $el = this.$element
24443 var val = $el.is('input') ? 'val' : 'html'
24444 var data = $el.data()
24445
24446 state += 'Text'
24447
24448 if (data.resetText == null) $el.data('resetText', $el[val]())
24449
24450 // push to event loop to allow forms to submit
24451 setTimeout($.proxy(function () {
24452 $el[val](data[state] == null ? this.options[state] : data[state])
24453
24454 if (state == 'loadingText') {
24455 this.isLoading = true
24456 $el.addClass(d).attr(d, d).prop(d, true)
24457 } else if (this.isLoading) {
24458 this.isLoading = false
24459 $el.removeClass(d).removeAttr(d).prop(d, false)
24460 }
24461 }, this), 0)
24462 }
24463
24464 Button.prototype.toggle = function () {
24465 var changed = true
24466 var $parent = this.$element.closest('[data-toggle="buttons"]')
24467
24468 if ($parent.length) {
24469 var $input = this.$element.find('input')
24470 if ($input.prop('type') == 'radio') {
24471 if ($input.prop('checked')) changed = false
24472 $parent.find('.active').removeClass('active')
24473 this.$element.addClass('active')
24474 } else if ($input.prop('type') == 'checkbox') {
24475 if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
24476 this.$element.toggleClass('active')
24477 }
24478 $input.prop('checked', this.$element.hasClass('active'))
24479 if (changed) $input.trigger('change')
24480 } else {
24481 this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
24482 this.$element.toggleClass('active')
24483 }
24484 }
24485
24486
24487 // BUTTON PLUGIN DEFINITION
24488 // ========================
24489
24490 function Plugin(option) {
24491 return this.each(function () {
24492 var $this = $(this)
24493 var data = $this.data('bs.button')
24494 var options = typeof option == 'object' && option
24495
24496 if (!data) $this.data('bs.button', (data = new Button(this, options)))
24497
24498 if (option == 'toggle') data.toggle()
24499 else if (option) data.setState(option)
24500 })
24501 }
24502
24503 var old = $.fn.button
24504
24505 $.fn.button = Plugin
24506 $.fn.button.Constructor = Button
24507
24508
24509 // BUTTON NO CONFLICT
24510 // ==================
24511
24512 $.fn.button.noConflict = function () {
24513 $.fn.button = old
24514 return this
24515 }
24516
24517
24518 // BUTTON DATA-API
24519 // ===============
24520
24521 $(document)
24522 .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
24523 var $btn = $(e.target).closest('.btn')
24524 Plugin.call($btn, 'toggle')
24525 if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
24526 // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
24527 e.preventDefault()
24528 // The target component still receive the focus
24529 if ($btn.is('input,button')) $btn.trigger('focus')
24530 else $btn.find('input:visible,button:visible').first().trigger('focus')
24531 }
24532 })
24533 .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
24534 $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
24535 })
24536
24537 }(jQuery);
24538
24539 /* ========================================================================
24540 * Bootstrap: carousel.js v3.3.7
24541 * http://getbootstrap.com/javascript/#carousel
24542 * ========================================================================
24543 * Copyright 2011-2016 Twitter, Inc.
24544 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24545 * ======================================================================== */
24546
24547
24548 +function ($) {
24549 'use strict';
24550
24551 // CAROUSEL CLASS DEFINITION
24552 // =========================
24553
24554 var Carousel = function (element, options) {
24555 this.$element = $(element)
24556 this.$indicators = this.$element.find('.carousel-indicators')
24557 this.options = options
24558 this.paused = null
24559 this.sliding = null
24560 this.interval = null
24561 this.$active = null
24562 this.$items = null
24563
24564 this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
24565
24566 this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
24567 .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
24568 .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
24569 }
24570
24571 Carousel.VERSION = '3.3.7'
24572
24573 Carousel.TRANSITION_DURATION = 600
24574
24575 Carousel.DEFAULTS = {
24576 interval: 5000,
24577 pause: 'hover',
24578 wrap: true,
24579 keyboard: true
24580 }
24581
24582 Carousel.prototype.keydown = function (e) {
24583 if (/input|textarea/i.test(e.target.tagName)) return
24584 switch (e.which) {
24585 case 37: this.prev(); break
24586 case 39: this.next(); break
24587 default: return
24588 }
24589
24590 e.preventDefault()
24591 }
24592
24593 Carousel.prototype.cycle = function (e) {
24594 e || (this.paused = false)
24595
24596 this.interval && clearInterval(this.interval)
24597
24598 this.options.interval
24599 && !this.paused
24600 && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
24601
24602 return this
24603 }
24604
24605 Carousel.prototype.getItemIndex = function (item) {
24606 this.$items = item.parent().children('.item')
24607 return this.$items.index(item || this.$active)
24608 }
24609
24610 Carousel.prototype.getItemForDirection = function (direction, active) {
24611 var activeIndex = this.getItemIndex(active)
24612 var willWrap = (direction == 'prev' && activeIndex === 0)
24613 || (direction == 'next' && activeIndex == (this.$items.length - 1))
24614 if (willWrap && !this.options.wrap) return active
24615 var delta = direction == 'prev' ? -1 : 1
24616 var itemIndex = (activeIndex + delta) % this.$items.length
24617 return this.$items.eq(itemIndex)
24618 }
24619
24620 Carousel.prototype.to = function (pos) {
24621 var that = this
24622 var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
24623
24624 if (pos > (this.$items.length - 1) || pos < 0) return
24625
24626 if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
24627 if (activeIndex == pos) return this.pause().cycle()
24628
24629 return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
24630 }
24631
24632 Carousel.prototype.pause = function (e) {
24633 e || (this.paused = true)
24634
24635 if (this.$element.find('.next, .prev').length && $.support.transition) {
24636 this.$element.trigger($.support.transition.end)
24637 this.cycle(true)
24638 }
24639
24640 this.interval = clearInterval(this.interval)
24641
24642 return this
24643 }
24644
24645 Carousel.prototype.next = function () {
24646 if (this.sliding) return
24647 return this.slide('next')
24648 }
24649
24650 Carousel.prototype.prev = function () {
24651 if (this.sliding) return
24652 return this.slide('prev')
24653 }
24654
24655 Carousel.prototype.slide = function (type, next) {
24656 var $active = this.$element.find('.item.active')
24657 var $next = next || this.getItemForDirection(type, $active)
24658 var isCycling = this.interval
24659 var direction = type == 'next' ? 'left' : 'right'
24660 var that = this
24661
24662 if ($next.hasClass('active')) return (this.sliding = false)
24663
24664 var relatedTarget = $next[0]
24665 var slideEvent = $.Event('slide.bs.carousel', {
24666 relatedTarget: relatedTarget,
24667 direction: direction
24668 })
24669 this.$element.trigger(slideEvent)
24670 if (slideEvent.isDefaultPrevented()) return
24671
24672 this.sliding = true
24673
24674 isCycling && this.pause()
24675
24676 if (this.$indicators.length) {
24677 this.$indicators.find('.active').removeClass('active')
24678 var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
24679 $nextIndicator && $nextIndicator.addClass('active')
24680 }
24681
24682 var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
24683 if ($.support.transition && this.$element.hasClass('slide')) {
24684 $next.addClass(type)
24685 $next[0].offsetWidth // force reflow
24686 $active.addClass(direction)
24687 $next.addClass(direction)
24688 $active
24689 .one('bsTransitionEnd', function () {
24690 $next.removeClass([type, direction].join(' ')).addClass('active')
24691 $active.removeClass(['active', direction].join(' '))
24692 that.sliding = false
24693 setTimeout(function () {
24694 that.$element.trigger(slidEvent)
24695 }, 0)
24696 })
24697 .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
24698 } else {
24699 $active.removeClass('active')
24700 $next.addClass('active')
24701 this.sliding = false
24702 this.$element.trigger(slidEvent)
24703 }
24704
24705 isCycling && this.cycle()
24706
24707 return this
24708 }
24709
24710
24711 // CAROUSEL PLUGIN DEFINITION
24712 // ==========================
24713
24714 function Plugin(option) {
24715 return this.each(function () {
24716 var $this = $(this)
24717 var data = $this.data('bs.carousel')
24718 var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
24719 var action = typeof option == 'string' ? option : options.slide
24720
24721 if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
24722 if (typeof option == 'number') data.to(option)
24723 else if (action) data[action]()
24724 else if (options.interval) data.pause().cycle()
24725 })
24726 }
24727
24728 var old = $.fn.carousel
24729
24730 $.fn.carousel = Plugin
24731 $.fn.carousel.Constructor = Carousel
24732
24733
24734 // CAROUSEL NO CONFLICT
24735 // ====================
24736
24737 $.fn.carousel.noConflict = function () {
24738 $.fn.carousel = old
24739 return this
24740 }
24741
24742
24743 // CAROUSEL DATA-API
24744 // =================
24745
24746 var clickHandler = function (e) {
24747 var href
24748 var $this = $(this)
24749 var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
24750 if (!$target.hasClass('carousel')) return
24751 var options = $.extend({}, $target.data(), $this.data())
24752 var slideIndex = $this.attr('data-slide-to')
24753 if (slideIndex) options.interval = false
24754
24755 Plugin.call($target, options)
24756
24757 if (slideIndex) {
24758 $target.data('bs.carousel').to(slideIndex)
24759 }
24760
24761 e.preventDefault()
24762 }
24763
24764 $(document)
24765 .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
24766 .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
24767
24768 $(window).on('load', function () {
24769 $('[data-ride="carousel"]').each(function () {
24770 var $carousel = $(this)
24771 Plugin.call($carousel, $carousel.data())
24772 })
24773 })
24774
24775 }(jQuery);
24776
24777 /* ========================================================================
24778 * Bootstrap: collapse.js v3.3.7
24779 * http://getbootstrap.com/javascript/#collapse
24780 * ========================================================================
24781 * Copyright 2011-2016 Twitter, Inc.
24782 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24783 * ======================================================================== */
24784
24785 /* jshint latedef: false */
24786
24787 +function ($) {
24788 'use strict';
24789
24790 // COLLAPSE PUBLIC CLASS DEFINITION
24791 // ================================
24792
24793 var Collapse = function (element, options) {
24794 this.$element = $(element)
24795 this.options = $.extend({}, Collapse.DEFAULTS, options)
24796 this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
24797 '[data-toggle="collapse"][data-target="#' + element.id + '"]')
24798 this.transitioning = null
24799
24800 if (this.options.parent) {
24801 this.$parent = this.getParent()
24802 } else {
24803 this.addAriaAndCollapsedClass(this.$element, this.$trigger)
24804 }
24805
24806 if (this.options.toggle) this.toggle()
24807 }
24808
24809 Collapse.VERSION = '3.3.7'
24810
24811 Collapse.TRANSITION_DURATION = 350
24812
24813 Collapse.DEFAULTS = {
24814 toggle: true
24815 }
24816
24817 Collapse.prototype.dimension = function () {
24818 var hasWidth = this.$element.hasClass('width')
24819 return hasWidth ? 'width' : 'height'
24820 }
24821
24822 Collapse.prototype.show = function () {
24823 if (this.transitioning || this.$element.hasClass('in')) return
24824
24825 var activesData
24826 var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
24827
24828 if (actives && actives.length) {
24829 activesData = actives.data('bs.collapse')
24830 if (activesData && activesData.transitioning) return
24831 }
24832
24833 var startEvent = $.Event('show.bs.collapse')
24834 this.$element.trigger(startEvent)
24835 if (startEvent.isDefaultPrevented()) return
24836
24837 if (actives && actives.length) {
24838 Plugin.call(actives, 'hide')
24839 activesData || actives.data('bs.collapse', null)
24840 }
24841
24842 var dimension = this.dimension()
24843
24844 this.$element
24845 .removeClass('collapse')
24846 .addClass('collapsing')[dimension](0)
24847 .attr('aria-expanded', true)
24848
24849 this.$trigger
24850 .removeClass('collapsed')
24851 .attr('aria-expanded', true)
24852
24853 this.transitioning = 1
24854
24855 var complete = function () {
24856 this.$element
24857 .removeClass('collapsing')
24858 .addClass('collapse in')[dimension]('')
24859 this.transitioning = 0
24860 this.$element
24861 .trigger('shown.bs.collapse')
24862 }
24863
24864 if (!$.support.transition) return complete.call(this)
24865
24866 var scrollSize = $.camelCase(['scroll', dimension].join('-'))
24867
24868 this.$element
24869 .one('bsTransitionEnd', $.proxy(complete, this))
24870 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
24871 }
24872
24873 Collapse.prototype.hide = function () {
24874 if (this.transitioning || !this.$element.hasClass('in')) return
24875
24876 var startEvent = $.Event('hide.bs.collapse')
24877 this.$element.trigger(startEvent)
24878 if (startEvent.isDefaultPrevented()) return
24879
24880 var dimension = this.dimension()
24881
24882 this.$element[dimension](this.$element[dimension]())[0].offsetHeight
24883
24884 this.$element
24885 .addClass('collapsing')
24886 .removeClass('collapse in')
24887 .attr('aria-expanded', false)
24888
24889 this.$trigger
24890 .addClass('collapsed')
24891 .attr('aria-expanded', false)
24892
24893 this.transitioning = 1
24894
24895 var complete = function () {
24896 this.transitioning = 0
24897 this.$element
24898 .removeClass('collapsing')
24899 .addClass('collapse')
24900 .trigger('hidden.bs.collapse')
24901 }
24902
24903 if (!$.support.transition) return complete.call(this)
24904
24905 this.$element
24906 [dimension](0)
24907 .one('bsTransitionEnd', $.proxy(complete, this))
24908 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
24909 }
24910
24911 Collapse.prototype.toggle = function () {
24912 this[this.$element.hasClass('in') ? 'hide' : 'show']()
24913 }
24914
24915 Collapse.prototype.getParent = function () {
24916 return $(this.options.parent)
24917 .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
24918 .each($.proxy(function (i, element) {
24919 var $element = $(element)
24920 this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
24921 }, this))
24922 .end()
24923 }
24924
24925 Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
24926 var isOpen = $element.hasClass('in')
24927
24928 $element.attr('aria-expanded', isOpen)
24929 $trigger
24930 .toggleClass('collapsed', !isOpen)
24931 .attr('aria-expanded', isOpen)
24932 }
24933
24934 function getTargetFromTrigger($trigger) {
24935 var href
24936 var target = $trigger.attr('data-target')
24937 || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
24938
24939 return $(target)
24940 }
24941
24942
24943 // COLLAPSE PLUGIN DEFINITION
24944 // ==========================
24945
24946 function Plugin(option) {
24947 return this.each(function () {
24948 var $this = $(this)
24949 var data = $this.data('bs.collapse')
24950 var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
24951
24952 if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
24953 if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
24954 if (typeof option == 'string') data[option]()
24955 })
24956 }
24957
24958 var old = $.fn.collapse
24959
24960 $.fn.collapse = Plugin
24961 $.fn.collapse.Constructor = Collapse
24962
24963
24964 // COLLAPSE NO CONFLICT
24965 // ====================
24966
24967 $.fn.collapse.noConflict = function () {
24968 $.fn.collapse = old
24969 return this
24970 }
24971
24972
24973 // COLLAPSE DATA-API
24974 // =================
24975
24976 $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
24977 var $this = $(this)
24978
24979 if (!$this.attr('data-target')) e.preventDefault()
24980
24981 var $target = getTargetFromTrigger($this)
24982 var data = $target.data('bs.collapse')
24983 var option = data ? 'toggle' : $this.data()
24984
24985 Plugin.call($target, option)
24986 })
24987
24988 }(jQuery);
24989
24990 /* ========================================================================
24991 * Bootstrap: dropdown.js v3.3.7
24992 * http://getbootstrap.com/javascript/#dropdowns
24993 * ========================================================================
24994 * Copyright 2011-2016 Twitter, Inc.
24995 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24996 * ======================================================================== */
24997
24998
24999 +function ($) {
25000 'use strict';
25001
25002 // DROPDOWN CLASS DEFINITION
25003 // =========================
25004
25005 var backdrop = '.dropdown-backdrop'
25006 var toggle = '[data-toggle="dropdown"]'
25007 var Dropdown = function (element) {
25008 $(element).on('click.bs.dropdown', this.toggle)
25009 }
25010
25011 Dropdown.VERSION = '3.3.7'
25012
25013 function getParent($this) {
25014 var selector = $this.attr('data-target')
25015
25016 if (!selector) {
25017 selector = $this.attr('href')
25018 selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
25019 }
25020
25021 var $parent = selector && $(selector)
25022
25023 return $parent && $parent.length ? $parent : $this.parent()
25024 }
25025
25026 function clearMenus(e) {
25027 if (e && e.which === 3) return
25028 $(backdrop).remove()
25029 $(toggle).each(function () {
25030 var $this = $(this)
25031 var $parent = getParent($this)
25032 var relatedTarget = { relatedTarget: this }
25033
25034 if (!$parent.hasClass('open')) return
25035
25036 if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
25037
25038 $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
25039
25040 if (e.isDefaultPrevented()) return
25041
25042 $this.attr('aria-expanded', 'false')
25043 $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
25044 })
25045 }
25046
25047 Dropdown.prototype.toggle = function (e) {
25048 var $this = $(this)
25049
25050 if ($this.is('.disabled, :disabled')) return
25051
25052 var $parent = getParent($this)
25053 var isActive = $parent.hasClass('open')
25054
25055 clearMenus()
25056
25057 if (!isActive) {
25058 if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
25059 // if mobile we use a backdrop because click events don't delegate
25060 $(document.createElement('div'))
25061 .addClass('dropdown-backdrop')
25062 .insertAfter($(this))
25063 .on('click', clearMenus)
25064 }
25065
25066 var relatedTarget = { relatedTarget: this }
25067 $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
25068
25069 if (e.isDefaultPrevented()) return
25070
25071 $this
25072 .trigger('focus')
25073 .attr('aria-expanded', 'true')
25074
25075 $parent
25076 .toggleClass('open')
25077 .trigger($.Event('shown.bs.dropdown', relatedTarget))
25078 }
25079
25080 return false
25081 }
25082
25083 Dropdown.prototype.keydown = function (e) {
25084 if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
25085
25086 var $this = $(this)
25087
25088 e.preventDefault()
25089 e.stopPropagation()
25090
25091 if ($this.is('.disabled, :disabled')) return
25092
25093 var $parent = getParent($this)
25094 var isActive = $parent.hasClass('open')
25095
25096 if (!isActive && e.which != 27 || isActive && e.which == 27) {
25097 if (e.which == 27) $parent.find(toggle).trigger('focus')
25098 return $this.trigger('click')
25099 }
25100
25101 var desc = ' li:not(.disabled):visible a'
25102 var $items = $parent.find('.dropdown-menu' + desc)
25103
25104 if (!$items.length) return
25105
25106 var index = $items.index(e.target)
25107
25108 if (e.which == 38 && index > 0) index-- // up
25109 if (e.which == 40 && index < $items.length - 1) index++ // down
25110 if (!~index) index = 0
25111
25112 $items.eq(index).trigger('focus')
25113 }
25114
25115
25116 // DROPDOWN PLUGIN DEFINITION
25117 // ==========================
25118
25119 function Plugin(option) {
25120 return this.each(function () {
25121 var $this = $(this)
25122 var data = $this.data('bs.dropdown')
25123
25124 if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
25125 if (typeof option == 'string') data[option].call($this)
25126 })
25127 }
25128
25129 var old = $.fn.dropdown
25130
25131 $.fn.dropdown = Plugin
25132 $.fn.dropdown.Constructor = Dropdown
25133
25134
25135 // DROPDOWN NO CONFLICT
25136 // ====================
25137
25138 $.fn.dropdown.noConflict = function () {
25139 $.fn.dropdown = old
25140 return this
25141 }
25142
25143
25144 // APPLY TO STANDARD DROPDOWN ELEMENTS
25145 // ===================================
25146
25147 $(document)
25148 .on('click.bs.dropdown.data-api', clearMenus)
25149 .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
25150 .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
25151 .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
25152 .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
25153
25154 }(jQuery);
25155
25156 /* ========================================================================
25157 * Bootstrap: modal.js v3.3.7
25158 * http://getbootstrap.com/javascript/#modals
25159 * ========================================================================
25160 * Copyright 2011-2016 Twitter, Inc.
25161 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25162 * ======================================================================== */
25163
25164
25165 +function ($) {
25166 'use strict';
25167
25168 // MODAL CLASS DEFINITION
25169 // ======================
25170
25171 var Modal = function (element, options) {
25172 this.options = options
25173 this.$body = $(document.body)
25174 this.$element = $(element)
25175 this.$dialog = this.$element.find('.modal-dialog')
25176 this.$backdrop = null
25177 this.isShown = null
25178 this.originalBodyPad = null
25179 this.scrollbarWidth = 0
25180 this.ignoreBackdropClick = false
25181
25182 if (this.options.remote) {
25183 this.$element
25184 .find('.modal-content')
25185 .load(this.options.remote, $.proxy(function () {
25186 this.$element.trigger('loaded.bs.modal')
25187 }, this))
25188 }
25189 }
25190
25191 Modal.VERSION = '3.3.7'
25192
25193 Modal.TRANSITION_DURATION = 300
25194 Modal.BACKDROP_TRANSITION_DURATION = 150
25195
25196 Modal.DEFAULTS = {
25197 backdrop: true,
25198 keyboard: true,
25199 show: true
25200 }
25201
25202 Modal.prototype.toggle = function (_relatedTarget) {
25203 return this.isShown ? this.hide() : this.show(_relatedTarget)
25204 }
25205
25206 Modal.prototype.show = function (_relatedTarget) {
25207 var that = this
25208 var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
25209
25210 this.$element.trigger(e)
25211
25212 if (this.isShown || e.isDefaultPrevented()) return
25213
25214 this.isShown = true
25215
25216 this.checkScrollbar()
25217 this.setScrollbar()
25218 this.$body.addClass('modal-open')
25219
25220 this.escape()
25221 this.resize()
25222
25223 this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
25224
25225 this.$dialog.on('mousedown.dismiss.bs.modal', function () {
25226 that.$element.one('mouseup.dismiss.bs.modal', function (e) {
25227 if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
25228 })
25229 })
25230
25231 this.backdrop(function () {
25232 var transition = $.support.transition && that.$element.hasClass('fade')
25233
25234 if (!that.$element.parent().length) {
25235 that.$element.appendTo(that.$body) // don't move modals dom position
25236 }
25237
25238 that.$element
25239 .show()
25240 .scrollTop(0)
25241
25242 that.adjustDialog()
25243
25244 if (transition) {
25245 that.$element[0].offsetWidth // force reflow
25246 }
25247
25248 that.$element.addClass('in')
25249
25250 that.enforceFocus()
25251
25252 var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
25253
25254 transition ?
25255 that.$dialog // wait for modal to slide in
25256 .one('bsTransitionEnd', function () {
25257 that.$element.trigger('focus').trigger(e)
25258 })
25259 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
25260 that.$element.trigger('focus').trigger(e)
25261 })
25262 }
25263
25264 Modal.prototype.hide = function (e) {
25265 if (e) e.preventDefault()
25266
25267 e = $.Event('hide.bs.modal')
25268
25269 this.$element.trigger(e)
25270
25271 if (!this.isShown || e.isDefaultPrevented()) return
25272
25273 this.isShown = false
25274
25275 this.escape()
25276 this.resize()
25277
25278 $(document).off('focusin.bs.modal')
25279
25280 this.$element
25281 .removeClass('in')
25282 .off('click.dismiss.bs.modal')
25283 .off('mouseup.dismiss.bs.modal')
25284
25285 this.$dialog.off('mousedown.dismiss.bs.modal')
25286
25287 $.support.transition && this.$element.hasClass('fade') ?
25288 this.$element
25289 .one('bsTransitionEnd', $.proxy(this.hideModal, this))
25290 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
25291 this.hideModal()
25292 }
25293
25294 Modal.prototype.enforceFocus = function () {
25295 $(document)
25296 .off('focusin.bs.modal') // guard against infinite focus loop
25297 .on('focusin.bs.modal', $.proxy(function (e) {
25298 if (document !== e.target &&
25299 this.$element[0] !== e.target &&
25300 !this.$element.has(e.target).length) {
25301 this.$element.trigger('focus')
25302 }
25303 }, this))
25304 }
25305
25306 Modal.prototype.escape = function () {
25307 if (this.isShown && this.options.keyboard) {
25308 this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
25309 e.which == 27 && this.hide()
25310 }, this))
25311 } else if (!this.isShown) {
25312 this.$element.off('keydown.dismiss.bs.modal')
25313 }
25314 }
25315
25316 Modal.prototype.resize = function () {
25317 if (this.isShown) {
25318 $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
25319 } else {
25320 $(window).off('resize.bs.modal')
25321 }
25322 }
25323
25324 Modal.prototype.hideModal = function () {
25325 var that = this
25326 this.$element.hide()
25327 this.backdrop(function () {
25328 that.$body.removeClass('modal-open')
25329 that.resetAdjustments()
25330 that.resetScrollbar()
25331 that.$element.trigger('hidden.bs.modal')
25332 })
25333 }
25334
25335 Modal.prototype.removeBackdrop = function () {
25336 this.$backdrop && this.$backdrop.remove()
25337 this.$backdrop = null
25338 }
25339
25340 Modal.prototype.backdrop = function (callback) {
25341 var that = this
25342 var animate = this.$element.hasClass('fade') ? 'fade' : ''
25343
25344 if (this.isShown && this.options.backdrop) {
25345 var doAnimate = $.support.transition && animate
25346
25347 this.$backdrop = $(document.createElement('div'))
25348 .addClass('modal-backdrop ' + animate)
25349 .appendTo(this.$body)
25350
25351 this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
25352 if (this.ignoreBackdropClick) {
25353 this.ignoreBackdropClick = false
25354 return
25355 }
25356 if (e.target !== e.currentTarget) return
25357 this.options.backdrop == 'static'
25358 ? this.$element[0].focus()
25359 : this.hide()
25360 }, this))
25361
25362 if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
25363
25364 this.$backdrop.addClass('in')
25365
25366 if (!callback) return
25367
25368 doAnimate ?
25369 this.$backdrop
25370 .one('bsTransitionEnd', callback)
25371 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
25372 callback()
25373
25374 } else if (!this.isShown && this.$backdrop) {
25375 this.$backdrop.removeClass('in')
25376
25377 var callbackRemove = function () {
25378 that.removeBackdrop()
25379 callback && callback()
25380 }
25381 $.support.transition && this.$element.hasClass('fade') ?
25382 this.$backdrop
25383 .one('bsTransitionEnd', callbackRemove)
25384 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
25385 callbackRemove()
25386
25387 } else if (callback) {
25388 callback()
25389 }
25390 }
25391
25392 // these following methods are used to handle overflowing modals
25393
25394 Modal.prototype.handleUpdate = function () {
25395 this.adjustDialog()
25396 }
25397
25398 Modal.prototype.adjustDialog = function () {
25399 var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
25400
25401 this.$element.css({
25402 paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
25403 paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
25404 })
25405 }
25406
25407 Modal.prototype.resetAdjustments = function () {
25408 this.$element.css({
25409 paddingLeft: '',
25410 paddingRight: ''
25411 })
25412 }
25413
25414 Modal.prototype.checkScrollbar = function () {
25415 var fullWindowWidth = window.innerWidth
25416 if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
25417 var documentElementRect = document.documentElement.getBoundingClientRect()
25418 fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
25419 }
25420 this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
25421 this.scrollbarWidth = this.measureScrollbar()
25422 }
25423
25424 Modal.prototype.setScrollbar = function () {
25425 var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
25426 this.originalBodyPad = document.body.style.paddingRight || ''
25427 if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
25428 }
25429
25430 Modal.prototype.resetScrollbar = function () {
25431 this.$body.css('padding-right', this.originalBodyPad)
25432 }
25433
25434 Modal.prototype.measureScrollbar = function () { // thx walsh
25435 var scrollDiv = document.createElement('div')
25436 scrollDiv.className = 'modal-scrollbar-measure'
25437 this.$body.append(scrollDiv)
25438 var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
25439 this.$body[0].removeChild(scrollDiv)
25440 return scrollbarWidth
25441 }
25442
25443
25444 // MODAL PLUGIN DEFINITION
25445 // =======================
25446
25447 function Plugin(option, _relatedTarget) {
25448 return this.each(function () {
25449 var $this = $(this)
25450 var data = $this.data('bs.modal')
25451 var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
25452
25453 if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
25454 if (typeof option == 'string') data[option](_relatedTarget)
25455 else if (options.show) data.show(_relatedTarget)
25456 })
25457 }
25458
25459 var old = $.fn.modal
25460
25461 $.fn.modal = Plugin
25462 $.fn.modal.Constructor = Modal
25463
25464
25465 // MODAL NO CONFLICT
25466 // =================
25467
25468 $.fn.modal.noConflict = function () {
25469 $.fn.modal = old
25470 return this
25471 }
25472
25473
25474 // MODAL DATA-API
25475 // ==============
25476
25477 $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
25478 var $this = $(this)
25479 var href = $this.attr('href')
25480 var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
25481 var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
25482
25483 if ($this.is('a')) e.preventDefault()
25484
25485 $target.one('show.bs.modal', function (showEvent) {
25486 if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
25487 $target.one('hidden.bs.modal', function () {
25488 $this.is(':visible') && $this.trigger('focus')
25489 })
25490 })
25491 Plugin.call($target, option, this)
25492 })
25493
25494 }(jQuery);
25495
25496 /* ========================================================================
25497 * Bootstrap: tooltip.js v3.3.7
25498 * http://getbootstrap.com/javascript/#tooltip
25499 * Inspired by the original jQuery.tipsy by Jason Frame
25500 * ========================================================================
25501 * Copyright 2011-2016 Twitter, Inc.
25502 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25503 * ======================================================================== */
25504
25505
25506 +function ($) {
25507 'use strict';
25508
25509 // TOOLTIP PUBLIC CLASS DEFINITION
25510 // ===============================
25511
25512 var Tooltip = function (element, options) {
25513 this.type = null
25514 this.options = null
25515 this.enabled = null
25516 this.timeout = null
25517 this.hoverState = null
25518 this.$element = null
25519 this.inState = null
25520
25521 this.init('tooltip', element, options)
25522 }
25523
25524 Tooltip.VERSION = '3.3.7'
25525
25526 Tooltip.TRANSITION_DURATION = 150
25527
25528 Tooltip.DEFAULTS = {
25529 animation: true,
25530 placement: 'top',
25531 selector: false,
25532 template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
25533 trigger: 'hover focus',
25534 title: '',
25535 delay: 0,
25536 html: false,
25537 container: false,
25538 viewport: {
25539 selector: 'body',
25540 padding: 0
25541 }
25542 }
25543
25544 Tooltip.prototype.init = function (type, element, options) {
25545 this.enabled = true
25546 this.type = type
25547 this.$element = $(element)
25548 this.options = this.getOptions(options)
25549 this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
25550 this.inState = { click: false, hover: false, focus: false }
25551
25552 if (this.$element[0] instanceof document.constructor && !this.options.selector) {
25553 throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
25554 }
25555
25556 var triggers = this.options.trigger.split(' ')
25557
25558 for (var i = triggers.length; i--;) {
25559 var trigger = triggers[i]
25560
25561 if (trigger == 'click') {
25562 this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
25563 } else if (trigger != 'manual') {
25564 var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
25565 var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
25566
25567 this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
25568 this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
25569 }
25570 }
25571
25572 this.options.selector ?
25573 (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
25574 this.fixTitle()
25575 }
25576
25577 Tooltip.prototype.getDefaults = function () {
25578 return Tooltip.DEFAULTS
25579 }
25580
25581 Tooltip.prototype.getOptions = function (options) {
25582 options = $.extend({}, this.getDefaults(), this.$element.data(), options)
25583
25584 if (options.delay && typeof options.delay == 'number') {
25585 options.delay = {
25586 show: options.delay,
25587 hide: options.delay
25588 }
25589 }
25590
25591 return options
25592 }
25593
25594 Tooltip.prototype.getDelegateOptions = function () {
25595 var options = {}
25596 var defaults = this.getDefaults()
25597
25598 this._options && $.each(this._options, function (key, value) {
25599 if (defaults[key] != value) options[key] = value
25600 })
25601
25602 return options
25603 }
25604
25605 Tooltip.prototype.enter = function (obj) {
25606 var self = obj instanceof this.constructor ?
25607 obj : $(obj.currentTarget).data('bs.' + this.type)
25608
25609 if (!self) {
25610 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
25611 $(obj.currentTarget).data('bs.' + this.type, self)
25612 }
25613
25614 if (obj instanceof $.Event) {
25615 self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
25616 }
25617
25618 if (self.tip().hasClass('in') || self.hoverState == 'in') {
25619 self.hoverState = 'in'
25620 return
25621 }
25622
25623 clearTimeout(self.timeout)
25624
25625 self.hoverState = 'in'
25626
25627 if (!self.options.delay || !self.options.delay.show) return self.show()
25628
25629 self.timeout = setTimeout(function () {
25630 if (self.hoverState == 'in') self.show()
25631 }, self.options.delay.show)
25632 }
25633
25634 Tooltip.prototype.isInStateTrue = function () {
25635 for (var key in this.inState) {
25636 if (this.inState[key]) return true
25637 }
25638
25639 return false
25640 }
25641
25642 Tooltip.prototype.leave = function (obj) {
25643 var self = obj instanceof this.constructor ?
25644 obj : $(obj.currentTarget).data('bs.' + this.type)
25645
25646 if (!self) {
25647 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
25648 $(obj.currentTarget).data('bs.' + this.type, self)
25649 }
25650
25651 if (obj instanceof $.Event) {
25652 self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
25653 }
25654
25655 if (self.isInStateTrue()) return
25656
25657 clearTimeout(self.timeout)
25658
25659 self.hoverState = 'out'
25660
25661 if (!self.options.delay || !self.options.delay.hide) return self.hide()
25662
25663 self.timeout = setTimeout(function () {
25664 if (self.hoverState == 'out') self.hide()
25665 }, self.options.delay.hide)
25666 }
25667
25668 Tooltip.prototype.show = function () {
25669 var e = $.Event('show.bs.' + this.type)
25670
25671 if (this.hasContent() && this.enabled) {
25672 this.$element.trigger(e)
25673
25674 var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
25675 if (e.isDefaultPrevented() || !inDom) return
25676 var that = this
25677
25678 var $tip = this.tip()
25679
25680 var tipId = this.getUID(this.type)
25681
25682 this.setContent()
25683 $tip.attr('id', tipId)
25684 this.$element.attr('aria-describedby', tipId)
25685
25686 if (this.options.animation) $tip.addClass('fade')
25687
25688 var placement = typeof this.options.placement == 'function' ?
25689 this.options.placement.call(this, $tip[0], this.$element[0]) :
25690 this.options.placement
25691
25692 var autoToken = /\s?auto?\s?/i
25693 var autoPlace = autoToken.test(placement)
25694 if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
25695
25696 $tip
25697 .detach()
25698 .css({ top: 0, left: 0, display: 'block' })
25699 .addClass(placement)
25700 .data('bs.' + this.type, this)
25701
25702 this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
25703 this.$element.trigger('inserted.bs.' + this.type)
25704
25705 var pos = this.getPosition()
25706 var actualWidth = $tip[0].offsetWidth
25707 var actualHeight = $tip[0].offsetHeight
25708
25709 if (autoPlace) {
25710 var orgPlacement = placement
25711 var viewportDim = this.getPosition(this.$viewport)
25712
25713 placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
25714 placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
25715 placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
25716 placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
25717 placement
25718
25719 $tip
25720 .removeClass(orgPlacement)
25721 .addClass(placement)
25722 }
25723
25724 var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
25725
25726 this.applyPlacement(calculatedOffset, placement)
25727
25728 var complete = function () {
25729 var prevHoverState = that.hoverState
25730 that.$element.trigger('shown.bs.' + that.type)
25731 that.hoverState = null
25732
25733 if (prevHoverState == 'out') that.leave(that)
25734 }
25735
25736 $.support.transition && this.$tip.hasClass('fade') ?
25737 $tip
25738 .one('bsTransitionEnd', complete)
25739 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
25740 complete()
25741 }
25742 }
25743
25744 Tooltip.prototype.applyPlacement = function (offset, placement) {
25745 var $tip = this.tip()
25746 var width = $tip[0].offsetWidth
25747 var height = $tip[0].offsetHeight
25748
25749 // manually read margins because getBoundingClientRect includes difference
25750 var marginTop = parseInt($tip.css('margin-top'), 10)
25751 var marginLeft = parseInt($tip.css('margin-left'), 10)
25752
25753 // we must check for NaN for ie 8/9
25754 if (isNaN(marginTop)) marginTop = 0
25755 if (isNaN(marginLeft)) marginLeft = 0
25756
25757 offset.top += marginTop
25758 offset.left += marginLeft
25759
25760 // $.fn.offset doesn't round pixel values
25761 // so we use setOffset directly with our own function B-0
25762 $.offset.setOffset($tip[0], $.extend({
25763 using: function (props) {
25764 $tip.css({
25765 top: Math.round(props.top),
25766 left: Math.round(props.left)
25767 })
25768 }
25769 }, offset), 0)
25770
25771 $tip.addClass('in')
25772
25773 // check to see if placing tip in new offset caused the tip to resize itself
25774 var actualWidth = $tip[0].offsetWidth
25775 var actualHeight = $tip[0].offsetHeight
25776
25777 if (placement == 'top' && actualHeight != height) {
25778 offset.top = offset.top + height - actualHeight
25779 }
25780
25781 var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
25782
25783 if (delta.left) offset.left += delta.left
25784 else offset.top += delta.top
25785
25786 var isVertical = /top|bottom/.test(placement)
25787 var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
25788 var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
25789
25790 $tip.offset(offset)
25791 this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
25792 }
25793
25794 Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
25795 this.arrow()
25796 .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
25797 .css(isVertical ? 'top' : 'left', '')
25798 }
25799
25800 Tooltip.prototype.setContent = function () {
25801 var $tip = this.tip()
25802 var title = this.getTitle()
25803
25804 $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
25805 $tip.removeClass('fade in top bottom left right')
25806 }
25807
25808 Tooltip.prototype.hide = function (callback) {
25809 var that = this
25810 var $tip = $(this.$tip)
25811 var e = $.Event('hide.bs.' + this.type)
25812
25813 function complete() {
25814 if (that.hoverState != 'in') $tip.detach()
25815 if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
25816 that.$element
25817 .removeAttr('aria-describedby')
25818 .trigger('hidden.bs.' + that.type)
25819 }
25820 callback && callback()
25821 }
25822
25823 this.$element.trigger(e)
25824
25825 if (e.isDefaultPrevented()) return
25826
25827 $tip.removeClass('in')
25828
25829 $.support.transition && $tip.hasClass('fade') ?
25830 $tip
25831 .one('bsTransitionEnd', complete)
25832 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
25833 complete()
25834
25835 this.hoverState = null
25836
25837 return this
25838 }
25839
25840 Tooltip.prototype.fixTitle = function () {
25841 var $e = this.$element
25842 if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
25843 $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
25844 }
25845 }
25846
25847 Tooltip.prototype.hasContent = function () {
25848 return this.getTitle()
25849 }
25850
25851 Tooltip.prototype.getPosition = function ($element) {
25852 $element = $element || this.$element
25853
25854 var el = $element[0]
25855 var isBody = el.tagName == 'BODY'
25856
25857 var elRect = el.getBoundingClientRect()
25858 if (elRect.width == null) {
25859 // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
25860 elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
25861 }
25862 var isSvg = window.SVGElement && el instanceof window.SVGElement
25863 // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
25864 // See https://github.com/twbs/bootstrap/issues/20280
25865 var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
25866 var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
25867 var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
25868
25869 return $.extend({}, elRect, scroll, outerDims, elOffset)
25870 }
25871
25872 Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
25873 return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
25874 placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
25875 placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
25876 /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
25877
25878 }
25879
25880 Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
25881 var delta = { top: 0, left: 0 }
25882 if (!this.$viewport) return delta
25883
25884 var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
25885 var viewportDimensions = this.getPosition(this.$viewport)
25886
25887 if (/right|left/.test(placement)) {
25888 var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
25889 var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
25890 if (topEdgeOffset < viewportDimensions.top) { // top overflow
25891 delta.top = viewportDimensions.top - topEdgeOffset
25892 } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
25893 delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
25894 }
25895 } else {
25896 var leftEdgeOffset = pos.left - viewportPadding
25897 var rightEdgeOffset = pos.left + viewportPadding + actualWidth
25898 if (leftEdgeOffset < viewportDimensions.left) { // left overflow
25899 delta.left = viewportDimensions.left - leftEdgeOffset
25900 } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
25901 delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
25902 }
25903 }
25904
25905 return delta
25906 }
25907
25908 Tooltip.prototype.getTitle = function () {
25909 var title
25910 var $e = this.$element
25911 var o = this.options
25912
25913 title = $e.attr('data-original-title')
25914 || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
25915
25916 return title
25917 }
25918
25919 Tooltip.prototype.getUID = function (prefix) {
25920 do prefix += ~~(Math.random() * 1000000)
25921 while (document.getElementById(prefix))
25922 return prefix
25923 }
25924
25925 Tooltip.prototype.tip = function () {
25926 if (!this.$tip) {
25927 this.$tip = $(this.options.template)
25928 if (this.$tip.length != 1) {
25929 throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
25930 }
25931 }
25932 return this.$tip
25933 }
25934
25935 Tooltip.prototype.arrow = function () {
25936 return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
25937 }
25938
25939 Tooltip.prototype.enable = function () {
25940 this.enabled = true
25941 }
25942
25943 Tooltip.prototype.disable = function () {
25944 this.enabled = false
25945 }
25946
25947 Tooltip.prototype.toggleEnabled = function () {
25948 this.enabled = !this.enabled
25949 }
25950
25951 Tooltip.prototype.toggle = function (e) {
25952 var self = this
25953 if (e) {
25954 self = $(e.currentTarget).data('bs.' + this.type)
25955 if (!self) {
25956 self = new this.constructor(e.currentTarget, this.getDelegateOptions())
25957 $(e.currentTarget).data('bs.' + this.type, self)
25958 }
25959 }
25960
25961 if (e) {
25962 self.inState.click = !self.inState.click
25963 if (self.isInStateTrue()) self.enter(self)
25964 else self.leave(self)
25965 } else {
25966 self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
25967 }
25968 }
25969
25970 Tooltip.prototype.destroy = function () {
25971 var that = this
25972 clearTimeout(this.timeout)
25973 this.hide(function () {
25974 that.$element.off('.' + that.type).removeData('bs.' + that.type)
25975 if (that.$tip) {
25976 that.$tip.detach()
25977 }
25978 that.$tip = null
25979 that.$arrow = null
25980 that.$viewport = null
25981 that.$element = null
25982 })
25983 }
25984
25985
25986 // TOOLTIP PLUGIN DEFINITION
25987 // =========================
25988
25989 function Plugin(option) {
25990 return this.each(function () {
25991 var $this = $(this)
25992 var data = $this.data('bs.tooltip')
25993 var options = typeof option == 'object' && option
25994
25995 if (!data && /destroy|hide/.test(option)) return
25996 if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
25997 if (typeof option == 'string') data[option]()
25998 })
25999 }
26000
26001 var old = $.fn.tooltip
26002
26003 $.fn.tooltip = Plugin
26004 $.fn.tooltip.Constructor = Tooltip
26005
26006
26007 // TOOLTIP NO CONFLICT
26008 // ===================
26009
26010 $.fn.tooltip.noConflict = function () {
26011 $.fn.tooltip = old
26012 return this
26013 }
26014
26015 }(jQuery);
26016
26017 /* ========================================================================
26018 * Bootstrap: popover.js v3.3.7
26019 * http://getbootstrap.com/javascript/#popovers
26020 * ========================================================================
26021 * Copyright 2011-2016 Twitter, Inc.
26022 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26023 * ======================================================================== */
26024
26025
26026 +function ($) {
26027 'use strict';
26028
26029 // POPOVER PUBLIC CLASS DEFINITION
26030 // ===============================
26031
26032 var Popover = function (element, options) {
26033 this.init('popover', element, options)
26034 }
26035
26036 if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
26037
26038 Popover.VERSION = '3.3.7'
26039
26040 Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
26041 placement: 'right',
26042 trigger: 'click',
26043 content: '',
26044 template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
26045 })
26046
26047
26048 // NOTE: POPOVER EXTENDS tooltip.js
26049 // ================================
26050
26051 Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
26052
26053 Popover.prototype.constructor = Popover
26054
26055 Popover.prototype.getDefaults = function () {
26056 return Popover.DEFAULTS
26057 }
26058
26059 Popover.prototype.setContent = function () {
26060 var $tip = this.tip()
26061 var title = this.getTitle()
26062 var content = this.getContent()
26063
26064 $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
26065 $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
26066 this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
26067 ](content)
26068
26069 $tip.removeClass('fade top bottom left right in')
26070
26071 // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
26072 // this manually by checking the contents.
26073 if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
26074 }
26075
26076 Popover.prototype.hasContent = function () {
26077 return this.getTitle() || this.getContent()
26078 }
26079
26080 Popover.prototype.getContent = function () {
26081 var $e = this.$element
26082 var o = this.options
26083
26084 return $e.attr('data-content')
26085 || (typeof o.content == 'function' ?
26086 o.content.call($e[0]) :
26087 o.content)
26088 }
26089
26090 Popover.prototype.arrow = function () {
26091 return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
26092 }
26093
26094
26095 // POPOVER PLUGIN DEFINITION
26096 // =========================
26097
26098 function Plugin(option) {
26099 return this.each(function () {
26100 var $this = $(this)
26101 var data = $this.data('bs.popover')
26102 var options = typeof option == 'object' && option
26103
26104 if (!data && /destroy|hide/.test(option)) return
26105 if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
26106 if (typeof option == 'string') data[option]()
26107 })
26108 }
26109
26110 var old = $.fn.popover
26111
26112 $.fn.popover = Plugin
26113 $.fn.popover.Constructor = Popover
26114
26115
26116 // POPOVER NO CONFLICT
26117 // ===================
26118
26119 $.fn.popover.noConflict = function () {
26120 $.fn.popover = old
26121 return this
26122 }
26123
26124 }(jQuery);
26125
26126 /* ========================================================================
26127 * Bootstrap: scrollspy.js v3.3.7
26128 * http://getbootstrap.com/javascript/#scrollspy
26129 * ========================================================================
26130 * Copyright 2011-2016 Twitter, Inc.
26131 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26132 * ======================================================================== */
26133
26134
26135 +function ($) {
26136 'use strict';
26137
26138 // SCROLLSPY CLASS DEFINITION
26139 // ==========================
26140
26141 function ScrollSpy(element, options) {
26142 this.$body = $(document.body)
26143 this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
26144 this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
26145 this.selector = (this.options.target || '') + ' .nav li > a'
26146 this.offsets = []
26147 this.targets = []
26148 this.activeTarget = null
26149 this.scrollHeight = 0
26150
26151 this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
26152 this.refresh()
26153 this.process()
26154 }
26155
26156 ScrollSpy.VERSION = '3.3.7'
26157
26158 ScrollSpy.DEFAULTS = {
26159 offset: 10
26160 }
26161
26162 ScrollSpy.prototype.getScrollHeight = function () {
26163 return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
26164 }
26165
26166 ScrollSpy.prototype.refresh = function () {
26167 var that = this
26168 var offsetMethod = 'offset'
26169 var offsetBase = 0
26170
26171 this.offsets = []
26172 this.targets = []
26173 this.scrollHeight = this.getScrollHeight()
26174
26175 if (!$.isWindow(this.$scrollElement[0])) {
26176 offsetMethod = 'position'
26177 offsetBase = this.$scrollElement.scrollTop()
26178 }
26179
26180 this.$body
26181 .find(this.selector)
26182 .map(function () {
26183 var $el = $(this)
26184 var href = $el.data('target') || $el.attr('href')
26185 var $href = /^#./.test(href) && $(href)
26186
26187 return ($href
26188 && $href.length
26189 && $href.is(':visible')
26190 && [[$href[offsetMethod]().top + offsetBase, href]]) || null
26191 })
26192 .sort(function (a, b) { return a[0] - b[0] })
26193 .each(function () {
26194 that.offsets.push(this[0])
26195 that.targets.push(this[1])
26196 })
26197 }
26198
26199 ScrollSpy.prototype.process = function () {
26200 var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
26201 var scrollHeight = this.getScrollHeight()
26202 var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
26203 var offsets = this.offsets
26204 var targets = this.targets
26205 var activeTarget = this.activeTarget
26206 var i
26207
26208 if (this.scrollHeight != scrollHeight) {
26209 this.refresh()
26210 }
26211
26212 if (scrollTop >= maxScroll) {
26213 return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
26214 }
26215
26216 if (activeTarget && scrollTop < offsets[0]) {
26217 this.activeTarget = null
26218 return this.clear()
26219 }
26220
26221 for (i = offsets.length; i--;) {
26222 activeTarget != targets[i]
26223 && scrollTop >= offsets[i]
26224 && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
26225 && this.activate(targets[i])
26226 }
26227 }
26228
26229 ScrollSpy.prototype.activate = function (target) {
26230 this.activeTarget = target
26231
26232 this.clear()
26233
26234 var selector = this.selector +
26235 '[data-target="' + target + '"],' +
26236 this.selector + '[href="' + target + '"]'
26237
26238 var active = $(selector)
26239 .parents('li')
26240 .addClass('active')
26241
26242 if (active.parent('.dropdown-menu').length) {
26243 active = active
26244 .closest('li.dropdown')
26245 .addClass('active')
26246 }
26247
26248 active.trigger('activate.bs.scrollspy')
26249 }
26250
26251 ScrollSpy.prototype.clear = function () {
26252 $(this.selector)
26253 .parentsUntil(this.options.target, '.active')
26254 .removeClass('active')
26255 }
26256
26257
26258 // SCROLLSPY PLUGIN DEFINITION
26259 // ===========================
26260
26261 function Plugin(option) {
26262 return this.each(function () {
26263 var $this = $(this)
26264 var data = $this.data('bs.scrollspy')
26265 var options = typeof option == 'object' && option
26266
26267 if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
26268 if (typeof option == 'string') data[option]()
26269 })
26270 }
26271
26272 var old = $.fn.scrollspy
26273
26274 $.fn.scrollspy = Plugin
26275 $.fn.scrollspy.Constructor = ScrollSpy
26276
26277
26278 // SCROLLSPY NO CONFLICT
26279 // =====================
26280
26281 $.fn.scrollspy.noConflict = function () {
26282 $.fn.scrollspy = old
26283 return this
26284 }
26285
26286
26287 // SCROLLSPY DATA-API
26288 // ==================
26289
26290 $(window).on('load.bs.scrollspy.data-api', function () {
26291 $('[data-spy="scroll"]').each(function () {
26292 var $spy = $(this)
26293 Plugin.call($spy, $spy.data())
26294 })
26295 })
26296
26297 }(jQuery);
26298
26299 /* ========================================================================
26300 * Bootstrap: tab.js v3.3.7
26301 * http://getbootstrap.com/javascript/#tabs
26302 * ========================================================================
26303 * Copyright 2011-2016 Twitter, Inc.
26304 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26305 * ======================================================================== */
26306
26307
26308 +function ($) {
26309 'use strict';
26310
26311 // TAB CLASS DEFINITION
26312 // ====================
26313
26314 var Tab = function (element) {
26315 // jscs:disable requireDollarBeforejQueryAssignment
26316 this.element = $(element)
26317 // jscs:enable requireDollarBeforejQueryAssignment
26318 }
26319
26320 Tab.VERSION = '3.3.7'
26321
26322 Tab.TRANSITION_DURATION = 150
26323
26324 Tab.prototype.show = function () {
26325 var $this = this.element
26326 var $ul = $this.closest('ul:not(.dropdown-menu)')
26327 var selector = $this.data('target')
26328
26329 if (!selector) {
26330 selector = $this.attr('href')
26331 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
26332 }
26333
26334 if ($this.parent('li').hasClass('active')) return
26335
26336 var $previous = $ul.find('.active:last a')
26337 var hideEvent = $.Event('hide.bs.tab', {
26338 relatedTarget: $this[0]
26339 })
26340 var showEvent = $.Event('show.bs.tab', {
26341 relatedTarget: $previous[0]
26342 })
26343
26344 $previous.trigger(hideEvent)
26345 $this.trigger(showEvent)
26346
26347 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
26348
26349 var $target = $(selector)
26350
26351 this.activate($this.closest('li'), $ul)
26352 this.activate($target, $target.parent(), function () {
26353 $previous.trigger({
26354 type: 'hidden.bs.tab',
26355 relatedTarget: $this[0]
26356 })
26357 $this.trigger({
26358 type: 'shown.bs.tab',
26359 relatedTarget: $previous[0]
26360 })
26361 })
26362 }
26363
26364 Tab.prototype.activate = function (element, container, callback) {
26365 var $active = container.find('> .active')
26366 var transition = callback
26367 && $.support.transition
26368 && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
26369
26370 function next() {
26371 $active
26372 .removeClass('active')
26373 .find('> .dropdown-menu > .active')
26374 .removeClass('active')
26375 .end()
26376 .find('[data-toggle="tab"]')
26377 .attr('aria-expanded', false)
26378
26379 element
26380 .addClass('active')
26381 .find('[data-toggle="tab"]')
26382 .attr('aria-expanded', true)
26383
26384 if (transition) {
26385 element[0].offsetWidth // reflow for transition
26386 element.addClass('in')
26387 } else {
26388 element.removeClass('fade')
26389 }
26390
26391 if (element.parent('.dropdown-menu').length) {
26392 element
26393 .closest('li.dropdown')
26394 .addClass('active')
26395 .end()
26396 .find('[data-toggle="tab"]')
26397 .attr('aria-expanded', true)
26398 }
26399
26400 callback && callback()
26401 }
26402
26403 $active.length && transition ?
26404 $active
26405 .one('bsTransitionEnd', next)
26406 .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
26407 next()
26408
26409 $active.removeClass('in')
26410 }
26411
26412
26413 // TAB PLUGIN DEFINITION
26414 // =====================
26415
26416 function Plugin(option) {
26417 return this.each(function () {
26418 var $this = $(this)
26419 var data = $this.data('bs.tab')
26420
26421 if (!data) $this.data('bs.tab', (data = new Tab(this)))
26422 if (typeof option == 'string') data[option]()
26423 })
26424 }
26425
26426 var old = $.fn.tab
26427
26428 $.fn.tab = Plugin
26429 $.fn.tab.Constructor = Tab
26430
26431
26432 // TAB NO CONFLICT
26433 // ===============
26434
26435 $.fn.tab.noConflict = function () {
26436 $.fn.tab = old
26437 return this
26438 }
26439
26440
26441 // TAB DATA-API
26442 // ============
26443
26444 var clickHandler = function (e) {
26445 e.preventDefault()
26446 Plugin.call($(this), 'show')
26447 }
26448
26449 $(document)
26450 .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
26451 .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
26452
26453 }(jQuery);
26454
26455 /* ========================================================================
26456 * Bootstrap: affix.js v3.3.7
26457 * http://getbootstrap.com/javascript/#affix
26458 * ========================================================================
26459 * Copyright 2011-2016 Twitter, Inc.
26460 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26461 * ======================================================================== */
26462
26463
26464 +function ($) {
26465 'use strict';
26466
26467 // AFFIX CLASS DEFINITION
26468 // ======================
26469
26470 var Affix = function (element, options) {
26471 this.options = $.extend({}, Affix.DEFAULTS, options)
26472
26473 this.$target = $(this.options.target)
26474 .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
26475 .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
26476
26477 this.$element = $(element)
26478 this.affixed = null
26479 this.unpin = null
26480 this.pinnedOffset = null
26481
26482 this.checkPosition()
26483 }
26484
26485 Affix.VERSION = '3.3.7'
26486
26487 Affix.RESET = 'affix affix-top affix-bottom'
26488
26489 Affix.DEFAULTS = {
26490 offset: 0,
26491 target: window
26492 }
26493
26494 Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
26495 var scrollTop = this.$target.scrollTop()
26496 var position = this.$element.offset()
26497 var targetHeight = this.$target.height()
26498
26499 if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
26500
26501 if (this.affixed == 'bottom') {
26502 if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
26503 return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
26504 }
26505
26506 var initializing = this.affixed == null
26507 var colliderTop = initializing ? scrollTop : position.top
26508 var colliderHeight = initializing ? targetHeight : height
26509
26510 if (offsetTop != null && scrollTop <= offsetTop) return 'top'
26511 if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
26512
26513 return false
26514 }
26515
26516 Affix.prototype.getPinnedOffset = function () {
26517 if (this.pinnedOffset) return this.pinnedOffset
26518 this.$element.removeClass(Affix.RESET).addClass('affix')
26519 var scrollTop = this.$target.scrollTop()
26520 var position = this.$element.offset()
26521 return (this.pinnedOffset = position.top - scrollTop)
26522 }
26523
26524 Affix.prototype.checkPositionWithEventLoop = function () {
26525 setTimeout($.proxy(this.checkPosition, this), 1)
26526 }
26527
26528 Affix.prototype.checkPosition = function () {
26529 if (!this.$element.is(':visible')) return
26530
26531 var height = this.$element.height()
26532 var offset = this.options.offset
26533 var offsetTop = offset.top
26534 var offsetBottom = offset.bottom
26535 var scrollHeight = Math.max($(document).height(), $(document.body).height())
26536
26537 if (typeof offset != 'object') offsetBottom = offsetTop = offset
26538 if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
26539 if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
26540
26541 var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
26542
26543 if (this.affixed != affix) {
26544 if (this.unpin != null) this.$element.css('top', '')
26545
26546 var affixType = 'affix' + (affix ? '-' + affix : '')
26547 var e = $.Event(affixType + '.bs.affix')
26548
26549 this.$element.trigger(e)
26550
26551 if (e.isDefaultPrevented()) return
26552
26553 this.affixed = affix
26554 this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
26555
26556 this.$element
26557 .removeClass(Affix.RESET)
26558 .addClass(affixType)
26559 .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
26560 }
26561
26562 if (affix == 'bottom') {
26563 this.$element.offset({
26564 top: scrollHeight - height - offsetBottom
26565 })
26566 }
26567 }
26568
26569
26570 // AFFIX PLUGIN DEFINITION
26571 // =======================
26572
26573 function Plugin(option) {
26574 return this.each(function () {
26575 var $this = $(this)
26576 var data = $this.data('bs.affix')
26577 var options = typeof option == 'object' && option
26578
26579 if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
26580 if (typeof option == 'string') data[option]()
26581 })
26582 }
26583
26584 var old = $.fn.affix
26585
26586 $.fn.affix = Plugin
26587 $.fn.affix.Constructor = Affix
26588
26589
26590 // AFFIX NO CONFLICT
26591 // =================
26592
26593 $.fn.affix.noConflict = function () {
26594 $.fn.affix = old
26595 return this
26596 }
26597
26598
26599 // AFFIX DATA-API
26600 // ==============
26601
26602 $(window).on('load', function () {
26603 $('[data-spy="affix"]').each(function () {
26604 var $spy = $(this)
26605 var data = $spy.data()
26606
26607 data.offset = data.offset || {}
26608
26609 if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
26610 if (data.offsetTop != null) data.offset.top = data.offsetTop
26611
26612 Plugin.call($spy, data)
26613 })
26614 })
26615
26616 }(jQuery);
26617 </script>
26618 <script>(function() {
26619 'use strict';
26620
26621 /**
26622 * Extend an Object with another Object's properties.
26623 *
26624 * The source objects are specified as additional arguments.
26625 *
26626 * @param dst Object the object to extend.
26627 *
26628 * @return Object the final object.
26629 */
26630 var _extend = function(dst) {
26631 var sources = Array.prototype.slice.call(arguments, 1);
26632 for (var i=0; i<sources.length; ++i) {
26633 var src = sources[i];
26634 for (var p in src) {
26635 if (src.hasOwnProperty(p)) dst[p] = src[p];
26636 }
26637 }
26638 return dst;
26639 };
26640
26641
26642 /**
26643 * Defer execution of given function.
26644 * @param {Function} func
26645 */
26646 var _defer = function(func) {
26647 if (typeof setImmediate === 'function') {
26648 return setImmediate(func);
26649 } else {
26650 return setTimeout(func, 0);
26651 }
26652 };
26653
26654 /**
26655 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
26656 */
26657 var Levenshtein = {
26658 /**
26659 * Calculate levenshtein distance of the two strings.
26660 *
26661 * @param str1 String the first string.
26662 * @param str2 String the second string.
26663 * @return Integer the levenshtein distance (0 and above).
26664 */
26665 get: function(str1, str2) {
26666 // base cases
26667 if (str1 === str2) return 0;
26668 if (str1.length === 0) return str2.length;
26669 if (str2.length === 0) return str1.length;
26670
26671 // two rows
26672 var prevRow = new Array(str2.length + 1),
26673 curCol, nextCol, i, j, tmp;
26674
26675 // initialise previous row
26676 for (i=0; i<prevRow.length; ++i) {
26677 prevRow[i] = i;
26678 }
26679
26680 // calculate current row distance from previous row
26681 for (i=0; i<str1.length; ++i) {
26682 nextCol = i + 1;
26683
26684 for (j=0; j<str2.length; ++j) {
26685 curCol = nextCol;
26686
26687 // substution
26688 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
26689 // insertion
26690 tmp = curCol + 1;
26691 if (nextCol > tmp) {
26692 nextCol = tmp;
26693 }
26694 // deletion
26695 tmp = prevRow[j + 1] + 1;
26696 if (nextCol > tmp) {
26697 nextCol = tmp;
26698 }
26699
26700 // copy current col value into previous (in preparation for next iteration)
26701 prevRow[j] = curCol;
26702 }
26703
26704 // copy last col value into previous (in preparation for next iteration)
26705 prevRow[j] = nextCol;
26706 }
26707
26708 return nextCol;
26709 },
26710
26711 /**
26712 * Asynchronously calculate levenshtein distance of the two strings.
26713 *
26714 * @param str1 String the first string.
26715 * @param str2 String the second string.
26716 * @param cb Function callback function with signature: function(Error err, int distance)
26717 * @param [options] Object additional options.
26718 * @param [options.progress] Function progress callback with signature: function(percentComplete)
26719 */
26720 getAsync: function(str1, str2, cb, options) {
26721 options = _extend({}, {
26722 progress: null
26723 }, options);
26724
26725 // base cases
26726 if (str1 === str2) return cb(null, 0);
26727 if (str1.length === 0) return cb(null, str2.length);
26728 if (str2.length === 0) return cb(null, str1.length);
26729
26730 // two rows
26731 var prevRow = new Array(str2.length + 1),
26732 curCol, nextCol,
26733 i, j, tmp,
26734 startTime, currentTime;
26735
26736 // initialise previous row
26737 for (i=0; i<prevRow.length; ++i) {
26738 prevRow[i] = i;
26739 }
26740
26741 nextCol = 1;
26742 i = 0;
26743 j = -1;
26744
26745 var __calculate = function() {
26746 // reset timer
26747 startTime = new Date().valueOf();
26748 currentTime = startTime;
26749
26750 // keep going until one second has elapsed
26751 while (currentTime - startTime < 1000) {
26752 // reached end of current row?
26753 if (str2.length <= (++j)) {
26754 // copy current into previous (in preparation for next iteration)
26755 prevRow[j] = nextCol;
26756
26757 // if already done all chars
26758 if (str1.length <= (++i)) {
26759 return cb(null, nextCol);
26760 }
26761 // else if we have more left to do
26762 else {
26763 nextCol = i + 1;
26764 j = 0;
26765 }
26766 }
26767
26768 // calculation
26769 curCol = nextCol;
26770
26771 // substution
26772 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
26773 // insertion
26774 tmp = curCol + 1;
26775 if (nextCol > tmp) {
26776 nextCol = tmp;
26777 }
26778 // deletion
26779 tmp = prevRow[j + 1] + 1;
26780 if (nextCol > tmp) {
26781 nextCol = tmp;
26782 }
26783
26784 // copy current into previous (in preparation for next iteration)
26785 prevRow[j] = curCol;
26786
26787 // get current time
26788 currentTime = new Date().valueOf();
26789 }
26790
26791 // send a progress update?
26792 if (null !== options.progress) {
26793 try {
26794 options.progress.call(null, (i * 100.0/ str1.length));
26795 } catch (err) {
26796 return cb('Progress callback: ' + err.toString());
26797 }
26798 }
26799
26800 // next iteration
26801 _defer(__calculate);
26802 };
26803
26804 __calculate();
26805 }
26806
26807 };
26808
26809 // amd
26810 if (typeof define !== "undefined" && define !== null && define.amd) {
26811 define(function() {
26812 return Levenshtein;
26813 });
26814 }
26815 // commonjs
26816 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
26817 module.exports = Levenshtein;
26818 }
26819 // web worker
26820 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
26821 self.Levenshtein = Levenshtein;
26822 }
26823 // browser main thread
26824 else if (typeof window !== "undefined" && window !== null) {
26825 window.Levenshtein = Levenshtein;
26826 }
26827 }());
26828
26829 </script>
26830 <script>/*! kjua v0.1.1 - https://larsjung.de/kjua/ */
26831 !function(r,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.kjua=t():r.kjua=t()}(this,function(){return function(r){function t(n){if(e[n])return e[n].exports;var o=e[n]={exports:{},id:n,loaded:!1};return r[n].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var e={};return t.m=r,t.c=e,t.p="",t(0)}([function(r,t,e){"use strict";var n=e(1),o=n.createCanvas,i=n.canvasToImg,a=n.dpr,u=e(2),f=e(3),c=e(4);r.exports=function(r){var t=Object.assign({},u,r),e=f(t.text,t.ecLevel,t.minVersion,t.quiet),n=t.ratio||a,l=o(t.size,n),s=l.getContext("2d");return s.scale(n,n),c(e,s,t),"image"===t.render?i(l):l}},function(r,t){"use strict";var e=window,n=e.document,o=e.devicePixelRatio||1,i=function(r){return n.createElement(r)},a=function(r,t){return r.getAttribute(t)},u=function(r,t,e){return r.setAttribute(t,e)},f=function(r,t){var e=i("canvas");return u(e,"width",r*t),u(e,"height",r*t),e.style.width=r+"px",e.style.height=r+"px",e},c=function(r){var t=i("img");return u(t,"crossorigin","anonymous"),u(t,"src",r.toDataURL("image/png")),u(t,"width",a(r,"width")),u(t,"height",a(r,"height")),t.style.width=r.style.width,t.style.height=r.style.height,t};r.exports={createCanvas:f,canvasToImg:c,dpr:o}},function(r,t){"use strict";r.exports={render:"image",crisp:!0,minVersion:1,ecLevel:"L",size:200,ratio:null,fill:"#333",back:"#fff",text:"no text",rounded:0,quiet:0,mode:"plain",mSize:30,mPosX:50,mPosY:50,label:"no label",fontname:"sans",fontcolor:"#333",image:null}},function(r,t){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(r){return typeof r}:function(r){return r&&"function"==typeof Symbol&&r.constructor===Symbol?"symbol":typeof r},n=/code length overflow/i,o=function(){var e=function(){function r(t,e){if("undefined"==typeof t.length)throw new Error(t.length+"/"+e);var n=function(){for(var r=0;r<t.length&&0==t[r];)r+=1;for(var n=new Array(t.length-r+e),o=0;o<t.length-r;o+=1)n[o]=t[o+r];return n}(),o={};return o.getAt=function(r){return n[r]},o.getLength=function(){return n.length},o.multiply=function(t){for(var e=new Array(o.getLength()+t.getLength()-1),n=0;n<o.getLength();n+=1)for(var i=0;i<t.getLength();i+=1)e[n+i]^=a.gexp(a.glog(o.getAt(n))+a.glog(t.getAt(i)));return r(e,0)},o.mod=function(t){if(o.getLength()-t.getLength()<0)return o;for(var e=a.glog(o.getAt(0))-a.glog(t.getAt(0)),n=new Array(o.getLength()),i=0;i<o.getLength();i+=1)n[i]=o.getAt(i);for(var i=0;i<t.getLength();i+=1)n[i]^=a.gexp(a.glog(t.getAt(i))+e);return r(n,0).mod(t)},o}var t=function(t,e){var o=236,a=17,l=t,s=n[e],g=null,h=0,d=null,w=new Array,y={},p=function(r,t){h=4*l+17,g=function(r){for(var t=new Array(r),e=0;r>e;e+=1){t[e]=new Array(r);for(var n=0;r>n;n+=1)t[e][n]=null}return t}(h),m(0,0),m(h-7,0),m(0,h-7),E(),B(),M(r,t),l>=7&&T(r),null==d&&(d=x(l,s,w)),k(d,t)},m=function(r,t){for(var e=-1;7>=e;e+=1)if(!(-1>=r+e||r+e>=h))for(var n=-1;7>=n;n+=1)-1>=t+n||t+n>=h||(e>=0&&6>=e&&(0==n||6==n)||n>=0&&6>=n&&(0==e||6==e)||e>=2&&4>=e&&n>=2&&4>=n?g[r+e][t+n]=!0:g[r+e][t+n]=!1)},A=function(){for(var r=0,t=0,e=0;8>e;e+=1){p(!0,e);var n=i.getLostPoint(y);(0==e||r>n)&&(r=n,t=e)}return t},B=function(){for(var r=8;h-8>r;r+=1)null==g[r][6]&&(g[r][6]=r%2==0);for(var t=8;h-8>t;t+=1)null==g[6][t]&&(g[6][t]=t%2==0)},E=function(){for(var r=i.getPatternPosition(l),t=0;t<r.length;t+=1)for(var e=0;e<r.length;e+=1){var n=r[t],o=r[e];if(null==g[n][o])for(var a=-2;2>=a;a+=1)for(var u=-2;2>=u;u+=1)-2==a||2==a||-2==u||2==u||0==a&&0==u?g[n+a][o+u]=!0:g[n+a][o+u]=!1}},T=function(r){for(var t=i.getBCHTypeNumber(l),e=0;18>e;e+=1){var n=!r&&1==(t>>e&1);g[Math.floor(e/3)][e%3+h-8-3]=n}for(var e=0;18>e;e+=1){var n=!r&&1==(t>>e&1);g[e%3+h-8-3][Math.floor(e/3)]=n}},M=function(r,t){for(var e=s<<3|t,n=i.getBCHTypeInfo(e),o=0;15>o;o+=1){var a=!r&&1==(n>>o&1);6>o?g[o][8]=a:8>o?g[o+1][8]=a:g[h-15+o][8]=a}for(var o=0;15>o;o+=1){var a=!r&&1==(n>>o&1);8>o?g[8][h-o-1]=a:9>o?g[8][15-o-1+1]=a:g[8][15-o-1]=a}g[h-8][8]=!r},k=function(r,t){for(var e=-1,n=h-1,o=7,a=0,u=i.getMaskFunction(t),f=h-1;f>0;f-=2)for(6==f&&(f-=1);;){for(var c=0;2>c;c+=1)if(null==g[n][f-c]){var l=!1;a<r.length&&(l=1==(r[a]>>>o&1));var s=u(n,f-c);s&&(l=!l),g[n][f-c]=l,o-=1,-1==o&&(a+=1,o=7)}if(n+=e,0>n||n>=h){n-=e,e=-e;break}}},b=function(t,e){for(var n=0,o=0,a=0,u=new Array(e.length),f=new Array(e.length),c=0;c<e.length;c+=1){var l=e[c].dataCount,s=e[c].totalCount-l;o=Math.max(o,l),a=Math.max(a,s),u[c]=new Array(l);for(var g=0;g<u[c].length;g+=1)u[c][g]=255&t.getBuffer()[g+n];n+=l;var h=i.getErrorCorrectPolynomial(s),v=r(u[c],h.getLength()-1),d=v.mod(h);f[c]=new Array(h.getLength()-1);for(var g=0;g<f[c].length;g+=1){var w=g+d.getLength()-f[c].length;f[c][g]=w>=0?d.getAt(w):0}}for(var y=0,g=0;g<e.length;g+=1)y+=e[g].totalCount;for(var p=new Array(y),m=0,g=0;o>g;g+=1)for(var c=0;c<e.length;c+=1)g<u[c].length&&(p[m]=u[c][g],m+=1);for(var g=0;a>g;g+=1)for(var c=0;c<e.length;c+=1)g<f[c].length&&(p[m]=f[c][g],m+=1);return p},x=function(r,t,e){for(var n=u.getRSBlocks(r,t),c=f(),l=0;l<e.length;l+=1){var s=e[l];c.put(s.getMode(),4),c.put(s.getLength(),i.getLengthInBits(s.getMode(),r)),s.write(c)}for(var g=0,l=0;l<n.length;l+=1)g+=n[l].dataCount;if(c.getLengthInBits()>8*g)throw new Error("code length overflow. ("+c.getLengthInBits()+">"+8*g+")");for(c.getLengthInBits()+4<=8*g&&c.put(0,4);c.getLengthInBits()%8!=0;)c.putBit(!1);for(;;){if(c.getLengthInBits()>=8*g)break;if(c.put(o,8),c.getLengthInBits()>=8*g)break;c.put(a,8)}return b(c,n)};return y.addData=function(r){var t=c(r);w.push(t),d=null},y.isDark=function(r,t){if(0>r||r>=h||0>t||t>=h)throw new Error(r+","+t);return g[r][t]},y.getModuleCount=function(){return h},y.make=function(){p(!1,A())},y.createTableTag=function(r,t){r=r||2,t="undefined"==typeof t?4*r:t;var e="";e+='<table style="',e+=" border-width: 0px; border-style: none;",e+=" border-collapse: collapse;",e+=" padding: 0px; margin: "+t+"px;",e+='">',e+="<tbody>";for(var n=0;n<y.getModuleCount();n+=1){e+="<tr>";for(var o=0;o<y.getModuleCount();o+=1)e+='<td style="',e+=" border-width: 0px; border-style: none;",e+=" border-collapse: collapse;",e+=" padding: 0px; margin: 0px;",e+=" width: "+r+"px;",e+=" height: "+r+"px;",e+=" background-color: ",e+=y.isDark(n,o)?"#000000":"#ffffff",e+=";",e+='"/>';e+="</tr>"}return e+="</tbody>",e+="</table>"},y.createImgTag=function(r,t){r=r||2,t="undefined"==typeof t?4*r:t;var e=y.getModuleCount()*r+2*t,n=t,o=e-t;return v(e,e,function(t,e){if(t>=n&&o>t&&e>=n&&o>e){var i=Math.floor((t-n)/r),a=Math.floor((e-n)/r);return y.isDark(a,i)?0:1}return 1})},y};t.stringToBytes=function(r){for(var t=new Array,e=0;e<r.length;e+=1){var n=r.charCodeAt(e);t.push(255&n)}return t},t.createStringToBytes=function(r,t){var e=function(){for(var e=g(r),n=function(){var r=e.read();if(-1==r)throw new Error;return r},o=0,i={};;){var a=e.read();if(-1==a)break;var u=n(),f=n(),c=n(),l=String.fromCharCode(a<<8|u),s=f<<8|c;i[l]=s,o+=1}if(o!=t)throw new Error(o+" != "+t);return i}(),n="?".charCodeAt(0);return function(r){for(var t=new Array,o=0;o<r.length;o+=1){var i=r.charCodeAt(o);if(128>i)t.push(i);else{var a=e[r.charAt(o)];"number"==typeof a?(255&a)==a?t.push(a):(t.push(a>>>8),t.push(255&a)):t.push(n)}}return t}};var e={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},n={L:1,M:0,Q:3,H:2},o={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},i=function(){var t=[[],[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,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]],n=1335,i=7973,u=21522,f={},c=function(r){for(var t=0;0!=r;)t+=1,r>>>=1;return t};return f.getBCHTypeInfo=function(r){for(var t=r<<10;c(t)-c(n)>=0;)t^=n<<c(t)-c(n);return(r<<10|t)^u},f.getBCHTypeNumber=function(r){for(var t=r<<12;c(t)-c(i)>=0;)t^=i<<c(t)-c(i);return r<<12|t},f.getPatternPosition=function(r){return t[r-1]},f.getMaskFunction=function(r){switch(r){case o.PATTERN000:return function(r,t){return(r+t)%2==0};case o.PATTERN001:return function(r,t){return r%2==0};case o.PATTERN010:return function(r,t){return t%3==0};case o.PATTERN011:return function(r,t){return(r+t)%3==0};case o.PATTERN100:return function(r,t){return(Math.floor(r/2)+Math.floor(t/3))%2==0};case o.PATTERN101:return function(r,t){return r*t%2+r*t%3==0};case o.PATTERN110:return function(r,t){return(r*t%2+r*t%3)%2==0};case o.PATTERN111:return function(r,t){return(r*t%3+(r+t)%2)%2==0};default:throw new Error("bad maskPattern:"+r)}},f.getErrorCorrectPolynomial=function(t){for(var e=r([1],0),n=0;t>n;n+=1)e=e.multiply(r([1,a.gexp(n)],0));return e},f.getLengthInBits=function(r,t){if(t>=1&&10>t)switch(r){case e.MODE_NUMBER:return 10;case e.MODE_ALPHA_NUM:return 9;case e.MODE_8BIT_BYTE:return 8;case e.MODE_KANJI:return 8;default:throw new Error("mode:"+r)}else if(27>t)switch(r){case e.MODE_NUMBER:return 12;case e.MODE_ALPHA_NUM:return 11;case e.MODE_8BIT_BYTE:return 16;case e.MODE_KANJI:return 10;default:throw new Error("mode:"+r)}else{if(!(41>t))throw new Error("type:"+t);switch(r){case e.MODE_NUMBER:return 14;case e.MODE_ALPHA_NUM:return 13;case e.MODE_8BIT_BYTE:return 16;case e.MODE_KANJI:return 12;default:throw new Error("mode:"+r)}}},f.getLostPoint=function(r){for(var t=r.getModuleCount(),e=0,n=0;t>n;n+=1)for(var o=0;t>o;o+=1){for(var i=0,a=r.isDark(n,o),u=-1;1>=u;u+=1)if(!(0>n+u||n+u>=t))for(var f=-1;1>=f;f+=1)0>o+f||o+f>=t||0==u&&0==f||a==r.isDark(n+u,o+f)&&(i+=1);i>5&&(e+=3+i-5)}for(var n=0;t-1>n;n+=1)for(var o=0;t-1>o;o+=1){var c=0;r.isDark(n,o)&&(c+=1),r.isDark(n+1,o)&&(c+=1),r.isDark(n,o+1)&&(c+=1),r.isDark(n+1,o+1)&&(c+=1),0!=c&&4!=c||(e+=3)}for(var n=0;t>n;n+=1)for(var o=0;t-6>o;o+=1)r.isDark(n,o)&&!r.isDark(n,o+1)&&r.isDark(n,o+2)&&r.isDark(n,o+3)&&r.isDark(n,o+4)&&!r.isDark(n,o+5)&&r.isDark(n,o+6)&&(e+=40);for(var o=0;t>o;o+=1)for(var n=0;t-6>n;n+=1)r.isDark(n,o)&&!r.isDark(n+1,o)&&r.isDark(n+2,o)&&r.isDark(n+3,o)&&r.isDark(n+4,o)&&!r.isDark(n+5,o)&&r.isDark(n+6,o)&&(e+=40);for(var l=0,o=0;t>o;o+=1)for(var n=0;t>n;n+=1)r.isDark(n,o)&&(l+=1);var s=Math.abs(100*l/t/t-50)/5;return e+=10*s},f}(),a=function(){for(var r=new Array(256),t=new Array(256),e=0;8>e;e+=1)r[e]=1<<e;for(var e=8;256>e;e+=1)r[e]=r[e-4]^r[e-5]^r[e-6]^r[e-8];for(var e=0;255>e;e+=1)t[r[e]]=e;var n={};return n.glog=function(r){if(1>r)throw new Error("glog("+r+")");return t[r]},n.gexp=function(t){for(;0>t;)t+=255;for(;t>=256;)t-=255;return r[t]},n}(),u=function(){var r=[[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],[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,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,7,37,13],[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,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,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,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,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]],t=function(r,t){var e={};return e.totalCount=r,e.dataCount=t,e},e={},o=function(t,e){switch(e){case n.L:return r[4*(t-1)+0];case n.M:return r[4*(t-1)+1];case n.Q:return r[4*(t-1)+2];case n.H:return r[4*(t-1)+3];default:return}};return e.getRSBlocks=function(r,e){var n=o(r,e);if("undefined"==typeof n)throw new Error("bad rs block @ typeNumber:"+r+"/errorCorrectLevel:"+e);for(var i=n.length/3,a=new Array,u=0;i>u;u+=1)for(var f=n[3*u+0],c=n[3*u+1],l=n[3*u+2],s=0;f>s;s+=1)a.push(t(c,l));return a},e}(),f=function(){var r=new Array,t=0,e={};return e.getBuffer=function(){return r},e.getAt=function(t){var e=Math.floor(t/8);return 1==(r[e]>>>7-t%8&1)},e.put=function(r,t){for(var n=0;t>n;n+=1)e.putBit(1==(r>>>t-n-1&1))},e.getLengthInBits=function(){return t},e.putBit=function(e){var n=Math.floor(t/8);r.length<=n&&r.push(0),e&&(r[n]|=128>>>t%8),t+=1},e},c=function(r){var n=e.MODE_8BIT_BYTE,o=t.stringToBytes(r),i={};return i.getMode=function(){return n},i.getLength=function(r){return o.length},i.write=function(r){for(var t=0;t<o.length;t+=1)r.put(o[t],8)},i},l=function(){var r=new Array,t={};return t.writeByte=function(t){r.push(255&t)},t.writeShort=function(r){t.writeByte(r),t.writeByte(r>>>8)},t.writeBytes=function(r,e,n){e=e||0,n=n||r.length;for(var o=0;n>o;o+=1)t.writeByte(r[o+e])},t.writeString=function(r){for(var e=0;e<r.length;e+=1)t.writeByte(r.charCodeAt(e))},t.toByteArray=function(){return r},t.toString=function(){var t="";t+="[";for(var e=0;e<r.length;e+=1)e>0&&(t+=","),t+=r[e];return t+="]"},t},s=function(){var r=0,t=0,e=0,n="",o={},i=function(r){n+=String.fromCharCode(a(63&r))},a=function(r){if(0>r);else{if(26>r)return 65+r;if(52>r)return 97+(r-26);if(62>r)return 48+(r-52);if(62==r)return 43;if(63==r)return 47}throw new Error("n:"+r)};return o.writeByte=function(n){for(r=r<<8|255&n,t+=8,e+=1;t>=6;)i(r>>>t-6),t-=6},o.flush=function(){if(t>0&&(i(r<<6-t),r=0,t=0),e%3!=0)for(var o=3-e%3,a=0;o>a;a+=1)n+="="},o.toString=function(){return n},o},g=function(r){var t=r,e=0,n=0,o=0,i={};i.read=function(){for(;8>o;){if(e>=t.length){if(0==o)return-1;throw new Error("unexpected end of file./"+o)}var r=t.charAt(e);if(e+=1,"="==r)return o=0,-1;r.match(/^\s$/)||(n=n<<6|a(r.charCodeAt(0)),o+=6)}var i=n>>>o-8&255;return o-=8,i};var a=function(r){if(r>=65&&90>=r)return r-65;if(r>=97&&122>=r)return r-97+26;if(r>=48&&57>=r)return r-48+52;if(43==r)return 62;if(47==r)return 63;throw new Error("c:"+r)};return i},h=function(r,t){var e=r,n=t,o=new Array(r*t),i={};i.setPixel=function(r,t,n){o[t*e+r]=n},i.write=function(r){r.writeString("GIF87a"),r.writeShort(e),r.writeShort(n),r.writeByte(128),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(255),r.writeByte(255),r.writeByte(255),r.writeString(","),r.writeShort(0),r.writeShort(0),r.writeShort(e),r.writeShort(n),r.writeByte(0);var t=2,o=u(t);r.writeByte(t);for(var i=0;o.length-i>255;)r.writeByte(255),r.writeBytes(o,i,255),i+=255;r.writeByte(o.length-i),r.writeBytes(o,i,o.length-i),r.writeByte(0),r.writeString(";")};var a=function(r){var t=r,e=0,n=0,o={};return o.write=function(r,o){if(r>>>o!=0)throw new Error("length over");for(;e+o>=8;)t.writeByte(255&(r<<e|n)),o-=8-e,r>>>=8-e,n=0,e=0;n=r<<e|n,e+=o},o.flush=function(){e>0&&t.writeByte(n)},o},u=function(r){for(var t=1<<r,e=(1<<r)+1,n=r+1,i=f(),u=0;t>u;u+=1)i.add(String.fromCharCode(u));i.add(String.fromCharCode(t)),i.add(String.fromCharCode(e));var c=l(),s=a(c);s.write(t,n);var g=0,h=String.fromCharCode(o[g]);for(g+=1;g<o.length;){var v=String.fromCharCode(o[g]);g+=1,i.contains(h+v)?h+=v:(s.write(i.indexOf(h),n),i.size()<4095&&(i.size()==1<<n&&(n+=1),i.add(h+v)),h=v)}return s.write(i.indexOf(h),n),s.write(e,n),s.flush(),c.toByteArray()},f=function(){var r={},t=0,e={};return e.add=function(n){if(e.contains(n))throw new Error("dup key:"+n);r[n]=t,t+=1},e.size=function(){return t},e.indexOf=function(t){return r[t]},e.contains=function(t){return"undefined"!=typeof r[t]},e};return i},v=function(r,t,e,n){for(var o=h(r,t),i=0;t>i;i+=1)for(var a=0;r>a;a+=1)o.setPixel(a,i,e(a,i));var u=l();o.write(u);for(var f=s(),c=u.toByteArray(),g=0;g<c.length;g+=1)f.writeByte(c[g]);f.flush();var v="";return v+="<img",v+=' src="',v+="data:image/gif;base64,",v+=f,v+='"',v+=' width="',v+=r,v+='"',v+=' height="',v+=t,v+='"',n&&(v+=' alt="',v+=n,v+='"'),v+="/>"};return t}();return function(e){"function"==typeof define&&define.amd?define([],e):"object"==typeof t&&(r.exports=e())}(function(){return e}),!function(r){r.stringToBytes=function(r){function t(r){for(var t=[],e=0;e<r.length;e++){var n=r.charCodeAt(e);128>n?t.push(n):2048>n?t.push(192|n>>6,128|63&n):55296>n||n>=57344?t.push(224|n>>12,128|n>>6&63,128|63&n):(e++,n=65536+((1023&n)<<10|1023&r.charCodeAt(e)),t.push(240|n>>18,128|n>>12&63,128|n>>6&63,128|63&n))}return t}return t(r)}}(e),e}(),i=function(r,t){var i=arguments.length<=2||void 0===arguments[2]?1:arguments[2];i=Math.max(1,i);for(var a=i;40>=a;a+=1)try{var u=function(){var e=o(a,t);e.addData(r),e.make();var n=e.getModuleCount(),i=function(r,t){return r>=0&&n>r&&t>=0&&n>t&&e.isDark(r,t)};return{v:{text:r,level:t,version:a,moduleCount:n,isDark:i}}}();if("object"===("undefined"==typeof u?"undefined":e(u)))return u.v}catch(f){if(!n.test(f.message))throw f}return null},a=function(){var r=arguments.length<=0||void 0===arguments[0]?"":arguments[0],t=arguments.length<=1||void 0===arguments[1]?"L":arguments[1],e=arguments.length<=2||void 0===arguments[2]?1:arguments[2],n=arguments.length<=3||void 0===arguments[3]?0:arguments[3],o=i(r,t,e);return o&&!function(){var r=o.isDark;o.moduleCount+=2*n,o.isDark=function(t,e){return r(t-n,e-n)}}(),o};r.exports=a},function(r,t,e){"use strict";var n=e(5),o=e(6),i=function(r,t){r.fillStyle=t.back,r.fillRect(0,0,t.size,t.size)},a=function(r,t,e,n,o,i){r.isDark(o,i)&&t.rect(i*n,o*n,n,n)},u=function(r,t,e){if(r){var o=e.rounded>0&&e.rounded<=100?n:a,i=r.moduleCount,u=e.size/i,f=0;e.crisp&&(u=Math.floor(u),f=Math.floor((e.size-u*i)/2)),t.translate(f,f),t.beginPath();for(var c=0;i>c;c+=1)for(var l=0;i>l;l+=1)o(r,t,e,u,c,l);t.fillStyle=e.fill,t.fill(),t.translate(-f,-f)}},f=function(r,t,e){i(t,e),u(r,t,e),o(t,e)};r.exports=f},function(r,t){"use strict";var e=function(r){return{c:r,m:function(){var r;return(r=this.c).moveTo.apply(r,arguments),this},l:function(){var r;return(r=this.c).lineTo.apply(r,arguments),this},a:function(){var r;return(r=this.c).arcTo.apply(r,arguments),this}}},n=function(r,t,e,n,o,i,a,u,f,c){a?r.m(t+i,e):r.m(t,e),u?r.l(n-i,e).a(n,e,n,o,i):r.l(n,e),f?r.l(n,o-i).a(n,o,t,o,i):r.l(n,o),c?r.l(t+i,o).a(t,o,t,e,i):r.l(t,o),a?r.l(t,e+i).a(t,e,n,e,i):r.l(t,e)},o=function(r,t,e,n,o,i,a,u,f,c){a&&r.m(t+i,e).l(t,e).l(t,e+i).a(t,e,t+i,e,i),u&&r.m(n-i,e).l(n,e).l(n,e+i).a(n,e,n-i,e,i),f&&r.m(n-i,o).l(n,o).l(n,o-i).a(n,o,n-i,o,i),c&&r.m(t+i,o).l(t,o).l(t,o-i).a(t,o,t+i,o,i)},i=function(r,t,i,a,u,f){var c=f*a,l=u*a,s=c+a,g=l+a,h=.005*i.rounded*a,v=r.isDark,d=u-1,w=u+1,y=f-1,p=f+1,m=v(u,f),A=v(d,y),B=v(d,f),E=v(d,p),T=v(u,p),M=v(w,p),k=v(w,f),b=v(w,y),x=v(u,y),D=e(t);m?n(D,c,l,s,g,h,!B&&!x,!B&&!T,!k&&!T,!k&&!x):o(D,c,l,s,g,h,B&&x&&A,B&&T&&E,k&&T&&M,k&&x&&b)};r.exports=i},function(r,t){"use strict";var e=function(r,t){var e=t.size,n="bold "+.01*t.mSize*e+"px "+t.fontname;r.strokeStyle=t.back,r.lineWidth=.01*t.mSize*e*.1,r.fillStyle=t.fontcolor,r.font=n;var o=r.measureText(t.label).width,i=.01*t.mSize,a=o/e,u=(1-a)*t.mPosX*.01,f=(1-i)*t.mPosY*.01,c=u*e,l=f*e+.75*t.mSize*.01*e;r.strokeText(t.label,c,l),r.fillText(t.label,c,l)},n=function(r,t){var e=t.size,n=t.image.naturalWidth||1,o=t.image.naturalHeight||1,i=.01*t.mSize,a=i*n/o,u=(1-a)*t.mPosX*.01,f=(1-i)*t.mPosY*.01,c=u*e,l=f*e,s=a*e,g=i*e;r.drawImage(t.image,c,l,s,g)},o=function(r,t){var o=t.mode;"label"===o?e(r,t):"image"===o&&n(r,t)};r.exports=o}])});</script>
26832 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.bitcoinjs = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
26833 (function (global){
26834 'use strict';
26835
26836 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
26837 // original notice:
26838
26839 /*!
26840 * The buffer module from node.js, for the browser.
26841 *
26842 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
26843 * @license MIT
26844 */
26845 function compare(a, b) {
26846 if (a === b) {
26847 return 0;
26848 }
26849
26850 var x = a.length;
26851 var y = b.length;
26852
26853 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
26854 if (a[i] !== b[i]) {
26855 x = a[i];
26856 y = b[i];
26857 break;
26858 }
26859 }
26860
26861 if (x < y) {
26862 return -1;
26863 }
26864 if (y < x) {
26865 return 1;
26866 }
26867 return 0;
26868 }
26869 function isBuffer(b) {
26870 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
26871 return global.Buffer.isBuffer(b);
26872 }
26873 return !!(b != null && b._isBuffer);
26874 }
26875
26876 // based on node assert, original notice:
26877
26878 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
26879 //
26880 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
26881 //
26882 // Originally from narwhal.js (http://narwhaljs.org)
26883 // Copyright (c) 2009 Thomas Robinson <280north.com>
26884 //
26885 // Permission is hereby granted, free of charge, to any person obtaining a copy
26886 // of this software and associated documentation files (the 'Software'), to
26887 // deal in the Software without restriction, including without limitation the
26888 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
26889 // sell copies of the Software, and to permit persons to whom the Software is
26890 // furnished to do so, subject to the following conditions:
26891 //
26892 // The above copyright notice and this permission notice shall be included in
26893 // all copies or substantial portions of the Software.
26894 //
26895 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26896 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26897 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26898 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
26899 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26900 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26901
26902 var util = require('util/');
26903 var hasOwn = Object.prototype.hasOwnProperty;
26904 var pSlice = Array.prototype.slice;
26905 var functionsHaveNames = (function () {
26906 return function foo() {}.name === 'foo';
26907 }());
26908 function pToString (obj) {
26909 return Object.prototype.toString.call(obj);
26910 }
26911 function isView(arrbuf) {
26912 if (isBuffer(arrbuf)) {
26913 return false;
26914 }
26915 if (typeof global.ArrayBuffer !== 'function') {
26916 return false;
26917 }
26918 if (typeof ArrayBuffer.isView === 'function') {
26919 return ArrayBuffer.isView(arrbuf);
26920 }
26921 if (!arrbuf) {
26922 return false;
26923 }
26924 if (arrbuf instanceof DataView) {
26925 return true;
26926 }
26927 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
26928 return true;
26929 }
26930 return false;
26931 }
26932 // 1. The assert module provides functions that throw
26933 // AssertionError's when particular conditions are not met. The
26934 // assert module must conform to the following interface.
26935
26936 var assert = module.exports = ok;
26937
26938 // 2. The AssertionError is defined in assert.
26939 // new assert.AssertionError({ message: message,
26940 // actual: actual,
26941 // expected: expected })
26942
26943 var regex = /\s*function\s+([^\(\s]*)\s*/;
26944 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
26945 function getName(func) {
26946 if (!util.isFunction(func)) {
26947 return;
26948 }
26949 if (functionsHaveNames) {
26950 return func.name;
26951 }
26952 var str = func.toString();
26953 var match = str.match(regex);
26954 return match && match[1];
26955 }
26956 assert.AssertionError = function AssertionError(options) {
26957 this.name = 'AssertionError';
26958 this.actual = options.actual;
26959 this.expected = options.expected;
26960 this.operator = options.operator;
26961 if (options.message) {
26962 this.message = options.message;
26963 this.generatedMessage = false;
26964 } else {
26965 this.message = getMessage(this);
26966 this.generatedMessage = true;
26967 }
26968 var stackStartFunction = options.stackStartFunction || fail;
26969 if (Error.captureStackTrace) {
26970 Error.captureStackTrace(this, stackStartFunction);
26971 } else {
26972 // non v8 browsers so we can have a stacktrace
26973 var err = new Error();
26974 if (err.stack) {
26975 var out = err.stack;
26976
26977 // try to strip useless frames
26978 var fn_name = getName(stackStartFunction);
26979 var idx = out.indexOf('\n' + fn_name);
26980 if (idx >= 0) {
26981 // once we have located the function frame
26982 // we need to strip out everything before it (and its line)
26983 var next_line = out.indexOf('\n', idx + 1);
26984 out = out.substring(next_line + 1);
26985 }
26986
26987 this.stack = out;
26988 }
26989 }
26990 };
26991
26992 // assert.AssertionError instanceof Error
26993 util.inherits(assert.AssertionError, Error);
26994
26995 function truncate(s, n) {
26996 if (typeof s === 'string') {
26997 return s.length < n ? s : s.slice(0, n);
26998 } else {
26999 return s;
27000 }
27001 }
27002 function inspect(something) {
27003 if (functionsHaveNames || !util.isFunction(something)) {
27004 return util.inspect(something);
27005 }
27006 var rawname = getName(something);
27007 var name = rawname ? ': ' + rawname : '';
27008 return '[Function' + name + ']';
27009 }
27010 function getMessage(self) {
27011 return truncate(inspect(self.actual), 128) + ' ' +
27012 self.operator + ' ' +
27013 truncate(inspect(self.expected), 128);
27014 }
27015
27016 // At present only the three keys mentioned above are used and
27017 // understood by the spec. Implementations or sub modules can pass
27018 // other keys to the AssertionError's constructor - they will be
27019 // ignored.
27020
27021 // 3. All of the following functions must throw an AssertionError
27022 // when a corresponding condition is not met, with a message that
27023 // may be undefined if not provided. All assertion methods provide
27024 // both the actual and expected values to the assertion error for
27025 // display purposes.
27026
27027 function fail(actual, expected, message, operator, stackStartFunction) {
27028 throw new assert.AssertionError({
27029 message: message,
27030 actual: actual,
27031 expected: expected,
27032 operator: operator,
27033 stackStartFunction: stackStartFunction
27034 });
27035 }
27036
27037 // EXTENSION! allows for well behaved errors defined elsewhere.
27038 assert.fail = fail;
27039
27040 // 4. Pure assertion tests whether a value is truthy, as determined
27041 // by !!guard.
27042 // assert.ok(guard, message_opt);
27043 // This statement is equivalent to assert.equal(true, !!guard,
27044 // message_opt);. To test strictly for the value true, use
27045 // assert.strictEqual(true, guard, message_opt);.
27046
27047 function ok(value, message) {
27048 if (!value) fail(value, true, message, '==', assert.ok);
27049 }
27050 assert.ok = ok;
27051
27052 // 5. The equality assertion tests shallow, coercive equality with
27053 // ==.
27054 // assert.equal(actual, expected, message_opt);
27055
27056 assert.equal = function equal(actual, expected, message) {
27057 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
27058 };
27059
27060 // 6. The non-equality assertion tests for whether two objects are not equal
27061 // with != assert.notEqual(actual, expected, message_opt);
27062
27063 assert.notEqual = function notEqual(actual, expected, message) {
27064 if (actual == expected) {
27065 fail(actual, expected, message, '!=', assert.notEqual);
27066 }
27067 };
27068
27069 // 7. The equivalence assertion tests a deep equality relation.
27070 // assert.deepEqual(actual, expected, message_opt);
27071
27072 assert.deepEqual = function deepEqual(actual, expected, message) {
27073 if (!_deepEqual(actual, expected, false)) {
27074 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
27075 }
27076 };
27077
27078 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
27079 if (!_deepEqual(actual, expected, true)) {
27080 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
27081 }
27082 };
27083
27084 function _deepEqual(actual, expected, strict, memos) {
27085 // 7.1. All identical values are equivalent, as determined by ===.
27086 if (actual === expected) {
27087 return true;
27088 } else if (isBuffer(actual) && isBuffer(expected)) {
27089 return compare(actual, expected) === 0;
27090
27091 // 7.2. If the expected value is a Date object, the actual value is
27092 // equivalent if it is also a Date object that refers to the same time.
27093 } else if (util.isDate(actual) && util.isDate(expected)) {
27094 return actual.getTime() === expected.getTime();
27095
27096 // 7.3 If the expected value is a RegExp object, the actual value is
27097 // equivalent if it is also a RegExp object with the same source and
27098 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
27099 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
27100 return actual.source === expected.source &&
27101 actual.global === expected.global &&
27102 actual.multiline === expected.multiline &&
27103 actual.lastIndex === expected.lastIndex &&
27104 actual.ignoreCase === expected.ignoreCase;
27105
27106 // 7.4. Other pairs that do not both pass typeof value == 'object',
27107 // equivalence is determined by ==.
27108 } else if ((actual === null || typeof actual !== 'object') &&
27109 (expected === null || typeof expected !== 'object')) {
27110 return strict ? actual === expected : actual == expected;
27111
27112 // If both values are instances of typed arrays, wrap their underlying
27113 // ArrayBuffers in a Buffer each to increase performance
27114 // This optimization requires the arrays to have the same type as checked by
27115 // Object.prototype.toString (aka pToString). Never perform binary
27116 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
27117 // bit patterns are not identical.
27118 } else if (isView(actual) && isView(expected) &&
27119 pToString(actual) === pToString(expected) &&
27120 !(actual instanceof Float32Array ||
27121 actual instanceof Float64Array)) {
27122 return compare(new Uint8Array(actual.buffer),
27123 new Uint8Array(expected.buffer)) === 0;
27124
27125 // 7.5 For all other Object pairs, including Array objects, equivalence is
27126 // determined by having the same number of owned properties (as verified
27127 // with Object.prototype.hasOwnProperty.call), the same set of keys
27128 // (although not necessarily the same order), equivalent values for every
27129 // corresponding key, and an identical 'prototype' property. Note: this
27130 // accounts for both named and indexed properties on Arrays.
27131 } else if (isBuffer(actual) !== isBuffer(expected)) {
27132 return false;
27133 } else {
27134 memos = memos || {actual: [], expected: []};
27135
27136 var actualIndex = memos.actual.indexOf(actual);
27137 if (actualIndex !== -1) {
27138 if (actualIndex === memos.expected.indexOf(expected)) {
27139 return true;
27140 }
27141 }
27142
27143 memos.actual.push(actual);
27144 memos.expected.push(expected);
27145
27146 return objEquiv(actual, expected, strict, memos);
27147 }
27148 }
27149
27150 function isArguments(object) {
27151 return Object.prototype.toString.call(object) == '[object Arguments]';
27152 }
27153
27154 function objEquiv(a, b, strict, actualVisitedObjects) {
27155 if (a === null || a === undefined || b === null || b === undefined)
27156 return false;
27157 // if one is a primitive, the other must be same
27158 if (util.isPrimitive(a) || util.isPrimitive(b))
27159 return a === b;
27160 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
27161 return false;
27162 var aIsArgs = isArguments(a);
27163 var bIsArgs = isArguments(b);
27164 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
27165 return false;
27166 if (aIsArgs) {
27167 a = pSlice.call(a);
27168 b = pSlice.call(b);
27169 return _deepEqual(a, b, strict);
27170 }
27171 var ka = objectKeys(a);
27172 var kb = objectKeys(b);
27173 var key, i;
27174 // having the same number of owned properties (keys incorporates
27175 // hasOwnProperty)
27176 if (ka.length !== kb.length)
27177 return false;
27178 //the same set of keys (although not necessarily the same order),
27179 ka.sort();
27180 kb.sort();
27181 //~~~cheap key test
27182 for (i = ka.length - 1; i >= 0; i--) {
27183 if (ka[i] !== kb[i])
27184 return false;
27185 }
27186 //equivalent values for every corresponding key, and
27187 //~~~possibly expensive deep test
27188 for (i = ka.length - 1; i >= 0; i--) {
27189 key = ka[i];
27190 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
27191 return false;
27192 }
27193 return true;
27194 }
27195
27196 // 8. The non-equivalence assertion tests for any deep inequality.
27197 // assert.notDeepEqual(actual, expected, message_opt);
27198
27199 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
27200 if (_deepEqual(actual, expected, false)) {
27201 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
27202 }
27203 };
27204
27205 assert.notDeepStrictEqual = notDeepStrictEqual;
27206 function notDeepStrictEqual(actual, expected, message) {
27207 if (_deepEqual(actual, expected, true)) {
27208 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
27209 }
27210 }
27211
27212
27213 // 9. The strict equality assertion tests strict equality, as determined by ===.
27214 // assert.strictEqual(actual, expected, message_opt);
27215
27216 assert.strictEqual = function strictEqual(actual, expected, message) {
27217 if (actual !== expected) {
27218 fail(actual, expected, message, '===', assert.strictEqual);
27219 }
27220 };
27221
27222 // 10. The strict non-equality assertion tests for strict inequality, as
27223 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
27224
27225 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
27226 if (actual === expected) {
27227 fail(actual, expected, message, '!==', assert.notStrictEqual);
27228 }
27229 };
27230
27231 function expectedException(actual, expected) {
27232 if (!actual || !expected) {
27233 return false;
27234 }
27235
27236 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
27237 return expected.test(actual);
27238 }
27239
27240 try {
27241 if (actual instanceof expected) {
27242 return true;
27243 }
27244 } catch (e) {
27245 // Ignore. The instanceof check doesn't work for arrow functions.
27246 }
27247
27248 if (Error.isPrototypeOf(expected)) {
27249 return false;
27250 }
27251
27252 return expected.call({}, actual) === true;
27253 }
27254
27255 function _tryBlock(block) {
27256 var error;
27257 try {
27258 block();
27259 } catch (e) {
27260 error = e;
27261 }
27262 return error;
27263 }
27264
27265 function _throws(shouldThrow, block, expected, message) {
27266 var actual;
27267
27268 if (typeof block !== 'function') {
27269 throw new TypeError('"block" argument must be a function');
27270 }
27271
27272 if (typeof expected === 'string') {
27273 message = expected;
27274 expected = null;
27275 }
27276
27277 actual = _tryBlock(block);
27278
27279 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
27280 (message ? ' ' + message : '.');
27281
27282 if (shouldThrow && !actual) {
27283 fail(actual, expected, 'Missing expected exception' + message);
27284 }
27285
27286 var userProvidedMessage = typeof message === 'string';
27287 var isUnwantedException = !shouldThrow && util.isError(actual);
27288 var isUnexpectedException = !shouldThrow && actual && !expected;
27289
27290 if ((isUnwantedException &&
27291 userProvidedMessage &&
27292 expectedException(actual, expected)) ||
27293 isUnexpectedException) {
27294 fail(actual, expected, 'Got unwanted exception' + message);
27295 }
27296
27297 if ((shouldThrow && actual && expected &&
27298 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
27299 throw actual;
27300 }
27301 }
27302
27303 // 11. Expected to throw an error:
27304 // assert.throws(block, Error_opt, message_opt);
27305
27306 assert.throws = function(block, /*optional*/error, /*optional*/message) {
27307 _throws(true, block, error, message);
27308 };
27309
27310 // EXTENSION! This is annoying to write outside this module.
27311 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
27312 _throws(false, block, error, message);
27313 };
27314
27315 assert.ifError = function(err) { if (err) throw err; };
27316
27317 var objectKeys = Object.keys || function (obj) {
27318 var keys = [];
27319 for (var key in obj) {
27320 if (hasOwn.call(obj, key)) keys.push(key);
27321 }
27322 return keys;
27323 };
27324
27325 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
27326 },{"util/":33}],2:[function(require,module,exports){
27327 'use strict'
27328
27329 exports.byteLength = byteLength
27330 exports.toByteArray = toByteArray
27331 exports.fromByteArray = fromByteArray
27332
27333 var lookup = []
27334 var revLookup = []
27335 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
27336
27337 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
27338 for (var i = 0, len = code.length; i < len; ++i) {
27339 lookup[i] = code[i]
27340 revLookup[code.charCodeAt(i)] = i
27341 }
27342
27343 revLookup['-'.charCodeAt(0)] = 62
27344 revLookup['_'.charCodeAt(0)] = 63
27345
27346 function placeHoldersCount (b64) {
27347 var len = b64.length
27348 if (len % 4 > 0) {
27349 throw new Error('Invalid string. Length must be a multiple of 4')
27350 }
27351
27352 // the number of equal signs (place holders)
27353 // if there are two placeholders, than the two characters before it
27354 // represent one byte
27355 // if there is only one, then the three characters before it represent 2 bytes
27356 // this is just a cheap hack to not do indexOf twice
27357 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
27358 }
27359
27360 function byteLength (b64) {
27361 // base64 is 4/3 + up to two characters of the original data
27362 return b64.length * 3 / 4 - placeHoldersCount(b64)
27363 }
27364
27365 function toByteArray (b64) {
27366 var i, j, l, tmp, placeHolders, arr
27367 var len = b64.length
27368 placeHolders = placeHoldersCount(b64)
27369
27370 arr = new Arr(len * 3 / 4 - placeHolders)
27371
27372 // if there are placeholders, only get up to the last complete 4 chars
27373 l = placeHolders > 0 ? len - 4 : len
27374
27375 var L = 0
27376
27377 for (i = 0, j = 0; i < l; i += 4, j += 3) {
27378 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
27379 arr[L++] = (tmp >> 16) & 0xFF
27380 arr[L++] = (tmp >> 8) & 0xFF
27381 arr[L++] = tmp & 0xFF
27382 }
27383
27384 if (placeHolders === 2) {
27385 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
27386 arr[L++] = tmp & 0xFF
27387 } else if (placeHolders === 1) {
27388 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
27389 arr[L++] = (tmp >> 8) & 0xFF
27390 arr[L++] = tmp & 0xFF
27391 }
27392
27393 return arr
27394 }
27395
27396 function tripletToBase64 (num) {
27397 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
27398 }
27399
27400 function encodeChunk (uint8, start, end) {
27401 var tmp
27402 var output = []
27403 for (var i = start; i < end; i += 3) {
27404 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
27405 output.push(tripletToBase64(tmp))
27406 }
27407 return output.join('')
27408 }
27409
27410 function fromByteArray (uint8) {
27411 var tmp
27412 var len = uint8.length
27413 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
27414 var output = ''
27415 var parts = []
27416 var maxChunkLength = 16383 // must be multiple of 3
27417
27418 // go through the array every three bytes, we'll deal with trailing stuff later
27419 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
27420 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
27421 }
27422
27423 // pad the end with zeros, but make sure to not forget the extra bytes
27424 if (extraBytes === 1) {
27425 tmp = uint8[len - 1]
27426 output += lookup[tmp >> 2]
27427 output += lookup[(tmp << 4) & 0x3F]
27428 output += '=='
27429 } else if (extraBytes === 2) {
27430 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
27431 output += lookup[tmp >> 10]
27432 output += lookup[(tmp >> 4) & 0x3F]
27433 output += lookup[(tmp << 2) & 0x3F]
27434 output += '='
27435 }
27436
27437 parts.push(output)
27438
27439 return parts.join('')
27440 }
27441
27442 },{}],3:[function(require,module,exports){
27443
27444 },{}],4:[function(require,module,exports){
27445 (function (global){
27446 'use strict';
27447
27448 var buffer = require('buffer');
27449 var Buffer = buffer.Buffer;
27450 var SlowBuffer = buffer.SlowBuffer;
27451 var MAX_LEN = buffer.kMaxLength || 2147483647;
27452 exports.alloc = function alloc(size, fill, encoding) {
27453 if (typeof Buffer.alloc === 'function') {
27454 return Buffer.alloc(size, fill, encoding);
27455 }
27456 if (typeof encoding === 'number') {
27457 throw new TypeError('encoding must not be number');
27458 }
27459 if (typeof size !== 'number') {
27460 throw new TypeError('size must be a number');
27461 }
27462 if (size > MAX_LEN) {
27463 throw new RangeError('size is too large');
27464 }
27465 var enc = encoding;
27466 var _fill = fill;
27467 if (_fill === undefined) {
27468 enc = undefined;
27469 _fill = 0;
27470 }
27471 var buf = new Buffer(size);
27472 if (typeof _fill === 'string') {
27473 var fillBuf = new Buffer(_fill, enc);
27474 var flen = fillBuf.length;
27475 var i = -1;
27476 while (++i < size) {
27477 buf[i] = fillBuf[i % flen];
27478 }
27479 } else {
27480 buf.fill(_fill);
27481 }
27482 return buf;
27483 }
27484 exports.allocUnsafe = function allocUnsafe(size) {
27485 if (typeof Buffer.allocUnsafe === 'function') {
27486 return Buffer.allocUnsafe(size);
27487 }
27488 if (typeof size !== 'number') {
27489 throw new TypeError('size must be a number');
27490 }
27491 if (size > MAX_LEN) {
27492 throw new RangeError('size is too large');
27493 }
27494 return new Buffer(size);
27495 }
27496 exports.from = function from(value, encodingOrOffset, length) {
27497 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
27498 return Buffer.from(value, encodingOrOffset, length);
27499 }
27500 if (typeof value === 'number') {
27501 throw new TypeError('"value" argument must not be a number');
27502 }
27503 if (typeof value === 'string') {
27504 return new Buffer(value, encodingOrOffset);
27505 }
27506 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
27507 var offset = encodingOrOffset;
27508 if (arguments.length === 1) {
27509 return new Buffer(value);
27510 }
27511 if (typeof offset === 'undefined') {
27512 offset = 0;
27513 }
27514 var len = length;
27515 if (typeof len === 'undefined') {
27516 len = value.byteLength - offset;
27517 }
27518 if (offset >= value.byteLength) {
27519 throw new RangeError('\'offset\' is out of bounds');
27520 }
27521 if (len > value.byteLength - offset) {
27522 throw new RangeError('\'length\' is out of bounds');
27523 }
27524 return new Buffer(value.slice(offset, offset + len));
27525 }
27526 if (Buffer.isBuffer(value)) {
27527 var out = new Buffer(value.length);
27528 value.copy(out, 0, 0, value.length);
27529 return out;
27530 }
27531 if (value) {
27532 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
27533 return new Buffer(value);
27534 }
27535 if (value.type === 'Buffer' && Array.isArray(value.data)) {
27536 return new Buffer(value.data);
27537 }
27538 }
27539
27540 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
27541 }
27542 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
27543 if (typeof Buffer.allocUnsafeSlow === 'function') {
27544 return Buffer.allocUnsafeSlow(size);
27545 }
27546 if (typeof size !== 'number') {
27547 throw new TypeError('size must be a number');
27548 }
27549 if (size >= MAX_LEN) {
27550 throw new RangeError('size is too large');
27551 }
27552 return new SlowBuffer(size);
27553 }
27554
27555 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
27556 },{"buffer":5}],5:[function(require,module,exports){
27557 /*!
27558 * The buffer module from node.js, for the browser.
27559 *
27560 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
27561 * @license MIT
27562 */
27563 /* eslint-disable no-proto */
27564
27565 'use strict'
27566
27567 var base64 = require('base64-js')
27568 var ieee754 = require('ieee754')
27569
27570 exports.Buffer = Buffer
27571 exports.SlowBuffer = SlowBuffer
27572 exports.INSPECT_MAX_BYTES = 50
27573
27574 var K_MAX_LENGTH = 0x7fffffff
27575 exports.kMaxLength = K_MAX_LENGTH
27576
27577 /**
27578 * If `Buffer.TYPED_ARRAY_SUPPORT`:
27579 * === true Use Uint8Array implementation (fastest)
27580 * === false Print warning and recommend using `buffer` v4.x which has an Object
27581 * implementation (most compatible, even IE6)
27582 *
27583 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
27584 * Opera 11.6+, iOS 4.2+.
27585 *
27586 * We report that the browser does not support typed arrays if the are not subclassable
27587 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
27588 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
27589 * for __proto__ and has a buggy typed array implementation.
27590 */
27591 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
27592
27593 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
27594 typeof console.error === 'function') {
27595 console.error(
27596 'This browser lacks typed array (Uint8Array) support which is required by ' +
27597 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
27598 )
27599 }
27600
27601 function typedArraySupport () {
27602 // Can typed array instances can be augmented?
27603 try {
27604 var arr = new Uint8Array(1)
27605 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
27606 return arr.foo() === 42
27607 } catch (e) {
27608 return false
27609 }
27610 }
27611
27612 function createBuffer (length) {
27613 if (length > K_MAX_LENGTH) {
27614 throw new RangeError('Invalid typed array length')
27615 }
27616 // Return an augmented `Uint8Array` instance
27617 var buf = new Uint8Array(length)
27618 buf.__proto__ = Buffer.prototype
27619 return buf
27620 }
27621
27622 /**
27623 * The Buffer constructor returns instances of `Uint8Array` that have their
27624 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
27625 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
27626 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
27627 * returns a single octet.
27628 *
27629 * The `Uint8Array` prototype remains unmodified.
27630 */
27631
27632 function Buffer (arg, encodingOrOffset, length) {
27633 // Common case.
27634 if (typeof arg === 'number') {
27635 if (typeof encodingOrOffset === 'string') {
27636 throw new Error(
27637 'If encoding is specified then the first argument must be a string'
27638 )
27639 }
27640 return allocUnsafe(arg)
27641 }
27642 return from(arg, encodingOrOffset, length)
27643 }
27644
27645 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
27646 if (typeof Symbol !== 'undefined' && Symbol.species &&
27647 Buffer[Symbol.species] === Buffer) {
27648 Object.defineProperty(Buffer, Symbol.species, {
27649 value: null,
27650 configurable: true,
27651 enumerable: false,
27652 writable: false
27653 })
27654 }
27655
27656 Buffer.poolSize = 8192 // not used by this implementation
27657
27658 function from (value, encodingOrOffset, length) {
27659 if (typeof value === 'number') {
27660 throw new TypeError('"value" argument must not be a number')
27661 }
27662
27663 if (value instanceof ArrayBuffer) {
27664 return fromArrayBuffer(value, encodingOrOffset, length)
27665 }
27666
27667 if (typeof value === 'string') {
27668 return fromString(value, encodingOrOffset)
27669 }
27670
27671 return fromObject(value)
27672 }
27673
27674 /**
27675 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
27676 * if value is a number.
27677 * Buffer.from(str[, encoding])
27678 * Buffer.from(array)
27679 * Buffer.from(buffer)
27680 * Buffer.from(arrayBuffer[, byteOffset[, length]])
27681 **/
27682 Buffer.from = function (value, encodingOrOffset, length) {
27683 return from(value, encodingOrOffset, length)
27684 }
27685
27686 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
27687 // https://github.com/feross/buffer/pull/148
27688 Buffer.prototype.__proto__ = Uint8Array.prototype
27689 Buffer.__proto__ = Uint8Array
27690
27691 function assertSize (size) {
27692 if (typeof size !== 'number') {
27693 throw new TypeError('"size" argument must be a number')
27694 } else if (size < 0) {
27695 throw new RangeError('"size" argument must not be negative')
27696 }
27697 }
27698
27699 function alloc (size, fill, encoding) {
27700 assertSize(size)
27701 if (size <= 0) {
27702 return createBuffer(size)
27703 }
27704 if (fill !== undefined) {
27705 // Only pay attention to encoding if it's a string. This
27706 // prevents accidentally sending in a number that would
27707 // be interpretted as a start offset.
27708 return typeof encoding === 'string'
27709 ? createBuffer(size).fill(fill, encoding)
27710 : createBuffer(size).fill(fill)
27711 }
27712 return createBuffer(size)
27713 }
27714
27715 /**
27716 * Creates a new filled Buffer instance.
27717 * alloc(size[, fill[, encoding]])
27718 **/
27719 Buffer.alloc = function (size, fill, encoding) {
27720 return alloc(size, fill, encoding)
27721 }
27722
27723 function allocUnsafe (size) {
27724 assertSize(size)
27725 return createBuffer(size < 0 ? 0 : checked(size) | 0)
27726 }
27727
27728 /**
27729 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
27730 * */
27731 Buffer.allocUnsafe = function (size) {
27732 return allocUnsafe(size)
27733 }
27734 /**
27735 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
27736 */
27737 Buffer.allocUnsafeSlow = function (size) {
27738 return allocUnsafe(size)
27739 }
27740
27741 function fromString (string, encoding) {
27742 if (typeof encoding !== 'string' || encoding === '') {
27743 encoding = 'utf8'
27744 }
27745
27746 if (!Buffer.isEncoding(encoding)) {
27747 throw new TypeError('"encoding" must be a valid string encoding')
27748 }
27749
27750 var length = byteLength(string, encoding) | 0
27751 var buf = createBuffer(length)
27752
27753 var actual = buf.write(string, encoding)
27754
27755 if (actual !== length) {
27756 // Writing a hex string, for example, that contains invalid characters will
27757 // cause everything after the first invalid character to be ignored. (e.g.
27758 // 'abxxcd' will be treated as 'ab')
27759 buf = buf.slice(0, actual)
27760 }
27761
27762 return buf
27763 }
27764
27765 function fromArrayLike (array) {
27766 var length = array.length < 0 ? 0 : checked(array.length) | 0
27767 var buf = createBuffer(length)
27768 for (var i = 0; i < length; i += 1) {
27769 buf[i] = array[i] & 255
27770 }
27771 return buf
27772 }
27773
27774 function fromArrayBuffer (array, byteOffset, length) {
27775 if (byteOffset < 0 || array.byteLength < byteOffset) {
27776 throw new RangeError('\'offset\' is out of bounds')
27777 }
27778
27779 if (array.byteLength < byteOffset + (length || 0)) {
27780 throw new RangeError('\'length\' is out of bounds')
27781 }
27782
27783 var buf
27784 if (byteOffset === undefined && length === undefined) {
27785 buf = new Uint8Array(array)
27786 } else if (length === undefined) {
27787 buf = new Uint8Array(array, byteOffset)
27788 } else {
27789 buf = new Uint8Array(array, byteOffset, length)
27790 }
27791
27792 // Return an augmented `Uint8Array` instance
27793 buf.__proto__ = Buffer.prototype
27794 return buf
27795 }
27796
27797 function fromObject (obj) {
27798 if (Buffer.isBuffer(obj)) {
27799 var len = checked(obj.length) | 0
27800 var buf = createBuffer(len)
27801
27802 if (buf.length === 0) {
27803 return buf
27804 }
27805
27806 obj.copy(buf, 0, 0, len)
27807 return buf
27808 }
27809
27810 if (obj) {
27811 if (isArrayBufferView(obj) || 'length' in obj) {
27812 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
27813 return createBuffer(0)
27814 }
27815 return fromArrayLike(obj)
27816 }
27817
27818 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
27819 return fromArrayLike(obj.data)
27820 }
27821 }
27822
27823 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
27824 }
27825
27826 function checked (length) {
27827 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
27828 // length is NaN (which is otherwise coerced to zero.)
27829 if (length >= K_MAX_LENGTH) {
27830 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
27831 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
27832 }
27833 return length | 0
27834 }
27835
27836 function SlowBuffer (length) {
27837 if (+length != length) { // eslint-disable-line eqeqeq
27838 length = 0
27839 }
27840 return Buffer.alloc(+length)
27841 }
27842
27843 Buffer.isBuffer = function isBuffer (b) {
27844 return b != null && b._isBuffer === true
27845 }
27846
27847 Buffer.compare = function compare (a, b) {
27848 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
27849 throw new TypeError('Arguments must be Buffers')
27850 }
27851
27852 if (a === b) return 0
27853
27854 var x = a.length
27855 var y = b.length
27856
27857 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
27858 if (a[i] !== b[i]) {
27859 x = a[i]
27860 y = b[i]
27861 break
27862 }
27863 }
27864
27865 if (x < y) return -1
27866 if (y < x) return 1
27867 return 0
27868 }
27869
27870 Buffer.isEncoding = function isEncoding (encoding) {
27871 switch (String(encoding).toLowerCase()) {
27872 case 'hex':
27873 case 'utf8':
27874 case 'utf-8':
27875 case 'ascii':
27876 case 'latin1':
27877 case 'binary':
27878 case 'base64':
27879 case 'ucs2':
27880 case 'ucs-2':
27881 case 'utf16le':
27882 case 'utf-16le':
27883 return true
27884 default:
27885 return false
27886 }
27887 }
27888
27889 Buffer.concat = function concat (list, length) {
27890 if (!Array.isArray(list)) {
27891 throw new TypeError('"list" argument must be an Array of Buffers')
27892 }
27893
27894 if (list.length === 0) {
27895 return Buffer.alloc(0)
27896 }
27897
27898 var i
27899 if (length === undefined) {
27900 length = 0
27901 for (i = 0; i < list.length; ++i) {
27902 length += list[i].length
27903 }
27904 }
27905
27906 var buffer = Buffer.allocUnsafe(length)
27907 var pos = 0
27908 for (i = 0; i < list.length; ++i) {
27909 var buf = list[i]
27910 if (!Buffer.isBuffer(buf)) {
27911 throw new TypeError('"list" argument must be an Array of Buffers')
27912 }
27913 buf.copy(buffer, pos)
27914 pos += buf.length
27915 }
27916 return buffer
27917 }
27918
27919 function byteLength (string, encoding) {
27920 if (Buffer.isBuffer(string)) {
27921 return string.length
27922 }
27923 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
27924 return string.byteLength
27925 }
27926 if (typeof string !== 'string') {
27927 string = '' + string
27928 }
27929
27930 var len = string.length
27931 if (len === 0) return 0
27932
27933 // Use a for loop to avoid recursion
27934 var loweredCase = false
27935 for (;;) {
27936 switch (encoding) {
27937 case 'ascii':
27938 case 'latin1':
27939 case 'binary':
27940 return len
27941 case 'utf8':
27942 case 'utf-8':
27943 case undefined:
27944 return utf8ToBytes(string).length
27945 case 'ucs2':
27946 case 'ucs-2':
27947 case 'utf16le':
27948 case 'utf-16le':
27949 return len * 2
27950 case 'hex':
27951 return len >>> 1
27952 case 'base64':
27953 return base64ToBytes(string).length
27954 default:
27955 if (loweredCase) return utf8ToBytes(string).length // assume utf8
27956 encoding = ('' + encoding).toLowerCase()
27957 loweredCase = true
27958 }
27959 }
27960 }
27961 Buffer.byteLength = byteLength
27962
27963 function slowToString (encoding, start, end) {
27964 var loweredCase = false
27965
27966 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
27967 // property of a typed array.
27968
27969 // This behaves neither like String nor Uint8Array in that we set start/end
27970 // to their upper/lower bounds if the value passed is out of range.
27971 // undefined is handled specially as per ECMA-262 6th Edition,
27972 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
27973 if (start === undefined || start < 0) {
27974 start = 0
27975 }
27976 // Return early if start > this.length. Done here to prevent potential uint32
27977 // coercion fail below.
27978 if (start > this.length) {
27979 return ''
27980 }
27981
27982 if (end === undefined || end > this.length) {
27983 end = this.length
27984 }
27985
27986 if (end <= 0) {
27987 return ''
27988 }
27989
27990 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
27991 end >>>= 0
27992 start >>>= 0
27993
27994 if (end <= start) {
27995 return ''
27996 }
27997
27998 if (!encoding) encoding = 'utf8'
27999
28000 while (true) {
28001 switch (encoding) {
28002 case 'hex':
28003 return hexSlice(this, start, end)
28004
28005 case 'utf8':
28006 case 'utf-8':
28007 return utf8Slice(this, start, end)
28008
28009 case 'ascii':
28010 return asciiSlice(this, start, end)
28011
28012 case 'latin1':
28013 case 'binary':
28014 return latin1Slice(this, start, end)
28015
28016 case 'base64':
28017 return base64Slice(this, start, end)
28018
28019 case 'ucs2':
28020 case 'ucs-2':
28021 case 'utf16le':
28022 case 'utf-16le':
28023 return utf16leSlice(this, start, end)
28024
28025 default:
28026 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
28027 encoding = (encoding + '').toLowerCase()
28028 loweredCase = true
28029 }
28030 }
28031 }
28032
28033 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
28034 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
28035 // reliably in a browserify context because there could be multiple different
28036 // copies of the 'buffer' package in use. This method works even for Buffer
28037 // instances that were created from another copy of the `buffer` package.
28038 // See: https://github.com/feross/buffer/issues/154
28039 Buffer.prototype._isBuffer = true
28040
28041 function swap (b, n, m) {
28042 var i = b[n]
28043 b[n] = b[m]
28044 b[m] = i
28045 }
28046
28047 Buffer.prototype.swap16 = function swap16 () {
28048 var len = this.length
28049 if (len % 2 !== 0) {
28050 throw new RangeError('Buffer size must be a multiple of 16-bits')
28051 }
28052 for (var i = 0; i < len; i += 2) {
28053 swap(this, i, i + 1)
28054 }
28055 return this
28056 }
28057
28058 Buffer.prototype.swap32 = function swap32 () {
28059 var len = this.length
28060 if (len % 4 !== 0) {
28061 throw new RangeError('Buffer size must be a multiple of 32-bits')
28062 }
28063 for (var i = 0; i < len; i += 4) {
28064 swap(this, i, i + 3)
28065 swap(this, i + 1, i + 2)
28066 }
28067 return this
28068 }
28069
28070 Buffer.prototype.swap64 = function swap64 () {
28071 var len = this.length
28072 if (len % 8 !== 0) {
28073 throw new RangeError('Buffer size must be a multiple of 64-bits')
28074 }
28075 for (var i = 0; i < len; i += 8) {
28076 swap(this, i, i + 7)
28077 swap(this, i + 1, i + 6)
28078 swap(this, i + 2, i + 5)
28079 swap(this, i + 3, i + 4)
28080 }
28081 return this
28082 }
28083
28084 Buffer.prototype.toString = function toString () {
28085 var length = this.length
28086 if (length === 0) return ''
28087 if (arguments.length === 0) return utf8Slice(this, 0, length)
28088 return slowToString.apply(this, arguments)
28089 }
28090
28091 Buffer.prototype.equals = function equals (b) {
28092 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
28093 if (this === b) return true
28094 return Buffer.compare(this, b) === 0
28095 }
28096
28097 Buffer.prototype.inspect = function inspect () {
28098 var str = ''
28099 var max = exports.INSPECT_MAX_BYTES
28100 if (this.length > 0) {
28101 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
28102 if (this.length > max) str += ' ... '
28103 }
28104 return '<Buffer ' + str + '>'
28105 }
28106
28107 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
28108 if (!Buffer.isBuffer(target)) {
28109 throw new TypeError('Argument must be a Buffer')
28110 }
28111
28112 if (start === undefined) {
28113 start = 0
28114 }
28115 if (end === undefined) {
28116 end = target ? target.length : 0
28117 }
28118 if (thisStart === undefined) {
28119 thisStart = 0
28120 }
28121 if (thisEnd === undefined) {
28122 thisEnd = this.length
28123 }
28124
28125 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
28126 throw new RangeError('out of range index')
28127 }
28128
28129 if (thisStart >= thisEnd && start >= end) {
28130 return 0
28131 }
28132 if (thisStart >= thisEnd) {
28133 return -1
28134 }
28135 if (start >= end) {
28136 return 1
28137 }
28138
28139 start >>>= 0
28140 end >>>= 0
28141 thisStart >>>= 0
28142 thisEnd >>>= 0
28143
28144 if (this === target) return 0
28145
28146 var x = thisEnd - thisStart
28147 var y = end - start
28148 var len = Math.min(x, y)
28149
28150 var thisCopy = this.slice(thisStart, thisEnd)
28151 var targetCopy = target.slice(start, end)
28152
28153 for (var i = 0; i < len; ++i) {
28154 if (thisCopy[i] !== targetCopy[i]) {
28155 x = thisCopy[i]
28156 y = targetCopy[i]
28157 break
28158 }
28159 }
28160
28161 if (x < y) return -1
28162 if (y < x) return 1
28163 return 0
28164 }
28165
28166 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
28167 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
28168 //
28169 // Arguments:
28170 // - buffer - a Buffer to search
28171 // - val - a string, Buffer, or number
28172 // - byteOffset - an index into `buffer`; will be clamped to an int32
28173 // - encoding - an optional encoding, relevant is val is a string
28174 // - dir - true for indexOf, false for lastIndexOf
28175 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
28176 // Empty buffer means no match
28177 if (buffer.length === 0) return -1
28178
28179 // Normalize byteOffset
28180 if (typeof byteOffset === 'string') {
28181 encoding = byteOffset
28182 byteOffset = 0
28183 } else if (byteOffset > 0x7fffffff) {
28184 byteOffset = 0x7fffffff
28185 } else if (byteOffset < -0x80000000) {
28186 byteOffset = -0x80000000
28187 }
28188 byteOffset = +byteOffset // Coerce to Number.
28189 if (numberIsNaN(byteOffset)) {
28190 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
28191 byteOffset = dir ? 0 : (buffer.length - 1)
28192 }
28193
28194 // Normalize byteOffset: negative offsets start from the end of the buffer
28195 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
28196 if (byteOffset >= buffer.length) {
28197 if (dir) return -1
28198 else byteOffset = buffer.length - 1
28199 } else if (byteOffset < 0) {
28200 if (dir) byteOffset = 0
28201 else return -1
28202 }
28203
28204 // Normalize val
28205 if (typeof val === 'string') {
28206 val = Buffer.from(val, encoding)
28207 }
28208
28209 // Finally, search either indexOf (if dir is true) or lastIndexOf
28210 if (Buffer.isBuffer(val)) {
28211 // Special case: looking for empty string/buffer always fails
28212 if (val.length === 0) {
28213 return -1
28214 }
28215 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
28216 } else if (typeof val === 'number') {
28217 val = val & 0xFF // Search for a byte value [0-255]
28218 if (typeof Uint8Array.prototype.indexOf === 'function') {
28219 if (dir) {
28220 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
28221 } else {
28222 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
28223 }
28224 }
28225 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
28226 }
28227
28228 throw new TypeError('val must be string, number or Buffer')
28229 }
28230
28231 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
28232 var indexSize = 1
28233 var arrLength = arr.length
28234 var valLength = val.length
28235
28236 if (encoding !== undefined) {
28237 encoding = String(encoding).toLowerCase()
28238 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
28239 encoding === 'utf16le' || encoding === 'utf-16le') {
28240 if (arr.length < 2 || val.length < 2) {
28241 return -1
28242 }
28243 indexSize = 2
28244 arrLength /= 2
28245 valLength /= 2
28246 byteOffset /= 2
28247 }
28248 }
28249
28250 function read (buf, i) {
28251 if (indexSize === 1) {
28252 return buf[i]
28253 } else {
28254 return buf.readUInt16BE(i * indexSize)
28255 }
28256 }
28257
28258 var i
28259 if (dir) {
28260 var foundIndex = -1
28261 for (i = byteOffset; i < arrLength; i++) {
28262 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
28263 if (foundIndex === -1) foundIndex = i
28264 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
28265 } else {
28266 if (foundIndex !== -1) i -= i - foundIndex
28267 foundIndex = -1
28268 }
28269 }
28270 } else {
28271 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
28272 for (i = byteOffset; i >= 0; i--) {
28273 var found = true
28274 for (var j = 0; j < valLength; j++) {
28275 if (read(arr, i + j) !== read(val, j)) {
28276 found = false
28277 break
28278 }
28279 }
28280 if (found) return i
28281 }
28282 }
28283
28284 return -1
28285 }
28286
28287 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
28288 return this.indexOf(val, byteOffset, encoding) !== -1
28289 }
28290
28291 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
28292 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
28293 }
28294
28295 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
28296 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
28297 }
28298
28299 function hexWrite (buf, string, offset, length) {
28300 offset = Number(offset) || 0
28301 var remaining = buf.length - offset
28302 if (!length) {
28303 length = remaining
28304 } else {
28305 length = Number(length)
28306 if (length > remaining) {
28307 length = remaining
28308 }
28309 }
28310
28311 // must be an even number of digits
28312 var strLen = string.length
28313 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
28314
28315 if (length > strLen / 2) {
28316 length = strLen / 2
28317 }
28318 for (var i = 0; i < length; ++i) {
28319 var parsed = parseInt(string.substr(i * 2, 2), 16)
28320 if (numberIsNaN(parsed)) return i
28321 buf[offset + i] = parsed
28322 }
28323 return i
28324 }
28325
28326 function utf8Write (buf, string, offset, length) {
28327 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
28328 }
28329
28330 function asciiWrite (buf, string, offset, length) {
28331 return blitBuffer(asciiToBytes(string), buf, offset, length)
28332 }
28333
28334 function latin1Write (buf, string, offset, length) {
28335 return asciiWrite(buf, string, offset, length)
28336 }
28337
28338 function base64Write (buf, string, offset, length) {
28339 return blitBuffer(base64ToBytes(string), buf, offset, length)
28340 }
28341
28342 function ucs2Write (buf, string, offset, length) {
28343 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
28344 }
28345
28346 Buffer.prototype.write = function write (string, offset, length, encoding) {
28347 // Buffer#write(string)
28348 if (offset === undefined) {
28349 encoding = 'utf8'
28350 length = this.length
28351 offset = 0
28352 // Buffer#write(string, encoding)
28353 } else if (length === undefined && typeof offset === 'string') {
28354 encoding = offset
28355 length = this.length
28356 offset = 0
28357 // Buffer#write(string, offset[, length][, encoding])
28358 } else if (isFinite(offset)) {
28359 offset = offset >>> 0
28360 if (isFinite(length)) {
28361 length = length >>> 0
28362 if (encoding === undefined) encoding = 'utf8'
28363 } else {
28364 encoding = length
28365 length = undefined
28366 }
28367 } else {
28368 throw new Error(
28369 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
28370 )
28371 }
28372
28373 var remaining = this.length - offset
28374 if (length === undefined || length > remaining) length = remaining
28375
28376 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
28377 throw new RangeError('Attempt to write outside buffer bounds')
28378 }
28379
28380 if (!encoding) encoding = 'utf8'
28381
28382 var loweredCase = false
28383 for (;;) {
28384 switch (encoding) {
28385 case 'hex':
28386 return hexWrite(this, string, offset, length)
28387
28388 case 'utf8':
28389 case 'utf-8':
28390 return utf8Write(this, string, offset, length)
28391
28392 case 'ascii':
28393 return asciiWrite(this, string, offset, length)
28394
28395 case 'latin1':
28396 case 'binary':
28397 return latin1Write(this, string, offset, length)
28398
28399 case 'base64':
28400 // Warning: maxLength not taken into account in base64Write
28401 return base64Write(this, string, offset, length)
28402
28403 case 'ucs2':
28404 case 'ucs-2':
28405 case 'utf16le':
28406 case 'utf-16le':
28407 return ucs2Write(this, string, offset, length)
28408
28409 default:
28410 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
28411 encoding = ('' + encoding).toLowerCase()
28412 loweredCase = true
28413 }
28414 }
28415 }
28416
28417 Buffer.prototype.toJSON = function toJSON () {
28418 return {
28419 type: 'Buffer',
28420 data: Array.prototype.slice.call(this._arr || this, 0)
28421 }
28422 }
28423
28424 function base64Slice (buf, start, end) {
28425 if (start === 0 && end === buf.length) {
28426 return base64.fromByteArray(buf)
28427 } else {
28428 return base64.fromByteArray(buf.slice(start, end))
28429 }
28430 }
28431
28432 function utf8Slice (buf, start, end) {
28433 end = Math.min(buf.length, end)
28434 var res = []
28435
28436 var i = start
28437 while (i < end) {
28438 var firstByte = buf[i]
28439 var codePoint = null
28440 var bytesPerSequence = (firstByte > 0xEF) ? 4
28441 : (firstByte > 0xDF) ? 3
28442 : (firstByte > 0xBF) ? 2
28443 : 1
28444
28445 if (i + bytesPerSequence <= end) {
28446 var secondByte, thirdByte, fourthByte, tempCodePoint
28447
28448 switch (bytesPerSequence) {
28449 case 1:
28450 if (firstByte < 0x80) {
28451 codePoint = firstByte
28452 }
28453 break
28454 case 2:
28455 secondByte = buf[i + 1]
28456 if ((secondByte & 0xC0) === 0x80) {
28457 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
28458 if (tempCodePoint > 0x7F) {
28459 codePoint = tempCodePoint
28460 }
28461 }
28462 break
28463 case 3:
28464 secondByte = buf[i + 1]
28465 thirdByte = buf[i + 2]
28466 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
28467 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
28468 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
28469 codePoint = tempCodePoint
28470 }
28471 }
28472 break
28473 case 4:
28474 secondByte = buf[i + 1]
28475 thirdByte = buf[i + 2]
28476 fourthByte = buf[i + 3]
28477 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
28478 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
28479 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
28480 codePoint = tempCodePoint
28481 }
28482 }
28483 }
28484 }
28485
28486 if (codePoint === null) {
28487 // we did not generate a valid codePoint so insert a
28488 // replacement char (U+FFFD) and advance only 1 byte
28489 codePoint = 0xFFFD
28490 bytesPerSequence = 1
28491 } else if (codePoint > 0xFFFF) {
28492 // encode to utf16 (surrogate pair dance)
28493 codePoint -= 0x10000
28494 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
28495 codePoint = 0xDC00 | codePoint & 0x3FF
28496 }
28497
28498 res.push(codePoint)
28499 i += bytesPerSequence
28500 }
28501
28502 return decodeCodePointsArray(res)
28503 }
28504
28505 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
28506 // the lowest limit is Chrome, with 0x10000 args.
28507 // We go 1 magnitude less, for safety
28508 var MAX_ARGUMENTS_LENGTH = 0x1000
28509
28510 function decodeCodePointsArray (codePoints) {
28511 var len = codePoints.length
28512 if (len <= MAX_ARGUMENTS_LENGTH) {
28513 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
28514 }
28515
28516 // Decode in chunks to avoid "call stack size exceeded".
28517 var res = ''
28518 var i = 0
28519 while (i < len) {
28520 res += String.fromCharCode.apply(
28521 String,
28522 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
28523 )
28524 }
28525 return res
28526 }
28527
28528 function asciiSlice (buf, start, end) {
28529 var ret = ''
28530 end = Math.min(buf.length, end)
28531
28532 for (var i = start; i < end; ++i) {
28533 ret += String.fromCharCode(buf[i] & 0x7F)
28534 }
28535 return ret
28536 }
28537
28538 function latin1Slice (buf, start, end) {
28539 var ret = ''
28540 end = Math.min(buf.length, end)
28541
28542 for (var i = start; i < end; ++i) {
28543 ret += String.fromCharCode(buf[i])
28544 }
28545 return ret
28546 }
28547
28548 function hexSlice (buf, start, end) {
28549 var len = buf.length
28550
28551 if (!start || start < 0) start = 0
28552 if (!end || end < 0 || end > len) end = len
28553
28554 var out = ''
28555 for (var i = start; i < end; ++i) {
28556 out += toHex(buf[i])
28557 }
28558 return out
28559 }
28560
28561 function utf16leSlice (buf, start, end) {
28562 var bytes = buf.slice(start, end)
28563 var res = ''
28564 for (var i = 0; i < bytes.length; i += 2) {
28565 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
28566 }
28567 return res
28568 }
28569
28570 Buffer.prototype.slice = function slice (start, end) {
28571 var len = this.length
28572 start = ~~start
28573 end = end === undefined ? len : ~~end
28574
28575 if (start < 0) {
28576 start += len
28577 if (start < 0) start = 0
28578 } else if (start > len) {
28579 start = len
28580 }
28581
28582 if (end < 0) {
28583 end += len
28584 if (end < 0) end = 0
28585 } else if (end > len) {
28586 end = len
28587 }
28588
28589 if (end < start) end = start
28590
28591 var newBuf = this.subarray(start, end)
28592 // Return an augmented `Uint8Array` instance
28593 newBuf.__proto__ = Buffer.prototype
28594 return newBuf
28595 }
28596
28597 /*
28598 * Need to make sure that buffer isn't trying to write out of bounds.
28599 */
28600 function checkOffset (offset, ext, length) {
28601 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
28602 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
28603 }
28604
28605 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
28606 offset = offset >>> 0
28607 byteLength = byteLength >>> 0
28608 if (!noAssert) checkOffset(offset, byteLength, this.length)
28609
28610 var val = this[offset]
28611 var mul = 1
28612 var i = 0
28613 while (++i < byteLength && (mul *= 0x100)) {
28614 val += this[offset + i] * mul
28615 }
28616
28617 return val
28618 }
28619
28620 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
28621 offset = offset >>> 0
28622 byteLength = byteLength >>> 0
28623 if (!noAssert) {
28624 checkOffset(offset, byteLength, this.length)
28625 }
28626
28627 var val = this[offset + --byteLength]
28628 var mul = 1
28629 while (byteLength > 0 && (mul *= 0x100)) {
28630 val += this[offset + --byteLength] * mul
28631 }
28632
28633 return val
28634 }
28635
28636 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
28637 offset = offset >>> 0
28638 if (!noAssert) checkOffset(offset, 1, this.length)
28639 return this[offset]
28640 }
28641
28642 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
28643 offset = offset >>> 0
28644 if (!noAssert) checkOffset(offset, 2, this.length)
28645 return this[offset] | (this[offset + 1] << 8)
28646 }
28647
28648 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
28649 offset = offset >>> 0
28650 if (!noAssert) checkOffset(offset, 2, this.length)
28651 return (this[offset] << 8) | this[offset + 1]
28652 }
28653
28654 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
28655 offset = offset >>> 0
28656 if (!noAssert) checkOffset(offset, 4, this.length)
28657
28658 return ((this[offset]) |
28659 (this[offset + 1] << 8) |
28660 (this[offset + 2] << 16)) +
28661 (this[offset + 3] * 0x1000000)
28662 }
28663
28664 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
28665 offset = offset >>> 0
28666 if (!noAssert) checkOffset(offset, 4, this.length)
28667
28668 return (this[offset] * 0x1000000) +
28669 ((this[offset + 1] << 16) |
28670 (this[offset + 2] << 8) |
28671 this[offset + 3])
28672 }
28673
28674 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
28675 offset = offset >>> 0
28676 byteLength = byteLength >>> 0
28677 if (!noAssert) checkOffset(offset, byteLength, this.length)
28678
28679 var val = this[offset]
28680 var mul = 1
28681 var i = 0
28682 while (++i < byteLength && (mul *= 0x100)) {
28683 val += this[offset + i] * mul
28684 }
28685 mul *= 0x80
28686
28687 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
28688
28689 return val
28690 }
28691
28692 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
28693 offset = offset >>> 0
28694 byteLength = byteLength >>> 0
28695 if (!noAssert) checkOffset(offset, byteLength, this.length)
28696
28697 var i = byteLength
28698 var mul = 1
28699 var val = this[offset + --i]
28700 while (i > 0 && (mul *= 0x100)) {
28701 val += this[offset + --i] * mul
28702 }
28703 mul *= 0x80
28704
28705 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
28706
28707 return val
28708 }
28709
28710 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
28711 offset = offset >>> 0
28712 if (!noAssert) checkOffset(offset, 1, this.length)
28713 if (!(this[offset] & 0x80)) return (this[offset])
28714 return ((0xff - this[offset] + 1) * -1)
28715 }
28716
28717 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
28718 offset = offset >>> 0
28719 if (!noAssert) checkOffset(offset, 2, this.length)
28720 var val = this[offset] | (this[offset + 1] << 8)
28721 return (val & 0x8000) ? val | 0xFFFF0000 : val
28722 }
28723
28724 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
28725 offset = offset >>> 0
28726 if (!noAssert) checkOffset(offset, 2, this.length)
28727 var val = this[offset + 1] | (this[offset] << 8)
28728 return (val & 0x8000) ? val | 0xFFFF0000 : val
28729 }
28730
28731 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
28732 offset = offset >>> 0
28733 if (!noAssert) checkOffset(offset, 4, this.length)
28734
28735 return (this[offset]) |
28736 (this[offset + 1] << 8) |
28737 (this[offset + 2] << 16) |
28738 (this[offset + 3] << 24)
28739 }
28740
28741 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
28742 offset = offset >>> 0
28743 if (!noAssert) checkOffset(offset, 4, this.length)
28744
28745 return (this[offset] << 24) |
28746 (this[offset + 1] << 16) |
28747 (this[offset + 2] << 8) |
28748 (this[offset + 3])
28749 }
28750
28751 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
28752 offset = offset >>> 0
28753 if (!noAssert) checkOffset(offset, 4, this.length)
28754 return ieee754.read(this, offset, true, 23, 4)
28755 }
28756
28757 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
28758 offset = offset >>> 0
28759 if (!noAssert) checkOffset(offset, 4, this.length)
28760 return ieee754.read(this, offset, false, 23, 4)
28761 }
28762
28763 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
28764 offset = offset >>> 0
28765 if (!noAssert) checkOffset(offset, 8, this.length)
28766 return ieee754.read(this, offset, true, 52, 8)
28767 }
28768
28769 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
28770 offset = offset >>> 0
28771 if (!noAssert) checkOffset(offset, 8, this.length)
28772 return ieee754.read(this, offset, false, 52, 8)
28773 }
28774
28775 function checkInt (buf, value, offset, ext, max, min) {
28776 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
28777 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
28778 if (offset + ext > buf.length) throw new RangeError('Index out of range')
28779 }
28780
28781 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
28782 value = +value
28783 offset = offset >>> 0
28784 byteLength = byteLength >>> 0
28785 if (!noAssert) {
28786 var maxBytes = Math.pow(2, 8 * byteLength) - 1
28787 checkInt(this, value, offset, byteLength, maxBytes, 0)
28788 }
28789
28790 var mul = 1
28791 var i = 0
28792 this[offset] = value & 0xFF
28793 while (++i < byteLength && (mul *= 0x100)) {
28794 this[offset + i] = (value / mul) & 0xFF
28795 }
28796
28797 return offset + byteLength
28798 }
28799
28800 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
28801 value = +value
28802 offset = offset >>> 0
28803 byteLength = byteLength >>> 0
28804 if (!noAssert) {
28805 var maxBytes = Math.pow(2, 8 * byteLength) - 1
28806 checkInt(this, value, offset, byteLength, maxBytes, 0)
28807 }
28808
28809 var i = byteLength - 1
28810 var mul = 1
28811 this[offset + i] = value & 0xFF
28812 while (--i >= 0 && (mul *= 0x100)) {
28813 this[offset + i] = (value / mul) & 0xFF
28814 }
28815
28816 return offset + byteLength
28817 }
28818
28819 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
28820 value = +value
28821 offset = offset >>> 0
28822 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
28823 this[offset] = (value & 0xff)
28824 return offset + 1
28825 }
28826
28827 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
28828 value = +value
28829 offset = offset >>> 0
28830 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
28831 this[offset] = (value & 0xff)
28832 this[offset + 1] = (value >>> 8)
28833 return offset + 2
28834 }
28835
28836 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
28837 value = +value
28838 offset = offset >>> 0
28839 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
28840 this[offset] = (value >>> 8)
28841 this[offset + 1] = (value & 0xff)
28842 return offset + 2
28843 }
28844
28845 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
28846 value = +value
28847 offset = offset >>> 0
28848 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
28849 this[offset + 3] = (value >>> 24)
28850 this[offset + 2] = (value >>> 16)
28851 this[offset + 1] = (value >>> 8)
28852 this[offset] = (value & 0xff)
28853 return offset + 4
28854 }
28855
28856 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
28857 value = +value
28858 offset = offset >>> 0
28859 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
28860 this[offset] = (value >>> 24)
28861 this[offset + 1] = (value >>> 16)
28862 this[offset + 2] = (value >>> 8)
28863 this[offset + 3] = (value & 0xff)
28864 return offset + 4
28865 }
28866
28867 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
28868 value = +value
28869 offset = offset >>> 0
28870 if (!noAssert) {
28871 var limit = Math.pow(2, (8 * byteLength) - 1)
28872
28873 checkInt(this, value, offset, byteLength, limit - 1, -limit)
28874 }
28875
28876 var i = 0
28877 var mul = 1
28878 var sub = 0
28879 this[offset] = value & 0xFF
28880 while (++i < byteLength && (mul *= 0x100)) {
28881 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
28882 sub = 1
28883 }
28884 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
28885 }
28886
28887 return offset + byteLength
28888 }
28889
28890 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
28891 value = +value
28892 offset = offset >>> 0
28893 if (!noAssert) {
28894 var limit = Math.pow(2, (8 * byteLength) - 1)
28895
28896 checkInt(this, value, offset, byteLength, limit - 1, -limit)
28897 }
28898
28899 var i = byteLength - 1
28900 var mul = 1
28901 var sub = 0
28902 this[offset + i] = value & 0xFF
28903 while (--i >= 0 && (mul *= 0x100)) {
28904 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
28905 sub = 1
28906 }
28907 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
28908 }
28909
28910 return offset + byteLength
28911 }
28912
28913 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
28914 value = +value
28915 offset = offset >>> 0
28916 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
28917 if (value < 0) value = 0xff + value + 1
28918 this[offset] = (value & 0xff)
28919 return offset + 1
28920 }
28921
28922 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
28923 value = +value
28924 offset = offset >>> 0
28925 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
28926 this[offset] = (value & 0xff)
28927 this[offset + 1] = (value >>> 8)
28928 return offset + 2
28929 }
28930
28931 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
28932 value = +value
28933 offset = offset >>> 0
28934 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
28935 this[offset] = (value >>> 8)
28936 this[offset + 1] = (value & 0xff)
28937 return offset + 2
28938 }
28939
28940 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
28941 value = +value
28942 offset = offset >>> 0
28943 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
28944 this[offset] = (value & 0xff)
28945 this[offset + 1] = (value >>> 8)
28946 this[offset + 2] = (value >>> 16)
28947 this[offset + 3] = (value >>> 24)
28948 return offset + 4
28949 }
28950
28951 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
28952 value = +value
28953 offset = offset >>> 0
28954 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
28955 if (value < 0) value = 0xffffffff + value + 1
28956 this[offset] = (value >>> 24)
28957 this[offset + 1] = (value >>> 16)
28958 this[offset + 2] = (value >>> 8)
28959 this[offset + 3] = (value & 0xff)
28960 return offset + 4
28961 }
28962
28963 function checkIEEE754 (buf, value, offset, ext, max, min) {
28964 if (offset + ext > buf.length) throw new RangeError('Index out of range')
28965 if (offset < 0) throw new RangeError('Index out of range')
28966 }
28967
28968 function writeFloat (buf, value, offset, littleEndian, noAssert) {
28969 value = +value
28970 offset = offset >>> 0
28971 if (!noAssert) {
28972 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
28973 }
28974 ieee754.write(buf, value, offset, littleEndian, 23, 4)
28975 return offset + 4
28976 }
28977
28978 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
28979 return writeFloat(this, value, offset, true, noAssert)
28980 }
28981
28982 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
28983 return writeFloat(this, value, offset, false, noAssert)
28984 }
28985
28986 function writeDouble (buf, value, offset, littleEndian, noAssert) {
28987 value = +value
28988 offset = offset >>> 0
28989 if (!noAssert) {
28990 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
28991 }
28992 ieee754.write(buf, value, offset, littleEndian, 52, 8)
28993 return offset + 8
28994 }
28995
28996 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
28997 return writeDouble(this, value, offset, true, noAssert)
28998 }
28999
29000 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
29001 return writeDouble(this, value, offset, false, noAssert)
29002 }
29003
29004 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
29005 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
29006 if (!start) start = 0
29007 if (!end && end !== 0) end = this.length
29008 if (targetStart >= target.length) targetStart = target.length
29009 if (!targetStart) targetStart = 0
29010 if (end > 0 && end < start) end = start
29011
29012 // Copy 0 bytes; we're done
29013 if (end === start) return 0
29014 if (target.length === 0 || this.length === 0) return 0
29015
29016 // Fatal error conditions
29017 if (targetStart < 0) {
29018 throw new RangeError('targetStart out of bounds')
29019 }
29020 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
29021 if (end < 0) throw new RangeError('sourceEnd out of bounds')
29022
29023 // Are we oob?
29024 if (end > this.length) end = this.length
29025 if (target.length - targetStart < end - start) {
29026 end = target.length - targetStart + start
29027 }
29028
29029 var len = end - start
29030 var i
29031
29032 if (this === target && start < targetStart && targetStart < end) {
29033 // descending copy from end
29034 for (i = len - 1; i >= 0; --i) {
29035 target[i + targetStart] = this[i + start]
29036 }
29037 } else if (len < 1000) {
29038 // ascending copy from start
29039 for (i = 0; i < len; ++i) {
29040 target[i + targetStart] = this[i + start]
29041 }
29042 } else {
29043 Uint8Array.prototype.set.call(
29044 target,
29045 this.subarray(start, start + len),
29046 targetStart
29047 )
29048 }
29049
29050 return len
29051 }
29052
29053 // Usage:
29054 // buffer.fill(number[, offset[, end]])
29055 // buffer.fill(buffer[, offset[, end]])
29056 // buffer.fill(string[, offset[, end]][, encoding])
29057 Buffer.prototype.fill = function fill (val, start, end, encoding) {
29058 // Handle string cases:
29059 if (typeof val === 'string') {
29060 if (typeof start === 'string') {
29061 encoding = start
29062 start = 0
29063 end = this.length
29064 } else if (typeof end === 'string') {
29065 encoding = end
29066 end = this.length
29067 }
29068 if (val.length === 1) {
29069 var code = val.charCodeAt(0)
29070 if (code < 256) {
29071 val = code
29072 }
29073 }
29074 if (encoding !== undefined && typeof encoding !== 'string') {
29075 throw new TypeError('encoding must be a string')
29076 }
29077 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
29078 throw new TypeError('Unknown encoding: ' + encoding)
29079 }
29080 } else if (typeof val === 'number') {
29081 val = val & 255
29082 }
29083
29084 // Invalid ranges are not set to a default, so can range check early.
29085 if (start < 0 || this.length < start || this.length < end) {
29086 throw new RangeError('Out of range index')
29087 }
29088
29089 if (end <= start) {
29090 return this
29091 }
29092
29093 start = start >>> 0
29094 end = end === undefined ? this.length : end >>> 0
29095
29096 if (!val) val = 0
29097
29098 var i
29099 if (typeof val === 'number') {
29100 for (i = start; i < end; ++i) {
29101 this[i] = val
29102 }
29103 } else {
29104 var bytes = Buffer.isBuffer(val)
29105 ? val
29106 : new Buffer(val, encoding)
29107 var len = bytes.length
29108 for (i = 0; i < end - start; ++i) {
29109 this[i + start] = bytes[i % len]
29110 }
29111 }
29112
29113 return this
29114 }
29115
29116 // HELPER FUNCTIONS
29117 // ================
29118
29119 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
29120
29121 function base64clean (str) {
29122 // Node strips out invalid characters like \n and \t from the string, base64-js does not
29123 str = str.trim().replace(INVALID_BASE64_RE, '')
29124 // Node converts strings with length < 2 to ''
29125 if (str.length < 2) return ''
29126 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
29127 while (str.length % 4 !== 0) {
29128 str = str + '='
29129 }
29130 return str
29131 }
29132
29133 function toHex (n) {
29134 if (n < 16) return '0' + n.toString(16)
29135 return n.toString(16)
29136 }
29137
29138 function utf8ToBytes (string, units) {
29139 units = units || Infinity
29140 var codePoint
29141 var length = string.length
29142 var leadSurrogate = null
29143 var bytes = []
29144
29145 for (var i = 0; i < length; ++i) {
29146 codePoint = string.charCodeAt(i)
29147
29148 // is surrogate component
29149 if (codePoint > 0xD7FF && codePoint < 0xE000) {
29150 // last char was a lead
29151 if (!leadSurrogate) {
29152 // no lead yet
29153 if (codePoint > 0xDBFF) {
29154 // unexpected trail
29155 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29156 continue
29157 } else if (i + 1 === length) {
29158 // unpaired lead
29159 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29160 continue
29161 }
29162
29163 // valid lead
29164 leadSurrogate = codePoint
29165
29166 continue
29167 }
29168
29169 // 2 leads in a row
29170 if (codePoint < 0xDC00) {
29171 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29172 leadSurrogate = codePoint
29173 continue
29174 }
29175
29176 // valid surrogate pair
29177 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
29178 } else if (leadSurrogate) {
29179 // valid bmp char, but last char was a lead
29180 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29181 }
29182
29183 leadSurrogate = null
29184
29185 // encode utf8
29186 if (codePoint < 0x80) {
29187 if ((units -= 1) < 0) break
29188 bytes.push(codePoint)
29189 } else if (codePoint < 0x800) {
29190 if ((units -= 2) < 0) break
29191 bytes.push(
29192 codePoint >> 0x6 | 0xC0,
29193 codePoint & 0x3F | 0x80
29194 )
29195 } else if (codePoint < 0x10000) {
29196 if ((units -= 3) < 0) break
29197 bytes.push(
29198 codePoint >> 0xC | 0xE0,
29199 codePoint >> 0x6 & 0x3F | 0x80,
29200 codePoint & 0x3F | 0x80
29201 )
29202 } else if (codePoint < 0x110000) {
29203 if ((units -= 4) < 0) break
29204 bytes.push(
29205 codePoint >> 0x12 | 0xF0,
29206 codePoint >> 0xC & 0x3F | 0x80,
29207 codePoint >> 0x6 & 0x3F | 0x80,
29208 codePoint & 0x3F | 0x80
29209 )
29210 } else {
29211 throw new Error('Invalid code point')
29212 }
29213 }
29214
29215 return bytes
29216 }
29217
29218 function asciiToBytes (str) {
29219 var byteArray = []
29220 for (var i = 0; i < str.length; ++i) {
29221 // Node's code seems to be doing this and not & 0x7F..
29222 byteArray.push(str.charCodeAt(i) & 0xFF)
29223 }
29224 return byteArray
29225 }
29226
29227 function utf16leToBytes (str, units) {
29228 var c, hi, lo
29229 var byteArray = []
29230 for (var i = 0; i < str.length; ++i) {
29231 if ((units -= 2) < 0) break
29232
29233 c = str.charCodeAt(i)
29234 hi = c >> 8
29235 lo = c % 256
29236 byteArray.push(lo)
29237 byteArray.push(hi)
29238 }
29239
29240 return byteArray
29241 }
29242
29243 function base64ToBytes (str) {
29244 return base64.toByteArray(base64clean(str))
29245 }
29246
29247 function blitBuffer (src, dst, offset, length) {
29248 for (var i = 0; i < length; ++i) {
29249 if ((i + offset >= dst.length) || (i >= src.length)) break
29250 dst[i + offset] = src[i]
29251 }
29252 return i
29253 }
29254
29255 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
29256 function isArrayBufferView (obj) {
29257 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
29258 }
29259
29260 function numberIsNaN (obj) {
29261 return obj !== obj // eslint-disable-line no-self-compare
29262 }
29263
29264 },{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
29265 (function (Buffer){
29266 // Copyright Joyent, Inc. and other Node contributors.
29267 //
29268 // Permission is hereby granted, free of charge, to any person obtaining a
29269 // copy of this software and associated documentation files (the
29270 // "Software"), to deal in the Software without restriction, including
29271 // without limitation the rights to use, copy, modify, merge, publish,
29272 // distribute, sublicense, and/or sell copies of the Software, and to permit
29273 // persons to whom the Software is furnished to do so, subject to the
29274 // following conditions:
29275 //
29276 // The above copyright notice and this permission notice shall be included
29277 // in all copies or substantial portions of the Software.
29278 //
29279 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
29280 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29281 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
29282 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
29283 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
29284 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
29285 // USE OR OTHER DEALINGS IN THE SOFTWARE.
29286
29287 // NOTE: These type checking functions intentionally don't use `instanceof`
29288 // because it is fragile and can be easily faked with `Object.create()`.
29289
29290 function isArray(arg) {
29291 if (Array.isArray) {
29292 return Array.isArray(arg);
29293 }
29294 return objectToString(arg) === '[object Array]';
29295 }
29296 exports.isArray = isArray;
29297
29298 function isBoolean(arg) {
29299 return typeof arg === 'boolean';
29300 }
29301 exports.isBoolean = isBoolean;
29302
29303 function isNull(arg) {
29304 return arg === null;
29305 }
29306 exports.isNull = isNull;
29307
29308 function isNullOrUndefined(arg) {
29309 return arg == null;
29310 }
29311 exports.isNullOrUndefined = isNullOrUndefined;
29312
29313 function isNumber(arg) {
29314 return typeof arg === 'number';
29315 }
29316 exports.isNumber = isNumber;
29317
29318 function isString(arg) {
29319 return typeof arg === 'string';
29320 }
29321 exports.isString = isString;
29322
29323 function isSymbol(arg) {
29324 return typeof arg === 'symbol';
29325 }
29326 exports.isSymbol = isSymbol;
29327
29328 function isUndefined(arg) {
29329 return arg === void 0;
29330 }
29331 exports.isUndefined = isUndefined;
29332
29333 function isRegExp(re) {
29334 return objectToString(re) === '[object RegExp]';
29335 }
29336 exports.isRegExp = isRegExp;
29337
29338 function isObject(arg) {
29339 return typeof arg === 'object' && arg !== null;
29340 }
29341 exports.isObject = isObject;
29342
29343 function isDate(d) {
29344 return objectToString(d) === '[object Date]';
29345 }
29346 exports.isDate = isDate;
29347
29348 function isError(e) {
29349 return (objectToString(e) === '[object Error]' || e instanceof Error);
29350 }
29351 exports.isError = isError;
29352
29353 function isFunction(arg) {
29354 return typeof arg === 'function';
29355 }
29356 exports.isFunction = isFunction;
29357
29358 function isPrimitive(arg) {
29359 return arg === null ||
29360 typeof arg === 'boolean' ||
29361 typeof arg === 'number' ||
29362 typeof arg === 'string' ||
29363 typeof arg === 'symbol' || // ES6 symbol
29364 typeof arg === 'undefined';
29365 }
29366 exports.isPrimitive = isPrimitive;
29367
29368 exports.isBuffer = Buffer.isBuffer;
29369
29370 function objectToString(o) {
29371 return Object.prototype.toString.call(o);
29372 }
29373
29374 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
29375 },{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
29376 // Copyright Joyent, Inc. and other Node contributors.
29377 //
29378 // Permission is hereby granted, free of charge, to any person obtaining a
29379 // copy of this software and associated documentation files (the
29380 // "Software"), to deal in the Software without restriction, including
29381 // without limitation the rights to use, copy, modify, merge, publish,
29382 // distribute, sublicense, and/or sell copies of the Software, and to permit
29383 // persons to whom the Software is furnished to do so, subject to the
29384 // following conditions:
29385 //
29386 // The above copyright notice and this permission notice shall be included
29387 // in all copies or substantial portions of the Software.
29388 //
29389 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
29390 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29391 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
29392 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
29393 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
29394 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
29395 // USE OR OTHER DEALINGS IN THE SOFTWARE.
29396
29397 function EventEmitter() {
29398 this._events = this._events || {};
29399 this._maxListeners = this._maxListeners || undefined;
29400 }
29401 module.exports = EventEmitter;
29402
29403 // Backwards-compat with node 0.10.x
29404 EventEmitter.EventEmitter = EventEmitter;
29405
29406 EventEmitter.prototype._events = undefined;
29407 EventEmitter.prototype._maxListeners = undefined;
29408
29409 // By default EventEmitters will print a warning if more than 10 listeners are
29410 // added to it. This is a useful default which helps finding memory leaks.
29411 EventEmitter.defaultMaxListeners = 10;
29412
29413 // Obviously not all Emitters should be limited to 10. This function allows
29414 // that to be increased. Set to zero for unlimited.
29415 EventEmitter.prototype.setMaxListeners = function(n) {
29416 if (!isNumber(n) || n < 0 || isNaN(n))
29417 throw TypeError('n must be a positive number');
29418 this._maxListeners = n;
29419 return this;
29420 };
29421
29422 EventEmitter.prototype.emit = function(type) {
29423 var er, handler, len, args, i, listeners;
29424
29425 if (!this._events)
29426 this._events = {};
29427
29428 // If there is no 'error' event listener then throw.
29429 if (type === 'error') {
29430 if (!this._events.error ||
29431 (isObject(this._events.error) && !this._events.error.length)) {
29432 er = arguments[1];
29433 if (er instanceof Error) {
29434 throw er; // Unhandled 'error' event
29435 } else {
29436 // At least give some kind of context to the user
29437 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
29438 err.context = er;
29439 throw err;
29440 }
29441 }
29442 }
29443
29444 handler = this._events[type];
29445
29446 if (isUndefined(handler))
29447 return false;
29448
29449 if (isFunction(handler)) {
29450 switch (arguments.length) {
29451 // fast cases
29452 case 1:
29453 handler.call(this);
29454 break;
29455 case 2:
29456 handler.call(this, arguments[1]);
29457 break;
29458 case 3:
29459 handler.call(this, arguments[1], arguments[2]);
29460 break;
29461 // slower
29462 default:
29463 args = Array.prototype.slice.call(arguments, 1);
29464 handler.apply(this, args);
29465 }
29466 } else if (isObject(handler)) {
29467 args = Array.prototype.slice.call(arguments, 1);
29468 listeners = handler.slice();
29469 len = listeners.length;
29470 for (i = 0; i < len; i++)
29471 listeners[i].apply(this, args);
29472 }
29473
29474 return true;
29475 };
29476
29477 EventEmitter.prototype.addListener = function(type, listener) {
29478 var m;
29479
29480 if (!isFunction(listener))
29481 throw TypeError('listener must be a function');
29482
29483 if (!this._events)
29484 this._events = {};
29485
29486 // To avoid recursion in the case that type === "newListener"! Before
29487 // adding it to the listeners, first emit "newListener".
29488 if (this._events.newListener)
29489 this.emit('newListener', type,
29490 isFunction(listener.listener) ?
29491 listener.listener : listener);
29492
29493 if (!this._events[type])
29494 // Optimize the case of one listener. Don't need the extra array object.
29495 this._events[type] = listener;
29496 else if (isObject(this._events[type]))
29497 // If we've already got an array, just append.
29498 this._events[type].push(listener);
29499 else
29500 // Adding the second element, need to change to array.
29501 this._events[type] = [this._events[type], listener];
29502
29503 // Check for listener leak
29504 if (isObject(this._events[type]) && !this._events[type].warned) {
29505 if (!isUndefined(this._maxListeners)) {
29506 m = this._maxListeners;
29507 } else {
29508 m = EventEmitter.defaultMaxListeners;
29509 }
29510
29511 if (m && m > 0 && this._events[type].length > m) {
29512 this._events[type].warned = true;
29513 console.error('(node) warning: possible EventEmitter memory ' +
29514 'leak detected. %d listeners added. ' +
29515 'Use emitter.setMaxListeners() to increase limit.',
29516 this._events[type].length);
29517 if (typeof console.trace === 'function') {
29518 // not supported in IE 10
29519 console.trace();
29520 }
29521 }
29522 }
29523
29524 return this;
29525 };
29526
29527 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
29528
29529 EventEmitter.prototype.once = function(type, listener) {
29530 if (!isFunction(listener))
29531 throw TypeError('listener must be a function');
29532
29533 var fired = false;
29534
29535 function g() {
29536 this.removeListener(type, g);
29537
29538 if (!fired) {
29539 fired = true;
29540 listener.apply(this, arguments);
29541 }
29542 }
29543
29544 g.listener = listener;
29545 this.on(type, g);
29546
29547 return this;
29548 };
29549
29550 // emits a 'removeListener' event iff the listener was removed
29551 EventEmitter.prototype.removeListener = function(type, listener) {
29552 var list, position, length, i;
29553
29554 if (!isFunction(listener))
29555 throw TypeError('listener must be a function');
29556
29557 if (!this._events || !this._events[type])
29558 return this;
29559
29560 list = this._events[type];
29561 length = list.length;
29562 position = -1;
29563
29564 if (list === listener ||
29565 (isFunction(list.listener) && list.listener === listener)) {
29566 delete this._events[type];
29567 if (this._events.removeListener)
29568 this.emit('removeListener', type, listener);
29569
29570 } else if (isObject(list)) {
29571 for (i = length; i-- > 0;) {
29572 if (list[i] === listener ||
29573 (list[i].listener && list[i].listener === listener)) {
29574 position = i;
29575 break;
29576 }
29577 }
29578
29579 if (position < 0)
29580 return this;
29581
29582 if (list.length === 1) {
29583 list.length = 0;
29584 delete this._events[type];
29585 } else {
29586 list.splice(position, 1);
29587 }
29588
29589 if (this._events.removeListener)
29590 this.emit('removeListener', type, listener);
29591 }
29592
29593 return this;
29594 };
29595
29596 EventEmitter.prototype.removeAllListeners = function(type) {
29597 var key, listeners;
29598
29599 if (!this._events)
29600 return this;
29601
29602 // not listening for removeListener, no need to emit
29603 if (!this._events.removeListener) {
29604 if (arguments.length === 0)
29605 this._events = {};
29606 else if (this._events[type])
29607 delete this._events[type];
29608 return this;
29609 }
29610
29611 // emit removeListener for all listeners on all events
29612 if (arguments.length === 0) {
29613 for (key in this._events) {
29614 if (key === 'removeListener') continue;
29615 this.removeAllListeners(key);
29616 }
29617 this.removeAllListeners('removeListener');
29618 this._events = {};
29619 return this;
29620 }
29621
29622 listeners = this._events[type];
29623
29624 if (isFunction(listeners)) {
29625 this.removeListener(type, listeners);
29626 } else if (listeners) {
29627 // LIFO order
29628 while (listeners.length)
29629 this.removeListener(type, listeners[listeners.length - 1]);
29630 }
29631 delete this._events[type];
29632
29633 return this;
29634 };
29635
29636 EventEmitter.prototype.listeners = function(type) {
29637 var ret;
29638 if (!this._events || !this._events[type])
29639 ret = [];
29640 else if (isFunction(this._events[type]))
29641 ret = [this._events[type]];
29642 else
29643 ret = this._events[type].slice();
29644 return ret;
29645 };
29646
29647 EventEmitter.prototype.listenerCount = function(type) {
29648 if (this._events) {
29649 var evlistener = this._events[type];
29650
29651 if (isFunction(evlistener))
29652 return 1;
29653 else if (evlistener)
29654 return evlistener.length;
29655 }
29656 return 0;
29657 };
29658
29659 EventEmitter.listenerCount = function(emitter, type) {
29660 return emitter.listenerCount(type);
29661 };
29662
29663 function isFunction(arg) {
29664 return typeof arg === 'function';
29665 }
29666
29667 function isNumber(arg) {
29668 return typeof arg === 'number';
29669 }
29670
29671 function isObject(arg) {
29672 return typeof arg === 'object' && arg !== null;
29673 }
29674
29675 function isUndefined(arg) {
29676 return arg === void 0;
29677 }
29678
29679 },{}],8:[function(require,module,exports){
29680 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
29681 var e, m
29682 var eLen = nBytes * 8 - mLen - 1
29683 var eMax = (1 << eLen) - 1
29684 var eBias = eMax >> 1
29685 var nBits = -7
29686 var i = isLE ? (nBytes - 1) : 0
29687 var d = isLE ? -1 : 1
29688 var s = buffer[offset + i]
29689
29690 i += d
29691
29692 e = s & ((1 << (-nBits)) - 1)
29693 s >>= (-nBits)
29694 nBits += eLen
29695 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
29696
29697 m = e & ((1 << (-nBits)) - 1)
29698 e >>= (-nBits)
29699 nBits += mLen
29700 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
29701
29702 if (e === 0) {
29703 e = 1 - eBias
29704 } else if (e === eMax) {
29705 return m ? NaN : ((s ? -1 : 1) * Infinity)
29706 } else {
29707 m = m + Math.pow(2, mLen)
29708 e = e - eBias
29709 }
29710 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
29711 }
29712
29713 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
29714 var e, m, c
29715 var eLen = nBytes * 8 - mLen - 1
29716 var eMax = (1 << eLen) - 1
29717 var eBias = eMax >> 1
29718 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
29719 var i = isLE ? 0 : (nBytes - 1)
29720 var d = isLE ? 1 : -1
29721 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
29722
29723 value = Math.abs(value)
29724
29725 if (isNaN(value) || value === Infinity) {
29726 m = isNaN(value) ? 1 : 0
29727 e = eMax
29728 } else {
29729 e = Math.floor(Math.log(value) / Math.LN2)
29730 if (value * (c = Math.pow(2, -e)) < 1) {
29731 e--
29732 c *= 2
29733 }
29734 if (e + eBias >= 1) {
29735 value += rt / c
29736 } else {
29737 value += rt * Math.pow(2, 1 - eBias)
29738 }
29739 if (value * c >= 2) {
29740 e++
29741 c /= 2
29742 }
29743
29744 if (e + eBias >= eMax) {
29745 m = 0
29746 e = eMax
29747 } else if (e + eBias >= 1) {
29748 m = (value * c - 1) * Math.pow(2, mLen)
29749 e = e + eBias
29750 } else {
29751 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
29752 e = 0
29753 }
29754 }
29755
29756 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
29757
29758 e = (e << mLen) | m
29759 eLen += mLen
29760 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
29761
29762 buffer[offset + i - d] |= s * 128
29763 }
29764
29765 },{}],9:[function(require,module,exports){
29766 if (typeof Object.create === 'function') {
29767 // implementation from standard node.js 'util' module
29768 module.exports = function inherits(ctor, superCtor) {
29769 ctor.super_ = superCtor
29770 ctor.prototype = Object.create(superCtor.prototype, {
29771 constructor: {
29772 value: ctor,
29773 enumerable: false,
29774 writable: true,
29775 configurable: true
29776 }
29777 });
29778 };
29779 } else {
29780 // old school shim for old browsers
29781 module.exports = function inherits(ctor, superCtor) {
29782 ctor.super_ = superCtor
29783 var TempCtor = function () {}
29784 TempCtor.prototype = superCtor.prototype
29785 ctor.prototype = new TempCtor()
29786 ctor.prototype.constructor = ctor
29787 }
29788 }
29789
29790 },{}],10:[function(require,module,exports){
29791 /*!
29792 * Determine if an object is a Buffer
29793 *
29794 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
29795 * @license MIT
29796 */
29797
29798 // The _isBuffer check is for Safari 5-7 support, because it's missing
29799 // Object.prototype.constructor. Remove this eventually
29800 module.exports = function (obj) {
29801 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
29802 }
29803
29804 function isBuffer (obj) {
29805 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
29806 }
29807
29808 // For Node v0.10 support. Remove this eventually.
29809 function isSlowBuffer (obj) {
29810 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
29811 }
29812
29813 },{}],11:[function(require,module,exports){
29814 var toString = {}.toString;
29815
29816 module.exports = Array.isArray || function (arr) {
29817 return toString.call(arr) == '[object Array]';
29818 };
29819
29820 },{}],12:[function(require,module,exports){
29821 (function (process){
29822 'use strict';
29823
29824 if (!process.version ||
29825 process.version.indexOf('v0.') === 0 ||
29826 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
29827 module.exports = nextTick;
29828 } else {
29829 module.exports = process.nextTick;
29830 }
29831
29832 function nextTick(fn, arg1, arg2, arg3) {
29833 if (typeof fn !== 'function') {
29834 throw new TypeError('"callback" argument must be a function');
29835 }
29836 var len = arguments.length;
29837 var args, i;
29838 switch (len) {
29839 case 0:
29840 case 1:
29841 return process.nextTick(fn);
29842 case 2:
29843 return process.nextTick(function afterTickOne() {
29844 fn.call(null, arg1);
29845 });
29846 case 3:
29847 return process.nextTick(function afterTickTwo() {
29848 fn.call(null, arg1, arg2);
29849 });
29850 case 4:
29851 return process.nextTick(function afterTickThree() {
29852 fn.call(null, arg1, arg2, arg3);
29853 });
29854 default:
29855 args = new Array(len - 1);
29856 i = 0;
29857 while (i < args.length) {
29858 args[i++] = arguments[i];
29859 }
29860 return process.nextTick(function afterTick() {
29861 fn.apply(null, args);
29862 });
29863 }
29864 }
29865
29866 }).call(this,require('_process'))
29867 },{"_process":13}],13:[function(require,module,exports){
29868 // shim for using process in browser
29869 var process = module.exports = {};
29870
29871 // cached from whatever global is present so that test runners that stub it
29872 // don't break things. But we need to wrap it in a try catch in case it is
29873 // wrapped in strict mode code which doesn't define any globals. It's inside a
29874 // function because try/catches deoptimize in certain engines.
29875
29876 var cachedSetTimeout;
29877 var cachedClearTimeout;
29878
29879 function defaultSetTimout() {
29880 throw new Error('setTimeout has not been defined');
29881 }
29882 function defaultClearTimeout () {
29883 throw new Error('clearTimeout has not been defined');
29884 }
29885 (function () {
29886 try {
29887 if (typeof setTimeout === 'function') {
29888 cachedSetTimeout = setTimeout;
29889 } else {
29890 cachedSetTimeout = defaultSetTimout;
29891 }
29892 } catch (e) {
29893 cachedSetTimeout = defaultSetTimout;
29894 }
29895 try {
29896 if (typeof clearTimeout === 'function') {
29897 cachedClearTimeout = clearTimeout;
29898 } else {
29899 cachedClearTimeout = defaultClearTimeout;
29900 }
29901 } catch (e) {
29902 cachedClearTimeout = defaultClearTimeout;
29903 }
29904 } ())
29905 function runTimeout(fun) {
29906 if (cachedSetTimeout === setTimeout) {
29907 //normal enviroments in sane situations
29908 return setTimeout(fun, 0);
29909 }
29910 // if setTimeout wasn't available but was latter defined
29911 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
29912 cachedSetTimeout = setTimeout;
29913 return setTimeout(fun, 0);
29914 }
29915 try {
29916 // when when somebody has screwed with setTimeout but no I.E. maddness
29917 return cachedSetTimeout(fun, 0);
29918 } catch(e){
29919 try {
29920 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
29921 return cachedSetTimeout.call(null, fun, 0);
29922 } catch(e){
29923 // 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
29924 return cachedSetTimeout.call(this, fun, 0);
29925 }
29926 }
29927
29928
29929 }
29930 function runClearTimeout(marker) {
29931 if (cachedClearTimeout === clearTimeout) {
29932 //normal enviroments in sane situations
29933 return clearTimeout(marker);
29934 }
29935 // if clearTimeout wasn't available but was latter defined
29936 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
29937 cachedClearTimeout = clearTimeout;
29938 return clearTimeout(marker);
29939 }
29940 try {
29941 // when when somebody has screwed with setTimeout but no I.E. maddness
29942 return cachedClearTimeout(marker);
29943 } catch (e){
29944 try {
29945 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
29946 return cachedClearTimeout.call(null, marker);
29947 } catch (e){
29948 // 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.
29949 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
29950 return cachedClearTimeout.call(this, marker);
29951 }
29952 }
29953
29954
29955
29956 }
29957 var queue = [];
29958 var draining = false;
29959 var currentQueue;
29960 var queueIndex = -1;
29961
29962 function cleanUpNextTick() {
29963 if (!draining || !currentQueue) {
29964 return;
29965 }
29966 draining = false;
29967 if (currentQueue.length) {
29968 queue = currentQueue.concat(queue);
29969 } else {
29970 queueIndex = -1;
29971 }
29972 if (queue.length) {
29973 drainQueue();
29974 }
29975 }
29976
29977 function drainQueue() {
29978 if (draining) {
29979 return;
29980 }
29981 var timeout = runTimeout(cleanUpNextTick);
29982 draining = true;
29983
29984 var len = queue.length;
29985 while(len) {
29986 currentQueue = queue;
29987 queue = [];
29988 while (++queueIndex < len) {
29989 if (currentQueue) {
29990 currentQueue[queueIndex].run();
29991 }
29992 }
29993 queueIndex = -1;
29994 len = queue.length;
29995 }
29996 currentQueue = null;
29997 draining = false;
29998 runClearTimeout(timeout);
29999 }
30000
30001 process.nextTick = function (fun) {
30002 var args = new Array(arguments.length - 1);
30003 if (arguments.length > 1) {
30004 for (var i = 1; i < arguments.length; i++) {
30005 args[i - 1] = arguments[i];
30006 }
30007 }
30008 queue.push(new Item(fun, args));
30009 if (queue.length === 1 && !draining) {
30010 runTimeout(drainQueue);
30011 }
30012 };
30013
30014 // v8 likes predictible objects
30015 function Item(fun, array) {
30016 this.fun = fun;
30017 this.array = array;
30018 }
30019 Item.prototype.run = function () {
30020 this.fun.apply(null, this.array);
30021 };
30022 process.title = 'browser';
30023 process.browser = true;
30024 process.env = {};
30025 process.argv = [];
30026 process.version = ''; // empty string to avoid regexp issues
30027 process.versions = {};
30028
30029 function noop() {}
30030
30031 process.on = noop;
30032 process.addListener = noop;
30033 process.once = noop;
30034 process.off = noop;
30035 process.removeListener = noop;
30036 process.removeAllListeners = noop;
30037 process.emit = noop;
30038 process.prependListener = noop;
30039 process.prependOnceListener = noop;
30040
30041 process.listeners = function (name) { return [] }
30042
30043 process.binding = function (name) {
30044 throw new Error('process.binding is not supported');
30045 };
30046
30047 process.cwd = function () { return '/' };
30048 process.chdir = function (dir) {
30049 throw new Error('process.chdir is not supported');
30050 };
30051 process.umask = function() { return 0; };
30052
30053 },{}],14:[function(require,module,exports){
30054 module.exports = require('./lib/_stream_duplex.js');
30055
30056 },{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
30057 // a duplex stream is just a stream that is both readable and writable.
30058 // Since JS doesn't have multiple prototypal inheritance, this class
30059 // prototypally inherits from Readable, and then parasitically from
30060 // Writable.
30061
30062 'use strict';
30063
30064 /*<replacement>*/
30065
30066 var objectKeys = Object.keys || function (obj) {
30067 var keys = [];
30068 for (var key in obj) {
30069 keys.push(key);
30070 }return keys;
30071 };
30072 /*</replacement>*/
30073
30074 module.exports = Duplex;
30075
30076 /*<replacement>*/
30077 var processNextTick = require('process-nextick-args');
30078 /*</replacement>*/
30079
30080 /*<replacement>*/
30081 var util = require('core-util-is');
30082 util.inherits = require('inherits');
30083 /*</replacement>*/
30084
30085 var Readable = require('./_stream_readable');
30086 var Writable = require('./_stream_writable');
30087
30088 util.inherits(Duplex, Readable);
30089
30090 var keys = objectKeys(Writable.prototype);
30091 for (var v = 0; v < keys.length; v++) {
30092 var method = keys[v];
30093 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
30094 }
30095
30096 function Duplex(options) {
30097 if (!(this instanceof Duplex)) return new Duplex(options);
30098
30099 Readable.call(this, options);
30100 Writable.call(this, options);
30101
30102 if (options && options.readable === false) this.readable = false;
30103
30104 if (options && options.writable === false) this.writable = false;
30105
30106 this.allowHalfOpen = true;
30107 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
30108
30109 this.once('end', onend);
30110 }
30111
30112 // the no-half-open enforcer
30113 function onend() {
30114 // if we allow half-open state, or if the writable side ended,
30115 // then we're ok.
30116 if (this.allowHalfOpen || this._writableState.ended) return;
30117
30118 // no more data can be written.
30119 // But allow more writes to happen in this tick.
30120 processNextTick(onEndNT, this);
30121 }
30122
30123 function onEndNT(self) {
30124 self.end();
30125 }
30126
30127 function forEach(xs, f) {
30128 for (var i = 0, l = xs.length; i < l; i++) {
30129 f(xs[i], i);
30130 }
30131 }
30132 },{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
30133 // a passthrough stream.
30134 // basically just the most minimal sort of Transform stream.
30135 // Every written chunk gets output as-is.
30136
30137 'use strict';
30138
30139 module.exports = PassThrough;
30140
30141 var Transform = require('./_stream_transform');
30142
30143 /*<replacement>*/
30144 var util = require('core-util-is');
30145 util.inherits = require('inherits');
30146 /*</replacement>*/
30147
30148 util.inherits(PassThrough, Transform);
30149
30150 function PassThrough(options) {
30151 if (!(this instanceof PassThrough)) return new PassThrough(options);
30152
30153 Transform.call(this, options);
30154 }
30155
30156 PassThrough.prototype._transform = function (chunk, encoding, cb) {
30157 cb(null, chunk);
30158 };
30159 },{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
30160 (function (process){
30161 'use strict';
30162
30163 module.exports = Readable;
30164
30165 /*<replacement>*/
30166 var processNextTick = require('process-nextick-args');
30167 /*</replacement>*/
30168
30169 /*<replacement>*/
30170 var isArray = require('isarray');
30171 /*</replacement>*/
30172
30173 /*<replacement>*/
30174 var Duplex;
30175 /*</replacement>*/
30176
30177 Readable.ReadableState = ReadableState;
30178
30179 /*<replacement>*/
30180 var EE = require('events').EventEmitter;
30181
30182 var EElistenerCount = function (emitter, type) {
30183 return emitter.listeners(type).length;
30184 };
30185 /*</replacement>*/
30186
30187 /*<replacement>*/
30188 var Stream = require('./internal/streams/stream');
30189 /*</replacement>*/
30190
30191 var Buffer = require('buffer').Buffer;
30192 /*<replacement>*/
30193 var bufferShim = require('buffer-shims');
30194 /*</replacement>*/
30195
30196 /*<replacement>*/
30197 var util = require('core-util-is');
30198 util.inherits = require('inherits');
30199 /*</replacement>*/
30200
30201 /*<replacement>*/
30202 var debugUtil = require('util');
30203 var debug = void 0;
30204 if (debugUtil && debugUtil.debuglog) {
30205 debug = debugUtil.debuglog('stream');
30206 } else {
30207 debug = function () {};
30208 }
30209 /*</replacement>*/
30210
30211 var BufferList = require('./internal/streams/BufferList');
30212 var StringDecoder;
30213
30214 util.inherits(Readable, Stream);
30215
30216 var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
30217
30218 function prependListener(emitter, event, fn) {
30219 // Sadly this is not cacheable as some libraries bundle their own
30220 // event emitter implementation with them.
30221 if (typeof emitter.prependListener === 'function') {
30222 return emitter.prependListener(event, fn);
30223 } else {
30224 // This is a hack to make sure that our error handler is attached before any
30225 // userland ones. NEVER DO THIS. This is here only because this code needs
30226 // to continue to work with older versions of Node.js that do not include
30227 // the prependListener() method. The goal is to eventually remove this hack.
30228 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]];
30229 }
30230 }
30231
30232 function ReadableState(options, stream) {
30233 Duplex = Duplex || require('./_stream_duplex');
30234
30235 options = options || {};
30236
30237 // object stream flag. Used to make read(n) ignore n and to
30238 // make all the buffer merging and length checks go away
30239 this.objectMode = !!options.objectMode;
30240
30241 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
30242
30243 // the point at which it stops calling _read() to fill the buffer
30244 // Note: 0 is a valid value, means "don't call _read preemptively ever"
30245 var hwm = options.highWaterMark;
30246 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
30247 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
30248
30249 // cast to ints.
30250 this.highWaterMark = ~~this.highWaterMark;
30251
30252 // A linked list is used to store data chunks instead of an array because the
30253 // linked list can remove elements from the beginning faster than
30254 // array.shift()
30255 this.buffer = new BufferList();
30256 this.length = 0;
30257 this.pipes = null;
30258 this.pipesCount = 0;
30259 this.flowing = null;
30260 this.ended = false;
30261 this.endEmitted = false;
30262 this.reading = false;
30263
30264 // a flag to be able to tell if the onwrite cb is called immediately,
30265 // or on a later tick. We set this to true at first, because any
30266 // actions that shouldn't happen until "later" should generally also
30267 // not happen before the first write call.
30268 this.sync = true;
30269
30270 // whenever we return null, then we set a flag to say
30271 // that we're awaiting a 'readable' event emission.
30272 this.needReadable = false;
30273 this.emittedReadable = false;
30274 this.readableListening = false;
30275 this.resumeScheduled = false;
30276
30277 // Crypto is kind of old and crusty. Historically, its default string
30278 // encoding is 'binary' so we have to make this configurable.
30279 // Everything else in the universe uses 'utf8', though.
30280 this.defaultEncoding = options.defaultEncoding || 'utf8';
30281
30282 // when piping, we only care about 'readable' events that happen
30283 // after read()ing all the bytes and not getting any pushback.
30284 this.ranOut = false;
30285
30286 // the number of writers that are awaiting a drain event in .pipe()s
30287 this.awaitDrain = 0;
30288
30289 // if true, a maybeReadMore has been scheduled
30290 this.readingMore = false;
30291
30292 this.decoder = null;
30293 this.encoding = null;
30294 if (options.encoding) {
30295 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
30296 this.decoder = new StringDecoder(options.encoding);
30297 this.encoding = options.encoding;
30298 }
30299 }
30300
30301 function Readable(options) {
30302 Duplex = Duplex || require('./_stream_duplex');
30303
30304 if (!(this instanceof Readable)) return new Readable(options);
30305
30306 this._readableState = new ReadableState(options, this);
30307
30308 // legacy
30309 this.readable = true;
30310
30311 if (options && typeof options.read === 'function') this._read = options.read;
30312
30313 Stream.call(this);
30314 }
30315
30316 // Manually shove something into the read() buffer.
30317 // This returns true if the highWaterMark has not been hit yet,
30318 // similar to how Writable.write() returns true if you should
30319 // write() some more.
30320 Readable.prototype.push = function (chunk, encoding) {
30321 var state = this._readableState;
30322
30323 if (!state.objectMode && typeof chunk === 'string') {
30324 encoding = encoding || state.defaultEncoding;
30325 if (encoding !== state.encoding) {
30326 chunk = bufferShim.from(chunk, encoding);
30327 encoding = '';
30328 }
30329 }
30330
30331 return readableAddChunk(this, state, chunk, encoding, false);
30332 };
30333
30334 // Unshift should *always* be something directly out of read()
30335 Readable.prototype.unshift = function (chunk) {
30336 var state = this._readableState;
30337 return readableAddChunk(this, state, chunk, '', true);
30338 };
30339
30340 Readable.prototype.isPaused = function () {
30341 return this._readableState.flowing === false;
30342 };
30343
30344 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
30345 var er = chunkInvalid(state, chunk);
30346 if (er) {
30347 stream.emit('error', er);
30348 } else if (chunk === null) {
30349 state.reading = false;
30350 onEofChunk(stream, state);
30351 } else if (state.objectMode || chunk && chunk.length > 0) {
30352 if (state.ended && !addToFront) {
30353 var e = new Error('stream.push() after EOF');
30354 stream.emit('error', e);
30355 } else if (state.endEmitted && addToFront) {
30356 var _e = new Error('stream.unshift() after end event');
30357 stream.emit('error', _e);
30358 } else {
30359 var skipAdd;
30360 if (state.decoder && !addToFront && !encoding) {
30361 chunk = state.decoder.write(chunk);
30362 skipAdd = !state.objectMode && chunk.length === 0;
30363 }
30364
30365 if (!addToFront) state.reading = false;
30366
30367 // Don't add to the buffer if we've decoded to an empty string chunk and
30368 // we're not in object mode
30369 if (!skipAdd) {
30370 // if we want the data now, just emit it.
30371 if (state.flowing && state.length === 0 && !state.sync) {
30372 stream.emit('data', chunk);
30373 stream.read(0);
30374 } else {
30375 // update the buffer info.
30376 state.length += state.objectMode ? 1 : chunk.length;
30377 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
30378
30379 if (state.needReadable) emitReadable(stream);
30380 }
30381 }
30382
30383 maybeReadMore(stream, state);
30384 }
30385 } else if (!addToFront) {
30386 state.reading = false;
30387 }
30388
30389 return needMoreData(state);
30390 }
30391
30392 // if it's past the high water mark, we can push in some more.
30393 // Also, if we have no data yet, we can stand some
30394 // more bytes. This is to work around cases where hwm=0,
30395 // such as the repl. Also, if the push() triggered a
30396 // readable event, and the user called read(largeNumber) such that
30397 // needReadable was set, then we ought to push more, so that another
30398 // 'readable' event will be triggered.
30399 function needMoreData(state) {
30400 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
30401 }
30402
30403 // backwards compatibility.
30404 Readable.prototype.setEncoding = function (enc) {
30405 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
30406 this._readableState.decoder = new StringDecoder(enc);
30407 this._readableState.encoding = enc;
30408 return this;
30409 };
30410
30411 // Don't raise the hwm > 8MB
30412 var MAX_HWM = 0x800000;
30413 function computeNewHighWaterMark(n) {
30414 if (n >= MAX_HWM) {
30415 n = MAX_HWM;
30416 } else {
30417 // Get the next highest power of 2 to prevent increasing hwm excessively in
30418 // tiny amounts
30419 n--;
30420 n |= n >>> 1;
30421 n |= n >>> 2;
30422 n |= n >>> 4;
30423 n |= n >>> 8;
30424 n |= n >>> 16;
30425 n++;
30426 }
30427 return n;
30428 }
30429
30430 // This function is designed to be inlinable, so please take care when making
30431 // changes to the function body.
30432 function howMuchToRead(n, state) {
30433 if (n <= 0 || state.length === 0 && state.ended) return 0;
30434 if (state.objectMode) return 1;
30435 if (n !== n) {
30436 // Only flow one buffer at a time
30437 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
30438 }
30439 // If we're asking for more than the current hwm, then raise the hwm.
30440 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
30441 if (n <= state.length) return n;
30442 // Don't have enough
30443 if (!state.ended) {
30444 state.needReadable = true;
30445 return 0;
30446 }
30447 return state.length;
30448 }
30449
30450 // you can override either this method, or the async _read(n) below.
30451 Readable.prototype.read = function (n) {
30452 debug('read', n);
30453 n = parseInt(n, 10);
30454 var state = this._readableState;
30455 var nOrig = n;
30456
30457 if (n !== 0) state.emittedReadable = false;
30458
30459 // if we're doing read(0) to trigger a readable event, but we
30460 // already have a bunch of data in the buffer, then just trigger
30461 // the 'readable' event and move on.
30462 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
30463 debug('read: emitReadable', state.length, state.ended);
30464 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
30465 return null;
30466 }
30467
30468 n = howMuchToRead(n, state);
30469
30470 // if we've ended, and we're now clear, then finish it up.
30471 if (n === 0 && state.ended) {
30472 if (state.length === 0) endReadable(this);
30473 return null;
30474 }
30475
30476 // All the actual chunk generation logic needs to be
30477 // *below* the call to _read. The reason is that in certain
30478 // synthetic stream cases, such as passthrough streams, _read
30479 // may be a completely synchronous operation which may change
30480 // the state of the read buffer, providing enough data when
30481 // before there was *not* enough.
30482 //
30483 // So, the steps are:
30484 // 1. Figure out what the state of things will be after we do
30485 // a read from the buffer.
30486 //
30487 // 2. If that resulting state will trigger a _read, then call _read.
30488 // Note that this may be asynchronous, or synchronous. Yes, it is
30489 // deeply ugly to write APIs this way, but that still doesn't mean
30490 // that the Readable class should behave improperly, as streams are
30491 // designed to be sync/async agnostic.
30492 // Take note if the _read call is sync or async (ie, if the read call
30493 // has returned yet), so that we know whether or not it's safe to emit
30494 // 'readable' etc.
30495 //
30496 // 3. Actually pull the requested chunks out of the buffer and return.
30497
30498 // if we need a readable event, then we need to do some reading.
30499 var doRead = state.needReadable;
30500 debug('need readable', doRead);
30501
30502 // if we currently have less than the highWaterMark, then also read some
30503 if (state.length === 0 || state.length - n < state.highWaterMark) {
30504 doRead = true;
30505 debug('length less than watermark', doRead);
30506 }
30507
30508 // however, if we've ended, then there's no point, and if we're already
30509 // reading, then it's unnecessary.
30510 if (state.ended || state.reading) {
30511 doRead = false;
30512 debug('reading or ended', doRead);
30513 } else if (doRead) {
30514 debug('do read');
30515 state.reading = true;
30516 state.sync = true;
30517 // if the length is currently zero, then we *need* a readable event.
30518 if (state.length === 0) state.needReadable = true;
30519 // call internal read method
30520 this._read(state.highWaterMark);
30521 state.sync = false;
30522 // If _read pushed data synchronously, then `reading` will be false,
30523 // and we need to re-evaluate how much data we can return to the user.
30524 if (!state.reading) n = howMuchToRead(nOrig, state);
30525 }
30526
30527 var ret;
30528 if (n > 0) ret = fromList(n, state);else ret = null;
30529
30530 if (ret === null) {
30531 state.needReadable = true;
30532 n = 0;
30533 } else {
30534 state.length -= n;
30535 }
30536
30537 if (state.length === 0) {
30538 // If we have nothing in the buffer, then we want to know
30539 // as soon as we *do* get something into the buffer.
30540 if (!state.ended) state.needReadable = true;
30541
30542 // If we tried to read() past the EOF, then emit end on the next tick.
30543 if (nOrig !== n && state.ended) endReadable(this);
30544 }
30545
30546 if (ret !== null) this.emit('data', ret);
30547
30548 return ret;
30549 };
30550
30551 function chunkInvalid(state, chunk) {
30552 var er = null;
30553 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
30554 er = new TypeError('Invalid non-string/buffer chunk');
30555 }
30556 return er;
30557 }
30558
30559 function onEofChunk(stream, state) {
30560 if (state.ended) return;
30561 if (state.decoder) {
30562 var chunk = state.decoder.end();
30563 if (chunk && chunk.length) {
30564 state.buffer.push(chunk);
30565 state.length += state.objectMode ? 1 : chunk.length;
30566 }
30567 }
30568 state.ended = true;
30569
30570 // emit 'readable' now to make sure it gets picked up.
30571 emitReadable(stream);
30572 }
30573
30574 // Don't emit readable right away in sync mode, because this can trigger
30575 // another read() call => stack overflow. This way, it might trigger
30576 // a nextTick recursion warning, but that's not so bad.
30577 function emitReadable(stream) {
30578 var state = stream._readableState;
30579 state.needReadable = false;
30580 if (!state.emittedReadable) {
30581 debug('emitReadable', state.flowing);
30582 state.emittedReadable = true;
30583 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
30584 }
30585 }
30586
30587 function emitReadable_(stream) {
30588 debug('emit readable');
30589 stream.emit('readable');
30590 flow(stream);
30591 }
30592
30593 // at this point, the user has presumably seen the 'readable' event,
30594 // and called read() to consume some data. that may have triggered
30595 // in turn another _read(n) call, in which case reading = true if
30596 // it's in progress.
30597 // However, if we're not ended, or reading, and the length < hwm,
30598 // then go ahead and try to read some more preemptively.
30599 function maybeReadMore(stream, state) {
30600 if (!state.readingMore) {
30601 state.readingMore = true;
30602 processNextTick(maybeReadMore_, stream, state);
30603 }
30604 }
30605
30606 function maybeReadMore_(stream, state) {
30607 var len = state.length;
30608 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
30609 debug('maybeReadMore read 0');
30610 stream.read(0);
30611 if (len === state.length)
30612 // didn't get any data, stop spinning.
30613 break;else len = state.length;
30614 }
30615 state.readingMore = false;
30616 }
30617
30618 // abstract method. to be overridden in specific implementation classes.
30619 // call cb(er, data) where data is <= n in length.
30620 // for virtual (non-string, non-buffer) streams, "length" is somewhat
30621 // arbitrary, and perhaps not very meaningful.
30622 Readable.prototype._read = function (n) {
30623 this.emit('error', new Error('_read() is not implemented'));
30624 };
30625
30626 Readable.prototype.pipe = function (dest, pipeOpts) {
30627 var src = this;
30628 var state = this._readableState;
30629
30630 switch (state.pipesCount) {
30631 case 0:
30632 state.pipes = dest;
30633 break;
30634 case 1:
30635 state.pipes = [state.pipes, dest];
30636 break;
30637 default:
30638 state.pipes.push(dest);
30639 break;
30640 }
30641 state.pipesCount += 1;
30642 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
30643
30644 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
30645
30646 var endFn = doEnd ? onend : cleanup;
30647 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
30648
30649 dest.on('unpipe', onunpipe);
30650 function onunpipe(readable) {
30651 debug('onunpipe');
30652 if (readable === src) {
30653 cleanup();
30654 }
30655 }
30656
30657 function onend() {
30658 debug('onend');
30659 dest.end();
30660 }
30661
30662 // when the dest drains, it reduces the awaitDrain counter
30663 // on the source. This would be more elegant with a .once()
30664 // handler in flow(), but adding and removing repeatedly is
30665 // too slow.
30666 var ondrain = pipeOnDrain(src);
30667 dest.on('drain', ondrain);
30668
30669 var cleanedUp = false;
30670 function cleanup() {
30671 debug('cleanup');
30672 // cleanup event handlers once the pipe is broken
30673 dest.removeListener('close', onclose);
30674 dest.removeListener('finish', onfinish);
30675 dest.removeListener('drain', ondrain);
30676 dest.removeListener('error', onerror);
30677 dest.removeListener('unpipe', onunpipe);
30678 src.removeListener('end', onend);
30679 src.removeListener('end', cleanup);
30680 src.removeListener('data', ondata);
30681
30682 cleanedUp = true;
30683
30684 // if the reader is waiting for a drain event from this
30685 // specific writer, then it would cause it to never start
30686 // flowing again.
30687 // So, if this is awaiting a drain, then we just call it now.
30688 // If we don't know, then assume that we are waiting for one.
30689 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
30690 }
30691
30692 // If the user pushes more data while we're writing to dest then we'll end up
30693 // in ondata again. However, we only want to increase awaitDrain once because
30694 // dest will only emit one 'drain' event for the multiple writes.
30695 // => Introduce a guard on increasing awaitDrain.
30696 var increasedAwaitDrain = false;
30697 src.on('data', ondata);
30698 function ondata(chunk) {
30699 debug('ondata');
30700 increasedAwaitDrain = false;
30701 var ret = dest.write(chunk);
30702 if (false === ret && !increasedAwaitDrain) {
30703 // If the user unpiped during `dest.write()`, it is possible
30704 // to get stuck in a permanently paused state if that write
30705 // also returned false.
30706 // => Check whether `dest` is still a piping destination.
30707 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
30708 debug('false write response, pause', src._readableState.awaitDrain);
30709 src._readableState.awaitDrain++;
30710 increasedAwaitDrain = true;
30711 }
30712 src.pause();
30713 }
30714 }
30715
30716 // if the dest has an error, then stop piping into it.
30717 // however, don't suppress the throwing behavior for this.
30718 function onerror(er) {
30719 debug('onerror', er);
30720 unpipe();
30721 dest.removeListener('error', onerror);
30722 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
30723 }
30724
30725 // Make sure our error handler is attached before userland ones.
30726 prependListener(dest, 'error', onerror);
30727
30728 // Both close and finish should trigger unpipe, but only once.
30729 function onclose() {
30730 dest.removeListener('finish', onfinish);
30731 unpipe();
30732 }
30733 dest.once('close', onclose);
30734 function onfinish() {
30735 debug('onfinish');
30736 dest.removeListener('close', onclose);
30737 unpipe();
30738 }
30739 dest.once('finish', onfinish);
30740
30741 function unpipe() {
30742 debug('unpipe');
30743 src.unpipe(dest);
30744 }
30745
30746 // tell the dest that it's being piped to
30747 dest.emit('pipe', src);
30748
30749 // start the flow if it hasn't been started already.
30750 if (!state.flowing) {
30751 debug('pipe resume');
30752 src.resume();
30753 }
30754
30755 return dest;
30756 };
30757
30758 function pipeOnDrain(src) {
30759 return function () {
30760 var state = src._readableState;
30761 debug('pipeOnDrain', state.awaitDrain);
30762 if (state.awaitDrain) state.awaitDrain--;
30763 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
30764 state.flowing = true;
30765 flow(src);
30766 }
30767 };
30768 }
30769
30770 Readable.prototype.unpipe = function (dest) {
30771 var state = this._readableState;
30772
30773 // if we're not piping anywhere, then do nothing.
30774 if (state.pipesCount === 0) return this;
30775
30776 // just one destination. most common case.
30777 if (state.pipesCount === 1) {
30778 // passed in one, but it's not the right one.
30779 if (dest && dest !== state.pipes) return this;
30780
30781 if (!dest) dest = state.pipes;
30782
30783 // got a match.
30784 state.pipes = null;
30785 state.pipesCount = 0;
30786 state.flowing = false;
30787 if (dest) dest.emit('unpipe', this);
30788 return this;
30789 }
30790
30791 // slow case. multiple pipe destinations.
30792
30793 if (!dest) {
30794 // remove all.
30795 var dests = state.pipes;
30796 var len = state.pipesCount;
30797 state.pipes = null;
30798 state.pipesCount = 0;
30799 state.flowing = false;
30800
30801 for (var i = 0; i < len; i++) {
30802 dests[i].emit('unpipe', this);
30803 }return this;
30804 }
30805
30806 // try to find the right one.
30807 var index = indexOf(state.pipes, dest);
30808 if (index === -1) return this;
30809
30810 state.pipes.splice(index, 1);
30811 state.pipesCount -= 1;
30812 if (state.pipesCount === 1) state.pipes = state.pipes[0];
30813
30814 dest.emit('unpipe', this);
30815
30816 return this;
30817 };
30818
30819 // set up data events if they are asked for
30820 // Ensure readable listeners eventually get something
30821 Readable.prototype.on = function (ev, fn) {
30822 var res = Stream.prototype.on.call(this, ev, fn);
30823
30824 if (ev === 'data') {
30825 // Start flowing on next tick if stream isn't explicitly paused
30826 if (this._readableState.flowing !== false) this.resume();
30827 } else if (ev === 'readable') {
30828 var state = this._readableState;
30829 if (!state.endEmitted && !state.readableListening) {
30830 state.readableListening = state.needReadable = true;
30831 state.emittedReadable = false;
30832 if (!state.reading) {
30833 processNextTick(nReadingNextTick, this);
30834 } else if (state.length) {
30835 emitReadable(this, state);
30836 }
30837 }
30838 }
30839
30840 return res;
30841 };
30842 Readable.prototype.addListener = Readable.prototype.on;
30843
30844 function nReadingNextTick(self) {
30845 debug('readable nexttick read 0');
30846 self.read(0);
30847 }
30848
30849 // pause() and resume() are remnants of the legacy readable stream API
30850 // If the user uses them, then switch into old mode.
30851 Readable.prototype.resume = function () {
30852 var state = this._readableState;
30853 if (!state.flowing) {
30854 debug('resume');
30855 state.flowing = true;
30856 resume(this, state);
30857 }
30858 return this;
30859 };
30860
30861 function resume(stream, state) {
30862 if (!state.resumeScheduled) {
30863 state.resumeScheduled = true;
30864 processNextTick(resume_, stream, state);
30865 }
30866 }
30867
30868 function resume_(stream, state) {
30869 if (!state.reading) {
30870 debug('resume read 0');
30871 stream.read(0);
30872 }
30873
30874 state.resumeScheduled = false;
30875 state.awaitDrain = 0;
30876 stream.emit('resume');
30877 flow(stream);
30878 if (state.flowing && !state.reading) stream.read(0);
30879 }
30880
30881 Readable.prototype.pause = function () {
30882 debug('call pause flowing=%j', this._readableState.flowing);
30883 if (false !== this._readableState.flowing) {
30884 debug('pause');
30885 this._readableState.flowing = false;
30886 this.emit('pause');
30887 }
30888 return this;
30889 };
30890
30891 function flow(stream) {
30892 var state = stream._readableState;
30893 debug('flow', state.flowing);
30894 while (state.flowing && stream.read() !== null) {}
30895 }
30896
30897 // wrap an old-style stream as the async data source.
30898 // This is *not* part of the readable stream interface.
30899 // It is an ugly unfortunate mess of history.
30900 Readable.prototype.wrap = function (stream) {
30901 var state = this._readableState;
30902 var paused = false;
30903
30904 var self = this;
30905 stream.on('end', function () {
30906 debug('wrapped end');
30907 if (state.decoder && !state.ended) {
30908 var chunk = state.decoder.end();
30909 if (chunk && chunk.length) self.push(chunk);
30910 }
30911
30912 self.push(null);
30913 });
30914
30915 stream.on('data', function (chunk) {
30916 debug('wrapped data');
30917 if (state.decoder) chunk = state.decoder.write(chunk);
30918
30919 // don't skip over falsy values in objectMode
30920 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
30921
30922 var ret = self.push(chunk);
30923 if (!ret) {
30924 paused = true;
30925 stream.pause();
30926 }
30927 });
30928
30929 // proxy all the other methods.
30930 // important when wrapping filters and duplexes.
30931 for (var i in stream) {
30932 if (this[i] === undefined && typeof stream[i] === 'function') {
30933 this[i] = function (method) {
30934 return function () {
30935 return stream[method].apply(stream, arguments);
30936 };
30937 }(i);
30938 }
30939 }
30940
30941 // proxy certain important events.
30942 for (var n = 0; n < kProxyEvents.length; n++) {
30943 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
30944 }
30945
30946 // when we try to consume some more bytes, simply unpause the
30947 // underlying stream.
30948 self._read = function (n) {
30949 debug('wrapped _read', n);
30950 if (paused) {
30951 paused = false;
30952 stream.resume();
30953 }
30954 };
30955
30956 return self;
30957 };
30958
30959 // exposed for testing purposes only.
30960 Readable._fromList = fromList;
30961
30962 // Pluck off n bytes from an array of buffers.
30963 // Length is the combined lengths of all the buffers in the list.
30964 // This function is designed to be inlinable, so please take care when making
30965 // changes to the function body.
30966 function fromList(n, state) {
30967 // nothing buffered
30968 if (state.length === 0) return null;
30969
30970 var ret;
30971 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
30972 // read it all, truncate the list
30973 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);
30974 state.buffer.clear();
30975 } else {
30976 // read part of list
30977 ret = fromListPartial(n, state.buffer, state.decoder);
30978 }
30979
30980 return ret;
30981 }
30982
30983 // Extracts only enough buffered data to satisfy the amount requested.
30984 // This function is designed to be inlinable, so please take care when making
30985 // changes to the function body.
30986 function fromListPartial(n, list, hasStrings) {
30987 var ret;
30988 if (n < list.head.data.length) {
30989 // slice is the same for buffers and strings
30990 ret = list.head.data.slice(0, n);
30991 list.head.data = list.head.data.slice(n);
30992 } else if (n === list.head.data.length) {
30993 // first chunk is a perfect match
30994 ret = list.shift();
30995 } else {
30996 // result spans more than one buffer
30997 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
30998 }
30999 return ret;
31000 }
31001
31002 // Copies a specified amount of characters from the list of buffered data
31003 // chunks.
31004 // This function is designed to be inlinable, so please take care when making
31005 // changes to the function body.
31006 function copyFromBufferString(n, list) {
31007 var p = list.head;
31008 var c = 1;
31009 var ret = p.data;
31010 n -= ret.length;
31011 while (p = p.next) {
31012 var str = p.data;
31013 var nb = n > str.length ? str.length : n;
31014 if (nb === str.length) ret += str;else ret += str.slice(0, n);
31015 n -= nb;
31016 if (n === 0) {
31017 if (nb === str.length) {
31018 ++c;
31019 if (p.next) list.head = p.next;else list.head = list.tail = null;
31020 } else {
31021 list.head = p;
31022 p.data = str.slice(nb);
31023 }
31024 break;
31025 }
31026 ++c;
31027 }
31028 list.length -= c;
31029 return ret;
31030 }
31031
31032 // Copies a specified amount of bytes from the list of buffered data chunks.
31033 // This function is designed to be inlinable, so please take care when making
31034 // changes to the function body.
31035 function copyFromBuffer(n, list) {
31036 var ret = bufferShim.allocUnsafe(n);
31037 var p = list.head;
31038 var c = 1;
31039 p.data.copy(ret);
31040 n -= p.data.length;
31041 while (p = p.next) {
31042 var buf = p.data;
31043 var nb = n > buf.length ? buf.length : n;
31044 buf.copy(ret, ret.length - n, 0, nb);
31045 n -= nb;
31046 if (n === 0) {
31047 if (nb === buf.length) {
31048 ++c;
31049 if (p.next) list.head = p.next;else list.head = list.tail = null;
31050 } else {
31051 list.head = p;
31052 p.data = buf.slice(nb);
31053 }
31054 break;
31055 }
31056 ++c;
31057 }
31058 list.length -= c;
31059 return ret;
31060 }
31061
31062 function endReadable(stream) {
31063 var state = stream._readableState;
31064
31065 // If we get here before consuming all the bytes, then that is a
31066 // bug in node. Should never happen.
31067 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
31068
31069 if (!state.endEmitted) {
31070 state.ended = true;
31071 processNextTick(endReadableNT, state, stream);
31072 }
31073 }
31074
31075 function endReadableNT(state, stream) {
31076 // Check that we didn't get one last unshift.
31077 if (!state.endEmitted && state.length === 0) {
31078 state.endEmitted = true;
31079 stream.readable = false;
31080 stream.emit('end');
31081 }
31082 }
31083
31084 function forEach(xs, f) {
31085 for (var i = 0, l = xs.length; i < l; i++) {
31086 f(xs[i], i);
31087 }
31088 }
31089
31090 function indexOf(xs, x) {
31091 for (var i = 0, l = xs.length; i < l; i++) {
31092 if (xs[i] === x) return i;
31093 }
31094 return -1;
31095 }
31096 }).call(this,require('_process'))
31097 },{"./_stream_duplex":15,"./internal/streams/BufferList":20,"./internal/streams/stream":21,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"isarray":11,"process-nextick-args":12,"string_decoder/":22,"util":3}],18:[function(require,module,exports){
31098 // a transform stream is a readable/writable stream where you do
31099 // something with the data. Sometimes it's called a "filter",
31100 // but that's not a great name for it, since that implies a thing where
31101 // some bits pass through, and others are simply ignored. (That would
31102 // be a valid example of a transform, of course.)
31103 //
31104 // While the output is causally related to the input, it's not a
31105 // necessarily symmetric or synchronous transformation. For example,
31106 // a zlib stream might take multiple plain-text writes(), and then
31107 // emit a single compressed chunk some time in the future.
31108 //
31109 // Here's how this works:
31110 //
31111 // The Transform stream has all the aspects of the readable and writable
31112 // stream classes. When you write(chunk), that calls _write(chunk,cb)
31113 // internally, and returns false if there's a lot of pending writes
31114 // buffered up. When you call read(), that calls _read(n) until
31115 // there's enough pending readable data buffered up.
31116 //
31117 // In a transform stream, the written data is placed in a buffer. When
31118 // _read(n) is called, it transforms the queued up data, calling the
31119 // buffered _write cb's as it consumes chunks. If consuming a single
31120 // written chunk would result in multiple output chunks, then the first
31121 // outputted bit calls the readcb, and subsequent chunks just go into
31122 // the read buffer, and will cause it to emit 'readable' if necessary.
31123 //
31124 // This way, back-pressure is actually determined by the reading side,
31125 // since _read has to be called to start processing a new chunk. However,
31126 // a pathological inflate type of transform can cause excessive buffering
31127 // here. For example, imagine a stream where every byte of input is
31128 // interpreted as an integer from 0-255, and then results in that many
31129 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
31130 // 1kb of data being output. In this case, you could write a very small
31131 // amount of input, and end up with a very large amount of output. In
31132 // such a pathological inflating mechanism, there'd be no way to tell
31133 // the system to stop doing the transform. A single 4MB write could
31134 // cause the system to run out of memory.
31135 //
31136 // However, even in such a pathological case, only a single written chunk
31137 // would be consumed, and then the rest would wait (un-transformed) until
31138 // the results of the previous transformed chunk were consumed.
31139
31140 'use strict';
31141
31142 module.exports = Transform;
31143
31144 var Duplex = require('./_stream_duplex');
31145
31146 /*<replacement>*/
31147 var util = require('core-util-is');
31148 util.inherits = require('inherits');
31149 /*</replacement>*/
31150
31151 util.inherits(Transform, Duplex);
31152
31153 function TransformState(stream) {
31154 this.afterTransform = function (er, data) {
31155 return afterTransform(stream, er, data);
31156 };
31157
31158 this.needTransform = false;
31159 this.transforming = false;
31160 this.writecb = null;
31161 this.writechunk = null;
31162 this.writeencoding = null;
31163 }
31164
31165 function afterTransform(stream, er, data) {
31166 var ts = stream._transformState;
31167 ts.transforming = false;
31168
31169 var cb = ts.writecb;
31170
31171 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
31172
31173 ts.writechunk = null;
31174 ts.writecb = null;
31175
31176 if (data !== null && data !== undefined) stream.push(data);
31177
31178 cb(er);
31179
31180 var rs = stream._readableState;
31181 rs.reading = false;
31182 if (rs.needReadable || rs.length < rs.highWaterMark) {
31183 stream._read(rs.highWaterMark);
31184 }
31185 }
31186
31187 function Transform(options) {
31188 if (!(this instanceof Transform)) return new Transform(options);
31189
31190 Duplex.call(this, options);
31191
31192 this._transformState = new TransformState(this);
31193
31194 var stream = this;
31195
31196 // start out asking for a readable event once data is transformed.
31197 this._readableState.needReadable = true;
31198
31199 // we have implemented the _read method, and done the other things
31200 // that Readable wants before the first _read call, so unset the
31201 // sync guard flag.
31202 this._readableState.sync = false;
31203
31204 if (options) {
31205 if (typeof options.transform === 'function') this._transform = options.transform;
31206
31207 if (typeof options.flush === 'function') this._flush = options.flush;
31208 }
31209
31210 // When the writable side finishes, then flush out anything remaining.
31211 this.once('prefinish', function () {
31212 if (typeof this._flush === 'function') this._flush(function (er, data) {
31213 done(stream, er, data);
31214 });else done(stream);
31215 });
31216 }
31217
31218 Transform.prototype.push = function (chunk, encoding) {
31219 this._transformState.needTransform = false;
31220 return Duplex.prototype.push.call(this, chunk, encoding);
31221 };
31222
31223 // This is the part where you do stuff!
31224 // override this function in implementation classes.
31225 // 'chunk' is an input chunk.
31226 //
31227 // Call `push(newChunk)` to pass along transformed output
31228 // to the readable side. You may call 'push' zero or more times.
31229 //
31230 // Call `cb(err)` when you are done with this chunk. If you pass
31231 // an error, then that'll put the hurt on the whole operation. If you
31232 // never call cb(), then you'll never get another chunk.
31233 Transform.prototype._transform = function (chunk, encoding, cb) {
31234 throw new Error('_transform() is not implemented');
31235 };
31236
31237 Transform.prototype._write = function (chunk, encoding, cb) {
31238 var ts = this._transformState;
31239 ts.writecb = cb;
31240 ts.writechunk = chunk;
31241 ts.writeencoding = encoding;
31242 if (!ts.transforming) {
31243 var rs = this._readableState;
31244 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
31245 }
31246 };
31247
31248 // Doesn't matter what the args are here.
31249 // _transform does all the work.
31250 // That we got here means that the readable side wants more data.
31251 Transform.prototype._read = function (n) {
31252 var ts = this._transformState;
31253
31254 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
31255 ts.transforming = true;
31256 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
31257 } else {
31258 // mark that we need a transform, so that any data that comes in
31259 // will get processed, now that we've asked for it.
31260 ts.needTransform = true;
31261 }
31262 };
31263
31264 function done(stream, er, data) {
31265 if (er) return stream.emit('error', er);
31266
31267 if (data !== null && data !== undefined) stream.push(data);
31268
31269 // if there's nothing in the write buffer, then that means
31270 // that nothing more will ever be provided
31271 var ws = stream._writableState;
31272 var ts = stream._transformState;
31273
31274 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
31275
31276 if (ts.transforming) throw new Error('Calling transform done when still transforming');
31277
31278 return stream.push(null);
31279 }
31280 },{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
31281 (function (process){
31282 // A bit simpler than readable streams.
31283 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
31284 // the drain event emission and buffering.
31285
31286 'use strict';
31287
31288 module.exports = Writable;
31289
31290 /*<replacement>*/
31291 var processNextTick = require('process-nextick-args');
31292 /*</replacement>*/
31293
31294 /*<replacement>*/
31295 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
31296 /*</replacement>*/
31297
31298 /*<replacement>*/
31299 var Duplex;
31300 /*</replacement>*/
31301
31302 Writable.WritableState = WritableState;
31303
31304 /*<replacement>*/
31305 var util = require('core-util-is');
31306 util.inherits = require('inherits');
31307 /*</replacement>*/
31308
31309 /*<replacement>*/
31310 var internalUtil = {
31311 deprecate: require('util-deprecate')
31312 };
31313 /*</replacement>*/
31314
31315 /*<replacement>*/
31316 var Stream = require('./internal/streams/stream');
31317 /*</replacement>*/
31318
31319 var Buffer = require('buffer').Buffer;
31320 /*<replacement>*/
31321 var bufferShim = require('buffer-shims');
31322 /*</replacement>*/
31323
31324 util.inherits(Writable, Stream);
31325
31326 function nop() {}
31327
31328 function WriteReq(chunk, encoding, cb) {
31329 this.chunk = chunk;
31330 this.encoding = encoding;
31331 this.callback = cb;
31332 this.next = null;
31333 }
31334
31335 function WritableState(options, stream) {
31336 Duplex = Duplex || require('./_stream_duplex');
31337
31338 options = options || {};
31339
31340 // object stream flag to indicate whether or not this stream
31341 // contains buffers or objects.
31342 this.objectMode = !!options.objectMode;
31343
31344 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
31345
31346 // the point at which write() starts returning false
31347 // Note: 0 is a valid value, means that we always return false if
31348 // the entire buffer is not flushed immediately on write()
31349 var hwm = options.highWaterMark;
31350 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
31351 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
31352
31353 // cast to ints.
31354 this.highWaterMark = ~~this.highWaterMark;
31355
31356 // drain event flag.
31357 this.needDrain = false;
31358 // at the start of calling end()
31359 this.ending = false;
31360 // when end() has been called, and returned
31361 this.ended = false;
31362 // when 'finish' is emitted
31363 this.finished = false;
31364
31365 // should we decode strings into buffers before passing to _write?
31366 // this is here so that some node-core streams can optimize string
31367 // handling at a lower level.
31368 var noDecode = options.decodeStrings === false;
31369 this.decodeStrings = !noDecode;
31370
31371 // Crypto is kind of old and crusty. Historically, its default string
31372 // encoding is 'binary' so we have to make this configurable.
31373 // Everything else in the universe uses 'utf8', though.
31374 this.defaultEncoding = options.defaultEncoding || 'utf8';
31375
31376 // not an actual buffer we keep track of, but a measurement
31377 // of how much we're waiting to get pushed to some underlying
31378 // socket or file.
31379 this.length = 0;
31380
31381 // a flag to see when we're in the middle of a write.
31382 this.writing = false;
31383
31384 // when true all writes will be buffered until .uncork() call
31385 this.corked = 0;
31386
31387 // a flag to be able to tell if the onwrite cb is called immediately,
31388 // or on a later tick. We set this to true at first, because any
31389 // actions that shouldn't happen until "later" should generally also
31390 // not happen before the first write call.
31391 this.sync = true;
31392
31393 // a flag to know if we're processing previously buffered items, which
31394 // may call the _write() callback in the same tick, so that we don't
31395 // end up in an overlapped onwrite situation.
31396 this.bufferProcessing = false;
31397
31398 // the callback that's passed to _write(chunk,cb)
31399 this.onwrite = function (er) {
31400 onwrite(stream, er);
31401 };
31402
31403 // the callback that the user supplies to write(chunk,encoding,cb)
31404 this.writecb = null;
31405
31406 // the amount that is being written when _write is called.
31407 this.writelen = 0;
31408
31409 this.bufferedRequest = null;
31410 this.lastBufferedRequest = null;
31411
31412 // number of pending user-supplied write callbacks
31413 // this must be 0 before 'finish' can be emitted
31414 this.pendingcb = 0;
31415
31416 // emit prefinish if the only thing we're waiting for is _write cbs
31417 // This is relevant for synchronous Transform streams
31418 this.prefinished = false;
31419
31420 // True if the error was already emitted and should not be thrown again
31421 this.errorEmitted = false;
31422
31423 // count buffered requests
31424 this.bufferedRequestCount = 0;
31425
31426 // allocate the first CorkedRequest, there is always
31427 // one allocated and free to use, and we maintain at most two
31428 this.corkedRequestsFree = new CorkedRequest(this);
31429 }
31430
31431 WritableState.prototype.getBuffer = function getBuffer() {
31432 var current = this.bufferedRequest;
31433 var out = [];
31434 while (current) {
31435 out.push(current);
31436 current = current.next;
31437 }
31438 return out;
31439 };
31440
31441 (function () {
31442 try {
31443 Object.defineProperty(WritableState.prototype, 'buffer', {
31444 get: internalUtil.deprecate(function () {
31445 return this.getBuffer();
31446 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
31447 });
31448 } catch (_) {}
31449 })();
31450
31451 // Test _writableState for inheritance to account for Duplex streams,
31452 // whose prototype chain only points to Readable.
31453 var realHasInstance;
31454 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
31455 realHasInstance = Function.prototype[Symbol.hasInstance];
31456 Object.defineProperty(Writable, Symbol.hasInstance, {
31457 value: function (object) {
31458 if (realHasInstance.call(this, object)) return true;
31459
31460 return object && object._writableState instanceof WritableState;
31461 }
31462 });
31463 } else {
31464 realHasInstance = function (object) {
31465 return object instanceof this;
31466 };
31467 }
31468
31469 function Writable(options) {
31470 Duplex = Duplex || require('./_stream_duplex');
31471
31472 // Writable ctor is applied to Duplexes, too.
31473 // `realHasInstance` is necessary because using plain `instanceof`
31474 // would return false, as no `_writableState` property is attached.
31475
31476 // Trying to use the custom `instanceof` for Writable here will also break the
31477 // Node.js LazyTransform implementation, which has a non-trivial getter for
31478 // `_writableState` that would lead to infinite recursion.
31479 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
31480 return new Writable(options);
31481 }
31482
31483 this._writableState = new WritableState(options, this);
31484
31485 // legacy.
31486 this.writable = true;
31487
31488 if (options) {
31489 if (typeof options.write === 'function') this._write = options.write;
31490
31491 if (typeof options.writev === 'function') this._writev = options.writev;
31492 }
31493
31494 Stream.call(this);
31495 }
31496
31497 // Otherwise people can pipe Writable streams, which is just wrong.
31498 Writable.prototype.pipe = function () {
31499 this.emit('error', new Error('Cannot pipe, not readable'));
31500 };
31501
31502 function writeAfterEnd(stream, cb) {
31503 var er = new Error('write after end');
31504 // TODO: defer error events consistently everywhere, not just the cb
31505 stream.emit('error', er);
31506 processNextTick(cb, er);
31507 }
31508
31509 // Checks that a user-supplied chunk is valid, especially for the particular
31510 // mode the stream is in. Currently this means that `null` is never accepted
31511 // and undefined/non-string values are only allowed in object mode.
31512 function validChunk(stream, state, chunk, cb) {
31513 var valid = true;
31514 var er = false;
31515
31516 if (chunk === null) {
31517 er = new TypeError('May not write null values to stream');
31518 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
31519 er = new TypeError('Invalid non-string/buffer chunk');
31520 }
31521 if (er) {
31522 stream.emit('error', er);
31523 processNextTick(cb, er);
31524 valid = false;
31525 }
31526 return valid;
31527 }
31528
31529 Writable.prototype.write = function (chunk, encoding, cb) {
31530 var state = this._writableState;
31531 var ret = false;
31532 var isBuf = Buffer.isBuffer(chunk);
31533
31534 if (typeof encoding === 'function') {
31535 cb = encoding;
31536 encoding = null;
31537 }
31538
31539 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
31540
31541 if (typeof cb !== 'function') cb = nop;
31542
31543 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
31544 state.pendingcb++;
31545 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
31546 }
31547
31548 return ret;
31549 };
31550
31551 Writable.prototype.cork = function () {
31552 var state = this._writableState;
31553
31554 state.corked++;
31555 };
31556
31557 Writable.prototype.uncork = function () {
31558 var state = this._writableState;
31559
31560 if (state.corked) {
31561 state.corked--;
31562
31563 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
31564 }
31565 };
31566
31567 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
31568 // node::ParseEncoding() requires lower case.
31569 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
31570 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);
31571 this._writableState.defaultEncoding = encoding;
31572 return this;
31573 };
31574
31575 function decodeChunk(state, chunk, encoding) {
31576 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
31577 chunk = bufferShim.from(chunk, encoding);
31578 }
31579 return chunk;
31580 }
31581
31582 // if we're already writing something, then just put this
31583 // in the queue, and wait our turn. Otherwise, call _write
31584 // If we return false, then we need a drain event, so set that flag.
31585 function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
31586 if (!isBuf) {
31587 chunk = decodeChunk(state, chunk, encoding);
31588 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
31589 }
31590 var len = state.objectMode ? 1 : chunk.length;
31591
31592 state.length += len;
31593
31594 var ret = state.length < state.highWaterMark;
31595 // we must ensure that previous needDrain will not be reset to false.
31596 if (!ret) state.needDrain = true;
31597
31598 if (state.writing || state.corked) {
31599 var last = state.lastBufferedRequest;
31600 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
31601 if (last) {
31602 last.next = state.lastBufferedRequest;
31603 } else {
31604 state.bufferedRequest = state.lastBufferedRequest;
31605 }
31606 state.bufferedRequestCount += 1;
31607 } else {
31608 doWrite(stream, state, false, len, chunk, encoding, cb);
31609 }
31610
31611 return ret;
31612 }
31613
31614 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
31615 state.writelen = len;
31616 state.writecb = cb;
31617 state.writing = true;
31618 state.sync = true;
31619 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
31620 state.sync = false;
31621 }
31622
31623 function onwriteError(stream, state, sync, er, cb) {
31624 --state.pendingcb;
31625 if (sync) processNextTick(cb, er);else cb(er);
31626
31627 stream._writableState.errorEmitted = true;
31628 stream.emit('error', er);
31629 }
31630
31631 function onwriteStateUpdate(state) {
31632 state.writing = false;
31633 state.writecb = null;
31634 state.length -= state.writelen;
31635 state.writelen = 0;
31636 }
31637
31638 function onwrite(stream, er) {
31639 var state = stream._writableState;
31640 var sync = state.sync;
31641 var cb = state.writecb;
31642
31643 onwriteStateUpdate(state);
31644
31645 if (er) onwriteError(stream, state, sync, er, cb);else {
31646 // Check if we're actually ready to finish, but don't emit yet
31647 var finished = needFinish(state);
31648
31649 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
31650 clearBuffer(stream, state);
31651 }
31652
31653 if (sync) {
31654 /*<replacement>*/
31655 asyncWrite(afterWrite, stream, state, finished, cb);
31656 /*</replacement>*/
31657 } else {
31658 afterWrite(stream, state, finished, cb);
31659 }
31660 }
31661 }
31662
31663 function afterWrite(stream, state, finished, cb) {
31664 if (!finished) onwriteDrain(stream, state);
31665 state.pendingcb--;
31666 cb();
31667 finishMaybe(stream, state);
31668 }
31669
31670 // Must force callback to be called on nextTick, so that we don't
31671 // emit 'drain' before the write() consumer gets the 'false' return
31672 // value, and has a chance to attach a 'drain' listener.
31673 function onwriteDrain(stream, state) {
31674 if (state.length === 0 && state.needDrain) {
31675 state.needDrain = false;
31676 stream.emit('drain');
31677 }
31678 }
31679
31680 // if there's something in the buffer waiting, then process it
31681 function clearBuffer(stream, state) {
31682 state.bufferProcessing = true;
31683 var entry = state.bufferedRequest;
31684
31685 if (stream._writev && entry && entry.next) {
31686 // Fast case, write everything using _writev()
31687 var l = state.bufferedRequestCount;
31688 var buffer = new Array(l);
31689 var holder = state.corkedRequestsFree;
31690 holder.entry = entry;
31691
31692 var count = 0;
31693 while (entry) {
31694 buffer[count] = entry;
31695 entry = entry.next;
31696 count += 1;
31697 }
31698
31699 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
31700
31701 // doWrite is almost always async, defer these to save a bit of time
31702 // as the hot path ends with doWrite
31703 state.pendingcb++;
31704 state.lastBufferedRequest = null;
31705 if (holder.next) {
31706 state.corkedRequestsFree = holder.next;
31707 holder.next = null;
31708 } else {
31709 state.corkedRequestsFree = new CorkedRequest(state);
31710 }
31711 } else {
31712 // Slow case, write chunks one-by-one
31713 while (entry) {
31714 var chunk = entry.chunk;
31715 var encoding = entry.encoding;
31716 var cb = entry.callback;
31717 var len = state.objectMode ? 1 : chunk.length;
31718
31719 doWrite(stream, state, false, len, chunk, encoding, cb);
31720 entry = entry.next;
31721 // if we didn't call the onwrite immediately, then
31722 // it means that we need to wait until it does.
31723 // also, that means that the chunk and cb are currently
31724 // being processed, so move the buffer counter past them.
31725 if (state.writing) {
31726 break;
31727 }
31728 }
31729
31730 if (entry === null) state.lastBufferedRequest = null;
31731 }
31732
31733 state.bufferedRequestCount = 0;
31734 state.bufferedRequest = entry;
31735 state.bufferProcessing = false;
31736 }
31737
31738 Writable.prototype._write = function (chunk, encoding, cb) {
31739 cb(new Error('_write() is not implemented'));
31740 };
31741
31742 Writable.prototype._writev = null;
31743
31744 Writable.prototype.end = function (chunk, encoding, cb) {
31745 var state = this._writableState;
31746
31747 if (typeof chunk === 'function') {
31748 cb = chunk;
31749 chunk = null;
31750 encoding = null;
31751 } else if (typeof encoding === 'function') {
31752 cb = encoding;
31753 encoding = null;
31754 }
31755
31756 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
31757
31758 // .end() fully uncorks
31759 if (state.corked) {
31760 state.corked = 1;
31761 this.uncork();
31762 }
31763
31764 // ignore unnecessary end() calls.
31765 if (!state.ending && !state.finished) endWritable(this, state, cb);
31766 };
31767
31768 function needFinish(state) {
31769 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
31770 }
31771
31772 function prefinish(stream, state) {
31773 if (!state.prefinished) {
31774 state.prefinished = true;
31775 stream.emit('prefinish');
31776 }
31777 }
31778
31779 function finishMaybe(stream, state) {
31780 var need = needFinish(state);
31781 if (need) {
31782 if (state.pendingcb === 0) {
31783 prefinish(stream, state);
31784 state.finished = true;
31785 stream.emit('finish');
31786 } else {
31787 prefinish(stream, state);
31788 }
31789 }
31790 return need;
31791 }
31792
31793 function endWritable(stream, state, cb) {
31794 state.ending = true;
31795 finishMaybe(stream, state);
31796 if (cb) {
31797 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
31798 }
31799 state.ended = true;
31800 stream.writable = false;
31801 }
31802
31803 // It seems a linked list but it is not
31804 // there will be only 2 of these for each stream
31805 function CorkedRequest(state) {
31806 var _this = this;
31807
31808 this.next = null;
31809 this.entry = null;
31810 this.finish = function (err) {
31811 var entry = _this.entry;
31812 _this.entry = null;
31813 while (entry) {
31814 var cb = entry.callback;
31815 state.pendingcb--;
31816 cb(err);
31817 entry = entry.next;
31818 }
31819 if (state.corkedRequestsFree) {
31820 state.corkedRequestsFree.next = _this;
31821 } else {
31822 state.corkedRequestsFree = _this;
31823 }
31824 };
31825 }
31826 }).call(this,require('_process'))
31827 },{"./_stream_duplex":15,"./internal/streams/stream":21,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"inherits":9,"process-nextick-args":12,"util-deprecate":30}],20:[function(require,module,exports){
31828 'use strict';
31829
31830 var Buffer = require('buffer').Buffer;
31831 /*<replacement>*/
31832 var bufferShim = require('buffer-shims');
31833 /*</replacement>*/
31834
31835 module.exports = BufferList;
31836
31837 function BufferList() {
31838 this.head = null;
31839 this.tail = null;
31840 this.length = 0;
31841 }
31842
31843 BufferList.prototype.push = function (v) {
31844 var entry = { data: v, next: null };
31845 if (this.length > 0) this.tail.next = entry;else this.head = entry;
31846 this.tail = entry;
31847 ++this.length;
31848 };
31849
31850 BufferList.prototype.unshift = function (v) {
31851 var entry = { data: v, next: this.head };
31852 if (this.length === 0) this.tail = entry;
31853 this.head = entry;
31854 ++this.length;
31855 };
31856
31857 BufferList.prototype.shift = function () {
31858 if (this.length === 0) return;
31859 var ret = this.head.data;
31860 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
31861 --this.length;
31862 return ret;
31863 };
31864
31865 BufferList.prototype.clear = function () {
31866 this.head = this.tail = null;
31867 this.length = 0;
31868 };
31869
31870 BufferList.prototype.join = function (s) {
31871 if (this.length === 0) return '';
31872 var p = this.head;
31873 var ret = '' + p.data;
31874 while (p = p.next) {
31875 ret += s + p.data;
31876 }return ret;
31877 };
31878
31879 BufferList.prototype.concat = function (n) {
31880 if (this.length === 0) return bufferShim.alloc(0);
31881 if (this.length === 1) return this.head.data;
31882 var ret = bufferShim.allocUnsafe(n >>> 0);
31883 var p = this.head;
31884 var i = 0;
31885 while (p) {
31886 p.data.copy(ret, i);
31887 i += p.data.length;
31888 p = p.next;
31889 }
31890 return ret;
31891 };
31892 },{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
31893 module.exports = require('events').EventEmitter;
31894
31895 },{"events":7}],22:[function(require,module,exports){
31896 'use strict';
31897
31898 var Buffer = require('safe-buffer').Buffer;
31899
31900 var isEncoding = Buffer.isEncoding || function (encoding) {
31901 encoding = '' + encoding;
31902 switch (encoding && encoding.toLowerCase()) {
31903 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':
31904 return true;
31905 default:
31906 return false;
31907 }
31908 };
31909
31910 function _normalizeEncoding(enc) {
31911 if (!enc) return 'utf8';
31912 var retried;
31913 while (true) {
31914 switch (enc) {
31915 case 'utf8':
31916 case 'utf-8':
31917 return 'utf8';
31918 case 'ucs2':
31919 case 'ucs-2':
31920 case 'utf16le':
31921 case 'utf-16le':
31922 return 'utf16le';
31923 case 'latin1':
31924 case 'binary':
31925 return 'latin1';
31926 case 'base64':
31927 case 'ascii':
31928 case 'hex':
31929 return enc;
31930 default:
31931 if (retried) return; // undefined
31932 enc = ('' + enc).toLowerCase();
31933 retried = true;
31934 }
31935 }
31936 };
31937
31938 // Do not cache `Buffer.isEncoding` when checking encoding names as some
31939 // modules monkey-patch it to support additional encodings
31940 function normalizeEncoding(enc) {
31941 var nenc = _normalizeEncoding(enc);
31942 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
31943 return nenc || enc;
31944 }
31945
31946 // StringDecoder provides an interface for efficiently splitting a series of
31947 // buffers into a series of JS strings without breaking apart multi-byte
31948 // characters.
31949 exports.StringDecoder = StringDecoder;
31950 function StringDecoder(encoding) {
31951 this.encoding = normalizeEncoding(encoding);
31952 var nb;
31953 switch (this.encoding) {
31954 case 'utf16le':
31955 this.text = utf16Text;
31956 this.end = utf16End;
31957 nb = 4;
31958 break;
31959 case 'utf8':
31960 this.fillLast = utf8FillLast;
31961 nb = 4;
31962 break;
31963 case 'base64':
31964 this.text = base64Text;
31965 this.end = base64End;
31966 nb = 3;
31967 break;
31968 default:
31969 this.write = simpleWrite;
31970 this.end = simpleEnd;
31971 return;
31972 }
31973 this.lastNeed = 0;
31974 this.lastTotal = 0;
31975 this.lastChar = Buffer.allocUnsafe(nb);
31976 }
31977
31978 StringDecoder.prototype.write = function (buf) {
31979 if (buf.length === 0) return '';
31980 var r;
31981 var i;
31982 if (this.lastNeed) {
31983 r = this.fillLast(buf);
31984 if (r === undefined) return '';
31985 i = this.lastNeed;
31986 this.lastNeed = 0;
31987 } else {
31988 i = 0;
31989 }
31990 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
31991 return r || '';
31992 };
31993
31994 StringDecoder.prototype.end = utf8End;
31995
31996 // Returns only complete characters in a Buffer
31997 StringDecoder.prototype.text = utf8Text;
31998
31999 // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
32000 StringDecoder.prototype.fillLast = function (buf) {
32001 if (this.lastNeed <= buf.length) {
32002 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
32003 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
32004 }
32005 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
32006 this.lastNeed -= buf.length;
32007 };
32008
32009 // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
32010 // continuation byte.
32011 function utf8CheckByte(byte) {
32012 if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
32013 return -1;
32014 }
32015
32016 // Checks at most 3 bytes at the end of a Buffer in order to detect an
32017 // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
32018 // needed to complete the UTF-8 character (if applicable) are returned.
32019 function utf8CheckIncomplete(self, buf, i) {
32020 var j = buf.length - 1;
32021 if (j < i) return 0;
32022 var nb = utf8CheckByte(buf[j]);
32023 if (nb >= 0) {
32024 if (nb > 0) self.lastNeed = nb - 1;
32025 return nb;
32026 }
32027 if (--j < i) return 0;
32028 nb = utf8CheckByte(buf[j]);
32029 if (nb >= 0) {
32030 if (nb > 0) self.lastNeed = nb - 2;
32031 return nb;
32032 }
32033 if (--j < i) return 0;
32034 nb = utf8CheckByte(buf[j]);
32035 if (nb >= 0) {
32036 if (nb > 0) {
32037 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
32038 }
32039 return nb;
32040 }
32041 return 0;
32042 }
32043
32044 // Validates as many continuation bytes for a multi-byte UTF-8 character as
32045 // needed or are available. If we see a non-continuation byte where we expect
32046 // one, we "replace" the validated continuation bytes we've seen so far with
32047 // UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
32048 // behavior. The continuation byte check is included three times in the case
32049 // where all of the continuation bytes for a character exist in the same buffer.
32050 // It is also done this way as a slight performance increase instead of using a
32051 // loop.
32052 function utf8CheckExtraBytes(self, buf, p) {
32053 if ((buf[0] & 0xC0) !== 0x80) {
32054 self.lastNeed = 0;
32055 return '\ufffd'.repeat(p);
32056 }
32057 if (self.lastNeed > 1 && buf.length > 1) {
32058 if ((buf[1] & 0xC0) !== 0x80) {
32059 self.lastNeed = 1;
32060 return '\ufffd'.repeat(p + 1);
32061 }
32062 if (self.lastNeed > 2 && buf.length > 2) {
32063 if ((buf[2] & 0xC0) !== 0x80) {
32064 self.lastNeed = 2;
32065 return '\ufffd'.repeat(p + 2);
32066 }
32067 }
32068 }
32069 }
32070
32071 // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
32072 function utf8FillLast(buf) {
32073 var p = this.lastTotal - this.lastNeed;
32074 var r = utf8CheckExtraBytes(this, buf, p);
32075 if (r !== undefined) return r;
32076 if (this.lastNeed <= buf.length) {
32077 buf.copy(this.lastChar, p, 0, this.lastNeed);
32078 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
32079 }
32080 buf.copy(this.lastChar, p, 0, buf.length);
32081 this.lastNeed -= buf.length;
32082 }
32083
32084 // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
32085 // partial character, the character's bytes are buffered until the required
32086 // number of bytes are available.
32087 function utf8Text(buf, i) {
32088 var total = utf8CheckIncomplete(this, buf, i);
32089 if (!this.lastNeed) return buf.toString('utf8', i);
32090 this.lastTotal = total;
32091 var end = buf.length - (total - this.lastNeed);
32092 buf.copy(this.lastChar, 0, end);
32093 return buf.toString('utf8', i, end);
32094 }
32095
32096 // For UTF-8, a replacement character for each buffered byte of a (partial)
32097 // character needs to be added to the output.
32098 function utf8End(buf) {
32099 var r = buf && buf.length ? this.write(buf) : '';
32100 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
32101 return r;
32102 }
32103
32104 // UTF-16LE typically needs two bytes per character, but even if we have an even
32105 // number of bytes available, we need to check if we end on a leading/high
32106 // surrogate. In that case, we need to wait for the next two bytes in order to
32107 // decode the last character properly.
32108 function utf16Text(buf, i) {
32109 if ((buf.length - i) % 2 === 0) {
32110 var r = buf.toString('utf16le', i);
32111 if (r) {
32112 var c = r.charCodeAt(r.length - 1);
32113 if (c >= 0xD800 && c <= 0xDBFF) {
32114 this.lastNeed = 2;
32115 this.lastTotal = 4;
32116 this.lastChar[0] = buf[buf.length - 2];
32117 this.lastChar[1] = buf[buf.length - 1];
32118 return r.slice(0, -1);
32119 }
32120 }
32121 return r;
32122 }
32123 this.lastNeed = 1;
32124 this.lastTotal = 2;
32125 this.lastChar[0] = buf[buf.length - 1];
32126 return buf.toString('utf16le', i, buf.length - 1);
32127 }
32128
32129 // For UTF-16LE we do not explicitly append special replacement characters if we
32130 // end on a partial character, we simply let v8 handle that.
32131 function utf16End(buf) {
32132 var r = buf && buf.length ? this.write(buf) : '';
32133 if (this.lastNeed) {
32134 var end = this.lastTotal - this.lastNeed;
32135 return r + this.lastChar.toString('utf16le', 0, end);
32136 }
32137 return r;
32138 }
32139
32140 function base64Text(buf, i) {
32141 var n = (buf.length - i) % 3;
32142 if (n === 0) return buf.toString('base64', i);
32143 this.lastNeed = 3 - n;
32144 this.lastTotal = 3;
32145 if (n === 1) {
32146 this.lastChar[0] = buf[buf.length - 1];
32147 } else {
32148 this.lastChar[0] = buf[buf.length - 2];
32149 this.lastChar[1] = buf[buf.length - 1];
32150 }
32151 return buf.toString('base64', i, buf.length - n);
32152 }
32153
32154 function base64End(buf) {
32155 var r = buf && buf.length ? this.write(buf) : '';
32156 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
32157 return r;
32158 }
32159
32160 // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
32161 function simpleWrite(buf) {
32162 return buf.toString(this.encoding);
32163 }
32164
32165 function simpleEnd(buf) {
32166 return buf && buf.length ? this.write(buf) : '';
32167 }
32168 },{"safe-buffer":27}],23:[function(require,module,exports){
32169 module.exports = require('./readable').PassThrough
32170
32171 },{"./readable":24}],24:[function(require,module,exports){
32172 exports = module.exports = require('./lib/_stream_readable.js');
32173 exports.Stream = exports;
32174 exports.Readable = exports;
32175 exports.Writable = require('./lib/_stream_writable.js');
32176 exports.Duplex = require('./lib/_stream_duplex.js');
32177 exports.Transform = require('./lib/_stream_transform.js');
32178 exports.PassThrough = require('./lib/_stream_passthrough.js');
32179
32180 },{"./lib/_stream_duplex.js":15,"./lib/_stream_passthrough.js":16,"./lib/_stream_readable.js":17,"./lib/_stream_transform.js":18,"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
32181 module.exports = require('./readable').Transform
32182
32183 },{"./readable":24}],26:[function(require,module,exports){
32184 module.exports = require('./lib/_stream_writable.js');
32185
32186 },{"./lib/_stream_writable.js":19}],27:[function(require,module,exports){
32187 module.exports = require('buffer')
32188
32189 },{"buffer":5}],28:[function(require,module,exports){
32190 // Copyright Joyent, Inc. and other Node contributors.
32191 //
32192 // Permission is hereby granted, free of charge, to any person obtaining a
32193 // copy of this software and associated documentation files (the
32194 // "Software"), to deal in the Software without restriction, including
32195 // without limitation the rights to use, copy, modify, merge, publish,
32196 // distribute, sublicense, and/or sell copies of the Software, and to permit
32197 // persons to whom the Software is furnished to do so, subject to the
32198 // following conditions:
32199 //
32200 // The above copyright notice and this permission notice shall be included
32201 // in all copies or substantial portions of the Software.
32202 //
32203 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32204 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32205 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32206 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32207 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32208 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32209 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32210
32211 module.exports = Stream;
32212
32213 var EE = require('events').EventEmitter;
32214 var inherits = require('inherits');
32215
32216 inherits(Stream, EE);
32217 Stream.Readable = require('readable-stream/readable.js');
32218 Stream.Writable = require('readable-stream/writable.js');
32219 Stream.Duplex = require('readable-stream/duplex.js');
32220 Stream.Transform = require('readable-stream/transform.js');
32221 Stream.PassThrough = require('readable-stream/passthrough.js');
32222
32223 // Backwards-compat with node 0.4.x
32224 Stream.Stream = Stream;
32225
32226
32227
32228 // old-style streams. Note that the pipe method (the only relevant
32229 // part of this class) is overridden in the Readable class.
32230
32231 function Stream() {
32232 EE.call(this);
32233 }
32234
32235 Stream.prototype.pipe = function(dest, options) {
32236 var source = this;
32237
32238 function ondata(chunk) {
32239 if (dest.writable) {
32240 if (false === dest.write(chunk) && source.pause) {
32241 source.pause();
32242 }
32243 }
32244 }
32245
32246 source.on('data', ondata);
32247
32248 function ondrain() {
32249 if (source.readable && source.resume) {
32250 source.resume();
32251 }
32252 }
32253
32254 dest.on('drain', ondrain);
32255
32256 // If the 'end' option is not supplied, dest.end() will be called when
32257 // source gets the 'end' or 'close' events. Only dest.end() once.
32258 if (!dest._isStdio && (!options || options.end !== false)) {
32259 source.on('end', onend);
32260 source.on('close', onclose);
32261 }
32262
32263 var didOnEnd = false;
32264 function onend() {
32265 if (didOnEnd) return;
32266 didOnEnd = true;
32267
32268 dest.end();
32269 }
32270
32271
32272 function onclose() {
32273 if (didOnEnd) return;
32274 didOnEnd = true;
32275
32276 if (typeof dest.destroy === 'function') dest.destroy();
32277 }
32278
32279 // don't leave dangling pipes when there are errors.
32280 function onerror(er) {
32281 cleanup();
32282 if (EE.listenerCount(this, 'error') === 0) {
32283 throw er; // Unhandled stream error in pipe.
32284 }
32285 }
32286
32287 source.on('error', onerror);
32288 dest.on('error', onerror);
32289
32290 // remove all the event listeners that were added.
32291 function cleanup() {
32292 source.removeListener('data', ondata);
32293 dest.removeListener('drain', ondrain);
32294
32295 source.removeListener('end', onend);
32296 source.removeListener('close', onclose);
32297
32298 source.removeListener('error', onerror);
32299 dest.removeListener('error', onerror);
32300
32301 source.removeListener('end', cleanup);
32302 source.removeListener('close', cleanup);
32303
32304 dest.removeListener('close', cleanup);
32305 }
32306
32307 source.on('end', cleanup);
32308 source.on('close', cleanup);
32309
32310 dest.on('close', cleanup);
32311
32312 dest.emit('pipe', source);
32313
32314 // Allow for unix-like usage: A.pipe(B).pipe(C)
32315 return dest;
32316 };
32317
32318 },{"events":7,"inherits":9,"readable-stream/duplex.js":14,"readable-stream/passthrough.js":23,"readable-stream/readable.js":24,"readable-stream/transform.js":25,"readable-stream/writable.js":26}],29:[function(require,module,exports){
32319 // Copyright Joyent, Inc. and other Node contributors.
32320 //
32321 // Permission is hereby granted, free of charge, to any person obtaining a
32322 // copy of this software and associated documentation files (the
32323 // "Software"), to deal in the Software without restriction, including
32324 // without limitation the rights to use, copy, modify, merge, publish,
32325 // distribute, sublicense, and/or sell copies of the Software, and to permit
32326 // persons to whom the Software is furnished to do so, subject to the
32327 // following conditions:
32328 //
32329 // The above copyright notice and this permission notice shall be included
32330 // in all copies or substantial portions of the Software.
32331 //
32332 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32333 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32334 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32335 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32336 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32337 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32338 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32339
32340 var Buffer = require('buffer').Buffer;
32341
32342 var isBufferEncoding = Buffer.isEncoding
32343 || function(encoding) {
32344 switch (encoding && encoding.toLowerCase()) {
32345 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;
32346 default: return false;
32347 }
32348 }
32349
32350
32351 function assertEncoding(encoding) {
32352 if (encoding && !isBufferEncoding(encoding)) {
32353 throw new Error('Unknown encoding: ' + encoding);
32354 }
32355 }
32356
32357 // StringDecoder provides an interface for efficiently splitting a series of
32358 // buffers into a series of JS strings without breaking apart multi-byte
32359 // characters. CESU-8 is handled as part of the UTF-8 encoding.
32360 //
32361 // @TODO Handling all encodings inside a single object makes it very difficult
32362 // to reason about this code, so it should be split up in the future.
32363 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
32364 // points as used by CESU-8.
32365 var StringDecoder = exports.StringDecoder = function(encoding) {
32366 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
32367 assertEncoding(encoding);
32368 switch (this.encoding) {
32369 case 'utf8':
32370 // CESU-8 represents each of Surrogate Pair by 3-bytes
32371 this.surrogateSize = 3;
32372 break;
32373 case 'ucs2':
32374 case 'utf16le':
32375 // UTF-16 represents each of Surrogate Pair by 2-bytes
32376 this.surrogateSize = 2;
32377 this.detectIncompleteChar = utf16DetectIncompleteChar;
32378 break;
32379 case 'base64':
32380 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
32381 this.surrogateSize = 3;
32382 this.detectIncompleteChar = base64DetectIncompleteChar;
32383 break;
32384 default:
32385 this.write = passThroughWrite;
32386 return;
32387 }
32388
32389 // Enough space to store all bytes of a single character. UTF-8 needs 4
32390 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
32391 this.charBuffer = new Buffer(6);
32392 // Number of bytes received for the current incomplete multi-byte character.
32393 this.charReceived = 0;
32394 // Number of bytes expected for the current incomplete multi-byte character.
32395 this.charLength = 0;
32396 };
32397
32398
32399 // write decodes the given buffer and returns it as JS string that is
32400 // guaranteed to not contain any partial multi-byte characters. Any partial
32401 // character found at the end of the buffer is buffered up, and will be
32402 // returned when calling write again with the remaining bytes.
32403 //
32404 // Note: Converting a Buffer containing an orphan surrogate to a String
32405 // currently works, but converting a String to a Buffer (via `new Buffer`, or
32406 // Buffer#write) will replace incomplete surrogates with the unicode
32407 // replacement character. See https://codereview.chromium.org/121173009/ .
32408 StringDecoder.prototype.write = function(buffer) {
32409 var charStr = '';
32410 // if our last write ended with an incomplete multibyte character
32411 while (this.charLength) {
32412 // determine how many remaining bytes this buffer has to offer for this char
32413 var available = (buffer.length >= this.charLength - this.charReceived) ?
32414 this.charLength - this.charReceived :
32415 buffer.length;
32416
32417 // add the new bytes to the char buffer
32418 buffer.copy(this.charBuffer, this.charReceived, 0, available);
32419 this.charReceived += available;
32420
32421 if (this.charReceived < this.charLength) {
32422 // still not enough chars in this buffer? wait for more ...
32423 return '';
32424 }
32425
32426 // remove bytes belonging to the current character from the buffer
32427 buffer = buffer.slice(available, buffer.length);
32428
32429 // get the character that was split
32430 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
32431
32432 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
32433 var charCode = charStr.charCodeAt(charStr.length - 1);
32434 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
32435 this.charLength += this.surrogateSize;
32436 charStr = '';
32437 continue;
32438 }
32439 this.charReceived = this.charLength = 0;
32440
32441 // if there are no more bytes in this buffer, just emit our char
32442 if (buffer.length === 0) {
32443 return charStr;
32444 }
32445 break;
32446 }
32447
32448 // determine and set charLength / charReceived
32449 this.detectIncompleteChar(buffer);
32450
32451 var end = buffer.length;
32452 if (this.charLength) {
32453 // buffer the incomplete character bytes we got
32454 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
32455 end -= this.charReceived;
32456 }
32457
32458 charStr += buffer.toString(this.encoding, 0, end);
32459
32460 var end = charStr.length - 1;
32461 var charCode = charStr.charCodeAt(end);
32462 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
32463 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
32464 var size = this.surrogateSize;
32465 this.charLength += size;
32466 this.charReceived += size;
32467 this.charBuffer.copy(this.charBuffer, size, 0, size);
32468 buffer.copy(this.charBuffer, 0, 0, size);
32469 return charStr.substring(0, end);
32470 }
32471
32472 // or just emit the charStr
32473 return charStr;
32474 };
32475
32476 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
32477 // the end of the given buffer. If so, it sets this.charLength to the byte
32478 // length that character, and sets this.charReceived to the number of bytes
32479 // that are available for this character.
32480 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
32481 // determine how many bytes we have to check at the end of this buffer
32482 var i = (buffer.length >= 3) ? 3 : buffer.length;
32483
32484 // Figure out if one of the last i bytes of our buffer announces an
32485 // incomplete char.
32486 for (; i > 0; i--) {
32487 var c = buffer[buffer.length - i];
32488
32489 // See http://en.wikipedia.org/wiki/UTF-8#Description
32490
32491 // 110XXXXX
32492 if (i == 1 && c >> 5 == 0x06) {
32493 this.charLength = 2;
32494 break;
32495 }
32496
32497 // 1110XXXX
32498 if (i <= 2 && c >> 4 == 0x0E) {
32499 this.charLength = 3;
32500 break;
32501 }
32502
32503 // 11110XXX
32504 if (i <= 3 && c >> 3 == 0x1E) {
32505 this.charLength = 4;
32506 break;
32507 }
32508 }
32509 this.charReceived = i;
32510 };
32511
32512 StringDecoder.prototype.end = function(buffer) {
32513 var res = '';
32514 if (buffer && buffer.length)
32515 res = this.write(buffer);
32516
32517 if (this.charReceived) {
32518 var cr = this.charReceived;
32519 var buf = this.charBuffer;
32520 var enc = this.encoding;
32521 res += buf.slice(0, cr).toString(enc);
32522 }
32523
32524 return res;
32525 };
32526
32527 function passThroughWrite(buffer) {
32528 return buffer.toString(this.encoding);
32529 }
32530
32531 function utf16DetectIncompleteChar(buffer) {
32532 this.charReceived = buffer.length % 2;
32533 this.charLength = this.charReceived ? 2 : 0;
32534 }
32535
32536 function base64DetectIncompleteChar(buffer) {
32537 this.charReceived = buffer.length % 3;
32538 this.charLength = this.charReceived ? 3 : 0;
32539 }
32540
32541 },{"buffer":5}],30:[function(require,module,exports){
32542 (function (global){
32543
32544 /**
32545 * Module exports.
32546 */
32547
32548 module.exports = deprecate;
32549
32550 /**
32551 * Mark that a method should not be used.
32552 * Returns a modified function which warns once by default.
32553 *
32554 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
32555 *
32556 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
32557 * will throw an Error when invoked.
32558 *
32559 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
32560 * will invoke `console.trace()` instead of `console.error()`.
32561 *
32562 * @param {Function} fn - the function to deprecate
32563 * @param {String} msg - the string to print to the console when `fn` is invoked
32564 * @returns {Function} a new "deprecated" version of `fn`
32565 * @api public
32566 */
32567
32568 function deprecate (fn, msg) {
32569 if (config('noDeprecation')) {
32570 return fn;
32571 }
32572
32573 var warned = false;
32574 function deprecated() {
32575 if (!warned) {
32576 if (config('throwDeprecation')) {
32577 throw new Error(msg);
32578 } else if (config('traceDeprecation')) {
32579 console.trace(msg);
32580 } else {
32581 console.warn(msg);
32582 }
32583 warned = true;
32584 }
32585 return fn.apply(this, arguments);
32586 }
32587
32588 return deprecated;
32589 }
32590
32591 /**
32592 * Checks `localStorage` for boolean values for the given `name`.
32593 *
32594 * @param {String} name
32595 * @returns {Boolean}
32596 * @api private
32597 */
32598
32599 function config (name) {
32600 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
32601 try {
32602 if (!global.localStorage) return false;
32603 } catch (_) {
32604 return false;
32605 }
32606 var val = global.localStorage[name];
32607 if (null == val) return false;
32608 return String(val).toLowerCase() === 'true';
32609 }
32610
32611 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
32612 },{}],31:[function(require,module,exports){
32613 arguments[4][9][0].apply(exports,arguments)
32614 },{"dup":9}],32:[function(require,module,exports){
32615 module.exports = function isBuffer(arg) {
32616 return arg && typeof arg === 'object'
32617 && typeof arg.copy === 'function'
32618 && typeof arg.fill === 'function'
32619 && typeof arg.readUInt8 === 'function';
32620 }
32621 },{}],33:[function(require,module,exports){
32622 (function (process,global){
32623 // Copyright Joyent, Inc. and other Node contributors.
32624 //
32625 // Permission is hereby granted, free of charge, to any person obtaining a
32626 // copy of this software and associated documentation files (the
32627 // "Software"), to deal in the Software without restriction, including
32628 // without limitation the rights to use, copy, modify, merge, publish,
32629 // distribute, sublicense, and/or sell copies of the Software, and to permit
32630 // persons to whom the Software is furnished to do so, subject to the
32631 // following conditions:
32632 //
32633 // The above copyright notice and this permission notice shall be included
32634 // in all copies or substantial portions of the Software.
32635 //
32636 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32637 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32638 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32639 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32640 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32641 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32642 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32643
32644 var formatRegExp = /%[sdj%]/g;
32645 exports.format = function(f) {
32646 if (!isString(f)) {
32647 var objects = [];
32648 for (var i = 0; i < arguments.length; i++) {
32649 objects.push(inspect(arguments[i]));
32650 }
32651 return objects.join(' ');
32652 }
32653
32654 var i = 1;
32655 var args = arguments;
32656 var len = args.length;
32657 var str = String(f).replace(formatRegExp, function(x) {
32658 if (x === '%%') return '%';
32659 if (i >= len) return x;
32660 switch (x) {
32661 case '%s': return String(args[i++]);
32662 case '%d': return Number(args[i++]);
32663 case '%j':
32664 try {
32665 return JSON.stringify(args[i++]);
32666 } catch (_) {
32667 return '[Circular]';
32668 }
32669 default:
32670 return x;
32671 }
32672 });
32673 for (var x = args[i]; i < len; x = args[++i]) {
32674 if (isNull(x) || !isObject(x)) {
32675 str += ' ' + x;
32676 } else {
32677 str += ' ' + inspect(x);
32678 }
32679 }
32680 return str;
32681 };
32682
32683
32684 // Mark that a method should not be used.
32685 // Returns a modified function which warns once by default.
32686 // If --no-deprecation is set, then it is a no-op.
32687 exports.deprecate = function(fn, msg) {
32688 // Allow for deprecating things in the process of starting up.
32689 if (isUndefined(global.process)) {
32690 return function() {
32691 return exports.deprecate(fn, msg).apply(this, arguments);
32692 };
32693 }
32694
32695 if (process.noDeprecation === true) {
32696 return fn;
32697 }
32698
32699 var warned = false;
32700 function deprecated() {
32701 if (!warned) {
32702 if (process.throwDeprecation) {
32703 throw new Error(msg);
32704 } else if (process.traceDeprecation) {
32705 console.trace(msg);
32706 } else {
32707 console.error(msg);
32708 }
32709 warned = true;
32710 }
32711 return fn.apply(this, arguments);
32712 }
32713
32714 return deprecated;
32715 };
32716
32717
32718 var debugs = {};
32719 var debugEnviron;
32720 exports.debuglog = function(set) {
32721 if (isUndefined(debugEnviron))
32722 debugEnviron = process.env.NODE_DEBUG || '';
32723 set = set.toUpperCase();
32724 if (!debugs[set]) {
32725 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
32726 var pid = process.pid;
32727 debugs[set] = function() {
32728 var msg = exports.format.apply(exports, arguments);
32729 console.error('%s %d: %s', set, pid, msg);
32730 };
32731 } else {
32732 debugs[set] = function() {};
32733 }
32734 }
32735 return debugs[set];
32736 };
32737
32738
32739 /**
32740 * Echos the value of a value. Trys to print the value out
32741 * in the best way possible given the different types.
32742 *
32743 * @param {Object} obj The object to print out.
32744 * @param {Object} opts Optional options object that alters the output.
32745 */
32746 /* legacy: obj, showHidden, depth, colors*/
32747 function inspect(obj, opts) {
32748 // default options
32749 var ctx = {
32750 seen: [],
32751 stylize: stylizeNoColor
32752 };
32753 // legacy...
32754 if (arguments.length >= 3) ctx.depth = arguments[2];
32755 if (arguments.length >= 4) ctx.colors = arguments[3];
32756 if (isBoolean(opts)) {
32757 // legacy...
32758 ctx.showHidden = opts;
32759 } else if (opts) {
32760 // got an "options" object
32761 exports._extend(ctx, opts);
32762 }
32763 // set default options
32764 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
32765 if (isUndefined(ctx.depth)) ctx.depth = 2;
32766 if (isUndefined(ctx.colors)) ctx.colors = false;
32767 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
32768 if (ctx.colors) ctx.stylize = stylizeWithColor;
32769 return formatValue(ctx, obj, ctx.depth);
32770 }
32771 exports.inspect = inspect;
32772
32773
32774 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
32775 inspect.colors = {
32776 'bold' : [1, 22],
32777 'italic' : [3, 23],
32778 'underline' : [4, 24],
32779 'inverse' : [7, 27],
32780 'white' : [37, 39],
32781 'grey' : [90, 39],
32782 'black' : [30, 39],
32783 'blue' : [34, 39],
32784 'cyan' : [36, 39],
32785 'green' : [32, 39],
32786 'magenta' : [35, 39],
32787 'red' : [31, 39],
32788 'yellow' : [33, 39]
32789 };
32790
32791 // Don't use 'blue' not visible on cmd.exe
32792 inspect.styles = {
32793 'special': 'cyan',
32794 'number': 'yellow',
32795 'boolean': 'yellow',
32796 'undefined': 'grey',
32797 'null': 'bold',
32798 'string': 'green',
32799 'date': 'magenta',
32800 // "name": intentionally not styling
32801 'regexp': 'red'
32802 };
32803
32804
32805 function stylizeWithColor(str, styleType) {
32806 var style = inspect.styles[styleType];
32807
32808 if (style) {
32809 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
32810 '\u001b[' + inspect.colors[style][1] + 'm';
32811 } else {
32812 return str;
32813 }
32814 }
32815
32816
32817 function stylizeNoColor(str, styleType) {
32818 return str;
32819 }
32820
32821
32822 function arrayToHash(array) {
32823 var hash = {};
32824
32825 array.forEach(function(val, idx) {
32826 hash[val] = true;
32827 });
32828
32829 return hash;
32830 }
32831
32832
32833 function formatValue(ctx, value, recurseTimes) {
32834 // Provide a hook for user-specified inspect functions.
32835 // Check that value is an object with an inspect function on it
32836 if (ctx.customInspect &&
32837 value &&
32838 isFunction(value.inspect) &&
32839 // Filter out the util module, it's inspect function is special
32840 value.inspect !== exports.inspect &&
32841 // Also filter out any prototype objects using the circular check.
32842 !(value.constructor && value.constructor.prototype === value)) {
32843 var ret = value.inspect(recurseTimes, ctx);
32844 if (!isString(ret)) {
32845 ret = formatValue(ctx, ret, recurseTimes);
32846 }
32847 return ret;
32848 }
32849
32850 // Primitive types cannot have properties
32851 var primitive = formatPrimitive(ctx, value);
32852 if (primitive) {
32853 return primitive;
32854 }
32855
32856 // Look up the keys of the object.
32857 var keys = Object.keys(value);
32858 var visibleKeys = arrayToHash(keys);
32859
32860 if (ctx.showHidden) {
32861 keys = Object.getOwnPropertyNames(value);
32862 }
32863
32864 // IE doesn't make error fields non-enumerable
32865 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
32866 if (isError(value)
32867 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
32868 return formatError(value);
32869 }
32870
32871 // Some type of object without properties can be shortcutted.
32872 if (keys.length === 0) {
32873 if (isFunction(value)) {
32874 var name = value.name ? ': ' + value.name : '';
32875 return ctx.stylize('[Function' + name + ']', 'special');
32876 }
32877 if (isRegExp(value)) {
32878 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
32879 }
32880 if (isDate(value)) {
32881 return ctx.stylize(Date.prototype.toString.call(value), 'date');
32882 }
32883 if (isError(value)) {
32884 return formatError(value);
32885 }
32886 }
32887
32888 var base = '', array = false, braces = ['{', '}'];
32889
32890 // Make Array say that they are Array
32891 if (isArray(value)) {
32892 array = true;
32893 braces = ['[', ']'];
32894 }
32895
32896 // Make functions say that they are functions
32897 if (isFunction(value)) {
32898 var n = value.name ? ': ' + value.name : '';
32899 base = ' [Function' + n + ']';
32900 }
32901
32902 // Make RegExps say that they are RegExps
32903 if (isRegExp(value)) {
32904 base = ' ' + RegExp.prototype.toString.call(value);
32905 }
32906
32907 // Make dates with properties first say the date
32908 if (isDate(value)) {
32909 base = ' ' + Date.prototype.toUTCString.call(value);
32910 }
32911
32912 // Make error with message first say the error
32913 if (isError(value)) {
32914 base = ' ' + formatError(value);
32915 }
32916
32917 if (keys.length === 0 && (!array || value.length == 0)) {
32918 return braces[0] + base + braces[1];
32919 }
32920
32921 if (recurseTimes < 0) {
32922 if (isRegExp(value)) {
32923 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
32924 } else {
32925 return ctx.stylize('[Object]', 'special');
32926 }
32927 }
32928
32929 ctx.seen.push(value);
32930
32931 var output;
32932 if (array) {
32933 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
32934 } else {
32935 output = keys.map(function(key) {
32936 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
32937 });
32938 }
32939
32940 ctx.seen.pop();
32941
32942 return reduceToSingleString(output, base, braces);
32943 }
32944
32945
32946 function formatPrimitive(ctx, value) {
32947 if (isUndefined(value))
32948 return ctx.stylize('undefined', 'undefined');
32949 if (isString(value)) {
32950 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
32951 .replace(/'/g, "\\'")
32952 .replace(/\\"/g, '"') + '\'';
32953 return ctx.stylize(simple, 'string');
32954 }
32955 if (isNumber(value))
32956 return ctx.stylize('' + value, 'number');
32957 if (isBoolean(value))
32958 return ctx.stylize('' + value, 'boolean');
32959 // For some reason typeof null is "object", so special case here.
32960 if (isNull(value))
32961 return ctx.stylize('null', 'null');
32962 }
32963
32964
32965 function formatError(value) {
32966 return '[' + Error.prototype.toString.call(value) + ']';
32967 }
32968
32969
32970 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
32971 var output = [];
32972 for (var i = 0, l = value.length; i < l; ++i) {
32973 if (hasOwnProperty(value, String(i))) {
32974 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
32975 String(i), true));
32976 } else {
32977 output.push('');
32978 }
32979 }
32980 keys.forEach(function(key) {
32981 if (!key.match(/^\d+$/)) {
32982 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
32983 key, true));
32984 }
32985 });
32986 return output;
32987 }
32988
32989
32990 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
32991 var name, str, desc;
32992 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
32993 if (desc.get) {
32994 if (desc.set) {
32995 str = ctx.stylize('[Getter/Setter]', 'special');
32996 } else {
32997 str = ctx.stylize('[Getter]', 'special');
32998 }
32999 } else {
33000 if (desc.set) {
33001 str = ctx.stylize('[Setter]', 'special');
33002 }
33003 }
33004 if (!hasOwnProperty(visibleKeys, key)) {
33005 name = '[' + key + ']';
33006 }
33007 if (!str) {
33008 if (ctx.seen.indexOf(desc.value) < 0) {
33009 if (isNull(recurseTimes)) {
33010 str = formatValue(ctx, desc.value, null);
33011 } else {
33012 str = formatValue(ctx, desc.value, recurseTimes - 1);
33013 }
33014 if (str.indexOf('\n') > -1) {
33015 if (array) {
33016 str = str.split('\n').map(function(line) {
33017 return ' ' + line;
33018 }).join('\n').substr(2);
33019 } else {
33020 str = '\n' + str.split('\n').map(function(line) {
33021 return ' ' + line;
33022 }).join('\n');
33023 }
33024 }
33025 } else {
33026 str = ctx.stylize('[Circular]', 'special');
33027 }
33028 }
33029 if (isUndefined(name)) {
33030 if (array && key.match(/^\d+$/)) {
33031 return str;
33032 }
33033 name = JSON.stringify('' + key);
33034 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
33035 name = name.substr(1, name.length - 2);
33036 name = ctx.stylize(name, 'name');
33037 } else {
33038 name = name.replace(/'/g, "\\'")
33039 .replace(/\\"/g, '"')
33040 .replace(/(^"|"$)/g, "'");
33041 name = ctx.stylize(name, 'string');
33042 }
33043 }
33044
33045 return name + ': ' + str;
33046 }
33047
33048
33049 function reduceToSingleString(output, base, braces) {
33050 var numLinesEst = 0;
33051 var length = output.reduce(function(prev, cur) {
33052 numLinesEst++;
33053 if (cur.indexOf('\n') >= 0) numLinesEst++;
33054 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
33055 }, 0);
33056
33057 if (length > 60) {
33058 return braces[0] +
33059 (base === '' ? '' : base + '\n ') +
33060 ' ' +
33061 output.join(',\n ') +
33062 ' ' +
33063 braces[1];
33064 }
33065
33066 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
33067 }
33068
33069
33070 // NOTE: These type checking functions intentionally don't use `instanceof`
33071 // because it is fragile and can be easily faked with `Object.create()`.
33072 function isArray(ar) {
33073 return Array.isArray(ar);
33074 }
33075 exports.isArray = isArray;
33076
33077 function isBoolean(arg) {
33078 return typeof arg === 'boolean';
33079 }
33080 exports.isBoolean = isBoolean;
33081
33082 function isNull(arg) {
33083 return arg === null;
33084 }
33085 exports.isNull = isNull;
33086
33087 function isNullOrUndefined(arg) {
33088 return arg == null;
33089 }
33090 exports.isNullOrUndefined = isNullOrUndefined;
33091
33092 function isNumber(arg) {
33093 return typeof arg === 'number';
33094 }
33095 exports.isNumber = isNumber;
33096
33097 function isString(arg) {
33098 return typeof arg === 'string';
33099 }
33100 exports.isString = isString;
33101
33102 function isSymbol(arg) {
33103 return typeof arg === 'symbol';
33104 }
33105 exports.isSymbol = isSymbol;
33106
33107 function isUndefined(arg) {
33108 return arg === void 0;
33109 }
33110 exports.isUndefined = isUndefined;
33111
33112 function isRegExp(re) {
33113 return isObject(re) && objectToString(re) === '[object RegExp]';
33114 }
33115 exports.isRegExp = isRegExp;
33116
33117 function isObject(arg) {
33118 return typeof arg === 'object' && arg !== null;
33119 }
33120 exports.isObject = isObject;
33121
33122 function isDate(d) {
33123 return isObject(d) && objectToString(d) === '[object Date]';
33124 }
33125 exports.isDate = isDate;
33126
33127 function isError(e) {
33128 return isObject(e) &&
33129 (objectToString(e) === '[object Error]' || e instanceof Error);
33130 }
33131 exports.isError = isError;
33132
33133 function isFunction(arg) {
33134 return typeof arg === 'function';
33135 }
33136 exports.isFunction = isFunction;
33137
33138 function isPrimitive(arg) {
33139 return arg === null ||
33140 typeof arg === 'boolean' ||
33141 typeof arg === 'number' ||
33142 typeof arg === 'string' ||
33143 typeof arg === 'symbol' || // ES6 symbol
33144 typeof arg === 'undefined';
33145 }
33146 exports.isPrimitive = isPrimitive;
33147
33148 exports.isBuffer = require('./support/isBuffer');
33149
33150 function objectToString(o) {
33151 return Object.prototype.toString.call(o);
33152 }
33153
33154
33155 function pad(n) {
33156 return n < 10 ? '0' + n.toString(10) : n.toString(10);
33157 }
33158
33159
33160 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
33161 'Oct', 'Nov', 'Dec'];
33162
33163 // 26 Feb 16:19:34
33164 function timestamp() {
33165 var d = new Date();
33166 var time = [pad(d.getHours()),
33167 pad(d.getMinutes()),
33168 pad(d.getSeconds())].join(':');
33169 return [d.getDate(), months[d.getMonth()], time].join(' ');
33170 }
33171
33172
33173 // log is just a thin wrapper to console.log that prepends a timestamp
33174 exports.log = function() {
33175 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
33176 };
33177
33178
33179 /**
33180 * Inherit the prototype methods from one constructor into another.
33181 *
33182 * The Function.prototype.inherits from lang.js rewritten as a standalone
33183 * function (not on Function.prototype). NOTE: If this file is to be loaded
33184 * during bootstrapping this function needs to be rewritten using some native
33185 * functions as prototype setup using normal JavaScript does not work as
33186 * expected during bootstrapping (see mirror.js in r114903).
33187 *
33188 * @param {function} ctor Constructor function which needs to inherit the
33189 * prototype.
33190 * @param {function} superCtor Constructor function to inherit prototype from.
33191 */
33192 exports.inherits = require('inherits');
33193
33194 exports._extend = function(origin, add) {
33195 // Don't do anything if add isn't an object
33196 if (!add || !isObject(add)) return origin;
33197
33198 var keys = Object.keys(add);
33199 var i = keys.length;
33200 while (i--) {
33201 origin[keys[i]] = add[keys[i]];
33202 }
33203 return origin;
33204 };
33205
33206 function hasOwnProperty(obj, prop) {
33207 return Object.prototype.hasOwnProperty.call(obj, prop);
33208 }
33209
33210 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
33211 },{"./support/isBuffer":32,"_process":13,"inherits":31}],34:[function(require,module,exports){
33212 bitcoin = {
33213 base58: require('bs58'),
33214 bitcoin: require('bitcoinjs-lib'),
33215 ecurve: require('ecurve'),
33216 BigInteger: require('bigi'),
33217 Buffer: require('buffer'),
33218 elliptic: require('elliptic'),
33219 bs58check: require('bs58check'),
33220 }
33221
33222 module.exports = bitcoin;
33223
33224 },{"bigi":39,"bitcoinjs-lib":52,"bs58":83,"bs58check":85,"buffer":5,"ecurve":94,"elliptic":97}],35:[function(require,module,exports){
33225 // base-x encoding
33226 // Forked from https://github.com/cryptocoinjs/bs58
33227 // Originally written by Mike Hearn for BitcoinJ
33228 // Copyright (c) 2011 Google Inc
33229 // Ported to JavaScript by Stefan Thomas
33230 // Merged Buffer refactorings from base58-native by Stephen Pair
33231 // Copyright (c) 2013 BitPay Inc
33232
33233 var Buffer = require('safe-buffer').Buffer
33234
33235 module.exports = function base (ALPHABET) {
33236 var ALPHABET_MAP = {}
33237 var BASE = ALPHABET.length
33238 var LEADER = ALPHABET.charAt(0)
33239
33240 // pre-compute lookup table
33241 for (var z = 0; z < ALPHABET.length; z++) {
33242 var x = ALPHABET.charAt(z)
33243
33244 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
33245 ALPHABET_MAP[x] = z
33246 }
33247
33248 function encode (source) {
33249 if (source.length === 0) return ''
33250
33251 var digits = [0]
33252 for (var i = 0; i < source.length; ++i) {
33253 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
33254 carry += digits[j] << 8
33255 digits[j] = carry % BASE
33256 carry = (carry / BASE) | 0
33257 }
33258
33259 while (carry > 0) {
33260 digits.push(carry % BASE)
33261 carry = (carry / BASE) | 0
33262 }
33263 }
33264
33265 var string = ''
33266
33267 // deal with leading zeros
33268 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
33269 // convert digits to a string
33270 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
33271
33272 return string
33273 }
33274
33275 function decodeUnsafe (string) {
33276 if (string.length === 0) return Buffer.allocUnsafe(0)
33277
33278 var bytes = [0]
33279 for (var i = 0; i < string.length; i++) {
33280 var value = ALPHABET_MAP[string[i]]
33281 if (value === undefined) return
33282
33283 for (var j = 0, carry = value; j < bytes.length; ++j) {
33284 carry += bytes[j] * BASE
33285 bytes[j] = carry & 0xff
33286 carry >>= 8
33287 }
33288
33289 while (carry > 0) {
33290 bytes.push(carry & 0xff)
33291 carry >>= 8
33292 }
33293 }
33294
33295 // deal with leading zeros
33296 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
33297 bytes.push(0)
33298 }
33299
33300 return Buffer.from(bytes.reverse())
33301 }
33302
33303 function decode (string) {
33304 var buffer = decodeUnsafe(string)
33305 if (buffer) return buffer
33306
33307 throw new Error('Non-base' + BASE + ' character')
33308 }
33309
33310 return {
33311 encode: encode,
33312 decodeUnsafe: decodeUnsafe,
33313 decode: decode
33314 }
33315 }
33316
33317 },{"safe-buffer":128}],36:[function(require,module,exports){
33318 'use strict'
33319 let ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'
33320
33321 // pre-compute lookup table
33322 let ALPHABET_MAP = {}
33323 for (let z = 0; z < ALPHABET.length; z++) {
33324 let x = ALPHABET.charAt(z)
33325
33326 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
33327 ALPHABET_MAP[x] = z
33328 }
33329
33330 function polymodStep (pre) {
33331 let b = pre >> 25
33332 return ((pre & 0x1FFFFFF) << 5) ^
33333 (-((b >> 0) & 1) & 0x3b6a57b2) ^
33334 (-((b >> 1) & 1) & 0x26508e6d) ^
33335 (-((b >> 2) & 1) & 0x1ea119fa) ^
33336 (-((b >> 3) & 1) & 0x3d4233dd) ^
33337 (-((b >> 4) & 1) & 0x2a1462b3)
33338 }
33339
33340 function prefixChk (prefix) {
33341 let chk = 1
33342 for (let i = 0; i < prefix.length; ++i) {
33343 let c = prefix.charCodeAt(i)
33344 if (c < 33 || c > 126) throw new Error('Invalid prefix (' + prefix + ')')
33345
33346 chk = polymodStep(chk) ^ (c >> 5)
33347 }
33348 chk = polymodStep(chk)
33349
33350 for (let i = 0; i < prefix.length; ++i) {
33351 let v = prefix.charCodeAt(i)
33352 chk = polymodStep(chk) ^ (v & 0x1f)
33353 }
33354 return chk
33355 }
33356
33357 function encode (prefix, words) {
33358 // too long?
33359 if ((prefix.length + 7 + words.length) > 90) throw new TypeError('Exceeds Bech32 maximum length')
33360 prefix = prefix.toLowerCase()
33361
33362 // determine chk mod
33363 let chk = prefixChk(prefix)
33364 let result = prefix + '1'
33365 for (let i = 0; i < words.length; ++i) {
33366 let x = words[i]
33367 if ((x >> 5) !== 0) throw new Error('Non 5-bit word')
33368
33369 chk = polymodStep(chk) ^ x
33370 result += ALPHABET.charAt(x)
33371 }
33372
33373 for (let i = 0; i < 6; ++i) {
33374 chk = polymodStep(chk)
33375 }
33376 chk ^= 1
33377
33378 for (let i = 0; i < 6; ++i) {
33379 let v = (chk >> ((5 - i) * 5)) & 0x1f
33380 result += ALPHABET.charAt(v)
33381 }
33382
33383 return result
33384 }
33385
33386 function decode (str) {
33387 if (str.length < 8) throw new TypeError(str + ' too short')
33388 if (str.length > 90) throw new TypeError(str + ' too long')
33389
33390 // don't allow mixed case
33391 let lowered = str.toLowerCase()
33392 let uppered = str.toUpperCase()
33393 if (str !== lowered && str !== uppered) throw new Error('Mixed-case string ' + str)
33394 str = lowered
33395
33396 let split = str.lastIndexOf('1')
33397 if (split === 0) throw new Error('Missing prefix for ' + str)
33398
33399 let prefix = str.slice(0, split)
33400 let wordChars = str.slice(split + 1)
33401 if (wordChars.length < 6) throw new Error('Data too short')
33402
33403 let chk = prefixChk(prefix)
33404 let words = []
33405 for (let i = 0; i < wordChars.length; ++i) {
33406 let c = wordChars.charAt(i)
33407 let v = ALPHABET_MAP[c]
33408 if (v === undefined) throw new Error('Unknown character ' + c)
33409 chk = polymodStep(chk) ^ v
33410
33411 // not in the checksum?
33412 if (i + 6 >= wordChars.length) continue
33413 words.push(v)
33414 }
33415
33416 if (chk !== 1) throw new Error('Invalid checksum for ' + str)
33417 return { prefix, words }
33418 }
33419
33420 function convert (data, inBits, outBits, pad) {
33421 let value = 0
33422 let bits = 0
33423 let maxV = (1 << outBits) - 1
33424
33425 let result = []
33426 for (let i = 0; i < data.length; ++i) {
33427 value = (value << inBits) | data[i]
33428 bits += inBits
33429
33430 while (bits >= outBits) {
33431 bits -= outBits
33432 result.push((value >> bits) & maxV)
33433 }
33434 }
33435
33436 if (pad) {
33437 if (bits > 0) {
33438 result.push((value << (outBits - bits)) & maxV)
33439 }
33440 } else {
33441 if (bits >= inBits) throw new Error('Excess padding')
33442 if ((value << (outBits - bits)) & maxV) throw new Error('Non-zero padding')
33443 }
33444
33445 return result
33446 }
33447
33448 function toWords (bytes) {
33449 return convert(bytes, 8, 5, true)
33450 }
33451
33452 function fromWords (words) {
33453 return convert(words, 5, 8, false)
33454 }
33455
33456 module.exports = { decode, encode, toWords, fromWords }
33457
33458 },{}],37:[function(require,module,exports){
33459 // (public) Constructor
33460 function BigInteger(a, b, c) {
33461 if (!(this instanceof BigInteger))
33462 return new BigInteger(a, b, c)
33463
33464 if (a != null) {
33465 if ("number" == typeof a) this.fromNumber(a, b, c)
33466 else if (b == null && "string" != typeof a) this.fromString(a, 256)
33467 else this.fromString(a, b)
33468 }
33469 }
33470
33471 var proto = BigInteger.prototype
33472
33473 // duck-typed isBigInteger
33474 proto.__bigi = require('../package.json').version
33475 BigInteger.isBigInteger = function (obj, check_ver) {
33476 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
33477 }
33478
33479 // Bits per digit
33480 var dbits
33481
33482 // am: Compute w_j += (x*this_i), propagate carries,
33483 // c is initial carry, returns final carry.
33484 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
33485 // We need to select the fastest one that works in this environment.
33486
33487 // am1: use a single mult and divide to get the high bits,
33488 // max digit bits should be 26 because
33489 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
33490 function am1(i, x, w, j, c, n) {
33491 while (--n >= 0) {
33492 var v = x * this[i++] + w[j] + c
33493 c = Math.floor(v / 0x4000000)
33494 w[j++] = v & 0x3ffffff
33495 }
33496 return c
33497 }
33498 // am2 avoids a big mult-and-extract completely.
33499 // Max digit bits should be <= 30 because we do bitwise ops
33500 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
33501 function am2(i, x, w, j, c, n) {
33502 var xl = x & 0x7fff,
33503 xh = x >> 15
33504 while (--n >= 0) {
33505 var l = this[i] & 0x7fff
33506 var h = this[i++] >> 15
33507 var m = xh * l + h * xl
33508 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
33509 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
33510 w[j++] = l & 0x3fffffff
33511 }
33512 return c
33513 }
33514 // Alternately, set max digit bits to 28 since some
33515 // browsers slow down when dealing with 32-bit numbers.
33516 function am3(i, x, w, j, c, n) {
33517 var xl = x & 0x3fff,
33518 xh = x >> 14
33519 while (--n >= 0) {
33520 var l = this[i] & 0x3fff
33521 var h = this[i++] >> 14
33522 var m = xh * l + h * xl
33523 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
33524 c = (l >> 28) + (m >> 14) + xh * h
33525 w[j++] = l & 0xfffffff
33526 }
33527 return c
33528 }
33529
33530 // wtf?
33531 BigInteger.prototype.am = am1
33532 dbits = 26
33533
33534 BigInteger.prototype.DB = dbits
33535 BigInteger.prototype.DM = ((1 << dbits) - 1)
33536 var DV = BigInteger.prototype.DV = (1 << dbits)
33537
33538 var BI_FP = 52
33539 BigInteger.prototype.FV = Math.pow(2, BI_FP)
33540 BigInteger.prototype.F1 = BI_FP - dbits
33541 BigInteger.prototype.F2 = 2 * dbits - BI_FP
33542
33543 // Digit conversions
33544 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
33545 var BI_RC = new Array()
33546 var rr, vv
33547 rr = "0".charCodeAt(0)
33548 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
33549 rr = "a".charCodeAt(0)
33550 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
33551 rr = "A".charCodeAt(0)
33552 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
33553
33554 function int2char(n) {
33555 return BI_RM.charAt(n)
33556 }
33557
33558 function intAt(s, i) {
33559 var c = BI_RC[s.charCodeAt(i)]
33560 return (c == null) ? -1 : c
33561 }
33562
33563 // (protected) copy this to r
33564 function bnpCopyTo(r) {
33565 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
33566 r.t = this.t
33567 r.s = this.s
33568 }
33569
33570 // (protected) set from integer value x, -DV <= x < DV
33571 function bnpFromInt(x) {
33572 this.t = 1
33573 this.s = (x < 0) ? -1 : 0
33574 if (x > 0) this[0] = x
33575 else if (x < -1) this[0] = x + DV
33576 else this.t = 0
33577 }
33578
33579 // return bigint initialized to value
33580 function nbv(i) {
33581 var r = new BigInteger()
33582 r.fromInt(i)
33583 return r
33584 }
33585
33586 // (protected) set from string and radix
33587 function bnpFromString(s, b) {
33588 var self = this
33589
33590 var k
33591 if (b == 16) k = 4
33592 else if (b == 8) k = 3
33593 else if (b == 256) k = 8; // byte array
33594 else if (b == 2) k = 1
33595 else if (b == 32) k = 5
33596 else if (b == 4) k = 2
33597 else {
33598 self.fromRadix(s, b)
33599 return
33600 }
33601 self.t = 0
33602 self.s = 0
33603 var i = s.length,
33604 mi = false,
33605 sh = 0
33606 while (--i >= 0) {
33607 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
33608 if (x < 0) {
33609 if (s.charAt(i) == "-") mi = true
33610 continue
33611 }
33612 mi = false
33613 if (sh == 0)
33614 self[self.t++] = x
33615 else if (sh + k > self.DB) {
33616 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
33617 self[self.t++] = (x >> (self.DB - sh))
33618 } else
33619 self[self.t - 1] |= x << sh
33620 sh += k
33621 if (sh >= self.DB) sh -= self.DB
33622 }
33623 if (k == 8 && (s[0] & 0x80) != 0) {
33624 self.s = -1
33625 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
33626 }
33627 self.clamp()
33628 if (mi) BigInteger.ZERO.subTo(self, self)
33629 }
33630
33631 // (protected) clamp off excess high words
33632 function bnpClamp() {
33633 var c = this.s & this.DM
33634 while (this.t > 0 && this[this.t - 1] == c)--this.t
33635 }
33636
33637 // (public) return string representation in given radix
33638 function bnToString(b) {
33639 var self = this
33640 if (self.s < 0) return "-" + self.negate()
33641 .toString(b)
33642 var k
33643 if (b == 16) k = 4
33644 else if (b == 8) k = 3
33645 else if (b == 2) k = 1
33646 else if (b == 32) k = 5
33647 else if (b == 4) k = 2
33648 else return self.toRadix(b)
33649 var km = (1 << k) - 1,
33650 d, m = false,
33651 r = "",
33652 i = self.t
33653 var p = self.DB - (i * self.DB) % k
33654 if (i-- > 0) {
33655 if (p < self.DB && (d = self[i] >> p) > 0) {
33656 m = true
33657 r = int2char(d)
33658 }
33659 while (i >= 0) {
33660 if (p < k) {
33661 d = (self[i] & ((1 << p) - 1)) << (k - p)
33662 d |= self[--i] >> (p += self.DB - k)
33663 } else {
33664 d = (self[i] >> (p -= k)) & km
33665 if (p <= 0) {
33666 p += self.DB
33667 --i
33668 }
33669 }
33670 if (d > 0) m = true
33671 if (m) r += int2char(d)
33672 }
33673 }
33674 return m ? r : "0"
33675 }
33676
33677 // (public) -this
33678 function bnNegate() {
33679 var r = new BigInteger()
33680 BigInteger.ZERO.subTo(this, r)
33681 return r
33682 }
33683
33684 // (public) |this|
33685 function bnAbs() {
33686 return (this.s < 0) ? this.negate() : this
33687 }
33688
33689 // (public) return + if this > a, - if this < a, 0 if equal
33690 function bnCompareTo(a) {
33691 var r = this.s - a.s
33692 if (r != 0) return r
33693 var i = this.t
33694 r = i - a.t
33695 if (r != 0) return (this.s < 0) ? -r : r
33696 while (--i >= 0)
33697 if ((r = this[i] - a[i]) != 0) return r
33698 return 0
33699 }
33700
33701 // returns bit length of the integer x
33702 function nbits(x) {
33703 var r = 1,
33704 t
33705 if ((t = x >>> 16) != 0) {
33706 x = t
33707 r += 16
33708 }
33709 if ((t = x >> 8) != 0) {
33710 x = t
33711 r += 8
33712 }
33713 if ((t = x >> 4) != 0) {
33714 x = t
33715 r += 4
33716 }
33717 if ((t = x >> 2) != 0) {
33718 x = t
33719 r += 2
33720 }
33721 if ((t = x >> 1) != 0) {
33722 x = t
33723 r += 1
33724 }
33725 return r
33726 }
33727
33728 // (public) return the number of bits in "this"
33729 function bnBitLength() {
33730 if (this.t <= 0) return 0
33731 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
33732 }
33733
33734 // (public) return the number of bytes in "this"
33735 function bnByteLength() {
33736 return this.bitLength() >> 3
33737 }
33738
33739 // (protected) r = this << n*DB
33740 function bnpDLShiftTo(n, r) {
33741 var i
33742 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
33743 for (i = n - 1; i >= 0; --i) r[i] = 0
33744 r.t = this.t + n
33745 r.s = this.s
33746 }
33747
33748 // (protected) r = this >> n*DB
33749 function bnpDRShiftTo(n, r) {
33750 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
33751 r.t = Math.max(this.t - n, 0)
33752 r.s = this.s
33753 }
33754
33755 // (protected) r = this << n
33756 function bnpLShiftTo(n, r) {
33757 var self = this
33758 var bs = n % self.DB
33759 var cbs = self.DB - bs
33760 var bm = (1 << cbs) - 1
33761 var ds = Math.floor(n / self.DB),
33762 c = (self.s << bs) & self.DM,
33763 i
33764 for (i = self.t - 1; i >= 0; --i) {
33765 r[i + ds + 1] = (self[i] >> cbs) | c
33766 c = (self[i] & bm) << bs
33767 }
33768 for (i = ds - 1; i >= 0; --i) r[i] = 0
33769 r[ds] = c
33770 r.t = self.t + ds + 1
33771 r.s = self.s
33772 r.clamp()
33773 }
33774
33775 // (protected) r = this >> n
33776 function bnpRShiftTo(n, r) {
33777 var self = this
33778 r.s = self.s
33779 var ds = Math.floor(n / self.DB)
33780 if (ds >= self.t) {
33781 r.t = 0
33782 return
33783 }
33784 var bs = n % self.DB
33785 var cbs = self.DB - bs
33786 var bm = (1 << bs) - 1
33787 r[0] = self[ds] >> bs
33788 for (var i = ds + 1; i < self.t; ++i) {
33789 r[i - ds - 1] |= (self[i] & bm) << cbs
33790 r[i - ds] = self[i] >> bs
33791 }
33792 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
33793 r.t = self.t - ds
33794 r.clamp()
33795 }
33796
33797 // (protected) r = this - a
33798 function bnpSubTo(a, r) {
33799 var self = this
33800 var i = 0,
33801 c = 0,
33802 m = Math.min(a.t, self.t)
33803 while (i < m) {
33804 c += self[i] - a[i]
33805 r[i++] = c & self.DM
33806 c >>= self.DB
33807 }
33808 if (a.t < self.t) {
33809 c -= a.s
33810 while (i < self.t) {
33811 c += self[i]
33812 r[i++] = c & self.DM
33813 c >>= self.DB
33814 }
33815 c += self.s
33816 } else {
33817 c += self.s
33818 while (i < a.t) {
33819 c -= a[i]
33820 r[i++] = c & self.DM
33821 c >>= self.DB
33822 }
33823 c -= a.s
33824 }
33825 r.s = (c < 0) ? -1 : 0
33826 if (c < -1) r[i++] = self.DV + c
33827 else if (c > 0) r[i++] = c
33828 r.t = i
33829 r.clamp()
33830 }
33831
33832 // (protected) r = this * a, r != this,a (HAC 14.12)
33833 // "this" should be the larger one if appropriate.
33834 function bnpMultiplyTo(a, r) {
33835 var x = this.abs(),
33836 y = a.abs()
33837 var i = x.t
33838 r.t = i + y.t
33839 while (--i >= 0) r[i] = 0
33840 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
33841 r.s = 0
33842 r.clamp()
33843 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
33844 }
33845
33846 // (protected) r = this^2, r != this (HAC 14.16)
33847 function bnpSquareTo(r) {
33848 var x = this.abs()
33849 var i = r.t = 2 * x.t
33850 while (--i >= 0) r[i] = 0
33851 for (i = 0; i < x.t - 1; ++i) {
33852 var c = x.am(i, x[i], r, 2 * i, 0, 1)
33853 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
33854 r[i + x.t] -= x.DV
33855 r[i + x.t + 1] = 1
33856 }
33857 }
33858 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
33859 r.s = 0
33860 r.clamp()
33861 }
33862
33863 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
33864 // r != q, this != m. q or r may be null.
33865 function bnpDivRemTo(m, q, r) {
33866 var self = this
33867 var pm = m.abs()
33868 if (pm.t <= 0) return
33869 var pt = self.abs()
33870 if (pt.t < pm.t) {
33871 if (q != null) q.fromInt(0)
33872 if (r != null) self.copyTo(r)
33873 return
33874 }
33875 if (r == null) r = new BigInteger()
33876 var y = new BigInteger(),
33877 ts = self.s,
33878 ms = m.s
33879 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
33880 if (nsh > 0) {
33881 pm.lShiftTo(nsh, y)
33882 pt.lShiftTo(nsh, r)
33883 } else {
33884 pm.copyTo(y)
33885 pt.copyTo(r)
33886 }
33887 var ys = y.t
33888 var y0 = y[ys - 1]
33889 if (y0 == 0) return
33890 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
33891 var d1 = self.FV / yt,
33892 d2 = (1 << self.F1) / yt,
33893 e = 1 << self.F2
33894 var i = r.t,
33895 j = i - ys,
33896 t = (q == null) ? new BigInteger() : q
33897 y.dlShiftTo(j, t)
33898 if (r.compareTo(t) >= 0) {
33899 r[r.t++] = 1
33900 r.subTo(t, r)
33901 }
33902 BigInteger.ONE.dlShiftTo(ys, t)
33903 t.subTo(y, y); // "negative" y so we can replace sub with am later
33904 while (y.t < ys) y[y.t++] = 0
33905 while (--j >= 0) {
33906 // Estimate quotient digit
33907 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
33908 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
33909 y.dlShiftTo(j, t)
33910 r.subTo(t, r)
33911 while (r[i] < --qd) r.subTo(t, r)
33912 }
33913 }
33914 if (q != null) {
33915 r.drShiftTo(ys, q)
33916 if (ts != ms) BigInteger.ZERO.subTo(q, q)
33917 }
33918 r.t = ys
33919 r.clamp()
33920 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
33921 if (ts < 0) BigInteger.ZERO.subTo(r, r)
33922 }
33923
33924 // (public) this mod a
33925 function bnMod(a) {
33926 var r = new BigInteger()
33927 this.abs()
33928 .divRemTo(a, null, r)
33929 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
33930 return r
33931 }
33932
33933 // Modular reduction using "classic" algorithm
33934 function Classic(m) {
33935 this.m = m
33936 }
33937
33938 function cConvert(x) {
33939 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
33940 else return x
33941 }
33942
33943 function cRevert(x) {
33944 return x
33945 }
33946
33947 function cReduce(x) {
33948 x.divRemTo(this.m, null, x)
33949 }
33950
33951 function cMulTo(x, y, r) {
33952 x.multiplyTo(y, r)
33953 this.reduce(r)
33954 }
33955
33956 function cSqrTo(x, r) {
33957 x.squareTo(r)
33958 this.reduce(r)
33959 }
33960
33961 Classic.prototype.convert = cConvert
33962 Classic.prototype.revert = cRevert
33963 Classic.prototype.reduce = cReduce
33964 Classic.prototype.mulTo = cMulTo
33965 Classic.prototype.sqrTo = cSqrTo
33966
33967 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
33968 // justification:
33969 // xy == 1 (mod m)
33970 // xy = 1+km
33971 // xy(2-xy) = (1+km)(1-km)
33972 // x[y(2-xy)] = 1-k^2m^2
33973 // x[y(2-xy)] == 1 (mod m^2)
33974 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
33975 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
33976 // JS multiply "overflows" differently from C/C++, so care is needed here.
33977 function bnpInvDigit() {
33978 if (this.t < 1) return 0
33979 var x = this[0]
33980 if ((x & 1) == 0) return 0
33981 var y = x & 3; // y == 1/x mod 2^2
33982 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
33983 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
33984 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
33985 // last step - calculate inverse mod DV directly
33986 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
33987 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
33988 // we really want the negative inverse, and -DV < y < DV
33989 return (y > 0) ? this.DV - y : -y
33990 }
33991
33992 // Montgomery reduction
33993 function Montgomery(m) {
33994 this.m = m
33995 this.mp = m.invDigit()
33996 this.mpl = this.mp & 0x7fff
33997 this.mph = this.mp >> 15
33998 this.um = (1 << (m.DB - 15)) - 1
33999 this.mt2 = 2 * m.t
34000 }
34001
34002 // xR mod m
34003 function montConvert(x) {
34004 var r = new BigInteger()
34005 x.abs()
34006 .dlShiftTo(this.m.t, r)
34007 r.divRemTo(this.m, null, r)
34008 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
34009 return r
34010 }
34011
34012 // x/R mod m
34013 function montRevert(x) {
34014 var r = new BigInteger()
34015 x.copyTo(r)
34016 this.reduce(r)
34017 return r
34018 }
34019
34020 // x = x/R mod m (HAC 14.32)
34021 function montReduce(x) {
34022 while (x.t <= this.mt2) // pad x so am has enough room later
34023 x[x.t++] = 0
34024 for (var i = 0; i < this.m.t; ++i) {
34025 // faster way of calculating u0 = x[i]*mp mod DV
34026 var j = x[i] & 0x7fff
34027 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
34028 // use am to combine the multiply-shift-add into one call
34029 j = i + this.m.t
34030 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
34031 // propagate carry
34032 while (x[j] >= x.DV) {
34033 x[j] -= x.DV
34034 x[++j]++
34035 }
34036 }
34037 x.clamp()
34038 x.drShiftTo(this.m.t, x)
34039 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
34040 }
34041
34042 // r = "x^2/R mod m"; x != r
34043 function montSqrTo(x, r) {
34044 x.squareTo(r)
34045 this.reduce(r)
34046 }
34047
34048 // r = "xy/R mod m"; x,y != r
34049 function montMulTo(x, y, r) {
34050 x.multiplyTo(y, r)
34051 this.reduce(r)
34052 }
34053
34054 Montgomery.prototype.convert = montConvert
34055 Montgomery.prototype.revert = montRevert
34056 Montgomery.prototype.reduce = montReduce
34057 Montgomery.prototype.mulTo = montMulTo
34058 Montgomery.prototype.sqrTo = montSqrTo
34059
34060 // (protected) true iff this is even
34061 function bnpIsEven() {
34062 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
34063 }
34064
34065 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
34066 function bnpExp(e, z) {
34067 if (e > 0xffffffff || e < 1) return BigInteger.ONE
34068 var r = new BigInteger(),
34069 r2 = new BigInteger(),
34070 g = z.convert(this),
34071 i = nbits(e) - 1
34072 g.copyTo(r)
34073 while (--i >= 0) {
34074 z.sqrTo(r, r2)
34075 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
34076 else {
34077 var t = r
34078 r = r2
34079 r2 = t
34080 }
34081 }
34082 return z.revert(r)
34083 }
34084
34085 // (public) this^e % m, 0 <= e < 2^32
34086 function bnModPowInt(e, m) {
34087 var z
34088 if (e < 256 || m.isEven()) z = new Classic(m)
34089 else z = new Montgomery(m)
34090 return this.exp(e, z)
34091 }
34092
34093 // protected
34094 proto.copyTo = bnpCopyTo
34095 proto.fromInt = bnpFromInt
34096 proto.fromString = bnpFromString
34097 proto.clamp = bnpClamp
34098 proto.dlShiftTo = bnpDLShiftTo
34099 proto.drShiftTo = bnpDRShiftTo
34100 proto.lShiftTo = bnpLShiftTo
34101 proto.rShiftTo = bnpRShiftTo
34102 proto.subTo = bnpSubTo
34103 proto.multiplyTo = bnpMultiplyTo
34104 proto.squareTo = bnpSquareTo
34105 proto.divRemTo = bnpDivRemTo
34106 proto.invDigit = bnpInvDigit
34107 proto.isEven = bnpIsEven
34108 proto.exp = bnpExp
34109
34110 // public
34111 proto.toString = bnToString
34112 proto.negate = bnNegate
34113 proto.abs = bnAbs
34114 proto.compareTo = bnCompareTo
34115 proto.bitLength = bnBitLength
34116 proto.byteLength = bnByteLength
34117 proto.mod = bnMod
34118 proto.modPowInt = bnModPowInt
34119
34120 // (public)
34121 function bnClone() {
34122 var r = new BigInteger()
34123 this.copyTo(r)
34124 return r
34125 }
34126
34127 // (public) return value as integer
34128 function bnIntValue() {
34129 if (this.s < 0) {
34130 if (this.t == 1) return this[0] - this.DV
34131 else if (this.t == 0) return -1
34132 } else if (this.t == 1) return this[0]
34133 else if (this.t == 0) return 0
34134 // assumes 16 < DB < 32
34135 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
34136 }
34137
34138 // (public) return value as byte
34139 function bnByteValue() {
34140 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
34141 }
34142
34143 // (public) return value as short (assumes DB>=16)
34144 function bnShortValue() {
34145 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
34146 }
34147
34148 // (protected) return x s.t. r^x < DV
34149 function bnpChunkSize(r) {
34150 return Math.floor(Math.LN2 * this.DB / Math.log(r))
34151 }
34152
34153 // (public) 0 if this == 0, 1 if this > 0
34154 function bnSigNum() {
34155 if (this.s < 0) return -1
34156 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
34157 else return 1
34158 }
34159
34160 // (protected) convert to radix string
34161 function bnpToRadix(b) {
34162 if (b == null) b = 10
34163 if (this.signum() == 0 || b < 2 || b > 36) return "0"
34164 var cs = this.chunkSize(b)
34165 var a = Math.pow(b, cs)
34166 var d = nbv(a),
34167 y = new BigInteger(),
34168 z = new BigInteger(),
34169 r = ""
34170 this.divRemTo(d, y, z)
34171 while (y.signum() > 0) {
34172 r = (a + z.intValue())
34173 .toString(b)
34174 .substr(1) + r
34175 y.divRemTo(d, y, z)
34176 }
34177 return z.intValue()
34178 .toString(b) + r
34179 }
34180
34181 // (protected) convert from radix string
34182 function bnpFromRadix(s, b) {
34183 var self = this
34184 self.fromInt(0)
34185 if (b == null) b = 10
34186 var cs = self.chunkSize(b)
34187 var d = Math.pow(b, cs),
34188 mi = false,
34189 j = 0,
34190 w = 0
34191 for (var i = 0; i < s.length; ++i) {
34192 var x = intAt(s, i)
34193 if (x < 0) {
34194 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
34195 continue
34196 }
34197 w = b * w + x
34198 if (++j >= cs) {
34199 self.dMultiply(d)
34200 self.dAddOffset(w, 0)
34201 j = 0
34202 w = 0
34203 }
34204 }
34205 if (j > 0) {
34206 self.dMultiply(Math.pow(b, j))
34207 self.dAddOffset(w, 0)
34208 }
34209 if (mi) BigInteger.ZERO.subTo(self, self)
34210 }
34211
34212 // (protected) alternate constructor
34213 function bnpFromNumber(a, b, c) {
34214 var self = this
34215 if ("number" == typeof b) {
34216 // new BigInteger(int,int,RNG)
34217 if (a < 2) self.fromInt(1)
34218 else {
34219 self.fromNumber(a, c)
34220 if (!self.testBit(a - 1)) // force MSB set
34221 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
34222 if (self.isEven()) self.dAddOffset(1, 0); // force odd
34223 while (!self.isProbablePrime(b)) {
34224 self.dAddOffset(2, 0)
34225 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
34226 }
34227 }
34228 } else {
34229 // new BigInteger(int,RNG)
34230 var x = new Array(),
34231 t = a & 7
34232 x.length = (a >> 3) + 1
34233 b.nextBytes(x)
34234 if (t > 0) x[0] &= ((1 << t) - 1)
34235 else x[0] = 0
34236 self.fromString(x, 256)
34237 }
34238 }
34239
34240 // (public) convert to bigendian byte array
34241 function bnToByteArray() {
34242 var self = this
34243 var i = self.t,
34244 r = new Array()
34245 r[0] = self.s
34246 var p = self.DB - (i * self.DB) % 8,
34247 d, k = 0
34248 if (i-- > 0) {
34249 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
34250 r[k++] = d | (self.s << (self.DB - p))
34251 while (i >= 0) {
34252 if (p < 8) {
34253 d = (self[i] & ((1 << p) - 1)) << (8 - p)
34254 d |= self[--i] >> (p += self.DB - 8)
34255 } else {
34256 d = (self[i] >> (p -= 8)) & 0xff
34257 if (p <= 0) {
34258 p += self.DB
34259 --i
34260 }
34261 }
34262 if ((d & 0x80) != 0) d |= -256
34263 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
34264 if (k > 0 || d != self.s) r[k++] = d
34265 }
34266 }
34267 return r
34268 }
34269
34270 function bnEquals(a) {
34271 return (this.compareTo(a) == 0)
34272 }
34273
34274 function bnMin(a) {
34275 return (this.compareTo(a) < 0) ? this : a
34276 }
34277
34278 function bnMax(a) {
34279 return (this.compareTo(a) > 0) ? this : a
34280 }
34281
34282 // (protected) r = this op a (bitwise)
34283 function bnpBitwiseTo(a, op, r) {
34284 var self = this
34285 var i, f, m = Math.min(a.t, self.t)
34286 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
34287 if (a.t < self.t) {
34288 f = a.s & self.DM
34289 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
34290 r.t = self.t
34291 } else {
34292 f = self.s & self.DM
34293 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
34294 r.t = a.t
34295 }
34296 r.s = op(self.s, a.s)
34297 r.clamp()
34298 }
34299
34300 // (public) this & a
34301 function op_and(x, y) {
34302 return x & y
34303 }
34304
34305 function bnAnd(a) {
34306 var r = new BigInteger()
34307 this.bitwiseTo(a, op_and, r)
34308 return r
34309 }
34310
34311 // (public) this | a
34312 function op_or(x, y) {
34313 return x | y
34314 }
34315
34316 function bnOr(a) {
34317 var r = new BigInteger()
34318 this.bitwiseTo(a, op_or, r)
34319 return r
34320 }
34321
34322 // (public) this ^ a
34323 function op_xor(x, y) {
34324 return x ^ y
34325 }
34326
34327 function bnXor(a) {
34328 var r = new BigInteger()
34329 this.bitwiseTo(a, op_xor, r)
34330 return r
34331 }
34332
34333 // (public) this & ~a
34334 function op_andnot(x, y) {
34335 return x & ~y
34336 }
34337
34338 function bnAndNot(a) {
34339 var r = new BigInteger()
34340 this.bitwiseTo(a, op_andnot, r)
34341 return r
34342 }
34343
34344 // (public) ~this
34345 function bnNot() {
34346 var r = new BigInteger()
34347 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
34348 r.t = this.t
34349 r.s = ~this.s
34350 return r
34351 }
34352
34353 // (public) this << n
34354 function bnShiftLeft(n) {
34355 var r = new BigInteger()
34356 if (n < 0) this.rShiftTo(-n, r)
34357 else this.lShiftTo(n, r)
34358 return r
34359 }
34360
34361 // (public) this >> n
34362 function bnShiftRight(n) {
34363 var r = new BigInteger()
34364 if (n < 0) this.lShiftTo(-n, r)
34365 else this.rShiftTo(n, r)
34366 return r
34367 }
34368
34369 // return index of lowest 1-bit in x, x < 2^31
34370 function lbit(x) {
34371 if (x == 0) return -1
34372 var r = 0
34373 if ((x & 0xffff) == 0) {
34374 x >>= 16
34375 r += 16
34376 }
34377 if ((x & 0xff) == 0) {
34378 x >>= 8
34379 r += 8
34380 }
34381 if ((x & 0xf) == 0) {
34382 x >>= 4
34383 r += 4
34384 }
34385 if ((x & 3) == 0) {
34386 x >>= 2
34387 r += 2
34388 }
34389 if ((x & 1) == 0)++r
34390 return r
34391 }
34392
34393 // (public) returns index of lowest 1-bit (or -1 if none)
34394 function bnGetLowestSetBit() {
34395 for (var i = 0; i < this.t; ++i)
34396 if (this[i] != 0) return i * this.DB + lbit(this[i])
34397 if (this.s < 0) return this.t * this.DB
34398 return -1
34399 }
34400
34401 // return number of 1 bits in x
34402 function cbit(x) {
34403 var r = 0
34404 while (x != 0) {
34405 x &= x - 1
34406 ++r
34407 }
34408 return r
34409 }
34410
34411 // (public) return number of set bits
34412 function bnBitCount() {
34413 var r = 0,
34414 x = this.s & this.DM
34415 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
34416 return r
34417 }
34418
34419 // (public) true iff nth bit is set
34420 function bnTestBit(n) {
34421 var j = Math.floor(n / this.DB)
34422 if (j >= this.t) return (this.s != 0)
34423 return ((this[j] & (1 << (n % this.DB))) != 0)
34424 }
34425
34426 // (protected) this op (1<<n)
34427 function bnpChangeBit(n, op) {
34428 var r = BigInteger.ONE.shiftLeft(n)
34429 this.bitwiseTo(r, op, r)
34430 return r
34431 }
34432
34433 // (public) this | (1<<n)
34434 function bnSetBit(n) {
34435 return this.changeBit(n, op_or)
34436 }
34437
34438 // (public) this & ~(1<<n)
34439 function bnClearBit(n) {
34440 return this.changeBit(n, op_andnot)
34441 }
34442
34443 // (public) this ^ (1<<n)
34444 function bnFlipBit(n) {
34445 return this.changeBit(n, op_xor)
34446 }
34447
34448 // (protected) r = this + a
34449 function bnpAddTo(a, r) {
34450 var self = this
34451
34452 var i = 0,
34453 c = 0,
34454 m = Math.min(a.t, self.t)
34455 while (i < m) {
34456 c += self[i] + a[i]
34457 r[i++] = c & self.DM
34458 c >>= self.DB
34459 }
34460 if (a.t < self.t) {
34461 c += a.s
34462 while (i < self.t) {
34463 c += self[i]
34464 r[i++] = c & self.DM
34465 c >>= self.DB
34466 }
34467 c += self.s
34468 } else {
34469 c += self.s
34470 while (i < a.t) {
34471 c += a[i]
34472 r[i++] = c & self.DM
34473 c >>= self.DB
34474 }
34475 c += a.s
34476 }
34477 r.s = (c < 0) ? -1 : 0
34478 if (c > 0) r[i++] = c
34479 else if (c < -1) r[i++] = self.DV + c
34480 r.t = i
34481 r.clamp()
34482 }
34483
34484 // (public) this + a
34485 function bnAdd(a) {
34486 var r = new BigInteger()
34487 this.addTo(a, r)
34488 return r
34489 }
34490
34491 // (public) this - a
34492 function bnSubtract(a) {
34493 var r = new BigInteger()
34494 this.subTo(a, r)
34495 return r
34496 }
34497
34498 // (public) this * a
34499 function bnMultiply(a) {
34500 var r = new BigInteger()
34501 this.multiplyTo(a, r)
34502 return r
34503 }
34504
34505 // (public) this^2
34506 function bnSquare() {
34507 var r = new BigInteger()
34508 this.squareTo(r)
34509 return r
34510 }
34511
34512 // (public) this / a
34513 function bnDivide(a) {
34514 var r = new BigInteger()
34515 this.divRemTo(a, r, null)
34516 return r
34517 }
34518
34519 // (public) this % a
34520 function bnRemainder(a) {
34521 var r = new BigInteger()
34522 this.divRemTo(a, null, r)
34523 return r
34524 }
34525
34526 // (public) [this/a,this%a]
34527 function bnDivideAndRemainder(a) {
34528 var q = new BigInteger(),
34529 r = new BigInteger()
34530 this.divRemTo(a, q, r)
34531 return new Array(q, r)
34532 }
34533
34534 // (protected) this *= n, this >= 0, 1 < n < DV
34535 function bnpDMultiply(n) {
34536 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
34537 ++this.t
34538 this.clamp()
34539 }
34540
34541 // (protected) this += n << w words, this >= 0
34542 function bnpDAddOffset(n, w) {
34543 if (n == 0) return
34544 while (this.t <= w) this[this.t++] = 0
34545 this[w] += n
34546 while (this[w] >= this.DV) {
34547 this[w] -= this.DV
34548 if (++w >= this.t) this[this.t++] = 0
34549 ++this[w]
34550 }
34551 }
34552
34553 // A "null" reducer
34554 function NullExp() {}
34555
34556 function nNop(x) {
34557 return x
34558 }
34559
34560 function nMulTo(x, y, r) {
34561 x.multiplyTo(y, r)
34562 }
34563
34564 function nSqrTo(x, r) {
34565 x.squareTo(r)
34566 }
34567
34568 NullExp.prototype.convert = nNop
34569 NullExp.prototype.revert = nNop
34570 NullExp.prototype.mulTo = nMulTo
34571 NullExp.prototype.sqrTo = nSqrTo
34572
34573 // (public) this^e
34574 function bnPow(e) {
34575 return this.exp(e, new NullExp())
34576 }
34577
34578 // (protected) r = lower n words of "this * a", a.t <= n
34579 // "this" should be the larger one if appropriate.
34580 function bnpMultiplyLowerTo(a, n, r) {
34581 var i = Math.min(this.t + a.t, n)
34582 r.s = 0; // assumes a,this >= 0
34583 r.t = i
34584 while (i > 0) r[--i] = 0
34585 var j
34586 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
34587 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
34588 r.clamp()
34589 }
34590
34591 // (protected) r = "this * a" without lower n words, n > 0
34592 // "this" should be the larger one if appropriate.
34593 function bnpMultiplyUpperTo(a, n, r) {
34594 --n
34595 var i = r.t = this.t + a.t - n
34596 r.s = 0; // assumes a,this >= 0
34597 while (--i >= 0) r[i] = 0
34598 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
34599 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
34600 r.clamp()
34601 r.drShiftTo(1, r)
34602 }
34603
34604 // Barrett modular reduction
34605 function Barrett(m) {
34606 // setup Barrett
34607 this.r2 = new BigInteger()
34608 this.q3 = new BigInteger()
34609 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
34610 this.mu = this.r2.divide(m)
34611 this.m = m
34612 }
34613
34614 function barrettConvert(x) {
34615 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
34616 else if (x.compareTo(this.m) < 0) return x
34617 else {
34618 var r = new BigInteger()
34619 x.copyTo(r)
34620 this.reduce(r)
34621 return r
34622 }
34623 }
34624
34625 function barrettRevert(x) {
34626 return x
34627 }
34628
34629 // x = x mod m (HAC 14.42)
34630 function barrettReduce(x) {
34631 var self = this
34632 x.drShiftTo(self.m.t - 1, self.r2)
34633 if (x.t > self.m.t + 1) {
34634 x.t = self.m.t + 1
34635 x.clamp()
34636 }
34637 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
34638 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
34639 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
34640 x.subTo(self.r2, x)
34641 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
34642 }
34643
34644 // r = x^2 mod m; x != r
34645 function barrettSqrTo(x, r) {
34646 x.squareTo(r)
34647 this.reduce(r)
34648 }
34649
34650 // r = x*y mod m; x,y != r
34651 function barrettMulTo(x, y, r) {
34652 x.multiplyTo(y, r)
34653 this.reduce(r)
34654 }
34655
34656 Barrett.prototype.convert = barrettConvert
34657 Barrett.prototype.revert = barrettRevert
34658 Barrett.prototype.reduce = barrettReduce
34659 Barrett.prototype.mulTo = barrettMulTo
34660 Barrett.prototype.sqrTo = barrettSqrTo
34661
34662 // (public) this^e % m (HAC 14.85)
34663 function bnModPow(e, m) {
34664 var i = e.bitLength(),
34665 k, r = nbv(1),
34666 z
34667 if (i <= 0) return r
34668 else if (i < 18) k = 1
34669 else if (i < 48) k = 3
34670 else if (i < 144) k = 4
34671 else if (i < 768) k = 5
34672 else k = 6
34673 if (i < 8)
34674 z = new Classic(m)
34675 else if (m.isEven())
34676 z = new Barrett(m)
34677 else
34678 z = new Montgomery(m)
34679
34680 // precomputation
34681 var g = new Array(),
34682 n = 3,
34683 k1 = k - 1,
34684 km = (1 << k) - 1
34685 g[1] = z.convert(this)
34686 if (k > 1) {
34687 var g2 = new BigInteger()
34688 z.sqrTo(g[1], g2)
34689 while (n <= km) {
34690 g[n] = new BigInteger()
34691 z.mulTo(g2, g[n - 2], g[n])
34692 n += 2
34693 }
34694 }
34695
34696 var j = e.t - 1,
34697 w, is1 = true,
34698 r2 = new BigInteger(),
34699 t
34700 i = nbits(e[j]) - 1
34701 while (j >= 0) {
34702 if (i >= k1) w = (e[j] >> (i - k1)) & km
34703 else {
34704 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
34705 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
34706 }
34707
34708 n = k
34709 while ((w & 1) == 0) {
34710 w >>= 1
34711 --n
34712 }
34713 if ((i -= n) < 0) {
34714 i += this.DB
34715 --j
34716 }
34717 if (is1) { // ret == 1, don't bother squaring or multiplying it
34718 g[w].copyTo(r)
34719 is1 = false
34720 } else {
34721 while (n > 1) {
34722 z.sqrTo(r, r2)
34723 z.sqrTo(r2, r)
34724 n -= 2
34725 }
34726 if (n > 0) z.sqrTo(r, r2)
34727 else {
34728 t = r
34729 r = r2
34730 r2 = t
34731 }
34732 z.mulTo(r2, g[w], r)
34733 }
34734
34735 while (j >= 0 && (e[j] & (1 << i)) == 0) {
34736 z.sqrTo(r, r2)
34737 t = r
34738 r = r2
34739 r2 = t
34740 if (--i < 0) {
34741 i = this.DB - 1
34742 --j
34743 }
34744 }
34745 }
34746 return z.revert(r)
34747 }
34748
34749 // (public) gcd(this,a) (HAC 14.54)
34750 function bnGCD(a) {
34751 var x = (this.s < 0) ? this.negate() : this.clone()
34752 var y = (a.s < 0) ? a.negate() : a.clone()
34753 if (x.compareTo(y) < 0) {
34754 var t = x
34755 x = y
34756 y = t
34757 }
34758 var i = x.getLowestSetBit(),
34759 g = y.getLowestSetBit()
34760 if (g < 0) return x
34761 if (i < g) g = i
34762 if (g > 0) {
34763 x.rShiftTo(g, x)
34764 y.rShiftTo(g, y)
34765 }
34766 while (x.signum() > 0) {
34767 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
34768 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
34769 if (x.compareTo(y) >= 0) {
34770 x.subTo(y, x)
34771 x.rShiftTo(1, x)
34772 } else {
34773 y.subTo(x, y)
34774 y.rShiftTo(1, y)
34775 }
34776 }
34777 if (g > 0) y.lShiftTo(g, y)
34778 return y
34779 }
34780
34781 // (protected) this % n, n < 2^26
34782 function bnpModInt(n) {
34783 if (n <= 0) return 0
34784 var d = this.DV % n,
34785 r = (this.s < 0) ? n - 1 : 0
34786 if (this.t > 0)
34787 if (d == 0) r = this[0] % n
34788 else
34789 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
34790 return r
34791 }
34792
34793 // (public) 1/this % m (HAC 14.61)
34794 function bnModInverse(m) {
34795 var ac = m.isEven()
34796 if (this.signum() === 0) throw new Error('division by zero')
34797 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
34798 var u = m.clone(),
34799 v = this.clone()
34800 var a = nbv(1),
34801 b = nbv(0),
34802 c = nbv(0),
34803 d = nbv(1)
34804 while (u.signum() != 0) {
34805 while (u.isEven()) {
34806 u.rShiftTo(1, u)
34807 if (ac) {
34808 if (!a.isEven() || !b.isEven()) {
34809 a.addTo(this, a)
34810 b.subTo(m, b)
34811 }
34812 a.rShiftTo(1, a)
34813 } else if (!b.isEven()) b.subTo(m, b)
34814 b.rShiftTo(1, b)
34815 }
34816 while (v.isEven()) {
34817 v.rShiftTo(1, v)
34818 if (ac) {
34819 if (!c.isEven() || !d.isEven()) {
34820 c.addTo(this, c)
34821 d.subTo(m, d)
34822 }
34823 c.rShiftTo(1, c)
34824 } else if (!d.isEven()) d.subTo(m, d)
34825 d.rShiftTo(1, d)
34826 }
34827 if (u.compareTo(v) >= 0) {
34828 u.subTo(v, u)
34829 if (ac) a.subTo(c, a)
34830 b.subTo(d, b)
34831 } else {
34832 v.subTo(u, v)
34833 if (ac) c.subTo(a, c)
34834 d.subTo(b, d)
34835 }
34836 }
34837 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
34838 while (d.compareTo(m) >= 0) d.subTo(m, d)
34839 while (d.signum() < 0) d.addTo(m, d)
34840 return d
34841 }
34842
34843 var lowprimes = [
34844 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
34845 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
34846 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
34847 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
34848 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
34849 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
34850 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
34851 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
34852 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
34853 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
34854 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
34855 ]
34856
34857 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
34858
34859 // (public) test primality with certainty >= 1-.5^t
34860 function bnIsProbablePrime(t) {
34861 var i, x = this.abs()
34862 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
34863 for (i = 0; i < lowprimes.length; ++i)
34864 if (x[0] == lowprimes[i]) return true
34865 return false
34866 }
34867 if (x.isEven()) return false
34868 i = 1
34869 while (i < lowprimes.length) {
34870 var m = lowprimes[i],
34871 j = i + 1
34872 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
34873 m = x.modInt(m)
34874 while (i < j) if (m % lowprimes[i++] == 0) return false
34875 }
34876 return x.millerRabin(t)
34877 }
34878
34879 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
34880 function bnpMillerRabin(t) {
34881 var n1 = this.subtract(BigInteger.ONE)
34882 var k = n1.getLowestSetBit()
34883 if (k <= 0) return false
34884 var r = n1.shiftRight(k)
34885 t = (t + 1) >> 1
34886 if (t > lowprimes.length) t = lowprimes.length
34887 var a = new BigInteger(null)
34888 var j, bases = []
34889 for (var i = 0; i < t; ++i) {
34890 for (;;) {
34891 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
34892 if (bases.indexOf(j) == -1) break
34893 }
34894 bases.push(j)
34895 a.fromInt(j)
34896 var y = a.modPow(r, this)
34897 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
34898 var j = 1
34899 while (j++ < k && y.compareTo(n1) != 0) {
34900 y = y.modPowInt(2, this)
34901 if (y.compareTo(BigInteger.ONE) == 0) return false
34902 }
34903 if (y.compareTo(n1) != 0) return false
34904 }
34905 }
34906 return true
34907 }
34908
34909 // protected
34910 proto.chunkSize = bnpChunkSize
34911 proto.toRadix = bnpToRadix
34912 proto.fromRadix = bnpFromRadix
34913 proto.fromNumber = bnpFromNumber
34914 proto.bitwiseTo = bnpBitwiseTo
34915 proto.changeBit = bnpChangeBit
34916 proto.addTo = bnpAddTo
34917 proto.dMultiply = bnpDMultiply
34918 proto.dAddOffset = bnpDAddOffset
34919 proto.multiplyLowerTo = bnpMultiplyLowerTo
34920 proto.multiplyUpperTo = bnpMultiplyUpperTo
34921 proto.modInt = bnpModInt
34922 proto.millerRabin = bnpMillerRabin
34923
34924 // public
34925 proto.clone = bnClone
34926 proto.intValue = bnIntValue
34927 proto.byteValue = bnByteValue
34928 proto.shortValue = bnShortValue
34929 proto.signum = bnSigNum
34930 proto.toByteArray = bnToByteArray
34931 proto.equals = bnEquals
34932 proto.min = bnMin
34933 proto.max = bnMax
34934 proto.and = bnAnd
34935 proto.or = bnOr
34936 proto.xor = bnXor
34937 proto.andNot = bnAndNot
34938 proto.not = bnNot
34939 proto.shiftLeft = bnShiftLeft
34940 proto.shiftRight = bnShiftRight
34941 proto.getLowestSetBit = bnGetLowestSetBit
34942 proto.bitCount = bnBitCount
34943 proto.testBit = bnTestBit
34944 proto.setBit = bnSetBit
34945 proto.clearBit = bnClearBit
34946 proto.flipBit = bnFlipBit
34947 proto.add = bnAdd
34948 proto.subtract = bnSubtract
34949 proto.multiply = bnMultiply
34950 proto.divide = bnDivide
34951 proto.remainder = bnRemainder
34952 proto.divideAndRemainder = bnDivideAndRemainder
34953 proto.modPow = bnModPow
34954 proto.modInverse = bnModInverse
34955 proto.pow = bnPow
34956 proto.gcd = bnGCD
34957 proto.isProbablePrime = bnIsProbablePrime
34958
34959 // JSBN-specific extension
34960 proto.square = bnSquare
34961
34962 // constants
34963 BigInteger.ZERO = nbv(0)
34964 BigInteger.ONE = nbv(1)
34965 BigInteger.valueOf = nbv
34966
34967 module.exports = BigInteger
34968
34969 },{"../package.json":40}],38:[function(require,module,exports){
34970 (function (Buffer){
34971 // FIXME: Kind of a weird way to throw exceptions, consider removing
34972 var assert = require('assert')
34973 var BigInteger = require('./bigi')
34974
34975 /**
34976 * Turns a byte array into a big integer.
34977 *
34978 * This function will interpret a byte array as a big integer in big
34979 * endian notation.
34980 */
34981 BigInteger.fromByteArrayUnsigned = function(byteArray) {
34982 // BigInteger expects a DER integer conformant byte array
34983 if (byteArray[0] & 0x80) {
34984 return new BigInteger([0].concat(byteArray))
34985 }
34986
34987 return new BigInteger(byteArray)
34988 }
34989
34990 /**
34991 * Returns a byte array representation of the big integer.
34992 *
34993 * This returns the absolute of the contained value in big endian
34994 * form. A value of zero results in an empty array.
34995 */
34996 BigInteger.prototype.toByteArrayUnsigned = function() {
34997 var byteArray = this.toByteArray()
34998 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
34999 }
35000
35001 BigInteger.fromDERInteger = function(byteArray) {
35002 return new BigInteger(byteArray)
35003 }
35004
35005 /*
35006 * Converts BigInteger to a DER integer representation.
35007 *
35008 * The format for this value uses the most significant bit as a sign
35009 * bit. If the most significant bit is already set and the integer is
35010 * positive, a 0x00 is prepended.
35011 *
35012 * Examples:
35013 *
35014 * 0 => 0x00
35015 * 1 => 0x01
35016 * -1 => 0xff
35017 * 127 => 0x7f
35018 * -127 => 0x81
35019 * 128 => 0x0080
35020 * -128 => 0x80
35021 * 255 => 0x00ff
35022 * -255 => 0xff01
35023 * 16300 => 0x3fac
35024 * -16300 => 0xc054
35025 * 62300 => 0x00f35c
35026 * -62300 => 0xff0ca4
35027 */
35028 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
35029
35030 BigInteger.fromBuffer = function(buffer) {
35031 // BigInteger expects a DER integer conformant byte array
35032 if (buffer[0] & 0x80) {
35033 var byteArray = Array.prototype.slice.call(buffer)
35034
35035 return new BigInteger([0].concat(byteArray))
35036 }
35037
35038 return new BigInteger(buffer)
35039 }
35040
35041 BigInteger.fromHex = function(hex) {
35042 if (hex === '') return BigInteger.ZERO
35043
35044 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
35045 assert.equal(hex.length % 2, 0, 'Incomplete hex')
35046 return new BigInteger(hex, 16)
35047 }
35048
35049 BigInteger.prototype.toBuffer = function(size) {
35050 var byteArray = this.toByteArrayUnsigned()
35051 var zeros = []
35052
35053 var padding = size - byteArray.length
35054 while (zeros.length < padding) zeros.push(0)
35055
35056 return new Buffer(zeros.concat(byteArray))
35057 }
35058
35059 BigInteger.prototype.toHex = function(size) {
35060 return this.toBuffer(size).toString('hex')
35061 }
35062
35063 }).call(this,require("buffer").Buffer)
35064 },{"./bigi":37,"assert":1,"buffer":5}],39:[function(require,module,exports){
35065 var BigInteger = require('./bigi')
35066
35067 //addons
35068 require('./convert')
35069
35070 module.exports = BigInteger
35071 },{"./bigi":37,"./convert":38}],40:[function(require,module,exports){
35072 module.exports={
35073 "_args": [
35074 [
35075 "bigi",
35076 "/home/ian/git/bitcoin/bitcoinjs-lib-browser"
35077 ]
35078 ],
35079 "_from": "bigi@latest",
35080 "_id": "bigi@1.4.2",
35081 "_inCache": true,
35082 "_installable": true,
35083 "_location": "/bigi",
35084 "_nodeVersion": "6.1.0",
35085 "_npmOperationalInternal": {
35086 "host": "packages-12-west.internal.npmjs.com",
35087 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
35088 },
35089 "_npmUser": {
35090 "email": "jprichardson@gmail.com",
35091 "name": "jprichardson"
35092 },
35093 "_npmVersion": "3.8.6",
35094 "_phantomChildren": {},
35095 "_requested": {
35096 "name": "bigi",
35097 "raw": "bigi",
35098 "rawSpec": "",
35099 "scope": null,
35100 "spec": "latest",
35101 "type": "tag"
35102 },
35103 "_requiredBy": [
35104 "#USER",
35105 "/bitcoinjs-lib",
35106 "/ecurve"
35107 ],
35108 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
35109 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
35110 "_shrinkwrap": null,
35111 "_spec": "bigi",
35112 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser",
35113 "bugs": {
35114 "url": "https://github.com/cryptocoinjs/bigi/issues"
35115 },
35116 "dependencies": {},
35117 "description": "Big integers.",
35118 "devDependencies": {
35119 "coveralls": "^2.11.2",
35120 "istanbul": "^0.3.5",
35121 "jshint": "^2.5.1",
35122 "mocha": "^2.1.0",
35123 "mochify": "^2.1.0"
35124 },
35125 "directories": {},
35126 "dist": {
35127 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
35128 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
35129 },
35130 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
35131 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
35132 "keywords": [
35133 "cryptography",
35134 "math",
35135 "bitcoin",
35136 "arbitrary",
35137 "precision",
35138 "arithmetic",
35139 "big",
35140 "integer",
35141 "int",
35142 "number",
35143 "biginteger",
35144 "bigint",
35145 "bignumber",
35146 "decimal",
35147 "float"
35148 ],
35149 "main": "./lib/index.js",
35150 "maintainers": [
35151 {
35152 "email": "boydb@midnightdesign.ws",
35153 "name": "midnightlightning"
35154 },
35155 {
35156 "email": "sidazhang89@gmail.com",
35157 "name": "sidazhang"
35158 },
35159 {
35160 "email": "npm@shesek.info",
35161 "name": "nadav"
35162 },
35163 {
35164 "email": "jprichardson@gmail.com",
35165 "name": "jprichardson"
35166 }
35167 ],
35168 "name": "bigi",
35169 "optionalDependencies": {},
35170 "readme": "ERROR: No README data found!",
35171 "repository": {
35172 "type": "git",
35173 "url": "git+https://github.com/cryptocoinjs/bigi.git"
35174 },
35175 "scripts": {
35176 "browser-test": "mochify --wd -R spec",
35177 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
35178 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
35179 "jshint": "jshint --config jshint.json lib/*.js ; true",
35180 "test": "_mocha -- test/*.js",
35181 "unit": "mocha"
35182 },
35183 "testling": {
35184 "browsers": [
35185 "ie/9..latest",
35186 "firefox/latest",
35187 "chrome/latest",
35188 "safari/6.0..latest",
35189 "iphone/6.0..latest",
35190 "android-browser/4.2..latest"
35191 ],
35192 "files": "test/*.js",
35193 "harness": "mocha"
35194 },
35195 "version": "1.4.2"
35196 }
35197
35198 },{}],41:[function(require,module,exports){
35199 // Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
35200 // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
35201 // NOTE: SIGHASH byte ignored AND restricted, truncate before use
35202
35203 var Buffer = require('safe-buffer').Buffer
35204
35205 function check (buffer) {
35206 if (buffer.length < 8) return false
35207 if (buffer.length > 72) return false
35208 if (buffer[0] !== 0x30) return false
35209 if (buffer[1] !== buffer.length - 2) return false
35210 if (buffer[2] !== 0x02) return false
35211
35212 var lenR = buffer[3]
35213 if (lenR === 0) return false
35214 if (5 + lenR >= buffer.length) return false
35215 if (buffer[4 + lenR] !== 0x02) return false
35216
35217 var lenS = buffer[5 + lenR]
35218 if (lenS === 0) return false
35219 if ((6 + lenR + lenS) !== buffer.length) return false
35220
35221 if (buffer[4] & 0x80) return false
35222 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
35223
35224 if (buffer[lenR + 6] & 0x80) return false
35225 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
35226 return true
35227 }
35228
35229 function decode (buffer) {
35230 if (buffer.length < 8) throw new Error('DER sequence length is too short')
35231 if (buffer.length > 72) throw new Error('DER sequence length is too long')
35232 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
35233 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
35234 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
35235
35236 var lenR = buffer[3]
35237 if (lenR === 0) throw new Error('R length is zero')
35238 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
35239 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
35240
35241 var lenS = buffer[5 + lenR]
35242 if (lenS === 0) throw new Error('S length is zero')
35243 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
35244
35245 if (buffer[4] & 0x80) throw new Error('R value is negative')
35246 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
35247
35248 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
35249 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
35250
35251 // non-BIP66 - extract R, S values
35252 return {
35253 r: buffer.slice(4, 4 + lenR),
35254 s: buffer.slice(6 + lenR)
35255 }
35256 }
35257
35258 /*
35259 * Expects r and s to be positive DER integers.
35260 *
35261 * The DER format uses the most significant bit as a sign bit (& 0x80).
35262 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
35263 *
35264 * Examples:
35265 *
35266 * 0 => 0x00
35267 * 1 => 0x01
35268 * -1 => 0xff
35269 * 127 => 0x7f
35270 * -127 => 0x81
35271 * 128 => 0x0080
35272 * -128 => 0x80
35273 * 255 => 0x00ff
35274 * -255 => 0xff01
35275 * 16300 => 0x3fac
35276 * -16300 => 0xc054
35277 * 62300 => 0x00f35c
35278 * -62300 => 0xff0ca4
35279 */
35280 function encode (r, s) {
35281 var lenR = r.length
35282 var lenS = s.length
35283 if (lenR === 0) throw new Error('R length is zero')
35284 if (lenS === 0) throw new Error('S length is zero')
35285 if (lenR > 33) throw new Error('R length is too long')
35286 if (lenS > 33) throw new Error('S length is too long')
35287 if (r[0] & 0x80) throw new Error('R value is negative')
35288 if (s[0] & 0x80) throw new Error('S value is negative')
35289 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
35290 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
35291
35292 var signature = Buffer.allocUnsafe(6 + lenR + lenS)
35293
35294 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
35295 signature[0] = 0x30
35296 signature[1] = signature.length - 2
35297 signature[2] = 0x02
35298 signature[3] = r.length
35299 r.copy(signature, 4)
35300 signature[4 + lenR] = 0x02
35301 signature[5 + lenR] = s.length
35302 s.copy(signature, 6 + lenR)
35303
35304 return signature
35305 }
35306
35307 module.exports = {
35308 check: check,
35309 decode: decode,
35310 encode: encode
35311 }
35312
35313 },{"safe-buffer":128}],42:[function(require,module,exports){
35314 module.exports={
35315 "OP_FALSE": 0,
35316 "OP_0": 0,
35317 "OP_PUSHDATA1": 76,
35318 "OP_PUSHDATA2": 77,
35319 "OP_PUSHDATA4": 78,
35320 "OP_1NEGATE": 79,
35321 "OP_RESERVED": 80,
35322 "OP_1": 81,
35323 "OP_TRUE": 81,
35324 "OP_2": 82,
35325 "OP_3": 83,
35326 "OP_4": 84,
35327 "OP_5": 85,
35328 "OP_6": 86,
35329 "OP_7": 87,
35330 "OP_8": 88,
35331 "OP_9": 89,
35332 "OP_10": 90,
35333 "OP_11": 91,
35334 "OP_12": 92,
35335 "OP_13": 93,
35336 "OP_14": 94,
35337 "OP_15": 95,
35338 "OP_16": 96,
35339
35340 "OP_NOP": 97,
35341 "OP_VER": 98,
35342 "OP_IF": 99,
35343 "OP_NOTIF": 100,
35344 "OP_VERIF": 101,
35345 "OP_VERNOTIF": 102,
35346 "OP_ELSE": 103,
35347 "OP_ENDIF": 104,
35348 "OP_VERIFY": 105,
35349 "OP_RETURN": 106,
35350
35351 "OP_TOALTSTACK": 107,
35352 "OP_FROMALTSTACK": 108,
35353 "OP_2DROP": 109,
35354 "OP_2DUP": 110,
35355 "OP_3DUP": 111,
35356 "OP_2OVER": 112,
35357 "OP_2ROT": 113,
35358 "OP_2SWAP": 114,
35359 "OP_IFDUP": 115,
35360 "OP_DEPTH": 116,
35361 "OP_DROP": 117,
35362 "OP_DUP": 118,
35363 "OP_NIP": 119,
35364 "OP_OVER": 120,
35365 "OP_PICK": 121,
35366 "OP_ROLL": 122,
35367 "OP_ROT": 123,
35368 "OP_SWAP": 124,
35369 "OP_TUCK": 125,
35370
35371 "OP_CAT": 126,
35372 "OP_SUBSTR": 127,
35373 "OP_LEFT": 128,
35374 "OP_RIGHT": 129,
35375 "OP_SIZE": 130,
35376
35377 "OP_INVERT": 131,
35378 "OP_AND": 132,
35379 "OP_OR": 133,
35380 "OP_XOR": 134,
35381 "OP_EQUAL": 135,
35382 "OP_EQUALVERIFY": 136,
35383 "OP_RESERVED1": 137,
35384 "OP_RESERVED2": 138,
35385
35386 "OP_1ADD": 139,
35387 "OP_1SUB": 140,
35388 "OP_2MUL": 141,
35389 "OP_2DIV": 142,
35390 "OP_NEGATE": 143,
35391 "OP_ABS": 144,
35392 "OP_NOT": 145,
35393 "OP_0NOTEQUAL": 146,
35394 "OP_ADD": 147,
35395 "OP_SUB": 148,
35396 "OP_MUL": 149,
35397 "OP_DIV": 150,
35398 "OP_MOD": 151,
35399 "OP_LSHIFT": 152,
35400 "OP_RSHIFT": 153,
35401
35402 "OP_BOOLAND": 154,
35403 "OP_BOOLOR": 155,
35404 "OP_NUMEQUAL": 156,
35405 "OP_NUMEQUALVERIFY": 157,
35406 "OP_NUMNOTEQUAL": 158,
35407 "OP_LESSTHAN": 159,
35408 "OP_GREATERTHAN": 160,
35409 "OP_LESSTHANOREQUAL": 161,
35410 "OP_GREATERTHANOREQUAL": 162,
35411 "OP_MIN": 163,
35412 "OP_MAX": 164,
35413
35414 "OP_WITHIN": 165,
35415
35416 "OP_RIPEMD160": 166,
35417 "OP_SHA1": 167,
35418 "OP_SHA256": 168,
35419 "OP_HASH160": 169,
35420 "OP_HASH256": 170,
35421 "OP_CODESEPARATOR": 171,
35422 "OP_CHECKSIG": 172,
35423 "OP_CHECKSIGVERIFY": 173,
35424 "OP_CHECKMULTISIG": 174,
35425 "OP_CHECKMULTISIGVERIFY": 175,
35426
35427 "OP_NOP1": 176,
35428 "OP_NOP2": 177,
35429 "OP_CHECKLOCKTIMEVERIFY": 177,
35430
35431 "OP_NOP3": 178,
35432 "OP_NOP4": 179,
35433 "OP_NOP5": 180,
35434 "OP_NOP6": 181,
35435 "OP_NOP7": 182,
35436 "OP_NOP8": 183,
35437 "OP_NOP9": 184,
35438 "OP_NOP10": 185,
35439
35440 "OP_PUBKEYHASH": 253,
35441 "OP_PUBKEY": 254,
35442 "OP_INVALIDOPCODE": 255
35443 }
35444
35445 },{}],43:[function(require,module,exports){
35446 var OPS = require('./index.json')
35447
35448 var map = {}
35449 for (var op in OPS) {
35450 var code = OPS[op]
35451 map[code] = op
35452 }
35453
35454 module.exports = map
35455
35456 },{"./index.json":42}],44:[function(require,module,exports){
35457 var Buffer = require('safe-buffer').Buffer
35458 var bech32 = require('bech32')
35459 var bs58check = require('bs58check')
35460 var bscript = require('./script')
35461 var btemplates = require('./templates')
35462 var networks = require('./networks')
35463 var typeforce = require('typeforce')
35464 var types = require('./types')
35465
35466 function fromBase58Check (address) {
35467 var payload = bs58check.decode(address)
35468
35469 // TODO: 4.0.0, move to "toOutputScript"
35470 if (payload.length < 21) throw new TypeError(address + ' is too short')
35471 if (payload.length > 21) throw new TypeError(address + ' is too long')
35472
35473 var version = payload.readUInt8(0)
35474 var hash = payload.slice(1)
35475
35476 return { version: version, hash: hash }
35477 }
35478
35479 function fromBech32 (address) {
35480 var result = bech32.decode(address)
35481 var data = bech32.fromWords(result.words.slice(1))
35482
35483 return {
35484 version: result.words[0],
35485 prefix: result.prefix,
35486 data: Buffer.from(data)
35487 }
35488 }
35489
35490 function toBase58Check (hash, version) {
35491 typeforce(types.tuple(types.Hash160bit, types.UInt8), arguments)
35492
35493 var payload = Buffer.allocUnsafe(21)
35494 payload.writeUInt8(version, 0)
35495 hash.copy(payload, 1)
35496
35497 return bs58check.encode(payload)
35498 }
35499
35500 function toBech32 (data, version, prefix) {
35501 var words = bech32.toWords(data)
35502 words.unshift(version)
35503
35504 return bech32.encode(prefix, words)
35505 }
35506
35507 function fromOutputScript (outputScript, network) {
35508 network = network || networks.bitcoin
35509
35510 if (btemplates.pubKeyHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(3, 23), network.pubKeyHash)
35511 if (btemplates.scriptHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(2, 22), network.scriptHash)
35512 if (btemplates.witnessPubKeyHash.output.check(outputScript)) return toBech32(bscript.compile(outputScript).slice(2, 22), 0, network.bech32)
35513 if (btemplates.witnessScriptHash.output.check(outputScript)) return toBech32(bscript.compile(outputScript).slice(2, 34), 0, network.bech32)
35514
35515 throw new Error(bscript.toASM(outputScript) + ' has no matching Address')
35516 }
35517
35518 function toOutputScript (address, network) {
35519 network = network || networks.bitcoin
35520
35521 var decode
35522 try {
35523 decode = fromBase58Check(address)
35524 } catch (e) {}
35525
35526 if (decode) {
35527 if (decode.version === network.pubKeyHash) return btemplates.pubKeyHash.output.encode(decode.hash)
35528 if (decode.version === network.scriptHash) return btemplates.scriptHash.output.encode(decode.hash)
35529 } else {
35530 try {
35531 decode = fromBech32(address)
35532 } catch (e) {}
35533
35534 if (decode) {
35535 if (decode.prefix !== network.bech32) throw new Error(address + ' has an invalid prefix')
35536 if (decode.version === 0) {
35537 if (decode.data.length === 20) return btemplates.witnessPubKeyHash.output.encode(decode.data)
35538 if (decode.data.length === 32) return btemplates.witnessScriptHash.output.encode(decode.data)
35539 }
35540 }
35541 }
35542
35543 throw new Error(address + ' has no matching Script')
35544 }
35545
35546 module.exports = {
35547 fromBase58Check: fromBase58Check,
35548 fromBech32: fromBech32,
35549 fromOutputScript: fromOutputScript,
35550 toBase58Check: toBase58Check,
35551 toBech32: toBech32,
35552 toOutputScript: toOutputScript
35553 }
35554
35555 },{"./networks":53,"./script":54,"./templates":56,"./types":80,"bech32":36,"bs58check":85,"safe-buffer":128,"typeforce":139}],45:[function(require,module,exports){
35556 var Buffer = require('safe-buffer').Buffer
35557 var bcrypto = require('./crypto')
35558 var fastMerkleRoot = require('merkle-lib/fastRoot')
35559 var typeforce = require('typeforce')
35560 var types = require('./types')
35561 var varuint = require('varuint-bitcoin')
35562
35563 var Transaction = require('./transaction')
35564
35565 function Block () {
35566 this.version = 1
35567 this.prevHash = null
35568 this.merkleRoot = null
35569 this.timestamp = 0
35570 this.bits = 0
35571 this.nonce = 0
35572 }
35573
35574 Block.fromBuffer = function (buffer) {
35575 if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)')
35576
35577 var offset = 0
35578 function readSlice (n) {
35579 offset += n
35580 return buffer.slice(offset - n, offset)
35581 }
35582
35583 function readUInt32 () {
35584 var i = buffer.readUInt32LE(offset)
35585 offset += 4
35586 return i
35587 }
35588
35589 function readInt32 () {
35590 var i = buffer.readInt32LE(offset)
35591 offset += 4
35592 return i
35593 }
35594
35595 var block = new Block()
35596 block.version = readInt32()
35597 block.prevHash = readSlice(32)
35598 block.merkleRoot = readSlice(32)
35599 block.timestamp = readUInt32()
35600 block.bits = readUInt32()
35601 block.nonce = readUInt32()
35602
35603 if (buffer.length === 80) return block
35604
35605 function readVarInt () {
35606 var vi = varuint.decode(buffer, offset)
35607 offset += varuint.decode.bytes
35608 return vi
35609 }
35610
35611 function readTransaction () {
35612 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
35613 offset += tx.byteLength()
35614 return tx
35615 }
35616
35617 var nTransactions = readVarInt()
35618 block.transactions = []
35619
35620 for (var i = 0; i < nTransactions; ++i) {
35621 var tx = readTransaction()
35622 block.transactions.push(tx)
35623 }
35624
35625 return block
35626 }
35627
35628 Block.prototype.byteLength = function (headersOnly) {
35629 if (headersOnly || !this.transactions) return 80
35630
35631 return 80 + varuint.encodingLength(this.transactions.length) + this.transactions.reduce(function (a, x) {
35632 return a + x.byteLength()
35633 }, 0)
35634 }
35635
35636 Block.fromHex = function (hex) {
35637 return Block.fromBuffer(Buffer.from(hex, 'hex'))
35638 }
35639
35640 Block.prototype.getHash = function () {
35641 return bcrypto.hash256(this.toBuffer(true))
35642 }
35643
35644 Block.prototype.getId = function () {
35645 return this.getHash().reverse().toString('hex')
35646 }
35647
35648 Block.prototype.getUTCDate = function () {
35649 var date = new Date(0) // epoch
35650 date.setUTCSeconds(this.timestamp)
35651
35652 return date
35653 }
35654
35655 // TODO: buffer, offset compatibility
35656 Block.prototype.toBuffer = function (headersOnly) {
35657 var buffer = Buffer.allocUnsafe(this.byteLength(headersOnly))
35658
35659 var offset = 0
35660 function writeSlice (slice) {
35661 slice.copy(buffer, offset)
35662 offset += slice.length
35663 }
35664
35665 function writeInt32 (i) {
35666 buffer.writeInt32LE(i, offset)
35667 offset += 4
35668 }
35669 function writeUInt32 (i) {
35670 buffer.writeUInt32LE(i, offset)
35671 offset += 4
35672 }
35673
35674 writeInt32(this.version)
35675 writeSlice(this.prevHash)
35676 writeSlice(this.merkleRoot)
35677 writeUInt32(this.timestamp)
35678 writeUInt32(this.bits)
35679 writeUInt32(this.nonce)
35680
35681 if (headersOnly || !this.transactions) return buffer
35682
35683 varuint.encode(this.transactions.length, buffer, offset)
35684 offset += varuint.encode.bytes
35685
35686 this.transactions.forEach(function (tx) {
35687 var txSize = tx.byteLength() // TODO: extract from toBuffer?
35688 tx.toBuffer(buffer, offset)
35689 offset += txSize
35690 })
35691
35692 return buffer
35693 }
35694
35695 Block.prototype.toHex = function (headersOnly) {
35696 return this.toBuffer(headersOnly).toString('hex')
35697 }
35698
35699 Block.calculateTarget = function (bits) {
35700 var exponent = ((bits & 0xff000000) >> 24) - 3
35701 var mantissa = bits & 0x007fffff
35702 var target = Buffer.alloc(32, 0)
35703 target.writeUInt32BE(mantissa, 28 - exponent)
35704 return target
35705 }
35706
35707 Block.calculateMerkleRoot = function (transactions) {
35708 typeforce([{ getHash: types.Function }], transactions)
35709 if (transactions.length === 0) throw TypeError('Cannot compute merkle root for zero transactions')
35710
35711 var hashes = transactions.map(function (transaction) {
35712 return transaction.getHash()
35713 })
35714
35715 return fastMerkleRoot(hashes, bcrypto.hash256)
35716 }
35717
35718 Block.prototype.checkMerkleRoot = function () {
35719 if (!this.transactions) return false
35720
35721 var actualMerkleRoot = Block.calculateMerkleRoot(this.transactions)
35722 return this.merkleRoot.compare(actualMerkleRoot) === 0
35723 }
35724
35725 Block.prototype.checkProofOfWork = function () {
35726 var hash = this.getHash().reverse()
35727 var target = Block.calculateTarget(this.bits)
35728
35729 return hash.compare(target) <= 0
35730 }
35731
35732 module.exports = Block
35733
35734 },{"./crypto":47,"./transaction":78,"./types":80,"merkle-lib/fastRoot":122,"safe-buffer":128,"typeforce":139,"varuint-bitcoin":141}],46:[function(require,module,exports){
35735 var pushdata = require('pushdata-bitcoin')
35736 var varuint = require('varuint-bitcoin')
35737
35738 // https://github.com/feross/buffer/blob/master/index.js#L1127
35739 function verifuint (value, max) {
35740 if (typeof value !== 'number') throw new Error('cannot write a non-number as a number')
35741 if (value < 0) throw new Error('specified a negative value for writing an unsigned value')
35742 if (value > max) throw new Error('RangeError: value out of range')
35743 if (Math.floor(value) !== value) throw new Error('value has a fractional component')
35744 }
35745
35746 function readUInt64LE (buffer, offset) {
35747 var a = buffer.readUInt32LE(offset)
35748 var b = buffer.readUInt32LE(offset + 4)
35749 b *= 0x100000000
35750
35751 verifuint(b + a, 0x001fffffffffffff)
35752
35753 return b + a
35754 }
35755
35756 function writeUInt64LE (buffer, value, offset) {
35757 verifuint(value, 0x001fffffffffffff)
35758
35759 buffer.writeInt32LE(value & -1, offset)
35760 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
35761 return offset + 8
35762 }
35763
35764 // TODO: remove in 4.0.0?
35765 function readVarInt (buffer, offset) {
35766 var result = varuint.decode(buffer, offset)
35767
35768 return {
35769 number: result,
35770 size: varuint.decode.bytes
35771 }
35772 }
35773
35774 // TODO: remove in 4.0.0?
35775 function writeVarInt (buffer, number, offset) {
35776 varuint.encode(number, buffer, offset)
35777 return varuint.encode.bytes
35778 }
35779
35780 module.exports = {
35781 pushDataSize: pushdata.encodingLength,
35782 readPushDataInt: pushdata.decode,
35783 readUInt64LE: readUInt64LE,
35784 readVarInt: readVarInt,
35785 varIntBuffer: varuint.encode,
35786 varIntSize: varuint.encodingLength,
35787 writePushDataInt: pushdata.encode,
35788 writeUInt64LE: writeUInt64LE,
35789 writeVarInt: writeVarInt
35790 }
35791
35792 },{"pushdata-bitcoin":125,"varuint-bitcoin":141}],47:[function(require,module,exports){
35793 var createHash = require('create-hash')
35794
35795 function ripemd160 (buffer) {
35796 return createHash('rmd160').update(buffer).digest()
35797 }
35798
35799 function sha1 (buffer) {
35800 return createHash('sha1').update(buffer).digest()
35801 }
35802
35803 function sha256 (buffer) {
35804 return createHash('sha256').update(buffer).digest()
35805 }
35806
35807 function hash160 (buffer) {
35808 return ripemd160(sha256(buffer))
35809 }
35810
35811 function hash256 (buffer) {
35812 return sha256(sha256(buffer))
35813 }
35814
35815 module.exports = {
35816 hash160: hash160,
35817 hash256: hash256,
35818 ripemd160: ripemd160,
35819 sha1: sha1,
35820 sha256: sha256
35821 }
35822
35823 },{"create-hash":87}],48:[function(require,module,exports){
35824 var Buffer = require('safe-buffer').Buffer
35825 var createHmac = require('create-hmac')
35826 var typeforce = require('typeforce')
35827 var types = require('./types')
35828
35829 var BigInteger = require('bigi')
35830 var ECSignature = require('./ecsignature')
35831
35832 var ZERO = Buffer.alloc(1, 0)
35833 var ONE = Buffer.alloc(1, 1)
35834
35835 var ecurve = require('ecurve')
35836 var secp256k1 = ecurve.getCurveByName('secp256k1')
35837
35838 // https://tools.ietf.org/html/rfc6979#section-3.2
35839 function deterministicGenerateK (hash, x, checkSig) {
35840 typeforce(types.tuple(
35841 types.Hash256bit,
35842 types.Buffer256bit,
35843 types.Function
35844 ), arguments)
35845
35846 // Step A, ignored as hash already provided
35847 // Step B
35848 // Step C
35849 var k = Buffer.alloc(32, 0)
35850 var v = Buffer.alloc(32, 1)
35851
35852 // Step D
35853 k = createHmac('sha256', k)
35854 .update(v)
35855 .update(ZERO)
35856 .update(x)
35857 .update(hash)
35858 .digest()
35859
35860 // Step E
35861 v = createHmac('sha256', k).update(v).digest()
35862
35863 // Step F
35864 k = createHmac('sha256', k)
35865 .update(v)
35866 .update(ONE)
35867 .update(x)
35868 .update(hash)
35869 .digest()
35870
35871 // Step G
35872 v = createHmac('sha256', k).update(v).digest()
35873
35874 // Step H1/H2a, ignored as tlen === qlen (256 bit)
35875 // Step H2b
35876 v = createHmac('sha256', k).update(v).digest()
35877
35878 var T = BigInteger.fromBuffer(v)
35879
35880 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
35881 while (T.signum() <= 0 || T.compareTo(secp256k1.n) >= 0 || !checkSig(T)) {
35882 k = createHmac('sha256', k)
35883 .update(v)
35884 .update(ZERO)
35885 .digest()
35886
35887 v = createHmac('sha256', k).update(v).digest()
35888
35889 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
35890 // Step H2b again
35891 v = createHmac('sha256', k).update(v).digest()
35892 T = BigInteger.fromBuffer(v)
35893 }
35894
35895 return T
35896 }
35897
35898 var N_OVER_TWO = secp256k1.n.shiftRight(1)
35899
35900 function sign (hash, d) {
35901 typeforce(types.tuple(types.Hash256bit, types.BigInt), arguments)
35902
35903 var x = d.toBuffer(32)
35904 var e = BigInteger.fromBuffer(hash)
35905 var n = secp256k1.n
35906 var G = secp256k1.G
35907
35908 var r, s
35909 deterministicGenerateK(hash, x, function (k) {
35910 var Q = G.multiply(k)
35911
35912 if (secp256k1.isInfinity(Q)) return false
35913
35914 r = Q.affineX.mod(n)
35915 if (r.signum() === 0) return false
35916
35917 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
35918 if (s.signum() === 0) return false
35919
35920 return true
35921 })
35922
35923 // enforce low S values, see bip62: 'low s values in signatures'
35924 if (s.compareTo(N_OVER_TWO) > 0) {
35925 s = n.subtract(s)
35926 }
35927
35928 return new ECSignature(r, s)
35929 }
35930
35931 function verify (hash, signature, Q) {
35932 typeforce(types.tuple(
35933 types.Hash256bit,
35934 types.ECSignature,
35935 types.ECPoint
35936 ), arguments)
35937
35938 var n = secp256k1.n
35939 var G = secp256k1.G
35940
35941 var r = signature.r
35942 var s = signature.s
35943
35944 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
35945 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
35946 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
35947
35948 // 1.4.2 H = Hash(M), already done by the user
35949 // 1.4.3 e = H
35950 var e = BigInteger.fromBuffer(hash)
35951
35952 // Compute s^-1
35953 var sInv = s.modInverse(n)
35954
35955 // 1.4.4 Compute u1 = es^−1 mod n
35956 // u2 = rs^−1 mod n
35957 var u1 = e.multiply(sInv).mod(n)
35958 var u2 = r.multiply(sInv).mod(n)
35959
35960 // 1.4.5 Compute R = (xR, yR)
35961 // R = u1G + u2Q
35962 var R = G.multiplyTwo(u1, Q, u2)
35963
35964 // 1.4.5 (cont.) Enforce R is not at infinity
35965 if (secp256k1.isInfinity(R)) return false
35966
35967 // 1.4.6 Convert the field element R.x to an integer
35968 var xR = R.affineX
35969
35970 // 1.4.7 Set v = xR mod n
35971 var v = xR.mod(n)
35972
35973 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
35974 return v.equals(r)
35975 }
35976
35977 module.exports = {
35978 deterministicGenerateK: deterministicGenerateK,
35979 sign: sign,
35980 verify: verify,
35981
35982 // TODO: remove
35983 __curve: secp256k1
35984 }
35985
35986 },{"./ecsignature":50,"./types":80,"bigi":39,"create-hmac":90,"ecurve":94,"safe-buffer":128,"typeforce":139}],49:[function(require,module,exports){
35987 var baddress = require('./address')
35988 var bcrypto = require('./crypto')
35989 var ecdsa = require('./ecdsa')
35990 var randomBytes = require('randombytes')
35991 var typeforce = require('typeforce')
35992 var types = require('./types')
35993 var wif = require('wif')
35994
35995 var NETWORKS = require('./networks')
35996 var BigInteger = require('bigi')
35997
35998 var ecurve = require('ecurve')
35999 var secp256k1 = ecdsa.__curve
36000
36001 function ECPair (d, Q, options) {
36002 if (options) {
36003 typeforce({
36004 compressed: types.maybe(types.Boolean),
36005 network: types.maybe(types.Network)
36006 }, options)
36007 }
36008
36009 options = options || {}
36010
36011 if (d) {
36012 if (d.signum() <= 0) throw new Error('Private key must be greater than 0')
36013 if (d.compareTo(secp256k1.n) >= 0) throw new Error('Private key must be less than the curve order')
36014 if (Q) throw new TypeError('Unexpected publicKey parameter')
36015
36016 this.d = d
36017 } else {
36018 typeforce(types.ECPoint, Q)
36019
36020 this.__Q = Q
36021 }
36022
36023 this.compressed = options.compressed === undefined ? true : options.compressed
36024 this.network = options.network || NETWORKS.bitcoin
36025 }
36026
36027 Object.defineProperty(ECPair.prototype, 'Q', {
36028 get: function () {
36029 if (!this.__Q && this.d) {
36030 this.__Q = secp256k1.G.multiply(this.d)
36031 }
36032
36033 return this.__Q
36034 }
36035 })
36036
36037 ECPair.fromPublicKeyBuffer = function (buffer, network) {
36038 var Q = ecurve.Point.decodeFrom(secp256k1, buffer)
36039
36040 return new ECPair(null, Q, {
36041 compressed: Q.compressed,
36042 network: network
36043 })
36044 }
36045
36046 ECPair.fromWIF = function (string, network) {
36047 var decoded = wif.decode(string)
36048 var version = decoded.version
36049
36050 // list of networks?
36051 if (types.Array(network)) {
36052 network = network.filter(function (x) {
36053 return version === x.wif
36054 }).pop()
36055
36056 if (!network) throw new Error('Unknown network version')
36057
36058 // otherwise, assume a network object (or default to bitcoin)
36059 } else {
36060 network = network || NETWORKS.bitcoin
36061
36062 if (version !== network.wif) throw new Error('Invalid network version')
36063 }
36064
36065 var d = BigInteger.fromBuffer(decoded.privateKey)
36066
36067 return new ECPair(d, null, {
36068 compressed: decoded.compressed,
36069 network: network
36070 })
36071 }
36072
36073 ECPair.makeRandom = function (options) {
36074 options = options || {}
36075
36076 var rng = options.rng || randomBytes
36077
36078 var d
36079 do {
36080 var buffer = rng(32)
36081 typeforce(types.Buffer256bit, buffer)
36082
36083 d = BigInteger.fromBuffer(buffer)
36084 } while (d.signum() <= 0 || d.compareTo(secp256k1.n) >= 0)
36085
36086 return new ECPair(d, null, options)
36087 }
36088
36089 ECPair.prototype.getAddress = function () {
36090 return baddress.toBase58Check(bcrypto.hash160(this.getPublicKeyBuffer()), this.getNetwork().pubKeyHash)
36091 }
36092
36093 ECPair.prototype.getNetwork = function () {
36094 return this.network
36095 }
36096
36097 ECPair.prototype.getPublicKeyBuffer = function () {
36098 return this.Q.getEncoded(this.compressed)
36099 }
36100
36101 ECPair.prototype.sign = function (hash) {
36102 if (!this.d) throw new Error('Missing private key')
36103
36104 return ecdsa.sign(hash, this.d)
36105 }
36106
36107 ECPair.prototype.toWIF = function () {
36108 if (!this.d) throw new Error('Missing private key')
36109
36110 return wif.encode(this.network.wif, this.d.toBuffer(32), this.compressed)
36111 }
36112
36113 ECPair.prototype.verify = function (hash, signature) {
36114 return ecdsa.verify(hash, signature, this.Q)
36115 }
36116
36117 module.exports = ECPair
36118
36119 },{"./address":44,"./crypto":47,"./ecdsa":48,"./networks":53,"./types":80,"bigi":39,"ecurve":94,"randombytes":126,"typeforce":139,"wif":142}],50:[function(require,module,exports){
36120 (function (Buffer){
36121 var bip66 = require('bip66')
36122 var typeforce = require('typeforce')
36123 var types = require('./types')
36124
36125 var BigInteger = require('bigi')
36126
36127 function ECSignature (r, s) {
36128 typeforce(types.tuple(types.BigInt, types.BigInt), arguments)
36129
36130 this.r = r
36131 this.s = s
36132 }
36133
36134 ECSignature.parseCompact = function (buffer) {
36135 typeforce(types.BufferN(65), buffer)
36136
36137 var flagByte = buffer.readUInt8(0) - 27
36138 if (flagByte !== (flagByte & 7)) throw new Error('Invalid signature parameter')
36139
36140 var compressed = !!(flagByte & 4)
36141 var recoveryParam = flagByte & 3
36142 var signature = ECSignature.fromRSBuffer(buffer.slice(1))
36143
36144 return {
36145 compressed: compressed,
36146 i: recoveryParam,
36147 signature: signature
36148 }
36149 }
36150
36151 ECSignature.fromRSBuffer = function (buffer) {
36152 typeforce(types.BufferN(64), buffer)
36153
36154 var r = BigInteger.fromBuffer(buffer.slice(0, 32))
36155 var s = BigInteger.fromBuffer(buffer.slice(32, 64))
36156 return new ECSignature(r, s)
36157 }
36158
36159 ECSignature.fromDER = function (buffer) {
36160 var decode = bip66.decode(buffer)
36161 var r = BigInteger.fromDERInteger(decode.r)
36162 var s = BigInteger.fromDERInteger(decode.s)
36163
36164 return new ECSignature(r, s)
36165 }
36166
36167 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
36168 ECSignature.parseScriptSignature = function (buffer) {
36169 var hashType = buffer.readUInt8(buffer.length - 1)
36170 var hashTypeMod = hashType & ~0x80
36171
36172 if (hashTypeMod <= 0x00 || hashTypeMod >= 0x04) throw new Error('Invalid hashType ' + hashType)
36173
36174 return {
36175 signature: ECSignature.fromDER(buffer.slice(0, -1)),
36176 hashType: hashType
36177 }
36178 }
36179
36180 ECSignature.prototype.toCompact = function (i, compressed) {
36181 if (compressed) {
36182 i += 4
36183 }
36184
36185 i += 27
36186
36187 var buffer = Buffer.alloc(65)
36188 buffer.writeUInt8(i, 0)
36189 this.toRSBuffer(buffer, 1)
36190 return buffer
36191 }
36192
36193 ECSignature.prototype.toDER = function () {
36194 var r = Buffer.from(this.r.toDERInteger())
36195 var s = Buffer.from(this.s.toDERInteger())
36196
36197 return bip66.encode(r, s)
36198 }
36199
36200 ECSignature.prototype.toRSBuffer = function (buffer, offset) {
36201 buffer = buffer || Buffer.alloc(64)
36202 this.r.toBuffer(32).copy(buffer, offset)
36203 this.s.toBuffer(32).copy(buffer, offset + 32)
36204 return buffer
36205 }
36206
36207 ECSignature.prototype.toScriptSignature = function (hashType) {
36208 var hashTypeMod = hashType & ~0x80
36209 if (hashTypeMod <= 0 || hashTypeMod >= 4) throw new Error('Invalid hashType ' + hashType)
36210
36211 var hashTypeBuffer = Buffer.alloc(1)
36212 hashTypeBuffer.writeUInt8(hashType, 0)
36213
36214 return Buffer.concat([this.toDER(), hashTypeBuffer])
36215 }
36216
36217 module.exports = ECSignature
36218
36219 }).call(this,require("buffer").Buffer)
36220 },{"./types":80,"bigi":39,"bip66":41,"buffer":5,"typeforce":139}],51:[function(require,module,exports){
36221 var Buffer = require('safe-buffer').Buffer
36222 var base58check = require('bs58check')
36223 var bcrypto = require('./crypto')
36224 var createHmac = require('create-hmac')
36225 var typeforce = require('typeforce')
36226 var types = require('./types')
36227 var NETWORKS = require('./networks')
36228
36229 var BigInteger = require('bigi')
36230 var ECPair = require('./ecpair')
36231
36232 var ecurve = require('ecurve')
36233 var curve = ecurve.getCurveByName('secp256k1')
36234
36235 function HDNode (keyPair, chainCode) {
36236 typeforce(types.tuple('ECPair', types.Buffer256bit), arguments)
36237
36238 if (!keyPair.compressed) throw new TypeError('BIP32 only allows compressed keyPairs')
36239
36240 this.keyPair = keyPair
36241 this.chainCode = chainCode
36242 this.depth = 0
36243 this.index = 0
36244 this.parentFingerprint = 0x00000000
36245 }
36246
36247 HDNode.HIGHEST_BIT = 0x80000000
36248 HDNode.LENGTH = 78
36249 HDNode.MASTER_SECRET = Buffer.from('Bitcoin seed', 'utf8')
36250
36251 HDNode.fromSeedBuffer = function (seed, network) {
36252 typeforce(types.tuple(types.Buffer, types.maybe(types.Network)), arguments)
36253
36254 if (seed.length < 16) throw new TypeError('Seed should be at least 128 bits')
36255 if (seed.length > 64) throw new TypeError('Seed should be at most 512 bits')
36256
36257 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
36258 var IL = I.slice(0, 32)
36259 var IR = I.slice(32)
36260
36261 // In case IL is 0 or >= n, the master key is invalid
36262 // This is handled by the ECPair constructor
36263 var pIL = BigInteger.fromBuffer(IL)
36264 var keyPair = new ECPair(pIL, null, {
36265 network: network
36266 })
36267
36268 return new HDNode(keyPair, IR)
36269 }
36270
36271 HDNode.fromSeedHex = function (hex, network) {
36272 return HDNode.fromSeedBuffer(Buffer.from(hex, 'hex'), network)
36273 }
36274
36275 HDNode.fromBase58 = function (string, networks) {
36276 var buffer = base58check.decode(string)
36277 if (buffer.length !== 78) throw new Error('Invalid buffer length')
36278
36279 // 4 bytes: version bytes
36280 var version = buffer.readUInt32BE(0)
36281 var network
36282
36283 // list of networks?
36284 if (Array.isArray(networks)) {
36285 network = networks.filter(function (x) {
36286 return version === x.bip32.private ||
36287 version === x.bip32.public
36288 }).pop()
36289
36290 if (!network) throw new Error('Unknown network version')
36291
36292 // otherwise, assume a network object (or default to bitcoin)
36293 } else {
36294 network = networks || NETWORKS.bitcoin
36295 }
36296
36297 if (version !== network.bip32.private &&
36298 version !== network.bip32.public) throw new Error('Invalid network version')
36299
36300 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
36301 var depth = buffer[4]
36302
36303 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
36304 var parentFingerprint = buffer.readUInt32BE(5)
36305 if (depth === 0) {
36306 if (parentFingerprint !== 0x00000000) throw new Error('Invalid parent fingerprint')
36307 }
36308
36309 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
36310 // This is encoded in MSB order. (0x00000000 if master key)
36311 var index = buffer.readUInt32BE(9)
36312 if (depth === 0 && index !== 0) throw new Error('Invalid index')
36313
36314 // 32 bytes: the chain code
36315 var chainCode = buffer.slice(13, 45)
36316 var keyPair
36317
36318 // 33 bytes: private key data (0x00 + k)
36319 if (version === network.bip32.private) {
36320 if (buffer.readUInt8(45) !== 0x00) throw new Error('Invalid private key')
36321
36322 var d = BigInteger.fromBuffer(buffer.slice(46, 78))
36323 keyPair = new ECPair(d, null, { network: network })
36324
36325 // 33 bytes: public key data (0x02 + X or 0x03 + X)
36326 } else {
36327 var Q = ecurve.Point.decodeFrom(curve, buffer.slice(45, 78))
36328 // Q.compressed is assumed, if somehow this assumption is broken, `new HDNode` will throw
36329
36330 // Verify that the X coordinate in the public point corresponds to a point on the curve.
36331 // If not, the extended public key is invalid.
36332 curve.validate(Q)
36333
36334 keyPair = new ECPair(null, Q, { network: network })
36335 }
36336
36337 var hd = new HDNode(keyPair, chainCode)
36338 hd.depth = depth
36339 hd.index = index
36340 hd.parentFingerprint = parentFingerprint
36341
36342 return hd
36343 }
36344
36345 HDNode.prototype.getAddress = function () {
36346 return this.keyPair.getAddress()
36347 }
36348
36349 HDNode.prototype.getIdentifier = function () {
36350 return bcrypto.hash160(this.keyPair.getPublicKeyBuffer())
36351 }
36352
36353 HDNode.prototype.getFingerprint = function () {
36354 return this.getIdentifier().slice(0, 4)
36355 }
36356
36357 HDNode.prototype.getNetwork = function () {
36358 return this.keyPair.getNetwork()
36359 }
36360
36361 HDNode.prototype.getPublicKeyBuffer = function () {
36362 return this.keyPair.getPublicKeyBuffer()
36363 }
36364
36365 HDNode.prototype.neutered = function () {
36366 var neuteredKeyPair = new ECPair(null, this.keyPair.Q, {
36367 network: this.keyPair.network
36368 })
36369
36370 var neutered = new HDNode(neuteredKeyPair, this.chainCode)
36371 neutered.depth = this.depth
36372 neutered.index = this.index
36373 neutered.parentFingerprint = this.parentFingerprint
36374
36375 return neutered
36376 }
36377
36378 HDNode.prototype.sign = function (hash) {
36379 return this.keyPair.sign(hash)
36380 }
36381
36382 HDNode.prototype.verify = function (hash, signature) {
36383 return this.keyPair.verify(hash, signature)
36384 }
36385
36386 HDNode.prototype.toBase58 = function (__isPrivate) {
36387 if (__isPrivate !== undefined) throw new TypeError('Unsupported argument in 2.0.0')
36388
36389 // Version
36390 var network = this.keyPair.network
36391 var version = (!this.isNeutered()) ? network.bip32.private : network.bip32.public
36392 var buffer = Buffer.allocUnsafe(78)
36393
36394 // 4 bytes: version bytes
36395 buffer.writeUInt32BE(version, 0)
36396
36397 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
36398 buffer.writeUInt8(this.depth, 4)
36399
36400 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
36401 buffer.writeUInt32BE(this.parentFingerprint, 5)
36402
36403 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
36404 // This is encoded in big endian. (0x00000000 if master key)
36405 buffer.writeUInt32BE(this.index, 9)
36406
36407 // 32 bytes: the chain code
36408 this.chainCode.copy(buffer, 13)
36409
36410 // 33 bytes: the public key or private key data
36411 if (!this.isNeutered()) {
36412 // 0x00 + k for private keys
36413 buffer.writeUInt8(0, 45)
36414 this.keyPair.d.toBuffer(32).copy(buffer, 46)
36415
36416 // 33 bytes: the public key
36417 } else {
36418 // X9.62 encoding for public keys
36419 this.keyPair.getPublicKeyBuffer().copy(buffer, 45)
36420 }
36421
36422 return base58check.encode(buffer)
36423 }
36424
36425 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
36426 HDNode.prototype.derive = function (index) {
36427 typeforce(types.UInt32, index)
36428
36429 var isHardened = index >= HDNode.HIGHEST_BIT
36430 var data = Buffer.allocUnsafe(37)
36431
36432 // Hardened child
36433 if (isHardened) {
36434 if (this.isNeutered()) throw new TypeError('Could not derive hardened child key')
36435
36436 // data = 0x00 || ser256(kpar) || ser32(index)
36437 data[0] = 0x00
36438 this.keyPair.d.toBuffer(32).copy(data, 1)
36439 data.writeUInt32BE(index, 33)
36440
36441 // Normal child
36442 } else {
36443 // data = serP(point(kpar)) || ser32(index)
36444 // = serP(Kpar) || ser32(index)
36445 this.keyPair.getPublicKeyBuffer().copy(data, 0)
36446 data.writeUInt32BE(index, 33)
36447 }
36448
36449 var I = createHmac('sha512', this.chainCode).update(data).digest()
36450 var IL = I.slice(0, 32)
36451 var IR = I.slice(32)
36452
36453 var pIL = BigInteger.fromBuffer(IL)
36454
36455 // In case parse256(IL) >= n, proceed with the next value for i
36456 if (pIL.compareTo(curve.n) >= 0) {
36457 return this.derive(index + 1)
36458 }
36459
36460 // Private parent key -> private child key
36461 var derivedKeyPair
36462 if (!this.isNeutered()) {
36463 // ki = parse256(IL) + kpar (mod n)
36464 var ki = pIL.add(this.keyPair.d).mod(curve.n)
36465
36466 // In case ki == 0, proceed with the next value for i
36467 if (ki.signum() === 0) {
36468 return this.derive(index + 1)
36469 }
36470
36471 derivedKeyPair = new ECPair(ki, null, {
36472 network: this.keyPair.network
36473 })
36474
36475 // Public parent key -> public child key
36476 } else {
36477 // Ki = point(parse256(IL)) + Kpar
36478 // = G*IL + Kpar
36479 var Ki = curve.G.multiply(pIL).add(this.keyPair.Q)
36480
36481 // In case Ki is the point at infinity, proceed with the next value for i
36482 if (curve.isInfinity(Ki)) {
36483 return this.derive(index + 1)
36484 }
36485
36486 derivedKeyPair = new ECPair(null, Ki, {
36487 network: this.keyPair.network
36488 })
36489 }
36490
36491 var hd = new HDNode(derivedKeyPair, IR)
36492 hd.depth = this.depth + 1
36493 hd.index = index
36494 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
36495
36496 return hd
36497 }
36498
36499 HDNode.prototype.deriveHardened = function (index) {
36500 typeforce(types.UInt31, index)
36501
36502 // Only derives hardened private keys by default
36503 return this.derive(index + HDNode.HIGHEST_BIT)
36504 }
36505
36506 // Private === not neutered
36507 // Public === neutered
36508 HDNode.prototype.isNeutered = function () {
36509 return !(this.keyPair.d)
36510 }
36511
36512 HDNode.prototype.derivePath = function (path) {
36513 typeforce(types.BIP32Path, path)
36514
36515 var splitPath = path.split('/')
36516 if (splitPath[0] === 'm') {
36517 if (this.parentFingerprint) {
36518 throw new Error('Not a master node')
36519 }
36520
36521 splitPath = splitPath.slice(1)
36522 }
36523
36524 return splitPath.reduce(function (prevHd, indexStr) {
36525 var index
36526 if (indexStr.slice(-1) === "'") {
36527 index = parseInt(indexStr.slice(0, -1), 10)
36528 return prevHd.deriveHardened(index)
36529 } else {
36530 index = parseInt(indexStr, 10)
36531 return prevHd.derive(index)
36532 }
36533 }, this)
36534 }
36535
36536 module.exports = HDNode
36537
36538 },{"./crypto":47,"./ecpair":49,"./networks":53,"./types":80,"bigi":39,"bs58check":85,"create-hmac":90,"ecurve":94,"safe-buffer":128,"typeforce":139}],52:[function(require,module,exports){
36539 var script = require('./script')
36540
36541 var templates = require('./templates')
36542 for (var key in templates) {
36543 script[key] = templates[key]
36544 }
36545
36546 module.exports = {
36547 bufferutils: require('./bufferutils'), // TODO: remove in 4.0.0
36548
36549 Block: require('./block'),
36550 ECPair: require('./ecpair'),
36551 ECSignature: require('./ecsignature'),
36552 HDNode: require('./hdnode'),
36553 Transaction: require('./transaction'),
36554 TransactionBuilder: require('./transaction_builder'),
36555
36556 address: require('./address'),
36557 crypto: require('./crypto'),
36558 networks: require('./networks'),
36559 opcodes: require('bitcoin-ops'),
36560 script: script
36561 }
36562
36563 },{"./address":44,"./block":45,"./bufferutils":46,"./crypto":47,"./ecpair":49,"./ecsignature":50,"./hdnode":51,"./networks":53,"./script":54,"./templates":56,"./transaction":78,"./transaction_builder":79,"bitcoin-ops":42}],53:[function(require,module,exports){
36564 // https://en.bitcoin.it/wiki/List_of_address_prefixes
36565 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
36566
36567 module.exports = {
36568 bitcoin: {
36569 messagePrefix: '\x18Bitcoin Signed Message:\n',
36570 bech32: 'bc',
36571 bip32: {
36572 public: 0x0488b21e,
36573 private: 0x0488ade4
36574 },
36575 pubKeyHash: 0x00,
36576 scriptHash: 0x05,
36577 wif: 0x80
36578 },
36579 testnet: {
36580 messagePrefix: '\x18Bitcoin Signed Message:\n',
36581 bech32: 'tb',
36582 bip32: {
36583 public: 0x043587cf,
36584 private: 0x04358394
36585 },
36586 pubKeyHash: 0x6f,
36587 scriptHash: 0xc4,
36588 wif: 0xef
36589 },
36590 litecoin: {
36591 messagePrefix: '\x19Litecoin Signed Message:\n',
36592 bip32: {
36593 public: 0x019da462,
36594 private: 0x019d9cfe
36595 },
36596 pubKeyHash: 0x30,
36597 scriptHash: 0x32,
36598 wif: 0xb0
36599 }
36600 }
36601
36602 },{}],54:[function(require,module,exports){
36603 var Buffer = require('safe-buffer').Buffer
36604 var bip66 = require('bip66')
36605 var pushdata = require('pushdata-bitcoin')
36606 var typeforce = require('typeforce')
36607 var types = require('./types')
36608 var scriptNumber = require('./script_number')
36609
36610 var OPS = require('bitcoin-ops')
36611 var REVERSE_OPS = require('bitcoin-ops/map')
36612 var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
36613
36614 function isOPInt (value) {
36615 return types.Number(value) &&
36616 ((value === OPS.OP_0) ||
36617 (value >= OPS.OP_1 && value <= OPS.OP_16) ||
36618 (value === OPS.OP_1NEGATE))
36619 }
36620
36621 function isPushOnlyChunk (value) {
36622 return types.Buffer(value) || isOPInt(value)
36623 }
36624
36625 function isPushOnly (value) {
36626 return types.Array(value) && value.every(isPushOnlyChunk)
36627 }
36628
36629 function asMinimalOP (buffer) {
36630 if (buffer.length === 0) return OPS.OP_0
36631 if (buffer.length !== 1) return
36632 if (buffer[0] >= 1 && buffer[0] <= 16) return OP_INT_BASE + buffer[0]
36633 if (buffer[0] === 0x81) return OPS.OP_1NEGATE
36634 }
36635
36636 function compile (chunks) {
36637 // TODO: remove me
36638 if (Buffer.isBuffer(chunks)) return chunks
36639
36640 typeforce(types.Array, chunks)
36641
36642 var bufferSize = chunks.reduce(function (accum, chunk) {
36643 // data chunk
36644 if (Buffer.isBuffer(chunk)) {
36645 // adhere to BIP62.3, minimal push policy
36646 if (chunk.length === 1 && asMinimalOP(chunk) !== undefined) {
36647 return accum + 1
36648 }
36649
36650 return accum + pushdata.encodingLength(chunk.length) + chunk.length
36651 }
36652
36653 // opcode
36654 return accum + 1
36655 }, 0.0)
36656
36657 var buffer = Buffer.allocUnsafe(bufferSize)
36658 var offset = 0
36659
36660 chunks.forEach(function (chunk) {
36661 // data chunk
36662 if (Buffer.isBuffer(chunk)) {
36663 // adhere to BIP62.3, minimal push policy
36664 var opcode = asMinimalOP(chunk)
36665 if (opcode !== undefined) {
36666 buffer.writeUInt8(opcode, offset)
36667 offset += 1
36668 return
36669 }
36670
36671 offset += pushdata.encode(buffer, chunk.length, offset)
36672 chunk.copy(buffer, offset)
36673 offset += chunk.length
36674
36675 // opcode
36676 } else {
36677 buffer.writeUInt8(chunk, offset)
36678 offset += 1
36679 }
36680 })
36681
36682 if (offset !== buffer.length) throw new Error('Could not decode chunks')
36683 return buffer
36684 }
36685
36686 function decompile (buffer) {
36687 // TODO: remove me
36688 if (types.Array(buffer)) return buffer
36689
36690 typeforce(types.Buffer, buffer)
36691
36692 var chunks = []
36693 var i = 0
36694
36695 while (i < buffer.length) {
36696 var opcode = buffer[i]
36697
36698 // data chunk
36699 if ((opcode > OPS.OP_0) && (opcode <= OPS.OP_PUSHDATA4)) {
36700 var d = pushdata.decode(buffer, i)
36701
36702 // did reading a pushDataInt fail? empty script
36703 if (d === null) return []
36704 i += d.size
36705
36706 // attempt to read too much data? empty script
36707 if (i + d.number > buffer.length) return []
36708
36709 var data = buffer.slice(i, i + d.number)
36710 i += d.number
36711
36712 // decompile minimally
36713 var op = asMinimalOP(data)
36714 if (op !== undefined) {
36715 chunks.push(op)
36716 } else {
36717 chunks.push(data)
36718 }
36719
36720 // opcode
36721 } else {
36722 chunks.push(opcode)
36723
36724 i += 1
36725 }
36726 }
36727
36728 return chunks
36729 }
36730
36731 function toASM (chunks) {
36732 if (Buffer.isBuffer(chunks)) {
36733 chunks = decompile(chunks)
36734 }
36735
36736 return chunks.map(function (chunk) {
36737 // data?
36738 if (Buffer.isBuffer(chunk)) {
36739 var op = asMinimalOP(chunk)
36740 if (op === undefined) return chunk.toString('hex')
36741 chunk = op
36742 }
36743
36744 // opcode!
36745 return REVERSE_OPS[chunk]
36746 }).join(' ')
36747 }
36748
36749 function fromASM (asm) {
36750 typeforce(types.String, asm)
36751
36752 return compile(asm.split(' ').map(function (chunkStr) {
36753 // opcode?
36754 if (OPS[chunkStr] !== undefined) return OPS[chunkStr]
36755 typeforce(types.Hex, chunkStr)
36756
36757 // data!
36758 return Buffer.from(chunkStr, 'hex')
36759 }))
36760 }
36761
36762 function toStack (chunks) {
36763 chunks = decompile(chunks)
36764 typeforce(isPushOnly, chunks)
36765
36766 return chunks.map(function (op) {
36767 if (Buffer.isBuffer(op)) return op
36768 if (op === OPS.OP_0) return Buffer.allocUnsafe(0)
36769
36770 return scriptNumber.encode(op - OP_INT_BASE)
36771 })
36772 }
36773
36774 function isCanonicalPubKey (buffer) {
36775 if (!Buffer.isBuffer(buffer)) return false
36776 if (buffer.length < 33) return false
36777
36778 switch (buffer[0]) {
36779 case 0x02:
36780 case 0x03:
36781 return buffer.length === 33
36782 case 0x04:
36783 return buffer.length === 65
36784 }
36785
36786 return false
36787 }
36788
36789 function isDefinedHashType (hashType) {
36790 var hashTypeMod = hashType & ~0x80
36791
36792 // return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE
36793 return hashTypeMod > 0x00 && hashTypeMod < 0x04
36794 }
36795
36796 function isCanonicalSignature (buffer) {
36797 if (!Buffer.isBuffer(buffer)) return false
36798 if (!isDefinedHashType(buffer[buffer.length - 1])) return false
36799
36800 return bip66.check(buffer.slice(0, -1))
36801 }
36802
36803 module.exports = {
36804 compile: compile,
36805 decompile: decompile,
36806 fromASM: fromASM,
36807 toASM: toASM,
36808 toStack: toStack,
36809
36810 number: require('./script_number'),
36811
36812 isCanonicalPubKey: isCanonicalPubKey,
36813 isCanonicalSignature: isCanonicalSignature,
36814 isPushOnly: isPushOnly,
36815 isDefinedHashType: isDefinedHashType
36816 }
36817
36818 },{"./script_number":55,"./types":80,"bip66":41,"bitcoin-ops":42,"bitcoin-ops/map":43,"pushdata-bitcoin":125,"safe-buffer":128,"typeforce":139}],55:[function(require,module,exports){
36819 var Buffer = require('safe-buffer').Buffer
36820
36821 function decode (buffer, maxLength, minimal) {
36822 maxLength = maxLength || 4
36823 minimal = minimal === undefined ? true : minimal
36824
36825 var length = buffer.length
36826 if (length === 0) return 0
36827 if (length > maxLength) throw new TypeError('Script number overflow')
36828 if (minimal) {
36829 if ((buffer[length - 1] & 0x7f) === 0) {
36830 if (length <= 1 || (buffer[length - 2] & 0x80) === 0) throw new Error('Non-minimally encoded script number')
36831 }
36832 }
36833
36834 // 40-bit
36835 if (length === 5) {
36836 var a = buffer.readUInt32LE(0)
36837 var b = buffer.readUInt8(4)
36838
36839 if (b & 0x80) return -(((b & ~0x80) * 0x100000000) + a)
36840 return (b * 0x100000000) + a
36841 }
36842
36843 var result = 0
36844
36845 // 32-bit / 24-bit / 16-bit / 8-bit
36846 for (var i = 0; i < length; ++i) {
36847 result |= buffer[i] << (8 * i)
36848 }
36849
36850 if (buffer[length - 1] & 0x80) return -(result & ~(0x80 << (8 * (length - 1))))
36851 return result
36852 }
36853
36854 function scriptNumSize (i) {
36855 return i > 0x7fffffff ? 5
36856 : i > 0x7fffff ? 4
36857 : i > 0x7fff ? 3
36858 : i > 0x7f ? 2
36859 : i > 0x00 ? 1
36860 : 0
36861 }
36862
36863 function encode (number) {
36864 var value = Math.abs(number)
36865 var size = scriptNumSize(value)
36866 var buffer = Buffer.allocUnsafe(size)
36867 var negative = number < 0
36868
36869 for (var i = 0; i < size; ++i) {
36870 buffer.writeUInt8(value & 0xff, i)
36871 value >>= 8
36872 }
36873
36874 if (buffer[size - 1] & 0x80) {
36875 buffer.writeUInt8(negative ? 0x80 : 0x00, size - 1)
36876 } else if (negative) {
36877 buffer[size - 1] |= 0x80
36878 }
36879
36880 return buffer
36881 }
36882
36883 module.exports = {
36884 decode: decode,
36885 encode: encode
36886 }
36887
36888 },{"safe-buffer":128}],56:[function(require,module,exports){
36889 var decompile = require('../script').decompile
36890 var multisig = require('./multisig')
36891 var nullData = require('./nulldata')
36892 var pubKey = require('./pubkey')
36893 var pubKeyHash = require('./pubkeyhash')
36894 var scriptHash = require('./scripthash')
36895 var witnessPubKeyHash = require('./witnesspubkeyhash')
36896 var witnessScriptHash = require('./witnessscripthash')
36897 var witnessCommitment = require('./witnesscommitment')
36898
36899 var types = {
36900 MULTISIG: 'multisig',
36901 NONSTANDARD: 'nonstandard',
36902 NULLDATA: 'nulldata',
36903 P2PK: 'pubkey',
36904 P2PKH: 'pubkeyhash',
36905 P2SH: 'scripthash',
36906 P2WPKH: 'witnesspubkeyhash',
36907 P2WSH: 'witnessscripthash',
36908 WITNESS_COMMITMENT: 'witnesscommitment'
36909 }
36910
36911 function classifyOutput (script) {
36912 if (witnessPubKeyHash.output.check(script)) return types.P2WPKH
36913 if (witnessScriptHash.output.check(script)) return types.P2WSH
36914 if (pubKeyHash.output.check(script)) return types.P2PKH
36915 if (scriptHash.output.check(script)) return types.P2SH
36916
36917 // XXX: optimization, below functions .decompile before use
36918 var chunks = decompile(script)
36919 if (multisig.output.check(chunks)) return types.MULTISIG
36920 if (pubKey.output.check(chunks)) return types.P2PK
36921 if (witnessCommitment.output.check(chunks)) return types.WITNESS_COMMITMENT
36922 if (nullData.output.check(chunks)) return types.NULLDATA
36923
36924 return types.NONSTANDARD
36925 }
36926
36927 function classifyInput (script, allowIncomplete) {
36928 // XXX: optimization, below functions .decompile before use
36929 var chunks = decompile(script)
36930
36931 if (pubKeyHash.input.check(chunks)) return types.P2PKH
36932 if (scriptHash.input.check(chunks, allowIncomplete)) return types.P2SH
36933 if (multisig.input.check(chunks, allowIncomplete)) return types.MULTISIG
36934 if (pubKey.input.check(chunks)) return types.P2PK
36935
36936 return types.NONSTANDARD
36937 }
36938
36939 function classifyWitness (script, allowIncomplete) {
36940 // XXX: optimization, below functions .decompile before use
36941 var chunks = decompile(script)
36942
36943 if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH
36944 if (witnessScriptHash.input.check(chunks, allowIncomplete)) return types.P2WSH
36945
36946 return types.NONSTANDARD
36947 }
36948
36949 module.exports = {
36950 classifyInput: classifyInput,
36951 classifyOutput: classifyOutput,
36952 classifyWitness: classifyWitness,
36953 multisig: multisig,
36954 nullData: nullData,
36955 pubKey: pubKey,
36956 pubKeyHash: pubKeyHash,
36957 scriptHash: scriptHash,
36958 witnessPubKeyHash: witnessPubKeyHash,
36959 witnessScriptHash: witnessScriptHash,
36960 witnessCommitment: witnessCommitment,
36961 types: types
36962 }
36963
36964 },{"../script":54,"./multisig":57,"./nulldata":60,"./pubkey":61,"./pubkeyhash":64,"./scripthash":67,"./witnesscommitment":70,"./witnesspubkeyhash":72,"./witnessscripthash":75}],57:[function(require,module,exports){
36965 module.exports = {
36966 input: require('./input'),
36967 output: require('./output')
36968 }
36969
36970 },{"./input":58,"./output":59}],58:[function(require,module,exports){
36971 // OP_0 [signatures ...]
36972
36973 var Buffer = require('safe-buffer').Buffer
36974 var bscript = require('../../script')
36975 var p2mso = require('./output')
36976 var typeforce = require('typeforce')
36977 var OPS = require('bitcoin-ops')
36978
36979 function partialSignature (value) {
36980 return value === OPS.OP_0 || bscript.isCanonicalSignature(value)
36981 }
36982
36983 function check (script, allowIncomplete) {
36984 var chunks = bscript.decompile(script)
36985 if (chunks.length < 2) return false
36986 if (chunks[0] !== OPS.OP_0) return false
36987
36988 if (allowIncomplete) {
36989 return chunks.slice(1).every(partialSignature)
36990 }
36991
36992 return chunks.slice(1).every(bscript.isCanonicalSignature)
36993 }
36994 check.toJSON = function () { return 'multisig input' }
36995
36996 var EMPTY_BUFFER = Buffer.allocUnsafe(0)
36997
36998 function encodeStack (signatures, scriptPubKey) {
36999 typeforce([partialSignature], signatures)
37000
37001 if (scriptPubKey) {
37002 var scriptData = p2mso.decode(scriptPubKey)
37003
37004 if (signatures.length < scriptData.m) {
37005 throw new TypeError('Not enough signatures provided')
37006 }
37007
37008 if (signatures.length > scriptData.pubKeys.length) {
37009 throw new TypeError('Too many signatures provided')
37010 }
37011 }
37012
37013 return [].concat(EMPTY_BUFFER, signatures.map(function (sig) {
37014 if (sig === OPS.OP_0) {
37015 return EMPTY_BUFFER
37016 }
37017 return sig
37018 }))
37019 }
37020
37021 function encode (signatures, scriptPubKey) {
37022 return bscript.compile(encodeStack(signatures, scriptPubKey))
37023 }
37024
37025 function decodeStack (stack, allowIncomplete) {
37026 typeforce(check, stack, allowIncomplete)
37027 return stack.slice(1)
37028 }
37029
37030 function decode (buffer, allowIncomplete) {
37031 var stack = bscript.decompile(buffer)
37032 return decodeStack(stack, allowIncomplete)
37033 }
37034
37035 module.exports = {
37036 check: check,
37037 decode: decode,
37038 decodeStack: decodeStack,
37039 encode: encode,
37040 encodeStack: encodeStack
37041 }
37042
37043 },{"../../script":54,"./output":59,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139}],59:[function(require,module,exports){
37044 // m [pubKeys ...] n OP_CHECKMULTISIG
37045
37046 var bscript = require('../../script')
37047 var types = require('../../types')
37048 var typeforce = require('typeforce')
37049 var OPS = require('bitcoin-ops')
37050 var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
37051
37052 function check (script, allowIncomplete) {
37053 var chunks = bscript.decompile(script)
37054
37055 if (chunks.length < 4) return false
37056 if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG) return false
37057 if (!types.Number(chunks[0])) return false
37058 if (!types.Number(chunks[chunks.length - 2])) return false
37059 var m = chunks[0] - OP_INT_BASE
37060 var n = chunks[chunks.length - 2] - OP_INT_BASE
37061
37062 if (m <= 0) return false
37063 if (n > 16) return false
37064 if (m > n) return false
37065 if (n !== chunks.length - 3) return false
37066 if (allowIncomplete) return true
37067
37068 var keys = chunks.slice(1, -2)
37069 return keys.every(bscript.isCanonicalPubKey)
37070 }
37071 check.toJSON = function () { return 'multi-sig output' }
37072
37073 function encode (m, pubKeys) {
37074 typeforce({
37075 m: types.Number,
37076 pubKeys: [bscript.isCanonicalPubKey]
37077 }, {
37078 m: m,
37079 pubKeys: pubKeys
37080 })
37081
37082 var n = pubKeys.length
37083 if (n < m) throw new TypeError('Not enough pubKeys provided')
37084
37085 return bscript.compile([].concat(
37086 OP_INT_BASE + m,
37087 pubKeys,
37088 OP_INT_BASE + n,
37089 OPS.OP_CHECKMULTISIG
37090 ))
37091 }
37092
37093 function decode (buffer, allowIncomplete) {
37094 var chunks = bscript.decompile(buffer)
37095 typeforce(check, chunks, allowIncomplete)
37096
37097 return {
37098 m: chunks[0] - OP_INT_BASE,
37099 pubKeys: chunks.slice(1, -2)
37100 }
37101 }
37102
37103 module.exports = {
37104 check: check,
37105 decode: decode,
37106 encode: encode
37107 }
37108
37109 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],60:[function(require,module,exports){
37110 // OP_RETURN {data}
37111
37112 var bscript = require('../script')
37113 var types = require('../types')
37114 var typeforce = require('typeforce')
37115 var OPS = require('bitcoin-ops')
37116
37117 function check (script) {
37118 var buffer = bscript.compile(script)
37119
37120 return buffer.length > 1 &&
37121 buffer[0] === OPS.OP_RETURN
37122 }
37123 check.toJSON = function () { return 'null data output' }
37124
37125 function encode (data) {
37126 typeforce(types.Buffer, data)
37127
37128 return bscript.compile([OPS.OP_RETURN, data])
37129 }
37130
37131 function decode (buffer) {
37132 typeforce(check, buffer)
37133
37134 return buffer.slice(2)
37135 }
37136
37137 module.exports = {
37138 output: {
37139 check: check,
37140 decode: decode,
37141 encode: encode
37142 }
37143 }
37144
37145 },{"../script":54,"../types":80,"bitcoin-ops":42,"typeforce":139}],61:[function(require,module,exports){
37146 arguments[4][57][0].apply(exports,arguments)
37147 },{"./input":62,"./output":63,"dup":57}],62:[function(require,module,exports){
37148 // {signature}
37149
37150 var bscript = require('../../script')
37151 var typeforce = require('typeforce')
37152
37153 function check (script) {
37154 var chunks = bscript.decompile(script)
37155
37156 return chunks.length === 1 &&
37157 bscript.isCanonicalSignature(chunks[0])
37158 }
37159 check.toJSON = function () { return 'pubKey input' }
37160
37161 function encodeStack (signature) {
37162 typeforce(bscript.isCanonicalSignature, signature)
37163 return [signature]
37164 }
37165
37166 function encode (signature) {
37167 return bscript.compile(encodeStack(signature))
37168 }
37169
37170 function decodeStack (stack) {
37171 typeforce(check, stack)
37172 return stack[0]
37173 }
37174
37175 function decode (buffer) {
37176 var stack = bscript.decompile(buffer)
37177 return decodeStack(stack)
37178 }
37179
37180 module.exports = {
37181 check: check,
37182 decode: decode,
37183 decodeStack: decodeStack,
37184 encode: encode,
37185 encodeStack: encodeStack
37186 }
37187
37188 },{"../../script":54,"typeforce":139}],63:[function(require,module,exports){
37189 // {pubKey} OP_CHECKSIG
37190
37191 var bscript = require('../../script')
37192 var typeforce = require('typeforce')
37193 var OPS = require('bitcoin-ops')
37194
37195 function check (script) {
37196 var chunks = bscript.decompile(script)
37197
37198 return chunks.length === 2 &&
37199 bscript.isCanonicalPubKey(chunks[0]) &&
37200 chunks[1] === OPS.OP_CHECKSIG
37201 }
37202 check.toJSON = function () { return 'pubKey output' }
37203
37204 function encode (pubKey) {
37205 typeforce(bscript.isCanonicalPubKey, pubKey)
37206
37207 return bscript.compile([pubKey, OPS.OP_CHECKSIG])
37208 }
37209
37210 function decode (buffer) {
37211 var chunks = bscript.decompile(buffer)
37212 typeforce(check, chunks)
37213
37214 return chunks[0]
37215 }
37216
37217 module.exports = {
37218 check: check,
37219 decode: decode,
37220 encode: encode
37221 }
37222
37223 },{"../../script":54,"bitcoin-ops":42,"typeforce":139}],64:[function(require,module,exports){
37224 arguments[4][57][0].apply(exports,arguments)
37225 },{"./input":65,"./output":66,"dup":57}],65:[function(require,module,exports){
37226 // {signature} {pubKey}
37227
37228 var bscript = require('../../script')
37229 var typeforce = require('typeforce')
37230
37231 function check (script) {
37232 var chunks = bscript.decompile(script)
37233
37234 return chunks.length === 2 &&
37235 bscript.isCanonicalSignature(chunks[0]) &&
37236 bscript.isCanonicalPubKey(chunks[1])
37237 }
37238 check.toJSON = function () { return 'pubKeyHash input' }
37239
37240 function encodeStack (signature, pubKey) {
37241 typeforce({
37242 signature: bscript.isCanonicalSignature,
37243 pubKey: bscript.isCanonicalPubKey
37244 }, {
37245 signature: signature,
37246 pubKey: pubKey
37247 })
37248
37249 return [signature, pubKey]
37250 }
37251
37252 function encode (signature, pubKey) {
37253 return bscript.compile(encodeStack(signature, pubKey))
37254 }
37255
37256 function decodeStack (stack) {
37257 typeforce(check, stack)
37258
37259 return {
37260 signature: stack[0],
37261 pubKey: stack[1]
37262 }
37263 }
37264
37265 function decode (buffer) {
37266 var stack = bscript.decompile(buffer)
37267 return decodeStack(stack)
37268 }
37269
37270 module.exports = {
37271 check: check,
37272 decode: decode,
37273 decodeStack: decodeStack,
37274 encode: encode,
37275 encodeStack: encodeStack
37276 }
37277
37278 },{"../../script":54,"typeforce":139}],66:[function(require,module,exports){
37279 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
37280
37281 var bscript = require('../../script')
37282 var types = require('../../types')
37283 var typeforce = require('typeforce')
37284 var OPS = require('bitcoin-ops')
37285
37286 function check (script) {
37287 var buffer = bscript.compile(script)
37288
37289 return buffer.length === 25 &&
37290 buffer[0] === OPS.OP_DUP &&
37291 buffer[1] === OPS.OP_HASH160 &&
37292 buffer[2] === 0x14 &&
37293 buffer[23] === OPS.OP_EQUALVERIFY &&
37294 buffer[24] === OPS.OP_CHECKSIG
37295 }
37296 check.toJSON = function () { return 'pubKeyHash output' }
37297
37298 function encode (pubKeyHash) {
37299 typeforce(types.Hash160bit, pubKeyHash)
37300
37301 return bscript.compile([
37302 OPS.OP_DUP,
37303 OPS.OP_HASH160,
37304 pubKeyHash,
37305 OPS.OP_EQUALVERIFY,
37306 OPS.OP_CHECKSIG
37307 ])
37308 }
37309
37310 function decode (buffer) {
37311 typeforce(check, buffer)
37312
37313 return buffer.slice(3, 23)
37314 }
37315
37316 module.exports = {
37317 check: check,
37318 decode: decode,
37319 encode: encode
37320 }
37321
37322 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],67:[function(require,module,exports){
37323 arguments[4][57][0].apply(exports,arguments)
37324 },{"./input":68,"./output":69,"dup":57}],68:[function(require,module,exports){
37325 // <scriptSig> {serialized scriptPubKey script}
37326
37327 var Buffer = require('safe-buffer').Buffer
37328 var bscript = require('../../script')
37329 var typeforce = require('typeforce')
37330
37331 var p2ms = require('../multisig/')
37332 var p2pk = require('../pubkey/')
37333 var p2pkh = require('../pubkeyhash/')
37334 var p2wpkho = require('../witnesspubkeyhash/output')
37335 var p2wsho = require('../witnessscripthash/output')
37336
37337 function check (script, allowIncomplete) {
37338 var chunks = bscript.decompile(script)
37339 if (chunks.length < 1) return false
37340
37341 var lastChunk = chunks[chunks.length - 1]
37342 if (!Buffer.isBuffer(lastChunk)) return false
37343
37344 var scriptSigChunks = bscript.decompile(bscript.compile(chunks.slice(0, -1)))
37345 var redeemScriptChunks = bscript.decompile(lastChunk)
37346
37347 // is redeemScript a valid script?
37348 if (redeemScriptChunks.length === 0) return false
37349
37350 // is redeemScriptSig push only?
37351 if (!bscript.isPushOnly(scriptSigChunks)) return false
37352
37353 // is witness?
37354 if (chunks.length === 1) {
37355 return p2wsho.check(redeemScriptChunks) ||
37356 p2wpkho.check(redeemScriptChunks)
37357 }
37358
37359 // match types
37360 if (p2pkh.input.check(scriptSigChunks) &&
37361 p2pkh.output.check(redeemScriptChunks)) return true
37362
37363 if (p2ms.input.check(scriptSigChunks, allowIncomplete) &&
37364 p2ms.output.check(redeemScriptChunks)) return true
37365
37366 if (p2pk.input.check(scriptSigChunks) &&
37367 p2pk.output.check(redeemScriptChunks)) return true
37368
37369 return false
37370 }
37371 check.toJSON = function () { return 'scriptHash input' }
37372
37373 function encodeStack (redeemScriptStack, redeemScript) {
37374 var serializedScriptPubKey = bscript.compile(redeemScript)
37375
37376 return [].concat(redeemScriptStack, serializedScriptPubKey)
37377 }
37378
37379 function encode (redeemScriptSig, redeemScript) {
37380 var redeemScriptStack = bscript.decompile(redeemScriptSig)
37381
37382 return bscript.compile(encodeStack(redeemScriptStack, redeemScript))
37383 }
37384
37385 function decodeStack (stack) {
37386 typeforce(check, stack)
37387
37388 return {
37389 redeemScriptStack: stack.slice(0, -1),
37390 redeemScript: stack[stack.length - 1]
37391 }
37392 }
37393
37394 function decode (buffer) {
37395 var stack = bscript.decompile(buffer)
37396 var result = decodeStack(stack)
37397 result.redeemScriptSig = bscript.compile(result.redeemScriptStack)
37398 delete result.redeemScriptStack
37399 return result
37400 }
37401
37402 module.exports = {
37403 check: check,
37404 decode: decode,
37405 decodeStack: decodeStack,
37406 encode: encode,
37407 encodeStack: encodeStack
37408 }
37409
37410 },{"../../script":54,"../multisig/":57,"../pubkey/":61,"../pubkeyhash/":64,"../witnesspubkeyhash/output":74,"../witnessscripthash/output":77,"safe-buffer":128,"typeforce":139}],69:[function(require,module,exports){
37411 // OP_HASH160 {scriptHash} OP_EQUAL
37412
37413 var bscript = require('../../script')
37414 var types = require('../../types')
37415 var typeforce = require('typeforce')
37416 var OPS = require('bitcoin-ops')
37417
37418 function check (script) {
37419 var buffer = bscript.compile(script)
37420
37421 return buffer.length === 23 &&
37422 buffer[0] === OPS.OP_HASH160 &&
37423 buffer[1] === 0x14 &&
37424 buffer[22] === OPS.OP_EQUAL
37425 }
37426 check.toJSON = function () { return 'scriptHash output' }
37427
37428 function encode (scriptHash) {
37429 typeforce(types.Hash160bit, scriptHash)
37430
37431 return bscript.compile([OPS.OP_HASH160, scriptHash, OPS.OP_EQUAL])
37432 }
37433
37434 function decode (buffer) {
37435 typeforce(check, buffer)
37436
37437 return buffer.slice(2, 22)
37438 }
37439
37440 module.exports = {
37441 check: check,
37442 decode: decode,
37443 encode: encode
37444 }
37445
37446 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],70:[function(require,module,exports){
37447 module.exports = {
37448 output: require('./output')
37449 }
37450
37451 },{"./output":71}],71:[function(require,module,exports){
37452 // OP_RETURN {aa21a9ed} {commitment}
37453
37454 var Buffer = require('safe-buffer').Buffer
37455 var bscript = require('../../script')
37456 var types = require('../../types')
37457 var typeforce = require('typeforce')
37458 var OPS = require('bitcoin-ops')
37459
37460 var HEADER = Buffer.from('aa21a9ed', 'hex')
37461
37462 function check (script) {
37463 var buffer = bscript.compile(script)
37464
37465 return buffer.length > 37 &&
37466 buffer[0] === OPS.OP_RETURN &&
37467 buffer[1] === 0x24 &&
37468 buffer.slice(2, 6).equals(HEADER)
37469 }
37470
37471 check.toJSON = function () { return 'Witness commitment output' }
37472
37473 function encode (commitment) {
37474 typeforce(types.Hash256bit, commitment)
37475
37476 var buffer = Buffer.allocUnsafe(36)
37477 HEADER.copy(buffer, 0)
37478 commitment.copy(buffer, 4)
37479
37480 return bscript.compile([OPS.OP_RETURN, buffer])
37481 }
37482
37483 function decode (buffer) {
37484 typeforce(check, buffer)
37485
37486 return bscript.decompile(buffer)[1].slice(4, 36)
37487 }
37488
37489 module.exports = {
37490 check: check,
37491 decode: decode,
37492 encode: encode
37493 }
37494
37495 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139}],72:[function(require,module,exports){
37496 arguments[4][57][0].apply(exports,arguments)
37497 },{"./input":73,"./output":74,"dup":57}],73:[function(require,module,exports){
37498 // {signature} {pubKey}
37499
37500 var bscript = require('../../script')
37501 var typeforce = require('typeforce')
37502
37503 function isCompressedCanonicalPubKey (pubKey) {
37504 return bscript.isCanonicalPubKey(pubKey) && pubKey.length === 33
37505 }
37506
37507 function check (script) {
37508 var chunks = bscript.decompile(script)
37509
37510 return chunks.length === 2 &&
37511 bscript.isCanonicalSignature(chunks[0]) &&
37512 isCompressedCanonicalPubKey(chunks[1])
37513 }
37514 check.toJSON = function () { return 'witnessPubKeyHash input' }
37515
37516 function encodeStack (signature, pubKey) {
37517 typeforce({
37518 signature: bscript.isCanonicalSignature,
37519 pubKey: isCompressedCanonicalPubKey
37520 }, {
37521 signature: signature,
37522 pubKey: pubKey
37523 })
37524
37525 return [signature, pubKey]
37526 }
37527
37528 function decodeStack (stack) {
37529 typeforce(check, stack)
37530
37531 return {
37532 signature: stack[0],
37533 pubKey: stack[1]
37534 }
37535 }
37536
37537 module.exports = {
37538 check: check,
37539 decodeStack: decodeStack,
37540 encodeStack: encodeStack
37541 }
37542
37543 },{"../../script":54,"typeforce":139}],74:[function(require,module,exports){
37544 // OP_0 {pubKeyHash}
37545
37546 var bscript = require('../../script')
37547 var types = require('../../types')
37548 var typeforce = require('typeforce')
37549 var OPS = require('bitcoin-ops')
37550
37551 function check (script) {
37552 var buffer = bscript.compile(script)
37553
37554 return buffer.length === 22 &&
37555 buffer[0] === OPS.OP_0 &&
37556 buffer[1] === 0x14
37557 }
37558 check.toJSON = function () { return 'Witness pubKeyHash output' }
37559
37560 function encode (pubKeyHash) {
37561 typeforce(types.Hash160bit, pubKeyHash)
37562
37563 return bscript.compile([OPS.OP_0, pubKeyHash])
37564 }
37565
37566 function decode (buffer) {
37567 typeforce(check, buffer)
37568
37569 return buffer.slice(2)
37570 }
37571
37572 module.exports = {
37573 check: check,
37574 decode: decode,
37575 encode: encode
37576 }
37577
37578 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],75:[function(require,module,exports){
37579 arguments[4][57][0].apply(exports,arguments)
37580 },{"./input":76,"./output":77,"dup":57}],76:[function(require,module,exports){
37581 (function (Buffer){
37582 // <scriptSig> {serialized scriptPubKey script}
37583
37584 var bscript = require('../../script')
37585 var types = require('../../types')
37586 var typeforce = require('typeforce')
37587
37588 var p2ms = require('../multisig/')
37589 var p2pk = require('../pubkey/')
37590 var p2pkh = require('../pubkeyhash/')
37591
37592 function check (chunks, allowIncomplete) {
37593 typeforce(types.Array, chunks)
37594 if (chunks.length < 1) return false
37595
37596 var witnessScript = chunks[chunks.length - 1]
37597 if (!Buffer.isBuffer(witnessScript)) return false
37598
37599 var witnessScriptChunks = bscript.decompile(witnessScript)
37600
37601 // is witnessScript a valid script?
37602 if (witnessScriptChunks.length === 0) return false
37603
37604 var witnessRawScriptSig = bscript.compile(chunks.slice(0, -1))
37605
37606 // match types
37607 if (p2pkh.input.check(witnessRawScriptSig) &&
37608 p2pkh.output.check(witnessScriptChunks)) return true
37609
37610 if (p2ms.input.check(witnessRawScriptSig, allowIncomplete) &&
37611 p2ms.output.check(witnessScriptChunks)) return true
37612
37613 if (p2pk.input.check(witnessRawScriptSig) &&
37614 p2pk.output.check(witnessScriptChunks)) return true
37615
37616 return false
37617 }
37618 check.toJSON = function () { return 'witnessScriptHash input' }
37619
37620 function encodeStack (witnessData, witnessScript) {
37621 typeforce({
37622 witnessData: [types.Buffer],
37623 witnessScript: types.Buffer
37624 }, {
37625 witnessData: witnessData,
37626 witnessScript: witnessScript
37627 })
37628
37629 return [].concat(witnessData, witnessScript)
37630 }
37631
37632 function decodeStack (chunks) {
37633 typeforce(check, chunks)
37634 return {
37635 witnessData: chunks.slice(0, -1),
37636 witnessScript: chunks[chunks.length - 1]
37637 }
37638 }
37639
37640 module.exports = {
37641 check: check,
37642 decodeStack: decodeStack,
37643 encodeStack: encodeStack
37644 }
37645
37646 }).call(this,{"isBuffer":require("../../../../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
37647 },{"../../../../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10,"../../script":54,"../../types":80,"../multisig/":57,"../pubkey/":61,"../pubkeyhash/":64,"typeforce":139}],77:[function(require,module,exports){
37648 // OP_0 {scriptHash}
37649
37650 var bscript = require('../../script')
37651 var types = require('../../types')
37652 var typeforce = require('typeforce')
37653 var OPS = require('bitcoin-ops')
37654
37655 function check (script) {
37656 var buffer = bscript.compile(script)
37657
37658 return buffer.length === 34 &&
37659 buffer[0] === OPS.OP_0 &&
37660 buffer[1] === 0x20
37661 }
37662 check.toJSON = function () { return 'Witness scriptHash output' }
37663
37664 function encode (scriptHash) {
37665 typeforce(types.Hash256bit, scriptHash)
37666
37667 return bscript.compile([OPS.OP_0, scriptHash])
37668 }
37669
37670 function decode (buffer) {
37671 typeforce(check, buffer)
37672
37673 return buffer.slice(2)
37674 }
37675
37676 module.exports = {
37677 check: check,
37678 decode: decode,
37679 encode: encode
37680 }
37681
37682 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],78:[function(require,module,exports){
37683 var Buffer = require('safe-buffer').Buffer
37684 var bcrypto = require('./crypto')
37685 var bscript = require('./script')
37686 var bufferutils = require('./bufferutils')
37687 var opcodes = require('bitcoin-ops')
37688 var typeforce = require('typeforce')
37689 var types = require('./types')
37690 var varuint = require('varuint-bitcoin')
37691
37692 function varSliceSize (someScript) {
37693 var length = someScript.length
37694
37695 return varuint.encodingLength(length) + length
37696 }
37697
37698 function vectorSize (someVector) {
37699 var length = someVector.length
37700
37701 return varuint.encodingLength(length) + someVector.reduce(function (sum, witness) {
37702 return sum + varSliceSize(witness)
37703 }, 0)
37704 }
37705
37706 function Transaction () {
37707 this.version = 1
37708 this.locktime = 0
37709 this.ins = []
37710 this.outs = []
37711 }
37712
37713 Transaction.DEFAULT_SEQUENCE = 0xffffffff
37714 Transaction.SIGHASH_ALL = 0x01
37715 Transaction.SIGHASH_NONE = 0x02
37716 Transaction.SIGHASH_SINGLE = 0x03
37717 Transaction.SIGHASH_ANYONECANPAY = 0x80
37718 Transaction.ADVANCED_TRANSACTION_MARKER = 0x00
37719 Transaction.ADVANCED_TRANSACTION_FLAG = 0x01
37720
37721 var EMPTY_SCRIPT = Buffer.allocUnsafe(0)
37722 var EMPTY_WITNESS = []
37723 var ZERO = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
37724 var ONE = Buffer.from('0000000000000000000000000000000000000000000000000000000000000001', 'hex')
37725 var VALUE_UINT64_MAX = Buffer.from('ffffffffffffffff', 'hex')
37726 var BLANK_OUTPUT = {
37727 script: EMPTY_SCRIPT,
37728 valueBuffer: VALUE_UINT64_MAX
37729 }
37730
37731 Transaction.fromBuffer = function (buffer, __noStrict) {
37732 var offset = 0
37733 function readSlice (n) {
37734 offset += n
37735 return buffer.slice(offset - n, offset)
37736 }
37737
37738 function readUInt32 () {
37739 var i = buffer.readUInt32LE(offset)
37740 offset += 4
37741 return i
37742 }
37743
37744 function readInt32 () {
37745 var i = buffer.readInt32LE(offset)
37746 offset += 4
37747 return i
37748 }
37749
37750 function readUInt64 () {
37751 var i = bufferutils.readUInt64LE(buffer, offset)
37752 offset += 8
37753 return i
37754 }
37755
37756 function readVarInt () {
37757 var vi = varuint.decode(buffer, offset)
37758 offset += varuint.decode.bytes
37759 return vi
37760 }
37761
37762 function readVarSlice () {
37763 return readSlice(readVarInt())
37764 }
37765
37766 function readVector () {
37767 var count = readVarInt()
37768 var vector = []
37769 for (var i = 0; i < count; i++) vector.push(readVarSlice())
37770 return vector
37771 }
37772
37773 var tx = new Transaction()
37774 tx.version = readInt32()
37775
37776 var marker = buffer.readUInt8(offset)
37777 var flag = buffer.readUInt8(offset + 1)
37778
37779 var hasWitnesses = false
37780 if (marker === Transaction.ADVANCED_TRANSACTION_MARKER &&
37781 flag === Transaction.ADVANCED_TRANSACTION_FLAG) {
37782 offset += 2
37783 hasWitnesses = true
37784 }
37785
37786 var vinLen = readVarInt()
37787 for (var i = 0; i < vinLen; ++i) {
37788 tx.ins.push({
37789 hash: readSlice(32),
37790 index: readUInt32(),
37791 script: readVarSlice(),
37792 sequence: readUInt32(),
37793 witness: EMPTY_WITNESS
37794 })
37795 }
37796
37797 var voutLen = readVarInt()
37798 for (i = 0; i < voutLen; ++i) {
37799 tx.outs.push({
37800 value: readUInt64(),
37801 script: readVarSlice()
37802 })
37803 }
37804
37805 if (hasWitnesses) {
37806 for (i = 0; i < vinLen; ++i) {
37807 tx.ins[i].witness = readVector()
37808 }
37809
37810 // was this pointless?
37811 if (!tx.hasWitnesses()) throw new Error('Transaction has superfluous witness data')
37812 }
37813
37814 tx.locktime = readUInt32()
37815
37816 if (__noStrict) return tx
37817 if (offset !== buffer.length) throw new Error('Transaction has unexpected data')
37818
37819 return tx
37820 }
37821
37822 Transaction.fromHex = function (hex) {
37823 return Transaction.fromBuffer(Buffer.from(hex, 'hex'))
37824 }
37825
37826 Transaction.isCoinbaseHash = function (buffer) {
37827 typeforce(types.Hash256bit, buffer)
37828 for (var i = 0; i < 32; ++i) {
37829 if (buffer[i] !== 0) return false
37830 }
37831 return true
37832 }
37833
37834 Transaction.prototype.isCoinbase = function () {
37835 return this.ins.length === 1 && Transaction.isCoinbaseHash(this.ins[0].hash)
37836 }
37837
37838 Transaction.prototype.addInput = function (hash, index, sequence, scriptSig) {
37839 typeforce(types.tuple(
37840 types.Hash256bit,
37841 types.UInt32,
37842 types.maybe(types.UInt32),
37843 types.maybe(types.Buffer)
37844 ), arguments)
37845
37846 if (types.Null(sequence)) {
37847 sequence = Transaction.DEFAULT_SEQUENCE
37848 }
37849
37850 // Add the input and return the input's index
37851 return (this.ins.push({
37852 hash: hash,
37853 index: index,
37854 script: scriptSig || EMPTY_SCRIPT,
37855 sequence: sequence,
37856 witness: EMPTY_WITNESS
37857 }) - 1)
37858 }
37859
37860 Transaction.prototype.addOutput = function (scriptPubKey, value) {
37861 typeforce(types.tuple(types.Buffer, types.Satoshi), arguments)
37862
37863 // Add the output and return the output's index
37864 return (this.outs.push({
37865 script: scriptPubKey,
37866 value: value
37867 }) - 1)
37868 }
37869
37870 Transaction.prototype.hasWitnesses = function () {
37871 return this.ins.some(function (x) {
37872 return x.witness.length !== 0
37873 })
37874 }
37875
37876 Transaction.prototype.weight = function () {
37877 var base = this.__byteLength(false)
37878 var total = this.__byteLength(true)
37879 return base * 3 + total
37880 }
37881
37882 Transaction.prototype.virtualSize = function () {
37883 return Math.ceil(this.weight() / 4)
37884 }
37885
37886 Transaction.prototype.byteLength = function () {
37887 return this.__byteLength(true)
37888 }
37889
37890 Transaction.prototype.__byteLength = function (__allowWitness) {
37891 var hasWitnesses = __allowWitness && this.hasWitnesses()
37892
37893 return (
37894 (hasWitnesses ? 10 : 8) +
37895 varuint.encodingLength(this.ins.length) +
37896 varuint.encodingLength(this.outs.length) +
37897 this.ins.reduce(function (sum, input) { return sum + 40 + varSliceSize(input.script) }, 0) +
37898 this.outs.reduce(function (sum, output) { return sum + 8 + varSliceSize(output.script) }, 0) +
37899 (hasWitnesses ? this.ins.reduce(function (sum, input) { return sum + vectorSize(input.witness) }, 0) : 0)
37900 )
37901 }
37902
37903 Transaction.prototype.clone = function () {
37904 var newTx = new Transaction()
37905 newTx.version = this.version
37906 newTx.locktime = this.locktime
37907
37908 newTx.ins = this.ins.map(function (txIn) {
37909 return {
37910 hash: txIn.hash,
37911 index: txIn.index,
37912 script: txIn.script,
37913 sequence: txIn.sequence,
37914 witness: txIn.witness
37915 }
37916 })
37917
37918 newTx.outs = this.outs.map(function (txOut) {
37919 return {
37920 script: txOut.script,
37921 value: txOut.value
37922 }
37923 })
37924
37925 return newTx
37926 }
37927
37928 /**
37929 * Hash transaction for signing a specific input.
37930 *
37931 * Bitcoin uses a different hash for each signed transaction input.
37932 * This method copies the transaction, makes the necessary changes based on the
37933 * hashType, and then hashes the result.
37934 * This hash can then be used to sign the provided transaction input.
37935 */
37936 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
37937 typeforce(types.tuple(types.UInt32, types.Buffer, /* types.UInt8 */ types.Number), arguments)
37938
37939 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29
37940 if (inIndex >= this.ins.length) return ONE
37941
37942 // ignore OP_CODESEPARATOR
37943 var ourScript = bscript.compile(bscript.decompile(prevOutScript).filter(function (x) {
37944 return x !== opcodes.OP_CODESEPARATOR
37945 }))
37946
37947 var txTmp = this.clone()
37948
37949 // SIGHASH_NONE: ignore all outputs? (wildcard payee)
37950 if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) {
37951 txTmp.outs = []
37952
37953 // ignore sequence numbers (except at inIndex)
37954 txTmp.ins.forEach(function (input, i) {
37955 if (i === inIndex) return
37956
37957 input.sequence = 0
37958 })
37959
37960 // SIGHASH_SINGLE: ignore all outputs, except at the same index?
37961 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) {
37962 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60
37963 if (inIndex >= this.outs.length) return ONE
37964
37965 // truncate outputs after
37966 txTmp.outs.length = inIndex + 1
37967
37968 // "blank" outputs before
37969 for (var i = 0; i < inIndex; i++) {
37970 txTmp.outs[i] = BLANK_OUTPUT
37971 }
37972
37973 // ignore sequence numbers (except at inIndex)
37974 txTmp.ins.forEach(function (input, y) {
37975 if (y === inIndex) return
37976
37977 input.sequence = 0
37978 })
37979 }
37980
37981 // SIGHASH_ANYONECANPAY: ignore inputs entirely?
37982 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
37983 txTmp.ins = [txTmp.ins[inIndex]]
37984 txTmp.ins[0].script = ourScript
37985
37986 // SIGHASH_ALL: only ignore input scripts
37987 } else {
37988 // "blank" others input scripts
37989 txTmp.ins.forEach(function (input) { input.script = EMPTY_SCRIPT })
37990 txTmp.ins[inIndex].script = ourScript
37991 }
37992
37993 // serialize and hash
37994 var buffer = Buffer.allocUnsafe(txTmp.__byteLength(false) + 4)
37995 buffer.writeInt32LE(hashType, buffer.length - 4)
37996 txTmp.__toBuffer(buffer, 0, false)
37997
37998 return bcrypto.hash256(buffer)
37999 }
38000
38001 Transaction.prototype.hashForWitnessV0 = function (inIndex, prevOutScript, value, hashType) {
38002 typeforce(types.tuple(types.UInt32, types.Buffer, types.Satoshi, types.UInt32), arguments)
38003
38004 var tbuffer, toffset
38005 function writeSlice (slice) { toffset += slice.copy(tbuffer, toffset) }
38006 function writeUInt32 (i) { toffset = tbuffer.writeUInt32LE(i, toffset) }
38007 function writeUInt64 (i) { toffset = bufferutils.writeUInt64LE(tbuffer, i, toffset) }
38008 function writeVarInt (i) {
38009 varuint.encode(i, tbuffer, toffset)
38010 toffset += varuint.encode.bytes
38011 }
38012 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
38013
38014 var hashOutputs = ZERO
38015 var hashPrevouts = ZERO
38016 var hashSequence = ZERO
38017
38018 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY)) {
38019 tbuffer = Buffer.allocUnsafe(36 * this.ins.length)
38020 toffset = 0
38021
38022 this.ins.forEach(function (txIn) {
38023 writeSlice(txIn.hash)
38024 writeUInt32(txIn.index)
38025 })
38026
38027 hashPrevouts = bcrypto.hash256(tbuffer)
38028 }
38029
38030 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY) &&
38031 (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
38032 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
38033 tbuffer = Buffer.allocUnsafe(4 * this.ins.length)
38034 toffset = 0
38035
38036 this.ins.forEach(function (txIn) {
38037 writeUInt32(txIn.sequence)
38038 })
38039
38040 hashSequence = bcrypto.hash256(tbuffer)
38041 }
38042
38043 if ((hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
38044 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
38045 var txOutsSize = this.outs.reduce(function (sum, output) {
38046 return sum + 8 + varSliceSize(output.script)
38047 }, 0)
38048
38049 tbuffer = Buffer.allocUnsafe(txOutsSize)
38050 toffset = 0
38051
38052 this.outs.forEach(function (out) {
38053 writeUInt64(out.value)
38054 writeVarSlice(out.script)
38055 })
38056
38057 hashOutputs = bcrypto.hash256(tbuffer)
38058 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE && inIndex < this.outs.length) {
38059 var output = this.outs[inIndex]
38060
38061 tbuffer = Buffer.allocUnsafe(8 + varSliceSize(output.script))
38062 toffset = 0
38063 writeUInt64(output.value)
38064 writeVarSlice(output.script)
38065
38066 hashOutputs = bcrypto.hash256(tbuffer)
38067 }
38068
38069 tbuffer = Buffer.allocUnsafe(156 + varSliceSize(prevOutScript))
38070 toffset = 0
38071
38072 var input = this.ins[inIndex]
38073 writeUInt32(this.version)
38074 writeSlice(hashPrevouts)
38075 writeSlice(hashSequence)
38076 writeSlice(input.hash)
38077 writeUInt32(input.index)
38078 writeVarSlice(prevOutScript)
38079 writeUInt64(value)
38080 writeUInt32(input.sequence)
38081 writeSlice(hashOutputs)
38082 writeUInt32(this.locktime)
38083 writeUInt32(hashType)
38084 return bcrypto.hash256(tbuffer)
38085 }
38086
38087 Transaction.prototype.getHash = function () {
38088 return bcrypto.hash256(this.__toBuffer(undefined, undefined, false))
38089 }
38090
38091 Transaction.prototype.getId = function () {
38092 // transaction hash's are displayed in reverse order
38093 return this.getHash().reverse().toString('hex')
38094 }
38095
38096 Transaction.prototype.toBuffer = function (buffer, initialOffset) {
38097 return this.__toBuffer(buffer, initialOffset, true)
38098 }
38099
38100 Transaction.prototype.__toBuffer = function (buffer, initialOffset, __allowWitness) {
38101 if (!buffer) buffer = Buffer.allocUnsafe(this.__byteLength(__allowWitness))
38102
38103 var offset = initialOffset || 0
38104 function writeSlice (slice) { offset += slice.copy(buffer, offset) }
38105 function writeUInt8 (i) { offset = buffer.writeUInt8(i, offset) }
38106 function writeUInt32 (i) { offset = buffer.writeUInt32LE(i, offset) }
38107 function writeInt32 (i) { offset = buffer.writeInt32LE(i, offset) }
38108 function writeUInt64 (i) { offset = bufferutils.writeUInt64LE(buffer, i, offset) }
38109 function writeVarInt (i) {
38110 varuint.encode(i, buffer, offset)
38111 offset += varuint.encode.bytes
38112 }
38113 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
38114 function writeVector (vector) { writeVarInt(vector.length); vector.forEach(writeVarSlice) }
38115
38116 writeInt32(this.version)
38117
38118 var hasWitnesses = __allowWitness && this.hasWitnesses()
38119
38120 if (hasWitnesses) {
38121 writeUInt8(Transaction.ADVANCED_TRANSACTION_MARKER)
38122 writeUInt8(Transaction.ADVANCED_TRANSACTION_FLAG)
38123 }
38124
38125 writeVarInt(this.ins.length)
38126
38127 this.ins.forEach(function (txIn) {
38128 writeSlice(txIn.hash)
38129 writeUInt32(txIn.index)
38130 writeVarSlice(txIn.script)
38131 writeUInt32(txIn.sequence)
38132 })
38133
38134 writeVarInt(this.outs.length)
38135 this.outs.forEach(function (txOut) {
38136 if (!txOut.valueBuffer) {
38137 writeUInt64(txOut.value)
38138 } else {
38139 writeSlice(txOut.valueBuffer)
38140 }
38141
38142 writeVarSlice(txOut.script)
38143 })
38144
38145 if (hasWitnesses) {
38146 this.ins.forEach(function (input) {
38147 writeVector(input.witness)
38148 })
38149 }
38150
38151 writeUInt32(this.locktime)
38152
38153 // avoid slicing unless necessary
38154 if (initialOffset !== undefined) return buffer.slice(initialOffset, offset)
38155 return buffer
38156 }
38157
38158 Transaction.prototype.toHex = function () {
38159 return this.toBuffer().toString('hex')
38160 }
38161
38162 Transaction.prototype.setInputScript = function (index, scriptSig) {
38163 typeforce(types.tuple(types.Number, types.Buffer), arguments)
38164
38165 this.ins[index].script = scriptSig
38166 }
38167
38168 Transaction.prototype.setWitness = function (index, witness) {
38169 typeforce(types.tuple(types.Number, [types.Buffer]), arguments)
38170
38171 this.ins[index].witness = witness
38172 }
38173
38174 module.exports = Transaction
38175
38176 },{"./bufferutils":46,"./crypto":47,"./script":54,"./types":80,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139,"varuint-bitcoin":141}],79:[function(require,module,exports){
38177 var Buffer = require('safe-buffer').Buffer
38178 var baddress = require('./address')
38179 var bcrypto = require('./crypto')
38180 var bscript = require('./script')
38181 var btemplates = require('./templates')
38182 var networks = require('./networks')
38183 var ops = require('bitcoin-ops')
38184 var typeforce = require('typeforce')
38185 var types = require('./types')
38186 var scriptTypes = btemplates.types
38187 var SIGNABLE = [btemplates.types.P2PKH, btemplates.types.P2PK, btemplates.types.MULTISIG]
38188 var P2SH = SIGNABLE.concat([btemplates.types.P2WPKH, btemplates.types.P2WSH])
38189
38190 var ECPair = require('./ecpair')
38191 var ECSignature = require('./ecsignature')
38192 var Transaction = require('./transaction')
38193
38194 function supportedType (type) {
38195 return SIGNABLE.indexOf(type) !== -1
38196 }
38197
38198 function supportedP2SHType (type) {
38199 return P2SH.indexOf(type) !== -1
38200 }
38201
38202 function extractChunks (type, chunks, script) {
38203 var pubKeys = []
38204 var signatures = []
38205 switch (type) {
38206 case scriptTypes.P2PKH:
38207 // if (redeemScript) throw new Error('Nonstandard... P2SH(P2PKH)')
38208 pubKeys = chunks.slice(1)
38209 signatures = chunks.slice(0, 1)
38210 break
38211
38212 case scriptTypes.P2PK:
38213 pubKeys[0] = script ? btemplates.pubKey.output.decode(script) : undefined
38214 signatures = chunks.slice(0, 1)
38215 break
38216
38217 case scriptTypes.MULTISIG:
38218 if (script) {
38219 var multisig = btemplates.multisig.output.decode(script)
38220 pubKeys = multisig.pubKeys
38221 }
38222
38223 signatures = chunks.slice(1).map(function (chunk) {
38224 return chunk.length === 0 ? undefined : chunk
38225 })
38226 break
38227 }
38228
38229 return {
38230 pubKeys: pubKeys,
38231 signatures: signatures
38232 }
38233 }
38234 function expandInput (scriptSig, witnessStack) {
38235 if (scriptSig.length === 0 && witnessStack.length === 0) return {}
38236
38237 var prevOutScript
38238 var prevOutType
38239 var scriptType
38240 var script
38241 var redeemScript
38242 var witnessScript
38243 var witnessScriptType
38244 var redeemScriptType
38245 var witness = false
38246 var p2wsh = false
38247 var p2sh = false
38248 var witnessProgram
38249 var chunks
38250
38251 var scriptSigChunks = bscript.decompile(scriptSig)
38252 var sigType = btemplates.classifyInput(scriptSigChunks, true)
38253 if (sigType === scriptTypes.P2SH) {
38254 p2sh = true
38255 redeemScript = scriptSigChunks[scriptSigChunks.length - 1]
38256 redeemScriptType = btemplates.classifyOutput(redeemScript)
38257 prevOutScript = btemplates.scriptHash.output.encode(bcrypto.hash160(redeemScript))
38258 prevOutType = scriptTypes.P2SH
38259 script = redeemScript
38260 }
38261
38262 var classifyWitness = btemplates.classifyWitness(witnessStack, true)
38263 if (classifyWitness === scriptTypes.P2WSH) {
38264 witnessScript = witnessStack[witnessStack.length - 1]
38265 witnessScriptType = btemplates.classifyOutput(witnessScript)
38266 p2wsh = true
38267 witness = true
38268 if (scriptSig.length === 0) {
38269 prevOutScript = btemplates.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
38270 prevOutType = scriptTypes.P2WSH
38271 if (redeemScript !== undefined) {
38272 throw new Error('Redeem script given when unnecessary')
38273 }
38274 // bare witness
38275 } else {
38276 if (!redeemScript) {
38277 throw new Error('No redeemScript provided for P2WSH, but scriptSig non-empty')
38278 }
38279 witnessProgram = btemplates.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
38280 if (!redeemScript.equals(witnessProgram)) {
38281 throw new Error('Redeem script didn\'t match witnessScript')
38282 }
38283 }
38284
38285 if (!supportedType(btemplates.classifyOutput(witnessScript))) {
38286 throw new Error('unsupported witness script')
38287 }
38288
38289 script = witnessScript
38290 scriptType = witnessScriptType
38291 chunks = witnessStack.slice(0, -1)
38292 } else if (classifyWitness === scriptTypes.P2WPKH) {
38293 witness = true
38294 var key = witnessStack[witnessStack.length - 1]
38295 var keyHash = bcrypto.hash160(key)
38296 if (scriptSig.length === 0) {
38297 prevOutScript = btemplates.witnessPubKeyHash.output.encode(keyHash)
38298 prevOutType = scriptTypes.P2WPKH
38299 if (typeof redeemScript !== 'undefined') {
38300 throw new Error('Redeem script given when unnecessary')
38301 }
38302 } else {
38303 if (!redeemScript) {
38304 throw new Error('No redeemScript provided for P2WPKH, but scriptSig wasn\'t empty')
38305 }
38306 witnessProgram = btemplates.witnessPubKeyHash.output.encode(keyHash)
38307 if (!redeemScript.equals(witnessProgram)) {
38308 throw new Error('Redeem script did not have the right witness program')
38309 }
38310 }
38311
38312 scriptType = scriptTypes.P2PKH
38313 chunks = witnessStack
38314 } else if (redeemScript) {
38315 if (!supportedP2SHType(redeemScriptType)) {
38316 throw new Error('Bad redeemscript!')
38317 }
38318
38319 script = redeemScript
38320 scriptType = redeemScriptType
38321 chunks = scriptSigChunks.slice(0, -1)
38322 } else {
38323 prevOutType = scriptType = btemplates.classifyInput(scriptSig)
38324 chunks = scriptSigChunks
38325 }
38326
38327 var expanded = extractChunks(scriptType, chunks, script)
38328
38329 var result = {
38330 pubKeys: expanded.pubKeys,
38331 signatures: expanded.signatures,
38332 prevOutScript: prevOutScript,
38333 prevOutType: prevOutType,
38334 signType: scriptType,
38335 signScript: script,
38336 witness: Boolean(witness)
38337 }
38338
38339 if (p2sh) {
38340 result.redeemScript = redeemScript
38341 result.redeemScriptType = redeemScriptType
38342 }
38343
38344 if (p2wsh) {
38345 result.witnessScript = witnessScript
38346 result.witnessScriptType = witnessScriptType
38347 }
38348
38349 return result
38350 }
38351
38352 // could be done in expandInput, but requires the original Transaction for hashForSignature
38353 function fixMultisigOrder (input, transaction, vin) {
38354 if (input.redeemScriptType !== scriptTypes.MULTISIG || !input.redeemScript) return
38355 if (input.pubKeys.length === input.signatures.length) return
38356
38357 var unmatched = input.signatures.concat()
38358
38359 input.signatures = input.pubKeys.map(function (pubKey) {
38360 var keyPair = ECPair.fromPublicKeyBuffer(pubKey)
38361 var match
38362
38363 // check for a signature
38364 unmatched.some(function (signature, i) {
38365 // skip if undefined || OP_0
38366 if (!signature) return false
38367
38368 // TODO: avoid O(n) hashForSignature
38369 var parsed = ECSignature.parseScriptSignature(signature)
38370 var hash = transaction.hashForSignature(vin, input.redeemScript, parsed.hashType)
38371
38372 // skip if signature does not match pubKey
38373 if (!keyPair.verify(hash, parsed.signature)) return false
38374
38375 // remove matched signature from unmatched
38376 unmatched[i] = undefined
38377 match = signature
38378
38379 return true
38380 })
38381
38382 return match
38383 })
38384 }
38385
38386 function expandOutput (script, scriptType, ourPubKey) {
38387 typeforce(types.Buffer, script)
38388
38389 var scriptChunks = bscript.decompile(script)
38390 if (!scriptType) {
38391 scriptType = btemplates.classifyOutput(script)
38392 }
38393
38394 var pubKeys = []
38395
38396 switch (scriptType) {
38397 // does our hash160(pubKey) match the output scripts?
38398 case scriptTypes.P2PKH:
38399 if (!ourPubKey) break
38400
38401 var pkh1 = scriptChunks[2]
38402 var pkh2 = bcrypto.hash160(ourPubKey)
38403 if (pkh1.equals(pkh2)) pubKeys = [ourPubKey]
38404 break
38405
38406 // does our hash160(pubKey) match the output scripts?
38407 case scriptTypes.P2WPKH:
38408 if (!ourPubKey) break
38409
38410 var wpkh1 = scriptChunks[1]
38411 var wpkh2 = bcrypto.hash160(ourPubKey)
38412 if (wpkh1.equals(wpkh2)) pubKeys = [ourPubKey]
38413 break
38414
38415 case scriptTypes.P2PK:
38416 pubKeys = scriptChunks.slice(0, 1)
38417 break
38418
38419 case scriptTypes.MULTISIG:
38420 pubKeys = scriptChunks.slice(1, -2)
38421 break
38422
38423 default: return { scriptType: scriptType }
38424 }
38425
38426 return {
38427 pubKeys: pubKeys,
38428 scriptType: scriptType,
38429 signatures: pubKeys.map(function () { return undefined })
38430 }
38431 }
38432
38433 function checkP2SHInput (input, redeemScriptHash) {
38434 if (input.prevOutType) {
38435 if (input.prevOutType !== scriptTypes.P2SH) throw new Error('PrevOutScript must be P2SH')
38436
38437 var prevOutScriptScriptHash = bscript.decompile(input.prevOutScript)[1]
38438 if (!prevOutScriptScriptHash.equals(redeemScriptHash)) throw new Error('Inconsistent hash160(RedeemScript)')
38439 }
38440 }
38441
38442 function checkP2WSHInput (input, witnessScriptHash) {
38443 if (input.prevOutType) {
38444 if (input.prevOutType !== scriptTypes.P2WSH) throw new Error('PrevOutScript must be P2WSH')
38445
38446 var scriptHash = bscript.decompile(input.prevOutScript)[1]
38447 if (!scriptHash.equals(witnessScriptHash)) throw new Error('Inconsistent sha25(WitnessScript)')
38448 }
38449 }
38450
38451 function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScript) {
38452 var expanded
38453 var prevOutType
38454 var prevOutScript
38455
38456 var p2sh = false
38457 var p2shType
38458 var redeemScriptHash
38459
38460 var witness = false
38461 var p2wsh = false
38462 var witnessType
38463 var witnessScriptHash
38464
38465 var signType
38466 var signScript
38467
38468 if (redeemScript && witnessScript) {
38469 redeemScriptHash = bcrypto.hash160(redeemScript)
38470 witnessScriptHash = bcrypto.sha256(witnessScript)
38471 checkP2SHInput(input, redeemScriptHash)
38472
38473 if (!redeemScript.equals(btemplates.witnessScriptHash.output.encode(witnessScriptHash))) throw new Error('Witness script inconsistent with redeem script')
38474
38475 expanded = expandOutput(witnessScript, undefined, kpPubKey)
38476 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
38477
38478 prevOutType = btemplates.types.P2SH
38479 prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
38480 p2sh = witness = p2wsh = true
38481 p2shType = btemplates.types.P2WSH
38482 signType = witnessType = expanded.scriptType
38483 signScript = witnessScript
38484 } else if (redeemScript) {
38485 redeemScriptHash = bcrypto.hash160(redeemScript)
38486 checkP2SHInput(input, redeemScriptHash)
38487
38488 expanded = expandOutput(redeemScript, undefined, kpPubKey)
38489 if (!expanded.pubKeys) throw new Error('RedeemScript not supported "' + bscript.toASM(redeemScript) + '"')
38490
38491 prevOutType = btemplates.types.P2SH
38492 prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
38493 p2sh = true
38494 signType = p2shType = expanded.scriptType
38495 signScript = redeemScript
38496 witness = signType === btemplates.types.P2WPKH
38497 } else if (witnessScript) {
38498 witnessScriptHash = bcrypto.sha256(witnessScript)
38499 checkP2WSHInput(input, witnessScriptHash)
38500
38501 expanded = expandOutput(witnessScript, undefined, kpPubKey)
38502 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
38503
38504 prevOutType = btemplates.types.P2WSH
38505 prevOutScript = btemplates.witnessScriptHash.output.encode(witnessScriptHash)
38506 witness = p2wsh = true
38507 signType = witnessType = expanded.scriptType
38508 signScript = witnessScript
38509 } else if (input.prevOutType) {
38510 // embedded scripts are not possible without a redeemScript
38511 if (input.prevOutType === scriptTypes.P2SH ||
38512 input.prevOutType === scriptTypes.P2WSH) {
38513 throw new Error('PrevOutScript is ' + input.prevOutType + ', requires redeemScript')
38514 }
38515
38516 prevOutType = input.prevOutType
38517 prevOutScript = input.prevOutScript
38518 expanded = expandOutput(input.prevOutScript, input.prevOutType, kpPubKey)
38519 if (!expanded.pubKeys) return
38520
38521 witness = (input.prevOutType === scriptTypes.P2WPKH)
38522 signType = prevOutType
38523 signScript = prevOutScript
38524 } else {
38525 prevOutScript = btemplates.pubKeyHash.output.encode(bcrypto.hash160(kpPubKey))
38526 expanded = expandOutput(prevOutScript, scriptTypes.P2PKH, kpPubKey)
38527
38528 prevOutType = scriptTypes.P2PKH
38529 witness = false
38530 signType = prevOutType
38531 signScript = prevOutScript
38532 }
38533
38534 if (signType === scriptTypes.P2WPKH) {
38535 signScript = btemplates.pubKeyHash.output.encode(btemplates.witnessPubKeyHash.output.decode(signScript))
38536 }
38537
38538 if (p2sh) {
38539 input.redeemScript = redeemScript
38540 input.redeemScriptType = p2shType
38541 }
38542
38543 if (p2wsh) {
38544 input.witnessScript = witnessScript
38545 input.witnessScriptType = witnessType
38546 }
38547
38548 input.pubKeys = expanded.pubKeys
38549 input.signatures = expanded.signatures
38550 input.signScript = signScript
38551 input.signType = signType
38552 input.prevOutScript = prevOutScript
38553 input.prevOutType = prevOutType
38554 input.witness = witness
38555 }
38556
38557 function buildStack (type, signatures, pubKeys, allowIncomplete) {
38558 if (type === scriptTypes.P2PKH) {
38559 if (signatures.length === 1 && Buffer.isBuffer(signatures[0]) && pubKeys.length === 1) return btemplates.pubKeyHash.input.encodeStack(signatures[0], pubKeys[0])
38560 } else if (type === scriptTypes.P2PK) {
38561 if (signatures.length === 1 && Buffer.isBuffer(signatures[0])) return btemplates.pubKey.input.encodeStack(signatures[0])
38562 } else if (type === scriptTypes.MULTISIG) {
38563 if (signatures.length > 0) {
38564 signatures = signatures.map(function (signature) {
38565 return signature || ops.OP_0
38566 })
38567 if (!allowIncomplete) {
38568 // remove blank signatures
38569 signatures = signatures.filter(function (x) { return x !== ops.OP_0 })
38570 }
38571
38572 return btemplates.multisig.input.encodeStack(signatures)
38573 }
38574 } else {
38575 throw new Error('Not yet supported')
38576 }
38577
38578 if (!allowIncomplete) throw new Error('Not enough signatures provided')
38579 return []
38580 }
38581
38582 function buildInput (input, allowIncomplete) {
38583 var scriptType = input.prevOutType
38584 var sig = []
38585 var witness = []
38586
38587 if (supportedType(scriptType)) {
38588 sig = buildStack(scriptType, input.signatures, input.pubKeys, allowIncomplete)
38589 }
38590
38591 var p2sh = false
38592 if (scriptType === btemplates.types.P2SH) {
38593 // We can remove this error later when we have a guarantee prepareInput
38594 // rejects unsignable scripts - it MUST be signable at this point.
38595 if (!allowIncomplete && !supportedP2SHType(input.redeemScriptType)) {
38596 throw new Error('Impossible to sign this type')
38597 }
38598
38599 if (supportedType(input.redeemScriptType)) {
38600 sig = buildStack(input.redeemScriptType, input.signatures, input.pubKeys, allowIncomplete)
38601 }
38602
38603 // If it wasn't SIGNABLE, it's witness, defer to that
38604 if (input.redeemScriptType) {
38605 p2sh = true
38606 scriptType = input.redeemScriptType
38607 }
38608 }
38609
38610 switch (scriptType) {
38611 // P2WPKH is a special case of P2PKH
38612 case btemplates.types.P2WPKH:
38613 witness = buildStack(btemplates.types.P2PKH, input.signatures, input.pubKeys, allowIncomplete)
38614 break
38615
38616 case btemplates.types.P2WSH:
38617 // We can remove this check later
38618 if (!allowIncomplete && !supportedType(input.witnessScriptType)) {
38619 throw new Error('Impossible to sign this type')
38620 }
38621
38622 if (supportedType(input.witnessScriptType)) {
38623 witness = buildStack(input.witnessScriptType, input.signatures, input.pubKeys, allowIncomplete)
38624 witness.push(input.witnessScript)
38625 scriptType = input.witnessScriptType
38626 }
38627
38628 break
38629 }
38630
38631 // append redeemScript if necessary
38632 if (p2sh) {
38633 sig.push(input.redeemScript)
38634 }
38635
38636 return {
38637 type: scriptType,
38638 script: bscript.compile(sig),
38639 witness: witness
38640 }
38641 }
38642
38643 function TransactionBuilder (network, maximumFeeRate) {
38644 this.prevTxMap = {}
38645 this.network = network || networks.bitcoin
38646
38647 // WARNING: This is __NOT__ to be relied on, its just another potential safety mechanism (safety in-depth)
38648 this.maximumFeeRate = maximumFeeRate || 1000
38649
38650 this.inputs = []
38651 this.tx = new Transaction()
38652 }
38653
38654 TransactionBuilder.prototype.setLockTime = function (locktime) {
38655 typeforce(types.UInt32, locktime)
38656
38657 // if any signatures exist, throw
38658 if (this.inputs.some(function (input) {
38659 if (!input.signatures) return false
38660
38661 return input.signatures.some(function (s) { return s })
38662 })) {
38663 throw new Error('No, this would invalidate signatures')
38664 }
38665
38666 this.tx.locktime = locktime
38667 }
38668
38669 TransactionBuilder.prototype.setVersion = function (version) {
38670 typeforce(types.UInt32, version)
38671
38672 // XXX: this might eventually become more complex depending on what the versions represent
38673 this.tx.version = version
38674 }
38675
38676 TransactionBuilder.fromTransaction = function (transaction, network) {
38677 var txb = new TransactionBuilder(network)
38678
38679 // Copy transaction fields
38680 txb.setVersion(transaction.version)
38681 txb.setLockTime(transaction.locktime)
38682
38683 // Copy outputs (done first to avoid signature invalidation)
38684 transaction.outs.forEach(function (txOut) {
38685 txb.addOutput(txOut.script, txOut.value)
38686 })
38687
38688 // Copy inputs
38689 transaction.ins.forEach(function (txIn) {
38690 txb.__addInputUnsafe(txIn.hash, txIn.index, {
38691 sequence: txIn.sequence,
38692 script: txIn.script,
38693 witness: txIn.witness
38694 })
38695 })
38696
38697 // fix some things not possible through the public API
38698 txb.inputs.forEach(function (input, i) {
38699 fixMultisigOrder(input, transaction, i)
38700 })
38701
38702 return txb
38703 }
38704
38705 TransactionBuilder.prototype.addInput = function (txHash, vout, sequence, prevOutScript) {
38706 if (!this.__canModifyInputs()) {
38707 throw new Error('No, this would invalidate signatures')
38708 }
38709
38710 var value
38711
38712 // is it a hex string?
38713 if (typeof txHash === 'string') {
38714 // transaction hashs's are displayed in reverse order, un-reverse it
38715 txHash = Buffer.from(txHash, 'hex').reverse()
38716
38717 // is it a Transaction object?
38718 } else if (txHash instanceof Transaction) {
38719 var txOut = txHash.outs[vout]
38720 prevOutScript = txOut.script
38721 value = txOut.value
38722
38723 txHash = txHash.getHash()
38724 }
38725
38726 return this.__addInputUnsafe(txHash, vout, {
38727 sequence: sequence,
38728 prevOutScript: prevOutScript,
38729 value: value
38730 })
38731 }
38732
38733 TransactionBuilder.prototype.__addInputUnsafe = function (txHash, vout, options) {
38734 if (Transaction.isCoinbaseHash(txHash)) {
38735 throw new Error('coinbase inputs not supported')
38736 }
38737
38738 var prevTxOut = txHash.toString('hex') + ':' + vout
38739 if (this.prevTxMap[prevTxOut] !== undefined) throw new Error('Duplicate TxOut: ' + prevTxOut)
38740
38741 var input = {}
38742
38743 // derive what we can from the scriptSig
38744 if (options.script !== undefined) {
38745 input = expandInput(options.script, options.witness || [])
38746 }
38747
38748 // if an input value was given, retain it
38749 if (options.value !== undefined) {
38750 input.value = options.value
38751 }
38752
38753 // derive what we can from the previous transactions output script
38754 if (!input.prevOutScript && options.prevOutScript) {
38755 var prevOutType
38756
38757 if (!input.pubKeys && !input.signatures) {
38758 var expanded = expandOutput(options.prevOutScript)
38759
38760 if (expanded.pubKeys) {
38761 input.pubKeys = expanded.pubKeys
38762 input.signatures = expanded.signatures
38763 }
38764
38765 prevOutType = expanded.scriptType
38766 }
38767
38768 input.prevOutScript = options.prevOutScript
38769 input.prevOutType = prevOutType || btemplates.classifyOutput(options.prevOutScript)
38770 }
38771
38772 var vin = this.tx.addInput(txHash, vout, options.sequence, options.scriptSig)
38773 this.inputs[vin] = input
38774 this.prevTxMap[prevTxOut] = vin
38775 return vin
38776 }
38777
38778 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
38779 if (!this.__canModifyOutputs()) {
38780 throw new Error('No, this would invalidate signatures')
38781 }
38782
38783 // Attempt to get a script if it's a base58 address string
38784 if (typeof scriptPubKey === 'string') {
38785 scriptPubKey = baddress.toOutputScript(scriptPubKey, this.network)
38786 }
38787
38788 return this.tx.addOutput(scriptPubKey, value)
38789 }
38790
38791 TransactionBuilder.prototype.build = function () {
38792 return this.__build(false)
38793 }
38794 TransactionBuilder.prototype.buildIncomplete = function () {
38795 return this.__build(true)
38796 }
38797
38798 TransactionBuilder.prototype.__build = function (allowIncomplete) {
38799 if (!allowIncomplete) {
38800 if (!this.tx.ins.length) throw new Error('Transaction has no inputs')
38801 if (!this.tx.outs.length) throw new Error('Transaction has no outputs')
38802 }
38803
38804 var tx = this.tx.clone()
38805 // Create script signatures from inputs
38806 this.inputs.forEach(function (input, i) {
38807 var scriptType = input.witnessScriptType || input.redeemScriptType || input.prevOutType
38808 if (!scriptType && !allowIncomplete) throw new Error('Transaction is not complete')
38809 var result = buildInput(input, allowIncomplete)
38810
38811 // skip if no result
38812 if (!allowIncomplete) {
38813 if (!supportedType(result.type) && result.type !== btemplates.types.P2WPKH) {
38814 throw new Error(result.type + ' not supported')
38815 }
38816 }
38817
38818 tx.setInputScript(i, result.script)
38819 tx.setWitness(i, result.witness)
38820 })
38821
38822 if (!allowIncomplete) {
38823 // do not rely on this, its merely a last resort
38824 if (this.__overMaximumFees(tx.virtualSize())) {
38825 throw new Error('Transaction has absurd fees')
38826 }
38827 }
38828
38829 return tx
38830 }
38831
38832 function canSign (input) {
38833 return input.prevOutScript !== undefined &&
38834 input.signScript !== undefined &&
38835 input.pubKeys !== undefined &&
38836 input.signatures !== undefined &&
38837 input.signatures.length === input.pubKeys.length &&
38838 input.pubKeys.length > 0 &&
38839 (
38840 input.witness === false ||
38841 (input.witness === true && input.value !== undefined)
38842 )
38843 }
38844
38845 TransactionBuilder.prototype.sign = function (vin, keyPair, redeemScript, hashType, witnessValue, witnessScript) {
38846 // TODO: remove keyPair.network matching in 4.0.0
38847 if (keyPair.network && keyPair.network !== this.network) throw new TypeError('Inconsistent network')
38848 if (!this.inputs[vin]) throw new Error('No input at index: ' + vin)
38849 hashType = hashType || Transaction.SIGHASH_ALL
38850
38851 var input = this.inputs[vin]
38852
38853 // if redeemScript was previously provided, enforce consistency
38854 if (input.redeemScript !== undefined &&
38855 redeemScript &&
38856 !input.redeemScript.equals(redeemScript)) {
38857 throw new Error('Inconsistent redeemScript')
38858 }
38859
38860 var kpPubKey = keyPair.publicKey || keyPair.getPublicKeyBuffer()
38861 if (!canSign(input)) {
38862 if (witnessValue !== undefined) {
38863 if (input.value !== undefined && input.value !== witnessValue) throw new Error('Input didn\'t match witnessValue')
38864 typeforce(types.Satoshi, witnessValue)
38865 input.value = witnessValue
38866 }
38867
38868 if (!canSign(input)) prepareInput(input, kpPubKey, redeemScript, witnessValue, witnessScript)
38869 if (!canSign(input)) throw Error(input.prevOutType + ' not supported')
38870 }
38871
38872 // ready to sign
38873 var signatureHash
38874 if (input.witness) {
38875 signatureHash = this.tx.hashForWitnessV0(vin, input.signScript, input.value, hashType)
38876 } else {
38877 signatureHash = this.tx.hashForSignature(vin, input.signScript, hashType)
38878 }
38879
38880 // enforce in order signing of public keys
38881 var signed = input.pubKeys.some(function (pubKey, i) {
38882 if (!kpPubKey.equals(pubKey)) return false
38883 if (input.signatures[i]) throw new Error('Signature already exists')
38884 if (kpPubKey.length !== 33 &&
38885 input.signType === scriptTypes.P2WPKH) throw new Error('BIP143 rejects uncompressed public keys in P2WPKH or P2WSH')
38886
38887 var signature = keyPair.sign(signatureHash)
38888 if (Buffer.isBuffer(signature)) signature = ECSignature.fromRSBuffer(signature)
38889
38890 input.signatures[i] = signature.toScriptSignature(hashType)
38891 return true
38892 })
38893
38894 if (!signed) throw new Error('Key pair cannot sign for this input')
38895 }
38896
38897 function signatureHashType (buffer) {
38898 return buffer.readUInt8(buffer.length - 1)
38899 }
38900
38901 TransactionBuilder.prototype.__canModifyInputs = function () {
38902 return this.inputs.every(function (input) {
38903 // any signatures?
38904 if (input.signatures === undefined) return true
38905
38906 return input.signatures.every(function (signature) {
38907 if (!signature) return true
38908 var hashType = signatureHashType(signature)
38909
38910 // if SIGHASH_ANYONECANPAY is set, signatures would not
38911 // be invalidated by more inputs
38912 return hashType & Transaction.SIGHASH_ANYONECANPAY
38913 })
38914 })
38915 }
38916
38917 TransactionBuilder.prototype.__canModifyOutputs = function () {
38918 var nInputs = this.tx.ins.length
38919 var nOutputs = this.tx.outs.length
38920
38921 return this.inputs.every(function (input) {
38922 if (input.signatures === undefined) return true
38923
38924 return input.signatures.every(function (signature) {
38925 if (!signature) return true
38926 var hashType = signatureHashType(signature)
38927
38928 var hashTypeMod = hashType & 0x1f
38929 if (hashTypeMod === Transaction.SIGHASH_NONE) return true
38930 if (hashTypeMod === Transaction.SIGHASH_SINGLE) {
38931 // if SIGHASH_SINGLE is set, and nInputs > nOutputs
38932 // some signatures would be invalidated by the addition
38933 // of more outputs
38934 return nInputs <= nOutputs
38935 }
38936 })
38937 })
38938 }
38939
38940 TransactionBuilder.prototype.__overMaximumFees = function (bytes) {
38941 // not all inputs will have .value defined
38942 var incoming = this.inputs.reduce(function (a, x) { return a + (x.value >>> 0) }, 0)
38943
38944 // but all outputs do, and if we have any input value
38945 // we can immediately determine if the outputs are too small
38946 var outgoing = this.tx.outs.reduce(function (a, x) { return a + x.value }, 0)
38947 var fee = incoming - outgoing
38948 var feeRate = fee / bytes
38949
38950 return feeRate > this.maximumFeeRate
38951 }
38952
38953 module.exports = TransactionBuilder
38954
38955 },{"./address":44,"./crypto":47,"./ecpair":49,"./ecsignature":50,"./networks":53,"./script":54,"./templates":56,"./transaction":78,"./types":80,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139}],80:[function(require,module,exports){
38956 var typeforce = require('typeforce')
38957
38958 var UINT31_MAX = Math.pow(2, 31) - 1
38959 function UInt31 (value) {
38960 return typeforce.UInt32(value) && value <= UINT31_MAX
38961 }
38962
38963 function BIP32Path (value) {
38964 return typeforce.String(value) && value.match(/^(m\/)?(\d+'?\/)*\d+'?$/)
38965 }
38966 BIP32Path.toJSON = function () { return 'BIP32 derivation path' }
38967
38968 var SATOSHI_MAX = 21 * 1e14
38969 function Satoshi (value) {
38970 return typeforce.UInt53(value) && value <= SATOSHI_MAX
38971 }
38972
38973 // external dependent types
38974 var BigInt = typeforce.quacksLike('BigInteger')
38975 var ECPoint = typeforce.quacksLike('Point')
38976
38977 // exposed, external API
38978 var ECSignature = typeforce.compile({ r: BigInt, s: BigInt })
38979 var Network = typeforce.compile({
38980 messagePrefix: typeforce.oneOf(typeforce.Buffer, typeforce.String),
38981 bip32: {
38982 public: typeforce.UInt32,
38983 private: typeforce.UInt32
38984 },
38985 pubKeyHash: typeforce.UInt8,
38986 scriptHash: typeforce.UInt8,
38987 wif: typeforce.UInt8
38988 })
38989
38990 // extend typeforce types with ours
38991 var types = {
38992 BigInt: BigInt,
38993 BIP32Path: BIP32Path,
38994 Buffer256bit: typeforce.BufferN(32),
38995 ECPoint: ECPoint,
38996 ECSignature: ECSignature,
38997 Hash160bit: typeforce.BufferN(20),
38998 Hash256bit: typeforce.BufferN(32),
38999 Network: Network,
39000 Satoshi: Satoshi,
39001 UInt31: UInt31
39002 }
39003
39004 for (var typeName in typeforce) {
39005 types[typeName] = typeforce[typeName]
39006 }
39007
39008 module.exports = types
39009
39010 },{"typeforce":139}],81:[function(require,module,exports){
39011 (function (module, exports) {
39012 'use strict';
39013
39014 // Utils
39015 function assert (val, msg) {
39016 if (!val) throw new Error(msg || 'Assertion failed');
39017 }
39018
39019 // Could use `inherits` module, but don't want to move from single file
39020 // architecture yet.
39021 function inherits (ctor, superCtor) {
39022 ctor.super_ = superCtor;
39023 var TempCtor = function () {};
39024 TempCtor.prototype = superCtor.prototype;
39025 ctor.prototype = new TempCtor();
39026 ctor.prototype.constructor = ctor;
39027 }
39028
39029 // BN
39030
39031 function BN (number, base, endian) {
39032 if (BN.isBN(number)) {
39033 return number;
39034 }
39035
39036 this.negative = 0;
39037 this.words = null;
39038 this.length = 0;
39039
39040 // Reduction context
39041 this.red = null;
39042
39043 if (number !== null) {
39044 if (base === 'le' || base === 'be') {
39045 endian = base;
39046 base = 10;
39047 }
39048
39049 this._init(number || 0, base || 10, endian || 'be');
39050 }
39051 }
39052 if (typeof module === 'object') {
39053 module.exports = BN;
39054 } else {
39055 exports.BN = BN;
39056 }
39057
39058 BN.BN = BN;
39059 BN.wordSize = 26;
39060
39061 var Buffer;
39062 try {
39063 Buffer = require('buf' + 'fer').Buffer;
39064 } catch (e) {
39065 }
39066
39067 BN.isBN = function isBN (num) {
39068 if (num instanceof BN) {
39069 return true;
39070 }
39071
39072 return num !== null && typeof num === 'object' &&
39073 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
39074 };
39075
39076 BN.max = function max (left, right) {
39077 if (left.cmp(right) > 0) return left;
39078 return right;
39079 };
39080
39081 BN.min = function min (left, right) {
39082 if (left.cmp(right) < 0) return left;
39083 return right;
39084 };
39085
39086 BN.prototype._init = function init (number, base, endian) {
39087 if (typeof number === 'number') {
39088 return this._initNumber(number, base, endian);
39089 }
39090
39091 if (typeof number === 'object') {
39092 return this._initArray(number, base, endian);
39093 }
39094
39095 if (base === 'hex') {
39096 base = 16;
39097 }
39098 assert(base === (base | 0) && base >= 2 && base <= 36);
39099
39100 number = number.toString().replace(/\s+/g, '');
39101 var start = 0;
39102 if (number[0] === '-') {
39103 start++;
39104 }
39105
39106 if (base === 16) {
39107 this._parseHex(number, start);
39108 } else {
39109 this._parseBase(number, base, start);
39110 }
39111
39112 if (number[0] === '-') {
39113 this.negative = 1;
39114 }
39115
39116 this.strip();
39117
39118 if (endian !== 'le') return;
39119
39120 this._initArray(this.toArray(), base, endian);
39121 };
39122
39123 BN.prototype._initNumber = function _initNumber (number, base, endian) {
39124 if (number < 0) {
39125 this.negative = 1;
39126 number = -number;
39127 }
39128 if (number < 0x4000000) {
39129 this.words = [ number & 0x3ffffff ];
39130 this.length = 1;
39131 } else if (number < 0x10000000000000) {
39132 this.words = [
39133 number & 0x3ffffff,
39134 (number / 0x4000000) & 0x3ffffff
39135 ];
39136 this.length = 2;
39137 } else {
39138 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
39139 this.words = [
39140 number & 0x3ffffff,
39141 (number / 0x4000000) & 0x3ffffff,
39142 1
39143 ];
39144 this.length = 3;
39145 }
39146
39147 if (endian !== 'le') return;
39148
39149 // Reverse the bytes
39150 this._initArray(this.toArray(), base, endian);
39151 };
39152
39153 BN.prototype._initArray = function _initArray (number, base, endian) {
39154 // Perhaps a Uint8Array
39155 assert(typeof number.length === 'number');
39156 if (number.length <= 0) {
39157 this.words = [ 0 ];
39158 this.length = 1;
39159 return this;
39160 }
39161
39162 this.length = Math.ceil(number.length / 3);
39163 this.words = new Array(this.length);
39164 for (var i = 0; i < this.length; i++) {
39165 this.words[i] = 0;
39166 }
39167
39168 var j, w;
39169 var off = 0;
39170 if (endian === 'be') {
39171 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
39172 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
39173 this.words[j] |= (w << off) & 0x3ffffff;
39174 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
39175 off += 24;
39176 if (off >= 26) {
39177 off -= 26;
39178 j++;
39179 }
39180 }
39181 } else if (endian === 'le') {
39182 for (i = 0, j = 0; i < number.length; i += 3) {
39183 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
39184 this.words[j] |= (w << off) & 0x3ffffff;
39185 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
39186 off += 24;
39187 if (off >= 26) {
39188 off -= 26;
39189 j++;
39190 }
39191 }
39192 }
39193 return this.strip();
39194 };
39195
39196 function parseHex (str, start, end) {
39197 var r = 0;
39198 var len = Math.min(str.length, end);
39199 for (var i = start; i < len; i++) {
39200 var c = str.charCodeAt(i) - 48;
39201
39202 r <<= 4;
39203
39204 // 'a' - 'f'
39205 if (c >= 49 && c <= 54) {
39206 r |= c - 49 + 0xa;
39207
39208 // 'A' - 'F'
39209 } else if (c >= 17 && c <= 22) {
39210 r |= c - 17 + 0xa;
39211
39212 // '0' - '9'
39213 } else {
39214 r |= c & 0xf;
39215 }
39216 }
39217 return r;
39218 }
39219
39220 BN.prototype._parseHex = function _parseHex (number, start) {
39221 // Create possibly bigger array to ensure that it fits the number
39222 this.length = Math.ceil((number.length - start) / 6);
39223 this.words = new Array(this.length);
39224 for (var i = 0; i < this.length; i++) {
39225 this.words[i] = 0;
39226 }
39227
39228 var j, w;
39229 // Scan 24-bit chunks and add them to the number
39230 var off = 0;
39231 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
39232 w = parseHex(number, i, i + 6);
39233 this.words[j] |= (w << off) & 0x3ffffff;
39234 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
39235 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
39236 off += 24;
39237 if (off >= 26) {
39238 off -= 26;
39239 j++;
39240 }
39241 }
39242 if (i + 6 !== start) {
39243 w = parseHex(number, start, i + 6);
39244 this.words[j] |= (w << off) & 0x3ffffff;
39245 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
39246 }
39247 this.strip();
39248 };
39249
39250 function parseBase (str, start, end, mul) {
39251 var r = 0;
39252 var len = Math.min(str.length, end);
39253 for (var i = start; i < len; i++) {
39254 var c = str.charCodeAt(i) - 48;
39255
39256 r *= mul;
39257
39258 // 'a'
39259 if (c >= 49) {
39260 r += c - 49 + 0xa;
39261
39262 // 'A'
39263 } else if (c >= 17) {
39264 r += c - 17 + 0xa;
39265
39266 // '0' - '9'
39267 } else {
39268 r += c;
39269 }
39270 }
39271 return r;
39272 }
39273
39274 BN.prototype._parseBase = function _parseBase (number, base, start) {
39275 // Initialize as zero
39276 this.words = [ 0 ];
39277 this.length = 1;
39278
39279 // Find length of limb in base
39280 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
39281 limbLen++;
39282 }
39283 limbLen--;
39284 limbPow = (limbPow / base) | 0;
39285
39286 var total = number.length - start;
39287 var mod = total % limbLen;
39288 var end = Math.min(total, total - mod) + start;
39289
39290 var word = 0;
39291 for (var i = start; i < end; i += limbLen) {
39292 word = parseBase(number, i, i + limbLen, base);
39293
39294 this.imuln(limbPow);
39295 if (this.words[0] + word < 0x4000000) {
39296 this.words[0] += word;
39297 } else {
39298 this._iaddn(word);
39299 }
39300 }
39301
39302 if (mod !== 0) {
39303 var pow = 1;
39304 word = parseBase(number, i, number.length, base);
39305
39306 for (i = 0; i < mod; i++) {
39307 pow *= base;
39308 }
39309
39310 this.imuln(pow);
39311 if (this.words[0] + word < 0x4000000) {
39312 this.words[0] += word;
39313 } else {
39314 this._iaddn(word);
39315 }
39316 }
39317 };
39318
39319 BN.prototype.copy = function copy (dest) {
39320 dest.words = new Array(this.length);
39321 for (var i = 0; i < this.length; i++) {
39322 dest.words[i] = this.words[i];
39323 }
39324 dest.length = this.length;
39325 dest.negative = this.negative;
39326 dest.red = this.red;
39327 };
39328
39329 BN.prototype.clone = function clone () {
39330 var r = new BN(null);
39331 this.copy(r);
39332 return r;
39333 };
39334
39335 BN.prototype._expand = function _expand (size) {
39336 while (this.length < size) {
39337 this.words[this.length++] = 0;
39338 }
39339 return this;
39340 };
39341
39342 // Remove leading `0` from `this`
39343 BN.prototype.strip = function strip () {
39344 while (this.length > 1 && this.words[this.length - 1] === 0) {
39345 this.length--;
39346 }
39347 return this._normSign();
39348 };
39349
39350 BN.prototype._normSign = function _normSign () {
39351 // -0 = 0
39352 if (this.length === 1 && this.words[0] === 0) {
39353 this.negative = 0;
39354 }
39355 return this;
39356 };
39357
39358 BN.prototype.inspect = function inspect () {
39359 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
39360 };
39361
39362 /*
39363
39364 var zeros = [];
39365 var groupSizes = [];
39366 var groupBases = [];
39367
39368 var s = '';
39369 var i = -1;
39370 while (++i < BN.wordSize) {
39371 zeros[i] = s;
39372 s += '0';
39373 }
39374 groupSizes[0] = 0;
39375 groupSizes[1] = 0;
39376 groupBases[0] = 0;
39377 groupBases[1] = 0;
39378 var base = 2 - 1;
39379 while (++base < 36 + 1) {
39380 var groupSize = 0;
39381 var groupBase = 1;
39382 while (groupBase < (1 << BN.wordSize) / base) {
39383 groupBase *= base;
39384 groupSize += 1;
39385 }
39386 groupSizes[base] = groupSize;
39387 groupBases[base] = groupBase;
39388 }
39389
39390 */
39391
39392 var zeros = [
39393 '',
39394 '0',
39395 '00',
39396 '000',
39397 '0000',
39398 '00000',
39399 '000000',
39400 '0000000',
39401 '00000000',
39402 '000000000',
39403 '0000000000',
39404 '00000000000',
39405 '000000000000',
39406 '0000000000000',
39407 '00000000000000',
39408 '000000000000000',
39409 '0000000000000000',
39410 '00000000000000000',
39411 '000000000000000000',
39412 '0000000000000000000',
39413 '00000000000000000000',
39414 '000000000000000000000',
39415 '0000000000000000000000',
39416 '00000000000000000000000',
39417 '000000000000000000000000',
39418 '0000000000000000000000000'
39419 ];
39420
39421 var groupSizes = [
39422 0, 0,
39423 25, 16, 12, 11, 10, 9, 8,
39424 8, 7, 7, 7, 7, 6, 6,
39425 6, 6, 6, 6, 6, 5, 5,
39426 5, 5, 5, 5, 5, 5, 5,
39427 5, 5, 5, 5, 5, 5, 5
39428 ];
39429
39430 var groupBases = [
39431 0, 0,
39432 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
39433 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
39434 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
39435 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
39436 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
39437 ];
39438
39439 BN.prototype.toString = function toString (base, padding) {
39440 base = base || 10;
39441 padding = padding | 0 || 1;
39442
39443 var out;
39444 if (base === 16 || base === 'hex') {
39445 out = '';
39446 var off = 0;
39447 var carry = 0;
39448 for (var i = 0; i < this.length; i++) {
39449 var w = this.words[i];
39450 var word = (((w << off) | carry) & 0xffffff).toString(16);
39451 carry = (w >>> (24 - off)) & 0xffffff;
39452 if (carry !== 0 || i !== this.length - 1) {
39453 out = zeros[6 - word.length] + word + out;
39454 } else {
39455 out = word + out;
39456 }
39457 off += 2;
39458 if (off >= 26) {
39459 off -= 26;
39460 i--;
39461 }
39462 }
39463 if (carry !== 0) {
39464 out = carry.toString(16) + out;
39465 }
39466 while (out.length % padding !== 0) {
39467 out = '0' + out;
39468 }
39469 if (this.negative !== 0) {
39470 out = '-' + out;
39471 }
39472 return out;
39473 }
39474
39475 if (base === (base | 0) && base >= 2 && base <= 36) {
39476 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
39477 var groupSize = groupSizes[base];
39478 // var groupBase = Math.pow(base, groupSize);
39479 var groupBase = groupBases[base];
39480 out = '';
39481 var c = this.clone();
39482 c.negative = 0;
39483 while (!c.isZero()) {
39484 var r = c.modn(groupBase).toString(base);
39485 c = c.idivn(groupBase);
39486
39487 if (!c.isZero()) {
39488 out = zeros[groupSize - r.length] + r + out;
39489 } else {
39490 out = r + out;
39491 }
39492 }
39493 if (this.isZero()) {
39494 out = '0' + out;
39495 }
39496 while (out.length % padding !== 0) {
39497 out = '0' + out;
39498 }
39499 if (this.negative !== 0) {
39500 out = '-' + out;
39501 }
39502 return out;
39503 }
39504
39505 assert(false, 'Base should be between 2 and 36');
39506 };
39507
39508 BN.prototype.toNumber = function toNumber () {
39509 var ret = this.words[0];
39510 if (this.length === 2) {
39511 ret += this.words[1] * 0x4000000;
39512 } else if (this.length === 3 && this.words[2] === 0x01) {
39513 // NOTE: at this stage it is known that the top bit is set
39514 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
39515 } else if (this.length > 2) {
39516 assert(false, 'Number can only safely store up to 53 bits');
39517 }
39518 return (this.negative !== 0) ? -ret : ret;
39519 };
39520
39521 BN.prototype.toJSON = function toJSON () {
39522 return this.toString(16);
39523 };
39524
39525 BN.prototype.toBuffer = function toBuffer (endian, length) {
39526 assert(typeof Buffer !== 'undefined');
39527 return this.toArrayLike(Buffer, endian, length);
39528 };
39529
39530 BN.prototype.toArray = function toArray (endian, length) {
39531 return this.toArrayLike(Array, endian, length);
39532 };
39533
39534 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
39535 var byteLength = this.byteLength();
39536 var reqLength = length || Math.max(1, byteLength);
39537 assert(byteLength <= reqLength, 'byte array longer than desired length');
39538 assert(reqLength > 0, 'Requested array length <= 0');
39539
39540 this.strip();
39541 var littleEndian = endian === 'le';
39542 var res = new ArrayType(reqLength);
39543
39544 var b, i;
39545 var q = this.clone();
39546 if (!littleEndian) {
39547 // Assume big-endian
39548 for (i = 0; i < reqLength - byteLength; i++) {
39549 res[i] = 0;
39550 }
39551
39552 for (i = 0; !q.isZero(); i++) {
39553 b = q.andln(0xff);
39554 q.iushrn(8);
39555
39556 res[reqLength - i - 1] = b;
39557 }
39558 } else {
39559 for (i = 0; !q.isZero(); i++) {
39560 b = q.andln(0xff);
39561 q.iushrn(8);
39562
39563 res[i] = b;
39564 }
39565
39566 for (; i < reqLength; i++) {
39567 res[i] = 0;
39568 }
39569 }
39570
39571 return res;
39572 };
39573
39574 if (Math.clz32) {
39575 BN.prototype._countBits = function _countBits (w) {
39576 return 32 - Math.clz32(w);
39577 };
39578 } else {
39579 BN.prototype._countBits = function _countBits (w) {
39580 var t = w;
39581 var r = 0;
39582 if (t >= 0x1000) {
39583 r += 13;
39584 t >>>= 13;
39585 }
39586 if (t >= 0x40) {
39587 r += 7;
39588 t >>>= 7;
39589 }
39590 if (t >= 0x8) {
39591 r += 4;
39592 t >>>= 4;
39593 }
39594 if (t >= 0x02) {
39595 r += 2;
39596 t >>>= 2;
39597 }
39598 return r + t;
39599 };
39600 }
39601
39602 BN.prototype._zeroBits = function _zeroBits (w) {
39603 // Short-cut
39604 if (w === 0) return 26;
39605
39606 var t = w;
39607 var r = 0;
39608 if ((t & 0x1fff) === 0) {
39609 r += 13;
39610 t >>>= 13;
39611 }
39612 if ((t & 0x7f) === 0) {
39613 r += 7;
39614 t >>>= 7;
39615 }
39616 if ((t & 0xf) === 0) {
39617 r += 4;
39618 t >>>= 4;
39619 }
39620 if ((t & 0x3) === 0) {
39621 r += 2;
39622 t >>>= 2;
39623 }
39624 if ((t & 0x1) === 0) {
39625 r++;
39626 }
39627 return r;
39628 };
39629
39630 // Return number of used bits in a BN
39631 BN.prototype.bitLength = function bitLength () {
39632 var w = this.words[this.length - 1];
39633 var hi = this._countBits(w);
39634 return (this.length - 1) * 26 + hi;
39635 };
39636
39637 function toBitArray (num) {
39638 var w = new Array(num.bitLength());
39639
39640 for (var bit = 0; bit < w.length; bit++) {
39641 var off = (bit / 26) | 0;
39642 var wbit = bit % 26;
39643
39644 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
39645 }
39646
39647 return w;
39648 }
39649
39650 // Number of trailing zero bits
39651 BN.prototype.zeroBits = function zeroBits () {
39652 if (this.isZero()) return 0;
39653
39654 var r = 0;
39655 for (var i = 0; i < this.length; i++) {
39656 var b = this._zeroBits(this.words[i]);
39657 r += b;
39658 if (b !== 26) break;
39659 }
39660 return r;
39661 };
39662
39663 BN.prototype.byteLength = function byteLength () {
39664 return Math.ceil(this.bitLength() / 8);
39665 };
39666
39667 BN.prototype.toTwos = function toTwos (width) {
39668 if (this.negative !== 0) {
39669 return this.abs().inotn(width).iaddn(1);
39670 }
39671 return this.clone();
39672 };
39673
39674 BN.prototype.fromTwos = function fromTwos (width) {
39675 if (this.testn(width - 1)) {
39676 return this.notn(width).iaddn(1).ineg();
39677 }
39678 return this.clone();
39679 };
39680
39681 BN.prototype.isNeg = function isNeg () {
39682 return this.negative !== 0;
39683 };
39684
39685 // Return negative clone of `this`
39686 BN.prototype.neg = function neg () {
39687 return this.clone().ineg();
39688 };
39689
39690 BN.prototype.ineg = function ineg () {
39691 if (!this.isZero()) {
39692 this.negative ^= 1;
39693 }
39694
39695 return this;
39696 };
39697
39698 // Or `num` with `this` in-place
39699 BN.prototype.iuor = function iuor (num) {
39700 while (this.length < num.length) {
39701 this.words[this.length++] = 0;
39702 }
39703
39704 for (var i = 0; i < num.length; i++) {
39705 this.words[i] = this.words[i] | num.words[i];
39706 }
39707
39708 return this.strip();
39709 };
39710
39711 BN.prototype.ior = function ior (num) {
39712 assert((this.negative | num.negative) === 0);
39713 return this.iuor(num);
39714 };
39715
39716 // Or `num` with `this`
39717 BN.prototype.or = function or (num) {
39718 if (this.length > num.length) return this.clone().ior(num);
39719 return num.clone().ior(this);
39720 };
39721
39722 BN.prototype.uor = function uor (num) {
39723 if (this.length > num.length) return this.clone().iuor(num);
39724 return num.clone().iuor(this);
39725 };
39726
39727 // And `num` with `this` in-place
39728 BN.prototype.iuand = function iuand (num) {
39729 // b = min-length(num, this)
39730 var b;
39731 if (this.length > num.length) {
39732 b = num;
39733 } else {
39734 b = this;
39735 }
39736
39737 for (var i = 0; i < b.length; i++) {
39738 this.words[i] = this.words[i] & num.words[i];
39739 }
39740
39741 this.length = b.length;
39742
39743 return this.strip();
39744 };
39745
39746 BN.prototype.iand = function iand (num) {
39747 assert((this.negative | num.negative) === 0);
39748 return this.iuand(num);
39749 };
39750
39751 // And `num` with `this`
39752 BN.prototype.and = function and (num) {
39753 if (this.length > num.length) return this.clone().iand(num);
39754 return num.clone().iand(this);
39755 };
39756
39757 BN.prototype.uand = function uand (num) {
39758 if (this.length > num.length) return this.clone().iuand(num);
39759 return num.clone().iuand(this);
39760 };
39761
39762 // Xor `num` with `this` in-place
39763 BN.prototype.iuxor = function iuxor (num) {
39764 // a.length > b.length
39765 var a;
39766 var b;
39767 if (this.length > num.length) {
39768 a = this;
39769 b = num;
39770 } else {
39771 a = num;
39772 b = this;
39773 }
39774
39775 for (var i = 0; i < b.length; i++) {
39776 this.words[i] = a.words[i] ^ b.words[i];
39777 }
39778
39779 if (this !== a) {
39780 for (; i < a.length; i++) {
39781 this.words[i] = a.words[i];
39782 }
39783 }
39784
39785 this.length = a.length;
39786
39787 return this.strip();
39788 };
39789
39790 BN.prototype.ixor = function ixor (num) {
39791 assert((this.negative | num.negative) === 0);
39792 return this.iuxor(num);
39793 };
39794
39795 // Xor `num` with `this`
39796 BN.prototype.xor = function xor (num) {
39797 if (this.length > num.length) return this.clone().ixor(num);
39798 return num.clone().ixor(this);
39799 };
39800
39801 BN.prototype.uxor = function uxor (num) {
39802 if (this.length > num.length) return this.clone().iuxor(num);
39803 return num.clone().iuxor(this);
39804 };
39805
39806 // Not ``this`` with ``width`` bitwidth
39807 BN.prototype.inotn = function inotn (width) {
39808 assert(typeof width === 'number' && width >= 0);
39809
39810 var bytesNeeded = Math.ceil(width / 26) | 0;
39811 var bitsLeft = width % 26;
39812
39813 // Extend the buffer with leading zeroes
39814 this._expand(bytesNeeded);
39815
39816 if (bitsLeft > 0) {
39817 bytesNeeded--;
39818 }
39819
39820 // Handle complete words
39821 for (var i = 0; i < bytesNeeded; i++) {
39822 this.words[i] = ~this.words[i] & 0x3ffffff;
39823 }
39824
39825 // Handle the residue
39826 if (bitsLeft > 0) {
39827 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
39828 }
39829
39830 // And remove leading zeroes
39831 return this.strip();
39832 };
39833
39834 BN.prototype.notn = function notn (width) {
39835 return this.clone().inotn(width);
39836 };
39837
39838 // Set `bit` of `this`
39839 BN.prototype.setn = function setn (bit, val) {
39840 assert(typeof bit === 'number' && bit >= 0);
39841
39842 var off = (bit / 26) | 0;
39843 var wbit = bit % 26;
39844
39845 this._expand(off + 1);
39846
39847 if (val) {
39848 this.words[off] = this.words[off] | (1 << wbit);
39849 } else {
39850 this.words[off] = this.words[off] & ~(1 << wbit);
39851 }
39852
39853 return this.strip();
39854 };
39855
39856 // Add `num` to `this` in-place
39857 BN.prototype.iadd = function iadd (num) {
39858 var r;
39859
39860 // negative + positive
39861 if (this.negative !== 0 && num.negative === 0) {
39862 this.negative = 0;
39863 r = this.isub(num);
39864 this.negative ^= 1;
39865 return this._normSign();
39866
39867 // positive + negative
39868 } else if (this.negative === 0 && num.negative !== 0) {
39869 num.negative = 0;
39870 r = this.isub(num);
39871 num.negative = 1;
39872 return r._normSign();
39873 }
39874
39875 // a.length > b.length
39876 var a, b;
39877 if (this.length > num.length) {
39878 a = this;
39879 b = num;
39880 } else {
39881 a = num;
39882 b = this;
39883 }
39884
39885 var carry = 0;
39886 for (var i = 0; i < b.length; i++) {
39887 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
39888 this.words[i] = r & 0x3ffffff;
39889 carry = r >>> 26;
39890 }
39891 for (; carry !== 0 && i < a.length; i++) {
39892 r = (a.words[i] | 0) + carry;
39893 this.words[i] = r & 0x3ffffff;
39894 carry = r >>> 26;
39895 }
39896
39897 this.length = a.length;
39898 if (carry !== 0) {
39899 this.words[this.length] = carry;
39900 this.length++;
39901 // Copy the rest of the words
39902 } else if (a !== this) {
39903 for (; i < a.length; i++) {
39904 this.words[i] = a.words[i];
39905 }
39906 }
39907
39908 return this;
39909 };
39910
39911 // Add `num` to `this`
39912 BN.prototype.add = function add (num) {
39913 var res;
39914 if (num.negative !== 0 && this.negative === 0) {
39915 num.negative = 0;
39916 res = this.sub(num);
39917 num.negative ^= 1;
39918 return res;
39919 } else if (num.negative === 0 && this.negative !== 0) {
39920 this.negative = 0;
39921 res = num.sub(this);
39922 this.negative = 1;
39923 return res;
39924 }
39925
39926 if (this.length > num.length) return this.clone().iadd(num);
39927
39928 return num.clone().iadd(this);
39929 };
39930
39931 // Subtract `num` from `this` in-place
39932 BN.prototype.isub = function isub (num) {
39933 // this - (-num) = this + num
39934 if (num.negative !== 0) {
39935 num.negative = 0;
39936 var r = this.iadd(num);
39937 num.negative = 1;
39938 return r._normSign();
39939
39940 // -this - num = -(this + num)
39941 } else if (this.negative !== 0) {
39942 this.negative = 0;
39943 this.iadd(num);
39944 this.negative = 1;
39945 return this._normSign();
39946 }
39947
39948 // At this point both numbers are positive
39949 var cmp = this.cmp(num);
39950
39951 // Optimization - zeroify
39952 if (cmp === 0) {
39953 this.negative = 0;
39954 this.length = 1;
39955 this.words[0] = 0;
39956 return this;
39957 }
39958
39959 // a > b
39960 var a, b;
39961 if (cmp > 0) {
39962 a = this;
39963 b = num;
39964 } else {
39965 a = num;
39966 b = this;
39967 }
39968
39969 var carry = 0;
39970 for (var i = 0; i < b.length; i++) {
39971 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
39972 carry = r >> 26;
39973 this.words[i] = r & 0x3ffffff;
39974 }
39975 for (; carry !== 0 && i < a.length; i++) {
39976 r = (a.words[i] | 0) + carry;
39977 carry = r >> 26;
39978 this.words[i] = r & 0x3ffffff;
39979 }
39980
39981 // Copy rest of the words
39982 if (carry === 0 && i < a.length && a !== this) {
39983 for (; i < a.length; i++) {
39984 this.words[i] = a.words[i];
39985 }
39986 }
39987
39988 this.length = Math.max(this.length, i);
39989
39990 if (a !== this) {
39991 this.negative = 1;
39992 }
39993
39994 return this.strip();
39995 };
39996
39997 // Subtract `num` from `this`
39998 BN.prototype.sub = function sub (num) {
39999 return this.clone().isub(num);
40000 };
40001
40002 function smallMulTo (self, num, out) {
40003 out.negative = num.negative ^ self.negative;
40004 var len = (self.length + num.length) | 0;
40005 out.length = len;
40006 len = (len - 1) | 0;
40007
40008 // Peel one iteration (compiler can't do it, because of code complexity)
40009 var a = self.words[0] | 0;
40010 var b = num.words[0] | 0;
40011 var r = a * b;
40012
40013 var lo = r & 0x3ffffff;
40014 var carry = (r / 0x4000000) | 0;
40015 out.words[0] = lo;
40016
40017 for (var k = 1; k < len; k++) {
40018 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
40019 // note that ncarry could be >= 0x3ffffff
40020 var ncarry = carry >>> 26;
40021 var rword = carry & 0x3ffffff;
40022 var maxJ = Math.min(k, num.length - 1);
40023 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
40024 var i = (k - j) | 0;
40025 a = self.words[i] | 0;
40026 b = num.words[j] | 0;
40027 r = a * b + rword;
40028 ncarry += (r / 0x4000000) | 0;
40029 rword = r & 0x3ffffff;
40030 }
40031 out.words[k] = rword | 0;
40032 carry = ncarry | 0;
40033 }
40034 if (carry !== 0) {
40035 out.words[k] = carry | 0;
40036 } else {
40037 out.length--;
40038 }
40039
40040 return out.strip();
40041 }
40042
40043 // TODO(indutny): it may be reasonable to omit it for users who don't need
40044 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
40045 // multiplication (like elliptic secp256k1).
40046 var comb10MulTo = function comb10MulTo (self, num, out) {
40047 var a = self.words;
40048 var b = num.words;
40049 var o = out.words;
40050 var c = 0;
40051 var lo;
40052 var mid;
40053 var hi;
40054 var a0 = a[0] | 0;
40055 var al0 = a0 & 0x1fff;
40056 var ah0 = a0 >>> 13;
40057 var a1 = a[1] | 0;
40058 var al1 = a1 & 0x1fff;
40059 var ah1 = a1 >>> 13;
40060 var a2 = a[2] | 0;
40061 var al2 = a2 & 0x1fff;
40062 var ah2 = a2 >>> 13;
40063 var a3 = a[3] | 0;
40064 var al3 = a3 & 0x1fff;
40065 var ah3 = a3 >>> 13;
40066 var a4 = a[4] | 0;
40067 var al4 = a4 & 0x1fff;
40068 var ah4 = a4 >>> 13;
40069 var a5 = a[5] | 0;
40070 var al5 = a5 & 0x1fff;
40071 var ah5 = a5 >>> 13;
40072 var a6 = a[6] | 0;
40073 var al6 = a6 & 0x1fff;
40074 var ah6 = a6 >>> 13;
40075 var a7 = a[7] | 0;
40076 var al7 = a7 & 0x1fff;
40077 var ah7 = a7 >>> 13;
40078 var a8 = a[8] | 0;
40079 var al8 = a8 & 0x1fff;
40080 var ah8 = a8 >>> 13;
40081 var a9 = a[9] | 0;
40082 var al9 = a9 & 0x1fff;
40083 var ah9 = a9 >>> 13;
40084 var b0 = b[0] | 0;
40085 var bl0 = b0 & 0x1fff;
40086 var bh0 = b0 >>> 13;
40087 var b1 = b[1] | 0;
40088 var bl1 = b1 & 0x1fff;
40089 var bh1 = b1 >>> 13;
40090 var b2 = b[2] | 0;
40091 var bl2 = b2 & 0x1fff;
40092 var bh2 = b2 >>> 13;
40093 var b3 = b[3] | 0;
40094 var bl3 = b3 & 0x1fff;
40095 var bh3 = b3 >>> 13;
40096 var b4 = b[4] | 0;
40097 var bl4 = b4 & 0x1fff;
40098 var bh4 = b4 >>> 13;
40099 var b5 = b[5] | 0;
40100 var bl5 = b5 & 0x1fff;
40101 var bh5 = b5 >>> 13;
40102 var b6 = b[6] | 0;
40103 var bl6 = b6 & 0x1fff;
40104 var bh6 = b6 >>> 13;
40105 var b7 = b[7] | 0;
40106 var bl7 = b7 & 0x1fff;
40107 var bh7 = b7 >>> 13;
40108 var b8 = b[8] | 0;
40109 var bl8 = b8 & 0x1fff;
40110 var bh8 = b8 >>> 13;
40111 var b9 = b[9] | 0;
40112 var bl9 = b9 & 0x1fff;
40113 var bh9 = b9 >>> 13;
40114
40115 out.negative = self.negative ^ num.negative;
40116 out.length = 19;
40117 /* k = 0 */
40118 lo = Math.imul(al0, bl0);
40119 mid = Math.imul(al0, bh0);
40120 mid = (mid + Math.imul(ah0, bl0)) | 0;
40121 hi = Math.imul(ah0, bh0);
40122 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40123 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
40124 w0 &= 0x3ffffff;
40125 /* k = 1 */
40126 lo = Math.imul(al1, bl0);
40127 mid = Math.imul(al1, bh0);
40128 mid = (mid + Math.imul(ah1, bl0)) | 0;
40129 hi = Math.imul(ah1, bh0);
40130 lo = (lo + Math.imul(al0, bl1)) | 0;
40131 mid = (mid + Math.imul(al0, bh1)) | 0;
40132 mid = (mid + Math.imul(ah0, bl1)) | 0;
40133 hi = (hi + Math.imul(ah0, bh1)) | 0;
40134 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40135 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
40136 w1 &= 0x3ffffff;
40137 /* k = 2 */
40138 lo = Math.imul(al2, bl0);
40139 mid = Math.imul(al2, bh0);
40140 mid = (mid + Math.imul(ah2, bl0)) | 0;
40141 hi = Math.imul(ah2, bh0);
40142 lo = (lo + Math.imul(al1, bl1)) | 0;
40143 mid = (mid + Math.imul(al1, bh1)) | 0;
40144 mid = (mid + Math.imul(ah1, bl1)) | 0;
40145 hi = (hi + Math.imul(ah1, bh1)) | 0;
40146 lo = (lo + Math.imul(al0, bl2)) | 0;
40147 mid = (mid + Math.imul(al0, bh2)) | 0;
40148 mid = (mid + Math.imul(ah0, bl2)) | 0;
40149 hi = (hi + Math.imul(ah0, bh2)) | 0;
40150 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40151 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
40152 w2 &= 0x3ffffff;
40153 /* k = 3 */
40154 lo = Math.imul(al3, bl0);
40155 mid = Math.imul(al3, bh0);
40156 mid = (mid + Math.imul(ah3, bl0)) | 0;
40157 hi = Math.imul(ah3, bh0);
40158 lo = (lo + Math.imul(al2, bl1)) | 0;
40159 mid = (mid + Math.imul(al2, bh1)) | 0;
40160 mid = (mid + Math.imul(ah2, bl1)) | 0;
40161 hi = (hi + Math.imul(ah2, bh1)) | 0;
40162 lo = (lo + Math.imul(al1, bl2)) | 0;
40163 mid = (mid + Math.imul(al1, bh2)) | 0;
40164 mid = (mid + Math.imul(ah1, bl2)) | 0;
40165 hi = (hi + Math.imul(ah1, bh2)) | 0;
40166 lo = (lo + Math.imul(al0, bl3)) | 0;
40167 mid = (mid + Math.imul(al0, bh3)) | 0;
40168 mid = (mid + Math.imul(ah0, bl3)) | 0;
40169 hi = (hi + Math.imul(ah0, bh3)) | 0;
40170 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40171 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
40172 w3 &= 0x3ffffff;
40173 /* k = 4 */
40174 lo = Math.imul(al4, bl0);
40175 mid = Math.imul(al4, bh0);
40176 mid = (mid + Math.imul(ah4, bl0)) | 0;
40177 hi = Math.imul(ah4, bh0);
40178 lo = (lo + Math.imul(al3, bl1)) | 0;
40179 mid = (mid + Math.imul(al3, bh1)) | 0;
40180 mid = (mid + Math.imul(ah3, bl1)) | 0;
40181 hi = (hi + Math.imul(ah3, bh1)) | 0;
40182 lo = (lo + Math.imul(al2, bl2)) | 0;
40183 mid = (mid + Math.imul(al2, bh2)) | 0;
40184 mid = (mid + Math.imul(ah2, bl2)) | 0;
40185 hi = (hi + Math.imul(ah2, bh2)) | 0;
40186 lo = (lo + Math.imul(al1, bl3)) | 0;
40187 mid = (mid + Math.imul(al1, bh3)) | 0;
40188 mid = (mid + Math.imul(ah1, bl3)) | 0;
40189 hi = (hi + Math.imul(ah1, bh3)) | 0;
40190 lo = (lo + Math.imul(al0, bl4)) | 0;
40191 mid = (mid + Math.imul(al0, bh4)) | 0;
40192 mid = (mid + Math.imul(ah0, bl4)) | 0;
40193 hi = (hi + Math.imul(ah0, bh4)) | 0;
40194 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40195 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
40196 w4 &= 0x3ffffff;
40197 /* k = 5 */
40198 lo = Math.imul(al5, bl0);
40199 mid = Math.imul(al5, bh0);
40200 mid = (mid + Math.imul(ah5, bl0)) | 0;
40201 hi = Math.imul(ah5, bh0);
40202 lo = (lo + Math.imul(al4, bl1)) | 0;
40203 mid = (mid + Math.imul(al4, bh1)) | 0;
40204 mid = (mid + Math.imul(ah4, bl1)) | 0;
40205 hi = (hi + Math.imul(ah4, bh1)) | 0;
40206 lo = (lo + Math.imul(al3, bl2)) | 0;
40207 mid = (mid + Math.imul(al3, bh2)) | 0;
40208 mid = (mid + Math.imul(ah3, bl2)) | 0;
40209 hi = (hi + Math.imul(ah3, bh2)) | 0;
40210 lo = (lo + Math.imul(al2, bl3)) | 0;
40211 mid = (mid + Math.imul(al2, bh3)) | 0;
40212 mid = (mid + Math.imul(ah2, bl3)) | 0;
40213 hi = (hi + Math.imul(ah2, bh3)) | 0;
40214 lo = (lo + Math.imul(al1, bl4)) | 0;
40215 mid = (mid + Math.imul(al1, bh4)) | 0;
40216 mid = (mid + Math.imul(ah1, bl4)) | 0;
40217 hi = (hi + Math.imul(ah1, bh4)) | 0;
40218 lo = (lo + Math.imul(al0, bl5)) | 0;
40219 mid = (mid + Math.imul(al0, bh5)) | 0;
40220 mid = (mid + Math.imul(ah0, bl5)) | 0;
40221 hi = (hi + Math.imul(ah0, bh5)) | 0;
40222 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40223 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
40224 w5 &= 0x3ffffff;
40225 /* k = 6 */
40226 lo = Math.imul(al6, bl0);
40227 mid = Math.imul(al6, bh0);
40228 mid = (mid + Math.imul(ah6, bl0)) | 0;
40229 hi = Math.imul(ah6, bh0);
40230 lo = (lo + Math.imul(al5, bl1)) | 0;
40231 mid = (mid + Math.imul(al5, bh1)) | 0;
40232 mid = (mid + Math.imul(ah5, bl1)) | 0;
40233 hi = (hi + Math.imul(ah5, bh1)) | 0;
40234 lo = (lo + Math.imul(al4, bl2)) | 0;
40235 mid = (mid + Math.imul(al4, bh2)) | 0;
40236 mid = (mid + Math.imul(ah4, bl2)) | 0;
40237 hi = (hi + Math.imul(ah4, bh2)) | 0;
40238 lo = (lo + Math.imul(al3, bl3)) | 0;
40239 mid = (mid + Math.imul(al3, bh3)) | 0;
40240 mid = (mid + Math.imul(ah3, bl3)) | 0;
40241 hi = (hi + Math.imul(ah3, bh3)) | 0;
40242 lo = (lo + Math.imul(al2, bl4)) | 0;
40243 mid = (mid + Math.imul(al2, bh4)) | 0;
40244 mid = (mid + Math.imul(ah2, bl4)) | 0;
40245 hi = (hi + Math.imul(ah2, bh4)) | 0;
40246 lo = (lo + Math.imul(al1, bl5)) | 0;
40247 mid = (mid + Math.imul(al1, bh5)) | 0;
40248 mid = (mid + Math.imul(ah1, bl5)) | 0;
40249 hi = (hi + Math.imul(ah1, bh5)) | 0;
40250 lo = (lo + Math.imul(al0, bl6)) | 0;
40251 mid = (mid + Math.imul(al0, bh6)) | 0;
40252 mid = (mid + Math.imul(ah0, bl6)) | 0;
40253 hi = (hi + Math.imul(ah0, bh6)) | 0;
40254 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40255 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
40256 w6 &= 0x3ffffff;
40257 /* k = 7 */
40258 lo = Math.imul(al7, bl0);
40259 mid = Math.imul(al7, bh0);
40260 mid = (mid + Math.imul(ah7, bl0)) | 0;
40261 hi = Math.imul(ah7, bh0);
40262 lo = (lo + Math.imul(al6, bl1)) | 0;
40263 mid = (mid + Math.imul(al6, bh1)) | 0;
40264 mid = (mid + Math.imul(ah6, bl1)) | 0;
40265 hi = (hi + Math.imul(ah6, bh1)) | 0;
40266 lo = (lo + Math.imul(al5, bl2)) | 0;
40267 mid = (mid + Math.imul(al5, bh2)) | 0;
40268 mid = (mid + Math.imul(ah5, bl2)) | 0;
40269 hi = (hi + Math.imul(ah5, bh2)) | 0;
40270 lo = (lo + Math.imul(al4, bl3)) | 0;
40271 mid = (mid + Math.imul(al4, bh3)) | 0;
40272 mid = (mid + Math.imul(ah4, bl3)) | 0;
40273 hi = (hi + Math.imul(ah4, bh3)) | 0;
40274 lo = (lo + Math.imul(al3, bl4)) | 0;
40275 mid = (mid + Math.imul(al3, bh4)) | 0;
40276 mid = (mid + Math.imul(ah3, bl4)) | 0;
40277 hi = (hi + Math.imul(ah3, bh4)) | 0;
40278 lo = (lo + Math.imul(al2, bl5)) | 0;
40279 mid = (mid + Math.imul(al2, bh5)) | 0;
40280 mid = (mid + Math.imul(ah2, bl5)) | 0;
40281 hi = (hi + Math.imul(ah2, bh5)) | 0;
40282 lo = (lo + Math.imul(al1, bl6)) | 0;
40283 mid = (mid + Math.imul(al1, bh6)) | 0;
40284 mid = (mid + Math.imul(ah1, bl6)) | 0;
40285 hi = (hi + Math.imul(ah1, bh6)) | 0;
40286 lo = (lo + Math.imul(al0, bl7)) | 0;
40287 mid = (mid + Math.imul(al0, bh7)) | 0;
40288 mid = (mid + Math.imul(ah0, bl7)) | 0;
40289 hi = (hi + Math.imul(ah0, bh7)) | 0;
40290 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40291 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
40292 w7 &= 0x3ffffff;
40293 /* k = 8 */
40294 lo = Math.imul(al8, bl0);
40295 mid = Math.imul(al8, bh0);
40296 mid = (mid + Math.imul(ah8, bl0)) | 0;
40297 hi = Math.imul(ah8, bh0);
40298 lo = (lo + Math.imul(al7, bl1)) | 0;
40299 mid = (mid + Math.imul(al7, bh1)) | 0;
40300 mid = (mid + Math.imul(ah7, bl1)) | 0;
40301 hi = (hi + Math.imul(ah7, bh1)) | 0;
40302 lo = (lo + Math.imul(al6, bl2)) | 0;
40303 mid = (mid + Math.imul(al6, bh2)) | 0;
40304 mid = (mid + Math.imul(ah6, bl2)) | 0;
40305 hi = (hi + Math.imul(ah6, bh2)) | 0;
40306 lo = (lo + Math.imul(al5, bl3)) | 0;
40307 mid = (mid + Math.imul(al5, bh3)) | 0;
40308 mid = (mid + Math.imul(ah5, bl3)) | 0;
40309 hi = (hi + Math.imul(ah5, bh3)) | 0;
40310 lo = (lo + Math.imul(al4, bl4)) | 0;
40311 mid = (mid + Math.imul(al4, bh4)) | 0;
40312 mid = (mid + Math.imul(ah4, bl4)) | 0;
40313 hi = (hi + Math.imul(ah4, bh4)) | 0;
40314 lo = (lo + Math.imul(al3, bl5)) | 0;
40315 mid = (mid + Math.imul(al3, bh5)) | 0;
40316 mid = (mid + Math.imul(ah3, bl5)) | 0;
40317 hi = (hi + Math.imul(ah3, bh5)) | 0;
40318 lo = (lo + Math.imul(al2, bl6)) | 0;
40319 mid = (mid + Math.imul(al2, bh6)) | 0;
40320 mid = (mid + Math.imul(ah2, bl6)) | 0;
40321 hi = (hi + Math.imul(ah2, bh6)) | 0;
40322 lo = (lo + Math.imul(al1, bl7)) | 0;
40323 mid = (mid + Math.imul(al1, bh7)) | 0;
40324 mid = (mid + Math.imul(ah1, bl7)) | 0;
40325 hi = (hi + Math.imul(ah1, bh7)) | 0;
40326 lo = (lo + Math.imul(al0, bl8)) | 0;
40327 mid = (mid + Math.imul(al0, bh8)) | 0;
40328 mid = (mid + Math.imul(ah0, bl8)) | 0;
40329 hi = (hi + Math.imul(ah0, bh8)) | 0;
40330 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40331 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
40332 w8 &= 0x3ffffff;
40333 /* k = 9 */
40334 lo = Math.imul(al9, bl0);
40335 mid = Math.imul(al9, bh0);
40336 mid = (mid + Math.imul(ah9, bl0)) | 0;
40337 hi = Math.imul(ah9, bh0);
40338 lo = (lo + Math.imul(al8, bl1)) | 0;
40339 mid = (mid + Math.imul(al8, bh1)) | 0;
40340 mid = (mid + Math.imul(ah8, bl1)) | 0;
40341 hi = (hi + Math.imul(ah8, bh1)) | 0;
40342 lo = (lo + Math.imul(al7, bl2)) | 0;
40343 mid = (mid + Math.imul(al7, bh2)) | 0;
40344 mid = (mid + Math.imul(ah7, bl2)) | 0;
40345 hi = (hi + Math.imul(ah7, bh2)) | 0;
40346 lo = (lo + Math.imul(al6, bl3)) | 0;
40347 mid = (mid + Math.imul(al6, bh3)) | 0;
40348 mid = (mid + Math.imul(ah6, bl3)) | 0;
40349 hi = (hi + Math.imul(ah6, bh3)) | 0;
40350 lo = (lo + Math.imul(al5, bl4)) | 0;
40351 mid = (mid + Math.imul(al5, bh4)) | 0;
40352 mid = (mid + Math.imul(ah5, bl4)) | 0;
40353 hi = (hi + Math.imul(ah5, bh4)) | 0;
40354 lo = (lo + Math.imul(al4, bl5)) | 0;
40355 mid = (mid + Math.imul(al4, bh5)) | 0;
40356 mid = (mid + Math.imul(ah4, bl5)) | 0;
40357 hi = (hi + Math.imul(ah4, bh5)) | 0;
40358 lo = (lo + Math.imul(al3, bl6)) | 0;
40359 mid = (mid + Math.imul(al3, bh6)) | 0;
40360 mid = (mid + Math.imul(ah3, bl6)) | 0;
40361 hi = (hi + Math.imul(ah3, bh6)) | 0;
40362 lo = (lo + Math.imul(al2, bl7)) | 0;
40363 mid = (mid + Math.imul(al2, bh7)) | 0;
40364 mid = (mid + Math.imul(ah2, bl7)) | 0;
40365 hi = (hi + Math.imul(ah2, bh7)) | 0;
40366 lo = (lo + Math.imul(al1, bl8)) | 0;
40367 mid = (mid + Math.imul(al1, bh8)) | 0;
40368 mid = (mid + Math.imul(ah1, bl8)) | 0;
40369 hi = (hi + Math.imul(ah1, bh8)) | 0;
40370 lo = (lo + Math.imul(al0, bl9)) | 0;
40371 mid = (mid + Math.imul(al0, bh9)) | 0;
40372 mid = (mid + Math.imul(ah0, bl9)) | 0;
40373 hi = (hi + Math.imul(ah0, bh9)) | 0;
40374 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40375 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
40376 w9 &= 0x3ffffff;
40377 /* k = 10 */
40378 lo = Math.imul(al9, bl1);
40379 mid = Math.imul(al9, bh1);
40380 mid = (mid + Math.imul(ah9, bl1)) | 0;
40381 hi = Math.imul(ah9, bh1);
40382 lo = (lo + Math.imul(al8, bl2)) | 0;
40383 mid = (mid + Math.imul(al8, bh2)) | 0;
40384 mid = (mid + Math.imul(ah8, bl2)) | 0;
40385 hi = (hi + Math.imul(ah8, bh2)) | 0;
40386 lo = (lo + Math.imul(al7, bl3)) | 0;
40387 mid = (mid + Math.imul(al7, bh3)) | 0;
40388 mid = (mid + Math.imul(ah7, bl3)) | 0;
40389 hi = (hi + Math.imul(ah7, bh3)) | 0;
40390 lo = (lo + Math.imul(al6, bl4)) | 0;
40391 mid = (mid + Math.imul(al6, bh4)) | 0;
40392 mid = (mid + Math.imul(ah6, bl4)) | 0;
40393 hi = (hi + Math.imul(ah6, bh4)) | 0;
40394 lo = (lo + Math.imul(al5, bl5)) | 0;
40395 mid = (mid + Math.imul(al5, bh5)) | 0;
40396 mid = (mid + Math.imul(ah5, bl5)) | 0;
40397 hi = (hi + Math.imul(ah5, bh5)) | 0;
40398 lo = (lo + Math.imul(al4, bl6)) | 0;
40399 mid = (mid + Math.imul(al4, bh6)) | 0;
40400 mid = (mid + Math.imul(ah4, bl6)) | 0;
40401 hi = (hi + Math.imul(ah4, bh6)) | 0;
40402 lo = (lo + Math.imul(al3, bl7)) | 0;
40403 mid = (mid + Math.imul(al3, bh7)) | 0;
40404 mid = (mid + Math.imul(ah3, bl7)) | 0;
40405 hi = (hi + Math.imul(ah3, bh7)) | 0;
40406 lo = (lo + Math.imul(al2, bl8)) | 0;
40407 mid = (mid + Math.imul(al2, bh8)) | 0;
40408 mid = (mid + Math.imul(ah2, bl8)) | 0;
40409 hi = (hi + Math.imul(ah2, bh8)) | 0;
40410 lo = (lo + Math.imul(al1, bl9)) | 0;
40411 mid = (mid + Math.imul(al1, bh9)) | 0;
40412 mid = (mid + Math.imul(ah1, bl9)) | 0;
40413 hi = (hi + Math.imul(ah1, bh9)) | 0;
40414 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40415 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
40416 w10 &= 0x3ffffff;
40417 /* k = 11 */
40418 lo = Math.imul(al9, bl2);
40419 mid = Math.imul(al9, bh2);
40420 mid = (mid + Math.imul(ah9, bl2)) | 0;
40421 hi = Math.imul(ah9, bh2);
40422 lo = (lo + Math.imul(al8, bl3)) | 0;
40423 mid = (mid + Math.imul(al8, bh3)) | 0;
40424 mid = (mid + Math.imul(ah8, bl3)) | 0;
40425 hi = (hi + Math.imul(ah8, bh3)) | 0;
40426 lo = (lo + Math.imul(al7, bl4)) | 0;
40427 mid = (mid + Math.imul(al7, bh4)) | 0;
40428 mid = (mid + Math.imul(ah7, bl4)) | 0;
40429 hi = (hi + Math.imul(ah7, bh4)) | 0;
40430 lo = (lo + Math.imul(al6, bl5)) | 0;
40431 mid = (mid + Math.imul(al6, bh5)) | 0;
40432 mid = (mid + Math.imul(ah6, bl5)) | 0;
40433 hi = (hi + Math.imul(ah6, bh5)) | 0;
40434 lo = (lo + Math.imul(al5, bl6)) | 0;
40435 mid = (mid + Math.imul(al5, bh6)) | 0;
40436 mid = (mid + Math.imul(ah5, bl6)) | 0;
40437 hi = (hi + Math.imul(ah5, bh6)) | 0;
40438 lo = (lo + Math.imul(al4, bl7)) | 0;
40439 mid = (mid + Math.imul(al4, bh7)) | 0;
40440 mid = (mid + Math.imul(ah4, bl7)) | 0;
40441 hi = (hi + Math.imul(ah4, bh7)) | 0;
40442 lo = (lo + Math.imul(al3, bl8)) | 0;
40443 mid = (mid + Math.imul(al3, bh8)) | 0;
40444 mid = (mid + Math.imul(ah3, bl8)) | 0;
40445 hi = (hi + Math.imul(ah3, bh8)) | 0;
40446 lo = (lo + Math.imul(al2, bl9)) | 0;
40447 mid = (mid + Math.imul(al2, bh9)) | 0;
40448 mid = (mid + Math.imul(ah2, bl9)) | 0;
40449 hi = (hi + Math.imul(ah2, bh9)) | 0;
40450 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40451 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
40452 w11 &= 0x3ffffff;
40453 /* k = 12 */
40454 lo = Math.imul(al9, bl3);
40455 mid = Math.imul(al9, bh3);
40456 mid = (mid + Math.imul(ah9, bl3)) | 0;
40457 hi = Math.imul(ah9, bh3);
40458 lo = (lo + Math.imul(al8, bl4)) | 0;
40459 mid = (mid + Math.imul(al8, bh4)) | 0;
40460 mid = (mid + Math.imul(ah8, bl4)) | 0;
40461 hi = (hi + Math.imul(ah8, bh4)) | 0;
40462 lo = (lo + Math.imul(al7, bl5)) | 0;
40463 mid = (mid + Math.imul(al7, bh5)) | 0;
40464 mid = (mid + Math.imul(ah7, bl5)) | 0;
40465 hi = (hi + Math.imul(ah7, bh5)) | 0;
40466 lo = (lo + Math.imul(al6, bl6)) | 0;
40467 mid = (mid + Math.imul(al6, bh6)) | 0;
40468 mid = (mid + Math.imul(ah6, bl6)) | 0;
40469 hi = (hi + Math.imul(ah6, bh6)) | 0;
40470 lo = (lo + Math.imul(al5, bl7)) | 0;
40471 mid = (mid + Math.imul(al5, bh7)) | 0;
40472 mid = (mid + Math.imul(ah5, bl7)) | 0;
40473 hi = (hi + Math.imul(ah5, bh7)) | 0;
40474 lo = (lo + Math.imul(al4, bl8)) | 0;
40475 mid = (mid + Math.imul(al4, bh8)) | 0;
40476 mid = (mid + Math.imul(ah4, bl8)) | 0;
40477 hi = (hi + Math.imul(ah4, bh8)) | 0;
40478 lo = (lo + Math.imul(al3, bl9)) | 0;
40479 mid = (mid + Math.imul(al3, bh9)) | 0;
40480 mid = (mid + Math.imul(ah3, bl9)) | 0;
40481 hi = (hi + Math.imul(ah3, bh9)) | 0;
40482 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40483 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
40484 w12 &= 0x3ffffff;
40485 /* k = 13 */
40486 lo = Math.imul(al9, bl4);
40487 mid = Math.imul(al9, bh4);
40488 mid = (mid + Math.imul(ah9, bl4)) | 0;
40489 hi = Math.imul(ah9, bh4);
40490 lo = (lo + Math.imul(al8, bl5)) | 0;
40491 mid = (mid + Math.imul(al8, bh5)) | 0;
40492 mid = (mid + Math.imul(ah8, bl5)) | 0;
40493 hi = (hi + Math.imul(ah8, bh5)) | 0;
40494 lo = (lo + Math.imul(al7, bl6)) | 0;
40495 mid = (mid + Math.imul(al7, bh6)) | 0;
40496 mid = (mid + Math.imul(ah7, bl6)) | 0;
40497 hi = (hi + Math.imul(ah7, bh6)) | 0;
40498 lo = (lo + Math.imul(al6, bl7)) | 0;
40499 mid = (mid + Math.imul(al6, bh7)) | 0;
40500 mid = (mid + Math.imul(ah6, bl7)) | 0;
40501 hi = (hi + Math.imul(ah6, bh7)) | 0;
40502 lo = (lo + Math.imul(al5, bl8)) | 0;
40503 mid = (mid + Math.imul(al5, bh8)) | 0;
40504 mid = (mid + Math.imul(ah5, bl8)) | 0;
40505 hi = (hi + Math.imul(ah5, bh8)) | 0;
40506 lo = (lo + Math.imul(al4, bl9)) | 0;
40507 mid = (mid + Math.imul(al4, bh9)) | 0;
40508 mid = (mid + Math.imul(ah4, bl9)) | 0;
40509 hi = (hi + Math.imul(ah4, bh9)) | 0;
40510 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40511 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
40512 w13 &= 0x3ffffff;
40513 /* k = 14 */
40514 lo = Math.imul(al9, bl5);
40515 mid = Math.imul(al9, bh5);
40516 mid = (mid + Math.imul(ah9, bl5)) | 0;
40517 hi = Math.imul(ah9, bh5);
40518 lo = (lo + Math.imul(al8, bl6)) | 0;
40519 mid = (mid + Math.imul(al8, bh6)) | 0;
40520 mid = (mid + Math.imul(ah8, bl6)) | 0;
40521 hi = (hi + Math.imul(ah8, bh6)) | 0;
40522 lo = (lo + Math.imul(al7, bl7)) | 0;
40523 mid = (mid + Math.imul(al7, bh7)) | 0;
40524 mid = (mid + Math.imul(ah7, bl7)) | 0;
40525 hi = (hi + Math.imul(ah7, bh7)) | 0;
40526 lo = (lo + Math.imul(al6, bl8)) | 0;
40527 mid = (mid + Math.imul(al6, bh8)) | 0;
40528 mid = (mid + Math.imul(ah6, bl8)) | 0;
40529 hi = (hi + Math.imul(ah6, bh8)) | 0;
40530 lo = (lo + Math.imul(al5, bl9)) | 0;
40531 mid = (mid + Math.imul(al5, bh9)) | 0;
40532 mid = (mid + Math.imul(ah5, bl9)) | 0;
40533 hi = (hi + Math.imul(ah5, bh9)) | 0;
40534 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40535 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
40536 w14 &= 0x3ffffff;
40537 /* k = 15 */
40538 lo = Math.imul(al9, bl6);
40539 mid = Math.imul(al9, bh6);
40540 mid = (mid + Math.imul(ah9, bl6)) | 0;
40541 hi = Math.imul(ah9, bh6);
40542 lo = (lo + Math.imul(al8, bl7)) | 0;
40543 mid = (mid + Math.imul(al8, bh7)) | 0;
40544 mid = (mid + Math.imul(ah8, bl7)) | 0;
40545 hi = (hi + Math.imul(ah8, bh7)) | 0;
40546 lo = (lo + Math.imul(al7, bl8)) | 0;
40547 mid = (mid + Math.imul(al7, bh8)) | 0;
40548 mid = (mid + Math.imul(ah7, bl8)) | 0;
40549 hi = (hi + Math.imul(ah7, bh8)) | 0;
40550 lo = (lo + Math.imul(al6, bl9)) | 0;
40551 mid = (mid + Math.imul(al6, bh9)) | 0;
40552 mid = (mid + Math.imul(ah6, bl9)) | 0;
40553 hi = (hi + Math.imul(ah6, bh9)) | 0;
40554 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40555 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
40556 w15 &= 0x3ffffff;
40557 /* k = 16 */
40558 lo = Math.imul(al9, bl7);
40559 mid = Math.imul(al9, bh7);
40560 mid = (mid + Math.imul(ah9, bl7)) | 0;
40561 hi = Math.imul(ah9, bh7);
40562 lo = (lo + Math.imul(al8, bl8)) | 0;
40563 mid = (mid + Math.imul(al8, bh8)) | 0;
40564 mid = (mid + Math.imul(ah8, bl8)) | 0;
40565 hi = (hi + Math.imul(ah8, bh8)) | 0;
40566 lo = (lo + Math.imul(al7, bl9)) | 0;
40567 mid = (mid + Math.imul(al7, bh9)) | 0;
40568 mid = (mid + Math.imul(ah7, bl9)) | 0;
40569 hi = (hi + Math.imul(ah7, bh9)) | 0;
40570 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40571 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
40572 w16 &= 0x3ffffff;
40573 /* k = 17 */
40574 lo = Math.imul(al9, bl8);
40575 mid = Math.imul(al9, bh8);
40576 mid = (mid + Math.imul(ah9, bl8)) | 0;
40577 hi = Math.imul(ah9, bh8);
40578 lo = (lo + Math.imul(al8, bl9)) | 0;
40579 mid = (mid + Math.imul(al8, bh9)) | 0;
40580 mid = (mid + Math.imul(ah8, bl9)) | 0;
40581 hi = (hi + Math.imul(ah8, bh9)) | 0;
40582 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40583 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
40584 w17 &= 0x3ffffff;
40585 /* k = 18 */
40586 lo = Math.imul(al9, bl9);
40587 mid = Math.imul(al9, bh9);
40588 mid = (mid + Math.imul(ah9, bl9)) | 0;
40589 hi = Math.imul(ah9, bh9);
40590 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40591 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
40592 w18 &= 0x3ffffff;
40593 o[0] = w0;
40594 o[1] = w1;
40595 o[2] = w2;
40596 o[3] = w3;
40597 o[4] = w4;
40598 o[5] = w5;
40599 o[6] = w6;
40600 o[7] = w7;
40601 o[8] = w8;
40602 o[9] = w9;
40603 o[10] = w10;
40604 o[11] = w11;
40605 o[12] = w12;
40606 o[13] = w13;
40607 o[14] = w14;
40608 o[15] = w15;
40609 o[16] = w16;
40610 o[17] = w17;
40611 o[18] = w18;
40612 if (c !== 0) {
40613 o[19] = c;
40614 out.length++;
40615 }
40616 return out;
40617 };
40618
40619 // Polyfill comb
40620 if (!Math.imul) {
40621 comb10MulTo = smallMulTo;
40622 }
40623
40624 function bigMulTo (self, num, out) {
40625 out.negative = num.negative ^ self.negative;
40626 out.length = self.length + num.length;
40627
40628 var carry = 0;
40629 var hncarry = 0;
40630 for (var k = 0; k < out.length - 1; k++) {
40631 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
40632 // note that ncarry could be >= 0x3ffffff
40633 var ncarry = hncarry;
40634 hncarry = 0;
40635 var rword = carry & 0x3ffffff;
40636 var maxJ = Math.min(k, num.length - 1);
40637 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
40638 var i = k - j;
40639 var a = self.words[i] | 0;
40640 var b = num.words[j] | 0;
40641 var r = a * b;
40642
40643 var lo = r & 0x3ffffff;
40644 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
40645 lo = (lo + rword) | 0;
40646 rword = lo & 0x3ffffff;
40647 ncarry = (ncarry + (lo >>> 26)) | 0;
40648
40649 hncarry += ncarry >>> 26;
40650 ncarry &= 0x3ffffff;
40651 }
40652 out.words[k] = rword;
40653 carry = ncarry;
40654 ncarry = hncarry;
40655 }
40656 if (carry !== 0) {
40657 out.words[k] = carry;
40658 } else {
40659 out.length--;
40660 }
40661
40662 return out.strip();
40663 }
40664
40665 function jumboMulTo (self, num, out) {
40666 var fftm = new FFTM();
40667 return fftm.mulp(self, num, out);
40668 }
40669
40670 BN.prototype.mulTo = function mulTo (num, out) {
40671 var res;
40672 var len = this.length + num.length;
40673 if (this.length === 10 && num.length === 10) {
40674 res = comb10MulTo(this, num, out);
40675 } else if (len < 63) {
40676 res = smallMulTo(this, num, out);
40677 } else if (len < 1024) {
40678 res = bigMulTo(this, num, out);
40679 } else {
40680 res = jumboMulTo(this, num, out);
40681 }
40682
40683 return res;
40684 };
40685
40686 // Cooley-Tukey algorithm for FFT
40687 // slightly revisited to rely on looping instead of recursion
40688
40689 function FFTM (x, y) {
40690 this.x = x;
40691 this.y = y;
40692 }
40693
40694 FFTM.prototype.makeRBT = function makeRBT (N) {
40695 var t = new Array(N);
40696 var l = BN.prototype._countBits(N) - 1;
40697 for (var i = 0; i < N; i++) {
40698 t[i] = this.revBin(i, l, N);
40699 }
40700
40701 return t;
40702 };
40703
40704 // Returns binary-reversed representation of `x`
40705 FFTM.prototype.revBin = function revBin (x, l, N) {
40706 if (x === 0 || x === N - 1) return x;
40707
40708 var rb = 0;
40709 for (var i = 0; i < l; i++) {
40710 rb |= (x & 1) << (l - i - 1);
40711 x >>= 1;
40712 }
40713
40714 return rb;
40715 };
40716
40717 // Performs "tweedling" phase, therefore 'emulating'
40718 // behaviour of the recursive algorithm
40719 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
40720 for (var i = 0; i < N; i++) {
40721 rtws[i] = rws[rbt[i]];
40722 itws[i] = iws[rbt[i]];
40723 }
40724 };
40725
40726 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
40727 this.permute(rbt, rws, iws, rtws, itws, N);
40728
40729 for (var s = 1; s < N; s <<= 1) {
40730 var l = s << 1;
40731
40732 var rtwdf = Math.cos(2 * Math.PI / l);
40733 var itwdf = Math.sin(2 * Math.PI / l);
40734
40735 for (var p = 0; p < N; p += l) {
40736 var rtwdf_ = rtwdf;
40737 var itwdf_ = itwdf;
40738
40739 for (var j = 0; j < s; j++) {
40740 var re = rtws[p + j];
40741 var ie = itws[p + j];
40742
40743 var ro = rtws[p + j + s];
40744 var io = itws[p + j + s];
40745
40746 var rx = rtwdf_ * ro - itwdf_ * io;
40747
40748 io = rtwdf_ * io + itwdf_ * ro;
40749 ro = rx;
40750
40751 rtws[p + j] = re + ro;
40752 itws[p + j] = ie + io;
40753
40754 rtws[p + j + s] = re - ro;
40755 itws[p + j + s] = ie - io;
40756
40757 /* jshint maxdepth : false */
40758 if (j !== l) {
40759 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
40760
40761 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
40762 rtwdf_ = rx;
40763 }
40764 }
40765 }
40766 }
40767 };
40768
40769 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
40770 var N = Math.max(m, n) | 1;
40771 var odd = N & 1;
40772 var i = 0;
40773 for (N = N / 2 | 0; N; N = N >>> 1) {
40774 i++;
40775 }
40776
40777 return 1 << i + 1 + odd;
40778 };
40779
40780 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
40781 if (N <= 1) return;
40782
40783 for (var i = 0; i < N / 2; i++) {
40784 var t = rws[i];
40785
40786 rws[i] = rws[N - i - 1];
40787 rws[N - i - 1] = t;
40788
40789 t = iws[i];
40790
40791 iws[i] = -iws[N - i - 1];
40792 iws[N - i - 1] = -t;
40793 }
40794 };
40795
40796 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
40797 var carry = 0;
40798 for (var i = 0; i < N / 2; i++) {
40799 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
40800 Math.round(ws[2 * i] / N) +
40801 carry;
40802
40803 ws[i] = w & 0x3ffffff;
40804
40805 if (w < 0x4000000) {
40806 carry = 0;
40807 } else {
40808 carry = w / 0x4000000 | 0;
40809 }
40810 }
40811
40812 return ws;
40813 };
40814
40815 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
40816 var carry = 0;
40817 for (var i = 0; i < len; i++) {
40818 carry = carry + (ws[i] | 0);
40819
40820 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
40821 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
40822 }
40823
40824 // Pad with zeroes
40825 for (i = 2 * len; i < N; ++i) {
40826 rws[i] = 0;
40827 }
40828
40829 assert(carry === 0);
40830 assert((carry & ~0x1fff) === 0);
40831 };
40832
40833 FFTM.prototype.stub = function stub (N) {
40834 var ph = new Array(N);
40835 for (var i = 0; i < N; i++) {
40836 ph[i] = 0;
40837 }
40838
40839 return ph;
40840 };
40841
40842 FFTM.prototype.mulp = function mulp (x, y, out) {
40843 var N = 2 * this.guessLen13b(x.length, y.length);
40844
40845 var rbt = this.makeRBT(N);
40846
40847 var _ = this.stub(N);
40848
40849 var rws = new Array(N);
40850 var rwst = new Array(N);
40851 var iwst = new Array(N);
40852
40853 var nrws = new Array(N);
40854 var nrwst = new Array(N);
40855 var niwst = new Array(N);
40856
40857 var rmws = out.words;
40858 rmws.length = N;
40859
40860 this.convert13b(x.words, x.length, rws, N);
40861 this.convert13b(y.words, y.length, nrws, N);
40862
40863 this.transform(rws, _, rwst, iwst, N, rbt);
40864 this.transform(nrws, _, nrwst, niwst, N, rbt);
40865
40866 for (var i = 0; i < N; i++) {
40867 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
40868 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
40869 rwst[i] = rx;
40870 }
40871
40872 this.conjugate(rwst, iwst, N);
40873 this.transform(rwst, iwst, rmws, _, N, rbt);
40874 this.conjugate(rmws, _, N);
40875 this.normalize13b(rmws, N);
40876
40877 out.negative = x.negative ^ y.negative;
40878 out.length = x.length + y.length;
40879 return out.strip();
40880 };
40881
40882 // Multiply `this` by `num`
40883 BN.prototype.mul = function mul (num) {
40884 var out = new BN(null);
40885 out.words = new Array(this.length + num.length);
40886 return this.mulTo(num, out);
40887 };
40888
40889 // Multiply employing FFT
40890 BN.prototype.mulf = function mulf (num) {
40891 var out = new BN(null);
40892 out.words = new Array(this.length + num.length);
40893 return jumboMulTo(this, num, out);
40894 };
40895
40896 // In-place Multiplication
40897 BN.prototype.imul = function imul (num) {
40898 return this.clone().mulTo(num, this);
40899 };
40900
40901 BN.prototype.imuln = function imuln (num) {
40902 assert(typeof num === 'number');
40903 assert(num < 0x4000000);
40904
40905 // Carry
40906 var carry = 0;
40907 for (var i = 0; i < this.length; i++) {
40908 var w = (this.words[i] | 0) * num;
40909 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
40910 carry >>= 26;
40911 carry += (w / 0x4000000) | 0;
40912 // NOTE: lo is 27bit maximum
40913 carry += lo >>> 26;
40914 this.words[i] = lo & 0x3ffffff;
40915 }
40916
40917 if (carry !== 0) {
40918 this.words[i] = carry;
40919 this.length++;
40920 }
40921
40922 return this;
40923 };
40924
40925 BN.prototype.muln = function muln (num) {
40926 return this.clone().imuln(num);
40927 };
40928
40929 // `this` * `this`
40930 BN.prototype.sqr = function sqr () {
40931 return this.mul(this);
40932 };
40933
40934 // `this` * `this` in-place
40935 BN.prototype.isqr = function isqr () {
40936 return this.imul(this.clone());
40937 };
40938
40939 // Math.pow(`this`, `num`)
40940 BN.prototype.pow = function pow (num) {
40941 var w = toBitArray(num);
40942 if (w.length === 0) return new BN(1);
40943
40944 // Skip leading zeroes
40945 var res = this;
40946 for (var i = 0; i < w.length; i++, res = res.sqr()) {
40947 if (w[i] !== 0) break;
40948 }
40949
40950 if (++i < w.length) {
40951 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
40952 if (w[i] === 0) continue;
40953
40954 res = res.mul(q);
40955 }
40956 }
40957
40958 return res;
40959 };
40960
40961 // Shift-left in-place
40962 BN.prototype.iushln = function iushln (bits) {
40963 assert(typeof bits === 'number' && bits >= 0);
40964 var r = bits % 26;
40965 var s = (bits - r) / 26;
40966 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
40967 var i;
40968
40969 if (r !== 0) {
40970 var carry = 0;
40971
40972 for (i = 0; i < this.length; i++) {
40973 var newCarry = this.words[i] & carryMask;
40974 var c = ((this.words[i] | 0) - newCarry) << r;
40975 this.words[i] = c | carry;
40976 carry = newCarry >>> (26 - r);
40977 }
40978
40979 if (carry) {
40980 this.words[i] = carry;
40981 this.length++;
40982 }
40983 }
40984
40985 if (s !== 0) {
40986 for (i = this.length - 1; i >= 0; i--) {
40987 this.words[i + s] = this.words[i];
40988 }
40989
40990 for (i = 0; i < s; i++) {
40991 this.words[i] = 0;
40992 }
40993
40994 this.length += s;
40995 }
40996
40997 return this.strip();
40998 };
40999
41000 BN.prototype.ishln = function ishln (bits) {
41001 // TODO(indutny): implement me
41002 assert(this.negative === 0);
41003 return this.iushln(bits);
41004 };
41005
41006 // Shift-right in-place
41007 // NOTE: `hint` is a lowest bit before trailing zeroes
41008 // NOTE: if `extended` is present - it will be filled with destroyed bits
41009 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
41010 assert(typeof bits === 'number' && bits >= 0);
41011 var h;
41012 if (hint) {
41013 h = (hint - (hint % 26)) / 26;
41014 } else {
41015 h = 0;
41016 }
41017
41018 var r = bits % 26;
41019 var s = Math.min((bits - r) / 26, this.length);
41020 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
41021 var maskedWords = extended;
41022
41023 h -= s;
41024 h = Math.max(0, h);
41025
41026 // Extended mode, copy masked part
41027 if (maskedWords) {
41028 for (var i = 0; i < s; i++) {
41029 maskedWords.words[i] = this.words[i];
41030 }
41031 maskedWords.length = s;
41032 }
41033
41034 if (s === 0) {
41035 // No-op, we should not move anything at all
41036 } else if (this.length > s) {
41037 this.length -= s;
41038 for (i = 0; i < this.length; i++) {
41039 this.words[i] = this.words[i + s];
41040 }
41041 } else {
41042 this.words[0] = 0;
41043 this.length = 1;
41044 }
41045
41046 var carry = 0;
41047 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
41048 var word = this.words[i] | 0;
41049 this.words[i] = (carry << (26 - r)) | (word >>> r);
41050 carry = word & mask;
41051 }
41052
41053 // Push carried bits as a mask
41054 if (maskedWords && carry !== 0) {
41055 maskedWords.words[maskedWords.length++] = carry;
41056 }
41057
41058 if (this.length === 0) {
41059 this.words[0] = 0;
41060 this.length = 1;
41061 }
41062
41063 return this.strip();
41064 };
41065
41066 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
41067 // TODO(indutny): implement me
41068 assert(this.negative === 0);
41069 return this.iushrn(bits, hint, extended);
41070 };
41071
41072 // Shift-left
41073 BN.prototype.shln = function shln (bits) {
41074 return this.clone().ishln(bits);
41075 };
41076
41077 BN.prototype.ushln = function ushln (bits) {
41078 return this.clone().iushln(bits);
41079 };
41080
41081 // Shift-right
41082 BN.prototype.shrn = function shrn (bits) {
41083 return this.clone().ishrn(bits);
41084 };
41085
41086 BN.prototype.ushrn = function ushrn (bits) {
41087 return this.clone().iushrn(bits);
41088 };
41089
41090 // Test if n bit is set
41091 BN.prototype.testn = function testn (bit) {
41092 assert(typeof bit === 'number' && bit >= 0);
41093 var r = bit % 26;
41094 var s = (bit - r) / 26;
41095 var q = 1 << r;
41096
41097 // Fast case: bit is much higher than all existing words
41098 if (this.length <= s) return false;
41099
41100 // Check bit and return
41101 var w = this.words[s];
41102
41103 return !!(w & q);
41104 };
41105
41106 // Return only lowers bits of number (in-place)
41107 BN.prototype.imaskn = function imaskn (bits) {
41108 assert(typeof bits === 'number' && bits >= 0);
41109 var r = bits % 26;
41110 var s = (bits - r) / 26;
41111
41112 assert(this.negative === 0, 'imaskn works only with positive numbers');
41113
41114 if (this.length <= s) {
41115 return this;
41116 }
41117
41118 if (r !== 0) {
41119 s++;
41120 }
41121 this.length = Math.min(s, this.length);
41122
41123 if (r !== 0) {
41124 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
41125 this.words[this.length - 1] &= mask;
41126 }
41127
41128 return this.strip();
41129 };
41130
41131 // Return only lowers bits of number
41132 BN.prototype.maskn = function maskn (bits) {
41133 return this.clone().imaskn(bits);
41134 };
41135
41136 // Add plain number `num` to `this`
41137 BN.prototype.iaddn = function iaddn (num) {
41138 assert(typeof num === 'number');
41139 assert(num < 0x4000000);
41140 if (num < 0) return this.isubn(-num);
41141
41142 // Possible sign change
41143 if (this.negative !== 0) {
41144 if (this.length === 1 && (this.words[0] | 0) < num) {
41145 this.words[0] = num - (this.words[0] | 0);
41146 this.negative = 0;
41147 return this;
41148 }
41149
41150 this.negative = 0;
41151 this.isubn(num);
41152 this.negative = 1;
41153 return this;
41154 }
41155
41156 // Add without checks
41157 return this._iaddn(num);
41158 };
41159
41160 BN.prototype._iaddn = function _iaddn (num) {
41161 this.words[0] += num;
41162
41163 // Carry
41164 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
41165 this.words[i] -= 0x4000000;
41166 if (i === this.length - 1) {
41167 this.words[i + 1] = 1;
41168 } else {
41169 this.words[i + 1]++;
41170 }
41171 }
41172 this.length = Math.max(this.length, i + 1);
41173
41174 return this;
41175 };
41176
41177 // Subtract plain number `num` from `this`
41178 BN.prototype.isubn = function isubn (num) {
41179 assert(typeof num === 'number');
41180 assert(num < 0x4000000);
41181 if (num < 0) return this.iaddn(-num);
41182
41183 if (this.negative !== 0) {
41184 this.negative = 0;
41185 this.iaddn(num);
41186 this.negative = 1;
41187 return this;
41188 }
41189
41190 this.words[0] -= num;
41191
41192 if (this.length === 1 && this.words[0] < 0) {
41193 this.words[0] = -this.words[0];
41194 this.negative = 1;
41195 } else {
41196 // Carry
41197 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
41198 this.words[i] += 0x4000000;
41199 this.words[i + 1] -= 1;
41200 }
41201 }
41202
41203 return this.strip();
41204 };
41205
41206 BN.prototype.addn = function addn (num) {
41207 return this.clone().iaddn(num);
41208 };
41209
41210 BN.prototype.subn = function subn (num) {
41211 return this.clone().isubn(num);
41212 };
41213
41214 BN.prototype.iabs = function iabs () {
41215 this.negative = 0;
41216
41217 return this;
41218 };
41219
41220 BN.prototype.abs = function abs () {
41221 return this.clone().iabs();
41222 };
41223
41224 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
41225 var len = num.length + shift;
41226 var i;
41227
41228 this._expand(len);
41229
41230 var w;
41231 var carry = 0;
41232 for (i = 0; i < num.length; i++) {
41233 w = (this.words[i + shift] | 0) + carry;
41234 var right = (num.words[i] | 0) * mul;
41235 w -= right & 0x3ffffff;
41236 carry = (w >> 26) - ((right / 0x4000000) | 0);
41237 this.words[i + shift] = w & 0x3ffffff;
41238 }
41239 for (; i < this.length - shift; i++) {
41240 w = (this.words[i + shift] | 0) + carry;
41241 carry = w >> 26;
41242 this.words[i + shift] = w & 0x3ffffff;
41243 }
41244
41245 if (carry === 0) return this.strip();
41246
41247 // Subtraction overflow
41248 assert(carry === -1);
41249 carry = 0;
41250 for (i = 0; i < this.length; i++) {
41251 w = -(this.words[i] | 0) + carry;
41252 carry = w >> 26;
41253 this.words[i] = w & 0x3ffffff;
41254 }
41255 this.negative = 1;
41256
41257 return this.strip();
41258 };
41259
41260 BN.prototype._wordDiv = function _wordDiv (num, mode) {
41261 var shift = this.length - num.length;
41262
41263 var a = this.clone();
41264 var b = num;
41265
41266 // Normalize
41267 var bhi = b.words[b.length - 1] | 0;
41268 var bhiBits = this._countBits(bhi);
41269 shift = 26 - bhiBits;
41270 if (shift !== 0) {
41271 b = b.ushln(shift);
41272 a.iushln(shift);
41273 bhi = b.words[b.length - 1] | 0;
41274 }
41275
41276 // Initialize quotient
41277 var m = a.length - b.length;
41278 var q;
41279
41280 if (mode !== 'mod') {
41281 q = new BN(null);
41282 q.length = m + 1;
41283 q.words = new Array(q.length);
41284 for (var i = 0; i < q.length; i++) {
41285 q.words[i] = 0;
41286 }
41287 }
41288
41289 var diff = a.clone()._ishlnsubmul(b, 1, m);
41290 if (diff.negative === 0) {
41291 a = diff;
41292 if (q) {
41293 q.words[m] = 1;
41294 }
41295 }
41296
41297 for (var j = m - 1; j >= 0; j--) {
41298 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
41299 (a.words[b.length + j - 1] | 0);
41300
41301 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
41302 // (0x7ffffff)
41303 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
41304
41305 a._ishlnsubmul(b, qj, j);
41306 while (a.negative !== 0) {
41307 qj--;
41308 a.negative = 0;
41309 a._ishlnsubmul(b, 1, j);
41310 if (!a.isZero()) {
41311 a.negative ^= 1;
41312 }
41313 }
41314 if (q) {
41315 q.words[j] = qj;
41316 }
41317 }
41318 if (q) {
41319 q.strip();
41320 }
41321 a.strip();
41322
41323 // Denormalize
41324 if (mode !== 'div' && shift !== 0) {
41325 a.iushrn(shift);
41326 }
41327
41328 return {
41329 div: q || null,
41330 mod: a
41331 };
41332 };
41333
41334 // NOTE: 1) `mode` can be set to `mod` to request mod only,
41335 // to `div` to request div only, or be absent to
41336 // request both div & mod
41337 // 2) `positive` is true if unsigned mod is requested
41338 BN.prototype.divmod = function divmod (num, mode, positive) {
41339 assert(!num.isZero());
41340
41341 if (this.isZero()) {
41342 return {
41343 div: new BN(0),
41344 mod: new BN(0)
41345 };
41346 }
41347
41348 var div, mod, res;
41349 if (this.negative !== 0 && num.negative === 0) {
41350 res = this.neg().divmod(num, mode);
41351
41352 if (mode !== 'mod') {
41353 div = res.div.neg();
41354 }
41355
41356 if (mode !== 'div') {
41357 mod = res.mod.neg();
41358 if (positive && mod.negative !== 0) {
41359 mod.iadd(num);
41360 }
41361 }
41362
41363 return {
41364 div: div,
41365 mod: mod
41366 };
41367 }
41368
41369 if (this.negative === 0 && num.negative !== 0) {
41370 res = this.divmod(num.neg(), mode);
41371
41372 if (mode !== 'mod') {
41373 div = res.div.neg();
41374 }
41375
41376 return {
41377 div: div,
41378 mod: res.mod
41379 };
41380 }
41381
41382 if ((this.negative & num.negative) !== 0) {
41383 res = this.neg().divmod(num.neg(), mode);
41384
41385 if (mode !== 'div') {
41386 mod = res.mod.neg();
41387 if (positive && mod.negative !== 0) {
41388 mod.isub(num);
41389 }
41390 }
41391
41392 return {
41393 div: res.div,
41394 mod: mod
41395 };
41396 }
41397
41398 // Both numbers are positive at this point
41399
41400 // Strip both numbers to approximate shift value
41401 if (num.length > this.length || this.cmp(num) < 0) {
41402 return {
41403 div: new BN(0),
41404 mod: this
41405 };
41406 }
41407
41408 // Very short reduction
41409 if (num.length === 1) {
41410 if (mode === 'div') {
41411 return {
41412 div: this.divn(num.words[0]),
41413 mod: null
41414 };
41415 }
41416
41417 if (mode === 'mod') {
41418 return {
41419 div: null,
41420 mod: new BN(this.modn(num.words[0]))
41421 };
41422 }
41423
41424 return {
41425 div: this.divn(num.words[0]),
41426 mod: new BN(this.modn(num.words[0]))
41427 };
41428 }
41429
41430 return this._wordDiv(num, mode);
41431 };
41432
41433 // Find `this` / `num`
41434 BN.prototype.div = function div (num) {
41435 return this.divmod(num, 'div', false).div;
41436 };
41437
41438 // Find `this` % `num`
41439 BN.prototype.mod = function mod (num) {
41440 return this.divmod(num, 'mod', false).mod;
41441 };
41442
41443 BN.prototype.umod = function umod (num) {
41444 return this.divmod(num, 'mod', true).mod;
41445 };
41446
41447 // Find Round(`this` / `num`)
41448 BN.prototype.divRound = function divRound (num) {
41449 var dm = this.divmod(num);
41450
41451 // Fast case - exact division
41452 if (dm.mod.isZero()) return dm.div;
41453
41454 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
41455
41456 var half = num.ushrn(1);
41457 var r2 = num.andln(1);
41458 var cmp = mod.cmp(half);
41459
41460 // Round down
41461 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
41462
41463 // Round up
41464 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
41465 };
41466
41467 BN.prototype.modn = function modn (num) {
41468 assert(num <= 0x3ffffff);
41469 var p = (1 << 26) % num;
41470
41471 var acc = 0;
41472 for (var i = this.length - 1; i >= 0; i--) {
41473 acc = (p * acc + (this.words[i] | 0)) % num;
41474 }
41475
41476 return acc;
41477 };
41478
41479 // In-place division by number
41480 BN.prototype.idivn = function idivn (num) {
41481 assert(num <= 0x3ffffff);
41482
41483 var carry = 0;
41484 for (var i = this.length - 1; i >= 0; i--) {
41485 var w = (this.words[i] | 0) + carry * 0x4000000;
41486 this.words[i] = (w / num) | 0;
41487 carry = w % num;
41488 }
41489
41490 return this.strip();
41491 };
41492
41493 BN.prototype.divn = function divn (num) {
41494 return this.clone().idivn(num);
41495 };
41496
41497 BN.prototype.egcd = function egcd (p) {
41498 assert(p.negative === 0);
41499 assert(!p.isZero());
41500
41501 var x = this;
41502 var y = p.clone();
41503
41504 if (x.negative !== 0) {
41505 x = x.umod(p);
41506 } else {
41507 x = x.clone();
41508 }
41509
41510 // A * x + B * y = x
41511 var A = new BN(1);
41512 var B = new BN(0);
41513
41514 // C * x + D * y = y
41515 var C = new BN(0);
41516 var D = new BN(1);
41517
41518 var g = 0;
41519
41520 while (x.isEven() && y.isEven()) {
41521 x.iushrn(1);
41522 y.iushrn(1);
41523 ++g;
41524 }
41525
41526 var yp = y.clone();
41527 var xp = x.clone();
41528
41529 while (!x.isZero()) {
41530 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
41531 if (i > 0) {
41532 x.iushrn(i);
41533 while (i-- > 0) {
41534 if (A.isOdd() || B.isOdd()) {
41535 A.iadd(yp);
41536 B.isub(xp);
41537 }
41538
41539 A.iushrn(1);
41540 B.iushrn(1);
41541 }
41542 }
41543
41544 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
41545 if (j > 0) {
41546 y.iushrn(j);
41547 while (j-- > 0) {
41548 if (C.isOdd() || D.isOdd()) {
41549 C.iadd(yp);
41550 D.isub(xp);
41551 }
41552
41553 C.iushrn(1);
41554 D.iushrn(1);
41555 }
41556 }
41557
41558 if (x.cmp(y) >= 0) {
41559 x.isub(y);
41560 A.isub(C);
41561 B.isub(D);
41562 } else {
41563 y.isub(x);
41564 C.isub(A);
41565 D.isub(B);
41566 }
41567 }
41568
41569 return {
41570 a: C,
41571 b: D,
41572 gcd: y.iushln(g)
41573 };
41574 };
41575
41576 // This is reduced incarnation of the binary EEA
41577 // above, designated to invert members of the
41578 // _prime_ fields F(p) at a maximal speed
41579 BN.prototype._invmp = function _invmp (p) {
41580 assert(p.negative === 0);
41581 assert(!p.isZero());
41582
41583 var a = this;
41584 var b = p.clone();
41585
41586 if (a.negative !== 0) {
41587 a = a.umod(p);
41588 } else {
41589 a = a.clone();
41590 }
41591
41592 var x1 = new BN(1);
41593 var x2 = new BN(0);
41594
41595 var delta = b.clone();
41596
41597 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
41598 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
41599 if (i > 0) {
41600 a.iushrn(i);
41601 while (i-- > 0) {
41602 if (x1.isOdd()) {
41603 x1.iadd(delta);
41604 }
41605
41606 x1.iushrn(1);
41607 }
41608 }
41609
41610 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
41611 if (j > 0) {
41612 b.iushrn(j);
41613 while (j-- > 0) {
41614 if (x2.isOdd()) {
41615 x2.iadd(delta);
41616 }
41617
41618 x2.iushrn(1);
41619 }
41620 }
41621
41622 if (a.cmp(b) >= 0) {
41623 a.isub(b);
41624 x1.isub(x2);
41625 } else {
41626 b.isub(a);
41627 x2.isub(x1);
41628 }
41629 }
41630
41631 var res;
41632 if (a.cmpn(1) === 0) {
41633 res = x1;
41634 } else {
41635 res = x2;
41636 }
41637
41638 if (res.cmpn(0) < 0) {
41639 res.iadd(p);
41640 }
41641
41642 return res;
41643 };
41644
41645 BN.prototype.gcd = function gcd (num) {
41646 if (this.isZero()) return num.abs();
41647 if (num.isZero()) return this.abs();
41648
41649 var a = this.clone();
41650 var b = num.clone();
41651 a.negative = 0;
41652 b.negative = 0;
41653
41654 // Remove common factor of two
41655 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
41656 a.iushrn(1);
41657 b.iushrn(1);
41658 }
41659
41660 do {
41661 while (a.isEven()) {
41662 a.iushrn(1);
41663 }
41664 while (b.isEven()) {
41665 b.iushrn(1);
41666 }
41667
41668 var r = a.cmp(b);
41669 if (r < 0) {
41670 // Swap `a` and `b` to make `a` always bigger than `b`
41671 var t = a;
41672 a = b;
41673 b = t;
41674 } else if (r === 0 || b.cmpn(1) === 0) {
41675 break;
41676 }
41677
41678 a.isub(b);
41679 } while (true);
41680
41681 return b.iushln(shift);
41682 };
41683
41684 // Invert number in the field F(num)
41685 BN.prototype.invm = function invm (num) {
41686 return this.egcd(num).a.umod(num);
41687 };
41688
41689 BN.prototype.isEven = function isEven () {
41690 return (this.words[0] & 1) === 0;
41691 };
41692
41693 BN.prototype.isOdd = function isOdd () {
41694 return (this.words[0] & 1) === 1;
41695 };
41696
41697 // And first word and num
41698 BN.prototype.andln = function andln (num) {
41699 return this.words[0] & num;
41700 };
41701
41702 // Increment at the bit position in-line
41703 BN.prototype.bincn = function bincn (bit) {
41704 assert(typeof bit === 'number');
41705 var r = bit % 26;
41706 var s = (bit - r) / 26;
41707 var q = 1 << r;
41708
41709 // Fast case: bit is much higher than all existing words
41710 if (this.length <= s) {
41711 this._expand(s + 1);
41712 this.words[s] |= q;
41713 return this;
41714 }
41715
41716 // Add bit and propagate, if needed
41717 var carry = q;
41718 for (var i = s; carry !== 0 && i < this.length; i++) {
41719 var w = this.words[i] | 0;
41720 w += carry;
41721 carry = w >>> 26;
41722 w &= 0x3ffffff;
41723 this.words[i] = w;
41724 }
41725 if (carry !== 0) {
41726 this.words[i] = carry;
41727 this.length++;
41728 }
41729 return this;
41730 };
41731
41732 BN.prototype.isZero = function isZero () {
41733 return this.length === 1 && this.words[0] === 0;
41734 };
41735
41736 BN.prototype.cmpn = function cmpn (num) {
41737 var negative = num < 0;
41738
41739 if (this.negative !== 0 && !negative) return -1;
41740 if (this.negative === 0 && negative) return 1;
41741
41742 this.strip();
41743
41744 var res;
41745 if (this.length > 1) {
41746 res = 1;
41747 } else {
41748 if (negative) {
41749 num = -num;
41750 }
41751
41752 assert(num <= 0x3ffffff, 'Number is too big');
41753
41754 var w = this.words[0] | 0;
41755 res = w === num ? 0 : w < num ? -1 : 1;
41756 }
41757 if (this.negative !== 0) return -res | 0;
41758 return res;
41759 };
41760
41761 // Compare two numbers and return:
41762 // 1 - if `this` > `num`
41763 // 0 - if `this` == `num`
41764 // -1 - if `this` < `num`
41765 BN.prototype.cmp = function cmp (num) {
41766 if (this.negative !== 0 && num.negative === 0) return -1;
41767 if (this.negative === 0 && num.negative !== 0) return 1;
41768
41769 var res = this.ucmp(num);
41770 if (this.negative !== 0) return -res | 0;
41771 return res;
41772 };
41773
41774 // Unsigned comparison
41775 BN.prototype.ucmp = function ucmp (num) {
41776 // At this point both numbers have the same sign
41777 if (this.length > num.length) return 1;
41778 if (this.length < num.length) return -1;
41779
41780 var res = 0;
41781 for (var i = this.length - 1; i >= 0; i--) {
41782 var a = this.words[i] | 0;
41783 var b = num.words[i] | 0;
41784
41785 if (a === b) continue;
41786 if (a < b) {
41787 res = -1;
41788 } else if (a > b) {
41789 res = 1;
41790 }
41791 break;
41792 }
41793 return res;
41794 };
41795
41796 BN.prototype.gtn = function gtn (num) {
41797 return this.cmpn(num) === 1;
41798 };
41799
41800 BN.prototype.gt = function gt (num) {
41801 return this.cmp(num) === 1;
41802 };
41803
41804 BN.prototype.gten = function gten (num) {
41805 return this.cmpn(num) >= 0;
41806 };
41807
41808 BN.prototype.gte = function gte (num) {
41809 return this.cmp(num) >= 0;
41810 };
41811
41812 BN.prototype.ltn = function ltn (num) {
41813 return this.cmpn(num) === -1;
41814 };
41815
41816 BN.prototype.lt = function lt (num) {
41817 return this.cmp(num) === -1;
41818 };
41819
41820 BN.prototype.lten = function lten (num) {
41821 return this.cmpn(num) <= 0;
41822 };
41823
41824 BN.prototype.lte = function lte (num) {
41825 return this.cmp(num) <= 0;
41826 };
41827
41828 BN.prototype.eqn = function eqn (num) {
41829 return this.cmpn(num) === 0;
41830 };
41831
41832 BN.prototype.eq = function eq (num) {
41833 return this.cmp(num) === 0;
41834 };
41835
41836 //
41837 // A reduce context, could be using montgomery or something better, depending
41838 // on the `m` itself.
41839 //
41840 BN.red = function red (num) {
41841 return new Red(num);
41842 };
41843
41844 BN.prototype.toRed = function toRed (ctx) {
41845 assert(!this.red, 'Already a number in reduction context');
41846 assert(this.negative === 0, 'red works only with positives');
41847 return ctx.convertTo(this)._forceRed(ctx);
41848 };
41849
41850 BN.prototype.fromRed = function fromRed () {
41851 assert(this.red, 'fromRed works only with numbers in reduction context');
41852 return this.red.convertFrom(this);
41853 };
41854
41855 BN.prototype._forceRed = function _forceRed (ctx) {
41856 this.red = ctx;
41857 return this;
41858 };
41859
41860 BN.prototype.forceRed = function forceRed (ctx) {
41861 assert(!this.red, 'Already a number in reduction context');
41862 return this._forceRed(ctx);
41863 };
41864
41865 BN.prototype.redAdd = function redAdd (num) {
41866 assert(this.red, 'redAdd works only with red numbers');
41867 return this.red.add(this, num);
41868 };
41869
41870 BN.prototype.redIAdd = function redIAdd (num) {
41871 assert(this.red, 'redIAdd works only with red numbers');
41872 return this.red.iadd(this, num);
41873 };
41874
41875 BN.prototype.redSub = function redSub (num) {
41876 assert(this.red, 'redSub works only with red numbers');
41877 return this.red.sub(this, num);
41878 };
41879
41880 BN.prototype.redISub = function redISub (num) {
41881 assert(this.red, 'redISub works only with red numbers');
41882 return this.red.isub(this, num);
41883 };
41884
41885 BN.prototype.redShl = function redShl (num) {
41886 assert(this.red, 'redShl works only with red numbers');
41887 return this.red.shl(this, num);
41888 };
41889
41890 BN.prototype.redMul = function redMul (num) {
41891 assert(this.red, 'redMul works only with red numbers');
41892 this.red._verify2(this, num);
41893 return this.red.mul(this, num);
41894 };
41895
41896 BN.prototype.redIMul = function redIMul (num) {
41897 assert(this.red, 'redMul works only with red numbers');
41898 this.red._verify2(this, num);
41899 return this.red.imul(this, num);
41900 };
41901
41902 BN.prototype.redSqr = function redSqr () {
41903 assert(this.red, 'redSqr works only with red numbers');
41904 this.red._verify1(this);
41905 return this.red.sqr(this);
41906 };
41907
41908 BN.prototype.redISqr = function redISqr () {
41909 assert(this.red, 'redISqr works only with red numbers');
41910 this.red._verify1(this);
41911 return this.red.isqr(this);
41912 };
41913
41914 // Square root over p
41915 BN.prototype.redSqrt = function redSqrt () {
41916 assert(this.red, 'redSqrt works only with red numbers');
41917 this.red._verify1(this);
41918 return this.red.sqrt(this);
41919 };
41920
41921 BN.prototype.redInvm = function redInvm () {
41922 assert(this.red, 'redInvm works only with red numbers');
41923 this.red._verify1(this);
41924 return this.red.invm(this);
41925 };
41926
41927 // Return negative clone of `this` % `red modulo`
41928 BN.prototype.redNeg = function redNeg () {
41929 assert(this.red, 'redNeg works only with red numbers');
41930 this.red._verify1(this);
41931 return this.red.neg(this);
41932 };
41933
41934 BN.prototype.redPow = function redPow (num) {
41935 assert(this.red && !num.red, 'redPow(normalNum)');
41936 this.red._verify1(this);
41937 return this.red.pow(this, num);
41938 };
41939
41940 // Prime numbers with efficient reduction
41941 var primes = {
41942 k256: null,
41943 p224: null,
41944 p192: null,
41945 p25519: null
41946 };
41947
41948 // Pseudo-Mersenne prime
41949 function MPrime (name, p) {
41950 // P = 2 ^ N - K
41951 this.name = name;
41952 this.p = new BN(p, 16);
41953 this.n = this.p.bitLength();
41954 this.k = new BN(1).iushln(this.n).isub(this.p);
41955
41956 this.tmp = this._tmp();
41957 }
41958
41959 MPrime.prototype._tmp = function _tmp () {
41960 var tmp = new BN(null);
41961 tmp.words = new Array(Math.ceil(this.n / 13));
41962 return tmp;
41963 };
41964
41965 MPrime.prototype.ireduce = function ireduce (num) {
41966 // Assumes that `num` is less than `P^2`
41967 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
41968 var r = num;
41969 var rlen;
41970
41971 do {
41972 this.split(r, this.tmp);
41973 r = this.imulK(r);
41974 r = r.iadd(this.tmp);
41975 rlen = r.bitLength();
41976 } while (rlen > this.n);
41977
41978 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
41979 if (cmp === 0) {
41980 r.words[0] = 0;
41981 r.length = 1;
41982 } else if (cmp > 0) {
41983 r.isub(this.p);
41984 } else {
41985 r.strip();
41986 }
41987
41988 return r;
41989 };
41990
41991 MPrime.prototype.split = function split (input, out) {
41992 input.iushrn(this.n, 0, out);
41993 };
41994
41995 MPrime.prototype.imulK = function imulK (num) {
41996 return num.imul(this.k);
41997 };
41998
41999 function K256 () {
42000 MPrime.call(
42001 this,
42002 'k256',
42003 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
42004 }
42005 inherits(K256, MPrime);
42006
42007 K256.prototype.split = function split (input, output) {
42008 // 256 = 9 * 26 + 22
42009 var mask = 0x3fffff;
42010
42011 var outLen = Math.min(input.length, 9);
42012 for (var i = 0; i < outLen; i++) {
42013 output.words[i] = input.words[i];
42014 }
42015 output.length = outLen;
42016
42017 if (input.length <= 9) {
42018 input.words[0] = 0;
42019 input.length = 1;
42020 return;
42021 }
42022
42023 // Shift by 9 limbs
42024 var prev = input.words[9];
42025 output.words[output.length++] = prev & mask;
42026
42027 for (i = 10; i < input.length; i++) {
42028 var next = input.words[i] | 0;
42029 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
42030 prev = next;
42031 }
42032 prev >>>= 22;
42033 input.words[i - 10] = prev;
42034 if (prev === 0 && input.length > 10) {
42035 input.length -= 10;
42036 } else {
42037 input.length -= 9;
42038 }
42039 };
42040
42041 K256.prototype.imulK = function imulK (num) {
42042 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
42043 num.words[num.length] = 0;
42044 num.words[num.length + 1] = 0;
42045 num.length += 2;
42046
42047 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
42048 var lo = 0;
42049 for (var i = 0; i < num.length; i++) {
42050 var w = num.words[i] | 0;
42051 lo += w * 0x3d1;
42052 num.words[i] = lo & 0x3ffffff;
42053 lo = w * 0x40 + ((lo / 0x4000000) | 0);
42054 }
42055
42056 // Fast length reduction
42057 if (num.words[num.length - 1] === 0) {
42058 num.length--;
42059 if (num.words[num.length - 1] === 0) {
42060 num.length--;
42061 }
42062 }
42063 return num;
42064 };
42065
42066 function P224 () {
42067 MPrime.call(
42068 this,
42069 'p224',
42070 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
42071 }
42072 inherits(P224, MPrime);
42073
42074 function P192 () {
42075 MPrime.call(
42076 this,
42077 'p192',
42078 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
42079 }
42080 inherits(P192, MPrime);
42081
42082 function P25519 () {
42083 // 2 ^ 255 - 19
42084 MPrime.call(
42085 this,
42086 '25519',
42087 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
42088 }
42089 inherits(P25519, MPrime);
42090
42091 P25519.prototype.imulK = function imulK (num) {
42092 // K = 0x13
42093 var carry = 0;
42094 for (var i = 0; i < num.length; i++) {
42095 var hi = (num.words[i] | 0) * 0x13 + carry;
42096 var lo = hi & 0x3ffffff;
42097 hi >>>= 26;
42098
42099 num.words[i] = lo;
42100 carry = hi;
42101 }
42102 if (carry !== 0) {
42103 num.words[num.length++] = carry;
42104 }
42105 return num;
42106 };
42107
42108 // Exported mostly for testing purposes, use plain name instead
42109 BN._prime = function prime (name) {
42110 // Cached version of prime
42111 if (primes[name]) return primes[name];
42112
42113 var prime;
42114 if (name === 'k256') {
42115 prime = new K256();
42116 } else if (name === 'p224') {
42117 prime = new P224();
42118 } else if (name === 'p192') {
42119 prime = new P192();
42120 } else if (name === 'p25519') {
42121 prime = new P25519();
42122 } else {
42123 throw new Error('Unknown prime ' + name);
42124 }
42125 primes[name] = prime;
42126
42127 return prime;
42128 };
42129
42130 //
42131 // Base reduction engine
42132 //
42133 function Red (m) {
42134 if (typeof m === 'string') {
42135 var prime = BN._prime(m);
42136 this.m = prime.p;
42137 this.prime = prime;
42138 } else {
42139 assert(m.gtn(1), 'modulus must be greater than 1');
42140 this.m = m;
42141 this.prime = null;
42142 }
42143 }
42144
42145 Red.prototype._verify1 = function _verify1 (a) {
42146 assert(a.negative === 0, 'red works only with positives');
42147 assert(a.red, 'red works only with red numbers');
42148 };
42149
42150 Red.prototype._verify2 = function _verify2 (a, b) {
42151 assert((a.negative | b.negative) === 0, 'red works only with positives');
42152 assert(a.red && a.red === b.red,
42153 'red works only with red numbers');
42154 };
42155
42156 Red.prototype.imod = function imod (a) {
42157 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
42158 return a.umod(this.m)._forceRed(this);
42159 };
42160
42161 Red.prototype.neg = function neg (a) {
42162 if (a.isZero()) {
42163 return a.clone();
42164 }
42165
42166 return this.m.sub(a)._forceRed(this);
42167 };
42168
42169 Red.prototype.add = function add (a, b) {
42170 this._verify2(a, b);
42171
42172 var res = a.add(b);
42173 if (res.cmp(this.m) >= 0) {
42174 res.isub(this.m);
42175 }
42176 return res._forceRed(this);
42177 };
42178
42179 Red.prototype.iadd = function iadd (a, b) {
42180 this._verify2(a, b);
42181
42182 var res = a.iadd(b);
42183 if (res.cmp(this.m) >= 0) {
42184 res.isub(this.m);
42185 }
42186 return res;
42187 };
42188
42189 Red.prototype.sub = function sub (a, b) {
42190 this._verify2(a, b);
42191
42192 var res = a.sub(b);
42193 if (res.cmpn(0) < 0) {
42194 res.iadd(this.m);
42195 }
42196 return res._forceRed(this);
42197 };
42198
42199 Red.prototype.isub = function isub (a, b) {
42200 this._verify2(a, b);
42201
42202 var res = a.isub(b);
42203 if (res.cmpn(0) < 0) {
42204 res.iadd(this.m);
42205 }
42206 return res;
42207 };
42208
42209 Red.prototype.shl = function shl (a, num) {
42210 this._verify1(a);
42211 return this.imod(a.ushln(num));
42212 };
42213
42214 Red.prototype.imul = function imul (a, b) {
42215 this._verify2(a, b);
42216 return this.imod(a.imul(b));
42217 };
42218
42219 Red.prototype.mul = function mul (a, b) {
42220 this._verify2(a, b);
42221 return this.imod(a.mul(b));
42222 };
42223
42224 Red.prototype.isqr = function isqr (a) {
42225 return this.imul(a, a.clone());
42226 };
42227
42228 Red.prototype.sqr = function sqr (a) {
42229 return this.mul(a, a);
42230 };
42231
42232 Red.prototype.sqrt = function sqrt (a) {
42233 if (a.isZero()) return a.clone();
42234
42235 var mod3 = this.m.andln(3);
42236 assert(mod3 % 2 === 1);
42237
42238 // Fast case
42239 if (mod3 === 3) {
42240 var pow = this.m.add(new BN(1)).iushrn(2);
42241 return this.pow(a, pow);
42242 }
42243
42244 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
42245 //
42246 // Find Q and S, that Q * 2 ^ S = (P - 1)
42247 var q = this.m.subn(1);
42248 var s = 0;
42249 while (!q.isZero() && q.andln(1) === 0) {
42250 s++;
42251 q.iushrn(1);
42252 }
42253 assert(!q.isZero());
42254
42255 var one = new BN(1).toRed(this);
42256 var nOne = one.redNeg();
42257
42258 // Find quadratic non-residue
42259 // NOTE: Max is such because of generalized Riemann hypothesis.
42260 var lpow = this.m.subn(1).iushrn(1);
42261 var z = this.m.bitLength();
42262 z = new BN(2 * z * z).toRed(this);
42263
42264 while (this.pow(z, lpow).cmp(nOne) !== 0) {
42265 z.redIAdd(nOne);
42266 }
42267
42268 var c = this.pow(z, q);
42269 var r = this.pow(a, q.addn(1).iushrn(1));
42270 var t = this.pow(a, q);
42271 var m = s;
42272 while (t.cmp(one) !== 0) {
42273 var tmp = t;
42274 for (var i = 0; tmp.cmp(one) !== 0; i++) {
42275 tmp = tmp.redSqr();
42276 }
42277 assert(i < m);
42278 var b = this.pow(c, new BN(1).iushln(m - i - 1));
42279
42280 r = r.redMul(b);
42281 c = b.redSqr();
42282 t = t.redMul(c);
42283 m = i;
42284 }
42285
42286 return r;
42287 };
42288
42289 Red.prototype.invm = function invm (a) {
42290 var inv = a._invmp(this.m);
42291 if (inv.negative !== 0) {
42292 inv.negative = 0;
42293 return this.imod(inv).redNeg();
42294 } else {
42295 return this.imod(inv);
42296 }
42297 };
42298
42299 Red.prototype.pow = function pow (a, num) {
42300 if (num.isZero()) return new BN(1);
42301 if (num.cmpn(1) === 0) return a.clone();
42302
42303 var windowSize = 4;
42304 var wnd = new Array(1 << windowSize);
42305 wnd[0] = new BN(1).toRed(this);
42306 wnd[1] = a;
42307 for (var i = 2; i < wnd.length; i++) {
42308 wnd[i] = this.mul(wnd[i - 1], a);
42309 }
42310
42311 var res = wnd[0];
42312 var current = 0;
42313 var currentLen = 0;
42314 var start = num.bitLength() % 26;
42315 if (start === 0) {
42316 start = 26;
42317 }
42318
42319 for (i = num.length - 1; i >= 0; i--) {
42320 var word = num.words[i];
42321 for (var j = start - 1; j >= 0; j--) {
42322 var bit = (word >> j) & 1;
42323 if (res !== wnd[0]) {
42324 res = this.sqr(res);
42325 }
42326
42327 if (bit === 0 && current === 0) {
42328 currentLen = 0;
42329 continue;
42330 }
42331
42332 current <<= 1;
42333 current |= bit;
42334 currentLen++;
42335 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
42336
42337 res = this.mul(res, wnd[current]);
42338 currentLen = 0;
42339 current = 0;
42340 }
42341 start = 26;
42342 }
42343
42344 return res;
42345 };
42346
42347 Red.prototype.convertTo = function convertTo (num) {
42348 var r = num.umod(this.m);
42349
42350 return r === num ? r.clone() : r;
42351 };
42352
42353 Red.prototype.convertFrom = function convertFrom (num) {
42354 var res = num.clone();
42355 res.red = null;
42356 return res;
42357 };
42358
42359 //
42360 // Montgomery method engine
42361 //
42362
42363 BN.mont = function mont (num) {
42364 return new Mont(num);
42365 };
42366
42367 function Mont (m) {
42368 Red.call(this, m);
42369
42370 this.shift = this.m.bitLength();
42371 if (this.shift % 26 !== 0) {
42372 this.shift += 26 - (this.shift % 26);
42373 }
42374
42375 this.r = new BN(1).iushln(this.shift);
42376 this.r2 = this.imod(this.r.sqr());
42377 this.rinv = this.r._invmp(this.m);
42378
42379 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
42380 this.minv = this.minv.umod(this.r);
42381 this.minv = this.r.sub(this.minv);
42382 }
42383 inherits(Mont, Red);
42384
42385 Mont.prototype.convertTo = function convertTo (num) {
42386 return this.imod(num.ushln(this.shift));
42387 };
42388
42389 Mont.prototype.convertFrom = function convertFrom (num) {
42390 var r = this.imod(num.mul(this.rinv));
42391 r.red = null;
42392 return r;
42393 };
42394
42395 Mont.prototype.imul = function imul (a, b) {
42396 if (a.isZero() || b.isZero()) {
42397 a.words[0] = 0;
42398 a.length = 1;
42399 return a;
42400 }
42401
42402 var t = a.imul(b);
42403 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
42404 var u = t.isub(c).iushrn(this.shift);
42405 var res = u;
42406
42407 if (u.cmp(this.m) >= 0) {
42408 res = u.isub(this.m);
42409 } else if (u.cmpn(0) < 0) {
42410 res = u.iadd(this.m);
42411 }
42412
42413 return res._forceRed(this);
42414 };
42415
42416 Mont.prototype.mul = function mul (a, b) {
42417 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
42418
42419 var t = a.mul(b);
42420 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
42421 var u = t.isub(c).iushrn(this.shift);
42422 var res = u;
42423 if (u.cmp(this.m) >= 0) {
42424 res = u.isub(this.m);
42425 } else if (u.cmpn(0) < 0) {
42426 res = u.iadd(this.m);
42427 }
42428
42429 return res._forceRed(this);
42430 };
42431
42432 Mont.prototype.invm = function invm (a) {
42433 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
42434 var res = this.imod(a._invmp(this.m).mul(this.r2));
42435 return res._forceRed(this);
42436 };
42437 })(typeof module === 'undefined' || module, this);
42438
42439 },{}],82:[function(require,module,exports){
42440 var r;
42441
42442 module.exports = function rand(len) {
42443 if (!r)
42444 r = new Rand(null);
42445
42446 return r.generate(len);
42447 };
42448
42449 function Rand(rand) {
42450 this.rand = rand;
42451 }
42452 module.exports.Rand = Rand;
42453
42454 Rand.prototype.generate = function generate(len) {
42455 return this._rand(len);
42456 };
42457
42458 // Emulate crypto API using randy
42459 Rand.prototype._rand = function _rand(n) {
42460 if (this.rand.getBytes)
42461 return this.rand.getBytes(n);
42462
42463 var res = new Uint8Array(n);
42464 for (var i = 0; i < res.length; i++)
42465 res[i] = this.rand.getByte();
42466 return res;
42467 };
42468
42469 if (typeof self === 'object') {
42470 if (self.crypto && self.crypto.getRandomValues) {
42471 // Modern browsers
42472 Rand.prototype._rand = function _rand(n) {
42473 var arr = new Uint8Array(n);
42474 self.crypto.getRandomValues(arr);
42475 return arr;
42476 };
42477 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
42478 // IE
42479 Rand.prototype._rand = function _rand(n) {
42480 var arr = new Uint8Array(n);
42481 self.msCrypto.getRandomValues(arr);
42482 return arr;
42483 };
42484
42485 // Safari's WebWorkers do not have `crypto`
42486 } else if (typeof window === 'object') {
42487 // Old junk
42488 Rand.prototype._rand = function() {
42489 throw new Error('Not implemented yet');
42490 };
42491 }
42492 } else {
42493 // Node.js or Web worker with no crypto support
42494 try {
42495 var crypto = require('crypto');
42496 if (typeof crypto.randomBytes !== 'function')
42497 throw new Error('Not supported');
42498
42499 Rand.prototype._rand = function _rand(n) {
42500 return crypto.randomBytes(n);
42501 };
42502 } catch (e) {
42503 }
42504 }
42505
42506 },{"crypto":3}],83:[function(require,module,exports){
42507 var basex = require('base-x')
42508 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
42509
42510 module.exports = basex(ALPHABET)
42511
42512 },{"base-x":35}],84:[function(require,module,exports){
42513 (function (Buffer){
42514 'use strict'
42515
42516 var base58 = require('bs58')
42517
42518 module.exports = function (checksumFn) {
42519 // Encode a buffer as a base58-check encoded string
42520 function encode (payload) {
42521 var checksum = checksumFn(payload)
42522
42523 return base58.encode(Buffer.concat([
42524 payload,
42525 checksum
42526 ], payload.length + 4))
42527 }
42528
42529 function decodeRaw (buffer) {
42530 var payload = buffer.slice(0, -4)
42531 var checksum = buffer.slice(-4)
42532 var newChecksum = checksumFn(payload)
42533
42534 if (checksum[0] ^ newChecksum[0] |
42535 checksum[1] ^ newChecksum[1] |
42536 checksum[2] ^ newChecksum[2] |
42537 checksum[3] ^ newChecksum[3]) return
42538
42539 return payload
42540 }
42541
42542 // Decode a base58-check encoded string to a buffer, no result if checksum is wrong
42543 function decodeUnsafe (string) {
42544 var buffer = base58.decodeUnsafe(string)
42545 if (!buffer) return
42546
42547 return decodeRaw(buffer)
42548 }
42549
42550 function decode (string) {
42551 var buffer = base58.decode(string)
42552 var payload = decodeRaw(buffer, checksumFn)
42553 if (!payload) throw new Error('Invalid checksum')
42554 return payload
42555 }
42556
42557 return {
42558 encode: encode,
42559 decode: decode,
42560 decodeUnsafe: decodeUnsafe
42561 }
42562 }
42563
42564 }).call(this,require("buffer").Buffer)
42565 },{"bs58":83,"buffer":5}],85:[function(require,module,exports){
42566 'use strict'
42567
42568 var createHash = require('create-hash')
42569 var bs58checkBase = require('./base')
42570
42571 // SHA256(SHA256(buffer))
42572 function sha256x2 (buffer) {
42573 var tmp = createHash('sha256').update(buffer).digest()
42574 return createHash('sha256').update(tmp).digest()
42575 }
42576
42577 module.exports = bs58checkBase(sha256x2)
42578
42579 },{"./base":84,"create-hash":87}],86:[function(require,module,exports){
42580 var Buffer = require('safe-buffer').Buffer
42581 var Transform = require('stream').Transform
42582 var StringDecoder = require('string_decoder').StringDecoder
42583 var inherits = require('inherits')
42584
42585 function CipherBase (hashMode) {
42586 Transform.call(this)
42587 this.hashMode = typeof hashMode === 'string'
42588 if (this.hashMode) {
42589 this[hashMode] = this._finalOrDigest
42590 } else {
42591 this.final = this._finalOrDigest
42592 }
42593 if (this._final) {
42594 this.__final = this._final
42595 this._final = null
42596 }
42597 this._decoder = null
42598 this._encoding = null
42599 }
42600 inherits(CipherBase, Transform)
42601
42602 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
42603 if (typeof data === 'string') {
42604 data = Buffer.from(data, inputEnc)
42605 }
42606
42607 var outData = this._update(data)
42608 if (this.hashMode) return this
42609
42610 if (outputEnc) {
42611 outData = this._toString(outData, outputEnc)
42612 }
42613
42614 return outData
42615 }
42616
42617 CipherBase.prototype.setAutoPadding = function () {}
42618 CipherBase.prototype.getAuthTag = function () {
42619 throw new Error('trying to get auth tag in unsupported state')
42620 }
42621
42622 CipherBase.prototype.setAuthTag = function () {
42623 throw new Error('trying to set auth tag in unsupported state')
42624 }
42625
42626 CipherBase.prototype.setAAD = function () {
42627 throw new Error('trying to set aad in unsupported state')
42628 }
42629
42630 CipherBase.prototype._transform = function (data, _, next) {
42631 var err
42632 try {
42633 if (this.hashMode) {
42634 this._update(data)
42635 } else {
42636 this.push(this._update(data))
42637 }
42638 } catch (e) {
42639 err = e
42640 } finally {
42641 next(err)
42642 }
42643 }
42644 CipherBase.prototype._flush = function (done) {
42645 var err
42646 try {
42647 this.push(this.__final())
42648 } catch (e) {
42649 err = e
42650 }
42651
42652 done(err)
42653 }
42654 CipherBase.prototype._finalOrDigest = function (outputEnc) {
42655 var outData = this.__final() || Buffer.alloc(0)
42656 if (outputEnc) {
42657 outData = this._toString(outData, outputEnc, true)
42658 }
42659 return outData
42660 }
42661
42662 CipherBase.prototype._toString = function (value, enc, fin) {
42663 if (!this._decoder) {
42664 this._decoder = new StringDecoder(enc)
42665 this._encoding = enc
42666 }
42667
42668 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
42669
42670 var out = this._decoder.write(value)
42671 if (fin) {
42672 out += this._decoder.end()
42673 }
42674
42675 return out
42676 }
42677
42678 module.exports = CipherBase
42679
42680 },{"inherits":121,"safe-buffer":128,"stream":28,"string_decoder":29}],87:[function(require,module,exports){
42681 (function (Buffer){
42682 'use strict'
42683 var inherits = require('inherits')
42684 var md5 = require('./md5')
42685 var RIPEMD160 = require('ripemd160')
42686 var sha = require('sha.js')
42687
42688 var Base = require('cipher-base')
42689
42690 function HashNoConstructor (hash) {
42691 Base.call(this, 'digest')
42692
42693 this._hash = hash
42694 this.buffers = []
42695 }
42696
42697 inherits(HashNoConstructor, Base)
42698
42699 HashNoConstructor.prototype._update = function (data) {
42700 this.buffers.push(data)
42701 }
42702
42703 HashNoConstructor.prototype._final = function () {
42704 var buf = Buffer.concat(this.buffers)
42705 var r = this._hash(buf)
42706 this.buffers = null
42707
42708 return r
42709 }
42710
42711 function Hash (hash) {
42712 Base.call(this, 'digest')
42713
42714 this._hash = hash
42715 }
42716
42717 inherits(Hash, Base)
42718
42719 Hash.prototype._update = function (data) {
42720 this._hash.update(data)
42721 }
42722
42723 Hash.prototype._final = function () {
42724 return this._hash.digest()
42725 }
42726
42727 module.exports = function createHash (alg) {
42728 alg = alg.toLowerCase()
42729 if (alg === 'md5') return new HashNoConstructor(md5)
42730 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
42731
42732 return new Hash(sha(alg))
42733 }
42734
42735 }).call(this,require("buffer").Buffer)
42736 },{"./md5":89,"buffer":5,"cipher-base":86,"inherits":121,"ripemd160":127,"sha.js":130}],88:[function(require,module,exports){
42737 (function (Buffer){
42738 'use strict'
42739 var intSize = 4
42740 var zeroBuffer = new Buffer(intSize)
42741 zeroBuffer.fill(0)
42742
42743 var charSize = 8
42744 var hashSize = 16
42745
42746 function toArray (buf) {
42747 if ((buf.length % intSize) !== 0) {
42748 var len = buf.length + (intSize - (buf.length % intSize))
42749 buf = Buffer.concat([buf, zeroBuffer], len)
42750 }
42751
42752 var arr = new Array(buf.length >>> 2)
42753 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
42754 arr[j] = buf.readInt32LE(i)
42755 }
42756
42757 return arr
42758 }
42759
42760 module.exports = function hash (buf, fn) {
42761 var arr = fn(toArray(buf), buf.length * charSize)
42762 buf = new Buffer(hashSize)
42763 for (var i = 0; i < arr.length; i++) {
42764 buf.writeInt32LE(arr[i], i << 2, true)
42765 }
42766 return buf
42767 }
42768
42769 }).call(this,require("buffer").Buffer)
42770 },{"buffer":5}],89:[function(require,module,exports){
42771 'use strict'
42772 /*
42773 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
42774 * Digest Algorithm, as defined in RFC 1321.
42775 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
42776 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
42777 * Distributed under the BSD License
42778 * See http://pajhome.org.uk/crypt/md5 for more info.
42779 */
42780
42781 var makeHash = require('./make-hash')
42782
42783 /*
42784 * Calculate the MD5 of an array of little-endian words, and a bit length
42785 */
42786 function core_md5 (x, len) {
42787 /* append padding */
42788 x[len >> 5] |= 0x80 << ((len) % 32)
42789 x[(((len + 64) >>> 9) << 4) + 14] = len
42790
42791 var a = 1732584193
42792 var b = -271733879
42793 var c = -1732584194
42794 var d = 271733878
42795
42796 for (var i = 0; i < x.length; i += 16) {
42797 var olda = a
42798 var oldb = b
42799 var oldc = c
42800 var oldd = d
42801
42802 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
42803 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
42804 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
42805 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
42806 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
42807 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
42808 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
42809 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
42810 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
42811 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
42812 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
42813 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
42814 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
42815 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
42816 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
42817 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
42818
42819 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
42820 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
42821 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
42822 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
42823 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
42824 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
42825 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
42826 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
42827 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
42828 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
42829 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
42830 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
42831 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
42832 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
42833 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
42834 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
42835
42836 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
42837 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
42838 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
42839 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
42840 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
42841 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
42842 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
42843 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
42844 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
42845 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
42846 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
42847 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
42848 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
42849 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
42850 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
42851 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
42852
42853 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
42854 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
42855 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
42856 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
42857 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
42858 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
42859 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
42860 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
42861 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
42862 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
42863 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
42864 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
42865 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
42866 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
42867 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
42868 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
42869
42870 a = safe_add(a, olda)
42871 b = safe_add(b, oldb)
42872 c = safe_add(c, oldc)
42873 d = safe_add(d, oldd)
42874 }
42875
42876 return [a, b, c, d]
42877 }
42878
42879 /*
42880 * These functions implement the four basic operations the algorithm uses.
42881 */
42882 function md5_cmn (q, a, b, x, s, t) {
42883 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
42884 }
42885
42886 function md5_ff (a, b, c, d, x, s, t) {
42887 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
42888 }
42889
42890 function md5_gg (a, b, c, d, x, s, t) {
42891 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
42892 }
42893
42894 function md5_hh (a, b, c, d, x, s, t) {
42895 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
42896 }
42897
42898 function md5_ii (a, b, c, d, x, s, t) {
42899 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
42900 }
42901
42902 /*
42903 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
42904 * to work around bugs in some JS interpreters.
42905 */
42906 function safe_add (x, y) {
42907 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
42908 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
42909 return (msw << 16) | (lsw & 0xFFFF)
42910 }
42911
42912 /*
42913 * Bitwise rotate a 32-bit number to the left.
42914 */
42915 function bit_rol (num, cnt) {
42916 return (num << cnt) | (num >>> (32 - cnt))
42917 }
42918
42919 module.exports = function md5 (buf) {
42920 return makeHash(buf, core_md5)
42921 }
42922
42923 },{"./make-hash":88}],90:[function(require,module,exports){
42924 'use strict'
42925 var inherits = require('inherits')
42926 var Legacy = require('./legacy')
42927 var Base = require('cipher-base')
42928 var Buffer = require('safe-buffer').Buffer
42929 var md5 = require('create-hash/md5')
42930 var RIPEMD160 = require('ripemd160')
42931
42932 var sha = require('sha.js')
42933
42934 var ZEROS = Buffer.alloc(128)
42935
42936 function Hmac (alg, key) {
42937 Base.call(this, 'digest')
42938 if (typeof key === 'string') {
42939 key = Buffer.from(key)
42940 }
42941
42942 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
42943
42944 this._alg = alg
42945 this._key = key
42946 if (key.length > blocksize) {
42947 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
42948 key = hash.update(key).digest()
42949 } else if (key.length < blocksize) {
42950 key = Buffer.concat([key, ZEROS], blocksize)
42951 }
42952
42953 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
42954 var opad = this._opad = Buffer.allocUnsafe(blocksize)
42955
42956 for (var i = 0; i < blocksize; i++) {
42957 ipad[i] = key[i] ^ 0x36
42958 opad[i] = key[i] ^ 0x5C
42959 }
42960 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
42961 this._hash.update(ipad)
42962 }
42963
42964 inherits(Hmac, Base)
42965
42966 Hmac.prototype._update = function (data) {
42967 this._hash.update(data)
42968 }
42969
42970 Hmac.prototype._final = function () {
42971 var h = this._hash.digest()
42972 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
42973 return hash.update(this._opad).update(h).digest()
42974 }
42975
42976 module.exports = function createHmac (alg, key) {
42977 alg = alg.toLowerCase()
42978 if (alg === 'rmd160' || alg === 'ripemd160') {
42979 return new Hmac('rmd160', key)
42980 }
42981 if (alg === 'md5') {
42982 return new Legacy(md5, key)
42983 }
42984 return new Hmac(alg, key)
42985 }
42986
42987 },{"./legacy":91,"cipher-base":86,"create-hash/md5":89,"inherits":121,"ripemd160":127,"safe-buffer":128,"sha.js":130}],91:[function(require,module,exports){
42988 'use strict'
42989 var inherits = require('inherits')
42990 var Buffer = require('safe-buffer').Buffer
42991
42992 var Base = require('cipher-base')
42993
42994 var ZEROS = Buffer.alloc(128)
42995 var blocksize = 64
42996
42997 function Hmac (alg, key) {
42998 Base.call(this, 'digest')
42999 if (typeof key === 'string') {
43000 key = Buffer.from(key)
43001 }
43002
43003 this._alg = alg
43004 this._key = key
43005
43006 if (key.length > blocksize) {
43007 key = alg(key)
43008 } else if (key.length < blocksize) {
43009 key = Buffer.concat([key, ZEROS], blocksize)
43010 }
43011
43012 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
43013 var opad = this._opad = Buffer.allocUnsafe(blocksize)
43014
43015 for (var i = 0; i < blocksize; i++) {
43016 ipad[i] = key[i] ^ 0x36
43017 opad[i] = key[i] ^ 0x5C
43018 }
43019
43020 this._hash = [ipad]
43021 }
43022
43023 inherits(Hmac, Base)
43024
43025 Hmac.prototype._update = function (data) {
43026 this._hash.push(data)
43027 }
43028
43029 Hmac.prototype._final = function () {
43030 var h = this._alg(Buffer.concat(this._hash))
43031 return this._alg(Buffer.concat([this._opad, h]))
43032 }
43033 module.exports = Hmac
43034
43035 },{"cipher-base":86,"inherits":121,"safe-buffer":128}],92:[function(require,module,exports){
43036 var assert = require('assert')
43037 var BigInteger = require('bigi')
43038
43039 var Point = require('./point')
43040
43041 function Curve (p, a, b, Gx, Gy, n, h) {
43042 this.p = p
43043 this.a = a
43044 this.b = b
43045 this.G = Point.fromAffine(this, Gx, Gy)
43046 this.n = n
43047 this.h = h
43048
43049 this.infinity = new Point(this, null, null, BigInteger.ZERO)
43050
43051 // result caching
43052 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
43053
43054 // determine size of p in bytes
43055 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
43056 }
43057
43058 Curve.prototype.pointFromX = function (isOdd, x) {
43059 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
43060 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
43061
43062 var y = beta
43063 if (beta.isEven() ^ !isOdd) {
43064 y = this.p.subtract(y) // -y % p
43065 }
43066
43067 return Point.fromAffine(this, x, y)
43068 }
43069
43070 Curve.prototype.isInfinity = function (Q) {
43071 if (Q === this.infinity) return true
43072
43073 return Q.z.signum() === 0 && Q.y.signum() !== 0
43074 }
43075
43076 Curve.prototype.isOnCurve = function (Q) {
43077 if (this.isInfinity(Q)) return true
43078
43079 var x = Q.affineX
43080 var y = Q.affineY
43081 var a = this.a
43082 var b = this.b
43083 var p = this.p
43084
43085 // Check that xQ and yQ are integers in the interval [0, p - 1]
43086 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
43087 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
43088
43089 // and check that y^2 = x^3 + ax + b (mod p)
43090 var lhs = y.square().mod(p)
43091 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
43092 return lhs.equals(rhs)
43093 }
43094
43095 /**
43096 * Validate an elliptic curve point.
43097 *
43098 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
43099 */
43100 Curve.prototype.validate = function (Q) {
43101 // Check Q != O
43102 assert(!this.isInfinity(Q), 'Point is at infinity')
43103 assert(this.isOnCurve(Q), 'Point is not on the curve')
43104
43105 // Check nQ = O (where Q is a scalar multiple of G)
43106 var nQ = Q.multiply(this.n)
43107 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
43108
43109 return true
43110 }
43111
43112 module.exports = Curve
43113
43114 },{"./point":96,"assert":1,"bigi":39}],93:[function(require,module,exports){
43115 module.exports={
43116 "secp128r1": {
43117 "p": "fffffffdffffffffffffffffffffffff",
43118 "a": "fffffffdfffffffffffffffffffffffc",
43119 "b": "e87579c11079f43dd824993c2cee5ed3",
43120 "n": "fffffffe0000000075a30d1b9038a115",
43121 "h": "01",
43122 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
43123 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
43124 },
43125 "secp160k1": {
43126 "p": "fffffffffffffffffffffffffffffffeffffac73",
43127 "a": "00",
43128 "b": "07",
43129 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
43130 "h": "01",
43131 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
43132 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
43133 },
43134 "secp160r1": {
43135 "p": "ffffffffffffffffffffffffffffffff7fffffff",
43136 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
43137 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
43138 "n": "0100000000000000000001f4c8f927aed3ca752257",
43139 "h": "01",
43140 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
43141 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
43142 },
43143 "secp192k1": {
43144 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
43145 "a": "00",
43146 "b": "03",
43147 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
43148 "h": "01",
43149 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
43150 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
43151 },
43152 "secp192r1": {
43153 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
43154 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
43155 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
43156 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
43157 "h": "01",
43158 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
43159 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
43160 },
43161 "secp256k1": {
43162 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
43163 "a": "00",
43164 "b": "07",
43165 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
43166 "h": "01",
43167 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
43168 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
43169 },
43170 "secp256r1": {
43171 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
43172 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
43173 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
43174 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
43175 "h": "01",
43176 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
43177 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
43178 }
43179 }
43180
43181 },{}],94:[function(require,module,exports){
43182 var Point = require('./point')
43183 var Curve = require('./curve')
43184
43185 var getCurveByName = require('./names')
43186
43187 module.exports = {
43188 Curve: Curve,
43189 Point: Point,
43190 getCurveByName: getCurveByName
43191 }
43192
43193 },{"./curve":92,"./names":95,"./point":96}],95:[function(require,module,exports){
43194 var BigInteger = require('bigi')
43195
43196 var curves = require('./curves.json')
43197 var Curve = require('./curve')
43198
43199 function getCurveByName (name) {
43200 var curve = curves[name]
43201 if (!curve) return null
43202
43203 var p = new BigInteger(curve.p, 16)
43204 var a = new BigInteger(curve.a, 16)
43205 var b = new BigInteger(curve.b, 16)
43206 var n = new BigInteger(curve.n, 16)
43207 var h = new BigInteger(curve.h, 16)
43208 var Gx = new BigInteger(curve.Gx, 16)
43209 var Gy = new BigInteger(curve.Gy, 16)
43210
43211 return new Curve(p, a, b, Gx, Gy, n, h)
43212 }
43213
43214 module.exports = getCurveByName
43215
43216 },{"./curve":92,"./curves.json":93,"bigi":39}],96:[function(require,module,exports){
43217 (function (Buffer){
43218 var assert = require('assert')
43219 var BigInteger = require('bigi')
43220
43221 var THREE = BigInteger.valueOf(3)
43222
43223 function Point (curve, x, y, z) {
43224 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
43225
43226 this.curve = curve
43227 this.x = x
43228 this.y = y
43229 this.z = z
43230 this._zInv = null
43231
43232 this.compressed = true
43233 }
43234
43235 Object.defineProperty(Point.prototype, 'zInv', {
43236 get: function () {
43237 if (this._zInv === null) {
43238 this._zInv = this.z.modInverse(this.curve.p)
43239 }
43240
43241 return this._zInv
43242 }
43243 })
43244
43245 Object.defineProperty(Point.prototype, 'affineX', {
43246 get: function () {
43247 return this.x.multiply(this.zInv).mod(this.curve.p)
43248 }
43249 })
43250
43251 Object.defineProperty(Point.prototype, 'affineY', {
43252 get: function () {
43253 return this.y.multiply(this.zInv).mod(this.curve.p)
43254 }
43255 })
43256
43257 Point.fromAffine = function (curve, x, y) {
43258 return new Point(curve, x, y, BigInteger.ONE)
43259 }
43260
43261 Point.prototype.equals = function (other) {
43262 if (other === this) return true
43263 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
43264 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
43265
43266 // u = Y2 * Z1 - Y1 * Z2
43267 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
43268
43269 if (u.signum() !== 0) return false
43270
43271 // v = X2 * Z1 - X1 * Z2
43272 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
43273
43274 return v.signum() === 0
43275 }
43276
43277 Point.prototype.negate = function () {
43278 var y = this.curve.p.subtract(this.y)
43279
43280 return new Point(this.curve, this.x, y, this.z)
43281 }
43282
43283 Point.prototype.add = function (b) {
43284 if (this.curve.isInfinity(this)) return b
43285 if (this.curve.isInfinity(b)) return this
43286
43287 var x1 = this.x
43288 var y1 = this.y
43289 var x2 = b.x
43290 var y2 = b.y
43291
43292 // u = Y2 * Z1 - Y1 * Z2
43293 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
43294 // v = X2 * Z1 - X1 * Z2
43295 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
43296
43297 if (v.signum() === 0) {
43298 if (u.signum() === 0) {
43299 return this.twice() // this == b, so double
43300 }
43301
43302 return this.curve.infinity // this = -b, so infinity
43303 }
43304
43305 var v2 = v.square()
43306 var v3 = v2.multiply(v)
43307 var x1v2 = x1.multiply(v2)
43308 var zu2 = u.square().multiply(this.z)
43309
43310 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
43311 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
43312 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
43313 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)
43314 // z3 = v^3 * z1 * z2
43315 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
43316
43317 return new Point(this.curve, x3, y3, z3)
43318 }
43319
43320 Point.prototype.twice = function () {
43321 if (this.curve.isInfinity(this)) return this
43322 if (this.y.signum() === 0) return this.curve.infinity
43323
43324 var x1 = this.x
43325 var y1 = this.y
43326
43327 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
43328 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
43329 var a = this.curve.a
43330
43331 // w = 3 * x1^2 + a * z1^2
43332 var w = x1.square().multiply(THREE)
43333
43334 if (a.signum() !== 0) {
43335 w = w.add(this.z.square().multiply(a))
43336 }
43337
43338 w = w.mod(this.curve.p)
43339 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
43340 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
43341 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
43342 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
43343 // z3 = 8 * (y1 * z1)^3
43344 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
43345
43346 return new Point(this.curve, x3, y3, z3)
43347 }
43348
43349 // Simple NAF (Non-Adjacent Form) multiplication algorithm
43350 // TODO: modularize the multiplication algorithm
43351 Point.prototype.multiply = function (k) {
43352 if (this.curve.isInfinity(this)) return this
43353 if (k.signum() === 0) return this.curve.infinity
43354
43355 var e = k
43356 var h = e.multiply(THREE)
43357
43358 var neg = this.negate()
43359 var R = this
43360
43361 for (var i = h.bitLength() - 2; i > 0; --i) {
43362 var hBit = h.testBit(i)
43363 var eBit = e.testBit(i)
43364
43365 R = R.twice()
43366
43367 if (hBit !== eBit) {
43368 R = R.add(hBit ? this : neg)
43369 }
43370 }
43371
43372 return R
43373 }
43374
43375 // Compute this*j + x*k (simultaneous multiplication)
43376 Point.prototype.multiplyTwo = function (j, x, k) {
43377 var i = Math.max(j.bitLength(), k.bitLength()) - 1
43378 var R = this.curve.infinity
43379 var both = this.add(x)
43380
43381 while (i >= 0) {
43382 var jBit = j.testBit(i)
43383 var kBit = k.testBit(i)
43384
43385 R = R.twice()
43386
43387 if (jBit) {
43388 if (kBit) {
43389 R = R.add(both)
43390 } else {
43391 R = R.add(this)
43392 }
43393 } else if (kBit) {
43394 R = R.add(x)
43395 }
43396 --i
43397 }
43398
43399 return R
43400 }
43401
43402 Point.prototype.getEncoded = function (compressed) {
43403 if (compressed == null) compressed = this.compressed
43404 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
43405
43406 var x = this.affineX
43407 var y = this.affineY
43408 var byteLength = this.curve.pLength
43409 var buffer
43410
43411 // 0x02/0x03 | X
43412 if (compressed) {
43413 buffer = new Buffer(1 + byteLength)
43414 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
43415
43416 // 0x04 | X | Y
43417 } else {
43418 buffer = new Buffer(1 + byteLength + byteLength)
43419 buffer.writeUInt8(0x04, 0)
43420
43421 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
43422 }
43423
43424 x.toBuffer(byteLength).copy(buffer, 1)
43425
43426 return buffer
43427 }
43428
43429 Point.decodeFrom = function (curve, buffer) {
43430 var type = buffer.readUInt8(0)
43431 var compressed = (type !== 4)
43432
43433 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
43434 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
43435
43436 var Q
43437 if (compressed) {
43438 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
43439 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
43440
43441 var isOdd = (type === 0x03)
43442 Q = curve.pointFromX(isOdd, x)
43443 } else {
43444 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
43445
43446 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
43447 Q = Point.fromAffine(curve, x, y)
43448 }
43449
43450 Q.compressed = compressed
43451 return Q
43452 }
43453
43454 Point.prototype.toString = function () {
43455 if (this.curve.isInfinity(this)) return '(INFINITY)'
43456
43457 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
43458 }
43459
43460 module.exports = Point
43461
43462 }).call(this,require("buffer").Buffer)
43463 },{"assert":1,"bigi":39,"buffer":5}],97:[function(require,module,exports){
43464 'use strict';
43465
43466 var elliptic = exports;
43467
43468 elliptic.version = require('../package.json').version;
43469 elliptic.utils = require('./elliptic/utils');
43470 elliptic.rand = require('brorand');
43471 elliptic.curve = require('./elliptic/curve');
43472 elliptic.curves = require('./elliptic/curves');
43473
43474 // Protocols
43475 elliptic.ec = require('./elliptic/ec');
43476 elliptic.eddsa = require('./elliptic/eddsa');
43477
43478 },{"../package.json":112,"./elliptic/curve":100,"./elliptic/curves":103,"./elliptic/ec":104,"./elliptic/eddsa":107,"./elliptic/utils":111,"brorand":82}],98:[function(require,module,exports){
43479 'use strict';
43480
43481 var BN = require('bn.js');
43482 var elliptic = require('../../elliptic');
43483 var utils = elliptic.utils;
43484 var getNAF = utils.getNAF;
43485 var getJSF = utils.getJSF;
43486 var assert = utils.assert;
43487
43488 function BaseCurve(type, conf) {
43489 this.type = type;
43490 this.p = new BN(conf.p, 16);
43491
43492 // Use Montgomery, when there is no fast reduction for the prime
43493 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
43494
43495 // Useful for many curves
43496 this.zero = new BN(0).toRed(this.red);
43497 this.one = new BN(1).toRed(this.red);
43498 this.two = new BN(2).toRed(this.red);
43499
43500 // Curve configuration, optional
43501 this.n = conf.n && new BN(conf.n, 16);
43502 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
43503
43504 // Temporary arrays
43505 this._wnafT1 = new Array(4);
43506 this._wnafT2 = new Array(4);
43507 this._wnafT3 = new Array(4);
43508 this._wnafT4 = new Array(4);
43509
43510 // Generalized Greg Maxwell's trick
43511 var adjustCount = this.n && this.p.div(this.n);
43512 if (!adjustCount || adjustCount.cmpn(100) > 0) {
43513 this.redN = null;
43514 } else {
43515 this._maxwellTrick = true;
43516 this.redN = this.n.toRed(this.red);
43517 }
43518 }
43519 module.exports = BaseCurve;
43520
43521 BaseCurve.prototype.point = function point() {
43522 throw new Error('Not implemented');
43523 };
43524
43525 BaseCurve.prototype.validate = function validate() {
43526 throw new Error('Not implemented');
43527 };
43528
43529 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
43530 assert(p.precomputed);
43531 var doubles = p._getDoubles();
43532
43533 var naf = getNAF(k, 1);
43534 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
43535 I /= 3;
43536
43537 // Translate into more windowed form
43538 var repr = [];
43539 for (var j = 0; j < naf.length; j += doubles.step) {
43540 var nafW = 0;
43541 for (var k = j + doubles.step - 1; k >= j; k--)
43542 nafW = (nafW << 1) + naf[k];
43543 repr.push(nafW);
43544 }
43545
43546 var a = this.jpoint(null, null, null);
43547 var b = this.jpoint(null, null, null);
43548 for (var i = I; i > 0; i--) {
43549 for (var j = 0; j < repr.length; j++) {
43550 var nafW = repr[j];
43551 if (nafW === i)
43552 b = b.mixedAdd(doubles.points[j]);
43553 else if (nafW === -i)
43554 b = b.mixedAdd(doubles.points[j].neg());
43555 }
43556 a = a.add(b);
43557 }
43558 return a.toP();
43559 };
43560
43561 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
43562 var w = 4;
43563
43564 // Precompute window
43565 var nafPoints = p._getNAFPoints(w);
43566 w = nafPoints.wnd;
43567 var wnd = nafPoints.points;
43568
43569 // Get NAF form
43570 var naf = getNAF(k, w);
43571
43572 // Add `this`*(N+1) for every w-NAF index
43573 var acc = this.jpoint(null, null, null);
43574 for (var i = naf.length - 1; i >= 0; i--) {
43575 // Count zeroes
43576 for (var k = 0; i >= 0 && naf[i] === 0; i--)
43577 k++;
43578 if (i >= 0)
43579 k++;
43580 acc = acc.dblp(k);
43581
43582 if (i < 0)
43583 break;
43584 var z = naf[i];
43585 assert(z !== 0);
43586 if (p.type === 'affine') {
43587 // J +- P
43588 if (z > 0)
43589 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
43590 else
43591 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
43592 } else {
43593 // J +- J
43594 if (z > 0)
43595 acc = acc.add(wnd[(z - 1) >> 1]);
43596 else
43597 acc = acc.add(wnd[(-z - 1) >> 1].neg());
43598 }
43599 }
43600 return p.type === 'affine' ? acc.toP() : acc;
43601 };
43602
43603 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
43604 points,
43605 coeffs,
43606 len,
43607 jacobianResult) {
43608 var wndWidth = this._wnafT1;
43609 var wnd = this._wnafT2;
43610 var naf = this._wnafT3;
43611
43612 // Fill all arrays
43613 var max = 0;
43614 for (var i = 0; i < len; i++) {
43615 var p = points[i];
43616 var nafPoints = p._getNAFPoints(defW);
43617 wndWidth[i] = nafPoints.wnd;
43618 wnd[i] = nafPoints.points;
43619 }
43620
43621 // Comb small window NAFs
43622 for (var i = len - 1; i >= 1; i -= 2) {
43623 var a = i - 1;
43624 var b = i;
43625 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
43626 naf[a] = getNAF(coeffs[a], wndWidth[a]);
43627 naf[b] = getNAF(coeffs[b], wndWidth[b]);
43628 max = Math.max(naf[a].length, max);
43629 max = Math.max(naf[b].length, max);
43630 continue;
43631 }
43632
43633 var comb = [
43634 points[a], /* 1 */
43635 null, /* 3 */
43636 null, /* 5 */
43637 points[b] /* 7 */
43638 ];
43639
43640 // Try to avoid Projective points, if possible
43641 if (points[a].y.cmp(points[b].y) === 0) {
43642 comb[1] = points[a].add(points[b]);
43643 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
43644 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
43645 comb[1] = points[a].toJ().mixedAdd(points[b]);
43646 comb[2] = points[a].add(points[b].neg());
43647 } else {
43648 comb[1] = points[a].toJ().mixedAdd(points[b]);
43649 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
43650 }
43651
43652 var index = [
43653 -3, /* -1 -1 */
43654 -1, /* -1 0 */
43655 -5, /* -1 1 */
43656 -7, /* 0 -1 */
43657 0, /* 0 0 */
43658 7, /* 0 1 */
43659 5, /* 1 -1 */
43660 1, /* 1 0 */
43661 3 /* 1 1 */
43662 ];
43663
43664 var jsf = getJSF(coeffs[a], coeffs[b]);
43665 max = Math.max(jsf[0].length, max);
43666 naf[a] = new Array(max);
43667 naf[b] = new Array(max);
43668 for (var j = 0; j < max; j++) {
43669 var ja = jsf[0][j] | 0;
43670 var jb = jsf[1][j] | 0;
43671
43672 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
43673 naf[b][j] = 0;
43674 wnd[a] = comb;
43675 }
43676 }
43677
43678 var acc = this.jpoint(null, null, null);
43679 var tmp = this._wnafT4;
43680 for (var i = max; i >= 0; i--) {
43681 var k = 0;
43682
43683 while (i >= 0) {
43684 var zero = true;
43685 for (var j = 0; j < len; j++) {
43686 tmp[j] = naf[j][i] | 0;
43687 if (tmp[j] !== 0)
43688 zero = false;
43689 }
43690 if (!zero)
43691 break;
43692 k++;
43693 i--;
43694 }
43695 if (i >= 0)
43696 k++;
43697 acc = acc.dblp(k);
43698 if (i < 0)
43699 break;
43700
43701 for (var j = 0; j < len; j++) {
43702 var z = tmp[j];
43703 var p;
43704 if (z === 0)
43705 continue;
43706 else if (z > 0)
43707 p = wnd[j][(z - 1) >> 1];
43708 else if (z < 0)
43709 p = wnd[j][(-z - 1) >> 1].neg();
43710
43711 if (p.type === 'affine')
43712 acc = acc.mixedAdd(p);
43713 else
43714 acc = acc.add(p);
43715 }
43716 }
43717 // Zeroify references
43718 for (var i = 0; i < len; i++)
43719 wnd[i] = null;
43720
43721 if (jacobianResult)
43722 return acc;
43723 else
43724 return acc.toP();
43725 };
43726
43727 function BasePoint(curve, type) {
43728 this.curve = curve;
43729 this.type = type;
43730 this.precomputed = null;
43731 }
43732 BaseCurve.BasePoint = BasePoint;
43733
43734 BasePoint.prototype.eq = function eq(/*other*/) {
43735 throw new Error('Not implemented');
43736 };
43737
43738 BasePoint.prototype.validate = function validate() {
43739 return this.curve.validate(this);
43740 };
43741
43742 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
43743 bytes = utils.toArray(bytes, enc);
43744
43745 var len = this.p.byteLength();
43746
43747 // uncompressed, hybrid-odd, hybrid-even
43748 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
43749 bytes.length - 1 === 2 * len) {
43750 if (bytes[0] === 0x06)
43751 assert(bytes[bytes.length - 1] % 2 === 0);
43752 else if (bytes[0] === 0x07)
43753 assert(bytes[bytes.length - 1] % 2 === 1);
43754
43755 var res = this.point(bytes.slice(1, 1 + len),
43756 bytes.slice(1 + len, 1 + 2 * len));
43757
43758 return res;
43759 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
43760 bytes.length - 1 === len) {
43761 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
43762 }
43763 throw new Error('Unknown point format');
43764 };
43765
43766 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
43767 return this.encode(enc, true);
43768 };
43769
43770 BasePoint.prototype._encode = function _encode(compact) {
43771 var len = this.curve.p.byteLength();
43772 var x = this.getX().toArray('be', len);
43773
43774 if (compact)
43775 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
43776
43777 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
43778 };
43779
43780 BasePoint.prototype.encode = function encode(enc, compact) {
43781 return utils.encode(this._encode(compact), enc);
43782 };
43783
43784 BasePoint.prototype.precompute = function precompute(power) {
43785 if (this.precomputed)
43786 return this;
43787
43788 var precomputed = {
43789 doubles: null,
43790 naf: null,
43791 beta: null
43792 };
43793 precomputed.naf = this._getNAFPoints(8);
43794 precomputed.doubles = this._getDoubles(4, power);
43795 precomputed.beta = this._getBeta();
43796 this.precomputed = precomputed;
43797
43798 return this;
43799 };
43800
43801 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
43802 if (!this.precomputed)
43803 return false;
43804
43805 var doubles = this.precomputed.doubles;
43806 if (!doubles)
43807 return false;
43808
43809 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
43810 };
43811
43812 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
43813 if (this.precomputed && this.precomputed.doubles)
43814 return this.precomputed.doubles;
43815
43816 var doubles = [ this ];
43817 var acc = this;
43818 for (var i = 0; i < power; i += step) {
43819 for (var j = 0; j < step; j++)
43820 acc = acc.dbl();
43821 doubles.push(acc);
43822 }
43823 return {
43824 step: step,
43825 points: doubles
43826 };
43827 };
43828
43829 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
43830 if (this.precomputed && this.precomputed.naf)
43831 return this.precomputed.naf;
43832
43833 var res = [ this ];
43834 var max = (1 << wnd) - 1;
43835 var dbl = max === 1 ? null : this.dbl();
43836 for (var i = 1; i < max; i++)
43837 res[i] = res[i - 1].add(dbl);
43838 return {
43839 wnd: wnd,
43840 points: res
43841 };
43842 };
43843
43844 BasePoint.prototype._getBeta = function _getBeta() {
43845 return null;
43846 };
43847
43848 BasePoint.prototype.dblp = function dblp(k) {
43849 var r = this;
43850 for (var i = 0; i < k; i++)
43851 r = r.dbl();
43852 return r;
43853 };
43854
43855 },{"../../elliptic":97,"bn.js":81}],99:[function(require,module,exports){
43856 'use strict';
43857
43858 var curve = require('../curve');
43859 var elliptic = require('../../elliptic');
43860 var BN = require('bn.js');
43861 var inherits = require('inherits');
43862 var Base = curve.base;
43863
43864 var assert = elliptic.utils.assert;
43865
43866 function EdwardsCurve(conf) {
43867 // NOTE: Important as we are creating point in Base.call()
43868 this.twisted = (conf.a | 0) !== 1;
43869 this.mOneA = this.twisted && (conf.a | 0) === -1;
43870 this.extended = this.mOneA;
43871
43872 Base.call(this, 'edwards', conf);
43873
43874 this.a = new BN(conf.a, 16).umod(this.red.m);
43875 this.a = this.a.toRed(this.red);
43876 this.c = new BN(conf.c, 16).toRed(this.red);
43877 this.c2 = this.c.redSqr();
43878 this.d = new BN(conf.d, 16).toRed(this.red);
43879 this.dd = this.d.redAdd(this.d);
43880
43881 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
43882 this.oneC = (conf.c | 0) === 1;
43883 }
43884 inherits(EdwardsCurve, Base);
43885 module.exports = EdwardsCurve;
43886
43887 EdwardsCurve.prototype._mulA = function _mulA(num) {
43888 if (this.mOneA)
43889 return num.redNeg();
43890 else
43891 return this.a.redMul(num);
43892 };
43893
43894 EdwardsCurve.prototype._mulC = function _mulC(num) {
43895 if (this.oneC)
43896 return num;
43897 else
43898 return this.c.redMul(num);
43899 };
43900
43901 // Just for compatibility with Short curve
43902 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
43903 return this.point(x, y, z, t);
43904 };
43905
43906 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
43907 x = new BN(x, 16);
43908 if (!x.red)
43909 x = x.toRed(this.red);
43910
43911 var x2 = x.redSqr();
43912 var rhs = this.c2.redSub(this.a.redMul(x2));
43913 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
43914
43915 var y2 = rhs.redMul(lhs.redInvm());
43916 var y = y2.redSqrt();
43917 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
43918 throw new Error('invalid point');
43919
43920 var isOdd = y.fromRed().isOdd();
43921 if (odd && !isOdd || !odd && isOdd)
43922 y = y.redNeg();
43923
43924 return this.point(x, y);
43925 };
43926
43927 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
43928 y = new BN(y, 16);
43929 if (!y.red)
43930 y = y.toRed(this.red);
43931
43932 // x^2 = (y^2 - 1) / (d y^2 + 1)
43933 var y2 = y.redSqr();
43934 var lhs = y2.redSub(this.one);
43935 var rhs = y2.redMul(this.d).redAdd(this.one);
43936 var x2 = lhs.redMul(rhs.redInvm());
43937
43938 if (x2.cmp(this.zero) === 0) {
43939 if (odd)
43940 throw new Error('invalid point');
43941 else
43942 return this.point(this.zero, y);
43943 }
43944
43945 var x = x2.redSqrt();
43946 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
43947 throw new Error('invalid point');
43948
43949 if (x.isOdd() !== odd)
43950 x = x.redNeg();
43951
43952 return this.point(x, y);
43953 };
43954
43955 EdwardsCurve.prototype.validate = function validate(point) {
43956 if (point.isInfinity())
43957 return true;
43958
43959 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
43960 point.normalize();
43961
43962 var x2 = point.x.redSqr();
43963 var y2 = point.y.redSqr();
43964 var lhs = x2.redMul(this.a).redAdd(y2);
43965 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
43966
43967 return lhs.cmp(rhs) === 0;
43968 };
43969
43970 function Point(curve, x, y, z, t) {
43971 Base.BasePoint.call(this, curve, 'projective');
43972 if (x === null && y === null && z === null) {
43973 this.x = this.curve.zero;
43974 this.y = this.curve.one;
43975 this.z = this.curve.one;
43976 this.t = this.curve.zero;
43977 this.zOne = true;
43978 } else {
43979 this.x = new BN(x, 16);
43980 this.y = new BN(y, 16);
43981 this.z = z ? new BN(z, 16) : this.curve.one;
43982 this.t = t && new BN(t, 16);
43983 if (!this.x.red)
43984 this.x = this.x.toRed(this.curve.red);
43985 if (!this.y.red)
43986 this.y = this.y.toRed(this.curve.red);
43987 if (!this.z.red)
43988 this.z = this.z.toRed(this.curve.red);
43989 if (this.t && !this.t.red)
43990 this.t = this.t.toRed(this.curve.red);
43991 this.zOne = this.z === this.curve.one;
43992
43993 // Use extended coordinates
43994 if (this.curve.extended && !this.t) {
43995 this.t = this.x.redMul(this.y);
43996 if (!this.zOne)
43997 this.t = this.t.redMul(this.z.redInvm());
43998 }
43999 }
44000 }
44001 inherits(Point, Base.BasePoint);
44002
44003 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
44004 return Point.fromJSON(this, obj);
44005 };
44006
44007 EdwardsCurve.prototype.point = function point(x, y, z, t) {
44008 return new Point(this, x, y, z, t);
44009 };
44010
44011 Point.fromJSON = function fromJSON(curve, obj) {
44012 return new Point(curve, obj[0], obj[1], obj[2]);
44013 };
44014
44015 Point.prototype.inspect = function inspect() {
44016 if (this.isInfinity())
44017 return '<EC Point Infinity>';
44018 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
44019 ' y: ' + this.y.fromRed().toString(16, 2) +
44020 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
44021 };
44022
44023 Point.prototype.isInfinity = function isInfinity() {
44024 // XXX This code assumes that zero is always zero in red
44025 return this.x.cmpn(0) === 0 &&
44026 this.y.cmp(this.z) === 0;
44027 };
44028
44029 Point.prototype._extDbl = function _extDbl() {
44030 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
44031 // #doubling-dbl-2008-hwcd
44032 // 4M + 4S
44033
44034 // A = X1^2
44035 var a = this.x.redSqr();
44036 // B = Y1^2
44037 var b = this.y.redSqr();
44038 // C = 2 * Z1^2
44039 var c = this.z.redSqr();
44040 c = c.redIAdd(c);
44041 // D = a * A
44042 var d = this.curve._mulA(a);
44043 // E = (X1 + Y1)^2 - A - B
44044 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
44045 // G = D + B
44046 var g = d.redAdd(b);
44047 // F = G - C
44048 var f = g.redSub(c);
44049 // H = D - B
44050 var h = d.redSub(b);
44051 // X3 = E * F
44052 var nx = e.redMul(f);
44053 // Y3 = G * H
44054 var ny = g.redMul(h);
44055 // T3 = E * H
44056 var nt = e.redMul(h);
44057 // Z3 = F * G
44058 var nz = f.redMul(g);
44059 return this.curve.point(nx, ny, nz, nt);
44060 };
44061
44062 Point.prototype._projDbl = function _projDbl() {
44063 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
44064 // #doubling-dbl-2008-bbjlp
44065 // #doubling-dbl-2007-bl
44066 // and others
44067 // Generally 3M + 4S or 2M + 4S
44068
44069 // B = (X1 + Y1)^2
44070 var b = this.x.redAdd(this.y).redSqr();
44071 // C = X1^2
44072 var c = this.x.redSqr();
44073 // D = Y1^2
44074 var d = this.y.redSqr();
44075
44076 var nx;
44077 var ny;
44078 var nz;
44079 if (this.curve.twisted) {
44080 // E = a * C
44081 var e = this.curve._mulA(c);
44082 // F = E + D
44083 var f = e.redAdd(d);
44084 if (this.zOne) {
44085 // X3 = (B - C - D) * (F - 2)
44086 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
44087 // Y3 = F * (E - D)
44088 ny = f.redMul(e.redSub(d));
44089 // Z3 = F^2 - 2 * F
44090 nz = f.redSqr().redSub(f).redSub(f);
44091 } else {
44092 // H = Z1^2
44093 var h = this.z.redSqr();
44094 // J = F - 2 * H
44095 var j = f.redSub(h).redISub(h);
44096 // X3 = (B-C-D)*J
44097 nx = b.redSub(c).redISub(d).redMul(j);
44098 // Y3 = F * (E - D)
44099 ny = f.redMul(e.redSub(d));
44100 // Z3 = F * J
44101 nz = f.redMul(j);
44102 }
44103 } else {
44104 // E = C + D
44105 var e = c.redAdd(d);
44106 // H = (c * Z1)^2
44107 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
44108 // J = E - 2 * H
44109 var j = e.redSub(h).redSub(h);
44110 // X3 = c * (B - E) * J
44111 nx = this.curve._mulC(b.redISub(e)).redMul(j);
44112 // Y3 = c * E * (C - D)
44113 ny = this.curve._mulC(e).redMul(c.redISub(d));
44114 // Z3 = E * J
44115 nz = e.redMul(j);
44116 }
44117 return this.curve.point(nx, ny, nz);
44118 };
44119
44120 Point.prototype.dbl = function dbl() {
44121 if (this.isInfinity())
44122 return this;
44123
44124 // Double in extended coordinates
44125 if (this.curve.extended)
44126 return this._extDbl();
44127 else
44128 return this._projDbl();
44129 };
44130
44131 Point.prototype._extAdd = function _extAdd(p) {
44132 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
44133 // #addition-add-2008-hwcd-3
44134 // 8M
44135
44136 // A = (Y1 - X1) * (Y2 - X2)
44137 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
44138 // B = (Y1 + X1) * (Y2 + X2)
44139 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
44140 // C = T1 * k * T2
44141 var c = this.t.redMul(this.curve.dd).redMul(p.t);
44142 // D = Z1 * 2 * Z2
44143 var d = this.z.redMul(p.z.redAdd(p.z));
44144 // E = B - A
44145 var e = b.redSub(a);
44146 // F = D - C
44147 var f = d.redSub(c);
44148 // G = D + C
44149 var g = d.redAdd(c);
44150 // H = B + A
44151 var h = b.redAdd(a);
44152 // X3 = E * F
44153 var nx = e.redMul(f);
44154 // Y3 = G * H
44155 var ny = g.redMul(h);
44156 // T3 = E * H
44157 var nt = e.redMul(h);
44158 // Z3 = F * G
44159 var nz = f.redMul(g);
44160 return this.curve.point(nx, ny, nz, nt);
44161 };
44162
44163 Point.prototype._projAdd = function _projAdd(p) {
44164 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
44165 // #addition-add-2008-bbjlp
44166 // #addition-add-2007-bl
44167 // 10M + 1S
44168
44169 // A = Z1 * Z2
44170 var a = this.z.redMul(p.z);
44171 // B = A^2
44172 var b = a.redSqr();
44173 // C = X1 * X2
44174 var c = this.x.redMul(p.x);
44175 // D = Y1 * Y2
44176 var d = this.y.redMul(p.y);
44177 // E = d * C * D
44178 var e = this.curve.d.redMul(c).redMul(d);
44179 // F = B - E
44180 var f = b.redSub(e);
44181 // G = B + E
44182 var g = b.redAdd(e);
44183 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
44184 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
44185 var nx = a.redMul(f).redMul(tmp);
44186 var ny;
44187 var nz;
44188 if (this.curve.twisted) {
44189 // Y3 = A * G * (D - a * C)
44190 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
44191 // Z3 = F * G
44192 nz = f.redMul(g);
44193 } else {
44194 // Y3 = A * G * (D - C)
44195 ny = a.redMul(g).redMul(d.redSub(c));
44196 // Z3 = c * F * G
44197 nz = this.curve._mulC(f).redMul(g);
44198 }
44199 return this.curve.point(nx, ny, nz);
44200 };
44201
44202 Point.prototype.add = function add(p) {
44203 if (this.isInfinity())
44204 return p;
44205 if (p.isInfinity())
44206 return this;
44207
44208 if (this.curve.extended)
44209 return this._extAdd(p);
44210 else
44211 return this._projAdd(p);
44212 };
44213
44214 Point.prototype.mul = function mul(k) {
44215 if (this._hasDoubles(k))
44216 return this.curve._fixedNafMul(this, k);
44217 else
44218 return this.curve._wnafMul(this, k);
44219 };
44220
44221 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
44222 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
44223 };
44224
44225 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
44226 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
44227 };
44228
44229 Point.prototype.normalize = function normalize() {
44230 if (this.zOne)
44231 return this;
44232
44233 // Normalize coordinates
44234 var zi = this.z.redInvm();
44235 this.x = this.x.redMul(zi);
44236 this.y = this.y.redMul(zi);
44237 if (this.t)
44238 this.t = this.t.redMul(zi);
44239 this.z = this.curve.one;
44240 this.zOne = true;
44241 return this;
44242 };
44243
44244 Point.prototype.neg = function neg() {
44245 return this.curve.point(this.x.redNeg(),
44246 this.y,
44247 this.z,
44248 this.t && this.t.redNeg());
44249 };
44250
44251 Point.prototype.getX = function getX() {
44252 this.normalize();
44253 return this.x.fromRed();
44254 };
44255
44256 Point.prototype.getY = function getY() {
44257 this.normalize();
44258 return this.y.fromRed();
44259 };
44260
44261 Point.prototype.eq = function eq(other) {
44262 return this === other ||
44263 this.getX().cmp(other.getX()) === 0 &&
44264 this.getY().cmp(other.getY()) === 0;
44265 };
44266
44267 Point.prototype.eqXToP = function eqXToP(x) {
44268 var rx = x.toRed(this.curve.red).redMul(this.z);
44269 if (this.x.cmp(rx) === 0)
44270 return true;
44271
44272 var xc = x.clone();
44273 var t = this.curve.redN.redMul(this.z);
44274 for (;;) {
44275 xc.iadd(this.curve.n);
44276 if (xc.cmp(this.curve.p) >= 0)
44277 return false;
44278
44279 rx.redIAdd(t);
44280 if (this.x.cmp(rx) === 0)
44281 return true;
44282 }
44283 return false;
44284 };
44285
44286 // Compatibility with BaseCurve
44287 Point.prototype.toP = Point.prototype.normalize;
44288 Point.prototype.mixedAdd = Point.prototype.add;
44289
44290 },{"../../elliptic":97,"../curve":100,"bn.js":81,"inherits":121}],100:[function(require,module,exports){
44291 'use strict';
44292
44293 var curve = exports;
44294
44295 curve.base = require('./base');
44296 curve.short = require('./short');
44297 curve.mont = require('./mont');
44298 curve.edwards = require('./edwards');
44299
44300 },{"./base":98,"./edwards":99,"./mont":101,"./short":102}],101:[function(require,module,exports){
44301 'use strict';
44302
44303 var curve = require('../curve');
44304 var BN = require('bn.js');
44305 var inherits = require('inherits');
44306 var Base = curve.base;
44307
44308 var elliptic = require('../../elliptic');
44309 var utils = elliptic.utils;
44310
44311 function MontCurve(conf) {
44312 Base.call(this, 'mont', conf);
44313
44314 this.a = new BN(conf.a, 16).toRed(this.red);
44315 this.b = new BN(conf.b, 16).toRed(this.red);
44316 this.i4 = new BN(4).toRed(this.red).redInvm();
44317 this.two = new BN(2).toRed(this.red);
44318 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
44319 }
44320 inherits(MontCurve, Base);
44321 module.exports = MontCurve;
44322
44323 MontCurve.prototype.validate = function validate(point) {
44324 var x = point.normalize().x;
44325 var x2 = x.redSqr();
44326 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
44327 var y = rhs.redSqrt();
44328
44329 return y.redSqr().cmp(rhs) === 0;
44330 };
44331
44332 function Point(curve, x, z) {
44333 Base.BasePoint.call(this, curve, 'projective');
44334 if (x === null && z === null) {
44335 this.x = this.curve.one;
44336 this.z = this.curve.zero;
44337 } else {
44338 this.x = new BN(x, 16);
44339 this.z = new BN(z, 16);
44340 if (!this.x.red)
44341 this.x = this.x.toRed(this.curve.red);
44342 if (!this.z.red)
44343 this.z = this.z.toRed(this.curve.red);
44344 }
44345 }
44346 inherits(Point, Base.BasePoint);
44347
44348 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
44349 return this.point(utils.toArray(bytes, enc), 1);
44350 };
44351
44352 MontCurve.prototype.point = function point(x, z) {
44353 return new Point(this, x, z);
44354 };
44355
44356 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
44357 return Point.fromJSON(this, obj);
44358 };
44359
44360 Point.prototype.precompute = function precompute() {
44361 // No-op
44362 };
44363
44364 Point.prototype._encode = function _encode() {
44365 return this.getX().toArray('be', this.curve.p.byteLength());
44366 };
44367
44368 Point.fromJSON = function fromJSON(curve, obj) {
44369 return new Point(curve, obj[0], obj[1] || curve.one);
44370 };
44371
44372 Point.prototype.inspect = function inspect() {
44373 if (this.isInfinity())
44374 return '<EC Point Infinity>';
44375 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
44376 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
44377 };
44378
44379 Point.prototype.isInfinity = function isInfinity() {
44380 // XXX This code assumes that zero is always zero in red
44381 return this.z.cmpn(0) === 0;
44382 };
44383
44384 Point.prototype.dbl = function dbl() {
44385 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
44386 // 2M + 2S + 4A
44387
44388 // A = X1 + Z1
44389 var a = this.x.redAdd(this.z);
44390 // AA = A^2
44391 var aa = a.redSqr();
44392 // B = X1 - Z1
44393 var b = this.x.redSub(this.z);
44394 // BB = B^2
44395 var bb = b.redSqr();
44396 // C = AA - BB
44397 var c = aa.redSub(bb);
44398 // X3 = AA * BB
44399 var nx = aa.redMul(bb);
44400 // Z3 = C * (BB + A24 * C)
44401 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
44402 return this.curve.point(nx, nz);
44403 };
44404
44405 Point.prototype.add = function add() {
44406 throw new Error('Not supported on Montgomery curve');
44407 };
44408
44409 Point.prototype.diffAdd = function diffAdd(p, diff) {
44410 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
44411 // 4M + 2S + 6A
44412
44413 // A = X2 + Z2
44414 var a = this.x.redAdd(this.z);
44415 // B = X2 - Z2
44416 var b = this.x.redSub(this.z);
44417 // C = X3 + Z3
44418 var c = p.x.redAdd(p.z);
44419 // D = X3 - Z3
44420 var d = p.x.redSub(p.z);
44421 // DA = D * A
44422 var da = d.redMul(a);
44423 // CB = C * B
44424 var cb = c.redMul(b);
44425 // X5 = Z1 * (DA + CB)^2
44426 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
44427 // Z5 = X1 * (DA - CB)^2
44428 var nz = diff.x.redMul(da.redISub(cb).redSqr());
44429 return this.curve.point(nx, nz);
44430 };
44431
44432 Point.prototype.mul = function mul(k) {
44433 var t = k.clone();
44434 var a = this; // (N / 2) * Q + Q
44435 var b = this.curve.point(null, null); // (N / 2) * Q
44436 var c = this; // Q
44437
44438 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
44439 bits.push(t.andln(1));
44440
44441 for (var i = bits.length - 1; i >= 0; i--) {
44442 if (bits[i] === 0) {
44443 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
44444 a = a.diffAdd(b, c);
44445 // N * Q = 2 * ((N / 2) * Q + Q))
44446 b = b.dbl();
44447 } else {
44448 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
44449 b = a.diffAdd(b, c);
44450 // N * Q + Q = 2 * ((N / 2) * Q + Q)
44451 a = a.dbl();
44452 }
44453 }
44454 return b;
44455 };
44456
44457 Point.prototype.mulAdd = function mulAdd() {
44458 throw new Error('Not supported on Montgomery curve');
44459 };
44460
44461 Point.prototype.jumlAdd = function jumlAdd() {
44462 throw new Error('Not supported on Montgomery curve');
44463 };
44464
44465 Point.prototype.eq = function eq(other) {
44466 return this.getX().cmp(other.getX()) === 0;
44467 };
44468
44469 Point.prototype.normalize = function normalize() {
44470 this.x = this.x.redMul(this.z.redInvm());
44471 this.z = this.curve.one;
44472 return this;
44473 };
44474
44475 Point.prototype.getX = function getX() {
44476 // Normalize coordinates
44477 this.normalize();
44478
44479 return this.x.fromRed();
44480 };
44481
44482 },{"../../elliptic":97,"../curve":100,"bn.js":81,"inherits":121}],102:[function(require,module,exports){
44483 'use strict';
44484
44485 var curve = require('../curve');
44486 var elliptic = require('../../elliptic');
44487 var BN = require('bn.js');
44488 var inherits = require('inherits');
44489 var Base = curve.base;
44490
44491 var assert = elliptic.utils.assert;
44492
44493 function ShortCurve(conf) {
44494 Base.call(this, 'short', conf);
44495
44496 this.a = new BN(conf.a, 16).toRed(this.red);
44497 this.b = new BN(conf.b, 16).toRed(this.red);
44498 this.tinv = this.two.redInvm();
44499
44500 this.zeroA = this.a.fromRed().cmpn(0) === 0;
44501 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
44502
44503 // If the curve is endomorphic, precalculate beta and lambda
44504 this.endo = this._getEndomorphism(conf);
44505 this._endoWnafT1 = new Array(4);
44506 this._endoWnafT2 = new Array(4);
44507 }
44508 inherits(ShortCurve, Base);
44509 module.exports = ShortCurve;
44510
44511 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
44512 // No efficient endomorphism
44513 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
44514 return;
44515
44516 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
44517 var beta;
44518 var lambda;
44519 if (conf.beta) {
44520 beta = new BN(conf.beta, 16).toRed(this.red);
44521 } else {
44522 var betas = this._getEndoRoots(this.p);
44523 // Choose the smallest beta
44524 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
44525 beta = beta.toRed(this.red);
44526 }
44527 if (conf.lambda) {
44528 lambda = new BN(conf.lambda, 16);
44529 } else {
44530 // Choose the lambda that is matching selected beta
44531 var lambdas = this._getEndoRoots(this.n);
44532 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
44533 lambda = lambdas[0];
44534 } else {
44535 lambda = lambdas[1];
44536 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
44537 }
44538 }
44539
44540 // Get basis vectors, used for balanced length-two representation
44541 var basis;
44542 if (conf.basis) {
44543 basis = conf.basis.map(function(vec) {
44544 return {
44545 a: new BN(vec.a, 16),
44546 b: new BN(vec.b, 16)
44547 };
44548 });
44549 } else {
44550 basis = this._getEndoBasis(lambda);
44551 }
44552
44553 return {
44554 beta: beta,
44555 lambda: lambda,
44556 basis: basis
44557 };
44558 };
44559
44560 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
44561 // Find roots of for x^2 + x + 1 in F
44562 // Root = (-1 +- Sqrt(-3)) / 2
44563 //
44564 var red = num === this.p ? this.red : BN.mont(num);
44565 var tinv = new BN(2).toRed(red).redInvm();
44566 var ntinv = tinv.redNeg();
44567
44568 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
44569
44570 var l1 = ntinv.redAdd(s).fromRed();
44571 var l2 = ntinv.redSub(s).fromRed();
44572 return [ l1, l2 ];
44573 };
44574
44575 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
44576 // aprxSqrt >= sqrt(this.n)
44577 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
44578
44579 // 3.74
44580 // Run EGCD, until r(L + 1) < aprxSqrt
44581 var u = lambda;
44582 var v = this.n.clone();
44583 var x1 = new BN(1);
44584 var y1 = new BN(0);
44585 var x2 = new BN(0);
44586 var y2 = new BN(1);
44587
44588 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
44589 var a0;
44590 var b0;
44591 // First vector
44592 var a1;
44593 var b1;
44594 // Second vector
44595 var a2;
44596 var b2;
44597
44598 var prevR;
44599 var i = 0;
44600 var r;
44601 var x;
44602 while (u.cmpn(0) !== 0) {
44603 var q = v.div(u);
44604 r = v.sub(q.mul(u));
44605 x = x2.sub(q.mul(x1));
44606 var y = y2.sub(q.mul(y1));
44607
44608 if (!a1 && r.cmp(aprxSqrt) < 0) {
44609 a0 = prevR.neg();
44610 b0 = x1;
44611 a1 = r.neg();
44612 b1 = x;
44613 } else if (a1 && ++i === 2) {
44614 break;
44615 }
44616 prevR = r;
44617
44618 v = u;
44619 u = r;
44620 x2 = x1;
44621 x1 = x;
44622 y2 = y1;
44623 y1 = y;
44624 }
44625 a2 = r.neg();
44626 b2 = x;
44627
44628 var len1 = a1.sqr().add(b1.sqr());
44629 var len2 = a2.sqr().add(b2.sqr());
44630 if (len2.cmp(len1) >= 0) {
44631 a2 = a0;
44632 b2 = b0;
44633 }
44634
44635 // Normalize signs
44636 if (a1.negative) {
44637 a1 = a1.neg();
44638 b1 = b1.neg();
44639 }
44640 if (a2.negative) {
44641 a2 = a2.neg();
44642 b2 = b2.neg();
44643 }
44644
44645 return [
44646 { a: a1, b: b1 },
44647 { a: a2, b: b2 }
44648 ];
44649 };
44650
44651 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
44652 var basis = this.endo.basis;
44653 var v1 = basis[0];
44654 var v2 = basis[1];
44655
44656 var c1 = v2.b.mul(k).divRound(this.n);
44657 var c2 = v1.b.neg().mul(k).divRound(this.n);
44658
44659 var p1 = c1.mul(v1.a);
44660 var p2 = c2.mul(v2.a);
44661 var q1 = c1.mul(v1.b);
44662 var q2 = c2.mul(v2.b);
44663
44664 // Calculate answer
44665 var k1 = k.sub(p1).sub(p2);
44666 var k2 = q1.add(q2).neg();
44667 return { k1: k1, k2: k2 };
44668 };
44669
44670 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
44671 x = new BN(x, 16);
44672 if (!x.red)
44673 x = x.toRed(this.red);
44674
44675 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
44676 var y = y2.redSqrt();
44677 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
44678 throw new Error('invalid point');
44679
44680 // XXX Is there any way to tell if the number is odd without converting it
44681 // to non-red form?
44682 var isOdd = y.fromRed().isOdd();
44683 if (odd && !isOdd || !odd && isOdd)
44684 y = y.redNeg();
44685
44686 return this.point(x, y);
44687 };
44688
44689 ShortCurve.prototype.validate = function validate(point) {
44690 if (point.inf)
44691 return true;
44692
44693 var x = point.x;
44694 var y = point.y;
44695
44696 var ax = this.a.redMul(x);
44697 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
44698 return y.redSqr().redISub(rhs).cmpn(0) === 0;
44699 };
44700
44701 ShortCurve.prototype._endoWnafMulAdd =
44702 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
44703 var npoints = this._endoWnafT1;
44704 var ncoeffs = this._endoWnafT2;
44705 for (var i = 0; i < points.length; i++) {
44706 var split = this._endoSplit(coeffs[i]);
44707 var p = points[i];
44708 var beta = p._getBeta();
44709
44710 if (split.k1.negative) {
44711 split.k1.ineg();
44712 p = p.neg(true);
44713 }
44714 if (split.k2.negative) {
44715 split.k2.ineg();
44716 beta = beta.neg(true);
44717 }
44718
44719 npoints[i * 2] = p;
44720 npoints[i * 2 + 1] = beta;
44721 ncoeffs[i * 2] = split.k1;
44722 ncoeffs[i * 2 + 1] = split.k2;
44723 }
44724 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
44725
44726 // Clean-up references to points and coefficients
44727 for (var j = 0; j < i * 2; j++) {
44728 npoints[j] = null;
44729 ncoeffs[j] = null;
44730 }
44731 return res;
44732 };
44733
44734 function Point(curve, x, y, isRed) {
44735 Base.BasePoint.call(this, curve, 'affine');
44736 if (x === null && y === null) {
44737 this.x = null;
44738 this.y = null;
44739 this.inf = true;
44740 } else {
44741 this.x = new BN(x, 16);
44742 this.y = new BN(y, 16);
44743 // Force redgomery representation when loading from JSON
44744 if (isRed) {
44745 this.x.forceRed(this.curve.red);
44746 this.y.forceRed(this.curve.red);
44747 }
44748 if (!this.x.red)
44749 this.x = this.x.toRed(this.curve.red);
44750 if (!this.y.red)
44751 this.y = this.y.toRed(this.curve.red);
44752 this.inf = false;
44753 }
44754 }
44755 inherits(Point, Base.BasePoint);
44756
44757 ShortCurve.prototype.point = function point(x, y, isRed) {
44758 return new Point(this, x, y, isRed);
44759 };
44760
44761 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
44762 return Point.fromJSON(this, obj, red);
44763 };
44764
44765 Point.prototype._getBeta = function _getBeta() {
44766 if (!this.curve.endo)
44767 return;
44768
44769 var pre = this.precomputed;
44770 if (pre && pre.beta)
44771 return pre.beta;
44772
44773 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
44774 if (pre) {
44775 var curve = this.curve;
44776 var endoMul = function(p) {
44777 return curve.point(p.x.redMul(curve.endo.beta), p.y);
44778 };
44779 pre.beta = beta;
44780 beta.precomputed = {
44781 beta: null,
44782 naf: pre.naf && {
44783 wnd: pre.naf.wnd,
44784 points: pre.naf.points.map(endoMul)
44785 },
44786 doubles: pre.doubles && {
44787 step: pre.doubles.step,
44788 points: pre.doubles.points.map(endoMul)
44789 }
44790 };
44791 }
44792 return beta;
44793 };
44794
44795 Point.prototype.toJSON = function toJSON() {
44796 if (!this.precomputed)
44797 return [ this.x, this.y ];
44798
44799 return [ this.x, this.y, this.precomputed && {
44800 doubles: this.precomputed.doubles && {
44801 step: this.precomputed.doubles.step,
44802 points: this.precomputed.doubles.points.slice(1)
44803 },
44804 naf: this.precomputed.naf && {
44805 wnd: this.precomputed.naf.wnd,
44806 points: this.precomputed.naf.points.slice(1)
44807 }
44808 } ];
44809 };
44810
44811 Point.fromJSON = function fromJSON(curve, obj, red) {
44812 if (typeof obj === 'string')
44813 obj = JSON.parse(obj);
44814 var res = curve.point(obj[0], obj[1], red);
44815 if (!obj[2])
44816 return res;
44817
44818 function obj2point(obj) {
44819 return curve.point(obj[0], obj[1], red);
44820 }
44821
44822 var pre = obj[2];
44823 res.precomputed = {
44824 beta: null,
44825 doubles: pre.doubles && {
44826 step: pre.doubles.step,
44827 points: [ res ].concat(pre.doubles.points.map(obj2point))
44828 },
44829 naf: pre.naf && {
44830 wnd: pre.naf.wnd,
44831 points: [ res ].concat(pre.naf.points.map(obj2point))
44832 }
44833 };
44834 return res;
44835 };
44836
44837 Point.prototype.inspect = function inspect() {
44838 if (this.isInfinity())
44839 return '<EC Point Infinity>';
44840 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
44841 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
44842 };
44843
44844 Point.prototype.isInfinity = function isInfinity() {
44845 return this.inf;
44846 };
44847
44848 Point.prototype.add = function add(p) {
44849 // O + P = P
44850 if (this.inf)
44851 return p;
44852
44853 // P + O = P
44854 if (p.inf)
44855 return this;
44856
44857 // P + P = 2P
44858 if (this.eq(p))
44859 return this.dbl();
44860
44861 // P + (-P) = O
44862 if (this.neg().eq(p))
44863 return this.curve.point(null, null);
44864
44865 // P + Q = O
44866 if (this.x.cmp(p.x) === 0)
44867 return this.curve.point(null, null);
44868
44869 var c = this.y.redSub(p.y);
44870 if (c.cmpn(0) !== 0)
44871 c = c.redMul(this.x.redSub(p.x).redInvm());
44872 var nx = c.redSqr().redISub(this.x).redISub(p.x);
44873 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
44874 return this.curve.point(nx, ny);
44875 };
44876
44877 Point.prototype.dbl = function dbl() {
44878 if (this.inf)
44879 return this;
44880
44881 // 2P = O
44882 var ys1 = this.y.redAdd(this.y);
44883 if (ys1.cmpn(0) === 0)
44884 return this.curve.point(null, null);
44885
44886 var a = this.curve.a;
44887
44888 var x2 = this.x.redSqr();
44889 var dyinv = ys1.redInvm();
44890 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
44891
44892 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
44893 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
44894 return this.curve.point(nx, ny);
44895 };
44896
44897 Point.prototype.getX = function getX() {
44898 return this.x.fromRed();
44899 };
44900
44901 Point.prototype.getY = function getY() {
44902 return this.y.fromRed();
44903 };
44904
44905 Point.prototype.mul = function mul(k) {
44906 k = new BN(k, 16);
44907
44908 if (this._hasDoubles(k))
44909 return this.curve._fixedNafMul(this, k);
44910 else if (this.curve.endo)
44911 return this.curve._endoWnafMulAdd([ this ], [ k ]);
44912 else
44913 return this.curve._wnafMul(this, k);
44914 };
44915
44916 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
44917 var points = [ this, p2 ];
44918 var coeffs = [ k1, k2 ];
44919 if (this.curve.endo)
44920 return this.curve._endoWnafMulAdd(points, coeffs);
44921 else
44922 return this.curve._wnafMulAdd(1, points, coeffs, 2);
44923 };
44924
44925 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
44926 var points = [ this, p2 ];
44927 var coeffs = [ k1, k2 ];
44928 if (this.curve.endo)
44929 return this.curve._endoWnafMulAdd(points, coeffs, true);
44930 else
44931 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
44932 };
44933
44934 Point.prototype.eq = function eq(p) {
44935 return this === p ||
44936 this.inf === p.inf &&
44937 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
44938 };
44939
44940 Point.prototype.neg = function neg(_precompute) {
44941 if (this.inf)
44942 return this;
44943
44944 var res = this.curve.point(this.x, this.y.redNeg());
44945 if (_precompute && this.precomputed) {
44946 var pre = this.precomputed;
44947 var negate = function(p) {
44948 return p.neg();
44949 };
44950 res.precomputed = {
44951 naf: pre.naf && {
44952 wnd: pre.naf.wnd,
44953 points: pre.naf.points.map(negate)
44954 },
44955 doubles: pre.doubles && {
44956 step: pre.doubles.step,
44957 points: pre.doubles.points.map(negate)
44958 }
44959 };
44960 }
44961 return res;
44962 };
44963
44964 Point.prototype.toJ = function toJ() {
44965 if (this.inf)
44966 return this.curve.jpoint(null, null, null);
44967
44968 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
44969 return res;
44970 };
44971
44972 function JPoint(curve, x, y, z) {
44973 Base.BasePoint.call(this, curve, 'jacobian');
44974 if (x === null && y === null && z === null) {
44975 this.x = this.curve.one;
44976 this.y = this.curve.one;
44977 this.z = new BN(0);
44978 } else {
44979 this.x = new BN(x, 16);
44980 this.y = new BN(y, 16);
44981 this.z = new BN(z, 16);
44982 }
44983 if (!this.x.red)
44984 this.x = this.x.toRed(this.curve.red);
44985 if (!this.y.red)
44986 this.y = this.y.toRed(this.curve.red);
44987 if (!this.z.red)
44988 this.z = this.z.toRed(this.curve.red);
44989
44990 this.zOne = this.z === this.curve.one;
44991 }
44992 inherits(JPoint, Base.BasePoint);
44993
44994 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
44995 return new JPoint(this, x, y, z);
44996 };
44997
44998 JPoint.prototype.toP = function toP() {
44999 if (this.isInfinity())
45000 return this.curve.point(null, null);
45001
45002 var zinv = this.z.redInvm();
45003 var zinv2 = zinv.redSqr();
45004 var ax = this.x.redMul(zinv2);
45005 var ay = this.y.redMul(zinv2).redMul(zinv);
45006
45007 return this.curve.point(ax, ay);
45008 };
45009
45010 JPoint.prototype.neg = function neg() {
45011 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
45012 };
45013
45014 JPoint.prototype.add = function add(p) {
45015 // O + P = P
45016 if (this.isInfinity())
45017 return p;
45018
45019 // P + O = P
45020 if (p.isInfinity())
45021 return this;
45022
45023 // 12M + 4S + 7A
45024 var pz2 = p.z.redSqr();
45025 var z2 = this.z.redSqr();
45026 var u1 = this.x.redMul(pz2);
45027 var u2 = p.x.redMul(z2);
45028 var s1 = this.y.redMul(pz2.redMul(p.z));
45029 var s2 = p.y.redMul(z2.redMul(this.z));
45030
45031 var h = u1.redSub(u2);
45032 var r = s1.redSub(s2);
45033 if (h.cmpn(0) === 0) {
45034 if (r.cmpn(0) !== 0)
45035 return this.curve.jpoint(null, null, null);
45036 else
45037 return this.dbl();
45038 }
45039
45040 var h2 = h.redSqr();
45041 var h3 = h2.redMul(h);
45042 var v = u1.redMul(h2);
45043
45044 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
45045 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
45046 var nz = this.z.redMul(p.z).redMul(h);
45047
45048 return this.curve.jpoint(nx, ny, nz);
45049 };
45050
45051 JPoint.prototype.mixedAdd = function mixedAdd(p) {
45052 // O + P = P
45053 if (this.isInfinity())
45054 return p.toJ();
45055
45056 // P + O = P
45057 if (p.isInfinity())
45058 return this;
45059
45060 // 8M + 3S + 7A
45061 var z2 = this.z.redSqr();
45062 var u1 = this.x;
45063 var u2 = p.x.redMul(z2);
45064 var s1 = this.y;
45065 var s2 = p.y.redMul(z2).redMul(this.z);
45066
45067 var h = u1.redSub(u2);
45068 var r = s1.redSub(s2);
45069 if (h.cmpn(0) === 0) {
45070 if (r.cmpn(0) !== 0)
45071 return this.curve.jpoint(null, null, null);
45072 else
45073 return this.dbl();
45074 }
45075
45076 var h2 = h.redSqr();
45077 var h3 = h2.redMul(h);
45078 var v = u1.redMul(h2);
45079
45080 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
45081 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
45082 var nz = this.z.redMul(h);
45083
45084 return this.curve.jpoint(nx, ny, nz);
45085 };
45086
45087 JPoint.prototype.dblp = function dblp(pow) {
45088 if (pow === 0)
45089 return this;
45090 if (this.isInfinity())
45091 return this;
45092 if (!pow)
45093 return this.dbl();
45094
45095 if (this.curve.zeroA || this.curve.threeA) {
45096 var r = this;
45097 for (var i = 0; i < pow; i++)
45098 r = r.dbl();
45099 return r;
45100 }
45101
45102 // 1M + 2S + 1A + N * (4S + 5M + 8A)
45103 // N = 1 => 6M + 6S + 9A
45104 var a = this.curve.a;
45105 var tinv = this.curve.tinv;
45106
45107 var jx = this.x;
45108 var jy = this.y;
45109 var jz = this.z;
45110 var jz4 = jz.redSqr().redSqr();
45111
45112 // Reuse results
45113 var jyd = jy.redAdd(jy);
45114 for (var i = 0; i < pow; i++) {
45115 var jx2 = jx.redSqr();
45116 var jyd2 = jyd.redSqr();
45117 var jyd4 = jyd2.redSqr();
45118 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
45119
45120 var t1 = jx.redMul(jyd2);
45121 var nx = c.redSqr().redISub(t1.redAdd(t1));
45122 var t2 = t1.redISub(nx);
45123 var dny = c.redMul(t2);
45124 dny = dny.redIAdd(dny).redISub(jyd4);
45125 var nz = jyd.redMul(jz);
45126 if (i + 1 < pow)
45127 jz4 = jz4.redMul(jyd4);
45128
45129 jx = nx;
45130 jz = nz;
45131 jyd = dny;
45132 }
45133
45134 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
45135 };
45136
45137 JPoint.prototype.dbl = function dbl() {
45138 if (this.isInfinity())
45139 return this;
45140
45141 if (this.curve.zeroA)
45142 return this._zeroDbl();
45143 else if (this.curve.threeA)
45144 return this._threeDbl();
45145 else
45146 return this._dbl();
45147 };
45148
45149 JPoint.prototype._zeroDbl = function _zeroDbl() {
45150 var nx;
45151 var ny;
45152 var nz;
45153 // Z = 1
45154 if (this.zOne) {
45155 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
45156 // #doubling-mdbl-2007-bl
45157 // 1M + 5S + 14A
45158
45159 // XX = X1^2
45160 var xx = this.x.redSqr();
45161 // YY = Y1^2
45162 var yy = this.y.redSqr();
45163 // YYYY = YY^2
45164 var yyyy = yy.redSqr();
45165 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
45166 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
45167 s = s.redIAdd(s);
45168 // M = 3 * XX + a; a = 0
45169 var m = xx.redAdd(xx).redIAdd(xx);
45170 // T = M ^ 2 - 2*S
45171 var t = m.redSqr().redISub(s).redISub(s);
45172
45173 // 8 * YYYY
45174 var yyyy8 = yyyy.redIAdd(yyyy);
45175 yyyy8 = yyyy8.redIAdd(yyyy8);
45176 yyyy8 = yyyy8.redIAdd(yyyy8);
45177
45178 // X3 = T
45179 nx = t;
45180 // Y3 = M * (S - T) - 8 * YYYY
45181 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
45182 // Z3 = 2*Y1
45183 nz = this.y.redAdd(this.y);
45184 } else {
45185 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
45186 // #doubling-dbl-2009-l
45187 // 2M + 5S + 13A
45188
45189 // A = X1^2
45190 var a = this.x.redSqr();
45191 // B = Y1^2
45192 var b = this.y.redSqr();
45193 // C = B^2
45194 var c = b.redSqr();
45195 // D = 2 * ((X1 + B)^2 - A - C)
45196 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
45197 d = d.redIAdd(d);
45198 // E = 3 * A
45199 var e = a.redAdd(a).redIAdd(a);
45200 // F = E^2
45201 var f = e.redSqr();
45202
45203 // 8 * C
45204 var c8 = c.redIAdd(c);
45205 c8 = c8.redIAdd(c8);
45206 c8 = c8.redIAdd(c8);
45207
45208 // X3 = F - 2 * D
45209 nx = f.redISub(d).redISub(d);
45210 // Y3 = E * (D - X3) - 8 * C
45211 ny = e.redMul(d.redISub(nx)).redISub(c8);
45212 // Z3 = 2 * Y1 * Z1
45213 nz = this.y.redMul(this.z);
45214 nz = nz.redIAdd(nz);
45215 }
45216
45217 return this.curve.jpoint(nx, ny, nz);
45218 };
45219
45220 JPoint.prototype._threeDbl = function _threeDbl() {
45221 var nx;
45222 var ny;
45223 var nz;
45224 // Z = 1
45225 if (this.zOne) {
45226 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
45227 // #doubling-mdbl-2007-bl
45228 // 1M + 5S + 15A
45229
45230 // XX = X1^2
45231 var xx = this.x.redSqr();
45232 // YY = Y1^2
45233 var yy = this.y.redSqr();
45234 // YYYY = YY^2
45235 var yyyy = yy.redSqr();
45236 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
45237 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
45238 s = s.redIAdd(s);
45239 // M = 3 * XX + a
45240 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
45241 // T = M^2 - 2 * S
45242 var t = m.redSqr().redISub(s).redISub(s);
45243 // X3 = T
45244 nx = t;
45245 // Y3 = M * (S - T) - 8 * YYYY
45246 var yyyy8 = yyyy.redIAdd(yyyy);
45247 yyyy8 = yyyy8.redIAdd(yyyy8);
45248 yyyy8 = yyyy8.redIAdd(yyyy8);
45249 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
45250 // Z3 = 2 * Y1
45251 nz = this.y.redAdd(this.y);
45252 } else {
45253 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
45254 // 3M + 5S
45255
45256 // delta = Z1^2
45257 var delta = this.z.redSqr();
45258 // gamma = Y1^2
45259 var gamma = this.y.redSqr();
45260 // beta = X1 * gamma
45261 var beta = this.x.redMul(gamma);
45262 // alpha = 3 * (X1 - delta) * (X1 + delta)
45263 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
45264 alpha = alpha.redAdd(alpha).redIAdd(alpha);
45265 // X3 = alpha^2 - 8 * beta
45266 var beta4 = beta.redIAdd(beta);
45267 beta4 = beta4.redIAdd(beta4);
45268 var beta8 = beta4.redAdd(beta4);
45269 nx = alpha.redSqr().redISub(beta8);
45270 // Z3 = (Y1 + Z1)^2 - gamma - delta
45271 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
45272 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
45273 var ggamma8 = gamma.redSqr();
45274 ggamma8 = ggamma8.redIAdd(ggamma8);
45275 ggamma8 = ggamma8.redIAdd(ggamma8);
45276 ggamma8 = ggamma8.redIAdd(ggamma8);
45277 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
45278 }
45279
45280 return this.curve.jpoint(nx, ny, nz);
45281 };
45282
45283 JPoint.prototype._dbl = function _dbl() {
45284 var a = this.curve.a;
45285
45286 // 4M + 6S + 10A
45287 var jx = this.x;
45288 var jy = this.y;
45289 var jz = this.z;
45290 var jz4 = jz.redSqr().redSqr();
45291
45292 var jx2 = jx.redSqr();
45293 var jy2 = jy.redSqr();
45294
45295 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
45296
45297 var jxd4 = jx.redAdd(jx);
45298 jxd4 = jxd4.redIAdd(jxd4);
45299 var t1 = jxd4.redMul(jy2);
45300 var nx = c.redSqr().redISub(t1.redAdd(t1));
45301 var t2 = t1.redISub(nx);
45302
45303 var jyd8 = jy2.redSqr();
45304 jyd8 = jyd8.redIAdd(jyd8);
45305 jyd8 = jyd8.redIAdd(jyd8);
45306 jyd8 = jyd8.redIAdd(jyd8);
45307 var ny = c.redMul(t2).redISub(jyd8);
45308 var nz = jy.redAdd(jy).redMul(jz);
45309
45310 return this.curve.jpoint(nx, ny, nz);
45311 };
45312
45313 JPoint.prototype.trpl = function trpl() {
45314 if (!this.curve.zeroA)
45315 return this.dbl().add(this);
45316
45317 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
45318 // 5M + 10S + ...
45319
45320 // XX = X1^2
45321 var xx = this.x.redSqr();
45322 // YY = Y1^2
45323 var yy = this.y.redSqr();
45324 // ZZ = Z1^2
45325 var zz = this.z.redSqr();
45326 // YYYY = YY^2
45327 var yyyy = yy.redSqr();
45328 // M = 3 * XX + a * ZZ2; a = 0
45329 var m = xx.redAdd(xx).redIAdd(xx);
45330 // MM = M^2
45331 var mm = m.redSqr();
45332 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
45333 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
45334 e = e.redIAdd(e);
45335 e = e.redAdd(e).redIAdd(e);
45336 e = e.redISub(mm);
45337 // EE = E^2
45338 var ee = e.redSqr();
45339 // T = 16*YYYY
45340 var t = yyyy.redIAdd(yyyy);
45341 t = t.redIAdd(t);
45342 t = t.redIAdd(t);
45343 t = t.redIAdd(t);
45344 // U = (M + E)^2 - MM - EE - T
45345 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
45346 // X3 = 4 * (X1 * EE - 4 * YY * U)
45347 var yyu4 = yy.redMul(u);
45348 yyu4 = yyu4.redIAdd(yyu4);
45349 yyu4 = yyu4.redIAdd(yyu4);
45350 var nx = this.x.redMul(ee).redISub(yyu4);
45351 nx = nx.redIAdd(nx);
45352 nx = nx.redIAdd(nx);
45353 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
45354 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
45355 ny = ny.redIAdd(ny);
45356 ny = ny.redIAdd(ny);
45357 ny = ny.redIAdd(ny);
45358 // Z3 = (Z1 + E)^2 - ZZ - EE
45359 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
45360
45361 return this.curve.jpoint(nx, ny, nz);
45362 };
45363
45364 JPoint.prototype.mul = function mul(k, kbase) {
45365 k = new BN(k, kbase);
45366
45367 return this.curve._wnafMul(this, k);
45368 };
45369
45370 JPoint.prototype.eq = function eq(p) {
45371 if (p.type === 'affine')
45372 return this.eq(p.toJ());
45373
45374 if (this === p)
45375 return true;
45376
45377 // x1 * z2^2 == x2 * z1^2
45378 var z2 = this.z.redSqr();
45379 var pz2 = p.z.redSqr();
45380 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
45381 return false;
45382
45383 // y1 * z2^3 == y2 * z1^3
45384 var z3 = z2.redMul(this.z);
45385 var pz3 = pz2.redMul(p.z);
45386 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
45387 };
45388
45389 JPoint.prototype.eqXToP = function eqXToP(x) {
45390 var zs = this.z.redSqr();
45391 var rx = x.toRed(this.curve.red).redMul(zs);
45392 if (this.x.cmp(rx) === 0)
45393 return true;
45394
45395 var xc = x.clone();
45396 var t = this.curve.redN.redMul(zs);
45397 for (;;) {
45398 xc.iadd(this.curve.n);
45399 if (xc.cmp(this.curve.p) >= 0)
45400 return false;
45401
45402 rx.redIAdd(t);
45403 if (this.x.cmp(rx) === 0)
45404 return true;
45405 }
45406 return false;
45407 };
45408
45409 JPoint.prototype.inspect = function inspect() {
45410 if (this.isInfinity())
45411 return '<EC JPoint Infinity>';
45412 return '<EC JPoint x: ' + this.x.toString(16, 2) +
45413 ' y: ' + this.y.toString(16, 2) +
45414 ' z: ' + this.z.toString(16, 2) + '>';
45415 };
45416
45417 JPoint.prototype.isInfinity = function isInfinity() {
45418 // XXX This code assumes that zero is always zero in red
45419 return this.z.cmpn(0) === 0;
45420 };
45421
45422 },{"../../elliptic":97,"../curve":100,"bn.js":81,"inherits":121}],103:[function(require,module,exports){
45423 'use strict';
45424
45425 var curves = exports;
45426
45427 var hash = require('hash.js');
45428 var elliptic = require('../elliptic');
45429
45430 var assert = elliptic.utils.assert;
45431
45432 function PresetCurve(options) {
45433 if (options.type === 'short')
45434 this.curve = new elliptic.curve.short(options);
45435 else if (options.type === 'edwards')
45436 this.curve = new elliptic.curve.edwards(options);
45437 else
45438 this.curve = new elliptic.curve.mont(options);
45439 this.g = this.curve.g;
45440 this.n = this.curve.n;
45441 this.hash = options.hash;
45442
45443 assert(this.g.validate(), 'Invalid curve');
45444 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
45445 }
45446 curves.PresetCurve = PresetCurve;
45447
45448 function defineCurve(name, options) {
45449 Object.defineProperty(curves, name, {
45450 configurable: true,
45451 enumerable: true,
45452 get: function() {
45453 var curve = new PresetCurve(options);
45454 Object.defineProperty(curves, name, {
45455 configurable: true,
45456 enumerable: true,
45457 value: curve
45458 });
45459 return curve;
45460 }
45461 });
45462 }
45463
45464 defineCurve('p192', {
45465 type: 'short',
45466 prime: 'p192',
45467 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
45468 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
45469 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
45470 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
45471 hash: hash.sha256,
45472 gRed: false,
45473 g: [
45474 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
45475 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
45476 ]
45477 });
45478
45479 defineCurve('p224', {
45480 type: 'short',
45481 prime: 'p224',
45482 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
45483 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
45484 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
45485 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
45486 hash: hash.sha256,
45487 gRed: false,
45488 g: [
45489 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
45490 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
45491 ]
45492 });
45493
45494 defineCurve('p256', {
45495 type: 'short',
45496 prime: null,
45497 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
45498 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
45499 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
45500 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
45501 hash: hash.sha256,
45502 gRed: false,
45503 g: [
45504 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
45505 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
45506 ]
45507 });
45508
45509 defineCurve('p384', {
45510 type: 'short',
45511 prime: null,
45512 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45513 'fffffffe ffffffff 00000000 00000000 ffffffff',
45514 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45515 'fffffffe ffffffff 00000000 00000000 fffffffc',
45516 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
45517 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
45518 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
45519 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
45520 hash: hash.sha384,
45521 gRed: false,
45522 g: [
45523 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
45524 '5502f25d bf55296c 3a545e38 72760ab7',
45525 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
45526 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
45527 ]
45528 });
45529
45530 defineCurve('p521', {
45531 type: 'short',
45532 prime: null,
45533 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45534 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45535 'ffffffff ffffffff ffffffff ffffffff ffffffff',
45536 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45537 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45538 'ffffffff ffffffff ffffffff ffffffff fffffffc',
45539 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
45540 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
45541 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
45542 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45543 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
45544 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
45545 hash: hash.sha512,
45546 gRed: false,
45547 g: [
45548 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
45549 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
45550 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
45551 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
45552 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
45553 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
45554 ]
45555 });
45556
45557 defineCurve('curve25519', {
45558 type: 'mont',
45559 prime: 'p25519',
45560 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
45561 a: '76d06',
45562 b: '1',
45563 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
45564 hash: hash.sha256,
45565 gRed: false,
45566 g: [
45567 '9'
45568 ]
45569 });
45570
45571 defineCurve('ed25519', {
45572 type: 'edwards',
45573 prime: 'p25519',
45574 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
45575 a: '-1',
45576 c: '1',
45577 // -121665 * (121666^(-1)) (mod P)
45578 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
45579 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
45580 hash: hash.sha256,
45581 gRed: false,
45582 g: [
45583 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
45584
45585 // 4/5
45586 '6666666666666666666666666666666666666666666666666666666666666658'
45587 ]
45588 });
45589
45590 var pre;
45591 try {
45592 pre = require('./precomputed/secp256k1');
45593 } catch (e) {
45594 pre = undefined;
45595 }
45596
45597 defineCurve('secp256k1', {
45598 type: 'short',
45599 prime: 'k256',
45600 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
45601 a: '0',
45602 b: '7',
45603 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
45604 h: '1',
45605 hash: hash.sha256,
45606
45607 // Precomputed endomorphism
45608 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
45609 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
45610 basis: [
45611 {
45612 a: '3086d221a7d46bcde86c90e49284eb15',
45613 b: '-e4437ed6010e88286f547fa90abfe4c3'
45614 },
45615 {
45616 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
45617 b: '3086d221a7d46bcde86c90e49284eb15'
45618 }
45619 ],
45620
45621 gRed: false,
45622 g: [
45623 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
45624 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
45625 pre
45626 ]
45627 });
45628
45629 },{"../elliptic":97,"./precomputed/secp256k1":110,"hash.js":114}],104:[function(require,module,exports){
45630 'use strict';
45631
45632 var BN = require('bn.js');
45633 var HmacDRBG = require('hmac-drbg');
45634 var elliptic = require('../../elliptic');
45635 var utils = elliptic.utils;
45636 var assert = utils.assert;
45637
45638 var KeyPair = require('./key');
45639 var Signature = require('./signature');
45640
45641 function EC(options) {
45642 if (!(this instanceof EC))
45643 return new EC(options);
45644
45645 // Shortcut `elliptic.ec(curve-name)`
45646 if (typeof options === 'string') {
45647 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
45648
45649 options = elliptic.curves[options];
45650 }
45651
45652 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
45653 if (options instanceof elliptic.curves.PresetCurve)
45654 options = { curve: options };
45655
45656 this.curve = options.curve.curve;
45657 this.n = this.curve.n;
45658 this.nh = this.n.ushrn(1);
45659 this.g = this.curve.g;
45660
45661 // Point on curve
45662 this.g = options.curve.g;
45663 this.g.precompute(options.curve.n.bitLength() + 1);
45664
45665 // Hash for function for DRBG
45666 this.hash = options.hash || options.curve.hash;
45667 }
45668 module.exports = EC;
45669
45670 EC.prototype.keyPair = function keyPair(options) {
45671 return new KeyPair(this, options);
45672 };
45673
45674 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
45675 return KeyPair.fromPrivate(this, priv, enc);
45676 };
45677
45678 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
45679 return KeyPair.fromPublic(this, pub, enc);
45680 };
45681
45682 EC.prototype.genKeyPair = function genKeyPair(options) {
45683 if (!options)
45684 options = {};
45685
45686 // Instantiate Hmac_DRBG
45687 var drbg = new HmacDRBG({
45688 hash: this.hash,
45689 pers: options.pers,
45690 persEnc: options.persEnc || 'utf8',
45691 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
45692 entropyEnc: options.entropy && options.entropyEnc || 'utf8',
45693 nonce: this.n.toArray()
45694 });
45695
45696 var bytes = this.n.byteLength();
45697 var ns2 = this.n.sub(new BN(2));
45698 do {
45699 var priv = new BN(drbg.generate(bytes));
45700 if (priv.cmp(ns2) > 0)
45701 continue;
45702
45703 priv.iaddn(1);
45704 return this.keyFromPrivate(priv);
45705 } while (true);
45706 };
45707
45708 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
45709 var delta = msg.byteLength() * 8 - this.n.bitLength();
45710 if (delta > 0)
45711 msg = msg.ushrn(delta);
45712 if (!truncOnly && msg.cmp(this.n) >= 0)
45713 return msg.sub(this.n);
45714 else
45715 return msg;
45716 };
45717
45718 EC.prototype.sign = function sign(msg, key, enc, options) {
45719 if (typeof enc === 'object') {
45720 options = enc;
45721 enc = null;
45722 }
45723 if (!options)
45724 options = {};
45725
45726 key = this.keyFromPrivate(key, enc);
45727 msg = this._truncateToN(new BN(msg, 16));
45728
45729 // Zero-extend key to provide enough entropy
45730 var bytes = this.n.byteLength();
45731 var bkey = key.getPrivate().toArray('be', bytes);
45732
45733 // Zero-extend nonce to have the same byte size as N
45734 var nonce = msg.toArray('be', bytes);
45735
45736 // Instantiate Hmac_DRBG
45737 var drbg = new HmacDRBG({
45738 hash: this.hash,
45739 entropy: bkey,
45740 nonce: nonce,
45741 pers: options.pers,
45742 persEnc: options.persEnc || 'utf8'
45743 });
45744
45745 // Number of bytes to generate
45746 var ns1 = this.n.sub(new BN(1));
45747
45748 for (var iter = 0; true; iter++) {
45749 var k = options.k ?
45750 options.k(iter) :
45751 new BN(drbg.generate(this.n.byteLength()));
45752 k = this._truncateToN(k, true);
45753 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
45754 continue;
45755
45756 var kp = this.g.mul(k);
45757 if (kp.isInfinity())
45758 continue;
45759
45760 var kpX = kp.getX();
45761 var r = kpX.umod(this.n);
45762 if (r.cmpn(0) === 0)
45763 continue;
45764
45765 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
45766 s = s.umod(this.n);
45767 if (s.cmpn(0) === 0)
45768 continue;
45769
45770 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
45771 (kpX.cmp(r) !== 0 ? 2 : 0);
45772
45773 // Use complement of `s`, if it is > `n / 2`
45774 if (options.canonical && s.cmp(this.nh) > 0) {
45775 s = this.n.sub(s);
45776 recoveryParam ^= 1;
45777 }
45778
45779 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
45780 }
45781 };
45782
45783 EC.prototype.verify = function verify(msg, signature, key, enc) {
45784 msg = this._truncateToN(new BN(msg, 16));
45785 key = this.keyFromPublic(key, enc);
45786 signature = new Signature(signature, 'hex');
45787
45788 // Perform primitive values validation
45789 var r = signature.r;
45790 var s = signature.s;
45791 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
45792 return false;
45793 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
45794 return false;
45795
45796 // Validate signature
45797 var sinv = s.invm(this.n);
45798 var u1 = sinv.mul(msg).umod(this.n);
45799 var u2 = sinv.mul(r).umod(this.n);
45800
45801 if (!this.curve._maxwellTrick) {
45802 var p = this.g.mulAdd(u1, key.getPublic(), u2);
45803 if (p.isInfinity())
45804 return false;
45805
45806 return p.getX().umod(this.n).cmp(r) === 0;
45807 }
45808
45809 // NOTE: Greg Maxwell's trick, inspired by:
45810 // https://git.io/vad3K
45811
45812 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
45813 if (p.isInfinity())
45814 return false;
45815
45816 // Compare `p.x` of Jacobian point with `r`,
45817 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
45818 // inverse of `p.z^2`
45819 return p.eqXToP(r);
45820 };
45821
45822 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
45823 assert((3 & j) === j, 'The recovery param is more than two bits');
45824 signature = new Signature(signature, enc);
45825
45826 var n = this.n;
45827 var e = new BN(msg);
45828 var r = signature.r;
45829 var s = signature.s;
45830
45831 // A set LSB signifies that the y-coordinate is odd
45832 var isYOdd = j & 1;
45833 var isSecondKey = j >> 1;
45834 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
45835 throw new Error('Unable to find sencond key candinate');
45836
45837 // 1.1. Let x = r + jn.
45838 if (isSecondKey)
45839 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
45840 else
45841 r = this.curve.pointFromX(r, isYOdd);
45842
45843 var rInv = signature.r.invm(n);
45844 var s1 = n.sub(e).mul(rInv).umod(n);
45845 var s2 = s.mul(rInv).umod(n);
45846
45847 // 1.6.1 Compute Q = r^-1 (sR - eG)
45848 // Q = r^-1 (sR + -eG)
45849 return this.g.mulAdd(s1, r, s2);
45850 };
45851
45852 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
45853 signature = new Signature(signature, enc);
45854 if (signature.recoveryParam !== null)
45855 return signature.recoveryParam;
45856
45857 for (var i = 0; i < 4; i++) {
45858 var Qprime;
45859 try {
45860 Qprime = this.recoverPubKey(e, signature, i);
45861 } catch (e) {
45862 continue;
45863 }
45864
45865 if (Qprime.eq(Q))
45866 return i;
45867 }
45868 throw new Error('Unable to find valid recovery factor');
45869 };
45870
45871 },{"../../elliptic":97,"./key":105,"./signature":106,"bn.js":81,"hmac-drbg":120}],105:[function(require,module,exports){
45872 'use strict';
45873
45874 var BN = require('bn.js');
45875 var elliptic = require('../../elliptic');
45876 var utils = elliptic.utils;
45877 var assert = utils.assert;
45878
45879 function KeyPair(ec, options) {
45880 this.ec = ec;
45881 this.priv = null;
45882 this.pub = null;
45883
45884 // KeyPair(ec, { priv: ..., pub: ... })
45885 if (options.priv)
45886 this._importPrivate(options.priv, options.privEnc);
45887 if (options.pub)
45888 this._importPublic(options.pub, options.pubEnc);
45889 }
45890 module.exports = KeyPair;
45891
45892 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
45893 if (pub instanceof KeyPair)
45894 return pub;
45895
45896 return new KeyPair(ec, {
45897 pub: pub,
45898 pubEnc: enc
45899 });
45900 };
45901
45902 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
45903 if (priv instanceof KeyPair)
45904 return priv;
45905
45906 return new KeyPair(ec, {
45907 priv: priv,
45908 privEnc: enc
45909 });
45910 };
45911
45912 KeyPair.prototype.validate = function validate() {
45913 var pub = this.getPublic();
45914
45915 if (pub.isInfinity())
45916 return { result: false, reason: 'Invalid public key' };
45917 if (!pub.validate())
45918 return { result: false, reason: 'Public key is not a point' };
45919 if (!pub.mul(this.ec.curve.n).isInfinity())
45920 return { result: false, reason: 'Public key * N != O' };
45921
45922 return { result: true, reason: null };
45923 };
45924
45925 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
45926 // compact is optional argument
45927 if (typeof compact === 'string') {
45928 enc = compact;
45929 compact = null;
45930 }
45931
45932 if (!this.pub)
45933 this.pub = this.ec.g.mul(this.priv);
45934
45935 if (!enc)
45936 return this.pub;
45937
45938 return this.pub.encode(enc, compact);
45939 };
45940
45941 KeyPair.prototype.getPrivate = function getPrivate(enc) {
45942 if (enc === 'hex')
45943 return this.priv.toString(16, 2);
45944 else
45945 return this.priv;
45946 };
45947
45948 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
45949 this.priv = new BN(key, enc || 16);
45950
45951 // Ensure that the priv won't be bigger than n, otherwise we may fail
45952 // in fixed multiplication method
45953 this.priv = this.priv.umod(this.ec.curve.n);
45954 };
45955
45956 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
45957 if (key.x || key.y) {
45958 // Montgomery points only have an `x` coordinate.
45959 // Weierstrass/Edwards points on the other hand have both `x` and
45960 // `y` coordinates.
45961 if (this.ec.curve.type === 'mont') {
45962 assert(key.x, 'Need x coordinate');
45963 } else if (this.ec.curve.type === 'short' ||
45964 this.ec.curve.type === 'edwards') {
45965 assert(key.x && key.y, 'Need both x and y coordinate');
45966 }
45967 this.pub = this.ec.curve.point(key.x, key.y);
45968 return;
45969 }
45970 this.pub = this.ec.curve.decodePoint(key, enc);
45971 };
45972
45973 // ECDH
45974 KeyPair.prototype.derive = function derive(pub) {
45975 return pub.mul(this.priv).getX();
45976 };
45977
45978 // ECDSA
45979 KeyPair.prototype.sign = function sign(msg, enc, options) {
45980 return this.ec.sign(msg, this, enc, options);
45981 };
45982
45983 KeyPair.prototype.verify = function verify(msg, signature) {
45984 return this.ec.verify(msg, signature, this);
45985 };
45986
45987 KeyPair.prototype.inspect = function inspect() {
45988 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
45989 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
45990 };
45991
45992 },{"../../elliptic":97,"bn.js":81}],106:[function(require,module,exports){
45993 'use strict';
45994
45995 var BN = require('bn.js');
45996
45997 var elliptic = require('../../elliptic');
45998 var utils = elliptic.utils;
45999 var assert = utils.assert;
46000
46001 function Signature(options, enc) {
46002 if (options instanceof Signature)
46003 return options;
46004
46005 if (this._importDER(options, enc))
46006 return;
46007
46008 assert(options.r && options.s, 'Signature without r or s');
46009 this.r = new BN(options.r, 16);
46010 this.s = new BN(options.s, 16);
46011 if (options.recoveryParam === undefined)
46012 this.recoveryParam = null;
46013 else
46014 this.recoveryParam = options.recoveryParam;
46015 }
46016 module.exports = Signature;
46017
46018 function Position() {
46019 this.place = 0;
46020 }
46021
46022 function getLength(buf, p) {
46023 var initial = buf[p.place++];
46024 if (!(initial & 0x80)) {
46025 return initial;
46026 }
46027 var octetLen = initial & 0xf;
46028 var val = 0;
46029 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
46030 val <<= 8;
46031 val |= buf[off];
46032 }
46033 p.place = off;
46034 return val;
46035 }
46036
46037 function rmPadding(buf) {
46038 var i = 0;
46039 var len = buf.length - 1;
46040 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
46041 i++;
46042 }
46043 if (i === 0) {
46044 return buf;
46045 }
46046 return buf.slice(i);
46047 }
46048
46049 Signature.prototype._importDER = function _importDER(data, enc) {
46050 data = utils.toArray(data, enc);
46051 var p = new Position();
46052 if (data[p.place++] !== 0x30) {
46053 return false;
46054 }
46055 var len = getLength(data, p);
46056 if ((len + p.place) !== data.length) {
46057 return false;
46058 }
46059 if (data[p.place++] !== 0x02) {
46060 return false;
46061 }
46062 var rlen = getLength(data, p);
46063 var r = data.slice(p.place, rlen + p.place);
46064 p.place += rlen;
46065 if (data[p.place++] !== 0x02) {
46066 return false;
46067 }
46068 var slen = getLength(data, p);
46069 if (data.length !== slen + p.place) {
46070 return false;
46071 }
46072 var s = data.slice(p.place, slen + p.place);
46073 if (r[0] === 0 && (r[1] & 0x80)) {
46074 r = r.slice(1);
46075 }
46076 if (s[0] === 0 && (s[1] & 0x80)) {
46077 s = s.slice(1);
46078 }
46079
46080 this.r = new BN(r);
46081 this.s = new BN(s);
46082 this.recoveryParam = null;
46083
46084 return true;
46085 };
46086
46087 function constructLength(arr, len) {
46088 if (len < 0x80) {
46089 arr.push(len);
46090 return;
46091 }
46092 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
46093 arr.push(octets | 0x80);
46094 while (--octets) {
46095 arr.push((len >>> (octets << 3)) & 0xff);
46096 }
46097 arr.push(len);
46098 }
46099
46100 Signature.prototype.toDER = function toDER(enc) {
46101 var r = this.r.toArray();
46102 var s = this.s.toArray();
46103
46104 // Pad values
46105 if (r[0] & 0x80)
46106 r = [ 0 ].concat(r);
46107 // Pad values
46108 if (s[0] & 0x80)
46109 s = [ 0 ].concat(s);
46110
46111 r = rmPadding(r);
46112 s = rmPadding(s);
46113
46114 while (!s[0] && !(s[1] & 0x80)) {
46115 s = s.slice(1);
46116 }
46117 var arr = [ 0x02 ];
46118 constructLength(arr, r.length);
46119 arr = arr.concat(r);
46120 arr.push(0x02);
46121 constructLength(arr, s.length);
46122 var backHalf = arr.concat(s);
46123 var res = [ 0x30 ];
46124 constructLength(res, backHalf.length);
46125 res = res.concat(backHalf);
46126 return utils.encode(res, enc);
46127 };
46128
46129 },{"../../elliptic":97,"bn.js":81}],107:[function(require,module,exports){
46130 'use strict';
46131
46132 var hash = require('hash.js');
46133 var elliptic = require('../../elliptic');
46134 var utils = elliptic.utils;
46135 var assert = utils.assert;
46136 var parseBytes = utils.parseBytes;
46137 var KeyPair = require('./key');
46138 var Signature = require('./signature');
46139
46140 function EDDSA(curve) {
46141 assert(curve === 'ed25519', 'only tested with ed25519 so far');
46142
46143 if (!(this instanceof EDDSA))
46144 return new EDDSA(curve);
46145
46146 var curve = elliptic.curves[curve].curve;
46147 this.curve = curve;
46148 this.g = curve.g;
46149 this.g.precompute(curve.n.bitLength() + 1);
46150
46151 this.pointClass = curve.point().constructor;
46152 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
46153 this.hash = hash.sha512;
46154 }
46155
46156 module.exports = EDDSA;
46157
46158 /**
46159 * @param {Array|String} message - message bytes
46160 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
46161 * @returns {Signature} - signature
46162 */
46163 EDDSA.prototype.sign = function sign(message, secret) {
46164 message = parseBytes(message);
46165 var key = this.keyFromSecret(secret);
46166 var r = this.hashInt(key.messagePrefix(), message);
46167 var R = this.g.mul(r);
46168 var Rencoded = this.encodePoint(R);
46169 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
46170 .mul(key.priv());
46171 var S = r.add(s_).umod(this.curve.n);
46172 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
46173 };
46174
46175 /**
46176 * @param {Array} message - message bytes
46177 * @param {Array|String|Signature} sig - sig bytes
46178 * @param {Array|String|Point|KeyPair} pub - public key
46179 * @returns {Boolean} - true if public key matches sig of message
46180 */
46181 EDDSA.prototype.verify = function verify(message, sig, pub) {
46182 message = parseBytes(message);
46183 sig = this.makeSignature(sig);
46184 var key = this.keyFromPublic(pub);
46185 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
46186 var SG = this.g.mul(sig.S());
46187 var RplusAh = sig.R().add(key.pub().mul(h));
46188 return RplusAh.eq(SG);
46189 };
46190
46191 EDDSA.prototype.hashInt = function hashInt() {
46192 var hash = this.hash();
46193 for (var i = 0; i < arguments.length; i++)
46194 hash.update(arguments[i]);
46195 return utils.intFromLE(hash.digest()).umod(this.curve.n);
46196 };
46197
46198 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
46199 return KeyPair.fromPublic(this, pub);
46200 };
46201
46202 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
46203 return KeyPair.fromSecret(this, secret);
46204 };
46205
46206 EDDSA.prototype.makeSignature = function makeSignature(sig) {
46207 if (sig instanceof Signature)
46208 return sig;
46209 return new Signature(this, sig);
46210 };
46211
46212 /**
46213 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
46214 *
46215 * EDDSA defines methods for encoding and decoding points and integers. These are
46216 * helper convenience methods, that pass along to utility functions implied
46217 * parameters.
46218 *
46219 */
46220 EDDSA.prototype.encodePoint = function encodePoint(point) {
46221 var enc = point.getY().toArray('le', this.encodingLength);
46222 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
46223 return enc;
46224 };
46225
46226 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
46227 bytes = utils.parseBytes(bytes);
46228
46229 var lastIx = bytes.length - 1;
46230 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
46231 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
46232
46233 var y = utils.intFromLE(normed);
46234 return this.curve.pointFromY(y, xIsOdd);
46235 };
46236
46237 EDDSA.prototype.encodeInt = function encodeInt(num) {
46238 return num.toArray('le', this.encodingLength);
46239 };
46240
46241 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
46242 return utils.intFromLE(bytes);
46243 };
46244
46245 EDDSA.prototype.isPoint = function isPoint(val) {
46246 return val instanceof this.pointClass;
46247 };
46248
46249 },{"../../elliptic":97,"./key":108,"./signature":109,"hash.js":114}],108:[function(require,module,exports){
46250 'use strict';
46251
46252 var elliptic = require('../../elliptic');
46253 var utils = elliptic.utils;
46254 var assert = utils.assert;
46255 var parseBytes = utils.parseBytes;
46256 var cachedProperty = utils.cachedProperty;
46257
46258 /**
46259 * @param {EDDSA} eddsa - instance
46260 * @param {Object} params - public/private key parameters
46261 *
46262 * @param {Array<Byte>} [params.secret] - secret seed bytes
46263 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
46264 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
46265 *
46266 */
46267 function KeyPair(eddsa, params) {
46268 this.eddsa = eddsa;
46269 this._secret = parseBytes(params.secret);
46270 if (eddsa.isPoint(params.pub))
46271 this._pub = params.pub;
46272 else
46273 this._pubBytes = parseBytes(params.pub);
46274 }
46275
46276 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
46277 if (pub instanceof KeyPair)
46278 return pub;
46279 return new KeyPair(eddsa, { pub: pub });
46280 };
46281
46282 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
46283 if (secret instanceof KeyPair)
46284 return secret;
46285 return new KeyPair(eddsa, { secret: secret });
46286 };
46287
46288 KeyPair.prototype.secret = function secret() {
46289 return this._secret;
46290 };
46291
46292 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
46293 return this.eddsa.encodePoint(this.pub());
46294 });
46295
46296 cachedProperty(KeyPair, 'pub', function pub() {
46297 if (this._pubBytes)
46298 return this.eddsa.decodePoint(this._pubBytes);
46299 return this.eddsa.g.mul(this.priv());
46300 });
46301
46302 cachedProperty(KeyPair, 'privBytes', function privBytes() {
46303 var eddsa = this.eddsa;
46304 var hash = this.hash();
46305 var lastIx = eddsa.encodingLength - 1;
46306
46307 var a = hash.slice(0, eddsa.encodingLength);
46308 a[0] &= 248;
46309 a[lastIx] &= 127;
46310 a[lastIx] |= 64;
46311
46312 return a;
46313 });
46314
46315 cachedProperty(KeyPair, 'priv', function priv() {
46316 return this.eddsa.decodeInt(this.privBytes());
46317 });
46318
46319 cachedProperty(KeyPair, 'hash', function hash() {
46320 return this.eddsa.hash().update(this.secret()).digest();
46321 });
46322
46323 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
46324 return this.hash().slice(this.eddsa.encodingLength);
46325 });
46326
46327 KeyPair.prototype.sign = function sign(message) {
46328 assert(this._secret, 'KeyPair can only verify');
46329 return this.eddsa.sign(message, this);
46330 };
46331
46332 KeyPair.prototype.verify = function verify(message, sig) {
46333 return this.eddsa.verify(message, sig, this);
46334 };
46335
46336 KeyPair.prototype.getSecret = function getSecret(enc) {
46337 assert(this._secret, 'KeyPair is public only');
46338 return utils.encode(this.secret(), enc);
46339 };
46340
46341 KeyPair.prototype.getPublic = function getPublic(enc) {
46342 return utils.encode(this.pubBytes(), enc);
46343 };
46344
46345 module.exports = KeyPair;
46346
46347 },{"../../elliptic":97}],109:[function(require,module,exports){
46348 'use strict';
46349
46350 var BN = require('bn.js');
46351 var elliptic = require('../../elliptic');
46352 var utils = elliptic.utils;
46353 var assert = utils.assert;
46354 var cachedProperty = utils.cachedProperty;
46355 var parseBytes = utils.parseBytes;
46356
46357 /**
46358 * @param {EDDSA} eddsa - eddsa instance
46359 * @param {Array<Bytes>|Object} sig -
46360 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
46361 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
46362 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
46363 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
46364 */
46365 function Signature(eddsa, sig) {
46366 this.eddsa = eddsa;
46367
46368 if (typeof sig !== 'object')
46369 sig = parseBytes(sig);
46370
46371 if (Array.isArray(sig)) {
46372 sig = {
46373 R: sig.slice(0, eddsa.encodingLength),
46374 S: sig.slice(eddsa.encodingLength)
46375 };
46376 }
46377
46378 assert(sig.R && sig.S, 'Signature without R or S');
46379
46380 if (eddsa.isPoint(sig.R))
46381 this._R = sig.R;
46382 if (sig.S instanceof BN)
46383 this._S = sig.S;
46384
46385 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
46386 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
46387 }
46388
46389 cachedProperty(Signature, 'S', function S() {
46390 return this.eddsa.decodeInt(this.Sencoded());
46391 });
46392
46393 cachedProperty(Signature, 'R', function R() {
46394 return this.eddsa.decodePoint(this.Rencoded());
46395 });
46396
46397 cachedProperty(Signature, 'Rencoded', function Rencoded() {
46398 return this.eddsa.encodePoint(this.R());
46399 });
46400
46401 cachedProperty(Signature, 'Sencoded', function Sencoded() {
46402 return this.eddsa.encodeInt(this.S());
46403 });
46404
46405 Signature.prototype.toBytes = function toBytes() {
46406 return this.Rencoded().concat(this.Sencoded());
46407 };
46408
46409 Signature.prototype.toHex = function toHex() {
46410 return utils.encode(this.toBytes(), 'hex').toUpperCase();
46411 };
46412
46413 module.exports = Signature;
46414
46415 },{"../../elliptic":97,"bn.js":81}],110:[function(require,module,exports){
46416 module.exports = {
46417 doubles: {
46418 step: 4,
46419 points: [
46420 [
46421 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
46422 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
46423 ],
46424 [
46425 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
46426 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
46427 ],
46428 [
46429 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
46430 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
46431 ],
46432 [
46433 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
46434 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
46435 ],
46436 [
46437 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
46438 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
46439 ],
46440 [
46441 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
46442 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
46443 ],
46444 [
46445 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
46446 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
46447 ],
46448 [
46449 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
46450 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
46451 ],
46452 [
46453 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
46454 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
46455 ],
46456 [
46457 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
46458 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
46459 ],
46460 [
46461 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
46462 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
46463 ],
46464 [
46465 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
46466 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
46467 ],
46468 [
46469 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
46470 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
46471 ],
46472 [
46473 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
46474 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
46475 ],
46476 [
46477 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
46478 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
46479 ],
46480 [
46481 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
46482 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
46483 ],
46484 [
46485 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
46486 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
46487 ],
46488 [
46489 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
46490 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
46491 ],
46492 [
46493 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
46494 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
46495 ],
46496 [
46497 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
46498 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
46499 ],
46500 [
46501 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
46502 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
46503 ],
46504 [
46505 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
46506 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
46507 ],
46508 [
46509 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
46510 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
46511 ],
46512 [
46513 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
46514 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
46515 ],
46516 [
46517 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
46518 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
46519 ],
46520 [
46521 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
46522 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
46523 ],
46524 [
46525 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
46526 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
46527 ],
46528 [
46529 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
46530 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
46531 ],
46532 [
46533 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
46534 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
46535 ],
46536 [
46537 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
46538 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
46539 ],
46540 [
46541 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
46542 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
46543 ],
46544 [
46545 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
46546 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
46547 ],
46548 [
46549 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
46550 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
46551 ],
46552 [
46553 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
46554 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
46555 ],
46556 [
46557 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
46558 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
46559 ],
46560 [
46561 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
46562 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
46563 ],
46564 [
46565 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
46566 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
46567 ],
46568 [
46569 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
46570 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
46571 ],
46572 [
46573 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
46574 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
46575 ],
46576 [
46577 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
46578 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
46579 ],
46580 [
46581 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
46582 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
46583 ],
46584 [
46585 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
46586 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
46587 ],
46588 [
46589 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
46590 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
46591 ],
46592 [
46593 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
46594 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
46595 ],
46596 [
46597 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
46598 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
46599 ],
46600 [
46601 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
46602 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
46603 ],
46604 [
46605 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
46606 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
46607 ],
46608 [
46609 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
46610 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
46611 ],
46612 [
46613 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
46614 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
46615 ],
46616 [
46617 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
46618 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
46619 ],
46620 [
46621 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
46622 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
46623 ],
46624 [
46625 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
46626 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
46627 ],
46628 [
46629 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
46630 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
46631 ],
46632 [
46633 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
46634 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
46635 ],
46636 [
46637 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
46638 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
46639 ],
46640 [
46641 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
46642 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
46643 ],
46644 [
46645 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
46646 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
46647 ],
46648 [
46649 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
46650 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
46651 ],
46652 [
46653 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
46654 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
46655 ],
46656 [
46657 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
46658 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
46659 ],
46660 [
46661 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
46662 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
46663 ],
46664 [
46665 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
46666 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
46667 ],
46668 [
46669 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
46670 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
46671 ],
46672 [
46673 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
46674 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
46675 ],
46676 [
46677 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
46678 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
46679 ]
46680 ]
46681 },
46682 naf: {
46683 wnd: 7,
46684 points: [
46685 [
46686 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
46687 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
46688 ],
46689 [
46690 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
46691 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
46692 ],
46693 [
46694 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
46695 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
46696 ],
46697 [
46698 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
46699 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
46700 ],
46701 [
46702 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
46703 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
46704 ],
46705 [
46706 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
46707 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
46708 ],
46709 [
46710 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
46711 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
46712 ],
46713 [
46714 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
46715 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
46716 ],
46717 [
46718 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
46719 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
46720 ],
46721 [
46722 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
46723 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
46724 ],
46725 [
46726 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
46727 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
46728 ],
46729 [
46730 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
46731 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
46732 ],
46733 [
46734 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
46735 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
46736 ],
46737 [
46738 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
46739 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
46740 ],
46741 [
46742 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
46743 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
46744 ],
46745 [
46746 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
46747 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
46748 ],
46749 [
46750 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
46751 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
46752 ],
46753 [
46754 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
46755 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
46756 ],
46757 [
46758 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
46759 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
46760 ],
46761 [
46762 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
46763 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
46764 ],
46765 [
46766 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
46767 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
46768 ],
46769 [
46770 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
46771 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
46772 ],
46773 [
46774 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
46775 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
46776 ],
46777 [
46778 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
46779 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
46780 ],
46781 [
46782 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
46783 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
46784 ],
46785 [
46786 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
46787 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
46788 ],
46789 [
46790 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
46791 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
46792 ],
46793 [
46794 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
46795 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
46796 ],
46797 [
46798 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
46799 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
46800 ],
46801 [
46802 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
46803 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
46804 ],
46805 [
46806 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
46807 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
46808 ],
46809 [
46810 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
46811 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
46812 ],
46813 [
46814 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
46815 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
46816 ],
46817 [
46818 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
46819 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
46820 ],
46821 [
46822 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
46823 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
46824 ],
46825 [
46826 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
46827 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
46828 ],
46829 [
46830 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
46831 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
46832 ],
46833 [
46834 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
46835 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
46836 ],
46837 [
46838 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
46839 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
46840 ],
46841 [
46842 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
46843 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
46844 ],
46845 [
46846 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
46847 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
46848 ],
46849 [
46850 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
46851 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
46852 ],
46853 [
46854 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
46855 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
46856 ],
46857 [
46858 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
46859 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
46860 ],
46861 [
46862 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
46863 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
46864 ],
46865 [
46866 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
46867 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
46868 ],
46869 [
46870 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
46871 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
46872 ],
46873 [
46874 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
46875 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
46876 ],
46877 [
46878 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
46879 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
46880 ],
46881 [
46882 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
46883 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
46884 ],
46885 [
46886 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
46887 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
46888 ],
46889 [
46890 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
46891 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
46892 ],
46893 [
46894 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
46895 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
46896 ],
46897 [
46898 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
46899 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
46900 ],
46901 [
46902 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
46903 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
46904 ],
46905 [
46906 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
46907 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
46908 ],
46909 [
46910 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
46911 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
46912 ],
46913 [
46914 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
46915 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
46916 ],
46917 [
46918 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
46919 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
46920 ],
46921 [
46922 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
46923 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
46924 ],
46925 [
46926 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
46927 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
46928 ],
46929 [
46930 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
46931 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
46932 ],
46933 [
46934 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
46935 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
46936 ],
46937 [
46938 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
46939 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
46940 ],
46941 [
46942 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
46943 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
46944 ],
46945 [
46946 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
46947 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
46948 ],
46949 [
46950 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
46951 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
46952 ],
46953 [
46954 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
46955 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
46956 ],
46957 [
46958 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
46959 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
46960 ],
46961 [
46962 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
46963 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
46964 ],
46965 [
46966 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
46967 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
46968 ],
46969 [
46970 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
46971 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
46972 ],
46973 [
46974 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
46975 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
46976 ],
46977 [
46978 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
46979 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
46980 ],
46981 [
46982 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
46983 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
46984 ],
46985 [
46986 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
46987 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
46988 ],
46989 [
46990 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
46991 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
46992 ],
46993 [
46994 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
46995 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
46996 ],
46997 [
46998 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
46999 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
47000 ],
47001 [
47002 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
47003 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
47004 ],
47005 [
47006 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
47007 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
47008 ],
47009 [
47010 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
47011 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
47012 ],
47013 [
47014 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
47015 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
47016 ],
47017 [
47018 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
47019 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
47020 ],
47021 [
47022 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
47023 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
47024 ],
47025 [
47026 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
47027 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
47028 ],
47029 [
47030 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
47031 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
47032 ],
47033 [
47034 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
47035 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
47036 ],
47037 [
47038 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
47039 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
47040 ],
47041 [
47042 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
47043 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
47044 ],
47045 [
47046 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
47047 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
47048 ],
47049 [
47050 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
47051 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
47052 ],
47053 [
47054 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
47055 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
47056 ],
47057 [
47058 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
47059 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
47060 ],
47061 [
47062 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
47063 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
47064 ],
47065 [
47066 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
47067 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
47068 ],
47069 [
47070 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
47071 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
47072 ],
47073 [
47074 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
47075 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
47076 ],
47077 [
47078 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
47079 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
47080 ],
47081 [
47082 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
47083 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
47084 ],
47085 [
47086 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
47087 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
47088 ],
47089 [
47090 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
47091 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
47092 ],
47093 [
47094 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
47095 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
47096 ],
47097 [
47098 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
47099 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
47100 ],
47101 [
47102 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
47103 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
47104 ],
47105 [
47106 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
47107 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
47108 ],
47109 [
47110 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
47111 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
47112 ],
47113 [
47114 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
47115 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
47116 ],
47117 [
47118 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
47119 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
47120 ],
47121 [
47122 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
47123 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
47124 ],
47125 [
47126 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
47127 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
47128 ],
47129 [
47130 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
47131 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
47132 ],
47133 [
47134 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
47135 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
47136 ],
47137 [
47138 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
47139 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
47140 ],
47141 [
47142 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
47143 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
47144 ],
47145 [
47146 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
47147 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
47148 ],
47149 [
47150 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
47151 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
47152 ],
47153 [
47154 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
47155 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
47156 ],
47157 [
47158 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
47159 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
47160 ],
47161 [
47162 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
47163 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
47164 ],
47165 [
47166 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
47167 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
47168 ],
47169 [
47170 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
47171 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
47172 ],
47173 [
47174 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
47175 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
47176 ],
47177 [
47178 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
47179 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
47180 ],
47181 [
47182 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
47183 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
47184 ],
47185 [
47186 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
47187 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
47188 ],
47189 [
47190 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
47191 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
47192 ]
47193 ]
47194 }
47195 };
47196
47197 },{}],111:[function(require,module,exports){
47198 'use strict';
47199
47200 var utils = exports;
47201 var BN = require('bn.js');
47202 var minAssert = require('minimalistic-assert');
47203 var minUtils = require('minimalistic-crypto-utils');
47204
47205 utils.assert = minAssert;
47206 utils.toArray = minUtils.toArray;
47207 utils.zero2 = minUtils.zero2;
47208 utils.toHex = minUtils.toHex;
47209 utils.encode = minUtils.encode;
47210
47211 // Represent num in a w-NAF form
47212 function getNAF(num, w) {
47213 var naf = [];
47214 var ws = 1 << (w + 1);
47215 var k = num.clone();
47216 while (k.cmpn(1) >= 0) {
47217 var z;
47218 if (k.isOdd()) {
47219 var mod = k.andln(ws - 1);
47220 if (mod > (ws >> 1) - 1)
47221 z = (ws >> 1) - mod;
47222 else
47223 z = mod;
47224 k.isubn(z);
47225 } else {
47226 z = 0;
47227 }
47228 naf.push(z);
47229
47230 // Optimization, shift by word if possible
47231 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
47232 for (var i = 1; i < shift; i++)
47233 naf.push(0);
47234 k.iushrn(shift);
47235 }
47236
47237 return naf;
47238 }
47239 utils.getNAF = getNAF;
47240
47241 // Represent k1, k2 in a Joint Sparse Form
47242 function getJSF(k1, k2) {
47243 var jsf = [
47244 [],
47245 []
47246 ];
47247
47248 k1 = k1.clone();
47249 k2 = k2.clone();
47250 var d1 = 0;
47251 var d2 = 0;
47252 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
47253
47254 // First phase
47255 var m14 = (k1.andln(3) + d1) & 3;
47256 var m24 = (k2.andln(3) + d2) & 3;
47257 if (m14 === 3)
47258 m14 = -1;
47259 if (m24 === 3)
47260 m24 = -1;
47261 var u1;
47262 if ((m14 & 1) === 0) {
47263 u1 = 0;
47264 } else {
47265 var m8 = (k1.andln(7) + d1) & 7;
47266 if ((m8 === 3 || m8 === 5) && m24 === 2)
47267 u1 = -m14;
47268 else
47269 u1 = m14;
47270 }
47271 jsf[0].push(u1);
47272
47273 var u2;
47274 if ((m24 & 1) === 0) {
47275 u2 = 0;
47276 } else {
47277 var m8 = (k2.andln(7) + d2) & 7;
47278 if ((m8 === 3 || m8 === 5) && m14 === 2)
47279 u2 = -m24;
47280 else
47281 u2 = m24;
47282 }
47283 jsf[1].push(u2);
47284
47285 // Second phase
47286 if (2 * d1 === u1 + 1)
47287 d1 = 1 - d1;
47288 if (2 * d2 === u2 + 1)
47289 d2 = 1 - d2;
47290 k1.iushrn(1);
47291 k2.iushrn(1);
47292 }
47293
47294 return jsf;
47295 }
47296 utils.getJSF = getJSF;
47297
47298 function cachedProperty(obj, name, computer) {
47299 var key = '_' + name;
47300 obj.prototype[name] = function cachedProperty() {
47301 return this[key] !== undefined ? this[key] :
47302 this[key] = computer.call(this);
47303 };
47304 }
47305 utils.cachedProperty = cachedProperty;
47306
47307 function parseBytes(bytes) {
47308 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
47309 bytes;
47310 }
47311 utils.parseBytes = parseBytes;
47312
47313 function intFromLE(bytes) {
47314 return new BN(bytes, 'hex', 'le');
47315 }
47316 utils.intFromLE = intFromLE;
47317
47318
47319 },{"bn.js":81,"minimalistic-assert":123,"minimalistic-crypto-utils":124}],112:[function(require,module,exports){
47320 module.exports={
47321 "_args": [
47322 [
47323 "elliptic",
47324 "/home/ian/git/bitcoin/bitcoinjs-lib-browser"
47325 ]
47326 ],
47327 "_from": "elliptic@latest",
47328 "_id": "elliptic@6.4.0",
47329 "_inCache": true,
47330 "_installable": true,
47331 "_location": "/elliptic",
47332 "_nodeVersion": "7.0.0",
47333 "_npmOperationalInternal": {
47334 "host": "packages-18-east.internal.npmjs.com",
47335 "tmp": "tmp/elliptic-6.4.0.tgz_1487798866428_0.30510620190761983"
47336 },
47337 "_npmUser": {
47338 "email": "fedor@indutny.com",
47339 "name": "indutny"
47340 },
47341 "_npmVersion": "3.10.8",
47342 "_phantomChildren": {},
47343 "_requested": {
47344 "name": "elliptic",
47345 "raw": "elliptic",
47346 "rawSpec": "",
47347 "scope": null,
47348 "spec": "latest",
47349 "type": "tag"
47350 },
47351 "_requiredBy": [
47352 "#USER"
47353 ],
47354 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
47355 "_shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
47356 "_shrinkwrap": null,
47357 "_spec": "elliptic",
47358 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser",
47359 "author": {
47360 "email": "fedor@indutny.com",
47361 "name": "Fedor Indutny"
47362 },
47363 "bugs": {
47364 "url": "https://github.com/indutny/elliptic/issues"
47365 },
47366 "dependencies": {
47367 "bn.js": "^4.4.0",
47368 "brorand": "^1.0.1",
47369 "hash.js": "^1.0.0",
47370 "hmac-drbg": "^1.0.0",
47371 "inherits": "^2.0.1",
47372 "minimalistic-assert": "^1.0.0",
47373 "minimalistic-crypto-utils": "^1.0.0"
47374 },
47375 "description": "EC cryptography",
47376 "devDependencies": {
47377 "brfs": "^1.4.3",
47378 "coveralls": "^2.11.3",
47379 "grunt": "^0.4.5",
47380 "grunt-browserify": "^5.0.0",
47381 "grunt-cli": "^1.2.0",
47382 "grunt-contrib-connect": "^1.0.0",
47383 "grunt-contrib-copy": "^1.0.0",
47384 "grunt-contrib-uglify": "^1.0.1",
47385 "grunt-mocha-istanbul": "^3.0.1",
47386 "grunt-saucelabs": "^8.6.2",
47387 "istanbul": "^0.4.2",
47388 "jscs": "^2.9.0",
47389 "jshint": "^2.6.0",
47390 "mocha": "^2.1.0"
47391 },
47392 "directories": {},
47393 "dist": {
47394 "shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
47395 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz"
47396 },
47397 "files": [
47398 "lib"
47399 ],
47400 "gitHead": "6b0d2b76caae91471649c8e21f0b1d3ba0f96090",
47401 "homepage": "https://github.com/indutny/elliptic",
47402 "keywords": [
47403 "EC",
47404 "Elliptic",
47405 "curve",
47406 "Cryptography"
47407 ],
47408 "license": "MIT",
47409 "main": "lib/elliptic.js",
47410 "maintainers": [
47411 {
47412 "email": "fedor@indutny.com",
47413 "name": "indutny"
47414 }
47415 ],
47416 "name": "elliptic",
47417 "optionalDependencies": {},
47418 "readme": "ERROR: No README data found!",
47419 "repository": {
47420 "type": "git",
47421 "url": "git+ssh://git@github.com/indutny/elliptic.git"
47422 },
47423 "scripts": {
47424 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
47425 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
47426 "lint": "npm run jscs && npm run jshint",
47427 "test": "npm run lint && npm run unit",
47428 "unit": "istanbul test _mocha --reporter=spec test/index.js",
47429 "version": "grunt dist && git add dist/"
47430 },
47431 "version": "6.4.0"
47432 }
47433
47434 },{}],113:[function(require,module,exports){
47435 (function (Buffer){
47436 'use strict'
47437 var Transform = require('stream').Transform
47438 var inherits = require('inherits')
47439
47440 function HashBase (blockSize) {
47441 Transform.call(this)
47442
47443 this._block = new Buffer(blockSize)
47444 this._blockSize = blockSize
47445 this._blockOffset = 0
47446 this._length = [0, 0, 0, 0]
47447
47448 this._finalized = false
47449 }
47450
47451 inherits(HashBase, Transform)
47452
47453 HashBase.prototype._transform = function (chunk, encoding, callback) {
47454 var error = null
47455 try {
47456 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
47457 this.update(chunk)
47458 } catch (err) {
47459 error = err
47460 }
47461
47462 callback(error)
47463 }
47464
47465 HashBase.prototype._flush = function (callback) {
47466 var error = null
47467 try {
47468 this.push(this._digest())
47469 } catch (err) {
47470 error = err
47471 }
47472
47473 callback(error)
47474 }
47475
47476 HashBase.prototype.update = function (data, encoding) {
47477 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
47478 if (this._finalized) throw new Error('Digest already called')
47479 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
47480
47481 // consume data
47482 var block = this._block
47483 var offset = 0
47484 while (this._blockOffset + data.length - offset >= this._blockSize) {
47485 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
47486 this._update()
47487 this._blockOffset = 0
47488 }
47489 while (offset < data.length) block[this._blockOffset++] = data[offset++]
47490
47491 // update length
47492 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
47493 this._length[j] += carry
47494 carry = (this._length[j] / 0x0100000000) | 0
47495 if (carry > 0) this._length[j] -= 0x0100000000 * carry
47496 }
47497
47498 return this
47499 }
47500
47501 HashBase.prototype._update = function (data) {
47502 throw new Error('_update is not implemented')
47503 }
47504
47505 HashBase.prototype.digest = function (encoding) {
47506 if (this._finalized) throw new Error('Digest already called')
47507 this._finalized = true
47508
47509 var digest = this._digest()
47510 if (encoding !== undefined) digest = digest.toString(encoding)
47511 return digest
47512 }
47513
47514 HashBase.prototype._digest = function () {
47515 throw new Error('_digest is not implemented')
47516 }
47517
47518 module.exports = HashBase
47519
47520 }).call(this,require("buffer").Buffer)
47521 },{"buffer":5,"inherits":121,"stream":28}],114:[function(require,module,exports){
47522 var hash = exports;
47523
47524 hash.utils = require('./hash/utils');
47525 hash.common = require('./hash/common');
47526 hash.sha = require('./hash/sha');
47527 hash.ripemd = require('./hash/ripemd');
47528 hash.hmac = require('./hash/hmac');
47529
47530 // Proxy hash functions to the main object
47531 hash.sha1 = hash.sha.sha1;
47532 hash.sha256 = hash.sha.sha256;
47533 hash.sha224 = hash.sha.sha224;
47534 hash.sha384 = hash.sha.sha384;
47535 hash.sha512 = hash.sha.sha512;
47536 hash.ripemd160 = hash.ripemd.ripemd160;
47537
47538 },{"./hash/common":115,"./hash/hmac":116,"./hash/ripemd":117,"./hash/sha":118,"./hash/utils":119}],115:[function(require,module,exports){
47539 var hash = require('../hash');
47540 var utils = hash.utils;
47541 var assert = utils.assert;
47542
47543 function BlockHash() {
47544 this.pending = null;
47545 this.pendingTotal = 0;
47546 this.blockSize = this.constructor.blockSize;
47547 this.outSize = this.constructor.outSize;
47548 this.hmacStrength = this.constructor.hmacStrength;
47549 this.padLength = this.constructor.padLength / 8;
47550 this.endian = 'big';
47551
47552 this._delta8 = this.blockSize / 8;
47553 this._delta32 = this.blockSize / 32;
47554 }
47555 exports.BlockHash = BlockHash;
47556
47557 BlockHash.prototype.update = function update(msg, enc) {
47558 // Convert message to array, pad it, and join into 32bit blocks
47559 msg = utils.toArray(msg, enc);
47560 if (!this.pending)
47561 this.pending = msg;
47562 else
47563 this.pending = this.pending.concat(msg);
47564 this.pendingTotal += msg.length;
47565
47566 // Enough data, try updating
47567 if (this.pending.length >= this._delta8) {
47568 msg = this.pending;
47569
47570 // Process pending data in blocks
47571 var r = msg.length % this._delta8;
47572 this.pending = msg.slice(msg.length - r, msg.length);
47573 if (this.pending.length === 0)
47574 this.pending = null;
47575
47576 msg = utils.join32(msg, 0, msg.length - r, this.endian);
47577 for (var i = 0; i < msg.length; i += this._delta32)
47578 this._update(msg, i, i + this._delta32);
47579 }
47580
47581 return this;
47582 };
47583
47584 BlockHash.prototype.digest = function digest(enc) {
47585 this.update(this._pad());
47586 assert(this.pending === null);
47587
47588 return this._digest(enc);
47589 };
47590
47591 BlockHash.prototype._pad = function pad() {
47592 var len = this.pendingTotal;
47593 var bytes = this._delta8;
47594 var k = bytes - ((len + this.padLength) % bytes);
47595 var res = new Array(k + this.padLength);
47596 res[0] = 0x80;
47597 for (var i = 1; i < k; i++)
47598 res[i] = 0;
47599
47600 // Append length
47601 len <<= 3;
47602 if (this.endian === 'big') {
47603 for (var t = 8; t < this.padLength; t++)
47604 res[i++] = 0;
47605
47606 res[i++] = 0;
47607 res[i++] = 0;
47608 res[i++] = 0;
47609 res[i++] = 0;
47610 res[i++] = (len >>> 24) & 0xff;
47611 res[i++] = (len >>> 16) & 0xff;
47612 res[i++] = (len >>> 8) & 0xff;
47613 res[i++] = len & 0xff;
47614 } else {
47615 res[i++] = len & 0xff;
47616 res[i++] = (len >>> 8) & 0xff;
47617 res[i++] = (len >>> 16) & 0xff;
47618 res[i++] = (len >>> 24) & 0xff;
47619 res[i++] = 0;
47620 res[i++] = 0;
47621 res[i++] = 0;
47622 res[i++] = 0;
47623
47624 for (var t = 8; t < this.padLength; t++)
47625 res[i++] = 0;
47626 }
47627
47628 return res;
47629 };
47630
47631 },{"../hash":114}],116:[function(require,module,exports){
47632 var hmac = exports;
47633
47634 var hash = require('../hash');
47635 var utils = hash.utils;
47636 var assert = utils.assert;
47637
47638 function Hmac(hash, key, enc) {
47639 if (!(this instanceof Hmac))
47640 return new Hmac(hash, key, enc);
47641 this.Hash = hash;
47642 this.blockSize = hash.blockSize / 8;
47643 this.outSize = hash.outSize / 8;
47644 this.inner = null;
47645 this.outer = null;
47646
47647 this._init(utils.toArray(key, enc));
47648 }
47649 module.exports = Hmac;
47650
47651 Hmac.prototype._init = function init(key) {
47652 // Shorten key, if needed
47653 if (key.length > this.blockSize)
47654 key = new this.Hash().update(key).digest();
47655 assert(key.length <= this.blockSize);
47656
47657 // Add padding to key
47658 for (var i = key.length; i < this.blockSize; i++)
47659 key.push(0);
47660
47661 for (var i = 0; i < key.length; i++)
47662 key[i] ^= 0x36;
47663 this.inner = new this.Hash().update(key);
47664
47665 // 0x36 ^ 0x5c = 0x6a
47666 for (var i = 0; i < key.length; i++)
47667 key[i] ^= 0x6a;
47668 this.outer = new this.Hash().update(key);
47669 };
47670
47671 Hmac.prototype.update = function update(msg, enc) {
47672 this.inner.update(msg, enc);
47673 return this;
47674 };
47675
47676 Hmac.prototype.digest = function digest(enc) {
47677 this.outer.update(this.inner.digest());
47678 return this.outer.digest(enc);
47679 };
47680
47681 },{"../hash":114}],117:[function(require,module,exports){
47682 var hash = require('../hash');
47683 var utils = hash.utils;
47684
47685 var rotl32 = utils.rotl32;
47686 var sum32 = utils.sum32;
47687 var sum32_3 = utils.sum32_3;
47688 var sum32_4 = utils.sum32_4;
47689 var BlockHash = hash.common.BlockHash;
47690
47691 function RIPEMD160() {
47692 if (!(this instanceof RIPEMD160))
47693 return new RIPEMD160();
47694
47695 BlockHash.call(this);
47696
47697 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
47698 this.endian = 'little';
47699 }
47700 utils.inherits(RIPEMD160, BlockHash);
47701 exports.ripemd160 = RIPEMD160;
47702
47703 RIPEMD160.blockSize = 512;
47704 RIPEMD160.outSize = 160;
47705 RIPEMD160.hmacStrength = 192;
47706 RIPEMD160.padLength = 64;
47707
47708 RIPEMD160.prototype._update = function update(msg, start) {
47709 var A = this.h[0];
47710 var B = this.h[1];
47711 var C = this.h[2];
47712 var D = this.h[3];
47713 var E = this.h[4];
47714 var Ah = A;
47715 var Bh = B;
47716 var Ch = C;
47717 var Dh = D;
47718 var Eh = E;
47719 for (var j = 0; j < 80; j++) {
47720 var T = sum32(
47721 rotl32(
47722 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
47723 s[j]),
47724 E);
47725 A = E;
47726 E = D;
47727 D = rotl32(C, 10);
47728 C = B;
47729 B = T;
47730 T = sum32(
47731 rotl32(
47732 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
47733 sh[j]),
47734 Eh);
47735 Ah = Eh;
47736 Eh = Dh;
47737 Dh = rotl32(Ch, 10);
47738 Ch = Bh;
47739 Bh = T;
47740 }
47741 T = sum32_3(this.h[1], C, Dh);
47742 this.h[1] = sum32_3(this.h[2], D, Eh);
47743 this.h[2] = sum32_3(this.h[3], E, Ah);
47744 this.h[3] = sum32_3(this.h[4], A, Bh);
47745 this.h[4] = sum32_3(this.h[0], B, Ch);
47746 this.h[0] = T;
47747 };
47748
47749 RIPEMD160.prototype._digest = function digest(enc) {
47750 if (enc === 'hex')
47751 return utils.toHex32(this.h, 'little');
47752 else
47753 return utils.split32(this.h, 'little');
47754 };
47755
47756 function f(j, x, y, z) {
47757 if (j <= 15)
47758 return x ^ y ^ z;
47759 else if (j <= 31)
47760 return (x & y) | ((~x) & z);
47761 else if (j <= 47)
47762 return (x | (~y)) ^ z;
47763 else if (j <= 63)
47764 return (x & z) | (y & (~z));
47765 else
47766 return x ^ (y | (~z));
47767 }
47768
47769 function K(j) {
47770 if (j <= 15)
47771 return 0x00000000;
47772 else if (j <= 31)
47773 return 0x5a827999;
47774 else if (j <= 47)
47775 return 0x6ed9eba1;
47776 else if (j <= 63)
47777 return 0x8f1bbcdc;
47778 else
47779 return 0xa953fd4e;
47780 }
47781
47782 function Kh(j) {
47783 if (j <= 15)
47784 return 0x50a28be6;
47785 else if (j <= 31)
47786 return 0x5c4dd124;
47787 else if (j <= 47)
47788 return 0x6d703ef3;
47789 else if (j <= 63)
47790 return 0x7a6d76e9;
47791 else
47792 return 0x00000000;
47793 }
47794
47795 var r = [
47796 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
47797 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
47798 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
47799 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
47800 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
47801 ];
47802
47803 var rh = [
47804 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
47805 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
47806 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
47807 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
47808 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
47809 ];
47810
47811 var s = [
47812 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
47813 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
47814 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
47815 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
47816 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
47817 ];
47818
47819 var sh = [
47820 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
47821 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
47822 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
47823 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
47824 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
47825 ];
47826
47827 },{"../hash":114}],118:[function(require,module,exports){
47828 var hash = require('../hash');
47829 var utils = hash.utils;
47830 var assert = utils.assert;
47831
47832 var rotr32 = utils.rotr32;
47833 var rotl32 = utils.rotl32;
47834 var sum32 = utils.sum32;
47835 var sum32_4 = utils.sum32_4;
47836 var sum32_5 = utils.sum32_5;
47837 var rotr64_hi = utils.rotr64_hi;
47838 var rotr64_lo = utils.rotr64_lo;
47839 var shr64_hi = utils.shr64_hi;
47840 var shr64_lo = utils.shr64_lo;
47841 var sum64 = utils.sum64;
47842 var sum64_hi = utils.sum64_hi;
47843 var sum64_lo = utils.sum64_lo;
47844 var sum64_4_hi = utils.sum64_4_hi;
47845 var sum64_4_lo = utils.sum64_4_lo;
47846 var sum64_5_hi = utils.sum64_5_hi;
47847 var sum64_5_lo = utils.sum64_5_lo;
47848 var BlockHash = hash.common.BlockHash;
47849
47850 var sha256_K = [
47851 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
47852 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
47853 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
47854 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
47855 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
47856 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
47857 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
47858 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
47859 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
47860 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
47861 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
47862 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
47863 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
47864 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
47865 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
47866 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
47867 ];
47868
47869 var sha512_K = [
47870 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
47871 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
47872 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
47873 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
47874 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
47875 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
47876 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
47877 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
47878 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
47879 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
47880 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
47881 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
47882 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
47883 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
47884 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
47885 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
47886 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
47887 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
47888 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
47889 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
47890 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
47891 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
47892 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
47893 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
47894 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
47895 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
47896 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
47897 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
47898 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
47899 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
47900 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
47901 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
47902 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
47903 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
47904 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
47905 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
47906 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
47907 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
47908 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
47909 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
47910 ];
47911
47912 var sha1_K = [
47913 0x5A827999, 0x6ED9EBA1,
47914 0x8F1BBCDC, 0xCA62C1D6
47915 ];
47916
47917 function SHA256() {
47918 if (!(this instanceof SHA256))
47919 return new SHA256();
47920
47921 BlockHash.call(this);
47922 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
47923 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
47924 this.k = sha256_K;
47925 this.W = new Array(64);
47926 }
47927 utils.inherits(SHA256, BlockHash);
47928 exports.sha256 = SHA256;
47929
47930 SHA256.blockSize = 512;
47931 SHA256.outSize = 256;
47932 SHA256.hmacStrength = 192;
47933 SHA256.padLength = 64;
47934
47935 SHA256.prototype._update = function _update(msg, start) {
47936 var W = this.W;
47937
47938 for (var i = 0; i < 16; i++)
47939 W[i] = msg[start + i];
47940 for (; i < W.length; i++)
47941 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
47942
47943 var a = this.h[0];
47944 var b = this.h[1];
47945 var c = this.h[2];
47946 var d = this.h[3];
47947 var e = this.h[4];
47948 var f = this.h[5];
47949 var g = this.h[6];
47950 var h = this.h[7];
47951
47952 assert(this.k.length === W.length);
47953 for (var i = 0; i < W.length; i++) {
47954 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
47955 var T2 = sum32(s0_256(a), maj32(a, b, c));
47956 h = g;
47957 g = f;
47958 f = e;
47959 e = sum32(d, T1);
47960 d = c;
47961 c = b;
47962 b = a;
47963 a = sum32(T1, T2);
47964 }
47965
47966 this.h[0] = sum32(this.h[0], a);
47967 this.h[1] = sum32(this.h[1], b);
47968 this.h[2] = sum32(this.h[2], c);
47969 this.h[3] = sum32(this.h[3], d);
47970 this.h[4] = sum32(this.h[4], e);
47971 this.h[5] = sum32(this.h[5], f);
47972 this.h[6] = sum32(this.h[6], g);
47973 this.h[7] = sum32(this.h[7], h);
47974 };
47975
47976 SHA256.prototype._digest = function digest(enc) {
47977 if (enc === 'hex')
47978 return utils.toHex32(this.h, 'big');
47979 else
47980 return utils.split32(this.h, 'big');
47981 };
47982
47983 function SHA224() {
47984 if (!(this instanceof SHA224))
47985 return new SHA224();
47986
47987 SHA256.call(this);
47988 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
47989 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
47990 }
47991 utils.inherits(SHA224, SHA256);
47992 exports.sha224 = SHA224;
47993
47994 SHA224.blockSize = 512;
47995 SHA224.outSize = 224;
47996 SHA224.hmacStrength = 192;
47997 SHA224.padLength = 64;
47998
47999 SHA224.prototype._digest = function digest(enc) {
48000 // Just truncate output
48001 if (enc === 'hex')
48002 return utils.toHex32(this.h.slice(0, 7), 'big');
48003 else
48004 return utils.split32(this.h.slice(0, 7), 'big');
48005 };
48006
48007 function SHA512() {
48008 if (!(this instanceof SHA512))
48009 return new SHA512();
48010
48011 BlockHash.call(this);
48012 this.h = [ 0x6a09e667, 0xf3bcc908,
48013 0xbb67ae85, 0x84caa73b,
48014 0x3c6ef372, 0xfe94f82b,
48015 0xa54ff53a, 0x5f1d36f1,
48016 0x510e527f, 0xade682d1,
48017 0x9b05688c, 0x2b3e6c1f,
48018 0x1f83d9ab, 0xfb41bd6b,
48019 0x5be0cd19, 0x137e2179 ];
48020 this.k = sha512_K;
48021 this.W = new Array(160);
48022 }
48023 utils.inherits(SHA512, BlockHash);
48024 exports.sha512 = SHA512;
48025
48026 SHA512.blockSize = 1024;
48027 SHA512.outSize = 512;
48028 SHA512.hmacStrength = 192;
48029 SHA512.padLength = 128;
48030
48031 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
48032 var W = this.W;
48033
48034 // 32 x 32bit words
48035 for (var i = 0; i < 32; i++)
48036 W[i] = msg[start + i];
48037 for (; i < W.length; i += 2) {
48038 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
48039 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
48040 var c1_hi = W[i - 14]; // i - 7
48041 var c1_lo = W[i - 13];
48042 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
48043 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
48044 var c3_hi = W[i - 32]; // i - 16
48045 var c3_lo = W[i - 31];
48046
48047 W[i] = sum64_4_hi(c0_hi, c0_lo,
48048 c1_hi, c1_lo,
48049 c2_hi, c2_lo,
48050 c3_hi, c3_lo);
48051 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
48052 c1_hi, c1_lo,
48053 c2_hi, c2_lo,
48054 c3_hi, c3_lo);
48055 }
48056 };
48057
48058 SHA512.prototype._update = function _update(msg, start) {
48059 this._prepareBlock(msg, start);
48060
48061 var W = this.W;
48062
48063 var ah = this.h[0];
48064 var al = this.h[1];
48065 var bh = this.h[2];
48066 var bl = this.h[3];
48067 var ch = this.h[4];
48068 var cl = this.h[5];
48069 var dh = this.h[6];
48070 var dl = this.h[7];
48071 var eh = this.h[8];
48072 var el = this.h[9];
48073 var fh = this.h[10];
48074 var fl = this.h[11];
48075 var gh = this.h[12];
48076 var gl = this.h[13];
48077 var hh = this.h[14];
48078 var hl = this.h[15];
48079
48080 assert(this.k.length === W.length);
48081 for (var i = 0; i < W.length; i += 2) {
48082 var c0_hi = hh;
48083 var c0_lo = hl;
48084 var c1_hi = s1_512_hi(eh, el);
48085 var c1_lo = s1_512_lo(eh, el);
48086 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
48087 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
48088 var c3_hi = this.k[i];
48089 var c3_lo = this.k[i + 1];
48090 var c4_hi = W[i];
48091 var c4_lo = W[i + 1];
48092
48093 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
48094 c1_hi, c1_lo,
48095 c2_hi, c2_lo,
48096 c3_hi, c3_lo,
48097 c4_hi, c4_lo);
48098 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
48099 c1_hi, c1_lo,
48100 c2_hi, c2_lo,
48101 c3_hi, c3_lo,
48102 c4_hi, c4_lo);
48103
48104 var c0_hi = s0_512_hi(ah, al);
48105 var c0_lo = s0_512_lo(ah, al);
48106 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
48107 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
48108
48109 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
48110 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
48111
48112 hh = gh;
48113 hl = gl;
48114
48115 gh = fh;
48116 gl = fl;
48117
48118 fh = eh;
48119 fl = el;
48120
48121 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
48122 el = sum64_lo(dl, dl, T1_hi, T1_lo);
48123
48124 dh = ch;
48125 dl = cl;
48126
48127 ch = bh;
48128 cl = bl;
48129
48130 bh = ah;
48131 bl = al;
48132
48133 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
48134 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
48135 }
48136
48137 sum64(this.h, 0, ah, al);
48138 sum64(this.h, 2, bh, bl);
48139 sum64(this.h, 4, ch, cl);
48140 sum64(this.h, 6, dh, dl);
48141 sum64(this.h, 8, eh, el);
48142 sum64(this.h, 10, fh, fl);
48143 sum64(this.h, 12, gh, gl);
48144 sum64(this.h, 14, hh, hl);
48145 };
48146
48147 SHA512.prototype._digest = function digest(enc) {
48148 if (enc === 'hex')
48149 return utils.toHex32(this.h, 'big');
48150 else
48151 return utils.split32(this.h, 'big');
48152 };
48153
48154 function SHA384() {
48155 if (!(this instanceof SHA384))
48156 return new SHA384();
48157
48158 SHA512.call(this);
48159 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
48160 0x629a292a, 0x367cd507,
48161 0x9159015a, 0x3070dd17,
48162 0x152fecd8, 0xf70e5939,
48163 0x67332667, 0xffc00b31,
48164 0x8eb44a87, 0x68581511,
48165 0xdb0c2e0d, 0x64f98fa7,
48166 0x47b5481d, 0xbefa4fa4 ];
48167 }
48168 utils.inherits(SHA384, SHA512);
48169 exports.sha384 = SHA384;
48170
48171 SHA384.blockSize = 1024;
48172 SHA384.outSize = 384;
48173 SHA384.hmacStrength = 192;
48174 SHA384.padLength = 128;
48175
48176 SHA384.prototype._digest = function digest(enc) {
48177 if (enc === 'hex')
48178 return utils.toHex32(this.h.slice(0, 12), 'big');
48179 else
48180 return utils.split32(this.h.slice(0, 12), 'big');
48181 };
48182
48183 function SHA1() {
48184 if (!(this instanceof SHA1))
48185 return new SHA1();
48186
48187 BlockHash.call(this);
48188 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
48189 0x10325476, 0xc3d2e1f0 ];
48190 this.W = new Array(80);
48191 }
48192
48193 utils.inherits(SHA1, BlockHash);
48194 exports.sha1 = SHA1;
48195
48196 SHA1.blockSize = 512;
48197 SHA1.outSize = 160;
48198 SHA1.hmacStrength = 80;
48199 SHA1.padLength = 64;
48200
48201 SHA1.prototype._update = function _update(msg, start) {
48202 var W = this.W;
48203
48204 for (var i = 0; i < 16; i++)
48205 W[i] = msg[start + i];
48206
48207 for(; i < W.length; i++)
48208 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
48209
48210 var a = this.h[0];
48211 var b = this.h[1];
48212 var c = this.h[2];
48213 var d = this.h[3];
48214 var e = this.h[4];
48215
48216 for (var i = 0; i < W.length; i++) {
48217 var s = ~~(i / 20);
48218 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
48219 e = d;
48220 d = c;
48221 c = rotl32(b, 30);
48222 b = a;
48223 a = t;
48224 }
48225
48226 this.h[0] = sum32(this.h[0], a);
48227 this.h[1] = sum32(this.h[1], b);
48228 this.h[2] = sum32(this.h[2], c);
48229 this.h[3] = sum32(this.h[3], d);
48230 this.h[4] = sum32(this.h[4], e);
48231 };
48232
48233 SHA1.prototype._digest = function digest(enc) {
48234 if (enc === 'hex')
48235 return utils.toHex32(this.h, 'big');
48236 else
48237 return utils.split32(this.h, 'big');
48238 };
48239
48240 function ch32(x, y, z) {
48241 return (x & y) ^ ((~x) & z);
48242 }
48243
48244 function maj32(x, y, z) {
48245 return (x & y) ^ (x & z) ^ (y & z);
48246 }
48247
48248 function p32(x, y, z) {
48249 return x ^ y ^ z;
48250 }
48251
48252 function s0_256(x) {
48253 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
48254 }
48255
48256 function s1_256(x) {
48257 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
48258 }
48259
48260 function g0_256(x) {
48261 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
48262 }
48263
48264 function g1_256(x) {
48265 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
48266 }
48267
48268 function ft_1(s, x, y, z) {
48269 if (s === 0)
48270 return ch32(x, y, z);
48271 if (s === 1 || s === 3)
48272 return p32(x, y, z);
48273 if (s === 2)
48274 return maj32(x, y, z);
48275 }
48276
48277 function ch64_hi(xh, xl, yh, yl, zh, zl) {
48278 var r = (xh & yh) ^ ((~xh) & zh);
48279 if (r < 0)
48280 r += 0x100000000;
48281 return r;
48282 }
48283
48284 function ch64_lo(xh, xl, yh, yl, zh, zl) {
48285 var r = (xl & yl) ^ ((~xl) & zl);
48286 if (r < 0)
48287 r += 0x100000000;
48288 return r;
48289 }
48290
48291 function maj64_hi(xh, xl, yh, yl, zh, zl) {
48292 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
48293 if (r < 0)
48294 r += 0x100000000;
48295 return r;
48296 }
48297
48298 function maj64_lo(xh, xl, yh, yl, zh, zl) {
48299 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
48300 if (r < 0)
48301 r += 0x100000000;
48302 return r;
48303 }
48304
48305 function s0_512_hi(xh, xl) {
48306 var c0_hi = rotr64_hi(xh, xl, 28);
48307 var c1_hi = rotr64_hi(xl, xh, 2); // 34
48308 var c2_hi = rotr64_hi(xl, xh, 7); // 39
48309
48310 var r = c0_hi ^ c1_hi ^ c2_hi;
48311 if (r < 0)
48312 r += 0x100000000;
48313 return r;
48314 }
48315
48316 function s0_512_lo(xh, xl) {
48317 var c0_lo = rotr64_lo(xh, xl, 28);
48318 var c1_lo = rotr64_lo(xl, xh, 2); // 34
48319 var c2_lo = rotr64_lo(xl, xh, 7); // 39
48320
48321 var r = c0_lo ^ c1_lo ^ c2_lo;
48322 if (r < 0)
48323 r += 0x100000000;
48324 return r;
48325 }
48326
48327 function s1_512_hi(xh, xl) {
48328 var c0_hi = rotr64_hi(xh, xl, 14);
48329 var c1_hi = rotr64_hi(xh, xl, 18);
48330 var c2_hi = rotr64_hi(xl, xh, 9); // 41
48331
48332 var r = c0_hi ^ c1_hi ^ c2_hi;
48333 if (r < 0)
48334 r += 0x100000000;
48335 return r;
48336 }
48337
48338 function s1_512_lo(xh, xl) {
48339 var c0_lo = rotr64_lo(xh, xl, 14);
48340 var c1_lo = rotr64_lo(xh, xl, 18);
48341 var c2_lo = rotr64_lo(xl, xh, 9); // 41
48342
48343 var r = c0_lo ^ c1_lo ^ c2_lo;
48344 if (r < 0)
48345 r += 0x100000000;
48346 return r;
48347 }
48348
48349 function g0_512_hi(xh, xl) {
48350 var c0_hi = rotr64_hi(xh, xl, 1);
48351 var c1_hi = rotr64_hi(xh, xl, 8);
48352 var c2_hi = shr64_hi(xh, xl, 7);
48353
48354 var r = c0_hi ^ c1_hi ^ c2_hi;
48355 if (r < 0)
48356 r += 0x100000000;
48357 return r;
48358 }
48359
48360 function g0_512_lo(xh, xl) {
48361 var c0_lo = rotr64_lo(xh, xl, 1);
48362 var c1_lo = rotr64_lo(xh, xl, 8);
48363 var c2_lo = shr64_lo(xh, xl, 7);
48364
48365 var r = c0_lo ^ c1_lo ^ c2_lo;
48366 if (r < 0)
48367 r += 0x100000000;
48368 return r;
48369 }
48370
48371 function g1_512_hi(xh, xl) {
48372 var c0_hi = rotr64_hi(xh, xl, 19);
48373 var c1_hi = rotr64_hi(xl, xh, 29); // 61
48374 var c2_hi = shr64_hi(xh, xl, 6);
48375
48376 var r = c0_hi ^ c1_hi ^ c2_hi;
48377 if (r < 0)
48378 r += 0x100000000;
48379 return r;
48380 }
48381
48382 function g1_512_lo(xh, xl) {
48383 var c0_lo = rotr64_lo(xh, xl, 19);
48384 var c1_lo = rotr64_lo(xl, xh, 29); // 61
48385 var c2_lo = shr64_lo(xh, xl, 6);
48386
48387 var r = c0_lo ^ c1_lo ^ c2_lo;
48388 if (r < 0)
48389 r += 0x100000000;
48390 return r;
48391 }
48392
48393 },{"../hash":114}],119:[function(require,module,exports){
48394 var utils = exports;
48395 var inherits = require('inherits');
48396
48397 function toArray(msg, enc) {
48398 if (Array.isArray(msg))
48399 return msg.slice();
48400 if (!msg)
48401 return [];
48402 var res = [];
48403 if (typeof msg === 'string') {
48404 if (!enc) {
48405 for (var i = 0; i < msg.length; i++) {
48406 var c = msg.charCodeAt(i);
48407 var hi = c >> 8;
48408 var lo = c & 0xff;
48409 if (hi)
48410 res.push(hi, lo);
48411 else
48412 res.push(lo);
48413 }
48414 } else if (enc === 'hex') {
48415 msg = msg.replace(/[^a-z0-9]+/ig, '');
48416 if (msg.length % 2 !== 0)
48417 msg = '0' + msg;
48418 for (var i = 0; i < msg.length; i += 2)
48419 res.push(parseInt(msg[i] + msg[i + 1], 16));
48420 }
48421 } else {
48422 for (var i = 0; i < msg.length; i++)
48423 res[i] = msg[i] | 0;
48424 }
48425 return res;
48426 }
48427 utils.toArray = toArray;
48428
48429 function toHex(msg) {
48430 var res = '';
48431 for (var i = 0; i < msg.length; i++)
48432 res += zero2(msg[i].toString(16));
48433 return res;
48434 }
48435 utils.toHex = toHex;
48436
48437 function htonl(w) {
48438 var res = (w >>> 24) |
48439 ((w >>> 8) & 0xff00) |
48440 ((w << 8) & 0xff0000) |
48441 ((w & 0xff) << 24);
48442 return res >>> 0;
48443 }
48444 utils.htonl = htonl;
48445
48446 function toHex32(msg, endian) {
48447 var res = '';
48448 for (var i = 0; i < msg.length; i++) {
48449 var w = msg[i];
48450 if (endian === 'little')
48451 w = htonl(w);
48452 res += zero8(w.toString(16));
48453 }
48454 return res;
48455 }
48456 utils.toHex32 = toHex32;
48457
48458 function zero2(word) {
48459 if (word.length === 1)
48460 return '0' + word;
48461 else
48462 return word;
48463 }
48464 utils.zero2 = zero2;
48465
48466 function zero8(word) {
48467 if (word.length === 7)
48468 return '0' + word;
48469 else if (word.length === 6)
48470 return '00' + word;
48471 else if (word.length === 5)
48472 return '000' + word;
48473 else if (word.length === 4)
48474 return '0000' + word;
48475 else if (word.length === 3)
48476 return '00000' + word;
48477 else if (word.length === 2)
48478 return '000000' + word;
48479 else if (word.length === 1)
48480 return '0000000' + word;
48481 else
48482 return word;
48483 }
48484 utils.zero8 = zero8;
48485
48486 function join32(msg, start, end, endian) {
48487 var len = end - start;
48488 assert(len % 4 === 0);
48489 var res = new Array(len / 4);
48490 for (var i = 0, k = start; i < res.length; i++, k += 4) {
48491 var w;
48492 if (endian === 'big')
48493 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
48494 else
48495 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
48496 res[i] = w >>> 0;
48497 }
48498 return res;
48499 }
48500 utils.join32 = join32;
48501
48502 function split32(msg, endian) {
48503 var res = new Array(msg.length * 4);
48504 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
48505 var m = msg[i];
48506 if (endian === 'big') {
48507 res[k] = m >>> 24;
48508 res[k + 1] = (m >>> 16) & 0xff;
48509 res[k + 2] = (m >>> 8) & 0xff;
48510 res[k + 3] = m & 0xff;
48511 } else {
48512 res[k + 3] = m >>> 24;
48513 res[k + 2] = (m >>> 16) & 0xff;
48514 res[k + 1] = (m >>> 8) & 0xff;
48515 res[k] = m & 0xff;
48516 }
48517 }
48518 return res;
48519 }
48520 utils.split32 = split32;
48521
48522 function rotr32(w, b) {
48523 return (w >>> b) | (w << (32 - b));
48524 }
48525 utils.rotr32 = rotr32;
48526
48527 function rotl32(w, b) {
48528 return (w << b) | (w >>> (32 - b));
48529 }
48530 utils.rotl32 = rotl32;
48531
48532 function sum32(a, b) {
48533 return (a + b) >>> 0;
48534 }
48535 utils.sum32 = sum32;
48536
48537 function sum32_3(a, b, c) {
48538 return (a + b + c) >>> 0;
48539 }
48540 utils.sum32_3 = sum32_3;
48541
48542 function sum32_4(a, b, c, d) {
48543 return (a + b + c + d) >>> 0;
48544 }
48545 utils.sum32_4 = sum32_4;
48546
48547 function sum32_5(a, b, c, d, e) {
48548 return (a + b + c + d + e) >>> 0;
48549 }
48550 utils.sum32_5 = sum32_5;
48551
48552 function assert(cond, msg) {
48553 if (!cond)
48554 throw new Error(msg || 'Assertion failed');
48555 }
48556 utils.assert = assert;
48557
48558 utils.inherits = inherits;
48559
48560 function sum64(buf, pos, ah, al) {
48561 var bh = buf[pos];
48562 var bl = buf[pos + 1];
48563
48564 var lo = (al + bl) >>> 0;
48565 var hi = (lo < al ? 1 : 0) + ah + bh;
48566 buf[pos] = hi >>> 0;
48567 buf[pos + 1] = lo;
48568 }
48569 exports.sum64 = sum64;
48570
48571 function sum64_hi(ah, al, bh, bl) {
48572 var lo = (al + bl) >>> 0;
48573 var hi = (lo < al ? 1 : 0) + ah + bh;
48574 return hi >>> 0;
48575 };
48576 exports.sum64_hi = sum64_hi;
48577
48578 function sum64_lo(ah, al, bh, bl) {
48579 var lo = al + bl;
48580 return lo >>> 0;
48581 };
48582 exports.sum64_lo = sum64_lo;
48583
48584 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
48585 var carry = 0;
48586 var lo = al;
48587 lo = (lo + bl) >>> 0;
48588 carry += lo < al ? 1 : 0;
48589 lo = (lo + cl) >>> 0;
48590 carry += lo < cl ? 1 : 0;
48591 lo = (lo + dl) >>> 0;
48592 carry += lo < dl ? 1 : 0;
48593
48594 var hi = ah + bh + ch + dh + carry;
48595 return hi >>> 0;
48596 };
48597 exports.sum64_4_hi = sum64_4_hi;
48598
48599 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
48600 var lo = al + bl + cl + dl;
48601 return lo >>> 0;
48602 };
48603 exports.sum64_4_lo = sum64_4_lo;
48604
48605 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
48606 var carry = 0;
48607 var lo = al;
48608 lo = (lo + bl) >>> 0;
48609 carry += lo < al ? 1 : 0;
48610 lo = (lo + cl) >>> 0;
48611 carry += lo < cl ? 1 : 0;
48612 lo = (lo + dl) >>> 0;
48613 carry += lo < dl ? 1 : 0;
48614 lo = (lo + el) >>> 0;
48615 carry += lo < el ? 1 : 0;
48616
48617 var hi = ah + bh + ch + dh + eh + carry;
48618 return hi >>> 0;
48619 };
48620 exports.sum64_5_hi = sum64_5_hi;
48621
48622 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
48623 var lo = al + bl + cl + dl + el;
48624
48625 return lo >>> 0;
48626 };
48627 exports.sum64_5_lo = sum64_5_lo;
48628
48629 function rotr64_hi(ah, al, num) {
48630 var r = (al << (32 - num)) | (ah >>> num);
48631 return r >>> 0;
48632 };
48633 exports.rotr64_hi = rotr64_hi;
48634
48635 function rotr64_lo(ah, al, num) {
48636 var r = (ah << (32 - num)) | (al >>> num);
48637 return r >>> 0;
48638 };
48639 exports.rotr64_lo = rotr64_lo;
48640
48641 function shr64_hi(ah, al, num) {
48642 return ah >>> num;
48643 };
48644 exports.shr64_hi = shr64_hi;
48645
48646 function shr64_lo(ah, al, num) {
48647 var r = (ah << (32 - num)) | (al >>> num);
48648 return r >>> 0;
48649 };
48650 exports.shr64_lo = shr64_lo;
48651
48652 },{"inherits":121}],120:[function(require,module,exports){
48653 'use strict';
48654
48655 var hash = require('hash.js');
48656 var utils = require('minimalistic-crypto-utils');
48657 var assert = require('minimalistic-assert');
48658
48659 function HmacDRBG(options) {
48660 if (!(this instanceof HmacDRBG))
48661 return new HmacDRBG(options);
48662 this.hash = options.hash;
48663 this.predResist = !!options.predResist;
48664
48665 this.outLen = this.hash.outSize;
48666 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
48667
48668 this._reseed = null;
48669 this.reseedInterval = null;
48670 this.K = null;
48671 this.V = null;
48672
48673 var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');
48674 var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');
48675 var pers = utils.toArray(options.pers, options.persEnc || 'hex');
48676 assert(entropy.length >= (this.minEntropy / 8),
48677 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
48678 this._init(entropy, nonce, pers);
48679 }
48680 module.exports = HmacDRBG;
48681
48682 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
48683 var seed = entropy.concat(nonce).concat(pers);
48684
48685 this.K = new Array(this.outLen / 8);
48686 this.V = new Array(this.outLen / 8);
48687 for (var i = 0; i < this.V.length; i++) {
48688 this.K[i] = 0x00;
48689 this.V[i] = 0x01;
48690 }
48691
48692 this._update(seed);
48693 this._reseed = 1;
48694 this.reseedInterval = 0x1000000000000; // 2^48
48695 };
48696
48697 HmacDRBG.prototype._hmac = function hmac() {
48698 return new hash.hmac(this.hash, this.K);
48699 };
48700
48701 HmacDRBG.prototype._update = function update(seed) {
48702 var kmac = this._hmac()
48703 .update(this.V)
48704 .update([ 0x00 ]);
48705 if (seed)
48706 kmac = kmac.update(seed);
48707 this.K = kmac.digest();
48708 this.V = this._hmac().update(this.V).digest();
48709 if (!seed)
48710 return;
48711
48712 this.K = this._hmac()
48713 .update(this.V)
48714 .update([ 0x01 ])
48715 .update(seed)
48716 .digest();
48717 this.V = this._hmac().update(this.V).digest();
48718 };
48719
48720 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
48721 // Optional entropy enc
48722 if (typeof entropyEnc !== 'string') {
48723 addEnc = add;
48724 add = entropyEnc;
48725 entropyEnc = null;
48726 }
48727
48728 entropy = utils.toArray(entropy, entropyEnc);
48729 add = utils.toArray(add, addEnc);
48730
48731 assert(entropy.length >= (this.minEntropy / 8),
48732 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
48733
48734 this._update(entropy.concat(add || []));
48735 this._reseed = 1;
48736 };
48737
48738 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
48739 if (this._reseed > this.reseedInterval)
48740 throw new Error('Reseed is required');
48741
48742 // Optional encoding
48743 if (typeof enc !== 'string') {
48744 addEnc = add;
48745 add = enc;
48746 enc = null;
48747 }
48748
48749 // Optional additional data
48750 if (add) {
48751 add = utils.toArray(add, addEnc || 'hex');
48752 this._update(add);
48753 }
48754
48755 var temp = [];
48756 while (temp.length < len) {
48757 this.V = this._hmac().update(this.V).digest();
48758 temp = temp.concat(this.V);
48759 }
48760
48761 var res = temp.slice(0, len);
48762 this._update(add);
48763 this._reseed++;
48764 return utils.encode(res, enc);
48765 };
48766
48767 },{"hash.js":114,"minimalistic-assert":123,"minimalistic-crypto-utils":124}],121:[function(require,module,exports){
48768 arguments[4][9][0].apply(exports,arguments)
48769 },{"dup":9}],122:[function(require,module,exports){
48770 (function (Buffer){
48771 // constant-space merkle root calculation algorithm
48772 module.exports = function fastRoot (values, digestFn) {
48773 if (!Array.isArray(values)) throw TypeError('Expected values Array')
48774 if (typeof digestFn !== 'function') throw TypeError('Expected digest Function')
48775
48776 var length = values.length
48777 var results = values.concat()
48778
48779 while (length > 1) {
48780 var j = 0
48781
48782 for (var i = 0; i < length; i += 2, ++j) {
48783 var left = results[i]
48784 var right = i + 1 === length ? left : results[i + 1]
48785 var data = Buffer.concat([left, right])
48786
48787 results[j] = digestFn(data)
48788 }
48789
48790 length = j
48791 }
48792
48793 return results[0]
48794 }
48795
48796 }).call(this,require("buffer").Buffer)
48797 },{"buffer":5}],123:[function(require,module,exports){
48798 module.exports = assert;
48799
48800 function assert(val, msg) {
48801 if (!val)
48802 throw new Error(msg || 'Assertion failed');
48803 }
48804
48805 assert.equal = function assertEqual(l, r, msg) {
48806 if (l != r)
48807 throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
48808 };
48809
48810 },{}],124:[function(require,module,exports){
48811 'use strict';
48812
48813 var utils = exports;
48814
48815 function toArray(msg, enc) {
48816 if (Array.isArray(msg))
48817 return msg.slice();
48818 if (!msg)
48819 return [];
48820 var res = [];
48821 if (typeof msg !== 'string') {
48822 for (var i = 0; i < msg.length; i++)
48823 res[i] = msg[i] | 0;
48824 return res;
48825 }
48826 if (enc === 'hex') {
48827 msg = msg.replace(/[^a-z0-9]+/ig, '');
48828 if (msg.length % 2 !== 0)
48829 msg = '0' + msg;
48830 for (var i = 0; i < msg.length; i += 2)
48831 res.push(parseInt(msg[i] + msg[i + 1], 16));
48832 } else {
48833 for (var i = 0; i < msg.length; i++) {
48834 var c = msg.charCodeAt(i);
48835 var hi = c >> 8;
48836 var lo = c & 0xff;
48837 if (hi)
48838 res.push(hi, lo);
48839 else
48840 res.push(lo);
48841 }
48842 }
48843 return res;
48844 }
48845 utils.toArray = toArray;
48846
48847 function zero2(word) {
48848 if (word.length === 1)
48849 return '0' + word;
48850 else
48851 return word;
48852 }
48853 utils.zero2 = zero2;
48854
48855 function toHex(msg) {
48856 var res = '';
48857 for (var i = 0; i < msg.length; i++)
48858 res += zero2(msg[i].toString(16));
48859 return res;
48860 }
48861 utils.toHex = toHex;
48862
48863 utils.encode = function encode(arr, enc) {
48864 if (enc === 'hex')
48865 return toHex(arr);
48866 else
48867 return arr;
48868 };
48869
48870 },{}],125:[function(require,module,exports){
48871 var OPS = require('bitcoin-ops')
48872
48873 function encodingLength (i) {
48874 return i < OPS.OP_PUSHDATA1 ? 1
48875 : i <= 0xff ? 2
48876 : i <= 0xffff ? 3
48877 : 5
48878 }
48879
48880 function encode (buffer, number, offset) {
48881 var size = encodingLength(number)
48882
48883 // ~6 bit
48884 if (size === 1) {
48885 buffer.writeUInt8(number, offset)
48886
48887 // 8 bit
48888 } else if (size === 2) {
48889 buffer.writeUInt8(OPS.OP_PUSHDATA1, offset)
48890 buffer.writeUInt8(number, offset + 1)
48891
48892 // 16 bit
48893 } else if (size === 3) {
48894 buffer.writeUInt8(OPS.OP_PUSHDATA2, offset)
48895 buffer.writeUInt16LE(number, offset + 1)
48896
48897 // 32 bit
48898 } else {
48899 buffer.writeUInt8(OPS.OP_PUSHDATA4, offset)
48900 buffer.writeUInt32LE(number, offset + 1)
48901 }
48902
48903 return size
48904 }
48905
48906 function decode (buffer, offset) {
48907 var opcode = buffer.readUInt8(offset)
48908 var number, size
48909
48910 // ~6 bit
48911 if (opcode < OPS.OP_PUSHDATA1) {
48912 number = opcode
48913 size = 1
48914
48915 // 8 bit
48916 } else if (opcode === OPS.OP_PUSHDATA1) {
48917 if (offset + 2 > buffer.length) return null
48918 number = buffer.readUInt8(offset + 1)
48919 size = 2
48920
48921 // 16 bit
48922 } else if (opcode === OPS.OP_PUSHDATA2) {
48923 if (offset + 3 > buffer.length) return null
48924 number = buffer.readUInt16LE(offset + 1)
48925 size = 3
48926
48927 // 32 bit
48928 } else {
48929 if (offset + 5 > buffer.length) return null
48930 if (opcode !== OPS.OP_PUSHDATA4) throw new Error('Unexpected opcode')
48931
48932 number = buffer.readUInt32LE(offset + 1)
48933 size = 5
48934 }
48935
48936 return {
48937 opcode: opcode,
48938 number: number,
48939 size: size
48940 }
48941 }
48942
48943 module.exports = {
48944 encodingLength: encodingLength,
48945 encode: encode,
48946 decode: decode
48947 }
48948
48949 },{"bitcoin-ops":42}],126:[function(require,module,exports){
48950 (function (process,global){
48951 'use strict'
48952
48953 function oldBrowser () {
48954 throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
48955 }
48956
48957 var Buffer = require('safe-buffer').Buffer
48958 var crypto = global.crypto || global.msCrypto
48959
48960 if (crypto && crypto.getRandomValues) {
48961 module.exports = randomBytes
48962 } else {
48963 module.exports = oldBrowser
48964 }
48965
48966 function randomBytes (size, cb) {
48967 // phantomjs needs to throw
48968 if (size > 65536) throw new Error('requested too many random bytes')
48969 // in case browserify isn't using the Uint8Array version
48970 var rawBytes = new global.Uint8Array(size)
48971
48972 // This will not work in older browsers.
48973 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
48974 if (size > 0) { // getRandomValues fails on IE if size == 0
48975 crypto.getRandomValues(rawBytes)
48976 }
48977
48978 // XXX: phantomjs doesn't like a buffer being passed here
48979 var bytes = Buffer.from(rawBytes.buffer)
48980
48981 if (typeof cb === 'function') {
48982 return process.nextTick(function () {
48983 cb(null, bytes)
48984 })
48985 }
48986
48987 return bytes
48988 }
48989
48990 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
48991 },{"_process":13,"safe-buffer":128}],127:[function(require,module,exports){
48992 (function (Buffer){
48993 'use strict'
48994 var inherits = require('inherits')
48995 var HashBase = require('hash-base')
48996
48997 function RIPEMD160 () {
48998 HashBase.call(this, 64)
48999
49000 // state
49001 this._a = 0x67452301
49002 this._b = 0xefcdab89
49003 this._c = 0x98badcfe
49004 this._d = 0x10325476
49005 this._e = 0xc3d2e1f0
49006 }
49007
49008 inherits(RIPEMD160, HashBase)
49009
49010 RIPEMD160.prototype._update = function () {
49011 var m = new Array(16)
49012 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
49013
49014 var al = this._a
49015 var bl = this._b
49016 var cl = this._c
49017 var dl = this._d
49018 var el = this._e
49019
49020 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
49021 // K = 0x00000000
49022 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
49023 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
49024 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
49025 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
49026 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
49027 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
49028 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
49029 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
49030 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
49031 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
49032 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
49033 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
49034 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
49035 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
49036 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
49037 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
49038 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
49039
49040 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
49041 // K = 0x5a827999
49042 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
49043 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
49044 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
49045 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
49046 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
49047 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
49048 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
49049 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
49050 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
49051 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
49052 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
49053 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
49054 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
49055 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
49056 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
49057 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
49058 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
49059
49060 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
49061 // K = 0x6ed9eba1
49062 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
49063 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
49064 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
49065 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
49066 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
49067 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
49068 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
49069 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
49070 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
49071 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
49072 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
49073 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
49074 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
49075 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
49076 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
49077 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
49078 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
49079
49080 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
49081 // K = 0x8f1bbcdc
49082 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
49083 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
49084 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
49085 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
49086 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
49087 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
49088 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
49089 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
49090 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
49091 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
49092 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
49093 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
49094 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
49095 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
49096 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
49097 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
49098 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
49099
49100 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
49101 // K = 0xa953fd4e
49102 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
49103 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
49104 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
49105 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
49106 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
49107 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
49108 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
49109 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
49110 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
49111 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
49112 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
49113 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
49114 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
49115 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
49116 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
49117 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
49118 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
49119
49120 var ar = this._a
49121 var br = this._b
49122 var cr = this._c
49123 var dr = this._d
49124 var er = this._e
49125
49126 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
49127 // K' = 0x50a28be6
49128 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
49129 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
49130 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
49131 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
49132 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
49133 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
49134 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
49135 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
49136 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
49137 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
49138 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
49139 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
49140 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
49141 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
49142 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
49143 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
49144 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
49145
49146 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
49147 // K' = 0x5c4dd124
49148 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
49149 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
49150 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
49151 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
49152 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
49153 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
49154 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
49155 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
49156 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
49157 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
49158 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
49159 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
49160 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
49161 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
49162 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
49163 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
49164 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
49165
49166 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
49167 // K' = 0x6d703ef3
49168 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
49169 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
49170 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
49171 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
49172 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
49173 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
49174 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
49175 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
49176 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
49177 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
49178 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
49179 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
49180 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
49181 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
49182 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
49183 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
49184 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
49185
49186 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
49187 // K' = 0x7a6d76e9
49188 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
49189 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
49190 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
49191 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
49192 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
49193 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
49194 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
49195 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
49196 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
49197 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
49198 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
49199 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
49200 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
49201 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
49202 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
49203 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
49204 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
49205
49206 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
49207 // K' = 0x00000000
49208 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
49209 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
49210 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
49211 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
49212 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
49213 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
49214 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
49215 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
49216 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
49217 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
49218 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
49219 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
49220 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
49221 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
49222 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
49223 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
49224 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
49225
49226 // change state
49227 var t = (this._b + cl + dr) | 0
49228 this._b = (this._c + dl + er) | 0
49229 this._c = (this._d + el + ar) | 0
49230 this._d = (this._e + al + br) | 0
49231 this._e = (this._a + bl + cr) | 0
49232 this._a = t
49233 }
49234
49235 RIPEMD160.prototype._digest = function () {
49236 // create padding and handle blocks
49237 this._block[this._blockOffset++] = 0x80
49238 if (this._blockOffset > 56) {
49239 this._block.fill(0, this._blockOffset, 64)
49240 this._update()
49241 this._blockOffset = 0
49242 }
49243
49244 this._block.fill(0, this._blockOffset, 56)
49245 this._block.writeUInt32LE(this._length[0], 56)
49246 this._block.writeUInt32LE(this._length[1], 60)
49247 this._update()
49248
49249 // produce result
49250 var buffer = new Buffer(20)
49251 buffer.writeInt32LE(this._a, 0)
49252 buffer.writeInt32LE(this._b, 4)
49253 buffer.writeInt32LE(this._c, 8)
49254 buffer.writeInt32LE(this._d, 12)
49255 buffer.writeInt32LE(this._e, 16)
49256 return buffer
49257 }
49258
49259 function rotl (x, n) {
49260 return (x << n) | (x >>> (32 - n))
49261 }
49262
49263 function fn1 (a, b, c, d, e, m, k, s) {
49264 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
49265 }
49266
49267 function fn2 (a, b, c, d, e, m, k, s) {
49268 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
49269 }
49270
49271 function fn3 (a, b, c, d, e, m, k, s) {
49272 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
49273 }
49274
49275 function fn4 (a, b, c, d, e, m, k, s) {
49276 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
49277 }
49278
49279 function fn5 (a, b, c, d, e, m, k, s) {
49280 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
49281 }
49282
49283 module.exports = RIPEMD160
49284
49285 }).call(this,require("buffer").Buffer)
49286 },{"buffer":5,"hash-base":113,"inherits":121}],128:[function(require,module,exports){
49287 /* eslint-disable node/no-deprecated-api */
49288 var buffer = require('buffer')
49289 var Buffer = buffer.Buffer
49290
49291 // alternative to using Object.keys for old browsers
49292 function copyProps (src, dst) {
49293 for (var key in src) {
49294 dst[key] = src[key]
49295 }
49296 }
49297 if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
49298 module.exports = buffer
49299 } else {
49300 // Copy properties from require('buffer')
49301 copyProps(buffer, exports)
49302 exports.Buffer = SafeBuffer
49303 }
49304
49305 function SafeBuffer (arg, encodingOrOffset, length) {
49306 return Buffer(arg, encodingOrOffset, length)
49307 }
49308
49309 // Copy static methods from Buffer
49310 copyProps(Buffer, SafeBuffer)
49311
49312 SafeBuffer.from = function (arg, encodingOrOffset, length) {
49313 if (typeof arg === 'number') {
49314 throw new TypeError('Argument must not be a number')
49315 }
49316 return Buffer(arg, encodingOrOffset, length)
49317 }
49318
49319 SafeBuffer.alloc = function (size, fill, encoding) {
49320 if (typeof size !== 'number') {
49321 throw new TypeError('Argument must be a number')
49322 }
49323 var buf = Buffer(size)
49324 if (fill !== undefined) {
49325 if (typeof encoding === 'string') {
49326 buf.fill(fill, encoding)
49327 } else {
49328 buf.fill(fill)
49329 }
49330 } else {
49331 buf.fill(0)
49332 }
49333 return buf
49334 }
49335
49336 SafeBuffer.allocUnsafe = function (size) {
49337 if (typeof size !== 'number') {
49338 throw new TypeError('Argument must be a number')
49339 }
49340 return Buffer(size)
49341 }
49342
49343 SafeBuffer.allocUnsafeSlow = function (size) {
49344 if (typeof size !== 'number') {
49345 throw new TypeError('Argument must be a number')
49346 }
49347 return buffer.SlowBuffer(size)
49348 }
49349
49350 },{"buffer":5}],129:[function(require,module,exports){
49351 var Buffer = require('safe-buffer').Buffer
49352
49353 // prototype class for hash functions
49354 function Hash (blockSize, finalSize) {
49355 this._block = Buffer.alloc(blockSize)
49356 this._finalSize = finalSize
49357 this._blockSize = blockSize
49358 this._len = 0
49359 }
49360
49361 Hash.prototype.update = function (data, enc) {
49362 if (typeof data === 'string') {
49363 enc = enc || 'utf8'
49364 data = Buffer.from(data, enc)
49365 }
49366
49367 var block = this._block
49368 var blockSize = this._blockSize
49369 var length = data.length
49370 var accum = this._len
49371
49372 for (var offset = 0; offset < length;) {
49373 var assigned = accum % blockSize
49374 var remainder = Math.min(length - offset, blockSize - assigned)
49375
49376 for (var i = 0; i < remainder; i++) {
49377 block[assigned + i] = data[offset + i]
49378 }
49379
49380 accum += remainder
49381 offset += remainder
49382
49383 if ((accum % blockSize) === 0) {
49384 this._update(block)
49385 }
49386 }
49387
49388 this._len += length
49389 return this
49390 }
49391
49392 Hash.prototype.digest = function (enc) {
49393 var rem = this._len % this._blockSize
49394
49395 this._block[rem] = 0x80
49396
49397 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
49398 // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
49399 this._block.fill(0, rem + 1)
49400
49401 if (rem >= this._finalSize) {
49402 this._update(this._block)
49403 this._block.fill(0)
49404 }
49405
49406 var bits = this._len * 8
49407
49408 // uint32
49409 if (bits <= 0xffffffff) {
49410 this._block.writeUInt32BE(bits, this._blockSize - 4)
49411
49412 // uint64
49413 } else {
49414 var lowBits = bits & 0xffffffff
49415 var highBits = (bits - lowBits) / 0x100000000
49416
49417 this._block.writeUInt32BE(highBits, this._blockSize - 8)
49418 this._block.writeUInt32BE(lowBits, this._blockSize - 4)
49419 }
49420
49421 this._update(this._block)
49422 var hash = this._hash()
49423
49424 return enc ? hash.toString(enc) : hash
49425 }
49426
49427 Hash.prototype._update = function () {
49428 throw new Error('_update must be implemented by subclass')
49429 }
49430
49431 module.exports = Hash
49432
49433 },{"safe-buffer":128}],130:[function(require,module,exports){
49434 var exports = module.exports = function SHA (algorithm) {
49435 algorithm = algorithm.toLowerCase()
49436
49437 var Algorithm = exports[algorithm]
49438 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
49439
49440 return new Algorithm()
49441 }
49442
49443 exports.sha = require('./sha')
49444 exports.sha1 = require('./sha1')
49445 exports.sha224 = require('./sha224')
49446 exports.sha256 = require('./sha256')
49447 exports.sha384 = require('./sha384')
49448 exports.sha512 = require('./sha512')
49449
49450 },{"./sha":131,"./sha1":132,"./sha224":133,"./sha256":134,"./sha384":135,"./sha512":136}],131:[function(require,module,exports){
49451 /*
49452 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
49453 * in FIPS PUB 180-1
49454 * This source code is derived from sha1.js of the same repository.
49455 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
49456 * operation was added.
49457 */
49458
49459 var inherits = require('inherits')
49460 var Hash = require('./hash')
49461 var Buffer = require('safe-buffer').Buffer
49462
49463 var K = [
49464 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
49465 ]
49466
49467 var W = new Array(80)
49468
49469 function Sha () {
49470 this.init()
49471 this._w = W
49472
49473 Hash.call(this, 64, 56)
49474 }
49475
49476 inherits(Sha, Hash)
49477
49478 Sha.prototype.init = function () {
49479 this._a = 0x67452301
49480 this._b = 0xefcdab89
49481 this._c = 0x98badcfe
49482 this._d = 0x10325476
49483 this._e = 0xc3d2e1f0
49484
49485 return this
49486 }
49487
49488 function rotl5 (num) {
49489 return (num << 5) | (num >>> 27)
49490 }
49491
49492 function rotl30 (num) {
49493 return (num << 30) | (num >>> 2)
49494 }
49495
49496 function ft (s, b, c, d) {
49497 if (s === 0) return (b & c) | ((~b) & d)
49498 if (s === 2) return (b & c) | (b & d) | (c & d)
49499 return b ^ c ^ d
49500 }
49501
49502 Sha.prototype._update = function (M) {
49503 var W = this._w
49504
49505 var a = this._a | 0
49506 var b = this._b | 0
49507 var c = this._c | 0
49508 var d = this._d | 0
49509 var e = this._e | 0
49510
49511 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
49512 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
49513
49514 for (var j = 0; j < 80; ++j) {
49515 var s = ~~(j / 20)
49516 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
49517
49518 e = d
49519 d = c
49520 c = rotl30(b)
49521 b = a
49522 a = t
49523 }
49524
49525 this._a = (a + this._a) | 0
49526 this._b = (b + this._b) | 0
49527 this._c = (c + this._c) | 0
49528 this._d = (d + this._d) | 0
49529 this._e = (e + this._e) | 0
49530 }
49531
49532 Sha.prototype._hash = function () {
49533 var H = Buffer.allocUnsafe(20)
49534
49535 H.writeInt32BE(this._a | 0, 0)
49536 H.writeInt32BE(this._b | 0, 4)
49537 H.writeInt32BE(this._c | 0, 8)
49538 H.writeInt32BE(this._d | 0, 12)
49539 H.writeInt32BE(this._e | 0, 16)
49540
49541 return H
49542 }
49543
49544 module.exports = Sha
49545
49546 },{"./hash":129,"inherits":121,"safe-buffer":128}],132:[function(require,module,exports){
49547 /*
49548 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
49549 * in FIPS PUB 180-1
49550 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
49551 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
49552 * Distributed under the BSD License
49553 * See http://pajhome.org.uk/crypt/md5 for details.
49554 */
49555
49556 var inherits = require('inherits')
49557 var Hash = require('./hash')
49558 var Buffer = require('safe-buffer').Buffer
49559
49560 var K = [
49561 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
49562 ]
49563
49564 var W = new Array(80)
49565
49566 function Sha1 () {
49567 this.init()
49568 this._w = W
49569
49570 Hash.call(this, 64, 56)
49571 }
49572
49573 inherits(Sha1, Hash)
49574
49575 Sha1.prototype.init = function () {
49576 this._a = 0x67452301
49577 this._b = 0xefcdab89
49578 this._c = 0x98badcfe
49579 this._d = 0x10325476
49580 this._e = 0xc3d2e1f0
49581
49582 return this
49583 }
49584
49585 function rotl1 (num) {
49586 return (num << 1) | (num >>> 31)
49587 }
49588
49589 function rotl5 (num) {
49590 return (num << 5) | (num >>> 27)
49591 }
49592
49593 function rotl30 (num) {
49594 return (num << 30) | (num >>> 2)
49595 }
49596
49597 function ft (s, b, c, d) {
49598 if (s === 0) return (b & c) | ((~b) & d)
49599 if (s === 2) return (b & c) | (b & d) | (c & d)
49600 return b ^ c ^ d
49601 }
49602
49603 Sha1.prototype._update = function (M) {
49604 var W = this._w
49605
49606 var a = this._a | 0
49607 var b = this._b | 0
49608 var c = this._c | 0
49609 var d = this._d | 0
49610 var e = this._e | 0
49611
49612 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
49613 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
49614
49615 for (var j = 0; j < 80; ++j) {
49616 var s = ~~(j / 20)
49617 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
49618
49619 e = d
49620 d = c
49621 c = rotl30(b)
49622 b = a
49623 a = t
49624 }
49625
49626 this._a = (a + this._a) | 0
49627 this._b = (b + this._b) | 0
49628 this._c = (c + this._c) | 0
49629 this._d = (d + this._d) | 0
49630 this._e = (e + this._e) | 0
49631 }
49632
49633 Sha1.prototype._hash = function () {
49634 var H = Buffer.allocUnsafe(20)
49635
49636 H.writeInt32BE(this._a | 0, 0)
49637 H.writeInt32BE(this._b | 0, 4)
49638 H.writeInt32BE(this._c | 0, 8)
49639 H.writeInt32BE(this._d | 0, 12)
49640 H.writeInt32BE(this._e | 0, 16)
49641
49642 return H
49643 }
49644
49645 module.exports = Sha1
49646
49647 },{"./hash":129,"inherits":121,"safe-buffer":128}],133:[function(require,module,exports){
49648 /**
49649 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
49650 * in FIPS 180-2
49651 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
49652 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
49653 *
49654 */
49655
49656 var inherits = require('inherits')
49657 var Sha256 = require('./sha256')
49658 var Hash = require('./hash')
49659 var Buffer = require('safe-buffer').Buffer
49660
49661 var W = new Array(64)
49662
49663 function Sha224 () {
49664 this.init()
49665
49666 this._w = W // new Array(64)
49667
49668 Hash.call(this, 64, 56)
49669 }
49670
49671 inherits(Sha224, Sha256)
49672
49673 Sha224.prototype.init = function () {
49674 this._a = 0xc1059ed8
49675 this._b = 0x367cd507
49676 this._c = 0x3070dd17
49677 this._d = 0xf70e5939
49678 this._e = 0xffc00b31
49679 this._f = 0x68581511
49680 this._g = 0x64f98fa7
49681 this._h = 0xbefa4fa4
49682
49683 return this
49684 }
49685
49686 Sha224.prototype._hash = function () {
49687 var H = Buffer.allocUnsafe(28)
49688
49689 H.writeInt32BE(this._a, 0)
49690 H.writeInt32BE(this._b, 4)
49691 H.writeInt32BE(this._c, 8)
49692 H.writeInt32BE(this._d, 12)
49693 H.writeInt32BE(this._e, 16)
49694 H.writeInt32BE(this._f, 20)
49695 H.writeInt32BE(this._g, 24)
49696
49697 return H
49698 }
49699
49700 module.exports = Sha224
49701
49702 },{"./hash":129,"./sha256":134,"inherits":121,"safe-buffer":128}],134:[function(require,module,exports){
49703 /**
49704 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
49705 * in FIPS 180-2
49706 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
49707 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
49708 *
49709 */
49710
49711 var inherits = require('inherits')
49712 var Hash = require('./hash')
49713 var Buffer = require('safe-buffer').Buffer
49714
49715 var K = [
49716 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
49717 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
49718 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
49719 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
49720 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
49721 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
49722 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
49723 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
49724 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
49725 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
49726 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
49727 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
49728 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
49729 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
49730 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
49731 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
49732 ]
49733
49734 var W = new Array(64)
49735
49736 function Sha256 () {
49737 this.init()
49738
49739 this._w = W // new Array(64)
49740
49741 Hash.call(this, 64, 56)
49742 }
49743
49744 inherits(Sha256, Hash)
49745
49746 Sha256.prototype.init = function () {
49747 this._a = 0x6a09e667
49748 this._b = 0xbb67ae85
49749 this._c = 0x3c6ef372
49750 this._d = 0xa54ff53a
49751 this._e = 0x510e527f
49752 this._f = 0x9b05688c
49753 this._g = 0x1f83d9ab
49754 this._h = 0x5be0cd19
49755
49756 return this
49757 }
49758
49759 function ch (x, y, z) {
49760 return z ^ (x & (y ^ z))
49761 }
49762
49763 function maj (x, y, z) {
49764 return (x & y) | (z & (x | y))
49765 }
49766
49767 function sigma0 (x) {
49768 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
49769 }
49770
49771 function sigma1 (x) {
49772 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
49773 }
49774
49775 function gamma0 (x) {
49776 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
49777 }
49778
49779 function gamma1 (x) {
49780 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
49781 }
49782
49783 Sha256.prototype._update = function (M) {
49784 var W = this._w
49785
49786 var a = this._a | 0
49787 var b = this._b | 0
49788 var c = this._c | 0
49789 var d = this._d | 0
49790 var e = this._e | 0
49791 var f = this._f | 0
49792 var g = this._g | 0
49793 var h = this._h | 0
49794
49795 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
49796 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
49797
49798 for (var j = 0; j < 64; ++j) {
49799 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
49800 var T2 = (sigma0(a) + maj(a, b, c)) | 0
49801
49802 h = g
49803 g = f
49804 f = e
49805 e = (d + T1) | 0
49806 d = c
49807 c = b
49808 b = a
49809 a = (T1 + T2) | 0
49810 }
49811
49812 this._a = (a + this._a) | 0
49813 this._b = (b + this._b) | 0
49814 this._c = (c + this._c) | 0
49815 this._d = (d + this._d) | 0
49816 this._e = (e + this._e) | 0
49817 this._f = (f + this._f) | 0
49818 this._g = (g + this._g) | 0
49819 this._h = (h + this._h) | 0
49820 }
49821
49822 Sha256.prototype._hash = function () {
49823 var H = Buffer.allocUnsafe(32)
49824
49825 H.writeInt32BE(this._a, 0)
49826 H.writeInt32BE(this._b, 4)
49827 H.writeInt32BE(this._c, 8)
49828 H.writeInt32BE(this._d, 12)
49829 H.writeInt32BE(this._e, 16)
49830 H.writeInt32BE(this._f, 20)
49831 H.writeInt32BE(this._g, 24)
49832 H.writeInt32BE(this._h, 28)
49833
49834 return H
49835 }
49836
49837 module.exports = Sha256
49838
49839 },{"./hash":129,"inherits":121,"safe-buffer":128}],135:[function(require,module,exports){
49840 var inherits = require('inherits')
49841 var SHA512 = require('./sha512')
49842 var Hash = require('./hash')
49843 var Buffer = require('safe-buffer').Buffer
49844
49845 var W = new Array(160)
49846
49847 function Sha384 () {
49848 this.init()
49849 this._w = W
49850
49851 Hash.call(this, 128, 112)
49852 }
49853
49854 inherits(Sha384, SHA512)
49855
49856 Sha384.prototype.init = function () {
49857 this._ah = 0xcbbb9d5d
49858 this._bh = 0x629a292a
49859 this._ch = 0x9159015a
49860 this._dh = 0x152fecd8
49861 this._eh = 0x67332667
49862 this._fh = 0x8eb44a87
49863 this._gh = 0xdb0c2e0d
49864 this._hh = 0x47b5481d
49865
49866 this._al = 0xc1059ed8
49867 this._bl = 0x367cd507
49868 this._cl = 0x3070dd17
49869 this._dl = 0xf70e5939
49870 this._el = 0xffc00b31
49871 this._fl = 0x68581511
49872 this._gl = 0x64f98fa7
49873 this._hl = 0xbefa4fa4
49874
49875 return this
49876 }
49877
49878 Sha384.prototype._hash = function () {
49879 var H = Buffer.allocUnsafe(48)
49880
49881 function writeInt64BE (h, l, offset) {
49882 H.writeInt32BE(h, offset)
49883 H.writeInt32BE(l, offset + 4)
49884 }
49885
49886 writeInt64BE(this._ah, this._al, 0)
49887 writeInt64BE(this._bh, this._bl, 8)
49888 writeInt64BE(this._ch, this._cl, 16)
49889 writeInt64BE(this._dh, this._dl, 24)
49890 writeInt64BE(this._eh, this._el, 32)
49891 writeInt64BE(this._fh, this._fl, 40)
49892
49893 return H
49894 }
49895
49896 module.exports = Sha384
49897
49898 },{"./hash":129,"./sha512":136,"inherits":121,"safe-buffer":128}],136:[function(require,module,exports){
49899 var inherits = require('inherits')
49900 var Hash = require('./hash')
49901 var Buffer = require('safe-buffer').Buffer
49902
49903 var K = [
49904 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
49905 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
49906 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
49907 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
49908 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
49909 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
49910 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
49911 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
49912 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
49913 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
49914 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
49915 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
49916 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
49917 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
49918 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
49919 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
49920 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
49921 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
49922 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
49923 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
49924 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
49925 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
49926 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
49927 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
49928 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
49929 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
49930 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
49931 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
49932 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
49933 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
49934 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
49935 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
49936 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
49937 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
49938 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
49939 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
49940 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
49941 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
49942 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
49943 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
49944 ]
49945
49946 var W = new Array(160)
49947
49948 function Sha512 () {
49949 this.init()
49950 this._w = W
49951
49952 Hash.call(this, 128, 112)
49953 }
49954
49955 inherits(Sha512, Hash)
49956
49957 Sha512.prototype.init = function () {
49958 this._ah = 0x6a09e667
49959 this._bh = 0xbb67ae85
49960 this._ch = 0x3c6ef372
49961 this._dh = 0xa54ff53a
49962 this._eh = 0x510e527f
49963 this._fh = 0x9b05688c
49964 this._gh = 0x1f83d9ab
49965 this._hh = 0x5be0cd19
49966
49967 this._al = 0xf3bcc908
49968 this._bl = 0x84caa73b
49969 this._cl = 0xfe94f82b
49970 this._dl = 0x5f1d36f1
49971 this._el = 0xade682d1
49972 this._fl = 0x2b3e6c1f
49973 this._gl = 0xfb41bd6b
49974 this._hl = 0x137e2179
49975
49976 return this
49977 }
49978
49979 function Ch (x, y, z) {
49980 return z ^ (x & (y ^ z))
49981 }
49982
49983 function maj (x, y, z) {
49984 return (x & y) | (z & (x | y))
49985 }
49986
49987 function sigma0 (x, xl) {
49988 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
49989 }
49990
49991 function sigma1 (x, xl) {
49992 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
49993 }
49994
49995 function Gamma0 (x, xl) {
49996 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
49997 }
49998
49999 function Gamma0l (x, xl) {
50000 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
50001 }
50002
50003 function Gamma1 (x, xl) {
50004 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
50005 }
50006
50007 function Gamma1l (x, xl) {
50008 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
50009 }
50010
50011 function getCarry (a, b) {
50012 return (a >>> 0) < (b >>> 0) ? 1 : 0
50013 }
50014
50015 Sha512.prototype._update = function (M) {
50016 var W = this._w
50017
50018 var ah = this._ah | 0
50019 var bh = this._bh | 0
50020 var ch = this._ch | 0
50021 var dh = this._dh | 0
50022 var eh = this._eh | 0
50023 var fh = this._fh | 0
50024 var gh = this._gh | 0
50025 var hh = this._hh | 0
50026
50027 var al = this._al | 0
50028 var bl = this._bl | 0
50029 var cl = this._cl | 0
50030 var dl = this._dl | 0
50031 var el = this._el | 0
50032 var fl = this._fl | 0
50033 var gl = this._gl | 0
50034 var hl = this._hl | 0
50035
50036 for (var i = 0; i < 32; i += 2) {
50037 W[i] = M.readInt32BE(i * 4)
50038 W[i + 1] = M.readInt32BE(i * 4 + 4)
50039 }
50040 for (; i < 160; i += 2) {
50041 var xh = W[i - 15 * 2]
50042 var xl = W[i - 15 * 2 + 1]
50043 var gamma0 = Gamma0(xh, xl)
50044 var gamma0l = Gamma0l(xl, xh)
50045
50046 xh = W[i - 2 * 2]
50047 xl = W[i - 2 * 2 + 1]
50048 var gamma1 = Gamma1(xh, xl)
50049 var gamma1l = Gamma1l(xl, xh)
50050
50051 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
50052 var Wi7h = W[i - 7 * 2]
50053 var Wi7l = W[i - 7 * 2 + 1]
50054
50055 var Wi16h = W[i - 16 * 2]
50056 var Wi16l = W[i - 16 * 2 + 1]
50057
50058 var Wil = (gamma0l + Wi7l) | 0
50059 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
50060 Wil = (Wil + gamma1l) | 0
50061 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
50062 Wil = (Wil + Wi16l) | 0
50063 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
50064
50065 W[i] = Wih
50066 W[i + 1] = Wil
50067 }
50068
50069 for (var j = 0; j < 160; j += 2) {
50070 Wih = W[j]
50071 Wil = W[j + 1]
50072
50073 var majh = maj(ah, bh, ch)
50074 var majl = maj(al, bl, cl)
50075
50076 var sigma0h = sigma0(ah, al)
50077 var sigma0l = sigma0(al, ah)
50078 var sigma1h = sigma1(eh, el)
50079 var sigma1l = sigma1(el, eh)
50080
50081 // t1 = h + sigma1 + ch + K[j] + W[j]
50082 var Kih = K[j]
50083 var Kil = K[j + 1]
50084
50085 var chh = Ch(eh, fh, gh)
50086 var chl = Ch(el, fl, gl)
50087
50088 var t1l = (hl + sigma1l) | 0
50089 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
50090 t1l = (t1l + chl) | 0
50091 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
50092 t1l = (t1l + Kil) | 0
50093 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
50094 t1l = (t1l + Wil) | 0
50095 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
50096
50097 // t2 = sigma0 + maj
50098 var t2l = (sigma0l + majl) | 0
50099 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
50100
50101 hh = gh
50102 hl = gl
50103 gh = fh
50104 gl = fl
50105 fh = eh
50106 fl = el
50107 el = (dl + t1l) | 0
50108 eh = (dh + t1h + getCarry(el, dl)) | 0
50109 dh = ch
50110 dl = cl
50111 ch = bh
50112 cl = bl
50113 bh = ah
50114 bl = al
50115 al = (t1l + t2l) | 0
50116 ah = (t1h + t2h + getCarry(al, t1l)) | 0
50117 }
50118
50119 this._al = (this._al + al) | 0
50120 this._bl = (this._bl + bl) | 0
50121 this._cl = (this._cl + cl) | 0
50122 this._dl = (this._dl + dl) | 0
50123 this._el = (this._el + el) | 0
50124 this._fl = (this._fl + fl) | 0
50125 this._gl = (this._gl + gl) | 0
50126 this._hl = (this._hl + hl) | 0
50127
50128 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
50129 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
50130 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
50131 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
50132 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
50133 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
50134 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
50135 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
50136 }
50137
50138 Sha512.prototype._hash = function () {
50139 var H = Buffer.allocUnsafe(64)
50140
50141 function writeInt64BE (h, l, offset) {
50142 H.writeInt32BE(h, offset)
50143 H.writeInt32BE(l, offset + 4)
50144 }
50145
50146 writeInt64BE(this._ah, this._al, 0)
50147 writeInt64BE(this._bh, this._bl, 8)
50148 writeInt64BE(this._ch, this._cl, 16)
50149 writeInt64BE(this._dh, this._dl, 24)
50150 writeInt64BE(this._eh, this._el, 32)
50151 writeInt64BE(this._fh, this._fl, 40)
50152 writeInt64BE(this._gh, this._gl, 48)
50153 writeInt64BE(this._hh, this._hl, 56)
50154
50155 return H
50156 }
50157
50158 module.exports = Sha512
50159
50160 },{"./hash":129,"inherits":121,"safe-buffer":128}],137:[function(require,module,exports){
50161 var native = require('./native')
50162
50163 function getTypeName (fn) {
50164 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1]
50165 }
50166
50167 function getValueTypeName (value) {
50168 return native.Nil(value) ? '' : getTypeName(value.constructor)
50169 }
50170
50171 function getValue (value) {
50172 if (native.Function(value)) return ''
50173 if (native.String(value)) return JSON.stringify(value)
50174 if (value && native.Object(value)) return ''
50175 return value
50176 }
50177
50178 function tfJSON (type) {
50179 if (native.Function(type)) return type.toJSON ? type.toJSON() : getTypeName(type)
50180 if (native.Array(type)) return 'Array'
50181 if (type && native.Object(type)) return 'Object'
50182
50183 return type !== undefined ? type : ''
50184 }
50185
50186 function tfErrorString (type, value, valueTypeName) {
50187 var valueJson = getValue(value)
50188
50189 return 'Expected ' + tfJSON(type) + ', got' +
50190 (valueTypeName !== '' ? ' ' + valueTypeName : '') +
50191 (valueJson !== '' ? ' ' + valueJson : '')
50192 }
50193
50194 function TfTypeError (type, value, valueTypeName) {
50195 valueTypeName = valueTypeName || getValueTypeName(value)
50196 this.message = tfErrorString(type, value, valueTypeName)
50197
50198 Error.captureStackTrace(this, TfTypeError)
50199 this.__type = type
50200 this.__value = value
50201 this.__valueTypeName = valueTypeName
50202 }
50203
50204 TfTypeError.prototype = Object.create(Error.prototype)
50205 TfTypeError.prototype.constructor = TfTypeError
50206
50207 function tfPropertyErrorString (type, label, name, value, valueTypeName) {
50208 var description = '" of type '
50209 if (label === 'key') description = '" with key type '
50210
50211 return tfErrorString('property "' + tfJSON(name) + description + tfJSON(type), value, valueTypeName)
50212 }
50213
50214 function TfPropertyTypeError (type, property, label, value, valueTypeName) {
50215 if (type) {
50216 valueTypeName = valueTypeName || getValueTypeName(value)
50217 this.message = tfPropertyErrorString(type, label, property, value, valueTypeName)
50218 } else {
50219 this.message = 'Unexpected property "' + property + '"'
50220 }
50221
50222 Error.captureStackTrace(this, TfTypeError)
50223 this.__label = label
50224 this.__property = property
50225 this.__type = type
50226 this.__value = value
50227 this.__valueTypeName = valueTypeName
50228 }
50229
50230 TfPropertyTypeError.prototype = Object.create(Error.prototype)
50231 TfPropertyTypeError.prototype.constructor = TfTypeError
50232
50233 function tfCustomError (expected, actual) {
50234 return new TfTypeError(expected, {}, actual)
50235 }
50236
50237 function tfSubError (e, property, label) {
50238 // sub child?
50239 if (e instanceof TfPropertyTypeError) {
50240 property = property + '.' + e.__property
50241
50242 e = new TfPropertyTypeError(
50243 e.__type, property, e.__label, e.__value, e.__valueTypeName
50244 )
50245
50246 // child?
50247 } else if (e instanceof TfTypeError) {
50248 e = new TfPropertyTypeError(
50249 e.__type, property, label, e.__value, e.__valueTypeName
50250 )
50251 }
50252
50253 Error.captureStackTrace(e)
50254 return e
50255 }
50256
50257 module.exports = {
50258 TfTypeError: TfTypeError,
50259 TfPropertyTypeError: TfPropertyTypeError,
50260 tfCustomError: tfCustomError,
50261 tfSubError: tfSubError,
50262 tfJSON: tfJSON,
50263 getValueTypeName: getValueTypeName
50264 }
50265
50266 },{"./native":140}],138:[function(require,module,exports){
50267 (function (Buffer){
50268 var NATIVE = require('./native')
50269 var ERRORS = require('./errors')
50270
50271 function _Buffer (value) {
50272 return Buffer.isBuffer(value)
50273 }
50274
50275 function Hex (value) {
50276 return typeof value === 'string' && /^([0-9a-f]{2})+$/i.test(value)
50277 }
50278
50279 function _LengthN (type, length) {
50280 var name = type.toJSON()
50281
50282 function Length (value) {
50283 if (!type(value)) return false
50284 if (value.length === length) return true
50285
50286 throw ERRORS.tfCustomError(name + '(Length: ' + length + ')', name + '(Length: ' + value.length + ')')
50287 }
50288 Length.toJSON = function () { return name }
50289
50290 return Length
50291 }
50292
50293 var _ArrayN = _LengthN.bind(null, NATIVE.Array)
50294 var _BufferN = _LengthN.bind(null, _Buffer)
50295 var _HexN = _LengthN.bind(null, Hex)
50296 var _StringN = _LengthN.bind(null, NATIVE.String)
50297
50298 var UINT53_MAX = Math.pow(2, 53) - 1
50299
50300 function Finite (value) {
50301 return typeof value === 'number' && isFinite(value)
50302 }
50303 function Int8 (value) { return ((value << 24) >> 24) === value }
50304 function Int16 (value) { return ((value << 16) >> 16) === value }
50305 function Int32 (value) { return (value | 0) === value }
50306 function UInt8 (value) { return (value & 0xff) === value }
50307 function UInt16 (value) { return (value & 0xffff) === value }
50308 function UInt32 (value) { return (value >>> 0) === value }
50309 function UInt53 (value) {
50310 return typeof value === 'number' &&
50311 value >= 0 &&
50312 value <= UINT53_MAX &&
50313 Math.floor(value) === value
50314 }
50315
50316 var types = {
50317 ArrayN: _ArrayN,
50318 Buffer: _Buffer,
50319 BufferN: _BufferN,
50320 Finite: Finite,
50321 Hex: Hex,
50322 HexN: _HexN,
50323 Int8: Int8,
50324 Int16: Int16,
50325 Int32: Int32,
50326 StringN: _StringN,
50327 UInt8: UInt8,
50328 UInt16: UInt16,
50329 UInt32: UInt32,
50330 UInt53: UInt53
50331 }
50332
50333 for (var typeName in types) {
50334 types[typeName].toJSON = function (t) {
50335 return t
50336 }.bind(null, typeName)
50337 }
50338
50339 module.exports = types
50340
50341 }).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
50342 },{"../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10,"./errors":137,"./native":140}],139:[function(require,module,exports){
50343 var ERRORS = require('./errors')
50344 var NATIVE = require('./native')
50345
50346 // short-hand
50347 var tfJSON = ERRORS.tfJSON
50348 var TfTypeError = ERRORS.TfTypeError
50349 var TfPropertyTypeError = ERRORS.TfPropertyTypeError
50350 var tfSubError = ERRORS.tfSubError
50351 var getValueTypeName = ERRORS.getValueTypeName
50352
50353 var TYPES = {
50354 arrayOf: function arrayOf (type) {
50355 type = compile(type)
50356
50357 function _arrayOf (array, strict) {
50358 if (!NATIVE.Array(array)) return false
50359 if (NATIVE.Nil(array)) return false
50360
50361 return array.every(function (value, i) {
50362 try {
50363 return typeforce(type, value, strict)
50364 } catch (e) {
50365 throw tfSubError(e, i)
50366 }
50367 })
50368 }
50369 _arrayOf.toJSON = function () { return '[' + tfJSON(type) + ']' }
50370
50371 return _arrayOf
50372 },
50373
50374 maybe: function maybe (type) {
50375 type = compile(type)
50376
50377 function _maybe (value, strict) {
50378 return NATIVE.Nil(value) || type(value, strict, maybe)
50379 }
50380 _maybe.toJSON = function () { return '?' + tfJSON(type) }
50381
50382 return _maybe
50383 },
50384
50385 map: function map (propertyType, propertyKeyType) {
50386 propertyType = compile(propertyType)
50387 if (propertyKeyType) propertyKeyType = compile(propertyKeyType)
50388
50389 function _map (value, strict) {
50390 if (!NATIVE.Object(value)) return false
50391 if (NATIVE.Nil(value)) return false
50392
50393 for (var propertyName in value) {
50394 try {
50395 if (propertyKeyType) {
50396 typeforce(propertyKeyType, propertyName, strict)
50397 }
50398 } catch (e) {
50399 throw tfSubError(e, propertyName, 'key')
50400 }
50401
50402 try {
50403 var propertyValue = value[propertyName]
50404 typeforce(propertyType, propertyValue, strict)
50405 } catch (e) {
50406 throw tfSubError(e, propertyName)
50407 }
50408 }
50409
50410 return true
50411 }
50412
50413 if (propertyKeyType) {
50414 _map.toJSON = function () {
50415 return '{' + tfJSON(propertyKeyType) + ': ' + tfJSON(propertyType) + '}'
50416 }
50417 } else {
50418 _map.toJSON = function () { return '{' + tfJSON(propertyType) + '}' }
50419 }
50420
50421 return _map
50422 },
50423
50424 object: function object (uncompiled) {
50425 var type = {}
50426
50427 for (var typePropertyName in uncompiled) {
50428 type[typePropertyName] = compile(uncompiled[typePropertyName])
50429 }
50430
50431 function _object (value, strict) {
50432 if (!NATIVE.Object(value)) return false
50433 if (NATIVE.Nil(value)) return false
50434
50435 var propertyName
50436
50437 try {
50438 for (propertyName in type) {
50439 var propertyType = type[propertyName]
50440 var propertyValue = value[propertyName]
50441
50442 typeforce(propertyType, propertyValue, strict)
50443 }
50444 } catch (e) {
50445 throw tfSubError(e, propertyName)
50446 }
50447
50448 if (strict) {
50449 for (propertyName in value) {
50450 if (type[propertyName]) continue
50451
50452 throw new TfPropertyTypeError(undefined, propertyName)
50453 }
50454 }
50455
50456 return true
50457 }
50458 _object.toJSON = function () { return tfJSON(type) }
50459
50460 return _object
50461 },
50462
50463 oneOf: function oneOf () {
50464 var types = [].slice.call(arguments).map(compile)
50465
50466 function _oneOf (value, strict) {
50467 return types.some(function (type) {
50468 try {
50469 return typeforce(type, value, strict)
50470 } catch (e) {
50471 return false
50472 }
50473 })
50474 }
50475 _oneOf.toJSON = function () { return types.map(tfJSON).join('|') }
50476
50477 return _oneOf
50478 },
50479
50480 quacksLike: function quacksLike (type) {
50481 function _quacksLike (value) {
50482 return type === getValueTypeName(value)
50483 }
50484 _quacksLike.toJSON = function () { return type }
50485
50486 return _quacksLike
50487 },
50488
50489 tuple: function tuple () {
50490 var types = [].slice.call(arguments).map(compile)
50491
50492 function _tuple (values, strict) {
50493 if (NATIVE.Nil(values)) return false
50494 if (NATIVE.Nil(values.length)) return false
50495 if (strict && (values.length !== types.length)) return false
50496
50497 return types.every(function (type, i) {
50498 try {
50499 return typeforce(type, values[i], strict)
50500 } catch (e) {
50501 throw tfSubError(e, i)
50502 }
50503 })
50504 }
50505 _tuple.toJSON = function () { return '(' + types.map(tfJSON).join(', ') + ')' }
50506
50507 return _tuple
50508 },
50509
50510 value: function value (expected) {
50511 function _value (actual) {
50512 return actual === expected
50513 }
50514 _value.toJSON = function () { return expected }
50515
50516 return _value
50517 }
50518 }
50519
50520 function compile (type) {
50521 if (NATIVE.String(type)) {
50522 if (type[0] === '?') return TYPES.maybe(type.slice(1))
50523
50524 return NATIVE[type] || TYPES.quacksLike(type)
50525 } else if (type && NATIVE.Object(type)) {
50526 if (NATIVE.Array(type)) return TYPES.arrayOf(type[0])
50527
50528 return TYPES.object(type)
50529 } else if (NATIVE.Function(type)) {
50530 return type
50531 }
50532
50533 return TYPES.value(type)
50534 }
50535
50536 function typeforce (type, value, strict, surrogate) {
50537 if (NATIVE.Function(type)) {
50538 if (type(value, strict)) return true
50539
50540 throw new TfTypeError(surrogate || type, value)
50541 }
50542
50543 // JIT
50544 return typeforce(compile(type), value, strict)
50545 }
50546
50547 // assign types to typeforce function
50548 for (var typeName in NATIVE) {
50549 typeforce[typeName] = NATIVE[typeName]
50550 }
50551
50552 for (typeName in TYPES) {
50553 typeforce[typeName] = TYPES[typeName]
50554 }
50555
50556 var EXTRA = require('./extra')
50557 for (typeName in EXTRA) {
50558 typeforce[typeName] = EXTRA[typeName]
50559 }
50560
50561 // async wrapper
50562 function __async (type, value, strict, callback) {
50563 // default to falsy strict if using shorthand overload
50564 if (typeof strict === 'function') return __async(type, value, false, strict)
50565
50566 try {
50567 typeforce(type, value, strict)
50568 } catch (e) {
50569 return callback(e)
50570 }
50571
50572 callback()
50573 }
50574
50575 typeforce.async = __async
50576 typeforce.compile = compile
50577 typeforce.TfTypeError = TfTypeError
50578 typeforce.TfPropertyTypeError = TfPropertyTypeError
50579
50580 module.exports = typeforce
50581
50582 },{"./errors":137,"./extra":138,"./native":140}],140:[function(require,module,exports){
50583 var types = {
50584 Array: function (value) { return value !== null && value !== undefined && value.constructor === Array },
50585 Boolean: function (value) { return typeof value === 'boolean' },
50586 Function: function (value) { return typeof value === 'function' },
50587 Nil: function (value) { return value === undefined || value === null },
50588 Number: function (value) { return typeof value === 'number' },
50589 Object: function (value) { return typeof value === 'object' },
50590 String: function (value) { return typeof value === 'string' },
50591 '': function () { return true }
50592 }
50593
50594 // TODO: deprecate
50595 types.Null = types.Nil
50596
50597 for (var typeName in types) {
50598 types[typeName].toJSON = function (t) {
50599 return t
50600 }.bind(null, typeName)
50601 }
50602
50603 module.exports = types
50604
50605 },{}],141:[function(require,module,exports){
50606 (function (Buffer){
50607 'use strict'
50608
50609 // Number.MAX_SAFE_INTEGER
50610 var MAX_SAFE_INTEGER = 9007199254740991
50611
50612 function checkUInt53 (n) {
50613 if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range')
50614 }
50615
50616 function encode (number, buffer, offset) {
50617 checkUInt53(number)
50618
50619 if (!buffer) buffer = new Buffer(encodingLength(number))
50620 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
50621 if (!offset) offset = 0
50622
50623 // 8 bit
50624 if (number < 0xfd) {
50625 buffer.writeUInt8(number, offset)
50626 encode.bytes = 1
50627
50628 // 16 bit
50629 } else if (number <= 0xffff) {
50630 buffer.writeUInt8(0xfd, offset)
50631 buffer.writeUInt16LE(number, offset + 1)
50632 encode.bytes = 3
50633
50634 // 32 bit
50635 } else if (number <= 0xffffffff) {
50636 buffer.writeUInt8(0xfe, offset)
50637 buffer.writeUInt32LE(number, offset + 1)
50638 encode.bytes = 5
50639
50640 // 64 bit
50641 } else {
50642 buffer.writeUInt8(0xff, offset)
50643 buffer.writeUInt32LE(number >>> 0, offset + 1)
50644 buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5)
50645 encode.bytes = 9
50646 }
50647
50648 return buffer
50649 }
50650
50651 function decode (buffer, offset) {
50652 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
50653 if (!offset) offset = 0
50654
50655 var first = buffer.readUInt8(offset)
50656
50657 // 8 bit
50658 if (first < 0xfd) {
50659 decode.bytes = 1
50660 return first
50661
50662 // 16 bit
50663 } else if (first === 0xfd) {
50664 decode.bytes = 3
50665 return buffer.readUInt16LE(offset + 1)
50666
50667 // 32 bit
50668 } else if (first === 0xfe) {
50669 decode.bytes = 5
50670 return buffer.readUInt32LE(offset + 1)
50671
50672 // 64 bit
50673 } else {
50674 decode.bytes = 9
50675 var lo = buffer.readUInt32LE(offset + 1)
50676 var hi = buffer.readUInt32LE(offset + 5)
50677 var number = hi * 0x0100000000 + lo
50678 checkUInt53(number)
50679
50680 return number
50681 }
50682 }
50683
50684 function encodingLength (number) {
50685 checkUInt53(number)
50686
50687 return (
50688 number < 0xfd ? 1
50689 : number <= 0xffff ? 3
50690 : number <= 0xffffffff ? 5
50691 : 9
50692 )
50693 }
50694
50695 module.exports = { encode: encode, decode: decode, encodingLength: encodingLength }
50696
50697 }).call(this,require("buffer").Buffer)
50698 },{"buffer":5}],142:[function(require,module,exports){
50699 (function (Buffer){
50700 var bs58check = require('bs58check')
50701
50702 function decodeRaw (buffer, version) {
50703 // check version only if defined
50704 if (version !== undefined && buffer[0] !== version) throw new Error('Invalid network version')
50705
50706 // uncompressed
50707 if (buffer.length === 33) {
50708 return {
50709 version: buffer[0],
50710 privateKey: buffer.slice(1, 33),
50711 compressed: false
50712 }
50713 }
50714
50715 // invalid length
50716 if (buffer.length !== 34) throw new Error('Invalid WIF length')
50717
50718 // invalid compression flag
50719 if (buffer[33] !== 0x01) throw new Error('Invalid compression flag')
50720
50721 return {
50722 version: buffer[0],
50723 privateKey: buffer.slice(1, 33),
50724 compressed: true
50725 }
50726 }
50727
50728 function encodeRaw (version, privateKey, compressed) {
50729 var result = new Buffer(compressed ? 34 : 33)
50730
50731 result.writeUInt8(version, 0)
50732 privateKey.copy(result, 1)
50733
50734 if (compressed) {
50735 result[33] = 0x01
50736 }
50737
50738 return result
50739 }
50740
50741 function decode (string, version) {
50742 return decodeRaw(bs58check.decode(string), version)
50743 }
50744
50745 function encode (version, privateKey, compressed) {
50746 if (typeof version === 'number') return bs58check.encode(encodeRaw(version, privateKey, compressed))
50747
50748 return bs58check.encode(
50749 encodeRaw(
50750 version.version,
50751 version.privateKey,
50752 version.compressed
50753 )
50754 )
50755 }
50756
50757 module.exports = {
50758 decode: decode,
50759 decodeRaw: decodeRaw,
50760 encode: encode,
50761 encodeRaw: encodeRaw
50762 }
50763
50764 }).call(this,require("buffer").Buffer)
50765 },{"bs58check":85,"buffer":5}]},{},[34])(34)
50766 });</script>
50767 <script>bitcoinjs.bitcoin.networks.shadow = {
50768 messagePrefix: 'unused',
50769 bip32: {
50770 public: 0xEE80286A,
50771 private: 0xEE8031E8
50772 },
50773 pubKeyHash: 0x3f,
50774 scriptHash: 0x7d,
50775 wif: 0xbf
50776 };
50777
50778 bitcoinjs.bitcoin.networks.shadowtn = {
50779 messagePrefix: 'unused',
50780 bip32: {
50781 public: 0x76C0FDFB,
50782 private: 0x76C1077A
50783 },
50784 pubKeyHash: 0x7f,
50785 scriptHash: 0xc4,
50786 wif: 0xff
50787 };
50788
50789 bitcoinjs.bitcoin.networks.clam = {
50790 messagePrefix: 'unused',
50791 bip32: {
50792 public: 0xa8c26d64,
50793 private: 0xa8c17826
50794 },
50795 pubKeyHash: 0x89,
50796 scriptHash: 0x00, // TODO set this correctly
50797 wif: 0x85
50798 };
50799
50800 bitcoinjs.bitcoin.networks.crown = {
50801 messagePrefix: 'unused',
50802 bip32: {
50803 public: 0x0488b21e,
50804 private: 0x0488ade4
50805 },
50806 pubKeyHash: 0x00,
50807 scriptHash: 0x05,
50808 wif: 0x80
50809 };
50810
50811 bitcoinjs.bitcoin.networks.dash = {
50812 messagePrefix: 'unused',
50813 bip32: {
50814 public: 0x0488b21e,
50815 private: 0x0488ade4
50816 },
50817 pubKeyHash: 0x4c,
50818 scriptHash: 0x10,
50819 wif: 0xcc
50820 };
50821
50822 bitcoinjs.bitcoin.networks.maza = {
50823 messagePrefix: 'unused',
50824 bip32: {
50825 public: 0x0488b21e,
50826 private: 0x0488ade4
50827 },
50828 pubKeyHash: 0x32,
50829 scriptHash: 0x09,
50830 wif: 0xe0
50831 };
50832
50833 bitcoinjs.bitcoin.networks.dashtn = {
50834 messagePrefix: 'unused',
50835 bip32: {
50836 public: 0x043587cf,
50837 private: 0x04358394
50838 },
50839 pubKeyHash: 0x8c,
50840 scriptHash: 0x13,
50841 wif: 0xef
50842 };
50843
50844 bitcoinjs.bitcoin.networks.game = {
50845 messagePrefix: 'unused',
50846 bip32: {
50847 public: 0x0488b21e,
50848 private: 0x0488ade4
50849 },
50850 pubKeyHash: 0x26,
50851 scriptHash: 0x05,
50852 wif: 0xa6
50853 };
50854
50855 bitcoinjs.bitcoin.networks.namecoin = {
50856 messagePrefix: 'unused',
50857 bip32: {
50858 public: 0x0488b21e,
50859 private: 0x0488ade4
50860 },
50861 pubKeyHash: 0x34,
50862 scriptHash: 0x00, // TODO set this correctly
50863 wif: 0x80
50864 };
50865
50866 bitcoinjs.bitcoin.networks.peercoin = {
50867 messagePrefix: 'unused',
50868 bip32: {
50869 public: 0x0488b21e,
50870 private: 0x0488ade4
50871 },
50872 pubKeyHash: 0x37,
50873 scriptHash: 0x00, // TODO set this correctly
50874 wif: 0xb7
50875 };
50876
50877 bitcoinjs.bitcoin.networks.axe = {
50878 messagePrefix: 'unused',
50879 bip32: {
50880 public: 0x0488b21e,
50881 private: 0x0488ade4
50882 },
50883 pubKeyHash: 0x4B,
50884 scriptHash: 0xCB, // TODO set this correctly
50885 wif: 0xCB
50886 };
50887
50888 bitcoinjs.bitcoin.networks.slimcoin = {
50889 messagePrefix: 'unused',
50890 bip32: {
50891 public: 0xef6adf10,
50892 private: 0xef69ea80
50893 },
50894 pubKeyHash: 0x3f,
50895 scriptHash: 0x7d,
50896 wif: 0x46
50897 };
50898
50899 bitcoinjs.bitcoin.networks.slimcointn = {
50900 messagePrefix: 'unused',
50901 bip32: {
50902 public: 0x043587CF,
50903 private: 0x04358394
50904 },
50905 pubKeyHash: 0x6f,
50906 scriptHash: 0xc4,
50907 wif: 0x57
50908 };
50909
50910 bitcoinjs.bitcoin.networks.denarius = {
50911 messagePrefix: '\x19Denarius Signed Message:\n',
50912 bip32: {
50913 public: 0x0488b21e,
50914 private: 0x0488ade4
50915 },
50916 pubKeyHash: 0x1e,
50917 scriptHash: 0x5a,
50918 wif: 0x9e
50919 };
50920
50921 bitcoinjs.bitcoin.networks.dogecoin = {
50922 messagePrefix: '\x19Dogecoin Signed Message:\n',
50923 bip32: {
50924 public: 0x02facafd,
50925 private: 0x02fac398
50926 },
50927 pubKeyHash: 0x1e,
50928 scriptHash: 0x16,
50929 wif: 0x9e
50930 };
50931
50932 bitcoinjs.bitcoin.networks.viacoin = {
50933 messagePrefix: '\x18Viacoin Signed Message:\n',
50934 bip32: {
50935 public: 0x0488b21e,
50936 private: 0x0488ade4
50937 },
50938 pubKeyHash: 0x47,
50939 scriptHash: 0x21,
50940 wif: 0xc7
50941 };
50942
50943 bitcoinjs.bitcoin.networks.viacointestnet = {
50944 messagePrefix: '\x18Viacoin Signed Message:\n',
50945 bip32: {
50946 public: 0x043587cf,
50947 private: 0x04358394
50948 },
50949 pubKeyHash: 0x7f,
50950 scriptHash: 0xc4,
50951 wif: 0xff
50952 };
50953
50954 bitcoinjs.bitcoin.networks.gamerscoin = {
50955 messagePrefix: '\x19Gamerscoin Signed Message:\n',
50956 bip32: {
50957 public: 0x019da462,
50958 private: 0x019d9cfe
50959 },
50960 pubKeyHash: 0x26,
50961 scriptHash: 0x05,
50962 wif: 0xA6
50963 };
50964
50965 bitcoinjs.bitcoin.networks.jumbucks = {
50966 messagePrefix: '\x19Jumbucks Signed Message:\n',
50967 bip32: {
50968 public: 0x037a689a,
50969 private: 0x037a6460
50970 },
50971 pubKeyHash: 0x2b,
50972 scriptHash: 0x05,
50973 wif: 0xab
50974 };
50975
50976 bitcoinjs.bitcoin.networks.zetacoin = {
50977 messagePrefix: '\x18Zetacoin Signed Message:\n',
50978 bip32: {
50979 public: 0x0488b21e,
50980 private: 0x0488ade4
50981 },
50982 pubKeyHash: 0x50,
50983 scriptHash: 0x09,
50984 wif: 0xe0
50985 };
50986
50987 bitcoinjs.bitcoin.networks.myriadcoin = {
50988 messagePrefix: 'unused',
50989 bip32: {
50990 public: 0x0488b21e,
50991 private: 0x0488ade4
50992 },
50993 pubKeyHash: 0x32,
50994 scriptHash: 0x00, // TODO set this correctly
50995 wif: 0xb2
50996 };
50997
50998
50999 bitcoinjs.bitcoin.networks.onixcoin = {
51000 messagePrefix: 'unused',
51001 bip32: {
51002 public: 0x049d7cb2,
51003 private: 0x049d7878
51004 },
51005 pubKeyHash: 0x4B,
51006 scriptHash: 0x05,
51007 wif: 0x80
51008 };
51009
51010 bitcoinjs.bitcoin.networks.pivx = {
51011 messagePrefix: 'unused',
51012 bip32: {
51013 public: 0x022d2533,
51014 private: 0x0221312b
51015 },
51016 pubKeyHash: 0x1e,
51017 scriptHash: 0x0d,
51018 wif: 0xd4
51019 };
51020
51021 bitcoinjs.bitcoin.networks.pivxtestnet = {
51022 messagePrefix: 'unused',
51023 bip32: {
51024 public: 0x3a8061a0,
51025 private: 0x3a805837
51026 },
51027 pubKeyHash: 0x8b,
51028 scriptHash: 0x13,
51029 wif: 0xef
51030 };
51031
51032 bitcoinjs.bitcoin.networks.fujicoin = {
51033 messagePrefix: '\x19FujiCoin Signed Message:\n',
51034 bip32: {
51035 public: 0x0488b21e,
51036 private: 0x0488ade4
51037 },
51038 pubKeyHash: 0x24,
51039 scriptHash: 0x10,
51040 wif: 0xa4
51041 };
51042
51043 bitcoinjs.bitcoin.networks.nubits = {
51044 messagePrefix: '\x18Nu Signed Message:\n',
51045 bip32: {
51046 public: 0x0488b21e,
51047 private: 0x0488ade4
51048 },
51049 pubKeyHash: 0x19,
51050 scriptHash: 0x1a,
51051 wif: 0x96,
51052 };
51053
51054 bitcoinjs.bitcoin.networks.bgold = {
51055 messagePrefix: 'unused',
51056 bip32: {
51057 public: 0x0488b21e,
51058 private: 0x0488ade4
51059 },
51060 pubKeyHash: 38,
51061 scriptHash: 23,
51062 wif: 128
51063 };
51064
51065 bitcoinjs.bitcoin.networks.bitcoinCashBitbpay = {
51066 messagePrefix: '\x18Bitcoin Signed Message:\n',
51067 bip32: {
51068 public: 0x0488b21e,
51069 private: 0x0488ade4
51070 },
51071 pubKeyHash: 0x1c,
51072 scriptHash: 0x28,
51073 wif: 0x80
51074 };
51075
51076 bitcoinjs.bitcoin.networks.monacoin = {
51077 messagePrefix: '\x18Monacoin Signed Message:\n',
51078 bip32: {
51079 public: 0x0488b21e,
51080 private: 0x0488ade4
51081 },
51082 pubKeyHash: 0x32,
51083 scriptHash: 0x37,
51084 wif: 0xb0
51085 };
51086
51087 bitcoinjs.bitcoin.networks.litecoinXprv = {
51088 messagePrefix: '\x19Litecoin Signed Message:\n',
51089 bip32: {
51090 public: 0x0488b21e,
51091 private: 0x0488ade4,
51092 },
51093 pubKeyHash: 0x30,
51094 scriptHash: 0x32,
51095 wif: 0xb0
51096 };
51097
51098 bitcoinjs.bitcoin.networks.komodo = {
51099 messagePrefix: '\x18Komodo Signed Message:\n',
51100 bip32: {
51101 public: 0x0488B21E,
51102 private: 0x0488ADE4
51103 },
51104 pubKeyHash: 0x3c,
51105 scriptHash: 0x55,
51106 wif: 0xbc
51107 };
51108 </script>
51109 <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.bitcoinjsBip38 = 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){
51110 var asn1 = exports;
51111
51112 asn1.bignum = require('bn.js');
51113
51114 asn1.define = require('./asn1/api').define;
51115 asn1.base = require('./asn1/base');
51116 asn1.constants = require('./asn1/constants');
51117 asn1.decoders = require('./asn1/decoders');
51118 asn1.encoders = require('./asn1/encoders');
51119
51120 },{"./asn1/api":2,"./asn1/base":4,"./asn1/constants":8,"./asn1/decoders":10,"./asn1/encoders":13,"bn.js":17}],2:[function(require,module,exports){
51121 var asn1 = require('../asn1');
51122 var inherits = require('inherits');
51123
51124 var api = exports;
51125
51126 api.define = function define(name, body) {
51127 return new Entity(name, body);
51128 };
51129
51130 function Entity(name, body) {
51131 this.name = name;
51132 this.body = body;
51133
51134 this.decoders = {};
51135 this.encoders = {};
51136 };
51137
51138 Entity.prototype._createNamed = function createNamed(base) {
51139 var named;
51140 try {
51141 named = require('vm').runInThisContext(
51142 '(function ' + this.name + '(entity) {\n' +
51143 ' this._initNamed(entity);\n' +
51144 '})'
51145 );
51146 } catch (e) {
51147 named = function (entity) {
51148 this._initNamed(entity);
51149 };
51150 }
51151 inherits(named, base);
51152 named.prototype._initNamed = function initnamed(entity) {
51153 base.call(this, entity);
51154 };
51155
51156 return new named(this);
51157 };
51158
51159 Entity.prototype._getDecoder = function _getDecoder(enc) {
51160 enc = enc || 'der';
51161 // Lazily create decoder
51162 if (!this.decoders.hasOwnProperty(enc))
51163 this.decoders[enc] = this._createNamed(asn1.decoders[enc]);
51164 return this.decoders[enc];
51165 };
51166
51167 Entity.prototype.decode = function decode(data, enc, options) {
51168 return this._getDecoder(enc).decode(data, options);
51169 };
51170
51171 Entity.prototype._getEncoder = function _getEncoder(enc) {
51172 enc = enc || 'der';
51173 // Lazily create encoder
51174 if (!this.encoders.hasOwnProperty(enc))
51175 this.encoders[enc] = this._createNamed(asn1.encoders[enc]);
51176 return this.encoders[enc];
51177 };
51178
51179 Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) {
51180 return this._getEncoder(enc).encode(data, reporter);
51181 };
51182
51183 },{"../asn1":1,"inherits":95,"vm":149}],3:[function(require,module,exports){
51184 var inherits = require('inherits');
51185 var Reporter = require('../base').Reporter;
51186 var Buffer = require('buffer').Buffer;
51187
51188 function DecoderBuffer(base, options) {
51189 Reporter.call(this, options);
51190 if (!Buffer.isBuffer(base)) {
51191 this.error('Input not Buffer');
51192 return;
51193 }
51194
51195 this.base = base;
51196 this.offset = 0;
51197 this.length = base.length;
51198 }
51199 inherits(DecoderBuffer, Reporter);
51200 exports.DecoderBuffer = DecoderBuffer;
51201
51202 DecoderBuffer.prototype.save = function save() {
51203 return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };
51204 };
51205
51206 DecoderBuffer.prototype.restore = function restore(save) {
51207 // Return skipped data
51208 var res = new DecoderBuffer(this.base);
51209 res.offset = save.offset;
51210 res.length = this.offset;
51211
51212 this.offset = save.offset;
51213 Reporter.prototype.restore.call(this, save.reporter);
51214
51215 return res;
51216 };
51217
51218 DecoderBuffer.prototype.isEmpty = function isEmpty() {
51219 return this.offset === this.length;
51220 };
51221
51222 DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {
51223 if (this.offset + 1 <= this.length)
51224 return this.base.readUInt8(this.offset++, true);
51225 else
51226 return this.error(fail || 'DecoderBuffer overrun');
51227 }
51228
51229 DecoderBuffer.prototype.skip = function skip(bytes, fail) {
51230 if (!(this.offset + bytes <= this.length))
51231 return this.error(fail || 'DecoderBuffer overrun');
51232
51233 var res = new DecoderBuffer(this.base);
51234
51235 // Share reporter state
51236 res._reporterState = this._reporterState;
51237
51238 res.offset = this.offset;
51239 res.length = this.offset + bytes;
51240 this.offset += bytes;
51241 return res;
51242 }
51243
51244 DecoderBuffer.prototype.raw = function raw(save) {
51245 return this.base.slice(save ? save.offset : this.offset, this.length);
51246 }
51247
51248 function EncoderBuffer(value, reporter) {
51249 if (Array.isArray(value)) {
51250 this.length = 0;
51251 this.value = value.map(function(item) {
51252 if (!(item instanceof EncoderBuffer))
51253 item = new EncoderBuffer(item, reporter);
51254 this.length += item.length;
51255 return item;
51256 }, this);
51257 } else if (typeof value === 'number') {
51258 if (!(0 <= value && value <= 0xff))
51259 return reporter.error('non-byte EncoderBuffer value');
51260 this.value = value;
51261 this.length = 1;
51262 } else if (typeof value === 'string') {
51263 this.value = value;
51264 this.length = Buffer.byteLength(value);
51265 } else if (Buffer.isBuffer(value)) {
51266 this.value = value;
51267 this.length = value.length;
51268 } else {
51269 return reporter.error('Unsupported type: ' + typeof value);
51270 }
51271 }
51272 exports.EncoderBuffer = EncoderBuffer;
51273
51274 EncoderBuffer.prototype.join = function join(out, offset) {
51275 if (!out)
51276 out = new Buffer(this.length);
51277 if (!offset)
51278 offset = 0;
51279
51280 if (this.length === 0)
51281 return out;
51282
51283 if (Array.isArray(this.value)) {
51284 this.value.forEach(function(item) {
51285 item.join(out, offset);
51286 offset += item.length;
51287 });
51288 } else {
51289 if (typeof this.value === 'number')
51290 out[offset] = this.value;
51291 else if (typeof this.value === 'string')
51292 out.write(this.value, offset);
51293 else if (Buffer.isBuffer(this.value))
51294 this.value.copy(out, offset);
51295 offset += this.length;
51296 }
51297
51298 return out;
51299 };
51300
51301 },{"../base":4,"buffer":47,"inherits":95}],4:[function(require,module,exports){
51302 var base = exports;
51303
51304 base.Reporter = require('./reporter').Reporter;
51305 base.DecoderBuffer = require('./buffer').DecoderBuffer;
51306 base.EncoderBuffer = require('./buffer').EncoderBuffer;
51307 base.Node = require('./node');
51308
51309 },{"./buffer":3,"./node":5,"./reporter":6}],5:[function(require,module,exports){
51310 var Reporter = require('../base').Reporter;
51311 var EncoderBuffer = require('../base').EncoderBuffer;
51312 var DecoderBuffer = require('../base').DecoderBuffer;
51313 var assert = require('minimalistic-assert');
51314
51315 // Supported tags
51316 var tags = [
51317 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',
51318 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',
51319 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',
51320 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'
51321 ];
51322
51323 // Public methods list
51324 var methods = [
51325 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',
51326 'any', 'contains'
51327 ].concat(tags);
51328
51329 // Overrided methods list
51330 var overrided = [
51331 '_peekTag', '_decodeTag', '_use',
51332 '_decodeStr', '_decodeObjid', '_decodeTime',
51333 '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',
51334
51335 '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',
51336 '_encodeNull', '_encodeInt', '_encodeBool'
51337 ];
51338
51339 function Node(enc, parent) {
51340 var state = {};
51341 this._baseState = state;
51342
51343 state.enc = enc;
51344
51345 state.parent = parent || null;
51346 state.children = null;
51347
51348 // State
51349 state.tag = null;
51350 state.args = null;
51351 state.reverseArgs = null;
51352 state.choice = null;
51353 state.optional = false;
51354 state.any = false;
51355 state.obj = false;
51356 state.use = null;
51357 state.useDecoder = null;
51358 state.key = null;
51359 state['default'] = null;
51360 state.explicit = null;
51361 state.implicit = null;
51362 state.contains = null;
51363
51364 // Should create new instance on each method
51365 if (!state.parent) {
51366 state.children = [];
51367 this._wrap();
51368 }
51369 }
51370 module.exports = Node;
51371
51372 var stateProps = [
51373 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',
51374 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',
51375 'implicit', 'contains'
51376 ];
51377
51378 Node.prototype.clone = function clone() {
51379 var state = this._baseState;
51380 var cstate = {};
51381 stateProps.forEach(function(prop) {
51382 cstate[prop] = state[prop];
51383 });
51384 var res = new this.constructor(cstate.parent);
51385 res._baseState = cstate;
51386 return res;
51387 };
51388
51389 Node.prototype._wrap = function wrap() {
51390 var state = this._baseState;
51391 methods.forEach(function(method) {
51392 this[method] = function _wrappedMethod() {
51393 var clone = new this.constructor(this);
51394 state.children.push(clone);
51395 return clone[method].apply(clone, arguments);
51396 };
51397 }, this);
51398 };
51399
51400 Node.prototype._init = function init(body) {
51401 var state = this._baseState;
51402
51403 assert(state.parent === null);
51404 body.call(this);
51405
51406 // Filter children
51407 state.children = state.children.filter(function(child) {
51408 return child._baseState.parent === this;
51409 }, this);
51410 assert.equal(state.children.length, 1, 'Root node can have only one child');
51411 };
51412
51413 Node.prototype._useArgs = function useArgs(args) {
51414 var state = this._baseState;
51415
51416 // Filter children and args
51417 var children = args.filter(function(arg) {
51418 return arg instanceof this.constructor;
51419 }, this);
51420 args = args.filter(function(arg) {
51421 return !(arg instanceof this.constructor);
51422 }, this);
51423
51424 if (children.length !== 0) {
51425 assert(state.children === null);
51426 state.children = children;
51427
51428 // Replace parent to maintain backward link
51429 children.forEach(function(child) {
51430 child._baseState.parent = this;
51431 }, this);
51432 }
51433 if (args.length !== 0) {
51434 assert(state.args === null);
51435 state.args = args;
51436 state.reverseArgs = args.map(function(arg) {
51437 if (typeof arg !== 'object' || arg.constructor !== Object)
51438 return arg;
51439
51440 var res = {};
51441 Object.keys(arg).forEach(function(key) {
51442 if (key == (key | 0))
51443 key |= 0;
51444 var value = arg[key];
51445 res[value] = key;
51446 });
51447 return res;
51448 });
51449 }
51450 };
51451
51452 //
51453 // Overrided methods
51454 //
51455
51456 overrided.forEach(function(method) {
51457 Node.prototype[method] = function _overrided() {
51458 var state = this._baseState;
51459 throw new Error(method + ' not implemented for encoding: ' + state.enc);
51460 };
51461 });
51462
51463 //
51464 // Public methods
51465 //
51466
51467 tags.forEach(function(tag) {
51468 Node.prototype[tag] = function _tagMethod() {
51469 var state = this._baseState;
51470 var args = Array.prototype.slice.call(arguments);
51471
51472 assert(state.tag === null);
51473 state.tag = tag;
51474
51475 this._useArgs(args);
51476
51477 return this;
51478 };
51479 });
51480
51481 Node.prototype.use = function use(item) {
51482 assert(item);
51483 var state = this._baseState;
51484
51485 assert(state.use === null);
51486 state.use = item;
51487
51488 return this;
51489 };
51490
51491 Node.prototype.optional = function optional() {
51492 var state = this._baseState;
51493
51494 state.optional = true;
51495
51496 return this;
51497 };
51498
51499 Node.prototype.def = function def(val) {
51500 var state = this._baseState;
51501
51502 assert(state['default'] === null);
51503 state['default'] = val;
51504 state.optional = true;
51505
51506 return this;
51507 };
51508
51509 Node.prototype.explicit = function explicit(num) {
51510 var state = this._baseState;
51511
51512 assert(state.explicit === null && state.implicit === null);
51513 state.explicit = num;
51514
51515 return this;
51516 };
51517
51518 Node.prototype.implicit = function implicit(num) {
51519 var state = this._baseState;
51520
51521 assert(state.explicit === null && state.implicit === null);
51522 state.implicit = num;
51523
51524 return this;
51525 };
51526
51527 Node.prototype.obj = function obj() {
51528 var state = this._baseState;
51529 var args = Array.prototype.slice.call(arguments);
51530
51531 state.obj = true;
51532
51533 if (args.length !== 0)
51534 this._useArgs(args);
51535
51536 return this;
51537 };
51538
51539 Node.prototype.key = function key(newKey) {
51540 var state = this._baseState;
51541
51542 assert(state.key === null);
51543 state.key = newKey;
51544
51545 return this;
51546 };
51547
51548 Node.prototype.any = function any() {
51549 var state = this._baseState;
51550
51551 state.any = true;
51552
51553 return this;
51554 };
51555
51556 Node.prototype.choice = function choice(obj) {
51557 var state = this._baseState;
51558
51559 assert(state.choice === null);
51560 state.choice = obj;
51561 this._useArgs(Object.keys(obj).map(function(key) {
51562 return obj[key];
51563 }));
51564
51565 return this;
51566 };
51567
51568 Node.prototype.contains = function contains(item) {
51569 var state = this._baseState;
51570
51571 assert(state.use === null);
51572 state.contains = item;
51573
51574 return this;
51575 };
51576
51577 //
51578 // Decoding
51579 //
51580
51581 Node.prototype._decode = function decode(input, options) {
51582 var state = this._baseState;
51583
51584 // Decode root node
51585 if (state.parent === null)
51586 return input.wrapResult(state.children[0]._decode(input, options));
51587
51588 var result = state['default'];
51589 var present = true;
51590
51591 var prevKey = null;
51592 if (state.key !== null)
51593 prevKey = input.enterKey(state.key);
51594
51595 // Check if tag is there
51596 if (state.optional) {
51597 var tag = null;
51598 if (state.explicit !== null)
51599 tag = state.explicit;
51600 else if (state.implicit !== null)
51601 tag = state.implicit;
51602 else if (state.tag !== null)
51603 tag = state.tag;
51604
51605 if (tag === null && !state.any) {
51606 // Trial and Error
51607 var save = input.save();
51608 try {
51609 if (state.choice === null)
51610 this._decodeGeneric(state.tag, input, options);
51611 else
51612 this._decodeChoice(input, options);
51613 present = true;
51614 } catch (e) {
51615 present = false;
51616 }
51617 input.restore(save);
51618 } else {
51619 present = this._peekTag(input, tag, state.any);
51620
51621 if (input.isError(present))
51622 return present;
51623 }
51624 }
51625
51626 // Push object on stack
51627 var prevObj;
51628 if (state.obj && present)
51629 prevObj = input.enterObject();
51630
51631 if (present) {
51632 // Unwrap explicit values
51633 if (state.explicit !== null) {
51634 var explicit = this._decodeTag(input, state.explicit);
51635 if (input.isError(explicit))
51636 return explicit;
51637 input = explicit;
51638 }
51639
51640 var start = input.offset;
51641
51642 // Unwrap implicit and normal values
51643 if (state.use === null && state.choice === null) {
51644 if (state.any)
51645 var save = input.save();
51646 var body = this._decodeTag(
51647 input,
51648 state.implicit !== null ? state.implicit : state.tag,
51649 state.any
51650 );
51651 if (input.isError(body))
51652 return body;
51653
51654 if (state.any)
51655 result = input.raw(save);
51656 else
51657 input = body;
51658 }
51659
51660 if (options && options.track && state.tag !== null)
51661 options.track(input.path(), start, input.length, 'tagged');
51662
51663 if (options && options.track && state.tag !== null)
51664 options.track(input.path(), input.offset, input.length, 'content');
51665
51666 // Select proper method for tag
51667 if (state.any)
51668 result = result;
51669 else if (state.choice === null)
51670 result = this._decodeGeneric(state.tag, input, options);
51671 else
51672 result = this._decodeChoice(input, options);
51673
51674 if (input.isError(result))
51675 return result;
51676
51677 // Decode children
51678 if (!state.any && state.choice === null && state.children !== null) {
51679 state.children.forEach(function decodeChildren(child) {
51680 // NOTE: We are ignoring errors here, to let parser continue with other
51681 // parts of encoded data
51682 child._decode(input, options);
51683 });
51684 }
51685
51686 // Decode contained/encoded by schema, only in bit or octet strings
51687 if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {
51688 var data = new DecoderBuffer(result);
51689 result = this._getUse(state.contains, input._reporterState.obj)
51690 ._decode(data, options);
51691 }
51692 }
51693
51694 // Pop object
51695 if (state.obj && present)
51696 result = input.leaveObject(prevObj);
51697
51698 // Set key
51699 if (state.key !== null && (result !== null || present === true))
51700 input.leaveKey(prevKey, state.key, result);
51701 else if (prevKey !== null)
51702 input.exitKey(prevKey);
51703
51704 return result;
51705 };
51706
51707 Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {
51708 var state = this._baseState;
51709
51710 if (tag === 'seq' || tag === 'set')
51711 return null;
51712 if (tag === 'seqof' || tag === 'setof')
51713 return this._decodeList(input, tag, state.args[0], options);
51714 else if (/str$/.test(tag))
51715 return this._decodeStr(input, tag, options);
51716 else if (tag === 'objid' && state.args)
51717 return this._decodeObjid(input, state.args[0], state.args[1], options);
51718 else if (tag === 'objid')
51719 return this._decodeObjid(input, null, null, options);
51720 else if (tag === 'gentime' || tag === 'utctime')
51721 return this._decodeTime(input, tag, options);
51722 else if (tag === 'null_')
51723 return this._decodeNull(input, options);
51724 else if (tag === 'bool')
51725 return this._decodeBool(input, options);
51726 else if (tag === 'objDesc')
51727 return this._decodeStr(input, tag, options);
51728 else if (tag === 'int' || tag === 'enum')
51729 return this._decodeInt(input, state.args && state.args[0], options);
51730
51731 if (state.use !== null) {
51732 return this._getUse(state.use, input._reporterState.obj)
51733 ._decode(input, options);
51734 } else {
51735 return input.error('unknown tag: ' + tag);
51736 }
51737 };
51738
51739 Node.prototype._getUse = function _getUse(entity, obj) {
51740
51741 var state = this._baseState;
51742 // Create altered use decoder if implicit is set
51743 state.useDecoder = this._use(entity, obj);
51744 assert(state.useDecoder._baseState.parent === null);
51745 state.useDecoder = state.useDecoder._baseState.children[0];
51746 if (state.implicit !== state.useDecoder._baseState.implicit) {
51747 state.useDecoder = state.useDecoder.clone();
51748 state.useDecoder._baseState.implicit = state.implicit;
51749 }
51750 return state.useDecoder;
51751 };
51752
51753 Node.prototype._decodeChoice = function decodeChoice(input, options) {
51754 var state = this._baseState;
51755 var result = null;
51756 var match = false;
51757
51758 Object.keys(state.choice).some(function(key) {
51759 var save = input.save();
51760 var node = state.choice[key];
51761 try {
51762 var value = node._decode(input, options);
51763 if (input.isError(value))
51764 return false;
51765
51766 result = { type: key, value: value };
51767 match = true;
51768 } catch (e) {
51769 input.restore(save);
51770 return false;
51771 }
51772 return true;
51773 }, this);
51774
51775 if (!match)
51776 return input.error('Choice not matched');
51777
51778 return result;
51779 };
51780
51781 //
51782 // Encoding
51783 //
51784
51785 Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) {
51786 return new EncoderBuffer(data, this.reporter);
51787 };
51788
51789 Node.prototype._encode = function encode(data, reporter, parent) {
51790 var state = this._baseState;
51791 if (state['default'] !== null && state['default'] === data)
51792 return;
51793
51794 var result = this._encodeValue(data, reporter, parent);
51795 if (result === undefined)
51796 return;
51797
51798 if (this._skipDefault(result, reporter, parent))
51799 return;
51800
51801 return result;
51802 };
51803
51804 Node.prototype._encodeValue = function encode(data, reporter, parent) {
51805 var state = this._baseState;
51806
51807 // Decode root node
51808 if (state.parent === null)
51809 return state.children[0]._encode(data, reporter || new Reporter());
51810
51811 var result = null;
51812
51813 // Set reporter to share it with a child class
51814 this.reporter = reporter;
51815
51816 // Check if data is there
51817 if (state.optional && data === undefined) {
51818 if (state['default'] !== null)
51819 data = state['default']
51820 else
51821 return;
51822 }
51823
51824 // Encode children first
51825 var content = null;
51826 var primitive = false;
51827 if (state.any) {
51828 // Anything that was given is translated to buffer
51829 result = this._createEncoderBuffer(data);
51830 } else if (state.choice) {
51831 result = this._encodeChoice(data, reporter);
51832 } else if (state.contains) {
51833 content = this._getUse(state.contains, parent)._encode(data, reporter);
51834 primitive = true;
51835 } else if (state.children) {
51836 content = state.children.map(function(child) {
51837 if (child._baseState.tag === 'null_')
51838 return child._encode(null, reporter, data);
51839
51840 if (child._baseState.key === null)
51841 return reporter.error('Child should have a key');
51842 var prevKey = reporter.enterKey(child._baseState.key);
51843
51844 if (typeof data !== 'object')
51845 return reporter.error('Child expected, but input is not object');
51846
51847 var res = child._encode(data[child._baseState.key], reporter, data);
51848 reporter.leaveKey(prevKey);
51849
51850 return res;
51851 }, this).filter(function(child) {
51852 return child;
51853 });
51854 content = this._createEncoderBuffer(content);
51855 } else {
51856 if (state.tag === 'seqof' || state.tag === 'setof') {
51857 // TODO(indutny): this should be thrown on DSL level
51858 if (!(state.args && state.args.length === 1))
51859 return reporter.error('Too many args for : ' + state.tag);
51860
51861 if (!Array.isArray(data))
51862 return reporter.error('seqof/setof, but data is not Array');
51863
51864 var child = this.clone();
51865 child._baseState.implicit = null;
51866 content = this._createEncoderBuffer(data.map(function(item) {
51867 var state = this._baseState;
51868
51869 return this._getUse(state.args[0], data)._encode(item, reporter);
51870 }, child));
51871 } else if (state.use !== null) {
51872 result = this._getUse(state.use, parent)._encode(data, reporter);
51873 } else {
51874 content = this._encodePrimitive(state.tag, data);
51875 primitive = true;
51876 }
51877 }
51878
51879 // Encode data itself
51880 var result;
51881 if (!state.any && state.choice === null) {
51882 var tag = state.implicit !== null ? state.implicit : state.tag;
51883 var cls = state.implicit === null ? 'universal' : 'context';
51884
51885 if (tag === null) {
51886 if (state.use === null)
51887 reporter.error('Tag could be ommited only for .use()');
51888 } else {
51889 if (state.use === null)
51890 result = this._encodeComposite(tag, primitive, cls, content);
51891 }
51892 }
51893
51894 // Wrap in explicit
51895 if (state.explicit !== null)
51896 result = this._encodeComposite(state.explicit, false, 'context', result);
51897
51898 return result;
51899 };
51900
51901 Node.prototype._encodeChoice = function encodeChoice(data, reporter) {
51902 var state = this._baseState;
51903
51904 var node = state.choice[data.type];
51905 if (!node) {
51906 assert(
51907 false,
51908 data.type + ' not found in ' +
51909 JSON.stringify(Object.keys(state.choice)));
51910 }
51911 return node._encode(data.value, reporter);
51912 };
51913
51914 Node.prototype._encodePrimitive = function encodePrimitive(tag, data) {
51915 var state = this._baseState;
51916
51917 if (/str$/.test(tag))
51918 return this._encodeStr(data, tag);
51919 else if (tag === 'objid' && state.args)
51920 return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);
51921 else if (tag === 'objid')
51922 return this._encodeObjid(data, null, null);
51923 else if (tag === 'gentime' || tag === 'utctime')
51924 return this._encodeTime(data, tag);
51925 else if (tag === 'null_')
51926 return this._encodeNull();
51927 else if (tag === 'int' || tag === 'enum')
51928 return this._encodeInt(data, state.args && state.reverseArgs[0]);
51929 else if (tag === 'bool')
51930 return this._encodeBool(data);
51931 else if (tag === 'objDesc')
51932 return this._encodeStr(data, tag);
51933 else
51934 throw new Error('Unsupported tag: ' + tag);
51935 };
51936
51937 Node.prototype._isNumstr = function isNumstr(str) {
51938 return /^[0-9 ]*$/.test(str);
51939 };
51940
51941 Node.prototype._isPrintstr = function isPrintstr(str) {
51942 return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str);
51943 };
51944
51945 },{"../base":4,"minimalistic-assert":99}],6:[function(require,module,exports){
51946 var inherits = require('inherits');
51947
51948 function Reporter(options) {
51949 this._reporterState = {
51950 obj: null,
51951 path: [],
51952 options: options || {},
51953 errors: []
51954 };
51955 }
51956 exports.Reporter = Reporter;
51957
51958 Reporter.prototype.isError = function isError(obj) {
51959 return obj instanceof ReporterError;
51960 };
51961
51962 Reporter.prototype.save = function save() {
51963 var state = this._reporterState;
51964
51965 return { obj: state.obj, pathLen: state.path.length };
51966 };
51967
51968 Reporter.prototype.restore = function restore(data) {
51969 var state = this._reporterState;
51970
51971 state.obj = data.obj;
51972 state.path = state.path.slice(0, data.pathLen);
51973 };
51974
51975 Reporter.prototype.enterKey = function enterKey(key) {
51976 return this._reporterState.path.push(key);
51977 };
51978
51979 Reporter.prototype.exitKey = function exitKey(index) {
51980 var state = this._reporterState;
51981
51982 state.path = state.path.slice(0, index - 1);
51983 };
51984
51985 Reporter.prototype.leaveKey = function leaveKey(index, key, value) {
51986 var state = this._reporterState;
51987
51988 this.exitKey(index);
51989 if (state.obj !== null)
51990 state.obj[key] = value;
51991 };
51992
51993 Reporter.prototype.path = function path() {
51994 return this._reporterState.path.join('/');
51995 };
51996
51997 Reporter.prototype.enterObject = function enterObject() {
51998 var state = this._reporterState;
51999
52000 var prev = state.obj;
52001 state.obj = {};
52002 return prev;
52003 };
52004
52005 Reporter.prototype.leaveObject = function leaveObject(prev) {
52006 var state = this._reporterState;
52007
52008 var now = state.obj;
52009 state.obj = prev;
52010 return now;
52011 };
52012
52013 Reporter.prototype.error = function error(msg) {
52014 var err;
52015 var state = this._reporterState;
52016
52017 var inherited = msg instanceof ReporterError;
52018 if (inherited) {
52019 err = msg;
52020 } else {
52021 err = new ReporterError(state.path.map(function(elem) {
52022 return '[' + JSON.stringify(elem) + ']';
52023 }).join(''), msg.message || msg, msg.stack);
52024 }
52025
52026 if (!state.options.partial)
52027 throw err;
52028
52029 if (!inherited)
52030 state.errors.push(err);
52031
52032 return err;
52033 };
52034
52035 Reporter.prototype.wrapResult = function wrapResult(result) {
52036 var state = this._reporterState;
52037 if (!state.options.partial)
52038 return result;
52039
52040 return {
52041 result: this.isError(result) ? null : result,
52042 errors: state.errors
52043 };
52044 };
52045
52046 function ReporterError(path, msg) {
52047 this.path = path;
52048 this.rethrow(msg);
52049 };
52050 inherits(ReporterError, Error);
52051
52052 ReporterError.prototype.rethrow = function rethrow(msg) {
52053 this.message = msg + ' at: ' + (this.path || '(shallow)');
52054 if (Error.captureStackTrace)
52055 Error.captureStackTrace(this, ReporterError);
52056
52057 if (!this.stack) {
52058 try {
52059 // IE only adds stack when thrown
52060 throw new Error(this.message);
52061 } catch (e) {
52062 this.stack = e.stack;
52063 }
52064 }
52065 return this;
52066 };
52067
52068 },{"inherits":95}],7:[function(require,module,exports){
52069 var constants = require('../constants');
52070
52071 exports.tagClass = {
52072 0: 'universal',
52073 1: 'application',
52074 2: 'context',
52075 3: 'private'
52076 };
52077 exports.tagClassByName = constants._reverse(exports.tagClass);
52078
52079 exports.tag = {
52080 0x00: 'end',
52081 0x01: 'bool',
52082 0x02: 'int',
52083 0x03: 'bitstr',
52084 0x04: 'octstr',
52085 0x05: 'null_',
52086 0x06: 'objid',
52087 0x07: 'objDesc',
52088 0x08: 'external',
52089 0x09: 'real',
52090 0x0a: 'enum',
52091 0x0b: 'embed',
52092 0x0c: 'utf8str',
52093 0x0d: 'relativeOid',
52094 0x10: 'seq',
52095 0x11: 'set',
52096 0x12: 'numstr',
52097 0x13: 'printstr',
52098 0x14: 't61str',
52099 0x15: 'videostr',
52100 0x16: 'ia5str',
52101 0x17: 'utctime',
52102 0x18: 'gentime',
52103 0x19: 'graphstr',
52104 0x1a: 'iso646str',
52105 0x1b: 'genstr',
52106 0x1c: 'unistr',
52107 0x1d: 'charstr',
52108 0x1e: 'bmpstr'
52109 };
52110 exports.tagByName = constants._reverse(exports.tag);
52111
52112 },{"../constants":8}],8:[function(require,module,exports){
52113 var constants = exports;
52114
52115 // Helper
52116 constants._reverse = function reverse(map) {
52117 var res = {};
52118
52119 Object.keys(map).forEach(function(key) {
52120 // Convert key to integer if it is stringified
52121 if ((key | 0) == key)
52122 key = key | 0;
52123
52124 var value = map[key];
52125 res[value] = key;
52126 });
52127
52128 return res;
52129 };
52130
52131 constants.der = require('./der');
52132
52133 },{"./der":7}],9:[function(require,module,exports){
52134 var inherits = require('inherits');
52135
52136 var asn1 = require('../../asn1');
52137 var base = asn1.base;
52138 var bignum = asn1.bignum;
52139
52140 // Import DER constants
52141 var der = asn1.constants.der;
52142
52143 function DERDecoder(entity) {
52144 this.enc = 'der';
52145 this.name = entity.name;
52146 this.entity = entity;
52147
52148 // Construct base tree
52149 this.tree = new DERNode();
52150 this.tree._init(entity.body);
52151 };
52152 module.exports = DERDecoder;
52153
52154 DERDecoder.prototype.decode = function decode(data, options) {
52155 if (!(data instanceof base.DecoderBuffer))
52156 data = new base.DecoderBuffer(data, options);
52157
52158 return this.tree._decode(data, options);
52159 };
52160
52161 // Tree methods
52162
52163 function DERNode(parent) {
52164 base.Node.call(this, 'der', parent);
52165 }
52166 inherits(DERNode, base.Node);
52167
52168 DERNode.prototype._peekTag = function peekTag(buffer, tag, any) {
52169 if (buffer.isEmpty())
52170 return false;
52171
52172 var state = buffer.save();
52173 var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"');
52174 if (buffer.isError(decodedTag))
52175 return decodedTag;
52176
52177 buffer.restore(state);
52178
52179 return decodedTag.tag === tag || decodedTag.tagStr === tag ||
52180 (decodedTag.tagStr + 'of') === tag || any;
52181 };
52182
52183 DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {
52184 var decodedTag = derDecodeTag(buffer,
52185 'Failed to decode tag of "' + tag + '"');
52186 if (buffer.isError(decodedTag))
52187 return decodedTag;
52188
52189 var len = derDecodeLen(buffer,
52190 decodedTag.primitive,
52191 'Failed to get length of "' + tag + '"');
52192
52193 // Failure
52194 if (buffer.isError(len))
52195 return len;
52196
52197 if (!any &&
52198 decodedTag.tag !== tag &&
52199 decodedTag.tagStr !== tag &&
52200 decodedTag.tagStr + 'of' !== tag) {
52201 return buffer.error('Failed to match tag: "' + tag + '"');
52202 }
52203
52204 if (decodedTag.primitive || len !== null)
52205 return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
52206
52207 // Indefinite length... find END tag
52208 var state = buffer.save();
52209 var res = this._skipUntilEnd(
52210 buffer,
52211 'Failed to skip indefinite length body: "' + this.tag + '"');
52212 if (buffer.isError(res))
52213 return res;
52214
52215 len = buffer.offset - state.offset;
52216 buffer.restore(state);
52217 return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
52218 };
52219
52220 DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {
52221 while (true) {
52222 var tag = derDecodeTag(buffer, fail);
52223 if (buffer.isError(tag))
52224 return tag;
52225 var len = derDecodeLen(buffer, tag.primitive, fail);
52226 if (buffer.isError(len))
52227 return len;
52228
52229 var res;
52230 if (tag.primitive || len !== null)
52231 res = buffer.skip(len)
52232 else
52233 res = this._skipUntilEnd(buffer, fail);
52234
52235 // Failure
52236 if (buffer.isError(res))
52237 return res;
52238
52239 if (tag.tagStr === 'end')
52240 break;
52241 }
52242 };
52243
52244 DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,
52245 options) {
52246 var result = [];
52247 while (!buffer.isEmpty()) {
52248 var possibleEnd = this._peekTag(buffer, 'end');
52249 if (buffer.isError(possibleEnd))
52250 return possibleEnd;
52251
52252 var res = decoder.decode(buffer, 'der', options);
52253 if (buffer.isError(res) && possibleEnd)
52254 break;
52255 result.push(res);
52256 }
52257 return result;
52258 };
52259
52260 DERNode.prototype._decodeStr = function decodeStr(buffer, tag) {
52261 if (tag === 'bitstr') {
52262 var unused = buffer.readUInt8();
52263 if (buffer.isError(unused))
52264 return unused;
52265 return { unused: unused, data: buffer.raw() };
52266 } else if (tag === 'bmpstr') {
52267 var raw = buffer.raw();
52268 if (raw.length % 2 === 1)
52269 return buffer.error('Decoding of string type: bmpstr length mismatch');
52270
52271 var str = '';
52272 for (var i = 0; i < raw.length / 2; i++) {
52273 str += String.fromCharCode(raw.readUInt16BE(i * 2));
52274 }
52275 return str;
52276 } else if (tag === 'numstr') {
52277 var numstr = buffer.raw().toString('ascii');
52278 if (!this._isNumstr(numstr)) {
52279 return buffer.error('Decoding of string type: ' +
52280 'numstr unsupported characters');
52281 }
52282 return numstr;
52283 } else if (tag === 'octstr') {
52284 return buffer.raw();
52285 } else if (tag === 'objDesc') {
52286 return buffer.raw();
52287 } else if (tag === 'printstr') {
52288 var printstr = buffer.raw().toString('ascii');
52289 if (!this._isPrintstr(printstr)) {
52290 return buffer.error('Decoding of string type: ' +
52291 'printstr unsupported characters');
52292 }
52293 return printstr;
52294 } else if (/str$/.test(tag)) {
52295 return buffer.raw().toString();
52296 } else {
52297 return buffer.error('Decoding of string type: ' + tag + ' unsupported');
52298 }
52299 };
52300
52301 DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {
52302 var result;
52303 var identifiers = [];
52304 var ident = 0;
52305 while (!buffer.isEmpty()) {
52306 var subident = buffer.readUInt8();
52307 ident <<= 7;
52308 ident |= subident & 0x7f;
52309 if ((subident & 0x80) === 0) {
52310 identifiers.push(ident);
52311 ident = 0;
52312 }
52313 }
52314 if (subident & 0x80)
52315 identifiers.push(ident);
52316
52317 var first = (identifiers[0] / 40) | 0;
52318 var second = identifiers[0] % 40;
52319
52320 if (relative)
52321 result = identifiers;
52322 else
52323 result = [first, second].concat(identifiers.slice(1));
52324
52325 if (values) {
52326 var tmp = values[result.join(' ')];
52327 if (tmp === undefined)
52328 tmp = values[result.join('.')];
52329 if (tmp !== undefined)
52330 result = tmp;
52331 }
52332
52333 return result;
52334 };
52335
52336 DERNode.prototype._decodeTime = function decodeTime(buffer, tag) {
52337 var str = buffer.raw().toString();
52338 if (tag === 'gentime') {
52339 var year = str.slice(0, 4) | 0;
52340 var mon = str.slice(4, 6) | 0;
52341 var day = str.slice(6, 8) | 0;
52342 var hour = str.slice(8, 10) | 0;
52343 var min = str.slice(10, 12) | 0;
52344 var sec = str.slice(12, 14) | 0;
52345 } else if (tag === 'utctime') {
52346 var year = str.slice(0, 2) | 0;
52347 var mon = str.slice(2, 4) | 0;
52348 var day = str.slice(4, 6) | 0;
52349 var hour = str.slice(6, 8) | 0;
52350 var min = str.slice(8, 10) | 0;
52351 var sec = str.slice(10, 12) | 0;
52352 if (year < 70)
52353 year = 2000 + year;
52354 else
52355 year = 1900 + year;
52356 } else {
52357 return buffer.error('Decoding ' + tag + ' time is not supported yet');
52358 }
52359
52360 return Date.UTC(year, mon - 1, day, hour, min, sec, 0);
52361 };
52362
52363 DERNode.prototype._decodeNull = function decodeNull(buffer) {
52364 return null;
52365 };
52366
52367 DERNode.prototype._decodeBool = function decodeBool(buffer) {
52368 var res = buffer.readUInt8();
52369 if (buffer.isError(res))
52370 return res;
52371 else
52372 return res !== 0;
52373 };
52374
52375 DERNode.prototype._decodeInt = function decodeInt(buffer, values) {
52376 // Bigint, return as it is (assume big endian)
52377 var raw = buffer.raw();
52378 var res = new bignum(raw);
52379
52380 if (values)
52381 res = values[res.toString(10)] || res;
52382
52383 return res;
52384 };
52385
52386 DERNode.prototype._use = function use(entity, obj) {
52387 if (typeof entity === 'function')
52388 entity = entity(obj);
52389 return entity._getDecoder('der').tree;
52390 };
52391
52392 // Utility methods
52393
52394 function derDecodeTag(buf, fail) {
52395 var tag = buf.readUInt8(fail);
52396 if (buf.isError(tag))
52397 return tag;
52398
52399 var cls = der.tagClass[tag >> 6];
52400 var primitive = (tag & 0x20) === 0;
52401
52402 // Multi-octet tag - load
52403 if ((tag & 0x1f) === 0x1f) {
52404 var oct = tag;
52405 tag = 0;
52406 while ((oct & 0x80) === 0x80) {
52407 oct = buf.readUInt8(fail);
52408 if (buf.isError(oct))
52409 return oct;
52410
52411 tag <<= 7;
52412 tag |= oct & 0x7f;
52413 }
52414 } else {
52415 tag &= 0x1f;
52416 }
52417 var tagStr = der.tag[tag];
52418
52419 return {
52420 cls: cls,
52421 primitive: primitive,
52422 tag: tag,
52423 tagStr: tagStr
52424 };
52425 }
52426
52427 function derDecodeLen(buf, primitive, fail) {
52428 var len = buf.readUInt8(fail);
52429 if (buf.isError(len))
52430 return len;
52431
52432 // Indefinite form
52433 if (!primitive && len === 0x80)
52434 return null;
52435
52436 // Definite form
52437 if ((len & 0x80) === 0) {
52438 // Short form
52439 return len;
52440 }
52441
52442 // Long form
52443 var num = len & 0x7f;
52444 if (num > 4)
52445 return buf.error('length octect is too long');
52446
52447 len = 0;
52448 for (var i = 0; i < num; i++) {
52449 len <<= 8;
52450 var j = buf.readUInt8(fail);
52451 if (buf.isError(j))
52452 return j;
52453 len |= j;
52454 }
52455
52456 return len;
52457 }
52458
52459 },{"../../asn1":1,"inherits":95}],10:[function(require,module,exports){
52460 var decoders = exports;
52461
52462 decoders.der = require('./der');
52463 decoders.pem = require('./pem');
52464
52465 },{"./der":9,"./pem":11}],11:[function(require,module,exports){
52466 var inherits = require('inherits');
52467 var Buffer = require('buffer').Buffer;
52468
52469 var DERDecoder = require('./der');
52470
52471 function PEMDecoder(entity) {
52472 DERDecoder.call(this, entity);
52473 this.enc = 'pem';
52474 };
52475 inherits(PEMDecoder, DERDecoder);
52476 module.exports = PEMDecoder;
52477
52478 PEMDecoder.prototype.decode = function decode(data, options) {
52479 var lines = data.toString().split(/[\r\n]+/g);
52480
52481 var label = options.label.toUpperCase();
52482
52483 var re = /^-----(BEGIN|END) ([^-]+)-----$/;
52484 var start = -1;
52485 var end = -1;
52486 for (var i = 0; i < lines.length; i++) {
52487 var match = lines[i].match(re);
52488 if (match === null)
52489 continue;
52490
52491 if (match[2] !== label)
52492 continue;
52493
52494 if (start === -1) {
52495 if (match[1] !== 'BEGIN')
52496 break;
52497 start = i;
52498 } else {
52499 if (match[1] !== 'END')
52500 break;
52501 end = i;
52502 break;
52503 }
52504 }
52505 if (start === -1 || end === -1)
52506 throw new Error('PEM section not found for: ' + label);
52507
52508 var base64 = lines.slice(start + 1, end).join('');
52509 // Remove excessive symbols
52510 base64.replace(/[^a-z0-9\+\/=]+/gi, '');
52511
52512 var input = new Buffer(base64, 'base64');
52513 return DERDecoder.prototype.decode.call(this, input, options);
52514 };
52515
52516 },{"./der":9,"buffer":47,"inherits":95}],12:[function(require,module,exports){
52517 var inherits = require('inherits');
52518 var Buffer = require('buffer').Buffer;
52519
52520 var asn1 = require('../../asn1');
52521 var base = asn1.base;
52522
52523 // Import DER constants
52524 var der = asn1.constants.der;
52525
52526 function DEREncoder(entity) {
52527 this.enc = 'der';
52528 this.name = entity.name;
52529 this.entity = entity;
52530
52531 // Construct base tree
52532 this.tree = new DERNode();
52533 this.tree._init(entity.body);
52534 };
52535 module.exports = DEREncoder;
52536
52537 DEREncoder.prototype.encode = function encode(data, reporter) {
52538 return this.tree._encode(data, reporter).join();
52539 };
52540
52541 // Tree methods
52542
52543 function DERNode(parent) {
52544 base.Node.call(this, 'der', parent);
52545 }
52546 inherits(DERNode, base.Node);
52547
52548 DERNode.prototype._encodeComposite = function encodeComposite(tag,
52549 primitive,
52550 cls,
52551 content) {
52552 var encodedTag = encodeTag(tag, primitive, cls, this.reporter);
52553
52554 // Short form
52555 if (content.length < 0x80) {
52556 var header = new Buffer(2);
52557 header[0] = encodedTag;
52558 header[1] = content.length;
52559 return this._createEncoderBuffer([ header, content ]);
52560 }
52561
52562 // Long form
52563 // Count octets required to store length
52564 var lenOctets = 1;
52565 for (var i = content.length; i >= 0x100; i >>= 8)
52566 lenOctets++;
52567
52568 var header = new Buffer(1 + 1 + lenOctets);
52569 header[0] = encodedTag;
52570 header[1] = 0x80 | lenOctets;
52571
52572 for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)
52573 header[i] = j & 0xff;
52574
52575 return this._createEncoderBuffer([ header, content ]);
52576 };
52577
52578 DERNode.prototype._encodeStr = function encodeStr(str, tag) {
52579 if (tag === 'bitstr') {
52580 return this._createEncoderBuffer([ str.unused | 0, str.data ]);
52581 } else if (tag === 'bmpstr') {
52582 var buf = new Buffer(str.length * 2);
52583 for (var i = 0; i < str.length; i++) {
52584 buf.writeUInt16BE(str.charCodeAt(i), i * 2);
52585 }
52586 return this._createEncoderBuffer(buf);
52587 } else if (tag === 'numstr') {
52588 if (!this._isNumstr(str)) {
52589 return this.reporter.error('Encoding of string type: numstr supports ' +
52590 'only digits and space');
52591 }
52592 return this._createEncoderBuffer(str);
52593 } else if (tag === 'printstr') {
52594 if (!this._isPrintstr(str)) {
52595 return this.reporter.error('Encoding of string type: printstr supports ' +
52596 'only latin upper and lower case letters, ' +
52597 'digits, space, apostrophe, left and rigth ' +
52598 'parenthesis, plus sign, comma, hyphen, ' +
52599 'dot, slash, colon, equal sign, ' +
52600 'question mark');
52601 }
52602 return this._createEncoderBuffer(str);
52603 } else if (/str$/.test(tag)) {
52604 return this._createEncoderBuffer(str);
52605 } else if (tag === 'objDesc') {
52606 return this._createEncoderBuffer(str);
52607 } else {
52608 return this.reporter.error('Encoding of string type: ' + tag +
52609 ' unsupported');
52610 }
52611 };
52612
52613 DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {
52614 if (typeof id === 'string') {
52615 if (!values)
52616 return this.reporter.error('string objid given, but no values map found');
52617 if (!values.hasOwnProperty(id))
52618 return this.reporter.error('objid not found in values map');
52619 id = values[id].split(/[\s\.]+/g);
52620 for (var i = 0; i < id.length; i++)
52621 id[i] |= 0;
52622 } else if (Array.isArray(id)) {
52623 id = id.slice();
52624 for (var i = 0; i < id.length; i++)
52625 id[i] |= 0;
52626 }
52627
52628 if (!Array.isArray(id)) {
52629 return this.reporter.error('objid() should be either array or string, ' +
52630 'got: ' + JSON.stringify(id));
52631 }
52632
52633 if (!relative) {
52634 if (id[1] >= 40)
52635 return this.reporter.error('Second objid identifier OOB');
52636 id.splice(0, 2, id[0] * 40 + id[1]);
52637 }
52638
52639 // Count number of octets
52640 var size = 0;
52641 for (var i = 0; i < id.length; i++) {
52642 var ident = id[i];
52643 for (size++; ident >= 0x80; ident >>= 7)
52644 size++;
52645 }
52646
52647 var objid = new Buffer(size);
52648 var offset = objid.length - 1;
52649 for (var i = id.length - 1; i >= 0; i--) {
52650 var ident = id[i];
52651 objid[offset--] = ident & 0x7f;
52652 while ((ident >>= 7) > 0)
52653 objid[offset--] = 0x80 | (ident & 0x7f);
52654 }
52655
52656 return this._createEncoderBuffer(objid);
52657 };
52658
52659 function two(num) {
52660 if (num < 10)
52661 return '0' + num;
52662 else
52663 return num;
52664 }
52665
52666 DERNode.prototype._encodeTime = function encodeTime(time, tag) {
52667 var str;
52668 var date = new Date(time);
52669
52670 if (tag === 'gentime') {
52671 str = [
52672 two(date.getFullYear()),
52673 two(date.getUTCMonth() + 1),
52674 two(date.getUTCDate()),
52675 two(date.getUTCHours()),
52676 two(date.getUTCMinutes()),
52677 two(date.getUTCSeconds()),
52678 'Z'
52679 ].join('');
52680 } else if (tag === 'utctime') {
52681 str = [
52682 two(date.getFullYear() % 100),
52683 two(date.getUTCMonth() + 1),
52684 two(date.getUTCDate()),
52685 two(date.getUTCHours()),
52686 two(date.getUTCMinutes()),
52687 two(date.getUTCSeconds()),
52688 'Z'
52689 ].join('');
52690 } else {
52691 this.reporter.error('Encoding ' + tag + ' time is not supported yet');
52692 }
52693
52694 return this._encodeStr(str, 'octstr');
52695 };
52696
52697 DERNode.prototype._encodeNull = function encodeNull() {
52698 return this._createEncoderBuffer('');
52699 };
52700
52701 DERNode.prototype._encodeInt = function encodeInt(num, values) {
52702 if (typeof num === 'string') {
52703 if (!values)
52704 return this.reporter.error('String int or enum given, but no values map');
52705 if (!values.hasOwnProperty(num)) {
52706 return this.reporter.error('Values map doesn\'t contain: ' +
52707 JSON.stringify(num));
52708 }
52709 num = values[num];
52710 }
52711
52712 // Bignum, assume big endian
52713 if (typeof num !== 'number' && !Buffer.isBuffer(num)) {
52714 var numArray = num.toArray();
52715 if (!num.sign && numArray[0] & 0x80) {
52716 numArray.unshift(0);
52717 }
52718 num = new Buffer(numArray);
52719 }
52720
52721 if (Buffer.isBuffer(num)) {
52722 var size = num.length;
52723 if (num.length === 0)
52724 size++;
52725
52726 var out = new Buffer(size);
52727 num.copy(out);
52728 if (num.length === 0)
52729 out[0] = 0
52730 return this._createEncoderBuffer(out);
52731 }
52732
52733 if (num < 0x80)
52734 return this._createEncoderBuffer(num);
52735
52736 if (num < 0x100)
52737 return this._createEncoderBuffer([0, num]);
52738
52739 var size = 1;
52740 for (var i = num; i >= 0x100; i >>= 8)
52741 size++;
52742
52743 var out = new Array(size);
52744 for (var i = out.length - 1; i >= 0; i--) {
52745 out[i] = num & 0xff;
52746 num >>= 8;
52747 }
52748 if(out[0] & 0x80) {
52749 out.unshift(0);
52750 }
52751
52752 return this._createEncoderBuffer(new Buffer(out));
52753 };
52754
52755 DERNode.prototype._encodeBool = function encodeBool(value) {
52756 return this._createEncoderBuffer(value ? 0xff : 0);
52757 };
52758
52759 DERNode.prototype._use = function use(entity, obj) {
52760 if (typeof entity === 'function')
52761 entity = entity(obj);
52762 return entity._getEncoder('der').tree;
52763 };
52764
52765 DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {
52766 var state = this._baseState;
52767 var i;
52768 if (state['default'] === null)
52769 return false;
52770
52771 var data = dataBuffer.join();
52772 if (state.defaultBuffer === undefined)
52773 state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();
52774
52775 if (data.length !== state.defaultBuffer.length)
52776 return false;
52777
52778 for (i=0; i < data.length; i++)
52779 if (data[i] !== state.defaultBuffer[i])
52780 return false;
52781
52782 return true;
52783 };
52784
52785 // Utility methods
52786
52787 function encodeTag(tag, primitive, cls, reporter) {
52788 var res;
52789
52790 if (tag === 'seqof')
52791 tag = 'seq';
52792 else if (tag === 'setof')
52793 tag = 'set';
52794
52795 if (der.tagByName.hasOwnProperty(tag))
52796 res = der.tagByName[tag];
52797 else if (typeof tag === 'number' && (tag | 0) === tag)
52798 res = tag;
52799 else
52800 return reporter.error('Unknown tag: ' + tag);
52801
52802 if (res >= 0x1f)
52803 return reporter.error('Multi-octet tag encoding unsupported');
52804
52805 if (!primitive)
52806 res |= 0x20;
52807
52808 res |= (der.tagClassByName[cls || 'universal'] << 6);
52809
52810 return res;
52811 }
52812
52813 },{"../../asn1":1,"buffer":47,"inherits":95}],13:[function(require,module,exports){
52814 var encoders = exports;
52815
52816 encoders.der = require('./der');
52817 encoders.pem = require('./pem');
52818
52819 },{"./der":12,"./pem":14}],14:[function(require,module,exports){
52820 var inherits = require('inherits');
52821
52822 var DEREncoder = require('./der');
52823
52824 function PEMEncoder(entity) {
52825 DEREncoder.call(this, entity);
52826 this.enc = 'pem';
52827 };
52828 inherits(PEMEncoder, DEREncoder);
52829 module.exports = PEMEncoder;
52830
52831 PEMEncoder.prototype.encode = function encode(data, options) {
52832 var buf = DEREncoder.prototype.encode.call(this, data);
52833
52834 var p = buf.toString('base64');
52835 var out = [ '-----BEGIN ' + options.label + '-----' ];
52836 for (var i = 0; i < p.length; i += 64)
52837 out.push(p.slice(i, i + 64));
52838 out.push('-----END ' + options.label + '-----');
52839 return out.join('\n');
52840 };
52841
52842 },{"./der":12,"inherits":95}],15:[function(require,module,exports){
52843 (function (global){
52844 'use strict';
52845
52846 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
52847 // original notice:
52848
52849 /*!
52850 * The buffer module from node.js, for the browser.
52851 *
52852 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
52853 * @license MIT
52854 */
52855 function compare(a, b) {
52856 if (a === b) {
52857 return 0;
52858 }
52859
52860 var x = a.length;
52861 var y = b.length;
52862
52863 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
52864 if (a[i] !== b[i]) {
52865 x = a[i];
52866 y = b[i];
52867 break;
52868 }
52869 }
52870
52871 if (x < y) {
52872 return -1;
52873 }
52874 if (y < x) {
52875 return 1;
52876 }
52877 return 0;
52878 }
52879 function isBuffer(b) {
52880 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
52881 return global.Buffer.isBuffer(b);
52882 }
52883 return !!(b != null && b._isBuffer);
52884 }
52885
52886 // based on node assert, original notice:
52887
52888 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
52889 //
52890 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
52891 //
52892 // Originally from narwhal.js (http://narwhaljs.org)
52893 // Copyright (c) 2009 Thomas Robinson <280north.com>
52894 //
52895 // Permission is hereby granted, free of charge, to any person obtaining a copy
52896 // of this software and associated documentation files (the 'Software'), to
52897 // deal in the Software without restriction, including without limitation the
52898 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
52899 // sell copies of the Software, and to permit persons to whom the Software is
52900 // furnished to do so, subject to the following conditions:
52901 //
52902 // The above copyright notice and this permission notice shall be included in
52903 // all copies or substantial portions of the Software.
52904 //
52905 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
52906 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
52907 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
52908 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
52909 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
52910 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
52911
52912 var util = require('util/');
52913 var hasOwn = Object.prototype.hasOwnProperty;
52914 var pSlice = Array.prototype.slice;
52915 var functionsHaveNames = (function () {
52916 return function foo() {}.name === 'foo';
52917 }());
52918 function pToString (obj) {
52919 return Object.prototype.toString.call(obj);
52920 }
52921 function isView(arrbuf) {
52922 if (isBuffer(arrbuf)) {
52923 return false;
52924 }
52925 if (typeof global.ArrayBuffer !== 'function') {
52926 return false;
52927 }
52928 if (typeof ArrayBuffer.isView === 'function') {
52929 return ArrayBuffer.isView(arrbuf);
52930 }
52931 if (!arrbuf) {
52932 return false;
52933 }
52934 if (arrbuf instanceof DataView) {
52935 return true;
52936 }
52937 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
52938 return true;
52939 }
52940 return false;
52941 }
52942 // 1. The assert module provides functions that throw
52943 // AssertionError's when particular conditions are not met. The
52944 // assert module must conform to the following interface.
52945
52946 var assert = module.exports = ok;
52947
52948 // 2. The AssertionError is defined in assert.
52949 // new assert.AssertionError({ message: message,
52950 // actual: actual,
52951 // expected: expected })
52952
52953 var regex = /\s*function\s+([^\(\s]*)\s*/;
52954 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
52955 function getName(func) {
52956 if (!util.isFunction(func)) {
52957 return;
52958 }
52959 if (functionsHaveNames) {
52960 return func.name;
52961 }
52962 var str = func.toString();
52963 var match = str.match(regex);
52964 return match && match[1];
52965 }
52966 assert.AssertionError = function AssertionError(options) {
52967 this.name = 'AssertionError';
52968 this.actual = options.actual;
52969 this.expected = options.expected;
52970 this.operator = options.operator;
52971 if (options.message) {
52972 this.message = options.message;
52973 this.generatedMessage = false;
52974 } else {
52975 this.message = getMessage(this);
52976 this.generatedMessage = true;
52977 }
52978 var stackStartFunction = options.stackStartFunction || fail;
52979 if (Error.captureStackTrace) {
52980 Error.captureStackTrace(this, stackStartFunction);
52981 } else {
52982 // non v8 browsers so we can have a stacktrace
52983 var err = new Error();
52984 if (err.stack) {
52985 var out = err.stack;
52986
52987 // try to strip useless frames
52988 var fn_name = getName(stackStartFunction);
52989 var idx = out.indexOf('\n' + fn_name);
52990 if (idx >= 0) {
52991 // once we have located the function frame
52992 // we need to strip out everything before it (and its line)
52993 var next_line = out.indexOf('\n', idx + 1);
52994 out = out.substring(next_line + 1);
52995 }
52996
52997 this.stack = out;
52998 }
52999 }
53000 };
53001
53002 // assert.AssertionError instanceof Error
53003 util.inherits(assert.AssertionError, Error);
53004
53005 function truncate(s, n) {
53006 if (typeof s === 'string') {
53007 return s.length < n ? s : s.slice(0, n);
53008 } else {
53009 return s;
53010 }
53011 }
53012 function inspect(something) {
53013 if (functionsHaveNames || !util.isFunction(something)) {
53014 return util.inspect(something);
53015 }
53016 var rawname = getName(something);
53017 var name = rawname ? ': ' + rawname : '';
53018 return '[Function' + name + ']';
53019 }
53020 function getMessage(self) {
53021 return truncate(inspect(self.actual), 128) + ' ' +
53022 self.operator + ' ' +
53023 truncate(inspect(self.expected), 128);
53024 }
53025
53026 // At present only the three keys mentioned above are used and
53027 // understood by the spec. Implementations or sub modules can pass
53028 // other keys to the AssertionError's constructor - they will be
53029 // ignored.
53030
53031 // 3. All of the following functions must throw an AssertionError
53032 // when a corresponding condition is not met, with a message that
53033 // may be undefined if not provided. All assertion methods provide
53034 // both the actual and expected values to the assertion error for
53035 // display purposes.
53036
53037 function fail(actual, expected, message, operator, stackStartFunction) {
53038 throw new assert.AssertionError({
53039 message: message,
53040 actual: actual,
53041 expected: expected,
53042 operator: operator,
53043 stackStartFunction: stackStartFunction
53044 });
53045 }
53046
53047 // EXTENSION! allows for well behaved errors defined elsewhere.
53048 assert.fail = fail;
53049
53050 // 4. Pure assertion tests whether a value is truthy, as determined
53051 // by !!guard.
53052 // assert.ok(guard, message_opt);
53053 // This statement is equivalent to assert.equal(true, !!guard,
53054 // message_opt);. To test strictly for the value true, use
53055 // assert.strictEqual(true, guard, message_opt);.
53056
53057 function ok(value, message) {
53058 if (!value) fail(value, true, message, '==', assert.ok);
53059 }
53060 assert.ok = ok;
53061
53062 // 5. The equality assertion tests shallow, coercive equality with
53063 // ==.
53064 // assert.equal(actual, expected, message_opt);
53065
53066 assert.equal = function equal(actual, expected, message) {
53067 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
53068 };
53069
53070 // 6. The non-equality assertion tests for whether two objects are not equal
53071 // with != assert.notEqual(actual, expected, message_opt);
53072
53073 assert.notEqual = function notEqual(actual, expected, message) {
53074 if (actual == expected) {
53075 fail(actual, expected, message, '!=', assert.notEqual);
53076 }
53077 };
53078
53079 // 7. The equivalence assertion tests a deep equality relation.
53080 // assert.deepEqual(actual, expected, message_opt);
53081
53082 assert.deepEqual = function deepEqual(actual, expected, message) {
53083 if (!_deepEqual(actual, expected, false)) {
53084 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
53085 }
53086 };
53087
53088 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
53089 if (!_deepEqual(actual, expected, true)) {
53090 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
53091 }
53092 };
53093
53094 function _deepEqual(actual, expected, strict, memos) {
53095 // 7.1. All identical values are equivalent, as determined by ===.
53096 if (actual === expected) {
53097 return true;
53098 } else if (isBuffer(actual) && isBuffer(expected)) {
53099 return compare(actual, expected) === 0;
53100
53101 // 7.2. If the expected value is a Date object, the actual value is
53102 // equivalent if it is also a Date object that refers to the same time.
53103 } else if (util.isDate(actual) && util.isDate(expected)) {
53104 return actual.getTime() === expected.getTime();
53105
53106 // 7.3 If the expected value is a RegExp object, the actual value is
53107 // equivalent if it is also a RegExp object with the same source and
53108 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
53109 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
53110 return actual.source === expected.source &&
53111 actual.global === expected.global &&
53112 actual.multiline === expected.multiline &&
53113 actual.lastIndex === expected.lastIndex &&
53114 actual.ignoreCase === expected.ignoreCase;
53115
53116 // 7.4. Other pairs that do not both pass typeof value == 'object',
53117 // equivalence is determined by ==.
53118 } else if ((actual === null || typeof actual !== 'object') &&
53119 (expected === null || typeof expected !== 'object')) {
53120 return strict ? actual === expected : actual == expected;
53121
53122 // If both values are instances of typed arrays, wrap their underlying
53123 // ArrayBuffers in a Buffer each to increase performance
53124 // This optimization requires the arrays to have the same type as checked by
53125 // Object.prototype.toString (aka pToString). Never perform binary
53126 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
53127 // bit patterns are not identical.
53128 } else if (isView(actual) && isView(expected) &&
53129 pToString(actual) === pToString(expected) &&
53130 !(actual instanceof Float32Array ||
53131 actual instanceof Float64Array)) {
53132 return compare(new Uint8Array(actual.buffer),
53133 new Uint8Array(expected.buffer)) === 0;
53134
53135 // 7.5 For all other Object pairs, including Array objects, equivalence is
53136 // determined by having the same number of owned properties (as verified
53137 // with Object.prototype.hasOwnProperty.call), the same set of keys
53138 // (although not necessarily the same order), equivalent values for every
53139 // corresponding key, and an identical 'prototype' property. Note: this
53140 // accounts for both named and indexed properties on Arrays.
53141 } else if (isBuffer(actual) !== isBuffer(expected)) {
53142 return false;
53143 } else {
53144 memos = memos || {actual: [], expected: []};
53145
53146 var actualIndex = memos.actual.indexOf(actual);
53147 if (actualIndex !== -1) {
53148 if (actualIndex === memos.expected.indexOf(expected)) {
53149 return true;
53150 }
53151 }
53152
53153 memos.actual.push(actual);
53154 memos.expected.push(expected);
53155
53156 return objEquiv(actual, expected, strict, memos);
53157 }
53158 }
53159
53160 function isArguments(object) {
53161 return Object.prototype.toString.call(object) == '[object Arguments]';
53162 }
53163
53164 function objEquiv(a, b, strict, actualVisitedObjects) {
53165 if (a === null || a === undefined || b === null || b === undefined)
53166 return false;
53167 // if one is a primitive, the other must be same
53168 if (util.isPrimitive(a) || util.isPrimitive(b))
53169 return a === b;
53170 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
53171 return false;
53172 var aIsArgs = isArguments(a);
53173 var bIsArgs = isArguments(b);
53174 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
53175 return false;
53176 if (aIsArgs) {
53177 a = pSlice.call(a);
53178 b = pSlice.call(b);
53179 return _deepEqual(a, b, strict);
53180 }
53181 var ka = objectKeys(a);
53182 var kb = objectKeys(b);
53183 var key, i;
53184 // having the same number of owned properties (keys incorporates
53185 // hasOwnProperty)
53186 if (ka.length !== kb.length)
53187 return false;
53188 //the same set of keys (although not necessarily the same order),
53189 ka.sort();
53190 kb.sort();
53191 //~~~cheap key test
53192 for (i = ka.length - 1; i >= 0; i--) {
53193 if (ka[i] !== kb[i])
53194 return false;
53195 }
53196 //equivalent values for every corresponding key, and
53197 //~~~possibly expensive deep test
53198 for (i = ka.length - 1; i >= 0; i--) {
53199 key = ka[i];
53200 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
53201 return false;
53202 }
53203 return true;
53204 }
53205
53206 // 8. The non-equivalence assertion tests for any deep inequality.
53207 // assert.notDeepEqual(actual, expected, message_opt);
53208
53209 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
53210 if (_deepEqual(actual, expected, false)) {
53211 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
53212 }
53213 };
53214
53215 assert.notDeepStrictEqual = notDeepStrictEqual;
53216 function notDeepStrictEqual(actual, expected, message) {
53217 if (_deepEqual(actual, expected, true)) {
53218 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
53219 }
53220 }
53221
53222
53223 // 9. The strict equality assertion tests strict equality, as determined by ===.
53224 // assert.strictEqual(actual, expected, message_opt);
53225
53226 assert.strictEqual = function strictEqual(actual, expected, message) {
53227 if (actual !== expected) {
53228 fail(actual, expected, message, '===', assert.strictEqual);
53229 }
53230 };
53231
53232 // 10. The strict non-equality assertion tests for strict inequality, as
53233 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
53234
53235 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
53236 if (actual === expected) {
53237 fail(actual, expected, message, '!==', assert.notStrictEqual);
53238 }
53239 };
53240
53241 function expectedException(actual, expected) {
53242 if (!actual || !expected) {
53243 return false;
53244 }
53245
53246 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
53247 return expected.test(actual);
53248 }
53249
53250 try {
53251 if (actual instanceof expected) {
53252 return true;
53253 }
53254 } catch (e) {
53255 // Ignore. The instanceof check doesn't work for arrow functions.
53256 }
53257
53258 if (Error.isPrototypeOf(expected)) {
53259 return false;
53260 }
53261
53262 return expected.call({}, actual) === true;
53263 }
53264
53265 function _tryBlock(block) {
53266 var error;
53267 try {
53268 block();
53269 } catch (e) {
53270 error = e;
53271 }
53272 return error;
53273 }
53274
53275 function _throws(shouldThrow, block, expected, message) {
53276 var actual;
53277
53278 if (typeof block !== 'function') {
53279 throw new TypeError('"block" argument must be a function');
53280 }
53281
53282 if (typeof expected === 'string') {
53283 message = expected;
53284 expected = null;
53285 }
53286
53287 actual = _tryBlock(block);
53288
53289 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
53290 (message ? ' ' + message : '.');
53291
53292 if (shouldThrow && !actual) {
53293 fail(actual, expected, 'Missing expected exception' + message);
53294 }
53295
53296 var userProvidedMessage = typeof message === 'string';
53297 var isUnwantedException = !shouldThrow && util.isError(actual);
53298 var isUnexpectedException = !shouldThrow && actual && !expected;
53299
53300 if ((isUnwantedException &&
53301 userProvidedMessage &&
53302 expectedException(actual, expected)) ||
53303 isUnexpectedException) {
53304 fail(actual, expected, 'Got unwanted exception' + message);
53305 }
53306
53307 if ((shouldThrow && actual && expected &&
53308 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
53309 throw actual;
53310 }
53311 }
53312
53313 // 11. Expected to throw an error:
53314 // assert.throws(block, Error_opt, message_opt);
53315
53316 assert.throws = function(block, /*optional*/error, /*optional*/message) {
53317 _throws(true, block, error, message);
53318 };
53319
53320 // EXTENSION! This is annoying to write outside this module.
53321 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
53322 _throws(false, block, error, message);
53323 };
53324
53325 assert.ifError = function(err) { if (err) throw err; };
53326
53327 var objectKeys = Object.keys || function (obj) {
53328 var keys = [];
53329 for (var key in obj) {
53330 if (hasOwn.call(obj, key)) keys.push(key);
53331 }
53332 return keys;
53333 };
53334
53335 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
53336 },{"util/":148}],16:[function(require,module,exports){
53337 'use strict'
53338
53339 exports.byteLength = byteLength
53340 exports.toByteArray = toByteArray
53341 exports.fromByteArray = fromByteArray
53342
53343 var lookup = []
53344 var revLookup = []
53345 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
53346
53347 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
53348 for (var i = 0, len = code.length; i < len; ++i) {
53349 lookup[i] = code[i]
53350 revLookup[code.charCodeAt(i)] = i
53351 }
53352
53353 revLookup['-'.charCodeAt(0)] = 62
53354 revLookup['_'.charCodeAt(0)] = 63
53355
53356 function placeHoldersCount (b64) {
53357 var len = b64.length
53358 if (len % 4 > 0) {
53359 throw new Error('Invalid string. Length must be a multiple of 4')
53360 }
53361
53362 // the number of equal signs (place holders)
53363 // if there are two placeholders, than the two characters before it
53364 // represent one byte
53365 // if there is only one, then the three characters before it represent 2 bytes
53366 // this is just a cheap hack to not do indexOf twice
53367 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
53368 }
53369
53370 function byteLength (b64) {
53371 // base64 is 4/3 + up to two characters of the original data
53372 return b64.length * 3 / 4 - placeHoldersCount(b64)
53373 }
53374
53375 function toByteArray (b64) {
53376 var i, j, l, tmp, placeHolders, arr
53377 var len = b64.length
53378 placeHolders = placeHoldersCount(b64)
53379
53380 arr = new Arr(len * 3 / 4 - placeHolders)
53381
53382 // if there are placeholders, only get up to the last complete 4 chars
53383 l = placeHolders > 0 ? len - 4 : len
53384
53385 var L = 0
53386
53387 for (i = 0, j = 0; i < l; i += 4, j += 3) {
53388 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
53389 arr[L++] = (tmp >> 16) & 0xFF
53390 arr[L++] = (tmp >> 8) & 0xFF
53391 arr[L++] = tmp & 0xFF
53392 }
53393
53394 if (placeHolders === 2) {
53395 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
53396 arr[L++] = tmp & 0xFF
53397 } else if (placeHolders === 1) {
53398 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
53399 arr[L++] = (tmp >> 8) & 0xFF
53400 arr[L++] = tmp & 0xFF
53401 }
53402
53403 return arr
53404 }
53405
53406 function tripletToBase64 (num) {
53407 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
53408 }
53409
53410 function encodeChunk (uint8, start, end) {
53411 var tmp
53412 var output = []
53413 for (var i = start; i < end; i += 3) {
53414 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
53415 output.push(tripletToBase64(tmp))
53416 }
53417 return output.join('')
53418 }
53419
53420 function fromByteArray (uint8) {
53421 var tmp
53422 var len = uint8.length
53423 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
53424 var output = ''
53425 var parts = []
53426 var maxChunkLength = 16383 // must be multiple of 3
53427
53428 // go through the array every three bytes, we'll deal with trailing stuff later
53429 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
53430 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
53431 }
53432
53433 // pad the end with zeros, but make sure to not forget the extra bytes
53434 if (extraBytes === 1) {
53435 tmp = uint8[len - 1]
53436 output += lookup[tmp >> 2]
53437 output += lookup[(tmp << 4) & 0x3F]
53438 output += '=='
53439 } else if (extraBytes === 2) {
53440 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
53441 output += lookup[tmp >> 10]
53442 output += lookup[(tmp >> 4) & 0x3F]
53443 output += lookup[(tmp << 2) & 0x3F]
53444 output += '='
53445 }
53446
53447 parts.push(output)
53448
53449 return parts.join('')
53450 }
53451
53452 },{}],17:[function(require,module,exports){
53453 (function (module, exports) {
53454 'use strict';
53455
53456 // Utils
53457 function assert (val, msg) {
53458 if (!val) throw new Error(msg || 'Assertion failed');
53459 }
53460
53461 // Could use `inherits` module, but don't want to move from single file
53462 // architecture yet.
53463 function inherits (ctor, superCtor) {
53464 ctor.super_ = superCtor;
53465 var TempCtor = function () {};
53466 TempCtor.prototype = superCtor.prototype;
53467 ctor.prototype = new TempCtor();
53468 ctor.prototype.constructor = ctor;
53469 }
53470
53471 // BN
53472
53473 function BN (number, base, endian) {
53474 if (BN.isBN(number)) {
53475 return number;
53476 }
53477
53478 this.negative = 0;
53479 this.words = null;
53480 this.length = 0;
53481
53482 // Reduction context
53483 this.red = null;
53484
53485 if (number !== null) {
53486 if (base === 'le' || base === 'be') {
53487 endian = base;
53488 base = 10;
53489 }
53490
53491 this._init(number || 0, base || 10, endian || 'be');
53492 }
53493 }
53494 if (typeof module === 'object') {
53495 module.exports = BN;
53496 } else {
53497 exports.BN = BN;
53498 }
53499
53500 BN.BN = BN;
53501 BN.wordSize = 26;
53502
53503 var Buffer;
53504 try {
53505 Buffer = require('buf' + 'fer').Buffer;
53506 } catch (e) {
53507 }
53508
53509 BN.isBN = function isBN (num) {
53510 if (num instanceof BN) {
53511 return true;
53512 }
53513
53514 return num !== null && typeof num === 'object' &&
53515 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
53516 };
53517
53518 BN.max = function max (left, right) {
53519 if (left.cmp(right) > 0) return left;
53520 return right;
53521 };
53522
53523 BN.min = function min (left, right) {
53524 if (left.cmp(right) < 0) return left;
53525 return right;
53526 };
53527
53528 BN.prototype._init = function init (number, base, endian) {
53529 if (typeof number === 'number') {
53530 return this._initNumber(number, base, endian);
53531 }
53532
53533 if (typeof number === 'object') {
53534 return this._initArray(number, base, endian);
53535 }
53536
53537 if (base === 'hex') {
53538 base = 16;
53539 }
53540 assert(base === (base | 0) && base >= 2 && base <= 36);
53541
53542 number = number.toString().replace(/\s+/g, '');
53543 var start = 0;
53544 if (number[0] === '-') {
53545 start++;
53546 }
53547
53548 if (base === 16) {
53549 this._parseHex(number, start);
53550 } else {
53551 this._parseBase(number, base, start);
53552 }
53553
53554 if (number[0] === '-') {
53555 this.negative = 1;
53556 }
53557
53558 this.strip();
53559
53560 if (endian !== 'le') return;
53561
53562 this._initArray(this.toArray(), base, endian);
53563 };
53564
53565 BN.prototype._initNumber = function _initNumber (number, base, endian) {
53566 if (number < 0) {
53567 this.negative = 1;
53568 number = -number;
53569 }
53570 if (number < 0x4000000) {
53571 this.words = [ number & 0x3ffffff ];
53572 this.length = 1;
53573 } else if (number < 0x10000000000000) {
53574 this.words = [
53575 number & 0x3ffffff,
53576 (number / 0x4000000) & 0x3ffffff
53577 ];
53578 this.length = 2;
53579 } else {
53580 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
53581 this.words = [
53582 number & 0x3ffffff,
53583 (number / 0x4000000) & 0x3ffffff,
53584 1
53585 ];
53586 this.length = 3;
53587 }
53588
53589 if (endian !== 'le') return;
53590
53591 // Reverse the bytes
53592 this._initArray(this.toArray(), base, endian);
53593 };
53594
53595 BN.prototype._initArray = function _initArray (number, base, endian) {
53596 // Perhaps a Uint8Array
53597 assert(typeof number.length === 'number');
53598 if (number.length <= 0) {
53599 this.words = [ 0 ];
53600 this.length = 1;
53601 return this;
53602 }
53603
53604 this.length = Math.ceil(number.length / 3);
53605 this.words = new Array(this.length);
53606 for (var i = 0; i < this.length; i++) {
53607 this.words[i] = 0;
53608 }
53609
53610 var j, w;
53611 var off = 0;
53612 if (endian === 'be') {
53613 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
53614 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
53615 this.words[j] |= (w << off) & 0x3ffffff;
53616 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
53617 off += 24;
53618 if (off >= 26) {
53619 off -= 26;
53620 j++;
53621 }
53622 }
53623 } else if (endian === 'le') {
53624 for (i = 0, j = 0; i < number.length; i += 3) {
53625 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
53626 this.words[j] |= (w << off) & 0x3ffffff;
53627 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
53628 off += 24;
53629 if (off >= 26) {
53630 off -= 26;
53631 j++;
53632 }
53633 }
53634 }
53635 return this.strip();
53636 };
53637
53638 function parseHex (str, start, end) {
53639 var r = 0;
53640 var len = Math.min(str.length, end);
53641 for (var i = start; i < len; i++) {
53642 var c = str.charCodeAt(i) - 48;
53643
53644 r <<= 4;
53645
53646 // 'a' - 'f'
53647 if (c >= 49 && c <= 54) {
53648 r |= c - 49 + 0xa;
53649
53650 // 'A' - 'F'
53651 } else if (c >= 17 && c <= 22) {
53652 r |= c - 17 + 0xa;
53653
53654 // '0' - '9'
53655 } else {
53656 r |= c & 0xf;
53657 }
53658 }
53659 return r;
53660 }
53661
53662 BN.prototype._parseHex = function _parseHex (number, start) {
53663 // Create possibly bigger array to ensure that it fits the number
53664 this.length = Math.ceil((number.length - start) / 6);
53665 this.words = new Array(this.length);
53666 for (var i = 0; i < this.length; i++) {
53667 this.words[i] = 0;
53668 }
53669
53670 var j, w;
53671 // Scan 24-bit chunks and add them to the number
53672 var off = 0;
53673 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
53674 w = parseHex(number, i, i + 6);
53675 this.words[j] |= (w << off) & 0x3ffffff;
53676 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
53677 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
53678 off += 24;
53679 if (off >= 26) {
53680 off -= 26;
53681 j++;
53682 }
53683 }
53684 if (i + 6 !== start) {
53685 w = parseHex(number, start, i + 6);
53686 this.words[j] |= (w << off) & 0x3ffffff;
53687 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
53688 }
53689 this.strip();
53690 };
53691
53692 function parseBase (str, start, end, mul) {
53693 var r = 0;
53694 var len = Math.min(str.length, end);
53695 for (var i = start; i < len; i++) {
53696 var c = str.charCodeAt(i) - 48;
53697
53698 r *= mul;
53699
53700 // 'a'
53701 if (c >= 49) {
53702 r += c - 49 + 0xa;
53703
53704 // 'A'
53705 } else if (c >= 17) {
53706 r += c - 17 + 0xa;
53707
53708 // '0' - '9'
53709 } else {
53710 r += c;
53711 }
53712 }
53713 return r;
53714 }
53715
53716 BN.prototype._parseBase = function _parseBase (number, base, start) {
53717 // Initialize as zero
53718 this.words = [ 0 ];
53719 this.length = 1;
53720
53721 // Find length of limb in base
53722 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
53723 limbLen++;
53724 }
53725 limbLen--;
53726 limbPow = (limbPow / base) | 0;
53727
53728 var total = number.length - start;
53729 var mod = total % limbLen;
53730 var end = Math.min(total, total - mod) + start;
53731
53732 var word = 0;
53733 for (var i = start; i < end; i += limbLen) {
53734 word = parseBase(number, i, i + limbLen, base);
53735
53736 this.imuln(limbPow);
53737 if (this.words[0] + word < 0x4000000) {
53738 this.words[0] += word;
53739 } else {
53740 this._iaddn(word);
53741 }
53742 }
53743
53744 if (mod !== 0) {
53745 var pow = 1;
53746 word = parseBase(number, i, number.length, base);
53747
53748 for (i = 0; i < mod; i++) {
53749 pow *= base;
53750 }
53751
53752 this.imuln(pow);
53753 if (this.words[0] + word < 0x4000000) {
53754 this.words[0] += word;
53755 } else {
53756 this._iaddn(word);
53757 }
53758 }
53759 };
53760
53761 BN.prototype.copy = function copy (dest) {
53762 dest.words = new Array(this.length);
53763 for (var i = 0; i < this.length; i++) {
53764 dest.words[i] = this.words[i];
53765 }
53766 dest.length = this.length;
53767 dest.negative = this.negative;
53768 dest.red = this.red;
53769 };
53770
53771 BN.prototype.clone = function clone () {
53772 var r = new BN(null);
53773 this.copy(r);
53774 return r;
53775 };
53776
53777 BN.prototype._expand = function _expand (size) {
53778 while (this.length < size) {
53779 this.words[this.length++] = 0;
53780 }
53781 return this;
53782 };
53783
53784 // Remove leading `0` from `this`
53785 BN.prototype.strip = function strip () {
53786 while (this.length > 1 && this.words[this.length - 1] === 0) {
53787 this.length--;
53788 }
53789 return this._normSign();
53790 };
53791
53792 BN.prototype._normSign = function _normSign () {
53793 // -0 = 0
53794 if (this.length === 1 && this.words[0] === 0) {
53795 this.negative = 0;
53796 }
53797 return this;
53798 };
53799
53800 BN.prototype.inspect = function inspect () {
53801 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
53802 };
53803
53804 /*
53805
53806 var zeros = [];
53807 var groupSizes = [];
53808 var groupBases = [];
53809
53810 var s = '';
53811 var i = -1;
53812 while (++i < BN.wordSize) {
53813 zeros[i] = s;
53814 s += '0';
53815 }
53816 groupSizes[0] = 0;
53817 groupSizes[1] = 0;
53818 groupBases[0] = 0;
53819 groupBases[1] = 0;
53820 var base = 2 - 1;
53821 while (++base < 36 + 1) {
53822 var groupSize = 0;
53823 var groupBase = 1;
53824 while (groupBase < (1 << BN.wordSize) / base) {
53825 groupBase *= base;
53826 groupSize += 1;
53827 }
53828 groupSizes[base] = groupSize;
53829 groupBases[base] = groupBase;
53830 }
53831
53832 */
53833
53834 var zeros = [
53835 '',
53836 '0',
53837 '00',
53838 '000',
53839 '0000',
53840 '00000',
53841 '000000',
53842 '0000000',
53843 '00000000',
53844 '000000000',
53845 '0000000000',
53846 '00000000000',
53847 '000000000000',
53848 '0000000000000',
53849 '00000000000000',
53850 '000000000000000',
53851 '0000000000000000',
53852 '00000000000000000',
53853 '000000000000000000',
53854 '0000000000000000000',
53855 '00000000000000000000',
53856 '000000000000000000000',
53857 '0000000000000000000000',
53858 '00000000000000000000000',
53859 '000000000000000000000000',
53860 '0000000000000000000000000'
53861 ];
53862
53863 var groupSizes = [
53864 0, 0,
53865 25, 16, 12, 11, 10, 9, 8,
53866 8, 7, 7, 7, 7, 6, 6,
53867 6, 6, 6, 6, 6, 5, 5,
53868 5, 5, 5, 5, 5, 5, 5,
53869 5, 5, 5, 5, 5, 5, 5
53870 ];
53871
53872 var groupBases = [
53873 0, 0,
53874 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
53875 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
53876 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
53877 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
53878 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
53879 ];
53880
53881 BN.prototype.toString = function toString (base, padding) {
53882 base = base || 10;
53883 padding = padding | 0 || 1;
53884
53885 var out;
53886 if (base === 16 || base === 'hex') {
53887 out = '';
53888 var off = 0;
53889 var carry = 0;
53890 for (var i = 0; i < this.length; i++) {
53891 var w = this.words[i];
53892 var word = (((w << off) | carry) & 0xffffff).toString(16);
53893 carry = (w >>> (24 - off)) & 0xffffff;
53894 if (carry !== 0 || i !== this.length - 1) {
53895 out = zeros[6 - word.length] + word + out;
53896 } else {
53897 out = word + out;
53898 }
53899 off += 2;
53900 if (off >= 26) {
53901 off -= 26;
53902 i--;
53903 }
53904 }
53905 if (carry !== 0) {
53906 out = carry.toString(16) + out;
53907 }
53908 while (out.length % padding !== 0) {
53909 out = '0' + out;
53910 }
53911 if (this.negative !== 0) {
53912 out = '-' + out;
53913 }
53914 return out;
53915 }
53916
53917 if (base === (base | 0) && base >= 2 && base <= 36) {
53918 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
53919 var groupSize = groupSizes[base];
53920 // var groupBase = Math.pow(base, groupSize);
53921 var groupBase = groupBases[base];
53922 out = '';
53923 var c = this.clone();
53924 c.negative = 0;
53925 while (!c.isZero()) {
53926 var r = c.modn(groupBase).toString(base);
53927 c = c.idivn(groupBase);
53928
53929 if (!c.isZero()) {
53930 out = zeros[groupSize - r.length] + r + out;
53931 } else {
53932 out = r + out;
53933 }
53934 }
53935 if (this.isZero()) {
53936 out = '0' + out;
53937 }
53938 while (out.length % padding !== 0) {
53939 out = '0' + out;
53940 }
53941 if (this.negative !== 0) {
53942 out = '-' + out;
53943 }
53944 return out;
53945 }
53946
53947 assert(false, 'Base should be between 2 and 36');
53948 };
53949
53950 BN.prototype.toNumber = function toNumber () {
53951 var ret = this.words[0];
53952 if (this.length === 2) {
53953 ret += this.words[1] * 0x4000000;
53954 } else if (this.length === 3 && this.words[2] === 0x01) {
53955 // NOTE: at this stage it is known that the top bit is set
53956 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
53957 } else if (this.length > 2) {
53958 assert(false, 'Number can only safely store up to 53 bits');
53959 }
53960 return (this.negative !== 0) ? -ret : ret;
53961 };
53962
53963 BN.prototype.toJSON = function toJSON () {
53964 return this.toString(16);
53965 };
53966
53967 BN.prototype.toBuffer = function toBuffer (endian, length) {
53968 assert(typeof Buffer !== 'undefined');
53969 return this.toArrayLike(Buffer, endian, length);
53970 };
53971
53972 BN.prototype.toArray = function toArray (endian, length) {
53973 return this.toArrayLike(Array, endian, length);
53974 };
53975
53976 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
53977 var byteLength = this.byteLength();
53978 var reqLength = length || Math.max(1, byteLength);
53979 assert(byteLength <= reqLength, 'byte array longer than desired length');
53980 assert(reqLength > 0, 'Requested array length <= 0');
53981
53982 this.strip();
53983 var littleEndian = endian === 'le';
53984 var res = new ArrayType(reqLength);
53985
53986 var b, i;
53987 var q = this.clone();
53988 if (!littleEndian) {
53989 // Assume big-endian
53990 for (i = 0; i < reqLength - byteLength; i++) {
53991 res[i] = 0;
53992 }
53993
53994 for (i = 0; !q.isZero(); i++) {
53995 b = q.andln(0xff);
53996 q.iushrn(8);
53997
53998 res[reqLength - i - 1] = b;
53999 }
54000 } else {
54001 for (i = 0; !q.isZero(); i++) {
54002 b = q.andln(0xff);
54003 q.iushrn(8);
54004
54005 res[i] = b;
54006 }
54007
54008 for (; i < reqLength; i++) {
54009 res[i] = 0;
54010 }
54011 }
54012
54013 return res;
54014 };
54015
54016 if (Math.clz32) {
54017 BN.prototype._countBits = function _countBits (w) {
54018 return 32 - Math.clz32(w);
54019 };
54020 } else {
54021 BN.prototype._countBits = function _countBits (w) {
54022 var t = w;
54023 var r = 0;
54024 if (t >= 0x1000) {
54025 r += 13;
54026 t >>>= 13;
54027 }
54028 if (t >= 0x40) {
54029 r += 7;
54030 t >>>= 7;
54031 }
54032 if (t >= 0x8) {
54033 r += 4;
54034 t >>>= 4;
54035 }
54036 if (t >= 0x02) {
54037 r += 2;
54038 t >>>= 2;
54039 }
54040 return r + t;
54041 };
54042 }
54043
54044 BN.prototype._zeroBits = function _zeroBits (w) {
54045 // Short-cut
54046 if (w === 0) return 26;
54047
54048 var t = w;
54049 var r = 0;
54050 if ((t & 0x1fff) === 0) {
54051 r += 13;
54052 t >>>= 13;
54053 }
54054 if ((t & 0x7f) === 0) {
54055 r += 7;
54056 t >>>= 7;
54057 }
54058 if ((t & 0xf) === 0) {
54059 r += 4;
54060 t >>>= 4;
54061 }
54062 if ((t & 0x3) === 0) {
54063 r += 2;
54064 t >>>= 2;
54065 }
54066 if ((t & 0x1) === 0) {
54067 r++;
54068 }
54069 return r;
54070 };
54071
54072 // Return number of used bits in a BN
54073 BN.prototype.bitLength = function bitLength () {
54074 var w = this.words[this.length - 1];
54075 var hi = this._countBits(w);
54076 return (this.length - 1) * 26 + hi;
54077 };
54078
54079 function toBitArray (num) {
54080 var w = new Array(num.bitLength());
54081
54082 for (var bit = 0; bit < w.length; bit++) {
54083 var off = (bit / 26) | 0;
54084 var wbit = bit % 26;
54085
54086 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
54087 }
54088
54089 return w;
54090 }
54091
54092 // Number of trailing zero bits
54093 BN.prototype.zeroBits = function zeroBits () {
54094 if (this.isZero()) return 0;
54095
54096 var r = 0;
54097 for (var i = 0; i < this.length; i++) {
54098 var b = this._zeroBits(this.words[i]);
54099 r += b;
54100 if (b !== 26) break;
54101 }
54102 return r;
54103 };
54104
54105 BN.prototype.byteLength = function byteLength () {
54106 return Math.ceil(this.bitLength() / 8);
54107 };
54108
54109 BN.prototype.toTwos = function toTwos (width) {
54110 if (this.negative !== 0) {
54111 return this.abs().inotn(width).iaddn(1);
54112 }
54113 return this.clone();
54114 };
54115
54116 BN.prototype.fromTwos = function fromTwos (width) {
54117 if (this.testn(width - 1)) {
54118 return this.notn(width).iaddn(1).ineg();
54119 }
54120 return this.clone();
54121 };
54122
54123 BN.prototype.isNeg = function isNeg () {
54124 return this.negative !== 0;
54125 };
54126
54127 // Return negative clone of `this`
54128 BN.prototype.neg = function neg () {
54129 return this.clone().ineg();
54130 };
54131
54132 BN.prototype.ineg = function ineg () {
54133 if (!this.isZero()) {
54134 this.negative ^= 1;
54135 }
54136
54137 return this;
54138 };
54139
54140 // Or `num` with `this` in-place
54141 BN.prototype.iuor = function iuor (num) {
54142 while (this.length < num.length) {
54143 this.words[this.length++] = 0;
54144 }
54145
54146 for (var i = 0; i < num.length; i++) {
54147 this.words[i] = this.words[i] | num.words[i];
54148 }
54149
54150 return this.strip();
54151 };
54152
54153 BN.prototype.ior = function ior (num) {
54154 assert((this.negative | num.negative) === 0);
54155 return this.iuor(num);
54156 };
54157
54158 // Or `num` with `this`
54159 BN.prototype.or = function or (num) {
54160 if (this.length > num.length) return this.clone().ior(num);
54161 return num.clone().ior(this);
54162 };
54163
54164 BN.prototype.uor = function uor (num) {
54165 if (this.length > num.length) return this.clone().iuor(num);
54166 return num.clone().iuor(this);
54167 };
54168
54169 // And `num` with `this` in-place
54170 BN.prototype.iuand = function iuand (num) {
54171 // b = min-length(num, this)
54172 var b;
54173 if (this.length > num.length) {
54174 b = num;
54175 } else {
54176 b = this;
54177 }
54178
54179 for (var i = 0; i < b.length; i++) {
54180 this.words[i] = this.words[i] & num.words[i];
54181 }
54182
54183 this.length = b.length;
54184
54185 return this.strip();
54186 };
54187
54188 BN.prototype.iand = function iand (num) {
54189 assert((this.negative | num.negative) === 0);
54190 return this.iuand(num);
54191 };
54192
54193 // And `num` with `this`
54194 BN.prototype.and = function and (num) {
54195 if (this.length > num.length) return this.clone().iand(num);
54196 return num.clone().iand(this);
54197 };
54198
54199 BN.prototype.uand = function uand (num) {
54200 if (this.length > num.length) return this.clone().iuand(num);
54201 return num.clone().iuand(this);
54202 };
54203
54204 // Xor `num` with `this` in-place
54205 BN.prototype.iuxor = function iuxor (num) {
54206 // a.length > b.length
54207 var a;
54208 var b;
54209 if (this.length > num.length) {
54210 a = this;
54211 b = num;
54212 } else {
54213 a = num;
54214 b = this;
54215 }
54216
54217 for (var i = 0; i < b.length; i++) {
54218 this.words[i] = a.words[i] ^ b.words[i];
54219 }
54220
54221 if (this !== a) {
54222 for (; i < a.length; i++) {
54223 this.words[i] = a.words[i];
54224 }
54225 }
54226
54227 this.length = a.length;
54228
54229 return this.strip();
54230 };
54231
54232 BN.prototype.ixor = function ixor (num) {
54233 assert((this.negative | num.negative) === 0);
54234 return this.iuxor(num);
54235 };
54236
54237 // Xor `num` with `this`
54238 BN.prototype.xor = function xor (num) {
54239 if (this.length > num.length) return this.clone().ixor(num);
54240 return num.clone().ixor(this);
54241 };
54242
54243 BN.prototype.uxor = function uxor (num) {
54244 if (this.length > num.length) return this.clone().iuxor(num);
54245 return num.clone().iuxor(this);
54246 };
54247
54248 // Not ``this`` with ``width`` bitwidth
54249 BN.prototype.inotn = function inotn (width) {
54250 assert(typeof width === 'number' && width >= 0);
54251
54252 var bytesNeeded = Math.ceil(width / 26) | 0;
54253 var bitsLeft = width % 26;
54254
54255 // Extend the buffer with leading zeroes
54256 this._expand(bytesNeeded);
54257
54258 if (bitsLeft > 0) {
54259 bytesNeeded--;
54260 }
54261
54262 // Handle complete words
54263 for (var i = 0; i < bytesNeeded; i++) {
54264 this.words[i] = ~this.words[i] & 0x3ffffff;
54265 }
54266
54267 // Handle the residue
54268 if (bitsLeft > 0) {
54269 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
54270 }
54271
54272 // And remove leading zeroes
54273 return this.strip();
54274 };
54275
54276 BN.prototype.notn = function notn (width) {
54277 return this.clone().inotn(width);
54278 };
54279
54280 // Set `bit` of `this`
54281 BN.prototype.setn = function setn (bit, val) {
54282 assert(typeof bit === 'number' && bit >= 0);
54283
54284 var off = (bit / 26) | 0;
54285 var wbit = bit % 26;
54286
54287 this._expand(off + 1);
54288
54289 if (val) {
54290 this.words[off] = this.words[off] | (1 << wbit);
54291 } else {
54292 this.words[off] = this.words[off] & ~(1 << wbit);
54293 }
54294
54295 return this.strip();
54296 };
54297
54298 // Add `num` to `this` in-place
54299 BN.prototype.iadd = function iadd (num) {
54300 var r;
54301
54302 // negative + positive
54303 if (this.negative !== 0 && num.negative === 0) {
54304 this.negative = 0;
54305 r = this.isub(num);
54306 this.negative ^= 1;
54307 return this._normSign();
54308
54309 // positive + negative
54310 } else if (this.negative === 0 && num.negative !== 0) {
54311 num.negative = 0;
54312 r = this.isub(num);
54313 num.negative = 1;
54314 return r._normSign();
54315 }
54316
54317 // a.length > b.length
54318 var a, b;
54319 if (this.length > num.length) {
54320 a = this;
54321 b = num;
54322 } else {
54323 a = num;
54324 b = this;
54325 }
54326
54327 var carry = 0;
54328 for (var i = 0; i < b.length; i++) {
54329 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
54330 this.words[i] = r & 0x3ffffff;
54331 carry = r >>> 26;
54332 }
54333 for (; carry !== 0 && i < a.length; i++) {
54334 r = (a.words[i] | 0) + carry;
54335 this.words[i] = r & 0x3ffffff;
54336 carry = r >>> 26;
54337 }
54338
54339 this.length = a.length;
54340 if (carry !== 0) {
54341 this.words[this.length] = carry;
54342 this.length++;
54343 // Copy the rest of the words
54344 } else if (a !== this) {
54345 for (; i < a.length; i++) {
54346 this.words[i] = a.words[i];
54347 }
54348 }
54349
54350 return this;
54351 };
54352
54353 // Add `num` to `this`
54354 BN.prototype.add = function add (num) {
54355 var res;
54356 if (num.negative !== 0 && this.negative === 0) {
54357 num.negative = 0;
54358 res = this.sub(num);
54359 num.negative ^= 1;
54360 return res;
54361 } else if (num.negative === 0 && this.negative !== 0) {
54362 this.negative = 0;
54363 res = num.sub(this);
54364 this.negative = 1;
54365 return res;
54366 }
54367
54368 if (this.length > num.length) return this.clone().iadd(num);
54369
54370 return num.clone().iadd(this);
54371 };
54372
54373 // Subtract `num` from `this` in-place
54374 BN.prototype.isub = function isub (num) {
54375 // this - (-num) = this + num
54376 if (num.negative !== 0) {
54377 num.negative = 0;
54378 var r = this.iadd(num);
54379 num.negative = 1;
54380 return r._normSign();
54381
54382 // -this - num = -(this + num)
54383 } else if (this.negative !== 0) {
54384 this.negative = 0;
54385 this.iadd(num);
54386 this.negative = 1;
54387 return this._normSign();
54388 }
54389
54390 // At this point both numbers are positive
54391 var cmp = this.cmp(num);
54392
54393 // Optimization - zeroify
54394 if (cmp === 0) {
54395 this.negative = 0;
54396 this.length = 1;
54397 this.words[0] = 0;
54398 return this;
54399 }
54400
54401 // a > b
54402 var a, b;
54403 if (cmp > 0) {
54404 a = this;
54405 b = num;
54406 } else {
54407 a = num;
54408 b = this;
54409 }
54410
54411 var carry = 0;
54412 for (var i = 0; i < b.length; i++) {
54413 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
54414 carry = r >> 26;
54415 this.words[i] = r & 0x3ffffff;
54416 }
54417 for (; carry !== 0 && i < a.length; i++) {
54418 r = (a.words[i] | 0) + carry;
54419 carry = r >> 26;
54420 this.words[i] = r & 0x3ffffff;
54421 }
54422
54423 // Copy rest of the words
54424 if (carry === 0 && i < a.length && a !== this) {
54425 for (; i < a.length; i++) {
54426 this.words[i] = a.words[i];
54427 }
54428 }
54429
54430 this.length = Math.max(this.length, i);
54431
54432 if (a !== this) {
54433 this.negative = 1;
54434 }
54435
54436 return this.strip();
54437 };
54438
54439 // Subtract `num` from `this`
54440 BN.prototype.sub = function sub (num) {
54441 return this.clone().isub(num);
54442 };
54443
54444 function smallMulTo (self, num, out) {
54445 out.negative = num.negative ^ self.negative;
54446 var len = (self.length + num.length) | 0;
54447 out.length = len;
54448 len = (len - 1) | 0;
54449
54450 // Peel one iteration (compiler can't do it, because of code complexity)
54451 var a = self.words[0] | 0;
54452 var b = num.words[0] | 0;
54453 var r = a * b;
54454
54455 var lo = r & 0x3ffffff;
54456 var carry = (r / 0x4000000) | 0;
54457 out.words[0] = lo;
54458
54459 for (var k = 1; k < len; k++) {
54460 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
54461 // note that ncarry could be >= 0x3ffffff
54462 var ncarry = carry >>> 26;
54463 var rword = carry & 0x3ffffff;
54464 var maxJ = Math.min(k, num.length - 1);
54465 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
54466 var i = (k - j) | 0;
54467 a = self.words[i] | 0;
54468 b = num.words[j] | 0;
54469 r = a * b + rword;
54470 ncarry += (r / 0x4000000) | 0;
54471 rword = r & 0x3ffffff;
54472 }
54473 out.words[k] = rword | 0;
54474 carry = ncarry | 0;
54475 }
54476 if (carry !== 0) {
54477 out.words[k] = carry | 0;
54478 } else {
54479 out.length--;
54480 }
54481
54482 return out.strip();
54483 }
54484
54485 // TODO(indutny): it may be reasonable to omit it for users who don't need
54486 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
54487 // multiplication (like elliptic secp256k1).
54488 var comb10MulTo = function comb10MulTo (self, num, out) {
54489 var a = self.words;
54490 var b = num.words;
54491 var o = out.words;
54492 var c = 0;
54493 var lo;
54494 var mid;
54495 var hi;
54496 var a0 = a[0] | 0;
54497 var al0 = a0 & 0x1fff;
54498 var ah0 = a0 >>> 13;
54499 var a1 = a[1] | 0;
54500 var al1 = a1 & 0x1fff;
54501 var ah1 = a1 >>> 13;
54502 var a2 = a[2] | 0;
54503 var al2 = a2 & 0x1fff;
54504 var ah2 = a2 >>> 13;
54505 var a3 = a[3] | 0;
54506 var al3 = a3 & 0x1fff;
54507 var ah3 = a3 >>> 13;
54508 var a4 = a[4] | 0;
54509 var al4 = a4 & 0x1fff;
54510 var ah4 = a4 >>> 13;
54511 var a5 = a[5] | 0;
54512 var al5 = a5 & 0x1fff;
54513 var ah5 = a5 >>> 13;
54514 var a6 = a[6] | 0;
54515 var al6 = a6 & 0x1fff;
54516 var ah6 = a6 >>> 13;
54517 var a7 = a[7] | 0;
54518 var al7 = a7 & 0x1fff;
54519 var ah7 = a7 >>> 13;
54520 var a8 = a[8] | 0;
54521 var al8 = a8 & 0x1fff;
54522 var ah8 = a8 >>> 13;
54523 var a9 = a[9] | 0;
54524 var al9 = a9 & 0x1fff;
54525 var ah9 = a9 >>> 13;
54526 var b0 = b[0] | 0;
54527 var bl0 = b0 & 0x1fff;
54528 var bh0 = b0 >>> 13;
54529 var b1 = b[1] | 0;
54530 var bl1 = b1 & 0x1fff;
54531 var bh1 = b1 >>> 13;
54532 var b2 = b[2] | 0;
54533 var bl2 = b2 & 0x1fff;
54534 var bh2 = b2 >>> 13;
54535 var b3 = b[3] | 0;
54536 var bl3 = b3 & 0x1fff;
54537 var bh3 = b3 >>> 13;
54538 var b4 = b[4] | 0;
54539 var bl4 = b4 & 0x1fff;
54540 var bh4 = b4 >>> 13;
54541 var b5 = b[5] | 0;
54542 var bl5 = b5 & 0x1fff;
54543 var bh5 = b5 >>> 13;
54544 var b6 = b[6] | 0;
54545 var bl6 = b6 & 0x1fff;
54546 var bh6 = b6 >>> 13;
54547 var b7 = b[7] | 0;
54548 var bl7 = b7 & 0x1fff;
54549 var bh7 = b7 >>> 13;
54550 var b8 = b[8] | 0;
54551 var bl8 = b8 & 0x1fff;
54552 var bh8 = b8 >>> 13;
54553 var b9 = b[9] | 0;
54554 var bl9 = b9 & 0x1fff;
54555 var bh9 = b9 >>> 13;
54556
54557 out.negative = self.negative ^ num.negative;
54558 out.length = 19;
54559 /* k = 0 */
54560 lo = Math.imul(al0, bl0);
54561 mid = Math.imul(al0, bh0);
54562 mid = (mid + Math.imul(ah0, bl0)) | 0;
54563 hi = Math.imul(ah0, bh0);
54564 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54565 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
54566 w0 &= 0x3ffffff;
54567 /* k = 1 */
54568 lo = Math.imul(al1, bl0);
54569 mid = Math.imul(al1, bh0);
54570 mid = (mid + Math.imul(ah1, bl0)) | 0;
54571 hi = Math.imul(ah1, bh0);
54572 lo = (lo + Math.imul(al0, bl1)) | 0;
54573 mid = (mid + Math.imul(al0, bh1)) | 0;
54574 mid = (mid + Math.imul(ah0, bl1)) | 0;
54575 hi = (hi + Math.imul(ah0, bh1)) | 0;
54576 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54577 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
54578 w1 &= 0x3ffffff;
54579 /* k = 2 */
54580 lo = Math.imul(al2, bl0);
54581 mid = Math.imul(al2, bh0);
54582 mid = (mid + Math.imul(ah2, bl0)) | 0;
54583 hi = Math.imul(ah2, bh0);
54584 lo = (lo + Math.imul(al1, bl1)) | 0;
54585 mid = (mid + Math.imul(al1, bh1)) | 0;
54586 mid = (mid + Math.imul(ah1, bl1)) | 0;
54587 hi = (hi + Math.imul(ah1, bh1)) | 0;
54588 lo = (lo + Math.imul(al0, bl2)) | 0;
54589 mid = (mid + Math.imul(al0, bh2)) | 0;
54590 mid = (mid + Math.imul(ah0, bl2)) | 0;
54591 hi = (hi + Math.imul(ah0, bh2)) | 0;
54592 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54593 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
54594 w2 &= 0x3ffffff;
54595 /* k = 3 */
54596 lo = Math.imul(al3, bl0);
54597 mid = Math.imul(al3, bh0);
54598 mid = (mid + Math.imul(ah3, bl0)) | 0;
54599 hi = Math.imul(ah3, bh0);
54600 lo = (lo + Math.imul(al2, bl1)) | 0;
54601 mid = (mid + Math.imul(al2, bh1)) | 0;
54602 mid = (mid + Math.imul(ah2, bl1)) | 0;
54603 hi = (hi + Math.imul(ah2, bh1)) | 0;
54604 lo = (lo + Math.imul(al1, bl2)) | 0;
54605 mid = (mid + Math.imul(al1, bh2)) | 0;
54606 mid = (mid + Math.imul(ah1, bl2)) | 0;
54607 hi = (hi + Math.imul(ah1, bh2)) | 0;
54608 lo = (lo + Math.imul(al0, bl3)) | 0;
54609 mid = (mid + Math.imul(al0, bh3)) | 0;
54610 mid = (mid + Math.imul(ah0, bl3)) | 0;
54611 hi = (hi + Math.imul(ah0, bh3)) | 0;
54612 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54613 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
54614 w3 &= 0x3ffffff;
54615 /* k = 4 */
54616 lo = Math.imul(al4, bl0);
54617 mid = Math.imul(al4, bh0);
54618 mid = (mid + Math.imul(ah4, bl0)) | 0;
54619 hi = Math.imul(ah4, bh0);
54620 lo = (lo + Math.imul(al3, bl1)) | 0;
54621 mid = (mid + Math.imul(al3, bh1)) | 0;
54622 mid = (mid + Math.imul(ah3, bl1)) | 0;
54623 hi = (hi + Math.imul(ah3, bh1)) | 0;
54624 lo = (lo + Math.imul(al2, bl2)) | 0;
54625 mid = (mid + Math.imul(al2, bh2)) | 0;
54626 mid = (mid + Math.imul(ah2, bl2)) | 0;
54627 hi = (hi + Math.imul(ah2, bh2)) | 0;
54628 lo = (lo + Math.imul(al1, bl3)) | 0;
54629 mid = (mid + Math.imul(al1, bh3)) | 0;
54630 mid = (mid + Math.imul(ah1, bl3)) | 0;
54631 hi = (hi + Math.imul(ah1, bh3)) | 0;
54632 lo = (lo + Math.imul(al0, bl4)) | 0;
54633 mid = (mid + Math.imul(al0, bh4)) | 0;
54634 mid = (mid + Math.imul(ah0, bl4)) | 0;
54635 hi = (hi + Math.imul(ah0, bh4)) | 0;
54636 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54637 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
54638 w4 &= 0x3ffffff;
54639 /* k = 5 */
54640 lo = Math.imul(al5, bl0);
54641 mid = Math.imul(al5, bh0);
54642 mid = (mid + Math.imul(ah5, bl0)) | 0;
54643 hi = Math.imul(ah5, bh0);
54644 lo = (lo + Math.imul(al4, bl1)) | 0;
54645 mid = (mid + Math.imul(al4, bh1)) | 0;
54646 mid = (mid + Math.imul(ah4, bl1)) | 0;
54647 hi = (hi + Math.imul(ah4, bh1)) | 0;
54648 lo = (lo + Math.imul(al3, bl2)) | 0;
54649 mid = (mid + Math.imul(al3, bh2)) | 0;
54650 mid = (mid + Math.imul(ah3, bl2)) | 0;
54651 hi = (hi + Math.imul(ah3, bh2)) | 0;
54652 lo = (lo + Math.imul(al2, bl3)) | 0;
54653 mid = (mid + Math.imul(al2, bh3)) | 0;
54654 mid = (mid + Math.imul(ah2, bl3)) | 0;
54655 hi = (hi + Math.imul(ah2, bh3)) | 0;
54656 lo = (lo + Math.imul(al1, bl4)) | 0;
54657 mid = (mid + Math.imul(al1, bh4)) | 0;
54658 mid = (mid + Math.imul(ah1, bl4)) | 0;
54659 hi = (hi + Math.imul(ah1, bh4)) | 0;
54660 lo = (lo + Math.imul(al0, bl5)) | 0;
54661 mid = (mid + Math.imul(al0, bh5)) | 0;
54662 mid = (mid + Math.imul(ah0, bl5)) | 0;
54663 hi = (hi + Math.imul(ah0, bh5)) | 0;
54664 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54665 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
54666 w5 &= 0x3ffffff;
54667 /* k = 6 */
54668 lo = Math.imul(al6, bl0);
54669 mid = Math.imul(al6, bh0);
54670 mid = (mid + Math.imul(ah6, bl0)) | 0;
54671 hi = Math.imul(ah6, bh0);
54672 lo = (lo + Math.imul(al5, bl1)) | 0;
54673 mid = (mid + Math.imul(al5, bh1)) | 0;
54674 mid = (mid + Math.imul(ah5, bl1)) | 0;
54675 hi = (hi + Math.imul(ah5, bh1)) | 0;
54676 lo = (lo + Math.imul(al4, bl2)) | 0;
54677 mid = (mid + Math.imul(al4, bh2)) | 0;
54678 mid = (mid + Math.imul(ah4, bl2)) | 0;
54679 hi = (hi + Math.imul(ah4, bh2)) | 0;
54680 lo = (lo + Math.imul(al3, bl3)) | 0;
54681 mid = (mid + Math.imul(al3, bh3)) | 0;
54682 mid = (mid + Math.imul(ah3, bl3)) | 0;
54683 hi = (hi + Math.imul(ah3, bh3)) | 0;
54684 lo = (lo + Math.imul(al2, bl4)) | 0;
54685 mid = (mid + Math.imul(al2, bh4)) | 0;
54686 mid = (mid + Math.imul(ah2, bl4)) | 0;
54687 hi = (hi + Math.imul(ah2, bh4)) | 0;
54688 lo = (lo + Math.imul(al1, bl5)) | 0;
54689 mid = (mid + Math.imul(al1, bh5)) | 0;
54690 mid = (mid + Math.imul(ah1, bl5)) | 0;
54691 hi = (hi + Math.imul(ah1, bh5)) | 0;
54692 lo = (lo + Math.imul(al0, bl6)) | 0;
54693 mid = (mid + Math.imul(al0, bh6)) | 0;
54694 mid = (mid + Math.imul(ah0, bl6)) | 0;
54695 hi = (hi + Math.imul(ah0, bh6)) | 0;
54696 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54697 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
54698 w6 &= 0x3ffffff;
54699 /* k = 7 */
54700 lo = Math.imul(al7, bl0);
54701 mid = Math.imul(al7, bh0);
54702 mid = (mid + Math.imul(ah7, bl0)) | 0;
54703 hi = Math.imul(ah7, bh0);
54704 lo = (lo + Math.imul(al6, bl1)) | 0;
54705 mid = (mid + Math.imul(al6, bh1)) | 0;
54706 mid = (mid + Math.imul(ah6, bl1)) | 0;
54707 hi = (hi + Math.imul(ah6, bh1)) | 0;
54708 lo = (lo + Math.imul(al5, bl2)) | 0;
54709 mid = (mid + Math.imul(al5, bh2)) | 0;
54710 mid = (mid + Math.imul(ah5, bl2)) | 0;
54711 hi = (hi + Math.imul(ah5, bh2)) | 0;
54712 lo = (lo + Math.imul(al4, bl3)) | 0;
54713 mid = (mid + Math.imul(al4, bh3)) | 0;
54714 mid = (mid + Math.imul(ah4, bl3)) | 0;
54715 hi = (hi + Math.imul(ah4, bh3)) | 0;
54716 lo = (lo + Math.imul(al3, bl4)) | 0;
54717 mid = (mid + Math.imul(al3, bh4)) | 0;
54718 mid = (mid + Math.imul(ah3, bl4)) | 0;
54719 hi = (hi + Math.imul(ah3, bh4)) | 0;
54720 lo = (lo + Math.imul(al2, bl5)) | 0;
54721 mid = (mid + Math.imul(al2, bh5)) | 0;
54722 mid = (mid + Math.imul(ah2, bl5)) | 0;
54723 hi = (hi + Math.imul(ah2, bh5)) | 0;
54724 lo = (lo + Math.imul(al1, bl6)) | 0;
54725 mid = (mid + Math.imul(al1, bh6)) | 0;
54726 mid = (mid + Math.imul(ah1, bl6)) | 0;
54727 hi = (hi + Math.imul(ah1, bh6)) | 0;
54728 lo = (lo + Math.imul(al0, bl7)) | 0;
54729 mid = (mid + Math.imul(al0, bh7)) | 0;
54730 mid = (mid + Math.imul(ah0, bl7)) | 0;
54731 hi = (hi + Math.imul(ah0, bh7)) | 0;
54732 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54733 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
54734 w7 &= 0x3ffffff;
54735 /* k = 8 */
54736 lo = Math.imul(al8, bl0);
54737 mid = Math.imul(al8, bh0);
54738 mid = (mid + Math.imul(ah8, bl0)) | 0;
54739 hi = Math.imul(ah8, bh0);
54740 lo = (lo + Math.imul(al7, bl1)) | 0;
54741 mid = (mid + Math.imul(al7, bh1)) | 0;
54742 mid = (mid + Math.imul(ah7, bl1)) | 0;
54743 hi = (hi + Math.imul(ah7, bh1)) | 0;
54744 lo = (lo + Math.imul(al6, bl2)) | 0;
54745 mid = (mid + Math.imul(al6, bh2)) | 0;
54746 mid = (mid + Math.imul(ah6, bl2)) | 0;
54747 hi = (hi + Math.imul(ah6, bh2)) | 0;
54748 lo = (lo + Math.imul(al5, bl3)) | 0;
54749 mid = (mid + Math.imul(al5, bh3)) | 0;
54750 mid = (mid + Math.imul(ah5, bl3)) | 0;
54751 hi = (hi + Math.imul(ah5, bh3)) | 0;
54752 lo = (lo + Math.imul(al4, bl4)) | 0;
54753 mid = (mid + Math.imul(al4, bh4)) | 0;
54754 mid = (mid + Math.imul(ah4, bl4)) | 0;
54755 hi = (hi + Math.imul(ah4, bh4)) | 0;
54756 lo = (lo + Math.imul(al3, bl5)) | 0;
54757 mid = (mid + Math.imul(al3, bh5)) | 0;
54758 mid = (mid + Math.imul(ah3, bl5)) | 0;
54759 hi = (hi + Math.imul(ah3, bh5)) | 0;
54760 lo = (lo + Math.imul(al2, bl6)) | 0;
54761 mid = (mid + Math.imul(al2, bh6)) | 0;
54762 mid = (mid + Math.imul(ah2, bl6)) | 0;
54763 hi = (hi + Math.imul(ah2, bh6)) | 0;
54764 lo = (lo + Math.imul(al1, bl7)) | 0;
54765 mid = (mid + Math.imul(al1, bh7)) | 0;
54766 mid = (mid + Math.imul(ah1, bl7)) | 0;
54767 hi = (hi + Math.imul(ah1, bh7)) | 0;
54768 lo = (lo + Math.imul(al0, bl8)) | 0;
54769 mid = (mid + Math.imul(al0, bh8)) | 0;
54770 mid = (mid + Math.imul(ah0, bl8)) | 0;
54771 hi = (hi + Math.imul(ah0, bh8)) | 0;
54772 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54773 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
54774 w8 &= 0x3ffffff;
54775 /* k = 9 */
54776 lo = Math.imul(al9, bl0);
54777 mid = Math.imul(al9, bh0);
54778 mid = (mid + Math.imul(ah9, bl0)) | 0;
54779 hi = Math.imul(ah9, bh0);
54780 lo = (lo + Math.imul(al8, bl1)) | 0;
54781 mid = (mid + Math.imul(al8, bh1)) | 0;
54782 mid = (mid + Math.imul(ah8, bl1)) | 0;
54783 hi = (hi + Math.imul(ah8, bh1)) | 0;
54784 lo = (lo + Math.imul(al7, bl2)) | 0;
54785 mid = (mid + Math.imul(al7, bh2)) | 0;
54786 mid = (mid + Math.imul(ah7, bl2)) | 0;
54787 hi = (hi + Math.imul(ah7, bh2)) | 0;
54788 lo = (lo + Math.imul(al6, bl3)) | 0;
54789 mid = (mid + Math.imul(al6, bh3)) | 0;
54790 mid = (mid + Math.imul(ah6, bl3)) | 0;
54791 hi = (hi + Math.imul(ah6, bh3)) | 0;
54792 lo = (lo + Math.imul(al5, bl4)) | 0;
54793 mid = (mid + Math.imul(al5, bh4)) | 0;
54794 mid = (mid + Math.imul(ah5, bl4)) | 0;
54795 hi = (hi + Math.imul(ah5, bh4)) | 0;
54796 lo = (lo + Math.imul(al4, bl5)) | 0;
54797 mid = (mid + Math.imul(al4, bh5)) | 0;
54798 mid = (mid + Math.imul(ah4, bl5)) | 0;
54799 hi = (hi + Math.imul(ah4, bh5)) | 0;
54800 lo = (lo + Math.imul(al3, bl6)) | 0;
54801 mid = (mid + Math.imul(al3, bh6)) | 0;
54802 mid = (mid + Math.imul(ah3, bl6)) | 0;
54803 hi = (hi + Math.imul(ah3, bh6)) | 0;
54804 lo = (lo + Math.imul(al2, bl7)) | 0;
54805 mid = (mid + Math.imul(al2, bh7)) | 0;
54806 mid = (mid + Math.imul(ah2, bl7)) | 0;
54807 hi = (hi + Math.imul(ah2, bh7)) | 0;
54808 lo = (lo + Math.imul(al1, bl8)) | 0;
54809 mid = (mid + Math.imul(al1, bh8)) | 0;
54810 mid = (mid + Math.imul(ah1, bl8)) | 0;
54811 hi = (hi + Math.imul(ah1, bh8)) | 0;
54812 lo = (lo + Math.imul(al0, bl9)) | 0;
54813 mid = (mid + Math.imul(al0, bh9)) | 0;
54814 mid = (mid + Math.imul(ah0, bl9)) | 0;
54815 hi = (hi + Math.imul(ah0, bh9)) | 0;
54816 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54817 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
54818 w9 &= 0x3ffffff;
54819 /* k = 10 */
54820 lo = Math.imul(al9, bl1);
54821 mid = Math.imul(al9, bh1);
54822 mid = (mid + Math.imul(ah9, bl1)) | 0;
54823 hi = Math.imul(ah9, bh1);
54824 lo = (lo + Math.imul(al8, bl2)) | 0;
54825 mid = (mid + Math.imul(al8, bh2)) | 0;
54826 mid = (mid + Math.imul(ah8, bl2)) | 0;
54827 hi = (hi + Math.imul(ah8, bh2)) | 0;
54828 lo = (lo + Math.imul(al7, bl3)) | 0;
54829 mid = (mid + Math.imul(al7, bh3)) | 0;
54830 mid = (mid + Math.imul(ah7, bl3)) | 0;
54831 hi = (hi + Math.imul(ah7, bh3)) | 0;
54832 lo = (lo + Math.imul(al6, bl4)) | 0;
54833 mid = (mid + Math.imul(al6, bh4)) | 0;
54834 mid = (mid + Math.imul(ah6, bl4)) | 0;
54835 hi = (hi + Math.imul(ah6, bh4)) | 0;
54836 lo = (lo + Math.imul(al5, bl5)) | 0;
54837 mid = (mid + Math.imul(al5, bh5)) | 0;
54838 mid = (mid + Math.imul(ah5, bl5)) | 0;
54839 hi = (hi + Math.imul(ah5, bh5)) | 0;
54840 lo = (lo + Math.imul(al4, bl6)) | 0;
54841 mid = (mid + Math.imul(al4, bh6)) | 0;
54842 mid = (mid + Math.imul(ah4, bl6)) | 0;
54843 hi = (hi + Math.imul(ah4, bh6)) | 0;
54844 lo = (lo + Math.imul(al3, bl7)) | 0;
54845 mid = (mid + Math.imul(al3, bh7)) | 0;
54846 mid = (mid + Math.imul(ah3, bl7)) | 0;
54847 hi = (hi + Math.imul(ah3, bh7)) | 0;
54848 lo = (lo + Math.imul(al2, bl8)) | 0;
54849 mid = (mid + Math.imul(al2, bh8)) | 0;
54850 mid = (mid + Math.imul(ah2, bl8)) | 0;
54851 hi = (hi + Math.imul(ah2, bh8)) | 0;
54852 lo = (lo + Math.imul(al1, bl9)) | 0;
54853 mid = (mid + Math.imul(al1, bh9)) | 0;
54854 mid = (mid + Math.imul(ah1, bl9)) | 0;
54855 hi = (hi + Math.imul(ah1, bh9)) | 0;
54856 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54857 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
54858 w10 &= 0x3ffffff;
54859 /* k = 11 */
54860 lo = Math.imul(al9, bl2);
54861 mid = Math.imul(al9, bh2);
54862 mid = (mid + Math.imul(ah9, bl2)) | 0;
54863 hi = Math.imul(ah9, bh2);
54864 lo = (lo + Math.imul(al8, bl3)) | 0;
54865 mid = (mid + Math.imul(al8, bh3)) | 0;
54866 mid = (mid + Math.imul(ah8, bl3)) | 0;
54867 hi = (hi + Math.imul(ah8, bh3)) | 0;
54868 lo = (lo + Math.imul(al7, bl4)) | 0;
54869 mid = (mid + Math.imul(al7, bh4)) | 0;
54870 mid = (mid + Math.imul(ah7, bl4)) | 0;
54871 hi = (hi + Math.imul(ah7, bh4)) | 0;
54872 lo = (lo + Math.imul(al6, bl5)) | 0;
54873 mid = (mid + Math.imul(al6, bh5)) | 0;
54874 mid = (mid + Math.imul(ah6, bl5)) | 0;
54875 hi = (hi + Math.imul(ah6, bh5)) | 0;
54876 lo = (lo + Math.imul(al5, bl6)) | 0;
54877 mid = (mid + Math.imul(al5, bh6)) | 0;
54878 mid = (mid + Math.imul(ah5, bl6)) | 0;
54879 hi = (hi + Math.imul(ah5, bh6)) | 0;
54880 lo = (lo + Math.imul(al4, bl7)) | 0;
54881 mid = (mid + Math.imul(al4, bh7)) | 0;
54882 mid = (mid + Math.imul(ah4, bl7)) | 0;
54883 hi = (hi + Math.imul(ah4, bh7)) | 0;
54884 lo = (lo + Math.imul(al3, bl8)) | 0;
54885 mid = (mid + Math.imul(al3, bh8)) | 0;
54886 mid = (mid + Math.imul(ah3, bl8)) | 0;
54887 hi = (hi + Math.imul(ah3, bh8)) | 0;
54888 lo = (lo + Math.imul(al2, bl9)) | 0;
54889 mid = (mid + Math.imul(al2, bh9)) | 0;
54890 mid = (mid + Math.imul(ah2, bl9)) | 0;
54891 hi = (hi + Math.imul(ah2, bh9)) | 0;
54892 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54893 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
54894 w11 &= 0x3ffffff;
54895 /* k = 12 */
54896 lo = Math.imul(al9, bl3);
54897 mid = Math.imul(al9, bh3);
54898 mid = (mid + Math.imul(ah9, bl3)) | 0;
54899 hi = Math.imul(ah9, bh3);
54900 lo = (lo + Math.imul(al8, bl4)) | 0;
54901 mid = (mid + Math.imul(al8, bh4)) | 0;
54902 mid = (mid + Math.imul(ah8, bl4)) | 0;
54903 hi = (hi + Math.imul(ah8, bh4)) | 0;
54904 lo = (lo + Math.imul(al7, bl5)) | 0;
54905 mid = (mid + Math.imul(al7, bh5)) | 0;
54906 mid = (mid + Math.imul(ah7, bl5)) | 0;
54907 hi = (hi + Math.imul(ah7, bh5)) | 0;
54908 lo = (lo + Math.imul(al6, bl6)) | 0;
54909 mid = (mid + Math.imul(al6, bh6)) | 0;
54910 mid = (mid + Math.imul(ah6, bl6)) | 0;
54911 hi = (hi + Math.imul(ah6, bh6)) | 0;
54912 lo = (lo + Math.imul(al5, bl7)) | 0;
54913 mid = (mid + Math.imul(al5, bh7)) | 0;
54914 mid = (mid + Math.imul(ah5, bl7)) | 0;
54915 hi = (hi + Math.imul(ah5, bh7)) | 0;
54916 lo = (lo + Math.imul(al4, bl8)) | 0;
54917 mid = (mid + Math.imul(al4, bh8)) | 0;
54918 mid = (mid + Math.imul(ah4, bl8)) | 0;
54919 hi = (hi + Math.imul(ah4, bh8)) | 0;
54920 lo = (lo + Math.imul(al3, bl9)) | 0;
54921 mid = (mid + Math.imul(al3, bh9)) | 0;
54922 mid = (mid + Math.imul(ah3, bl9)) | 0;
54923 hi = (hi + Math.imul(ah3, bh9)) | 0;
54924 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54925 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
54926 w12 &= 0x3ffffff;
54927 /* k = 13 */
54928 lo = Math.imul(al9, bl4);
54929 mid = Math.imul(al9, bh4);
54930 mid = (mid + Math.imul(ah9, bl4)) | 0;
54931 hi = Math.imul(ah9, bh4);
54932 lo = (lo + Math.imul(al8, bl5)) | 0;
54933 mid = (mid + Math.imul(al8, bh5)) | 0;
54934 mid = (mid + Math.imul(ah8, bl5)) | 0;
54935 hi = (hi + Math.imul(ah8, bh5)) | 0;
54936 lo = (lo + Math.imul(al7, bl6)) | 0;
54937 mid = (mid + Math.imul(al7, bh6)) | 0;
54938 mid = (mid + Math.imul(ah7, bl6)) | 0;
54939 hi = (hi + Math.imul(ah7, bh6)) | 0;
54940 lo = (lo + Math.imul(al6, bl7)) | 0;
54941 mid = (mid + Math.imul(al6, bh7)) | 0;
54942 mid = (mid + Math.imul(ah6, bl7)) | 0;
54943 hi = (hi + Math.imul(ah6, bh7)) | 0;
54944 lo = (lo + Math.imul(al5, bl8)) | 0;
54945 mid = (mid + Math.imul(al5, bh8)) | 0;
54946 mid = (mid + Math.imul(ah5, bl8)) | 0;
54947 hi = (hi + Math.imul(ah5, bh8)) | 0;
54948 lo = (lo + Math.imul(al4, bl9)) | 0;
54949 mid = (mid + Math.imul(al4, bh9)) | 0;
54950 mid = (mid + Math.imul(ah4, bl9)) | 0;
54951 hi = (hi + Math.imul(ah4, bh9)) | 0;
54952 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54953 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
54954 w13 &= 0x3ffffff;
54955 /* k = 14 */
54956 lo = Math.imul(al9, bl5);
54957 mid = Math.imul(al9, bh5);
54958 mid = (mid + Math.imul(ah9, bl5)) | 0;
54959 hi = Math.imul(ah9, bh5);
54960 lo = (lo + Math.imul(al8, bl6)) | 0;
54961 mid = (mid + Math.imul(al8, bh6)) | 0;
54962 mid = (mid + Math.imul(ah8, bl6)) | 0;
54963 hi = (hi + Math.imul(ah8, bh6)) | 0;
54964 lo = (lo + Math.imul(al7, bl7)) | 0;
54965 mid = (mid + Math.imul(al7, bh7)) | 0;
54966 mid = (mid + Math.imul(ah7, bl7)) | 0;
54967 hi = (hi + Math.imul(ah7, bh7)) | 0;
54968 lo = (lo + Math.imul(al6, bl8)) | 0;
54969 mid = (mid + Math.imul(al6, bh8)) | 0;
54970 mid = (mid + Math.imul(ah6, bl8)) | 0;
54971 hi = (hi + Math.imul(ah6, bh8)) | 0;
54972 lo = (lo + Math.imul(al5, bl9)) | 0;
54973 mid = (mid + Math.imul(al5, bh9)) | 0;
54974 mid = (mid + Math.imul(ah5, bl9)) | 0;
54975 hi = (hi + Math.imul(ah5, bh9)) | 0;
54976 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54977 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
54978 w14 &= 0x3ffffff;
54979 /* k = 15 */
54980 lo = Math.imul(al9, bl6);
54981 mid = Math.imul(al9, bh6);
54982 mid = (mid + Math.imul(ah9, bl6)) | 0;
54983 hi = Math.imul(ah9, bh6);
54984 lo = (lo + Math.imul(al8, bl7)) | 0;
54985 mid = (mid + Math.imul(al8, bh7)) | 0;
54986 mid = (mid + Math.imul(ah8, bl7)) | 0;
54987 hi = (hi + Math.imul(ah8, bh7)) | 0;
54988 lo = (lo + Math.imul(al7, bl8)) | 0;
54989 mid = (mid + Math.imul(al7, bh8)) | 0;
54990 mid = (mid + Math.imul(ah7, bl8)) | 0;
54991 hi = (hi + Math.imul(ah7, bh8)) | 0;
54992 lo = (lo + Math.imul(al6, bl9)) | 0;
54993 mid = (mid + Math.imul(al6, bh9)) | 0;
54994 mid = (mid + Math.imul(ah6, bl9)) | 0;
54995 hi = (hi + Math.imul(ah6, bh9)) | 0;
54996 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
54997 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
54998 w15 &= 0x3ffffff;
54999 /* k = 16 */
55000 lo = Math.imul(al9, bl7);
55001 mid = Math.imul(al9, bh7);
55002 mid = (mid + Math.imul(ah9, bl7)) | 0;
55003 hi = Math.imul(ah9, bh7);
55004 lo = (lo + Math.imul(al8, bl8)) | 0;
55005 mid = (mid + Math.imul(al8, bh8)) | 0;
55006 mid = (mid + Math.imul(ah8, bl8)) | 0;
55007 hi = (hi + Math.imul(ah8, bh8)) | 0;
55008 lo = (lo + Math.imul(al7, bl9)) | 0;
55009 mid = (mid + Math.imul(al7, bh9)) | 0;
55010 mid = (mid + Math.imul(ah7, bl9)) | 0;
55011 hi = (hi + Math.imul(ah7, bh9)) | 0;
55012 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
55013 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
55014 w16 &= 0x3ffffff;
55015 /* k = 17 */
55016 lo = Math.imul(al9, bl8);
55017 mid = Math.imul(al9, bh8);
55018 mid = (mid + Math.imul(ah9, bl8)) | 0;
55019 hi = Math.imul(ah9, bh8);
55020 lo = (lo + Math.imul(al8, bl9)) | 0;
55021 mid = (mid + Math.imul(al8, bh9)) | 0;
55022 mid = (mid + Math.imul(ah8, bl9)) | 0;
55023 hi = (hi + Math.imul(ah8, bh9)) | 0;
55024 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
55025 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
55026 w17 &= 0x3ffffff;
55027 /* k = 18 */
55028 lo = Math.imul(al9, bl9);
55029 mid = Math.imul(al9, bh9);
55030 mid = (mid + Math.imul(ah9, bl9)) | 0;
55031 hi = Math.imul(ah9, bh9);
55032 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
55033 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
55034 w18 &= 0x3ffffff;
55035 o[0] = w0;
55036 o[1] = w1;
55037 o[2] = w2;
55038 o[3] = w3;
55039 o[4] = w4;
55040 o[5] = w5;
55041 o[6] = w6;
55042 o[7] = w7;
55043 o[8] = w8;
55044 o[9] = w9;
55045 o[10] = w10;
55046 o[11] = w11;
55047 o[12] = w12;
55048 o[13] = w13;
55049 o[14] = w14;
55050 o[15] = w15;
55051 o[16] = w16;
55052 o[17] = w17;
55053 o[18] = w18;
55054 if (c !== 0) {
55055 o[19] = c;
55056 out.length++;
55057 }
55058 return out;
55059 };
55060
55061 // Polyfill comb
55062 if (!Math.imul) {
55063 comb10MulTo = smallMulTo;
55064 }
55065
55066 function bigMulTo (self, num, out) {
55067 out.negative = num.negative ^ self.negative;
55068 out.length = self.length + num.length;
55069
55070 var carry = 0;
55071 var hncarry = 0;
55072 for (var k = 0; k < out.length - 1; k++) {
55073 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
55074 // note that ncarry could be >= 0x3ffffff
55075 var ncarry = hncarry;
55076 hncarry = 0;
55077 var rword = carry & 0x3ffffff;
55078 var maxJ = Math.min(k, num.length - 1);
55079 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
55080 var i = k - j;
55081 var a = self.words[i] | 0;
55082 var b = num.words[j] | 0;
55083 var r = a * b;
55084
55085 var lo = r & 0x3ffffff;
55086 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
55087 lo = (lo + rword) | 0;
55088 rword = lo & 0x3ffffff;
55089 ncarry = (ncarry + (lo >>> 26)) | 0;
55090
55091 hncarry += ncarry >>> 26;
55092 ncarry &= 0x3ffffff;
55093 }
55094 out.words[k] = rword;
55095 carry = ncarry;
55096 ncarry = hncarry;
55097 }
55098 if (carry !== 0) {
55099 out.words[k] = carry;
55100 } else {
55101 out.length--;
55102 }
55103
55104 return out.strip();
55105 }
55106
55107 function jumboMulTo (self, num, out) {
55108 var fftm = new FFTM();
55109 return fftm.mulp(self, num, out);
55110 }
55111
55112 BN.prototype.mulTo = function mulTo (num, out) {
55113 var res;
55114 var len = this.length + num.length;
55115 if (this.length === 10 && num.length === 10) {
55116 res = comb10MulTo(this, num, out);
55117 } else if (len < 63) {
55118 res = smallMulTo(this, num, out);
55119 } else if (len < 1024) {
55120 res = bigMulTo(this, num, out);
55121 } else {
55122 res = jumboMulTo(this, num, out);
55123 }
55124
55125 return res;
55126 };
55127
55128 // Cooley-Tukey algorithm for FFT
55129 // slightly revisited to rely on looping instead of recursion
55130
55131 function FFTM (x, y) {
55132 this.x = x;
55133 this.y = y;
55134 }
55135
55136 FFTM.prototype.makeRBT = function makeRBT (N) {
55137 var t = new Array(N);
55138 var l = BN.prototype._countBits(N) - 1;
55139 for (var i = 0; i < N; i++) {
55140 t[i] = this.revBin(i, l, N);
55141 }
55142
55143 return t;
55144 };
55145
55146 // Returns binary-reversed representation of `x`
55147 FFTM.prototype.revBin = function revBin (x, l, N) {
55148 if (x === 0 || x === N - 1) return x;
55149
55150 var rb = 0;
55151 for (var i = 0; i < l; i++) {
55152 rb |= (x & 1) << (l - i - 1);
55153 x >>= 1;
55154 }
55155
55156 return rb;
55157 };
55158
55159 // Performs "tweedling" phase, therefore 'emulating'
55160 // behaviour of the recursive algorithm
55161 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
55162 for (var i = 0; i < N; i++) {
55163 rtws[i] = rws[rbt[i]];
55164 itws[i] = iws[rbt[i]];
55165 }
55166 };
55167
55168 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
55169 this.permute(rbt, rws, iws, rtws, itws, N);
55170
55171 for (var s = 1; s < N; s <<= 1) {
55172 var l = s << 1;
55173
55174 var rtwdf = Math.cos(2 * Math.PI / l);
55175 var itwdf = Math.sin(2 * Math.PI / l);
55176
55177 for (var p = 0; p < N; p += l) {
55178 var rtwdf_ = rtwdf;
55179 var itwdf_ = itwdf;
55180
55181 for (var j = 0; j < s; j++) {
55182 var re = rtws[p + j];
55183 var ie = itws[p + j];
55184
55185 var ro = rtws[p + j + s];
55186 var io = itws[p + j + s];
55187
55188 var rx = rtwdf_ * ro - itwdf_ * io;
55189
55190 io = rtwdf_ * io + itwdf_ * ro;
55191 ro = rx;
55192
55193 rtws[p + j] = re + ro;
55194 itws[p + j] = ie + io;
55195
55196 rtws[p + j + s] = re - ro;
55197 itws[p + j + s] = ie - io;
55198
55199 /* jshint maxdepth : false */
55200 if (j !== l) {
55201 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
55202
55203 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
55204 rtwdf_ = rx;
55205 }
55206 }
55207 }
55208 }
55209 };
55210
55211 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
55212 var N = Math.max(m, n) | 1;
55213 var odd = N & 1;
55214 var i = 0;
55215 for (N = N / 2 | 0; N; N = N >>> 1) {
55216 i++;
55217 }
55218
55219 return 1 << i + 1 + odd;
55220 };
55221
55222 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
55223 if (N <= 1) return;
55224
55225 for (var i = 0; i < N / 2; i++) {
55226 var t = rws[i];
55227
55228 rws[i] = rws[N - i - 1];
55229 rws[N - i - 1] = t;
55230
55231 t = iws[i];
55232
55233 iws[i] = -iws[N - i - 1];
55234 iws[N - i - 1] = -t;
55235 }
55236 };
55237
55238 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
55239 var carry = 0;
55240 for (var i = 0; i < N / 2; i++) {
55241 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
55242 Math.round(ws[2 * i] / N) +
55243 carry;
55244
55245 ws[i] = w & 0x3ffffff;
55246
55247 if (w < 0x4000000) {
55248 carry = 0;
55249 } else {
55250 carry = w / 0x4000000 | 0;
55251 }
55252 }
55253
55254 return ws;
55255 };
55256
55257 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
55258 var carry = 0;
55259 for (var i = 0; i < len; i++) {
55260 carry = carry + (ws[i] | 0);
55261
55262 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
55263 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
55264 }
55265
55266 // Pad with zeroes
55267 for (i = 2 * len; i < N; ++i) {
55268 rws[i] = 0;
55269 }
55270
55271 assert(carry === 0);
55272 assert((carry & ~0x1fff) === 0);
55273 };
55274
55275 FFTM.prototype.stub = function stub (N) {
55276 var ph = new Array(N);
55277 for (var i = 0; i < N; i++) {
55278 ph[i] = 0;
55279 }
55280
55281 return ph;
55282 };
55283
55284 FFTM.prototype.mulp = function mulp (x, y, out) {
55285 var N = 2 * this.guessLen13b(x.length, y.length);
55286
55287 var rbt = this.makeRBT(N);
55288
55289 var _ = this.stub(N);
55290
55291 var rws = new Array(N);
55292 var rwst = new Array(N);
55293 var iwst = new Array(N);
55294
55295 var nrws = new Array(N);
55296 var nrwst = new Array(N);
55297 var niwst = new Array(N);
55298
55299 var rmws = out.words;
55300 rmws.length = N;
55301
55302 this.convert13b(x.words, x.length, rws, N);
55303 this.convert13b(y.words, y.length, nrws, N);
55304
55305 this.transform(rws, _, rwst, iwst, N, rbt);
55306 this.transform(nrws, _, nrwst, niwst, N, rbt);
55307
55308 for (var i = 0; i < N; i++) {
55309 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
55310 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
55311 rwst[i] = rx;
55312 }
55313
55314 this.conjugate(rwst, iwst, N);
55315 this.transform(rwst, iwst, rmws, _, N, rbt);
55316 this.conjugate(rmws, _, N);
55317 this.normalize13b(rmws, N);
55318
55319 out.negative = x.negative ^ y.negative;
55320 out.length = x.length + y.length;
55321 return out.strip();
55322 };
55323
55324 // Multiply `this` by `num`
55325 BN.prototype.mul = function mul (num) {
55326 var out = new BN(null);
55327 out.words = new Array(this.length + num.length);
55328 return this.mulTo(num, out);
55329 };
55330
55331 // Multiply employing FFT
55332 BN.prototype.mulf = function mulf (num) {
55333 var out = new BN(null);
55334 out.words = new Array(this.length + num.length);
55335 return jumboMulTo(this, num, out);
55336 };
55337
55338 // In-place Multiplication
55339 BN.prototype.imul = function imul (num) {
55340 return this.clone().mulTo(num, this);
55341 };
55342
55343 BN.prototype.imuln = function imuln (num) {
55344 assert(typeof num === 'number');
55345 assert(num < 0x4000000);
55346
55347 // Carry
55348 var carry = 0;
55349 for (var i = 0; i < this.length; i++) {
55350 var w = (this.words[i] | 0) * num;
55351 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
55352 carry >>= 26;
55353 carry += (w / 0x4000000) | 0;
55354 // NOTE: lo is 27bit maximum
55355 carry += lo >>> 26;
55356 this.words[i] = lo & 0x3ffffff;
55357 }
55358
55359 if (carry !== 0) {
55360 this.words[i] = carry;
55361 this.length++;
55362 }
55363
55364 return this;
55365 };
55366
55367 BN.prototype.muln = function muln (num) {
55368 return this.clone().imuln(num);
55369 };
55370
55371 // `this` * `this`
55372 BN.prototype.sqr = function sqr () {
55373 return this.mul(this);
55374 };
55375
55376 // `this` * `this` in-place
55377 BN.prototype.isqr = function isqr () {
55378 return this.imul(this.clone());
55379 };
55380
55381 // Math.pow(`this`, `num`)
55382 BN.prototype.pow = function pow (num) {
55383 var w = toBitArray(num);
55384 if (w.length === 0) return new BN(1);
55385
55386 // Skip leading zeroes
55387 var res = this;
55388 for (var i = 0; i < w.length; i++, res = res.sqr()) {
55389 if (w[i] !== 0) break;
55390 }
55391
55392 if (++i < w.length) {
55393 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
55394 if (w[i] === 0) continue;
55395
55396 res = res.mul(q);
55397 }
55398 }
55399
55400 return res;
55401 };
55402
55403 // Shift-left in-place
55404 BN.prototype.iushln = function iushln (bits) {
55405 assert(typeof bits === 'number' && bits >= 0);
55406 var r = bits % 26;
55407 var s = (bits - r) / 26;
55408 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
55409 var i;
55410
55411 if (r !== 0) {
55412 var carry = 0;
55413
55414 for (i = 0; i < this.length; i++) {
55415 var newCarry = this.words[i] & carryMask;
55416 var c = ((this.words[i] | 0) - newCarry) << r;
55417 this.words[i] = c | carry;
55418 carry = newCarry >>> (26 - r);
55419 }
55420
55421 if (carry) {
55422 this.words[i] = carry;
55423 this.length++;
55424 }
55425 }
55426
55427 if (s !== 0) {
55428 for (i = this.length - 1; i >= 0; i--) {
55429 this.words[i + s] = this.words[i];
55430 }
55431
55432 for (i = 0; i < s; i++) {
55433 this.words[i] = 0;
55434 }
55435
55436 this.length += s;
55437 }
55438
55439 return this.strip();
55440 };
55441
55442 BN.prototype.ishln = function ishln (bits) {
55443 // TODO(indutny): implement me
55444 assert(this.negative === 0);
55445 return this.iushln(bits);
55446 };
55447
55448 // Shift-right in-place
55449 // NOTE: `hint` is a lowest bit before trailing zeroes
55450 // NOTE: if `extended` is present - it will be filled with destroyed bits
55451 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
55452 assert(typeof bits === 'number' && bits >= 0);
55453 var h;
55454 if (hint) {
55455 h = (hint - (hint % 26)) / 26;
55456 } else {
55457 h = 0;
55458 }
55459
55460 var r = bits % 26;
55461 var s = Math.min((bits - r) / 26, this.length);
55462 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
55463 var maskedWords = extended;
55464
55465 h -= s;
55466 h = Math.max(0, h);
55467
55468 // Extended mode, copy masked part
55469 if (maskedWords) {
55470 for (var i = 0; i < s; i++) {
55471 maskedWords.words[i] = this.words[i];
55472 }
55473 maskedWords.length = s;
55474 }
55475
55476 if (s === 0) {
55477 // No-op, we should not move anything at all
55478 } else if (this.length > s) {
55479 this.length -= s;
55480 for (i = 0; i < this.length; i++) {
55481 this.words[i] = this.words[i + s];
55482 }
55483 } else {
55484 this.words[0] = 0;
55485 this.length = 1;
55486 }
55487
55488 var carry = 0;
55489 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
55490 var word = this.words[i] | 0;
55491 this.words[i] = (carry << (26 - r)) | (word >>> r);
55492 carry = word & mask;
55493 }
55494
55495 // Push carried bits as a mask
55496 if (maskedWords && carry !== 0) {
55497 maskedWords.words[maskedWords.length++] = carry;
55498 }
55499
55500 if (this.length === 0) {
55501 this.words[0] = 0;
55502 this.length = 1;
55503 }
55504
55505 return this.strip();
55506 };
55507
55508 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
55509 // TODO(indutny): implement me
55510 assert(this.negative === 0);
55511 return this.iushrn(bits, hint, extended);
55512 };
55513
55514 // Shift-left
55515 BN.prototype.shln = function shln (bits) {
55516 return this.clone().ishln(bits);
55517 };
55518
55519 BN.prototype.ushln = function ushln (bits) {
55520 return this.clone().iushln(bits);
55521 };
55522
55523 // Shift-right
55524 BN.prototype.shrn = function shrn (bits) {
55525 return this.clone().ishrn(bits);
55526 };
55527
55528 BN.prototype.ushrn = function ushrn (bits) {
55529 return this.clone().iushrn(bits);
55530 };
55531
55532 // Test if n bit is set
55533 BN.prototype.testn = function testn (bit) {
55534 assert(typeof bit === 'number' && bit >= 0);
55535 var r = bit % 26;
55536 var s = (bit - r) / 26;
55537 var q = 1 << r;
55538
55539 // Fast case: bit is much higher than all existing words
55540 if (this.length <= s) return false;
55541
55542 // Check bit and return
55543 var w = this.words[s];
55544
55545 return !!(w & q);
55546 };
55547
55548 // Return only lowers bits of number (in-place)
55549 BN.prototype.imaskn = function imaskn (bits) {
55550 assert(typeof bits === 'number' && bits >= 0);
55551 var r = bits % 26;
55552 var s = (bits - r) / 26;
55553
55554 assert(this.negative === 0, 'imaskn works only with positive numbers');
55555
55556 if (this.length <= s) {
55557 return this;
55558 }
55559
55560 if (r !== 0) {
55561 s++;
55562 }
55563 this.length = Math.min(s, this.length);
55564
55565 if (r !== 0) {
55566 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
55567 this.words[this.length - 1] &= mask;
55568 }
55569
55570 return this.strip();
55571 };
55572
55573 // Return only lowers bits of number
55574 BN.prototype.maskn = function maskn (bits) {
55575 return this.clone().imaskn(bits);
55576 };
55577
55578 // Add plain number `num` to `this`
55579 BN.prototype.iaddn = function iaddn (num) {
55580 assert(typeof num === 'number');
55581 assert(num < 0x4000000);
55582 if (num < 0) return this.isubn(-num);
55583
55584 // Possible sign change
55585 if (this.negative !== 0) {
55586 if (this.length === 1 && (this.words[0] | 0) < num) {
55587 this.words[0] = num - (this.words[0] | 0);
55588 this.negative = 0;
55589 return this;
55590 }
55591
55592 this.negative = 0;
55593 this.isubn(num);
55594 this.negative = 1;
55595 return this;
55596 }
55597
55598 // Add without checks
55599 return this._iaddn(num);
55600 };
55601
55602 BN.prototype._iaddn = function _iaddn (num) {
55603 this.words[0] += num;
55604
55605 // Carry
55606 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
55607 this.words[i] -= 0x4000000;
55608 if (i === this.length - 1) {
55609 this.words[i + 1] = 1;
55610 } else {
55611 this.words[i + 1]++;
55612 }
55613 }
55614 this.length = Math.max(this.length, i + 1);
55615
55616 return this;
55617 };
55618
55619 // Subtract plain number `num` from `this`
55620 BN.prototype.isubn = function isubn (num) {
55621 assert(typeof num === 'number');
55622 assert(num < 0x4000000);
55623 if (num < 0) return this.iaddn(-num);
55624
55625 if (this.negative !== 0) {
55626 this.negative = 0;
55627 this.iaddn(num);
55628 this.negative = 1;
55629 return this;
55630 }
55631
55632 this.words[0] -= num;
55633
55634 if (this.length === 1 && this.words[0] < 0) {
55635 this.words[0] = -this.words[0];
55636 this.negative = 1;
55637 } else {
55638 // Carry
55639 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
55640 this.words[i] += 0x4000000;
55641 this.words[i + 1] -= 1;
55642 }
55643 }
55644
55645 return this.strip();
55646 };
55647
55648 BN.prototype.addn = function addn (num) {
55649 return this.clone().iaddn(num);
55650 };
55651
55652 BN.prototype.subn = function subn (num) {
55653 return this.clone().isubn(num);
55654 };
55655
55656 BN.prototype.iabs = function iabs () {
55657 this.negative = 0;
55658
55659 return this;
55660 };
55661
55662 BN.prototype.abs = function abs () {
55663 return this.clone().iabs();
55664 };
55665
55666 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
55667 var len = num.length + shift;
55668 var i;
55669
55670 this._expand(len);
55671
55672 var w;
55673 var carry = 0;
55674 for (i = 0; i < num.length; i++) {
55675 w = (this.words[i + shift] | 0) + carry;
55676 var right = (num.words[i] | 0) * mul;
55677 w -= right & 0x3ffffff;
55678 carry = (w >> 26) - ((right / 0x4000000) | 0);
55679 this.words[i + shift] = w & 0x3ffffff;
55680 }
55681 for (; i < this.length - shift; i++) {
55682 w = (this.words[i + shift] | 0) + carry;
55683 carry = w >> 26;
55684 this.words[i + shift] = w & 0x3ffffff;
55685 }
55686
55687 if (carry === 0) return this.strip();
55688
55689 // Subtraction overflow
55690 assert(carry === -1);
55691 carry = 0;
55692 for (i = 0; i < this.length; i++) {
55693 w = -(this.words[i] | 0) + carry;
55694 carry = w >> 26;
55695 this.words[i] = w & 0x3ffffff;
55696 }
55697 this.negative = 1;
55698
55699 return this.strip();
55700 };
55701
55702 BN.prototype._wordDiv = function _wordDiv (num, mode) {
55703 var shift = this.length - num.length;
55704
55705 var a = this.clone();
55706 var b = num;
55707
55708 // Normalize
55709 var bhi = b.words[b.length - 1] | 0;
55710 var bhiBits = this._countBits(bhi);
55711 shift = 26 - bhiBits;
55712 if (shift !== 0) {
55713 b = b.ushln(shift);
55714 a.iushln(shift);
55715 bhi = b.words[b.length - 1] | 0;
55716 }
55717
55718 // Initialize quotient
55719 var m = a.length - b.length;
55720 var q;
55721
55722 if (mode !== 'mod') {
55723 q = new BN(null);
55724 q.length = m + 1;
55725 q.words = new Array(q.length);
55726 for (var i = 0; i < q.length; i++) {
55727 q.words[i] = 0;
55728 }
55729 }
55730
55731 var diff = a.clone()._ishlnsubmul(b, 1, m);
55732 if (diff.negative === 0) {
55733 a = diff;
55734 if (q) {
55735 q.words[m] = 1;
55736 }
55737 }
55738
55739 for (var j = m - 1; j >= 0; j--) {
55740 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
55741 (a.words[b.length + j - 1] | 0);
55742
55743 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
55744 // (0x7ffffff)
55745 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
55746
55747 a._ishlnsubmul(b, qj, j);
55748 while (a.negative !== 0) {
55749 qj--;
55750 a.negative = 0;
55751 a._ishlnsubmul(b, 1, j);
55752 if (!a.isZero()) {
55753 a.negative ^= 1;
55754 }
55755 }
55756 if (q) {
55757 q.words[j] = qj;
55758 }
55759 }
55760 if (q) {
55761 q.strip();
55762 }
55763 a.strip();
55764
55765 // Denormalize
55766 if (mode !== 'div' && shift !== 0) {
55767 a.iushrn(shift);
55768 }
55769
55770 return {
55771 div: q || null,
55772 mod: a
55773 };
55774 };
55775
55776 // NOTE: 1) `mode` can be set to `mod` to request mod only,
55777 // to `div` to request div only, or be absent to
55778 // request both div & mod
55779 // 2) `positive` is true if unsigned mod is requested
55780 BN.prototype.divmod = function divmod (num, mode, positive) {
55781 assert(!num.isZero());
55782
55783 if (this.isZero()) {
55784 return {
55785 div: new BN(0),
55786 mod: new BN(0)
55787 };
55788 }
55789
55790 var div, mod, res;
55791 if (this.negative !== 0 && num.negative === 0) {
55792 res = this.neg().divmod(num, mode);
55793
55794 if (mode !== 'mod') {
55795 div = res.div.neg();
55796 }
55797
55798 if (mode !== 'div') {
55799 mod = res.mod.neg();
55800 if (positive && mod.negative !== 0) {
55801 mod.iadd(num);
55802 }
55803 }
55804
55805 return {
55806 div: div,
55807 mod: mod
55808 };
55809 }
55810
55811 if (this.negative === 0 && num.negative !== 0) {
55812 res = this.divmod(num.neg(), mode);
55813
55814 if (mode !== 'mod') {
55815 div = res.div.neg();
55816 }
55817
55818 return {
55819 div: div,
55820 mod: res.mod
55821 };
55822 }
55823
55824 if ((this.negative & num.negative) !== 0) {
55825 res = this.neg().divmod(num.neg(), mode);
55826
55827 if (mode !== 'div') {
55828 mod = res.mod.neg();
55829 if (positive && mod.negative !== 0) {
55830 mod.isub(num);
55831 }
55832 }
55833
55834 return {
55835 div: res.div,
55836 mod: mod
55837 };
55838 }
55839
55840 // Both numbers are positive at this point
55841
55842 // Strip both numbers to approximate shift value
55843 if (num.length > this.length || this.cmp(num) < 0) {
55844 return {
55845 div: new BN(0),
55846 mod: this
55847 };
55848 }
55849
55850 // Very short reduction
55851 if (num.length === 1) {
55852 if (mode === 'div') {
55853 return {
55854 div: this.divn(num.words[0]),
55855 mod: null
55856 };
55857 }
55858
55859 if (mode === 'mod') {
55860 return {
55861 div: null,
55862 mod: new BN(this.modn(num.words[0]))
55863 };
55864 }
55865
55866 return {
55867 div: this.divn(num.words[0]),
55868 mod: new BN(this.modn(num.words[0]))
55869 };
55870 }
55871
55872 return this._wordDiv(num, mode);
55873 };
55874
55875 // Find `this` / `num`
55876 BN.prototype.div = function div (num) {
55877 return this.divmod(num, 'div', false).div;
55878 };
55879
55880 // Find `this` % `num`
55881 BN.prototype.mod = function mod (num) {
55882 return this.divmod(num, 'mod', false).mod;
55883 };
55884
55885 BN.prototype.umod = function umod (num) {
55886 return this.divmod(num, 'mod', true).mod;
55887 };
55888
55889 // Find Round(`this` / `num`)
55890 BN.prototype.divRound = function divRound (num) {
55891 var dm = this.divmod(num);
55892
55893 // Fast case - exact division
55894 if (dm.mod.isZero()) return dm.div;
55895
55896 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
55897
55898 var half = num.ushrn(1);
55899 var r2 = num.andln(1);
55900 var cmp = mod.cmp(half);
55901
55902 // Round down
55903 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
55904
55905 // Round up
55906 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
55907 };
55908
55909 BN.prototype.modn = function modn (num) {
55910 assert(num <= 0x3ffffff);
55911 var p = (1 << 26) % num;
55912
55913 var acc = 0;
55914 for (var i = this.length - 1; i >= 0; i--) {
55915 acc = (p * acc + (this.words[i] | 0)) % num;
55916 }
55917
55918 return acc;
55919 };
55920
55921 // In-place division by number
55922 BN.prototype.idivn = function idivn (num) {
55923 assert(num <= 0x3ffffff);
55924
55925 var carry = 0;
55926 for (var i = this.length - 1; i >= 0; i--) {
55927 var w = (this.words[i] | 0) + carry * 0x4000000;
55928 this.words[i] = (w / num) | 0;
55929 carry = w % num;
55930 }
55931
55932 return this.strip();
55933 };
55934
55935 BN.prototype.divn = function divn (num) {
55936 return this.clone().idivn(num);
55937 };
55938
55939 BN.prototype.egcd = function egcd (p) {
55940 assert(p.negative === 0);
55941 assert(!p.isZero());
55942
55943 var x = this;
55944 var y = p.clone();
55945
55946 if (x.negative !== 0) {
55947 x = x.umod(p);
55948 } else {
55949 x = x.clone();
55950 }
55951
55952 // A * x + B * y = x
55953 var A = new BN(1);
55954 var B = new BN(0);
55955
55956 // C * x + D * y = y
55957 var C = new BN(0);
55958 var D = new BN(1);
55959
55960 var g = 0;
55961
55962 while (x.isEven() && y.isEven()) {
55963 x.iushrn(1);
55964 y.iushrn(1);
55965 ++g;
55966 }
55967
55968 var yp = y.clone();
55969 var xp = x.clone();
55970
55971 while (!x.isZero()) {
55972 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
55973 if (i > 0) {
55974 x.iushrn(i);
55975 while (i-- > 0) {
55976 if (A.isOdd() || B.isOdd()) {
55977 A.iadd(yp);
55978 B.isub(xp);
55979 }
55980
55981 A.iushrn(1);
55982 B.iushrn(1);
55983 }
55984 }
55985
55986 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
55987 if (j > 0) {
55988 y.iushrn(j);
55989 while (j-- > 0) {
55990 if (C.isOdd() || D.isOdd()) {
55991 C.iadd(yp);
55992 D.isub(xp);
55993 }
55994
55995 C.iushrn(1);
55996 D.iushrn(1);
55997 }
55998 }
55999
56000 if (x.cmp(y) >= 0) {
56001 x.isub(y);
56002 A.isub(C);
56003 B.isub(D);
56004 } else {
56005 y.isub(x);
56006 C.isub(A);
56007 D.isub(B);
56008 }
56009 }
56010
56011 return {
56012 a: C,
56013 b: D,
56014 gcd: y.iushln(g)
56015 };
56016 };
56017
56018 // This is reduced incarnation of the binary EEA
56019 // above, designated to invert members of the
56020 // _prime_ fields F(p) at a maximal speed
56021 BN.prototype._invmp = function _invmp (p) {
56022 assert(p.negative === 0);
56023 assert(!p.isZero());
56024
56025 var a = this;
56026 var b = p.clone();
56027
56028 if (a.negative !== 0) {
56029 a = a.umod(p);
56030 } else {
56031 a = a.clone();
56032 }
56033
56034 var x1 = new BN(1);
56035 var x2 = new BN(0);
56036
56037 var delta = b.clone();
56038
56039 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
56040 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
56041 if (i > 0) {
56042 a.iushrn(i);
56043 while (i-- > 0) {
56044 if (x1.isOdd()) {
56045 x1.iadd(delta);
56046 }
56047
56048 x1.iushrn(1);
56049 }
56050 }
56051
56052 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
56053 if (j > 0) {
56054 b.iushrn(j);
56055 while (j-- > 0) {
56056 if (x2.isOdd()) {
56057 x2.iadd(delta);
56058 }
56059
56060 x2.iushrn(1);
56061 }
56062 }
56063
56064 if (a.cmp(b) >= 0) {
56065 a.isub(b);
56066 x1.isub(x2);
56067 } else {
56068 b.isub(a);
56069 x2.isub(x1);
56070 }
56071 }
56072
56073 var res;
56074 if (a.cmpn(1) === 0) {
56075 res = x1;
56076 } else {
56077 res = x2;
56078 }
56079
56080 if (res.cmpn(0) < 0) {
56081 res.iadd(p);
56082 }
56083
56084 return res;
56085 };
56086
56087 BN.prototype.gcd = function gcd (num) {
56088 if (this.isZero()) return num.abs();
56089 if (num.isZero()) return this.abs();
56090
56091 var a = this.clone();
56092 var b = num.clone();
56093 a.negative = 0;
56094 b.negative = 0;
56095
56096 // Remove common factor of two
56097 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
56098 a.iushrn(1);
56099 b.iushrn(1);
56100 }
56101
56102 do {
56103 while (a.isEven()) {
56104 a.iushrn(1);
56105 }
56106 while (b.isEven()) {
56107 b.iushrn(1);
56108 }
56109
56110 var r = a.cmp(b);
56111 if (r < 0) {
56112 // Swap `a` and `b` to make `a` always bigger than `b`
56113 var t = a;
56114 a = b;
56115 b = t;
56116 } else if (r === 0 || b.cmpn(1) === 0) {
56117 break;
56118 }
56119
56120 a.isub(b);
56121 } while (true);
56122
56123 return b.iushln(shift);
56124 };
56125
56126 // Invert number in the field F(num)
56127 BN.prototype.invm = function invm (num) {
56128 return this.egcd(num).a.umod(num);
56129 };
56130
56131 BN.prototype.isEven = function isEven () {
56132 return (this.words[0] & 1) === 0;
56133 };
56134
56135 BN.prototype.isOdd = function isOdd () {
56136 return (this.words[0] & 1) === 1;
56137 };
56138
56139 // And first word and num
56140 BN.prototype.andln = function andln (num) {
56141 return this.words[0] & num;
56142 };
56143
56144 // Increment at the bit position in-line
56145 BN.prototype.bincn = function bincn (bit) {
56146 assert(typeof bit === 'number');
56147 var r = bit % 26;
56148 var s = (bit - r) / 26;
56149 var q = 1 << r;
56150
56151 // Fast case: bit is much higher than all existing words
56152 if (this.length <= s) {
56153 this._expand(s + 1);
56154 this.words[s] |= q;
56155 return this;
56156 }
56157
56158 // Add bit and propagate, if needed
56159 var carry = q;
56160 for (var i = s; carry !== 0 && i < this.length; i++) {
56161 var w = this.words[i] | 0;
56162 w += carry;
56163 carry = w >>> 26;
56164 w &= 0x3ffffff;
56165 this.words[i] = w;
56166 }
56167 if (carry !== 0) {
56168 this.words[i] = carry;
56169 this.length++;
56170 }
56171 return this;
56172 };
56173
56174 BN.prototype.isZero = function isZero () {
56175 return this.length === 1 && this.words[0] === 0;
56176 };
56177
56178 BN.prototype.cmpn = function cmpn (num) {
56179 var negative = num < 0;
56180
56181 if (this.negative !== 0 && !negative) return -1;
56182 if (this.negative === 0 && negative) return 1;
56183
56184 this.strip();
56185
56186 var res;
56187 if (this.length > 1) {
56188 res = 1;
56189 } else {
56190 if (negative) {
56191 num = -num;
56192 }
56193
56194 assert(num <= 0x3ffffff, 'Number is too big');
56195
56196 var w = this.words[0] | 0;
56197 res = w === num ? 0 : w < num ? -1 : 1;
56198 }
56199 if (this.negative !== 0) return -res | 0;
56200 return res;
56201 };
56202
56203 // Compare two numbers and return:
56204 // 1 - if `this` > `num`
56205 // 0 - if `this` == `num`
56206 // -1 - if `this` < `num`
56207 BN.prototype.cmp = function cmp (num) {
56208 if (this.negative !== 0 && num.negative === 0) return -1;
56209 if (this.negative === 0 && num.negative !== 0) return 1;
56210
56211 var res = this.ucmp(num);
56212 if (this.negative !== 0) return -res | 0;
56213 return res;
56214 };
56215
56216 // Unsigned comparison
56217 BN.prototype.ucmp = function ucmp (num) {
56218 // At this point both numbers have the same sign
56219 if (this.length > num.length) return 1;
56220 if (this.length < num.length) return -1;
56221
56222 var res = 0;
56223 for (var i = this.length - 1; i >= 0; i--) {
56224 var a = this.words[i] | 0;
56225 var b = num.words[i] | 0;
56226
56227 if (a === b) continue;
56228 if (a < b) {
56229 res = -1;
56230 } else if (a > b) {
56231 res = 1;
56232 }
56233 break;
56234 }
56235 return res;
56236 };
56237
56238 BN.prototype.gtn = function gtn (num) {
56239 return this.cmpn(num) === 1;
56240 };
56241
56242 BN.prototype.gt = function gt (num) {
56243 return this.cmp(num) === 1;
56244 };
56245
56246 BN.prototype.gten = function gten (num) {
56247 return this.cmpn(num) >= 0;
56248 };
56249
56250 BN.prototype.gte = function gte (num) {
56251 return this.cmp(num) >= 0;
56252 };
56253
56254 BN.prototype.ltn = function ltn (num) {
56255 return this.cmpn(num) === -1;
56256 };
56257
56258 BN.prototype.lt = function lt (num) {
56259 return this.cmp(num) === -1;
56260 };
56261
56262 BN.prototype.lten = function lten (num) {
56263 return this.cmpn(num) <= 0;
56264 };
56265
56266 BN.prototype.lte = function lte (num) {
56267 return this.cmp(num) <= 0;
56268 };
56269
56270 BN.prototype.eqn = function eqn (num) {
56271 return this.cmpn(num) === 0;
56272 };
56273
56274 BN.prototype.eq = function eq (num) {
56275 return this.cmp(num) === 0;
56276 };
56277
56278 //
56279 // A reduce context, could be using montgomery or something better, depending
56280 // on the `m` itself.
56281 //
56282 BN.red = function red (num) {
56283 return new Red(num);
56284 };
56285
56286 BN.prototype.toRed = function toRed (ctx) {
56287 assert(!this.red, 'Already a number in reduction context');
56288 assert(this.negative === 0, 'red works only with positives');
56289 return ctx.convertTo(this)._forceRed(ctx);
56290 };
56291
56292 BN.prototype.fromRed = function fromRed () {
56293 assert(this.red, 'fromRed works only with numbers in reduction context');
56294 return this.red.convertFrom(this);
56295 };
56296
56297 BN.prototype._forceRed = function _forceRed (ctx) {
56298 this.red = ctx;
56299 return this;
56300 };
56301
56302 BN.prototype.forceRed = function forceRed (ctx) {
56303 assert(!this.red, 'Already a number in reduction context');
56304 return this._forceRed(ctx);
56305 };
56306
56307 BN.prototype.redAdd = function redAdd (num) {
56308 assert(this.red, 'redAdd works only with red numbers');
56309 return this.red.add(this, num);
56310 };
56311
56312 BN.prototype.redIAdd = function redIAdd (num) {
56313 assert(this.red, 'redIAdd works only with red numbers');
56314 return this.red.iadd(this, num);
56315 };
56316
56317 BN.prototype.redSub = function redSub (num) {
56318 assert(this.red, 'redSub works only with red numbers');
56319 return this.red.sub(this, num);
56320 };
56321
56322 BN.prototype.redISub = function redISub (num) {
56323 assert(this.red, 'redISub works only with red numbers');
56324 return this.red.isub(this, num);
56325 };
56326
56327 BN.prototype.redShl = function redShl (num) {
56328 assert(this.red, 'redShl works only with red numbers');
56329 return this.red.shl(this, num);
56330 };
56331
56332 BN.prototype.redMul = function redMul (num) {
56333 assert(this.red, 'redMul works only with red numbers');
56334 this.red._verify2(this, num);
56335 return this.red.mul(this, num);
56336 };
56337
56338 BN.prototype.redIMul = function redIMul (num) {
56339 assert(this.red, 'redMul works only with red numbers');
56340 this.red._verify2(this, num);
56341 return this.red.imul(this, num);
56342 };
56343
56344 BN.prototype.redSqr = function redSqr () {
56345 assert(this.red, 'redSqr works only with red numbers');
56346 this.red._verify1(this);
56347 return this.red.sqr(this);
56348 };
56349
56350 BN.prototype.redISqr = function redISqr () {
56351 assert(this.red, 'redISqr works only with red numbers');
56352 this.red._verify1(this);
56353 return this.red.isqr(this);
56354 };
56355
56356 // Square root over p
56357 BN.prototype.redSqrt = function redSqrt () {
56358 assert(this.red, 'redSqrt works only with red numbers');
56359 this.red._verify1(this);
56360 return this.red.sqrt(this);
56361 };
56362
56363 BN.prototype.redInvm = function redInvm () {
56364 assert(this.red, 'redInvm works only with red numbers');
56365 this.red._verify1(this);
56366 return this.red.invm(this);
56367 };
56368
56369 // Return negative clone of `this` % `red modulo`
56370 BN.prototype.redNeg = function redNeg () {
56371 assert(this.red, 'redNeg works only with red numbers');
56372 this.red._verify1(this);
56373 return this.red.neg(this);
56374 };
56375
56376 BN.prototype.redPow = function redPow (num) {
56377 assert(this.red && !num.red, 'redPow(normalNum)');
56378 this.red._verify1(this);
56379 return this.red.pow(this, num);
56380 };
56381
56382 // Prime numbers with efficient reduction
56383 var primes = {
56384 k256: null,
56385 p224: null,
56386 p192: null,
56387 p25519: null
56388 };
56389
56390 // Pseudo-Mersenne prime
56391 function MPrime (name, p) {
56392 // P = 2 ^ N - K
56393 this.name = name;
56394 this.p = new BN(p, 16);
56395 this.n = this.p.bitLength();
56396 this.k = new BN(1).iushln(this.n).isub(this.p);
56397
56398 this.tmp = this._tmp();
56399 }
56400
56401 MPrime.prototype._tmp = function _tmp () {
56402 var tmp = new BN(null);
56403 tmp.words = new Array(Math.ceil(this.n / 13));
56404 return tmp;
56405 };
56406
56407 MPrime.prototype.ireduce = function ireduce (num) {
56408 // Assumes that `num` is less than `P^2`
56409 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
56410 var r = num;
56411 var rlen;
56412
56413 do {
56414 this.split(r, this.tmp);
56415 r = this.imulK(r);
56416 r = r.iadd(this.tmp);
56417 rlen = r.bitLength();
56418 } while (rlen > this.n);
56419
56420 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
56421 if (cmp === 0) {
56422 r.words[0] = 0;
56423 r.length = 1;
56424 } else if (cmp > 0) {
56425 r.isub(this.p);
56426 } else {
56427 r.strip();
56428 }
56429
56430 return r;
56431 };
56432
56433 MPrime.prototype.split = function split (input, out) {
56434 input.iushrn(this.n, 0, out);
56435 };
56436
56437 MPrime.prototype.imulK = function imulK (num) {
56438 return num.imul(this.k);
56439 };
56440
56441 function K256 () {
56442 MPrime.call(
56443 this,
56444 'k256',
56445 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
56446 }
56447 inherits(K256, MPrime);
56448
56449 K256.prototype.split = function split (input, output) {
56450 // 256 = 9 * 26 + 22
56451 var mask = 0x3fffff;
56452
56453 var outLen = Math.min(input.length, 9);
56454 for (var i = 0; i < outLen; i++) {
56455 output.words[i] = input.words[i];
56456 }
56457 output.length = outLen;
56458
56459 if (input.length <= 9) {
56460 input.words[0] = 0;
56461 input.length = 1;
56462 return;
56463 }
56464
56465 // Shift by 9 limbs
56466 var prev = input.words[9];
56467 output.words[output.length++] = prev & mask;
56468
56469 for (i = 10; i < input.length; i++) {
56470 var next = input.words[i] | 0;
56471 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
56472 prev = next;
56473 }
56474 prev >>>= 22;
56475 input.words[i - 10] = prev;
56476 if (prev === 0 && input.length > 10) {
56477 input.length -= 10;
56478 } else {
56479 input.length -= 9;
56480 }
56481 };
56482
56483 K256.prototype.imulK = function imulK (num) {
56484 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
56485 num.words[num.length] = 0;
56486 num.words[num.length + 1] = 0;
56487 num.length += 2;
56488
56489 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
56490 var lo = 0;
56491 for (var i = 0; i < num.length; i++) {
56492 var w = num.words[i] | 0;
56493 lo += w * 0x3d1;
56494 num.words[i] = lo & 0x3ffffff;
56495 lo = w * 0x40 + ((lo / 0x4000000) | 0);
56496 }
56497
56498 // Fast length reduction
56499 if (num.words[num.length - 1] === 0) {
56500 num.length--;
56501 if (num.words[num.length - 1] === 0) {
56502 num.length--;
56503 }
56504 }
56505 return num;
56506 };
56507
56508 function P224 () {
56509 MPrime.call(
56510 this,
56511 'p224',
56512 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
56513 }
56514 inherits(P224, MPrime);
56515
56516 function P192 () {
56517 MPrime.call(
56518 this,
56519 'p192',
56520 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
56521 }
56522 inherits(P192, MPrime);
56523
56524 function P25519 () {
56525 // 2 ^ 255 - 19
56526 MPrime.call(
56527 this,
56528 '25519',
56529 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
56530 }
56531 inherits(P25519, MPrime);
56532
56533 P25519.prototype.imulK = function imulK (num) {
56534 // K = 0x13
56535 var carry = 0;
56536 for (var i = 0; i < num.length; i++) {
56537 var hi = (num.words[i] | 0) * 0x13 + carry;
56538 var lo = hi & 0x3ffffff;
56539 hi >>>= 26;
56540
56541 num.words[i] = lo;
56542 carry = hi;
56543 }
56544 if (carry !== 0) {
56545 num.words[num.length++] = carry;
56546 }
56547 return num;
56548 };
56549
56550 // Exported mostly for testing purposes, use plain name instead
56551 BN._prime = function prime (name) {
56552 // Cached version of prime
56553 if (primes[name]) return primes[name];
56554
56555 var prime;
56556 if (name === 'k256') {
56557 prime = new K256();
56558 } else if (name === 'p224') {
56559 prime = new P224();
56560 } else if (name === 'p192') {
56561 prime = new P192();
56562 } else if (name === 'p25519') {
56563 prime = new P25519();
56564 } else {
56565 throw new Error('Unknown prime ' + name);
56566 }
56567 primes[name] = prime;
56568
56569 return prime;
56570 };
56571
56572 //
56573 // Base reduction engine
56574 //
56575 function Red (m) {
56576 if (typeof m === 'string') {
56577 var prime = BN._prime(m);
56578 this.m = prime.p;
56579 this.prime = prime;
56580 } else {
56581 assert(m.gtn(1), 'modulus must be greater than 1');
56582 this.m = m;
56583 this.prime = null;
56584 }
56585 }
56586
56587 Red.prototype._verify1 = function _verify1 (a) {
56588 assert(a.negative === 0, 'red works only with positives');
56589 assert(a.red, 'red works only with red numbers');
56590 };
56591
56592 Red.prototype._verify2 = function _verify2 (a, b) {
56593 assert((a.negative | b.negative) === 0, 'red works only with positives');
56594 assert(a.red && a.red === b.red,
56595 'red works only with red numbers');
56596 };
56597
56598 Red.prototype.imod = function imod (a) {
56599 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
56600 return a.umod(this.m)._forceRed(this);
56601 };
56602
56603 Red.prototype.neg = function neg (a) {
56604 if (a.isZero()) {
56605 return a.clone();
56606 }
56607
56608 return this.m.sub(a)._forceRed(this);
56609 };
56610
56611 Red.prototype.add = function add (a, b) {
56612 this._verify2(a, b);
56613
56614 var res = a.add(b);
56615 if (res.cmp(this.m) >= 0) {
56616 res.isub(this.m);
56617 }
56618 return res._forceRed(this);
56619 };
56620
56621 Red.prototype.iadd = function iadd (a, b) {
56622 this._verify2(a, b);
56623
56624 var res = a.iadd(b);
56625 if (res.cmp(this.m) >= 0) {
56626 res.isub(this.m);
56627 }
56628 return res;
56629 };
56630
56631 Red.prototype.sub = function sub (a, b) {
56632 this._verify2(a, b);
56633
56634 var res = a.sub(b);
56635 if (res.cmpn(0) < 0) {
56636 res.iadd(this.m);
56637 }
56638 return res._forceRed(this);
56639 };
56640
56641 Red.prototype.isub = function isub (a, b) {
56642 this._verify2(a, b);
56643
56644 var res = a.isub(b);
56645 if (res.cmpn(0) < 0) {
56646 res.iadd(this.m);
56647 }
56648 return res;
56649 };
56650
56651 Red.prototype.shl = function shl (a, num) {
56652 this._verify1(a);
56653 return this.imod(a.ushln(num));
56654 };
56655
56656 Red.prototype.imul = function imul (a, b) {
56657 this._verify2(a, b);
56658 return this.imod(a.imul(b));
56659 };
56660
56661 Red.prototype.mul = function mul (a, b) {
56662 this._verify2(a, b);
56663 return this.imod(a.mul(b));
56664 };
56665
56666 Red.prototype.isqr = function isqr (a) {
56667 return this.imul(a, a.clone());
56668 };
56669
56670 Red.prototype.sqr = function sqr (a) {
56671 return this.mul(a, a);
56672 };
56673
56674 Red.prototype.sqrt = function sqrt (a) {
56675 if (a.isZero()) return a.clone();
56676
56677 var mod3 = this.m.andln(3);
56678 assert(mod3 % 2 === 1);
56679
56680 // Fast case
56681 if (mod3 === 3) {
56682 var pow = this.m.add(new BN(1)).iushrn(2);
56683 return this.pow(a, pow);
56684 }
56685
56686 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
56687 //
56688 // Find Q and S, that Q * 2 ^ S = (P - 1)
56689 var q = this.m.subn(1);
56690 var s = 0;
56691 while (!q.isZero() && q.andln(1) === 0) {
56692 s++;
56693 q.iushrn(1);
56694 }
56695 assert(!q.isZero());
56696
56697 var one = new BN(1).toRed(this);
56698 var nOne = one.redNeg();
56699
56700 // Find quadratic non-residue
56701 // NOTE: Max is such because of generalized Riemann hypothesis.
56702 var lpow = this.m.subn(1).iushrn(1);
56703 var z = this.m.bitLength();
56704 z = new BN(2 * z * z).toRed(this);
56705
56706 while (this.pow(z, lpow).cmp(nOne) !== 0) {
56707 z.redIAdd(nOne);
56708 }
56709
56710 var c = this.pow(z, q);
56711 var r = this.pow(a, q.addn(1).iushrn(1));
56712 var t = this.pow(a, q);
56713 var m = s;
56714 while (t.cmp(one) !== 0) {
56715 var tmp = t;
56716 for (var i = 0; tmp.cmp(one) !== 0; i++) {
56717 tmp = tmp.redSqr();
56718 }
56719 assert(i < m);
56720 var b = this.pow(c, new BN(1).iushln(m - i - 1));
56721
56722 r = r.redMul(b);
56723 c = b.redSqr();
56724 t = t.redMul(c);
56725 m = i;
56726 }
56727
56728 return r;
56729 };
56730
56731 Red.prototype.invm = function invm (a) {
56732 var inv = a._invmp(this.m);
56733 if (inv.negative !== 0) {
56734 inv.negative = 0;
56735 return this.imod(inv).redNeg();
56736 } else {
56737 return this.imod(inv);
56738 }
56739 };
56740
56741 Red.prototype.pow = function pow (a, num) {
56742 if (num.isZero()) return new BN(1);
56743 if (num.cmpn(1) === 0) return a.clone();
56744
56745 var windowSize = 4;
56746 var wnd = new Array(1 << windowSize);
56747 wnd[0] = new BN(1).toRed(this);
56748 wnd[1] = a;
56749 for (var i = 2; i < wnd.length; i++) {
56750 wnd[i] = this.mul(wnd[i - 1], a);
56751 }
56752
56753 var res = wnd[0];
56754 var current = 0;
56755 var currentLen = 0;
56756 var start = num.bitLength() % 26;
56757 if (start === 0) {
56758 start = 26;
56759 }
56760
56761 for (i = num.length - 1; i >= 0; i--) {
56762 var word = num.words[i];
56763 for (var j = start - 1; j >= 0; j--) {
56764 var bit = (word >> j) & 1;
56765 if (res !== wnd[0]) {
56766 res = this.sqr(res);
56767 }
56768
56769 if (bit === 0 && current === 0) {
56770 currentLen = 0;
56771 continue;
56772 }
56773
56774 current <<= 1;
56775 current |= bit;
56776 currentLen++;
56777 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
56778
56779 res = this.mul(res, wnd[current]);
56780 currentLen = 0;
56781 current = 0;
56782 }
56783 start = 26;
56784 }
56785
56786 return res;
56787 };
56788
56789 Red.prototype.convertTo = function convertTo (num) {
56790 var r = num.umod(this.m);
56791
56792 return r === num ? r.clone() : r;
56793 };
56794
56795 Red.prototype.convertFrom = function convertFrom (num) {
56796 var res = num.clone();
56797 res.red = null;
56798 return res;
56799 };
56800
56801 //
56802 // Montgomery method engine
56803 //
56804
56805 BN.mont = function mont (num) {
56806 return new Mont(num);
56807 };
56808
56809 function Mont (m) {
56810 Red.call(this, m);
56811
56812 this.shift = this.m.bitLength();
56813 if (this.shift % 26 !== 0) {
56814 this.shift += 26 - (this.shift % 26);
56815 }
56816
56817 this.r = new BN(1).iushln(this.shift);
56818 this.r2 = this.imod(this.r.sqr());
56819 this.rinv = this.r._invmp(this.m);
56820
56821 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
56822 this.minv = this.minv.umod(this.r);
56823 this.minv = this.r.sub(this.minv);
56824 }
56825 inherits(Mont, Red);
56826
56827 Mont.prototype.convertTo = function convertTo (num) {
56828 return this.imod(num.ushln(this.shift));
56829 };
56830
56831 Mont.prototype.convertFrom = function convertFrom (num) {
56832 var r = this.imod(num.mul(this.rinv));
56833 r.red = null;
56834 return r;
56835 };
56836
56837 Mont.prototype.imul = function imul (a, b) {
56838 if (a.isZero() || b.isZero()) {
56839 a.words[0] = 0;
56840 a.length = 1;
56841 return a;
56842 }
56843
56844 var t = a.imul(b);
56845 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
56846 var u = t.isub(c).iushrn(this.shift);
56847 var res = u;
56848
56849 if (u.cmp(this.m) >= 0) {
56850 res = u.isub(this.m);
56851 } else if (u.cmpn(0) < 0) {
56852 res = u.iadd(this.m);
56853 }
56854
56855 return res._forceRed(this);
56856 };
56857
56858 Mont.prototype.mul = function mul (a, b) {
56859 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
56860
56861 var t = a.mul(b);
56862 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
56863 var u = t.isub(c).iushrn(this.shift);
56864 var res = u;
56865 if (u.cmp(this.m) >= 0) {
56866 res = u.isub(this.m);
56867 } else if (u.cmpn(0) < 0) {
56868 res = u.iadd(this.m);
56869 }
56870
56871 return res._forceRed(this);
56872 };
56873
56874 Mont.prototype.invm = function invm (a) {
56875 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
56876 var res = this.imod(a._invmp(this.m).mul(this.r2));
56877 return res._forceRed(this);
56878 };
56879 })(typeof module === 'undefined' || module, this);
56880
56881 },{}],18:[function(require,module,exports){
56882 var r;
56883
56884 module.exports = function rand(len) {
56885 if (!r)
56886 r = new Rand(null);
56887
56888 return r.generate(len);
56889 };
56890
56891 function Rand(rand) {
56892 this.rand = rand;
56893 }
56894 module.exports.Rand = Rand;
56895
56896 Rand.prototype.generate = function generate(len) {
56897 return this._rand(len);
56898 };
56899
56900 // Emulate crypto API using randy
56901 Rand.prototype._rand = function _rand(n) {
56902 if (this.rand.getBytes)
56903 return this.rand.getBytes(n);
56904
56905 var res = new Uint8Array(n);
56906 for (var i = 0; i < res.length; i++)
56907 res[i] = this.rand.getByte();
56908 return res;
56909 };
56910
56911 if (typeof self === 'object') {
56912 if (self.crypto && self.crypto.getRandomValues) {
56913 // Modern browsers
56914 Rand.prototype._rand = function _rand(n) {
56915 var arr = new Uint8Array(n);
56916 self.crypto.getRandomValues(arr);
56917 return arr;
56918 };
56919 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
56920 // IE
56921 Rand.prototype._rand = function _rand(n) {
56922 var arr = new Uint8Array(n);
56923 self.msCrypto.getRandomValues(arr);
56924 return arr;
56925 };
56926
56927 // Safari's WebWorkers do not have `crypto`
56928 } else if (typeof window === 'object') {
56929 // Old junk
56930 Rand.prototype._rand = function() {
56931 throw new Error('Not implemented yet');
56932 };
56933 }
56934 } else {
56935 // Node.js or Web worker with no crypto support
56936 try {
56937 var crypto = require('crypto');
56938 if (typeof crypto.randomBytes !== 'function')
56939 throw new Error('Not supported');
56940
56941 Rand.prototype._rand = function _rand(n) {
56942 return crypto.randomBytes(n);
56943 };
56944 } catch (e) {
56945 }
56946 }
56947
56948 },{"crypto":19}],19:[function(require,module,exports){
56949
56950 },{}],20:[function(require,module,exports){
56951 (function (Buffer){
56952 // based on the aes implimentation in triple sec
56953 // https://github.com/keybase/triplesec
56954
56955 // which is in turn based on the one from crypto-js
56956 // https://code.google.com/p/crypto-js/
56957
56958 var uint_max = Math.pow(2, 32)
56959 function fixup_uint32 (x) {
56960 var ret, x_pos
56961 ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x
56962 return ret
56963 }
56964 function scrub_vec (v) {
56965 for (var i = 0; i < v.length; v++) {
56966 v[i] = 0
56967 }
56968 return false
56969 }
56970
56971 function Global () {
56972 this.SBOX = []
56973 this.INV_SBOX = []
56974 this.SUB_MIX = [[], [], [], []]
56975 this.INV_SUB_MIX = [[], [], [], []]
56976 this.init()
56977 this.RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]
56978 }
56979
56980 Global.prototype.init = function () {
56981 var d, i, sx, t, x, x2, x4, x8, xi, _i
56982 d = (function () {
56983 var _i, _results
56984 _results = []
56985 for (i = _i = 0; _i < 256; i = ++_i) {
56986 if (i < 128) {
56987 _results.push(i << 1)
56988 } else {
56989 _results.push((i << 1) ^ 0x11b)
56990 }
56991 }
56992 return _results
56993 })()
56994 x = 0
56995 xi = 0
56996 for (i = _i = 0; _i < 256; i = ++_i) {
56997 sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)
56998 sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63
56999 this.SBOX[x] = sx
57000 this.INV_SBOX[sx] = x
57001 x2 = d[x]
57002 x4 = d[x2]
57003 x8 = d[x4]
57004 t = (d[sx] * 0x101) ^ (sx * 0x1010100)
57005 this.SUB_MIX[0][x] = (t << 24) | (t >>> 8)
57006 this.SUB_MIX[1][x] = (t << 16) | (t >>> 16)
57007 this.SUB_MIX[2][x] = (t << 8) | (t >>> 24)
57008 this.SUB_MIX[3][x] = t
57009 t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
57010 this.INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)
57011 this.INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)
57012 this.INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)
57013 this.INV_SUB_MIX[3][sx] = t
57014 if (x === 0) {
57015 x = xi = 1
57016 } else {
57017 x = x2 ^ d[d[d[x8 ^ x2]]]
57018 xi ^= d[d[xi]]
57019 }
57020 }
57021 return true
57022 }
57023
57024 var G = new Global()
57025
57026 AES.blockSize = 4 * 4
57027
57028 AES.prototype.blockSize = AES.blockSize
57029
57030 AES.keySize = 256 / 8
57031
57032 AES.prototype.keySize = AES.keySize
57033
57034 function bufferToArray (buf) {
57035 var len = buf.length / 4
57036 var out = new Array(len)
57037 var i = -1
57038 while (++i < len) {
57039 out[i] = buf.readUInt32BE(i * 4)
57040 }
57041 return out
57042 }
57043 function AES (key) {
57044 this._key = bufferToArray(key)
57045 this._doReset()
57046 }
57047
57048 AES.prototype._doReset = function () {
57049 var invKsRow, keySize, keyWords, ksRow, ksRows, t
57050 keyWords = this._key
57051 keySize = keyWords.length
57052 this._nRounds = keySize + 6
57053 ksRows = (this._nRounds + 1) * 4
57054 this._keySchedule = []
57055 for (ksRow = 0; ksRow < ksRows; ksRow++) {
57056 this._keySchedule[ksRow] = ksRow < keySize ? keyWords[ksRow] : (t = this._keySchedule[ksRow - 1], (ksRow % keySize) === 0 ? (t = (t << 8) | (t >>> 24), t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | G.SBOX[t & 0xff], t ^= G.RCON[(ksRow / keySize) | 0] << 24) : keySize > 6 && ksRow % keySize === 4 ? t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | G.SBOX[t & 0xff] : void 0, this._keySchedule[ksRow - keySize] ^ t)
57057 }
57058 this._invKeySchedule = []
57059 for (invKsRow = 0; invKsRow < ksRows; invKsRow++) {
57060 ksRow = ksRows - invKsRow
57061 t = this._keySchedule[ksRow - (invKsRow % 4 ? 0 : 4)]
57062 this._invKeySchedule[invKsRow] = invKsRow < 4 || ksRow <= 4 ? t : G.INV_SUB_MIX[0][G.SBOX[t >>> 24]] ^ G.INV_SUB_MIX[1][G.SBOX[(t >>> 16) & 0xff]] ^ G.INV_SUB_MIX[2][G.SBOX[(t >>> 8) & 0xff]] ^ G.INV_SUB_MIX[3][G.SBOX[t & 0xff]]
57063 }
57064 return true
57065 }
57066
57067 AES.prototype.encryptBlock = function (M) {
57068 M = bufferToArray(new Buffer(M))
57069 var out = this._doCryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX)
57070 var buf = new Buffer(16)
57071 buf.writeUInt32BE(out[0], 0)
57072 buf.writeUInt32BE(out[1], 4)
57073 buf.writeUInt32BE(out[2], 8)
57074 buf.writeUInt32BE(out[3], 12)
57075 return buf
57076 }
57077
57078 AES.prototype.decryptBlock = function (M) {
57079 M = bufferToArray(new Buffer(M))
57080 var temp = [M[3], M[1]]
57081 M[1] = temp[0]
57082 M[3] = temp[1]
57083 var out = this._doCryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX)
57084 var buf = new Buffer(16)
57085 buf.writeUInt32BE(out[0], 0)
57086 buf.writeUInt32BE(out[3], 4)
57087 buf.writeUInt32BE(out[2], 8)
57088 buf.writeUInt32BE(out[1], 12)
57089 return buf
57090 }
57091
57092 AES.prototype.scrub = function () {
57093 scrub_vec(this._keySchedule)
57094 scrub_vec(this._invKeySchedule)
57095 scrub_vec(this._key)
57096 }
57097
57098 AES.prototype._doCryptBlock = function (M, keySchedule, SUB_MIX, SBOX) {
57099 var ksRow, s0, s1, s2, s3, t0, t1, t2, t3
57100
57101 s0 = M[0] ^ keySchedule[0]
57102 s1 = M[1] ^ keySchedule[1]
57103 s2 = M[2] ^ keySchedule[2]
57104 s3 = M[3] ^ keySchedule[3]
57105 ksRow = 4
57106 for (var round = 1; round < this._nRounds; round++) {
57107 t0 = SUB_MIX[0][s0 >>> 24] ^ SUB_MIX[1][(s1 >>> 16) & 0xff] ^ SUB_MIX[2][(s2 >>> 8) & 0xff] ^ SUB_MIX[3][s3 & 0xff] ^ keySchedule[ksRow++]
57108 t1 = SUB_MIX[0][s1 >>> 24] ^ SUB_MIX[1][(s2 >>> 16) & 0xff] ^ SUB_MIX[2][(s3 >>> 8) & 0xff] ^ SUB_MIX[3][s0 & 0xff] ^ keySchedule[ksRow++]
57109 t2 = SUB_MIX[0][s2 >>> 24] ^ SUB_MIX[1][(s3 >>> 16) & 0xff] ^ SUB_MIX[2][(s0 >>> 8) & 0xff] ^ SUB_MIX[3][s1 & 0xff] ^ keySchedule[ksRow++]
57110 t3 = SUB_MIX[0][s3 >>> 24] ^ SUB_MIX[1][(s0 >>> 16) & 0xff] ^ SUB_MIX[2][(s1 >>> 8) & 0xff] ^ SUB_MIX[3][s2 & 0xff] ^ keySchedule[ksRow++]
57111 s0 = t0
57112 s1 = t1
57113 s2 = t2
57114 s3 = t3
57115 }
57116 t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]
57117 t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]
57118 t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]
57119 t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]
57120 return [
57121 fixup_uint32(t0),
57122 fixup_uint32(t1),
57123 fixup_uint32(t2),
57124 fixup_uint32(t3)
57125 ]
57126 }
57127
57128 exports.AES = AES
57129
57130 }).call(this,require("buffer").Buffer)
57131 },{"buffer":47}],21:[function(require,module,exports){
57132 (function (Buffer){
57133 var aes = require('./aes')
57134 var Transform = require('cipher-base')
57135 var inherits = require('inherits')
57136 var GHASH = require('./ghash')
57137 var xor = require('buffer-xor')
57138 inherits(StreamCipher, Transform)
57139 module.exports = StreamCipher
57140
57141 function StreamCipher (mode, key, iv, decrypt) {
57142 if (!(this instanceof StreamCipher)) {
57143 return new StreamCipher(mode, key, iv)
57144 }
57145 Transform.call(this)
57146 this._finID = Buffer.concat([iv, new Buffer([0, 0, 0, 1])])
57147 iv = Buffer.concat([iv, new Buffer([0, 0, 0, 2])])
57148 this._cipher = new aes.AES(key)
57149 this._prev = new Buffer(iv.length)
57150 this._cache = new Buffer('')
57151 this._secCache = new Buffer('')
57152 this._decrypt = decrypt
57153 this._alen = 0
57154 this._len = 0
57155 iv.copy(this._prev)
57156 this._mode = mode
57157 var h = new Buffer(4)
57158 h.fill(0)
57159 this._ghash = new GHASH(this._cipher.encryptBlock(h))
57160 this._authTag = null
57161 this._called = false
57162 }
57163 StreamCipher.prototype._update = function (chunk) {
57164 if (!this._called && this._alen) {
57165 var rump = 16 - (this._alen % 16)
57166 if (rump < 16) {
57167 rump = new Buffer(rump)
57168 rump.fill(0)
57169 this._ghash.update(rump)
57170 }
57171 }
57172 this._called = true
57173 var out = this._mode.encrypt(this, chunk)
57174 if (this._decrypt) {
57175 this._ghash.update(chunk)
57176 } else {
57177 this._ghash.update(out)
57178 }
57179 this._len += chunk.length
57180 return out
57181 }
57182 StreamCipher.prototype._final = function () {
57183 if (this._decrypt && !this._authTag) {
57184 throw new Error('Unsupported state or unable to authenticate data')
57185 }
57186 var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))
57187 if (this._decrypt) {
57188 if (xorTest(tag, this._authTag)) {
57189 throw new Error('Unsupported state or unable to authenticate data')
57190 }
57191 } else {
57192 this._authTag = tag
57193 }
57194 this._cipher.scrub()
57195 }
57196 StreamCipher.prototype.getAuthTag = function getAuthTag () {
57197 if (!this._decrypt && Buffer.isBuffer(this._authTag)) {
57198 return this._authTag
57199 } else {
57200 throw new Error('Attempting to get auth tag in unsupported state')
57201 }
57202 }
57203 StreamCipher.prototype.setAuthTag = function setAuthTag (tag) {
57204 if (this._decrypt) {
57205 this._authTag = tag
57206 } else {
57207 throw new Error('Attempting to set auth tag in unsupported state')
57208 }
57209 }
57210 StreamCipher.prototype.setAAD = function setAAD (buf) {
57211 if (!this._called) {
57212 this._ghash.update(buf)
57213 this._alen += buf.length
57214 } else {
57215 throw new Error('Attempting to set AAD in unsupported state')
57216 }
57217 }
57218 function xorTest (a, b) {
57219 var out = 0
57220 if (a.length !== b.length) {
57221 out++
57222 }
57223 var len = Math.min(a.length, b.length)
57224 var i = -1
57225 while (++i < len) {
57226 out += (a[i] ^ b[i])
57227 }
57228 return out
57229 }
57230
57231 }).call(this,require("buffer").Buffer)
57232 },{"./aes":20,"./ghash":25,"buffer":47,"buffer-xor":46,"cipher-base":48,"inherits":95}],22:[function(require,module,exports){
57233 var ciphers = require('./encrypter')
57234 exports.createCipher = exports.Cipher = ciphers.createCipher
57235 exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv
57236 var deciphers = require('./decrypter')
57237 exports.createDecipher = exports.Decipher = deciphers.createDecipher
57238 exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv
57239 var modes = require('./modes')
57240 function getCiphers () {
57241 return Object.keys(modes)
57242 }
57243 exports.listCiphers = exports.getCiphers = getCiphers
57244
57245 },{"./decrypter":23,"./encrypter":24,"./modes":26}],23:[function(require,module,exports){
57246 (function (Buffer){
57247 var aes = require('./aes')
57248 var Transform = require('cipher-base')
57249 var inherits = require('inherits')
57250 var modes = require('./modes')
57251 var StreamCipher = require('./streamCipher')
57252 var AuthCipher = require('./authCipher')
57253 var ebtk = require('evp_bytestokey')
57254
57255 inherits(Decipher, Transform)
57256 function Decipher (mode, key, iv) {
57257 if (!(this instanceof Decipher)) {
57258 return new Decipher(mode, key, iv)
57259 }
57260 Transform.call(this)
57261 this._cache = new Splitter()
57262 this._last = void 0
57263 this._cipher = new aes.AES(key)
57264 this._prev = new Buffer(iv.length)
57265 iv.copy(this._prev)
57266 this._mode = mode
57267 this._autopadding = true
57268 }
57269 Decipher.prototype._update = function (data) {
57270 this._cache.add(data)
57271 var chunk
57272 var thing
57273 var out = []
57274 while ((chunk = this._cache.get(this._autopadding))) {
57275 thing = this._mode.decrypt(this, chunk)
57276 out.push(thing)
57277 }
57278 return Buffer.concat(out)
57279 }
57280 Decipher.prototype._final = function () {
57281 var chunk = this._cache.flush()
57282 if (this._autopadding) {
57283 return unpad(this._mode.decrypt(this, chunk))
57284 } else if (chunk) {
57285 throw new Error('data not multiple of block length')
57286 }
57287 }
57288 Decipher.prototype.setAutoPadding = function (setTo) {
57289 this._autopadding = !!setTo
57290 return this
57291 }
57292 function Splitter () {
57293 if (!(this instanceof Splitter)) {
57294 return new Splitter()
57295 }
57296 this.cache = new Buffer('')
57297 }
57298 Splitter.prototype.add = function (data) {
57299 this.cache = Buffer.concat([this.cache, data])
57300 }
57301
57302 Splitter.prototype.get = function (autoPadding) {
57303 var out
57304 if (autoPadding) {
57305 if (this.cache.length > 16) {
57306 out = this.cache.slice(0, 16)
57307 this.cache = this.cache.slice(16)
57308 return out
57309 }
57310 } else {
57311 if (this.cache.length >= 16) {
57312 out = this.cache.slice(0, 16)
57313 this.cache = this.cache.slice(16)
57314 return out
57315 }
57316 }
57317 return null
57318 }
57319 Splitter.prototype.flush = function () {
57320 if (this.cache.length) {
57321 return this.cache
57322 }
57323 }
57324 function unpad (last) {
57325 var padded = last[15]
57326 var i = -1
57327 while (++i < padded) {
57328 if (last[(i + (16 - padded))] !== padded) {
57329 throw new Error('unable to decrypt data')
57330 }
57331 }
57332 if (padded === 16) {
57333 return
57334 }
57335 return last.slice(0, 16 - padded)
57336 }
57337
57338 var modelist = {
57339 ECB: require('./modes/ecb'),
57340 CBC: require('./modes/cbc'),
57341 CFB: require('./modes/cfb'),
57342 CFB8: require('./modes/cfb8'),
57343 CFB1: require('./modes/cfb1'),
57344 OFB: require('./modes/ofb'),
57345 CTR: require('./modes/ctr'),
57346 GCM: require('./modes/ctr')
57347 }
57348
57349 function createDecipheriv (suite, password, iv) {
57350 var config = modes[suite.toLowerCase()]
57351 if (!config) {
57352 throw new TypeError('invalid suite type')
57353 }
57354 if (typeof iv === 'string') {
57355 iv = new Buffer(iv)
57356 }
57357 if (typeof password === 'string') {
57358 password = new Buffer(password)
57359 }
57360 if (password.length !== config.key / 8) {
57361 throw new TypeError('invalid key length ' + password.length)
57362 }
57363 if (iv.length !== config.iv) {
57364 throw new TypeError('invalid iv length ' + iv.length)
57365 }
57366 if (config.type === 'stream') {
57367 return new StreamCipher(modelist[config.mode], password, iv, true)
57368 } else if (config.type === 'auth') {
57369 return new AuthCipher(modelist[config.mode], password, iv, true)
57370 }
57371 return new Decipher(modelist[config.mode], password, iv)
57372 }
57373
57374 function createDecipher (suite, password) {
57375 var config = modes[suite.toLowerCase()]
57376 if (!config) {
57377 throw new TypeError('invalid suite type')
57378 }
57379 var keys = ebtk(password, false, config.key, config.iv)
57380 return createDecipheriv(suite, keys.key, keys.iv)
57381 }
57382 exports.createDecipher = createDecipher
57383 exports.createDecipheriv = createDecipheriv
57384
57385 }).call(this,require("buffer").Buffer)
57386 },{"./aes":20,"./authCipher":21,"./modes":26,"./modes/cbc":27,"./modes/cfb":28,"./modes/cfb1":29,"./modes/cfb8":30,"./modes/ctr":31,"./modes/ecb":32,"./modes/ofb":33,"./streamCipher":34,"buffer":47,"cipher-base":48,"evp_bytestokey":84,"inherits":95}],24:[function(require,module,exports){
57387 (function (Buffer){
57388 var aes = require('./aes')
57389 var Transform = require('cipher-base')
57390 var inherits = require('inherits')
57391 var modes = require('./modes')
57392 var ebtk = require('evp_bytestokey')
57393 var StreamCipher = require('./streamCipher')
57394 var AuthCipher = require('./authCipher')
57395 inherits(Cipher, Transform)
57396 function Cipher (mode, key, iv) {
57397 if (!(this instanceof Cipher)) {
57398 return new Cipher(mode, key, iv)
57399 }
57400 Transform.call(this)
57401 this._cache = new Splitter()
57402 this._cipher = new aes.AES(key)
57403 this._prev = new Buffer(iv.length)
57404 iv.copy(this._prev)
57405 this._mode = mode
57406 this._autopadding = true
57407 }
57408 Cipher.prototype._update = function (data) {
57409 this._cache.add(data)
57410 var chunk
57411 var thing
57412 var out = []
57413 while ((chunk = this._cache.get())) {
57414 thing = this._mode.encrypt(this, chunk)
57415 out.push(thing)
57416 }
57417 return Buffer.concat(out)
57418 }
57419 Cipher.prototype._final = function () {
57420 var chunk = this._cache.flush()
57421 if (this._autopadding) {
57422 chunk = this._mode.encrypt(this, chunk)
57423 this._cipher.scrub()
57424 return chunk
57425 } else if (chunk.toString('hex') !== '10101010101010101010101010101010') {
57426 this._cipher.scrub()
57427 throw new Error('data not multiple of block length')
57428 }
57429 }
57430 Cipher.prototype.setAutoPadding = function (setTo) {
57431 this._autopadding = !!setTo
57432 return this
57433 }
57434
57435 function Splitter () {
57436 if (!(this instanceof Splitter)) {
57437 return new Splitter()
57438 }
57439 this.cache = new Buffer('')
57440 }
57441 Splitter.prototype.add = function (data) {
57442 this.cache = Buffer.concat([this.cache, data])
57443 }
57444
57445 Splitter.prototype.get = function () {
57446 if (this.cache.length > 15) {
57447 var out = this.cache.slice(0, 16)
57448 this.cache = this.cache.slice(16)
57449 return out
57450 }
57451 return null
57452 }
57453 Splitter.prototype.flush = function () {
57454 var len = 16 - this.cache.length
57455 var padBuff = new Buffer(len)
57456
57457 var i = -1
57458 while (++i < len) {
57459 padBuff.writeUInt8(len, i)
57460 }
57461 var out = Buffer.concat([this.cache, padBuff])
57462 return out
57463 }
57464 var modelist = {
57465 ECB: require('./modes/ecb'),
57466 CBC: require('./modes/cbc'),
57467 CFB: require('./modes/cfb'),
57468 CFB8: require('./modes/cfb8'),
57469 CFB1: require('./modes/cfb1'),
57470 OFB: require('./modes/ofb'),
57471 CTR: require('./modes/ctr'),
57472 GCM: require('./modes/ctr')
57473 }
57474
57475 function createCipheriv (suite, password, iv) {
57476 var config = modes[suite.toLowerCase()]
57477 if (!config) {
57478 throw new TypeError('invalid suite type')
57479 }
57480 if (typeof iv === 'string') {
57481 iv = new Buffer(iv)
57482 }
57483 if (typeof password === 'string') {
57484 password = new Buffer(password)
57485 }
57486 if (password.length !== config.key / 8) {
57487 throw new TypeError('invalid key length ' + password.length)
57488 }
57489 if (iv.length !== config.iv) {
57490 throw new TypeError('invalid iv length ' + iv.length)
57491 }
57492 if (config.type === 'stream') {
57493 return new StreamCipher(modelist[config.mode], password, iv)
57494 } else if (config.type === 'auth') {
57495 return new AuthCipher(modelist[config.mode], password, iv)
57496 }
57497 return new Cipher(modelist[config.mode], password, iv)
57498 }
57499 function createCipher (suite, password) {
57500 var config = modes[suite.toLowerCase()]
57501 if (!config) {
57502 throw new TypeError('invalid suite type')
57503 }
57504 var keys = ebtk(password, false, config.key, config.iv)
57505 return createCipheriv(suite, keys.key, keys.iv)
57506 }
57507
57508 exports.createCipheriv = createCipheriv
57509 exports.createCipher = createCipher
57510
57511 }).call(this,require("buffer").Buffer)
57512 },{"./aes":20,"./authCipher":21,"./modes":26,"./modes/cbc":27,"./modes/cfb":28,"./modes/cfb1":29,"./modes/cfb8":30,"./modes/ctr":31,"./modes/ecb":32,"./modes/ofb":33,"./streamCipher":34,"buffer":47,"cipher-base":48,"evp_bytestokey":84,"inherits":95}],25:[function(require,module,exports){
57513 (function (Buffer){
57514 var zeros = new Buffer(16)
57515 zeros.fill(0)
57516 module.exports = GHASH
57517 function GHASH (key) {
57518 this.h = key
57519 this.state = new Buffer(16)
57520 this.state.fill(0)
57521 this.cache = new Buffer('')
57522 }
57523 // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html
57524 // by Juho Vähä-Herttua
57525 GHASH.prototype.ghash = function (block) {
57526 var i = -1
57527 while (++i < block.length) {
57528 this.state[i] ^= block[i]
57529 }
57530 this._multiply()
57531 }
57532
57533 GHASH.prototype._multiply = function () {
57534 var Vi = toArray(this.h)
57535 var Zi = [0, 0, 0, 0]
57536 var j, xi, lsb_Vi
57537 var i = -1
57538 while (++i < 128) {
57539 xi = (this.state[~~(i / 8)] & (1 << (7 - i % 8))) !== 0
57540 if (xi) {
57541 // Z_i+1 = Z_i ^ V_i
57542 Zi = xor(Zi, Vi)
57543 }
57544
57545 // Store the value of LSB(V_i)
57546 lsb_Vi = (Vi[3] & 1) !== 0
57547
57548 // V_i+1 = V_i >> 1
57549 for (j = 3; j > 0; j--) {
57550 Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)
57551 }
57552 Vi[0] = Vi[0] >>> 1
57553
57554 // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R
57555 if (lsb_Vi) {
57556 Vi[0] = Vi[0] ^ (0xe1 << 24)
57557 }
57558 }
57559 this.state = fromArray(Zi)
57560 }
57561 GHASH.prototype.update = function (buf) {
57562 this.cache = Buffer.concat([this.cache, buf])
57563 var chunk
57564 while (this.cache.length >= 16) {
57565 chunk = this.cache.slice(0, 16)
57566 this.cache = this.cache.slice(16)
57567 this.ghash(chunk)
57568 }
57569 }
57570 GHASH.prototype.final = function (abl, bl) {
57571 if (this.cache.length) {
57572 this.ghash(Buffer.concat([this.cache, zeros], 16))
57573 }
57574 this.ghash(fromArray([
57575 0, abl,
57576 0, bl
57577 ]))
57578 return this.state
57579 }
57580
57581 function toArray (buf) {
57582 return [
57583 buf.readUInt32BE(0),
57584 buf.readUInt32BE(4),
57585 buf.readUInt32BE(8),
57586 buf.readUInt32BE(12)
57587 ]
57588 }
57589 function fromArray (out) {
57590 out = out.map(fixup_uint32)
57591 var buf = new Buffer(16)
57592 buf.writeUInt32BE(out[0], 0)
57593 buf.writeUInt32BE(out[1], 4)
57594 buf.writeUInt32BE(out[2], 8)
57595 buf.writeUInt32BE(out[3], 12)
57596 return buf
57597 }
57598 var uint_max = Math.pow(2, 32)
57599 function fixup_uint32 (x) {
57600 var ret, x_pos
57601 ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x
57602 return ret
57603 }
57604 function xor (a, b) {
57605 return [
57606 a[0] ^ b[0],
57607 a[1] ^ b[1],
57608 a[2] ^ b[2],
57609 a[3] ^ b[3]
57610 ]
57611 }
57612
57613 }).call(this,require("buffer").Buffer)
57614 },{"buffer":47}],26:[function(require,module,exports){
57615 exports['aes-128-ecb'] = {
57616 cipher: 'AES',
57617 key: 128,
57618 iv: 0,
57619 mode: 'ECB',
57620 type: 'block'
57621 }
57622 exports['aes-192-ecb'] = {
57623 cipher: 'AES',
57624 key: 192,
57625 iv: 0,
57626 mode: 'ECB',
57627 type: 'block'
57628 }
57629 exports['aes-256-ecb'] = {
57630 cipher: 'AES',
57631 key: 256,
57632 iv: 0,
57633 mode: 'ECB',
57634 type: 'block'
57635 }
57636 exports['aes-128-cbc'] = {
57637 cipher: 'AES',
57638 key: 128,
57639 iv: 16,
57640 mode: 'CBC',
57641 type: 'block'
57642 }
57643 exports['aes-192-cbc'] = {
57644 cipher: 'AES',
57645 key: 192,
57646 iv: 16,
57647 mode: 'CBC',
57648 type: 'block'
57649 }
57650 exports['aes-256-cbc'] = {
57651 cipher: 'AES',
57652 key: 256,
57653 iv: 16,
57654 mode: 'CBC',
57655 type: 'block'
57656 }
57657 exports['aes128'] = exports['aes-128-cbc']
57658 exports['aes192'] = exports['aes-192-cbc']
57659 exports['aes256'] = exports['aes-256-cbc']
57660 exports['aes-128-cfb'] = {
57661 cipher: 'AES',
57662 key: 128,
57663 iv: 16,
57664 mode: 'CFB',
57665 type: 'stream'
57666 }
57667 exports['aes-192-cfb'] = {
57668 cipher: 'AES',
57669 key: 192,
57670 iv: 16,
57671 mode: 'CFB',
57672 type: 'stream'
57673 }
57674 exports['aes-256-cfb'] = {
57675 cipher: 'AES',
57676 key: 256,
57677 iv: 16,
57678 mode: 'CFB',
57679 type: 'stream'
57680 }
57681 exports['aes-128-cfb8'] = {
57682 cipher: 'AES',
57683 key: 128,
57684 iv: 16,
57685 mode: 'CFB8',
57686 type: 'stream'
57687 }
57688 exports['aes-192-cfb8'] = {
57689 cipher: 'AES',
57690 key: 192,
57691 iv: 16,
57692 mode: 'CFB8',
57693 type: 'stream'
57694 }
57695 exports['aes-256-cfb8'] = {
57696 cipher: 'AES',
57697 key: 256,
57698 iv: 16,
57699 mode: 'CFB8',
57700 type: 'stream'
57701 }
57702 exports['aes-128-cfb1'] = {
57703 cipher: 'AES',
57704 key: 128,
57705 iv: 16,
57706 mode: 'CFB1',
57707 type: 'stream'
57708 }
57709 exports['aes-192-cfb1'] = {
57710 cipher: 'AES',
57711 key: 192,
57712 iv: 16,
57713 mode: 'CFB1',
57714 type: 'stream'
57715 }
57716 exports['aes-256-cfb1'] = {
57717 cipher: 'AES',
57718 key: 256,
57719 iv: 16,
57720 mode: 'CFB1',
57721 type: 'stream'
57722 }
57723 exports['aes-128-ofb'] = {
57724 cipher: 'AES',
57725 key: 128,
57726 iv: 16,
57727 mode: 'OFB',
57728 type: 'stream'
57729 }
57730 exports['aes-192-ofb'] = {
57731 cipher: 'AES',
57732 key: 192,
57733 iv: 16,
57734 mode: 'OFB',
57735 type: 'stream'
57736 }
57737 exports['aes-256-ofb'] = {
57738 cipher: 'AES',
57739 key: 256,
57740 iv: 16,
57741 mode: 'OFB',
57742 type: 'stream'
57743 }
57744 exports['aes-128-ctr'] = {
57745 cipher: 'AES',
57746 key: 128,
57747 iv: 16,
57748 mode: 'CTR',
57749 type: 'stream'
57750 }
57751 exports['aes-192-ctr'] = {
57752 cipher: 'AES',
57753 key: 192,
57754 iv: 16,
57755 mode: 'CTR',
57756 type: 'stream'
57757 }
57758 exports['aes-256-ctr'] = {
57759 cipher: 'AES',
57760 key: 256,
57761 iv: 16,
57762 mode: 'CTR',
57763 type: 'stream'
57764 }
57765 exports['aes-128-gcm'] = {
57766 cipher: 'AES',
57767 key: 128,
57768 iv: 12,
57769 mode: 'GCM',
57770 type: 'auth'
57771 }
57772 exports['aes-192-gcm'] = {
57773 cipher: 'AES',
57774 key: 192,
57775 iv: 12,
57776 mode: 'GCM',
57777 type: 'auth'
57778 }
57779 exports['aes-256-gcm'] = {
57780 cipher: 'AES',
57781 key: 256,
57782 iv: 12,
57783 mode: 'GCM',
57784 type: 'auth'
57785 }
57786
57787 },{}],27:[function(require,module,exports){
57788 var xor = require('buffer-xor')
57789
57790 exports.encrypt = function (self, block) {
57791 var data = xor(block, self._prev)
57792
57793 self._prev = self._cipher.encryptBlock(data)
57794 return self._prev
57795 }
57796
57797 exports.decrypt = function (self, block) {
57798 var pad = self._prev
57799
57800 self._prev = block
57801 var out = self._cipher.decryptBlock(block)
57802
57803 return xor(out, pad)
57804 }
57805
57806 },{"buffer-xor":46}],28:[function(require,module,exports){
57807 (function (Buffer){
57808 var xor = require('buffer-xor')
57809
57810 exports.encrypt = function (self, data, decrypt) {
57811 var out = new Buffer('')
57812 var len
57813
57814 while (data.length) {
57815 if (self._cache.length === 0) {
57816 self._cache = self._cipher.encryptBlock(self._prev)
57817 self._prev = new Buffer('')
57818 }
57819
57820 if (self._cache.length <= data.length) {
57821 len = self._cache.length
57822 out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])
57823 data = data.slice(len)
57824 } else {
57825 out = Buffer.concat([out, encryptStart(self, data, decrypt)])
57826 break
57827 }
57828 }
57829
57830 return out
57831 }
57832 function encryptStart (self, data, decrypt) {
57833 var len = data.length
57834 var out = xor(data, self._cache)
57835 self._cache = self._cache.slice(len)
57836 self._prev = Buffer.concat([self._prev, decrypt ? data : out])
57837 return out
57838 }
57839
57840 }).call(this,require("buffer").Buffer)
57841 },{"buffer":47,"buffer-xor":46}],29:[function(require,module,exports){
57842 (function (Buffer){
57843 function encryptByte (self, byteParam, decrypt) {
57844 var pad
57845 var i = -1
57846 var len = 8
57847 var out = 0
57848 var bit, value
57849 while (++i < len) {
57850 pad = self._cipher.encryptBlock(self._prev)
57851 bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0
57852 value = pad[0] ^ bit
57853 out += ((value & 0x80) >> (i % 8))
57854 self._prev = shiftIn(self._prev, decrypt ? bit : value)
57855 }
57856 return out
57857 }
57858 exports.encrypt = function (self, chunk, decrypt) {
57859 var len = chunk.length
57860 var out = new Buffer(len)
57861 var i = -1
57862 while (++i < len) {
57863 out[i] = encryptByte(self, chunk[i], decrypt)
57864 }
57865 return out
57866 }
57867 function shiftIn (buffer, value) {
57868 var len = buffer.length
57869 var i = -1
57870 var out = new Buffer(buffer.length)
57871 buffer = Buffer.concat([buffer, new Buffer([value])])
57872 while (++i < len) {
57873 out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)
57874 }
57875 return out
57876 }
57877
57878 }).call(this,require("buffer").Buffer)
57879 },{"buffer":47}],30:[function(require,module,exports){
57880 (function (Buffer){
57881 function encryptByte (self, byteParam, decrypt) {
57882 var pad = self._cipher.encryptBlock(self._prev)
57883 var out = pad[0] ^ byteParam
57884 self._prev = Buffer.concat([self._prev.slice(1), new Buffer([decrypt ? byteParam : out])])
57885 return out
57886 }
57887 exports.encrypt = function (self, chunk, decrypt) {
57888 var len = chunk.length
57889 var out = new Buffer(len)
57890 var i = -1
57891 while (++i < len) {
57892 out[i] = encryptByte(self, chunk[i], decrypt)
57893 }
57894 return out
57895 }
57896
57897 }).call(this,require("buffer").Buffer)
57898 },{"buffer":47}],31:[function(require,module,exports){
57899 (function (Buffer){
57900 var xor = require('buffer-xor')
57901
57902 function incr32 (iv) {
57903 var len = iv.length
57904 var item
57905 while (len--) {
57906 item = iv.readUInt8(len)
57907 if (item === 255) {
57908 iv.writeUInt8(0, len)
57909 } else {
57910 item++
57911 iv.writeUInt8(item, len)
57912 break
57913 }
57914 }
57915 }
57916
57917 function getBlock (self) {
57918 var out = self._cipher.encryptBlock(self._prev)
57919 incr32(self._prev)
57920 return out
57921 }
57922
57923 exports.encrypt = function (self, chunk) {
57924 while (self._cache.length < chunk.length) {
57925 self._cache = Buffer.concat([self._cache, getBlock(self)])
57926 }
57927 var pad = self._cache.slice(0, chunk.length)
57928 self._cache = self._cache.slice(chunk.length)
57929 return xor(chunk, pad)
57930 }
57931
57932 }).call(this,require("buffer").Buffer)
57933 },{"buffer":47,"buffer-xor":46}],32:[function(require,module,exports){
57934 exports.encrypt = function (self, block) {
57935 return self._cipher.encryptBlock(block)
57936 }
57937 exports.decrypt = function (self, block) {
57938 return self._cipher.decryptBlock(block)
57939 }
57940
57941 },{}],33:[function(require,module,exports){
57942 (function (Buffer){
57943 var xor = require('buffer-xor')
57944
57945 function getBlock (self) {
57946 self._prev = self._cipher.encryptBlock(self._prev)
57947 return self._prev
57948 }
57949
57950 exports.encrypt = function (self, chunk) {
57951 while (self._cache.length < chunk.length) {
57952 self._cache = Buffer.concat([self._cache, getBlock(self)])
57953 }
57954
57955 var pad = self._cache.slice(0, chunk.length)
57956 self._cache = self._cache.slice(chunk.length)
57957 return xor(chunk, pad)
57958 }
57959
57960 }).call(this,require("buffer").Buffer)
57961 },{"buffer":47,"buffer-xor":46}],34:[function(require,module,exports){
57962 (function (Buffer){
57963 var aes = require('./aes')
57964 var Transform = require('cipher-base')
57965 var inherits = require('inherits')
57966
57967 inherits(StreamCipher, Transform)
57968 module.exports = StreamCipher
57969 function StreamCipher (mode, key, iv, decrypt) {
57970 if (!(this instanceof StreamCipher)) {
57971 return new StreamCipher(mode, key, iv)
57972 }
57973 Transform.call(this)
57974 this._cipher = new aes.AES(key)
57975 this._prev = new Buffer(iv.length)
57976 this._cache = new Buffer('')
57977 this._secCache = new Buffer('')
57978 this._decrypt = decrypt
57979 iv.copy(this._prev)
57980 this._mode = mode
57981 }
57982 StreamCipher.prototype._update = function (chunk) {
57983 return this._mode.encrypt(this, chunk, this._decrypt)
57984 }
57985 StreamCipher.prototype._final = function () {
57986 this._cipher.scrub()
57987 }
57988
57989 }).call(this,require("buffer").Buffer)
57990 },{"./aes":20,"buffer":47,"cipher-base":48,"inherits":95}],35:[function(require,module,exports){
57991 var ebtk = require('evp_bytestokey')
57992 var aes = require('browserify-aes/browser')
57993 var DES = require('browserify-des')
57994 var desModes = require('browserify-des/modes')
57995 var aesModes = require('browserify-aes/modes')
57996 function createCipher (suite, password) {
57997 var keyLen, ivLen
57998 suite = suite.toLowerCase()
57999 if (aesModes[suite]) {
58000 keyLen = aesModes[suite].key
58001 ivLen = aesModes[suite].iv
58002 } else if (desModes[suite]) {
58003 keyLen = desModes[suite].key * 8
58004 ivLen = desModes[suite].iv
58005 } else {
58006 throw new TypeError('invalid suite type')
58007 }
58008 var keys = ebtk(password, false, keyLen, ivLen)
58009 return createCipheriv(suite, keys.key, keys.iv)
58010 }
58011 function createDecipher (suite, password) {
58012 var keyLen, ivLen
58013 suite = suite.toLowerCase()
58014 if (aesModes[suite]) {
58015 keyLen = aesModes[suite].key
58016 ivLen = aesModes[suite].iv
58017 } else if (desModes[suite]) {
58018 keyLen = desModes[suite].key * 8
58019 ivLen = desModes[suite].iv
58020 } else {
58021 throw new TypeError('invalid suite type')
58022 }
58023 var keys = ebtk(password, false, keyLen, ivLen)
58024 return createDecipheriv(suite, keys.key, keys.iv)
58025 }
58026
58027 function createCipheriv (suite, key, iv) {
58028 suite = suite.toLowerCase()
58029 if (aesModes[suite]) {
58030 return aes.createCipheriv(suite, key, iv)
58031 } else if (desModes[suite]) {
58032 return new DES({
58033 key: key,
58034 iv: iv,
58035 mode: suite
58036 })
58037 } else {
58038 throw new TypeError('invalid suite type')
58039 }
58040 }
58041 function createDecipheriv (suite, key, iv) {
58042 suite = suite.toLowerCase()
58043 if (aesModes[suite]) {
58044 return aes.createDecipheriv(suite, key, iv)
58045 } else if (desModes[suite]) {
58046 return new DES({
58047 key: key,
58048 iv: iv,
58049 mode: suite,
58050 decrypt: true
58051 })
58052 } else {
58053 throw new TypeError('invalid suite type')
58054 }
58055 }
58056 exports.createCipher = exports.Cipher = createCipher
58057 exports.createCipheriv = exports.Cipheriv = createCipheriv
58058 exports.createDecipher = exports.Decipher = createDecipher
58059 exports.createDecipheriv = exports.Decipheriv = createDecipheriv
58060 function getCiphers () {
58061 return Object.keys(desModes).concat(aes.getCiphers())
58062 }
58063 exports.listCiphers = exports.getCiphers = getCiphers
58064
58065 },{"browserify-aes/browser":22,"browserify-aes/modes":26,"browserify-des":36,"browserify-des/modes":37,"evp_bytestokey":84}],36:[function(require,module,exports){
58066 (function (Buffer){
58067 var CipherBase = require('cipher-base')
58068 var des = require('des.js')
58069 var inherits = require('inherits')
58070
58071 var modes = {
58072 'des-ede3-cbc': des.CBC.instantiate(des.EDE),
58073 'des-ede3': des.EDE,
58074 'des-ede-cbc': des.CBC.instantiate(des.EDE),
58075 'des-ede': des.EDE,
58076 'des-cbc': des.CBC.instantiate(des.DES),
58077 'des-ecb': des.DES
58078 }
58079 modes.des = modes['des-cbc']
58080 modes.des3 = modes['des-ede3-cbc']
58081 module.exports = DES
58082 inherits(DES, CipherBase)
58083 function DES (opts) {
58084 CipherBase.call(this)
58085 var modeName = opts.mode.toLowerCase()
58086 var mode = modes[modeName]
58087 var type
58088 if (opts.decrypt) {
58089 type = 'decrypt'
58090 } else {
58091 type = 'encrypt'
58092 }
58093 var key = opts.key
58094 if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {
58095 key = Buffer.concat([key, key.slice(0, 8)])
58096 }
58097 var iv = opts.iv
58098 this._des = mode.create({
58099 key: key,
58100 iv: iv,
58101 type: type
58102 })
58103 }
58104 DES.prototype._update = function (data) {
58105 return new Buffer(this._des.update(data))
58106 }
58107 DES.prototype._final = function () {
58108 return new Buffer(this._des.final())
58109 }
58110
58111 }).call(this,require("buffer").Buffer)
58112 },{"buffer":47,"cipher-base":48,"des.js":57,"inherits":95}],37:[function(require,module,exports){
58113 exports['des-ecb'] = {
58114 key: 8,
58115 iv: 0
58116 }
58117 exports['des-cbc'] = exports.des = {
58118 key: 8,
58119 iv: 8
58120 }
58121 exports['des-ede3-cbc'] = exports.des3 = {
58122 key: 24,
58123 iv: 8
58124 }
58125 exports['des-ede3'] = {
58126 key: 24,
58127 iv: 0
58128 }
58129 exports['des-ede-cbc'] = {
58130 key: 16,
58131 iv: 8
58132 }
58133 exports['des-ede'] = {
58134 key: 16,
58135 iv: 0
58136 }
58137
58138 },{}],38:[function(require,module,exports){
58139 (function (Buffer){
58140 var bn = require('bn.js');
58141 var randomBytes = require('randombytes');
58142 module.exports = crt;
58143 function blind(priv) {
58144 var r = getr(priv);
58145 var blinder = r.toRed(bn.mont(priv.modulus))
58146 .redPow(new bn(priv.publicExponent)).fromRed();
58147 return {
58148 blinder: blinder,
58149 unblinder:r.invm(priv.modulus)
58150 };
58151 }
58152 function crt(msg, priv) {
58153 var blinds = blind(priv);
58154 var len = priv.modulus.byteLength();
58155 var mod = bn.mont(priv.modulus);
58156 var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);
58157 var c1 = blinded.toRed(bn.mont(priv.prime1));
58158 var c2 = blinded.toRed(bn.mont(priv.prime2));
58159 var qinv = priv.coefficient;
58160 var p = priv.prime1;
58161 var q = priv.prime2;
58162 var m1 = c1.redPow(priv.exponent1);
58163 var m2 = c2.redPow(priv.exponent2);
58164 m1 = m1.fromRed();
58165 m2 = m2.fromRed();
58166 var h = m1.isub(m2).imul(qinv).umod(p);
58167 h.imul(q);
58168 m2.iadd(h);
58169 return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));
58170 }
58171 crt.getr = getr;
58172 function getr(priv) {
58173 var len = priv.modulus.byteLength();
58174 var r = new bn(randomBytes(len));
58175 while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {
58176 r = new bn(randomBytes(len));
58177 }
58178 return r;
58179 }
58180
58181 }).call(this,require("buffer").Buffer)
58182 },{"bn.js":17,"buffer":47,"randombytes":119}],39:[function(require,module,exports){
58183 module.exports = require('./browser/algorithms.json')
58184
58185 },{"./browser/algorithms.json":40}],40:[function(require,module,exports){
58186 module.exports={
58187 "sha224WithRSAEncryption": {
58188 "sign": "rsa",
58189 "hash": "sha224",
58190 "id": "302d300d06096086480165030402040500041c"
58191 },
58192 "RSA-SHA224": {
58193 "sign": "ecdsa/rsa",
58194 "hash": "sha224",
58195 "id": "302d300d06096086480165030402040500041c"
58196 },
58197 "sha256WithRSAEncryption": {
58198 "sign": "rsa",
58199 "hash": "sha256",
58200 "id": "3031300d060960864801650304020105000420"
58201 },
58202 "RSA-SHA256": {
58203 "sign": "ecdsa/rsa",
58204 "hash": "sha256",
58205 "id": "3031300d060960864801650304020105000420"
58206 },
58207 "sha384WithRSAEncryption": {
58208 "sign": "rsa",
58209 "hash": "sha384",
58210 "id": "3041300d060960864801650304020205000430"
58211 },
58212 "RSA-SHA384": {
58213 "sign": "ecdsa/rsa",
58214 "hash": "sha384",
58215 "id": "3041300d060960864801650304020205000430"
58216 },
58217 "sha512WithRSAEncryption": {
58218 "sign": "rsa",
58219 "hash": "sha512",
58220 "id": "3051300d060960864801650304020305000440"
58221 },
58222 "RSA-SHA512": {
58223 "sign": "ecdsa/rsa",
58224 "hash": "sha512",
58225 "id": "3051300d060960864801650304020305000440"
58226 },
58227 "RSA-SHA1": {
58228 "sign": "rsa",
58229 "hash": "sha1",
58230 "id": "3021300906052b0e03021a05000414"
58231 },
58232 "ecdsa-with-SHA1": {
58233 "sign": "ecdsa",
58234 "hash": "sha1",
58235 "id": ""
58236 },
58237 "sha256": {
58238 "sign": "ecdsa",
58239 "hash": "sha256",
58240 "id": ""
58241 },
58242 "sha224": {
58243 "sign": "ecdsa",
58244 "hash": "sha224",
58245 "id": ""
58246 },
58247 "sha384": {
58248 "sign": "ecdsa",
58249 "hash": "sha384",
58250 "id": ""
58251 },
58252 "sha512": {
58253 "sign": "ecdsa",
58254 "hash": "sha512",
58255 "id": ""
58256 },
58257 "DSA-SHA": {
58258 "sign": "dsa",
58259 "hash": "sha1",
58260 "id": ""
58261 },
58262 "DSA-SHA1": {
58263 "sign": "dsa",
58264 "hash": "sha1",
58265 "id": ""
58266 },
58267 "DSA": {
58268 "sign": "dsa",
58269 "hash": "sha1",
58270 "id": ""
58271 },
58272 "DSA-WITH-SHA224": {
58273 "sign": "dsa",
58274 "hash": "sha224",
58275 "id": ""
58276 },
58277 "DSA-SHA224": {
58278 "sign": "dsa",
58279 "hash": "sha224",
58280 "id": ""
58281 },
58282 "DSA-WITH-SHA256": {
58283 "sign": "dsa",
58284 "hash": "sha256",
58285 "id": ""
58286 },
58287 "DSA-SHA256": {
58288 "sign": "dsa",
58289 "hash": "sha256",
58290 "id": ""
58291 },
58292 "DSA-WITH-SHA384": {
58293 "sign": "dsa",
58294 "hash": "sha384",
58295 "id": ""
58296 },
58297 "DSA-SHA384": {
58298 "sign": "dsa",
58299 "hash": "sha384",
58300 "id": ""
58301 },
58302 "DSA-WITH-SHA512": {
58303 "sign": "dsa",
58304 "hash": "sha512",
58305 "id": ""
58306 },
58307 "DSA-SHA512": {
58308 "sign": "dsa",
58309 "hash": "sha512",
58310 "id": ""
58311 },
58312 "DSA-RIPEMD160": {
58313 "sign": "dsa",
58314 "hash": "rmd160",
58315 "id": ""
58316 },
58317 "ripemd160WithRSA": {
58318 "sign": "rsa",
58319 "hash": "rmd160",
58320 "id": "3021300906052b2403020105000414"
58321 },
58322 "RSA-RIPEMD160": {
58323 "sign": "rsa",
58324 "hash": "rmd160",
58325 "id": "3021300906052b2403020105000414"
58326 },
58327 "md5WithRSAEncryption": {
58328 "sign": "rsa",
58329 "hash": "md5",
58330 "id": "3020300c06082a864886f70d020505000410"
58331 },
58332 "RSA-MD5": {
58333 "sign": "rsa",
58334 "hash": "md5",
58335 "id": "3020300c06082a864886f70d020505000410"
58336 }
58337 }
58338
58339 },{}],41:[function(require,module,exports){
58340 module.exports={
58341 "1.3.132.0.10": "secp256k1",
58342 "1.3.132.0.33": "p224",
58343 "1.2.840.10045.3.1.1": "p192",
58344 "1.2.840.10045.3.1.7": "p256",
58345 "1.3.132.0.34": "p384",
58346 "1.3.132.0.35": "p521"
58347 }
58348
58349 },{}],42:[function(require,module,exports){
58350 (function (Buffer){
58351 var createHash = require('create-hash')
58352 var stream = require('stream')
58353 var inherits = require('inherits')
58354 var sign = require('./sign')
58355 var verify = require('./verify')
58356
58357 var algorithms = require('./algorithms.json')
58358 Object.keys(algorithms).forEach(function (key) {
58359 algorithms[key].id = new Buffer(algorithms[key].id, 'hex')
58360 algorithms[key.toLowerCase()] = algorithms[key]
58361 })
58362
58363 function Sign (algorithm) {
58364 stream.Writable.call(this)
58365
58366 var data = algorithms[algorithm]
58367 if (!data) throw new Error('Unknown message digest')
58368
58369 this._hashType = data.hash
58370 this._hash = createHash(data.hash)
58371 this._tag = data.id
58372 this._signType = data.sign
58373 }
58374 inherits(Sign, stream.Writable)
58375
58376 Sign.prototype._write = function _write (data, _, done) {
58377 this._hash.update(data)
58378 done()
58379 }
58380
58381 Sign.prototype.update = function update (data, enc) {
58382 if (typeof data === 'string') data = new Buffer(data, enc)
58383
58384 this._hash.update(data)
58385 return this
58386 }
58387
58388 Sign.prototype.sign = function signMethod (key, enc) {
58389 this.end()
58390 var hash = this._hash.digest()
58391 var sig = sign(hash, key, this._hashType, this._signType, this._tag)
58392
58393 return enc ? sig.toString(enc) : sig
58394 }
58395
58396 function Verify (algorithm) {
58397 stream.Writable.call(this)
58398
58399 var data = algorithms[algorithm]
58400 if (!data) throw new Error('Unknown message digest')
58401
58402 this._hash = createHash(data.hash)
58403 this._tag = data.id
58404 this._signType = data.sign
58405 }
58406 inherits(Verify, stream.Writable)
58407
58408 Verify.prototype._write = function _write (data, _, done) {
58409 this._hash.update(data)
58410 done()
58411 }
58412
58413 Verify.prototype.update = function update (data, enc) {
58414 if (typeof data === 'string') data = new Buffer(data, enc)
58415
58416 this._hash.update(data)
58417 return this
58418 }
58419
58420 Verify.prototype.verify = function verifyMethod (key, sig, enc) {
58421 if (typeof sig === 'string') sig = new Buffer(sig, enc)
58422
58423 this.end()
58424 var hash = this._hash.digest()
58425 return verify(sig, hash, key, this._signType, this._tag)
58426 }
58427
58428 function createSign (algorithm) {
58429 return new Sign(algorithm)
58430 }
58431
58432 function createVerify (algorithm) {
58433 return new Verify(algorithm)
58434 }
58435
58436 module.exports = {
58437 Sign: createSign,
58438 Verify: createVerify,
58439 createSign: createSign,
58440 createVerify: createVerify
58441 }
58442
58443 }).call(this,require("buffer").Buffer)
58444 },{"./algorithms.json":40,"./sign":43,"./verify":44,"buffer":47,"create-hash":51,"inherits":95,"stream":143}],43:[function(require,module,exports){
58445 (function (Buffer){
58446 // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
58447 var createHmac = require('create-hmac')
58448 var crt = require('browserify-rsa')
58449 var EC = require('elliptic').ec
58450 var BN = require('bn.js')
58451 var parseKeys = require('parse-asn1')
58452 var curves = require('./curves.json')
58453
58454 function sign (hash, key, hashType, signType, tag) {
58455 var priv = parseKeys(key)
58456 if (priv.curve) {
58457 // rsa keys can be interpreted as ecdsa ones in openssl
58458 if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')
58459 return ecSign(hash, priv)
58460 } else if (priv.type === 'dsa') {
58461 if (signType !== 'dsa') throw new Error('wrong private key type')
58462 return dsaSign(hash, priv, hashType)
58463 } else {
58464 if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')
58465 }
58466 hash = Buffer.concat([tag, hash])
58467 var len = priv.modulus.byteLength()
58468 var pad = [ 0, 1 ]
58469 while (hash.length + pad.length + 1 < len) pad.push(0xff)
58470 pad.push(0x00)
58471 var i = -1
58472 while (++i < hash.length) pad.push(hash[i])
58473
58474 var out = crt(pad, priv)
58475 return out
58476 }
58477
58478 function ecSign (hash, priv) {
58479 var curveId = curves[priv.curve.join('.')]
58480 if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))
58481
58482 var curve = new EC(curveId)
58483 var key = curve.keyFromPrivate(priv.privateKey)
58484 var out = key.sign(hash)
58485
58486 return new Buffer(out.toDER())
58487 }
58488
58489 function dsaSign (hash, priv, algo) {
58490 var x = priv.params.priv_key
58491 var p = priv.params.p
58492 var q = priv.params.q
58493 var g = priv.params.g
58494 var r = new BN(0)
58495 var k
58496 var H = bits2int(hash, q).mod(q)
58497 var s = false
58498 var kv = getKey(x, q, hash, algo)
58499 while (s === false) {
58500 k = makeKey(q, kv, algo)
58501 r = makeR(g, k, p, q)
58502 s = k.invm(q).imul(H.add(x.mul(r))).mod(q)
58503 if (s.cmpn(0) === 0) {
58504 s = false
58505 r = new BN(0)
58506 }
58507 }
58508 return toDER(r, s)
58509 }
58510
58511 function toDER (r, s) {
58512 r = r.toArray()
58513 s = s.toArray()
58514
58515 // Pad values
58516 if (r[0] & 0x80) r = [ 0 ].concat(r)
58517 if (s[0] & 0x80) s = [ 0 ].concat(s)
58518
58519 var total = r.length + s.length + 4
58520 var res = [ 0x30, total, 0x02, r.length ]
58521 res = res.concat(r, [ 0x02, s.length ], s)
58522 return new Buffer(res)
58523 }
58524
58525 function getKey (x, q, hash, algo) {
58526 x = new Buffer(x.toArray())
58527 if (x.length < q.byteLength()) {
58528 var zeros = new Buffer(q.byteLength() - x.length)
58529 zeros.fill(0)
58530 x = Buffer.concat([ zeros, x ])
58531 }
58532 var hlen = hash.length
58533 var hbits = bits2octets(hash, q)
58534 var v = new Buffer(hlen)
58535 v.fill(1)
58536 var k = new Buffer(hlen)
58537 k.fill(0)
58538 k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest()
58539 v = createHmac(algo, k).update(v).digest()
58540 k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest()
58541 v = createHmac(algo, k).update(v).digest()
58542 return { k: k, v: v }
58543 }
58544
58545 function bits2int (obits, q) {
58546 var bits = new BN(obits)
58547 var shift = (obits.length << 3) - q.bitLength()
58548 if (shift > 0) bits.ishrn(shift)
58549 return bits
58550 }
58551
58552 function bits2octets (bits, q) {
58553 bits = bits2int(bits, q)
58554 bits = bits.mod(q)
58555 var out = new Buffer(bits.toArray())
58556 if (out.length < q.byteLength()) {
58557 var zeros = new Buffer(q.byteLength() - out.length)
58558 zeros.fill(0)
58559 out = Buffer.concat([ zeros, out ])
58560 }
58561 return out
58562 }
58563
58564 function makeKey (q, kv, algo) {
58565 var t
58566 var k
58567
58568 do {
58569 t = new Buffer(0)
58570
58571 while (t.length * 8 < q.bitLength()) {
58572 kv.v = createHmac(algo, kv.k).update(kv.v).digest()
58573 t = Buffer.concat([ t, kv.v ])
58574 }
58575
58576 k = bits2int(t, q)
58577 kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest()
58578 kv.v = createHmac(algo, kv.k).update(kv.v).digest()
58579 } while (k.cmp(q) !== -1)
58580
58581 return k
58582 }
58583
58584 function makeR (g, k, p, q) {
58585 return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)
58586 }
58587
58588 module.exports = sign
58589 module.exports.getKey = getKey
58590 module.exports.makeKey = makeKey
58591
58592 }).call(this,require("buffer").Buffer)
58593 },{"./curves.json":41,"bn.js":17,"browserify-rsa":38,"buffer":47,"create-hmac":54,"elliptic":67,"parse-asn1":105}],44:[function(require,module,exports){
58594 (function (Buffer){
58595 // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
58596 var BN = require('bn.js')
58597 var EC = require('elliptic').ec
58598 var parseKeys = require('parse-asn1')
58599 var curves = require('./curves.json')
58600
58601 function verify (sig, hash, key, signType, tag) {
58602 var pub = parseKeys(key)
58603 if (pub.type === 'ec') {
58604 // rsa keys can be interpreted as ecdsa ones in openssl
58605 if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')
58606 return ecVerify(sig, hash, pub)
58607 } else if (pub.type === 'dsa') {
58608 if (signType !== 'dsa') throw new Error('wrong public key type')
58609 return dsaVerify(sig, hash, pub)
58610 } else {
58611 if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')
58612 }
58613 hash = Buffer.concat([tag, hash])
58614 var len = pub.modulus.byteLength()
58615 var pad = [ 1 ]
58616 var padNum = 0
58617 while (hash.length + pad.length + 2 < len) {
58618 pad.push(0xff)
58619 padNum++
58620 }
58621 pad.push(0x00)
58622 var i = -1
58623 while (++i < hash.length) {
58624 pad.push(hash[i])
58625 }
58626 pad = new Buffer(pad)
58627 var red = BN.mont(pub.modulus)
58628 sig = new BN(sig).toRed(red)
58629
58630 sig = sig.redPow(new BN(pub.publicExponent))
58631 sig = new Buffer(sig.fromRed().toArray())
58632 var out = padNum < 8 ? 1 : 0
58633 len = Math.min(sig.length, pad.length)
58634 if (sig.length !== pad.length) out = 1
58635
58636 i = -1
58637 while (++i < len) out |= sig[i] ^ pad[i]
58638 return out === 0
58639 }
58640
58641 function ecVerify (sig, hash, pub) {
58642 var curveId = curves[pub.data.algorithm.curve.join('.')]
58643 if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))
58644
58645 var curve = new EC(curveId)
58646 var pubkey = pub.data.subjectPrivateKey.data
58647
58648 return curve.verify(hash, sig, pubkey)
58649 }
58650
58651 function dsaVerify (sig, hash, pub) {
58652 var p = pub.data.p
58653 var q = pub.data.q
58654 var g = pub.data.g
58655 var y = pub.data.pub_key
58656 var unpacked = parseKeys.signature.decode(sig, 'der')
58657 var s = unpacked.s
58658 var r = unpacked.r
58659 checkValue(s, q)
58660 checkValue(r, q)
58661 var montp = BN.mont(p)
58662 var w = s.invm(q)
58663 var v = g.toRed(montp)
58664 .redPow(new BN(hash).mul(w).mod(q))
58665 .fromRed()
58666 .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())
58667 .mod(p)
58668 .mod(q)
58669 return v.cmp(r) === 0
58670 }
58671
58672 function checkValue (b, q) {
58673 if (b.cmpn(0) <= 0) throw new Error('invalid sig')
58674 if (b.cmp(q) >= q) throw new Error('invalid sig')
58675 }
58676
58677 module.exports = verify
58678
58679 }).call(this,require("buffer").Buffer)
58680 },{"./curves.json":41,"bn.js":17,"buffer":47,"elliptic":67,"parse-asn1":105}],45:[function(require,module,exports){
58681 (function (global){
58682 'use strict';
58683
58684 var buffer = require('buffer');
58685 var Buffer = buffer.Buffer;
58686 var SlowBuffer = buffer.SlowBuffer;
58687 var MAX_LEN = buffer.kMaxLength || 2147483647;
58688 exports.alloc = function alloc(size, fill, encoding) {
58689 if (typeof Buffer.alloc === 'function') {
58690 return Buffer.alloc(size, fill, encoding);
58691 }
58692 if (typeof encoding === 'number') {
58693 throw new TypeError('encoding must not be number');
58694 }
58695 if (typeof size !== 'number') {
58696 throw new TypeError('size must be a number');
58697 }
58698 if (size > MAX_LEN) {
58699 throw new RangeError('size is too large');
58700 }
58701 var enc = encoding;
58702 var _fill = fill;
58703 if (_fill === undefined) {
58704 enc = undefined;
58705 _fill = 0;
58706 }
58707 var buf = new Buffer(size);
58708 if (typeof _fill === 'string') {
58709 var fillBuf = new Buffer(_fill, enc);
58710 var flen = fillBuf.length;
58711 var i = -1;
58712 while (++i < size) {
58713 buf[i] = fillBuf[i % flen];
58714 }
58715 } else {
58716 buf.fill(_fill);
58717 }
58718 return buf;
58719 }
58720 exports.allocUnsafe = function allocUnsafe(size) {
58721 if (typeof Buffer.allocUnsafe === 'function') {
58722 return Buffer.allocUnsafe(size);
58723 }
58724 if (typeof size !== 'number') {
58725 throw new TypeError('size must be a number');
58726 }
58727 if (size > MAX_LEN) {
58728 throw new RangeError('size is too large');
58729 }
58730 return new Buffer(size);
58731 }
58732 exports.from = function from(value, encodingOrOffset, length) {
58733 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
58734 return Buffer.from(value, encodingOrOffset, length);
58735 }
58736 if (typeof value === 'number') {
58737 throw new TypeError('"value" argument must not be a number');
58738 }
58739 if (typeof value === 'string') {
58740 return new Buffer(value, encodingOrOffset);
58741 }
58742 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
58743 var offset = encodingOrOffset;
58744 if (arguments.length === 1) {
58745 return new Buffer(value);
58746 }
58747 if (typeof offset === 'undefined') {
58748 offset = 0;
58749 }
58750 var len = length;
58751 if (typeof len === 'undefined') {
58752 len = value.byteLength - offset;
58753 }
58754 if (offset >= value.byteLength) {
58755 throw new RangeError('\'offset\' is out of bounds');
58756 }
58757 if (len > value.byteLength - offset) {
58758 throw new RangeError('\'length\' is out of bounds');
58759 }
58760 return new Buffer(value.slice(offset, offset + len));
58761 }
58762 if (Buffer.isBuffer(value)) {
58763 var out = new Buffer(value.length);
58764 value.copy(out, 0, 0, value.length);
58765 return out;
58766 }
58767 if (value) {
58768 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
58769 return new Buffer(value);
58770 }
58771 if (value.type === 'Buffer' && Array.isArray(value.data)) {
58772 return new Buffer(value.data);
58773 }
58774 }
58775
58776 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
58777 }
58778 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
58779 if (typeof Buffer.allocUnsafeSlow === 'function') {
58780 return Buffer.allocUnsafeSlow(size);
58781 }
58782 if (typeof size !== 'number') {
58783 throw new TypeError('size must be a number');
58784 }
58785 if (size >= MAX_LEN) {
58786 throw new RangeError('size is too large');
58787 }
58788 return new SlowBuffer(size);
58789 }
58790
58791 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
58792 },{"buffer":47}],46:[function(require,module,exports){
58793 (function (Buffer){
58794 module.exports = function xor (a, b) {
58795 var length = Math.min(a.length, b.length)
58796 var buffer = new Buffer(length)
58797
58798 for (var i = 0; i < length; ++i) {
58799 buffer[i] = a[i] ^ b[i]
58800 }
58801
58802 return buffer
58803 }
58804
58805 }).call(this,require("buffer").Buffer)
58806 },{"buffer":47}],47:[function(require,module,exports){
58807 /*!
58808 * The buffer module from node.js, for the browser.
58809 *
58810 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
58811 * @license MIT
58812 */
58813 /* eslint-disable no-proto */
58814
58815 'use strict'
58816
58817 var base64 = require('base64-js')
58818 var ieee754 = require('ieee754')
58819
58820 exports.Buffer = Buffer
58821 exports.SlowBuffer = SlowBuffer
58822 exports.INSPECT_MAX_BYTES = 50
58823
58824 var K_MAX_LENGTH = 0x7fffffff
58825 exports.kMaxLength = K_MAX_LENGTH
58826
58827 /**
58828 * If `Buffer.TYPED_ARRAY_SUPPORT`:
58829 * === true Use Uint8Array implementation (fastest)
58830 * === false Print warning and recommend using `buffer` v4.x which has an Object
58831 * implementation (most compatible, even IE6)
58832 *
58833 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
58834 * Opera 11.6+, iOS 4.2+.
58835 *
58836 * We report that the browser does not support typed arrays if the are not subclassable
58837 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
58838 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
58839 * for __proto__ and has a buggy typed array implementation.
58840 */
58841 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
58842
58843 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
58844 typeof console.error === 'function') {
58845 console.error(
58846 'This browser lacks typed array (Uint8Array) support which is required by ' +
58847 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
58848 )
58849 }
58850
58851 function typedArraySupport () {
58852 // Can typed array instances can be augmented?
58853 try {
58854 var arr = new Uint8Array(1)
58855 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
58856 return arr.foo() === 42
58857 } catch (e) {
58858 return false
58859 }
58860 }
58861
58862 function createBuffer (length) {
58863 if (length > K_MAX_LENGTH) {
58864 throw new RangeError('Invalid typed array length')
58865 }
58866 // Return an augmented `Uint8Array` instance
58867 var buf = new Uint8Array(length)
58868 buf.__proto__ = Buffer.prototype
58869 return buf
58870 }
58871
58872 /**
58873 * The Buffer constructor returns instances of `Uint8Array` that have their
58874 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
58875 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
58876 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
58877 * returns a single octet.
58878 *
58879 * The `Uint8Array` prototype remains unmodified.
58880 */
58881
58882 function Buffer (arg, encodingOrOffset, length) {
58883 // Common case.
58884 if (typeof arg === 'number') {
58885 if (typeof encodingOrOffset === 'string') {
58886 throw new Error(
58887 'If encoding is specified then the first argument must be a string'
58888 )
58889 }
58890 return allocUnsafe(arg)
58891 }
58892 return from(arg, encodingOrOffset, length)
58893 }
58894
58895 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
58896 if (typeof Symbol !== 'undefined' && Symbol.species &&
58897 Buffer[Symbol.species] === Buffer) {
58898 Object.defineProperty(Buffer, Symbol.species, {
58899 value: null,
58900 configurable: true,
58901 enumerable: false,
58902 writable: false
58903 })
58904 }
58905
58906 Buffer.poolSize = 8192 // not used by this implementation
58907
58908 function from (value, encodingOrOffset, length) {
58909 if (typeof value === 'number') {
58910 throw new TypeError('"value" argument must not be a number')
58911 }
58912
58913 if (value instanceof ArrayBuffer) {
58914 return fromArrayBuffer(value, encodingOrOffset, length)
58915 }
58916
58917 if (typeof value === 'string') {
58918 return fromString(value, encodingOrOffset)
58919 }
58920
58921 return fromObject(value)
58922 }
58923
58924 /**
58925 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
58926 * if value is a number.
58927 * Buffer.from(str[, encoding])
58928 * Buffer.from(array)
58929 * Buffer.from(buffer)
58930 * Buffer.from(arrayBuffer[, byteOffset[, length]])
58931 **/
58932 Buffer.from = function (value, encodingOrOffset, length) {
58933 return from(value, encodingOrOffset, length)
58934 }
58935
58936 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
58937 // https://github.com/feross/buffer/pull/148
58938 Buffer.prototype.__proto__ = Uint8Array.prototype
58939 Buffer.__proto__ = Uint8Array
58940
58941 function assertSize (size) {
58942 if (typeof size !== 'number') {
58943 throw new TypeError('"size" argument must be a number')
58944 } else if (size < 0) {
58945 throw new RangeError('"size" argument must not be negative')
58946 }
58947 }
58948
58949 function alloc (size, fill, encoding) {
58950 assertSize(size)
58951 if (size <= 0) {
58952 return createBuffer(size)
58953 }
58954 if (fill !== undefined) {
58955 // Only pay attention to encoding if it's a string. This
58956 // prevents accidentally sending in a number that would
58957 // be interpretted as a start offset.
58958 return typeof encoding === 'string'
58959 ? createBuffer(size).fill(fill, encoding)
58960 : createBuffer(size).fill(fill)
58961 }
58962 return createBuffer(size)
58963 }
58964
58965 /**
58966 * Creates a new filled Buffer instance.
58967 * alloc(size[, fill[, encoding]])
58968 **/
58969 Buffer.alloc = function (size, fill, encoding) {
58970 return alloc(size, fill, encoding)
58971 }
58972
58973 function allocUnsafe (size) {
58974 assertSize(size)
58975 return createBuffer(size < 0 ? 0 : checked(size) | 0)
58976 }
58977
58978 /**
58979 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
58980 * */
58981 Buffer.allocUnsafe = function (size) {
58982 return allocUnsafe(size)
58983 }
58984 /**
58985 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
58986 */
58987 Buffer.allocUnsafeSlow = function (size) {
58988 return allocUnsafe(size)
58989 }
58990
58991 function fromString (string, encoding) {
58992 if (typeof encoding !== 'string' || encoding === '') {
58993 encoding = 'utf8'
58994 }
58995
58996 if (!Buffer.isEncoding(encoding)) {
58997 throw new TypeError('"encoding" must be a valid string encoding')
58998 }
58999
59000 var length = byteLength(string, encoding) | 0
59001 var buf = createBuffer(length)
59002
59003 var actual = buf.write(string, encoding)
59004
59005 if (actual !== length) {
59006 // Writing a hex string, for example, that contains invalid characters will
59007 // cause everything after the first invalid character to be ignored. (e.g.
59008 // 'abxxcd' will be treated as 'ab')
59009 buf = buf.slice(0, actual)
59010 }
59011
59012 return buf
59013 }
59014
59015 function fromArrayLike (array) {
59016 var length = array.length < 0 ? 0 : checked(array.length) | 0
59017 var buf = createBuffer(length)
59018 for (var i = 0; i < length; i += 1) {
59019 buf[i] = array[i] & 255
59020 }
59021 return buf
59022 }
59023
59024 function fromArrayBuffer (array, byteOffset, length) {
59025 if (byteOffset < 0 || array.byteLength < byteOffset) {
59026 throw new RangeError('\'offset\' is out of bounds')
59027 }
59028
59029 if (array.byteLength < byteOffset + (length || 0)) {
59030 throw new RangeError('\'length\' is out of bounds')
59031 }
59032
59033 var buf
59034 if (byteOffset === undefined && length === undefined) {
59035 buf = new Uint8Array(array)
59036 } else if (length === undefined) {
59037 buf = new Uint8Array(array, byteOffset)
59038 } else {
59039 buf = new Uint8Array(array, byteOffset, length)
59040 }
59041
59042 // Return an augmented `Uint8Array` instance
59043 buf.__proto__ = Buffer.prototype
59044 return buf
59045 }
59046
59047 function fromObject (obj) {
59048 if (Buffer.isBuffer(obj)) {
59049 var len = checked(obj.length) | 0
59050 var buf = createBuffer(len)
59051
59052 if (buf.length === 0) {
59053 return buf
59054 }
59055
59056 obj.copy(buf, 0, 0, len)
59057 return buf
59058 }
59059
59060 if (obj) {
59061 if (isArrayBufferView(obj) || 'length' in obj) {
59062 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
59063 return createBuffer(0)
59064 }
59065 return fromArrayLike(obj)
59066 }
59067
59068 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
59069 return fromArrayLike(obj.data)
59070 }
59071 }
59072
59073 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
59074 }
59075
59076 function checked (length) {
59077 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
59078 // length is NaN (which is otherwise coerced to zero.)
59079 if (length >= K_MAX_LENGTH) {
59080 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
59081 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
59082 }
59083 return length | 0
59084 }
59085
59086 function SlowBuffer (length) {
59087 if (+length != length) { // eslint-disable-line eqeqeq
59088 length = 0
59089 }
59090 return Buffer.alloc(+length)
59091 }
59092
59093 Buffer.isBuffer = function isBuffer (b) {
59094 return b != null && b._isBuffer === true
59095 }
59096
59097 Buffer.compare = function compare (a, b) {
59098 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
59099 throw new TypeError('Arguments must be Buffers')
59100 }
59101
59102 if (a === b) return 0
59103
59104 var x = a.length
59105 var y = b.length
59106
59107 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
59108 if (a[i] !== b[i]) {
59109 x = a[i]
59110 y = b[i]
59111 break
59112 }
59113 }
59114
59115 if (x < y) return -1
59116 if (y < x) return 1
59117 return 0
59118 }
59119
59120 Buffer.isEncoding = function isEncoding (encoding) {
59121 switch (String(encoding).toLowerCase()) {
59122 case 'hex':
59123 case 'utf8':
59124 case 'utf-8':
59125 case 'ascii':
59126 case 'latin1':
59127 case 'binary':
59128 case 'base64':
59129 case 'ucs2':
59130 case 'ucs-2':
59131 case 'utf16le':
59132 case 'utf-16le':
59133 return true
59134 default:
59135 return false
59136 }
59137 }
59138
59139 Buffer.concat = function concat (list, length) {
59140 if (!Array.isArray(list)) {
59141 throw new TypeError('"list" argument must be an Array of Buffers')
59142 }
59143
59144 if (list.length === 0) {
59145 return Buffer.alloc(0)
59146 }
59147
59148 var i
59149 if (length === undefined) {
59150 length = 0
59151 for (i = 0; i < list.length; ++i) {
59152 length += list[i].length
59153 }
59154 }
59155
59156 var buffer = Buffer.allocUnsafe(length)
59157 var pos = 0
59158 for (i = 0; i < list.length; ++i) {
59159 var buf = list[i]
59160 if (!Buffer.isBuffer(buf)) {
59161 throw new TypeError('"list" argument must be an Array of Buffers')
59162 }
59163 buf.copy(buffer, pos)
59164 pos += buf.length
59165 }
59166 return buffer
59167 }
59168
59169 function byteLength (string, encoding) {
59170 if (Buffer.isBuffer(string)) {
59171 return string.length
59172 }
59173 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
59174 return string.byteLength
59175 }
59176 if (typeof string !== 'string') {
59177 string = '' + string
59178 }
59179
59180 var len = string.length
59181 if (len === 0) return 0
59182
59183 // Use a for loop to avoid recursion
59184 var loweredCase = false
59185 for (;;) {
59186 switch (encoding) {
59187 case 'ascii':
59188 case 'latin1':
59189 case 'binary':
59190 return len
59191 case 'utf8':
59192 case 'utf-8':
59193 case undefined:
59194 return utf8ToBytes(string).length
59195 case 'ucs2':
59196 case 'ucs-2':
59197 case 'utf16le':
59198 case 'utf-16le':
59199 return len * 2
59200 case 'hex':
59201 return len >>> 1
59202 case 'base64':
59203 return base64ToBytes(string).length
59204 default:
59205 if (loweredCase) return utf8ToBytes(string).length // assume utf8
59206 encoding = ('' + encoding).toLowerCase()
59207 loweredCase = true
59208 }
59209 }
59210 }
59211 Buffer.byteLength = byteLength
59212
59213 function slowToString (encoding, start, end) {
59214 var loweredCase = false
59215
59216 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
59217 // property of a typed array.
59218
59219 // This behaves neither like String nor Uint8Array in that we set start/end
59220 // to their upper/lower bounds if the value passed is out of range.
59221 // undefined is handled specially as per ECMA-262 6th Edition,
59222 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
59223 if (start === undefined || start < 0) {
59224 start = 0
59225 }
59226 // Return early if start > this.length. Done here to prevent potential uint32
59227 // coercion fail below.
59228 if (start > this.length) {
59229 return ''
59230 }
59231
59232 if (end === undefined || end > this.length) {
59233 end = this.length
59234 }
59235
59236 if (end <= 0) {
59237 return ''
59238 }
59239
59240 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
59241 end >>>= 0
59242 start >>>= 0
59243
59244 if (end <= start) {
59245 return ''
59246 }
59247
59248 if (!encoding) encoding = 'utf8'
59249
59250 while (true) {
59251 switch (encoding) {
59252 case 'hex':
59253 return hexSlice(this, start, end)
59254
59255 case 'utf8':
59256 case 'utf-8':
59257 return utf8Slice(this, start, end)
59258
59259 case 'ascii':
59260 return asciiSlice(this, start, end)
59261
59262 case 'latin1':
59263 case 'binary':
59264 return latin1Slice(this, start, end)
59265
59266 case 'base64':
59267 return base64Slice(this, start, end)
59268
59269 case 'ucs2':
59270 case 'ucs-2':
59271 case 'utf16le':
59272 case 'utf-16le':
59273 return utf16leSlice(this, start, end)
59274
59275 default:
59276 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
59277 encoding = (encoding + '').toLowerCase()
59278 loweredCase = true
59279 }
59280 }
59281 }
59282
59283 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
59284 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
59285 // reliably in a browserify context because there could be multiple different
59286 // copies of the 'buffer' package in use. This method works even for Buffer
59287 // instances that were created from another copy of the `buffer` package.
59288 // See: https://github.com/feross/buffer/issues/154
59289 Buffer.prototype._isBuffer = true
59290
59291 function swap (b, n, m) {
59292 var i = b[n]
59293 b[n] = b[m]
59294 b[m] = i
59295 }
59296
59297 Buffer.prototype.swap16 = function swap16 () {
59298 var len = this.length
59299 if (len % 2 !== 0) {
59300 throw new RangeError('Buffer size must be a multiple of 16-bits')
59301 }
59302 for (var i = 0; i < len; i += 2) {
59303 swap(this, i, i + 1)
59304 }
59305 return this
59306 }
59307
59308 Buffer.prototype.swap32 = function swap32 () {
59309 var len = this.length
59310 if (len % 4 !== 0) {
59311 throw new RangeError('Buffer size must be a multiple of 32-bits')
59312 }
59313 for (var i = 0; i < len; i += 4) {
59314 swap(this, i, i + 3)
59315 swap(this, i + 1, i + 2)
59316 }
59317 return this
59318 }
59319
59320 Buffer.prototype.swap64 = function swap64 () {
59321 var len = this.length
59322 if (len % 8 !== 0) {
59323 throw new RangeError('Buffer size must be a multiple of 64-bits')
59324 }
59325 for (var i = 0; i < len; i += 8) {
59326 swap(this, i, i + 7)
59327 swap(this, i + 1, i + 6)
59328 swap(this, i + 2, i + 5)
59329 swap(this, i + 3, i + 4)
59330 }
59331 return this
59332 }
59333
59334 Buffer.prototype.toString = function toString () {
59335 var length = this.length
59336 if (length === 0) return ''
59337 if (arguments.length === 0) return utf8Slice(this, 0, length)
59338 return slowToString.apply(this, arguments)
59339 }
59340
59341 Buffer.prototype.equals = function equals (b) {
59342 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
59343 if (this === b) return true
59344 return Buffer.compare(this, b) === 0
59345 }
59346
59347 Buffer.prototype.inspect = function inspect () {
59348 var str = ''
59349 var max = exports.INSPECT_MAX_BYTES
59350 if (this.length > 0) {
59351 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
59352 if (this.length > max) str += ' ... '
59353 }
59354 return '<Buffer ' + str + '>'
59355 }
59356
59357 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
59358 if (!Buffer.isBuffer(target)) {
59359 throw new TypeError('Argument must be a Buffer')
59360 }
59361
59362 if (start === undefined) {
59363 start = 0
59364 }
59365 if (end === undefined) {
59366 end = target ? target.length : 0
59367 }
59368 if (thisStart === undefined) {
59369 thisStart = 0
59370 }
59371 if (thisEnd === undefined) {
59372 thisEnd = this.length
59373 }
59374
59375 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
59376 throw new RangeError('out of range index')
59377 }
59378
59379 if (thisStart >= thisEnd && start >= end) {
59380 return 0
59381 }
59382 if (thisStart >= thisEnd) {
59383 return -1
59384 }
59385 if (start >= end) {
59386 return 1
59387 }
59388
59389 start >>>= 0
59390 end >>>= 0
59391 thisStart >>>= 0
59392 thisEnd >>>= 0
59393
59394 if (this === target) return 0
59395
59396 var x = thisEnd - thisStart
59397 var y = end - start
59398 var len = Math.min(x, y)
59399
59400 var thisCopy = this.slice(thisStart, thisEnd)
59401 var targetCopy = target.slice(start, end)
59402
59403 for (var i = 0; i < len; ++i) {
59404 if (thisCopy[i] !== targetCopy[i]) {
59405 x = thisCopy[i]
59406 y = targetCopy[i]
59407 break
59408 }
59409 }
59410
59411 if (x < y) return -1
59412 if (y < x) return 1
59413 return 0
59414 }
59415
59416 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
59417 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
59418 //
59419 // Arguments:
59420 // - buffer - a Buffer to search
59421 // - val - a string, Buffer, or number
59422 // - byteOffset - an index into `buffer`; will be clamped to an int32
59423 // - encoding - an optional encoding, relevant is val is a string
59424 // - dir - true for indexOf, false for lastIndexOf
59425 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
59426 // Empty buffer means no match
59427 if (buffer.length === 0) return -1
59428
59429 // Normalize byteOffset
59430 if (typeof byteOffset === 'string') {
59431 encoding = byteOffset
59432 byteOffset = 0
59433 } else if (byteOffset > 0x7fffffff) {
59434 byteOffset = 0x7fffffff
59435 } else if (byteOffset < -0x80000000) {
59436 byteOffset = -0x80000000
59437 }
59438 byteOffset = +byteOffset // Coerce to Number.
59439 if (numberIsNaN(byteOffset)) {
59440 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
59441 byteOffset = dir ? 0 : (buffer.length - 1)
59442 }
59443
59444 // Normalize byteOffset: negative offsets start from the end of the buffer
59445 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
59446 if (byteOffset >= buffer.length) {
59447 if (dir) return -1
59448 else byteOffset = buffer.length - 1
59449 } else if (byteOffset < 0) {
59450 if (dir) byteOffset = 0
59451 else return -1
59452 }
59453
59454 // Normalize val
59455 if (typeof val === 'string') {
59456 val = Buffer.from(val, encoding)
59457 }
59458
59459 // Finally, search either indexOf (if dir is true) or lastIndexOf
59460 if (Buffer.isBuffer(val)) {
59461 // Special case: looking for empty string/buffer always fails
59462 if (val.length === 0) {
59463 return -1
59464 }
59465 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
59466 } else if (typeof val === 'number') {
59467 val = val & 0xFF // Search for a byte value [0-255]
59468 if (typeof Uint8Array.prototype.indexOf === 'function') {
59469 if (dir) {
59470 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
59471 } else {
59472 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
59473 }
59474 }
59475 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
59476 }
59477
59478 throw new TypeError('val must be string, number or Buffer')
59479 }
59480
59481 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
59482 var indexSize = 1
59483 var arrLength = arr.length
59484 var valLength = val.length
59485
59486 if (encoding !== undefined) {
59487 encoding = String(encoding).toLowerCase()
59488 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
59489 encoding === 'utf16le' || encoding === 'utf-16le') {
59490 if (arr.length < 2 || val.length < 2) {
59491 return -1
59492 }
59493 indexSize = 2
59494 arrLength /= 2
59495 valLength /= 2
59496 byteOffset /= 2
59497 }
59498 }
59499
59500 function read (buf, i) {
59501 if (indexSize === 1) {
59502 return buf[i]
59503 } else {
59504 return buf.readUInt16BE(i * indexSize)
59505 }
59506 }
59507
59508 var i
59509 if (dir) {
59510 var foundIndex = -1
59511 for (i = byteOffset; i < arrLength; i++) {
59512 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
59513 if (foundIndex === -1) foundIndex = i
59514 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
59515 } else {
59516 if (foundIndex !== -1) i -= i - foundIndex
59517 foundIndex = -1
59518 }
59519 }
59520 } else {
59521 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
59522 for (i = byteOffset; i >= 0; i--) {
59523 var found = true
59524 for (var j = 0; j < valLength; j++) {
59525 if (read(arr, i + j) !== read(val, j)) {
59526 found = false
59527 break
59528 }
59529 }
59530 if (found) return i
59531 }
59532 }
59533
59534 return -1
59535 }
59536
59537 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
59538 return this.indexOf(val, byteOffset, encoding) !== -1
59539 }
59540
59541 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
59542 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
59543 }
59544
59545 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
59546 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
59547 }
59548
59549 function hexWrite (buf, string, offset, length) {
59550 offset = Number(offset) || 0
59551 var remaining = buf.length - offset
59552 if (!length) {
59553 length = remaining
59554 } else {
59555 length = Number(length)
59556 if (length > remaining) {
59557 length = remaining
59558 }
59559 }
59560
59561 // must be an even number of digits
59562 var strLen = string.length
59563 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
59564
59565 if (length > strLen / 2) {
59566 length = strLen / 2
59567 }
59568 for (var i = 0; i < length; ++i) {
59569 var parsed = parseInt(string.substr(i * 2, 2), 16)
59570 if (numberIsNaN(parsed)) return i
59571 buf[offset + i] = parsed
59572 }
59573 return i
59574 }
59575
59576 function utf8Write (buf, string, offset, length) {
59577 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
59578 }
59579
59580 function asciiWrite (buf, string, offset, length) {
59581 return blitBuffer(asciiToBytes(string), buf, offset, length)
59582 }
59583
59584 function latin1Write (buf, string, offset, length) {
59585 return asciiWrite(buf, string, offset, length)
59586 }
59587
59588 function base64Write (buf, string, offset, length) {
59589 return blitBuffer(base64ToBytes(string), buf, offset, length)
59590 }
59591
59592 function ucs2Write (buf, string, offset, length) {
59593 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
59594 }
59595
59596 Buffer.prototype.write = function write (string, offset, length, encoding) {
59597 // Buffer#write(string)
59598 if (offset === undefined) {
59599 encoding = 'utf8'
59600 length = this.length
59601 offset = 0
59602 // Buffer#write(string, encoding)
59603 } else if (length === undefined && typeof offset === 'string') {
59604 encoding = offset
59605 length = this.length
59606 offset = 0
59607 // Buffer#write(string, offset[, length][, encoding])
59608 } else if (isFinite(offset)) {
59609 offset = offset >>> 0
59610 if (isFinite(length)) {
59611 length = length >>> 0
59612 if (encoding === undefined) encoding = 'utf8'
59613 } else {
59614 encoding = length
59615 length = undefined
59616 }
59617 } else {
59618 throw new Error(
59619 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
59620 )
59621 }
59622
59623 var remaining = this.length - offset
59624 if (length === undefined || length > remaining) length = remaining
59625
59626 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
59627 throw new RangeError('Attempt to write outside buffer bounds')
59628 }
59629
59630 if (!encoding) encoding = 'utf8'
59631
59632 var loweredCase = false
59633 for (;;) {
59634 switch (encoding) {
59635 case 'hex':
59636 return hexWrite(this, string, offset, length)
59637
59638 case 'utf8':
59639 case 'utf-8':
59640 return utf8Write(this, string, offset, length)
59641
59642 case 'ascii':
59643 return asciiWrite(this, string, offset, length)
59644
59645 case 'latin1':
59646 case 'binary':
59647 return latin1Write(this, string, offset, length)
59648
59649 case 'base64':
59650 // Warning: maxLength not taken into account in base64Write
59651 return base64Write(this, string, offset, length)
59652
59653 case 'ucs2':
59654 case 'ucs-2':
59655 case 'utf16le':
59656 case 'utf-16le':
59657 return ucs2Write(this, string, offset, length)
59658
59659 default:
59660 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
59661 encoding = ('' + encoding).toLowerCase()
59662 loweredCase = true
59663 }
59664 }
59665 }
59666
59667 Buffer.prototype.toJSON = function toJSON () {
59668 return {
59669 type: 'Buffer',
59670 data: Array.prototype.slice.call(this._arr || this, 0)
59671 }
59672 }
59673
59674 function base64Slice (buf, start, end) {
59675 if (start === 0 && end === buf.length) {
59676 return base64.fromByteArray(buf)
59677 } else {
59678 return base64.fromByteArray(buf.slice(start, end))
59679 }
59680 }
59681
59682 function utf8Slice (buf, start, end) {
59683 end = Math.min(buf.length, end)
59684 var res = []
59685
59686 var i = start
59687 while (i < end) {
59688 var firstByte = buf[i]
59689 var codePoint = null
59690 var bytesPerSequence = (firstByte > 0xEF) ? 4
59691 : (firstByte > 0xDF) ? 3
59692 : (firstByte > 0xBF) ? 2
59693 : 1
59694
59695 if (i + bytesPerSequence <= end) {
59696 var secondByte, thirdByte, fourthByte, tempCodePoint
59697
59698 switch (bytesPerSequence) {
59699 case 1:
59700 if (firstByte < 0x80) {
59701 codePoint = firstByte
59702 }
59703 break
59704 case 2:
59705 secondByte = buf[i + 1]
59706 if ((secondByte & 0xC0) === 0x80) {
59707 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
59708 if (tempCodePoint > 0x7F) {
59709 codePoint = tempCodePoint
59710 }
59711 }
59712 break
59713 case 3:
59714 secondByte = buf[i + 1]
59715 thirdByte = buf[i + 2]
59716 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
59717 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
59718 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
59719 codePoint = tempCodePoint
59720 }
59721 }
59722 break
59723 case 4:
59724 secondByte = buf[i + 1]
59725 thirdByte = buf[i + 2]
59726 fourthByte = buf[i + 3]
59727 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
59728 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
59729 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
59730 codePoint = tempCodePoint
59731 }
59732 }
59733 }
59734 }
59735
59736 if (codePoint === null) {
59737 // we did not generate a valid codePoint so insert a
59738 // replacement char (U+FFFD) and advance only 1 byte
59739 codePoint = 0xFFFD
59740 bytesPerSequence = 1
59741 } else if (codePoint > 0xFFFF) {
59742 // encode to utf16 (surrogate pair dance)
59743 codePoint -= 0x10000
59744 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
59745 codePoint = 0xDC00 | codePoint & 0x3FF
59746 }
59747
59748 res.push(codePoint)
59749 i += bytesPerSequence
59750 }
59751
59752 return decodeCodePointsArray(res)
59753 }
59754
59755 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
59756 // the lowest limit is Chrome, with 0x10000 args.
59757 // We go 1 magnitude less, for safety
59758 var MAX_ARGUMENTS_LENGTH = 0x1000
59759
59760 function decodeCodePointsArray (codePoints) {
59761 var len = codePoints.length
59762 if (len <= MAX_ARGUMENTS_LENGTH) {
59763 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
59764 }
59765
59766 // Decode in chunks to avoid "call stack size exceeded".
59767 var res = ''
59768 var i = 0
59769 while (i < len) {
59770 res += String.fromCharCode.apply(
59771 String,
59772 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
59773 )
59774 }
59775 return res
59776 }
59777
59778 function asciiSlice (buf, start, end) {
59779 var ret = ''
59780 end = Math.min(buf.length, end)
59781
59782 for (var i = start; i < end; ++i) {
59783 ret += String.fromCharCode(buf[i] & 0x7F)
59784 }
59785 return ret
59786 }
59787
59788 function latin1Slice (buf, start, end) {
59789 var ret = ''
59790 end = Math.min(buf.length, end)
59791
59792 for (var i = start; i < end; ++i) {
59793 ret += String.fromCharCode(buf[i])
59794 }
59795 return ret
59796 }
59797
59798 function hexSlice (buf, start, end) {
59799 var len = buf.length
59800
59801 if (!start || start < 0) start = 0
59802 if (!end || end < 0 || end > len) end = len
59803
59804 var out = ''
59805 for (var i = start; i < end; ++i) {
59806 out += toHex(buf[i])
59807 }
59808 return out
59809 }
59810
59811 function utf16leSlice (buf, start, end) {
59812 var bytes = buf.slice(start, end)
59813 var res = ''
59814 for (var i = 0; i < bytes.length; i += 2) {
59815 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
59816 }
59817 return res
59818 }
59819
59820 Buffer.prototype.slice = function slice (start, end) {
59821 var len = this.length
59822 start = ~~start
59823 end = end === undefined ? len : ~~end
59824
59825 if (start < 0) {
59826 start += len
59827 if (start < 0) start = 0
59828 } else if (start > len) {
59829 start = len
59830 }
59831
59832 if (end < 0) {
59833 end += len
59834 if (end < 0) end = 0
59835 } else if (end > len) {
59836 end = len
59837 }
59838
59839 if (end < start) end = start
59840
59841 var newBuf = this.subarray(start, end)
59842 // Return an augmented `Uint8Array` instance
59843 newBuf.__proto__ = Buffer.prototype
59844 return newBuf
59845 }
59846
59847 /*
59848 * Need to make sure that buffer isn't trying to write out of bounds.
59849 */
59850 function checkOffset (offset, ext, length) {
59851 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
59852 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
59853 }
59854
59855 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
59856 offset = offset >>> 0
59857 byteLength = byteLength >>> 0
59858 if (!noAssert) checkOffset(offset, byteLength, this.length)
59859
59860 var val = this[offset]
59861 var mul = 1
59862 var i = 0
59863 while (++i < byteLength && (mul *= 0x100)) {
59864 val += this[offset + i] * mul
59865 }
59866
59867 return val
59868 }
59869
59870 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
59871 offset = offset >>> 0
59872 byteLength = byteLength >>> 0
59873 if (!noAssert) {
59874 checkOffset(offset, byteLength, this.length)
59875 }
59876
59877 var val = this[offset + --byteLength]
59878 var mul = 1
59879 while (byteLength > 0 && (mul *= 0x100)) {
59880 val += this[offset + --byteLength] * mul
59881 }
59882
59883 return val
59884 }
59885
59886 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
59887 offset = offset >>> 0
59888 if (!noAssert) checkOffset(offset, 1, this.length)
59889 return this[offset]
59890 }
59891
59892 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
59893 offset = offset >>> 0
59894 if (!noAssert) checkOffset(offset, 2, this.length)
59895 return this[offset] | (this[offset + 1] << 8)
59896 }
59897
59898 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
59899 offset = offset >>> 0
59900 if (!noAssert) checkOffset(offset, 2, this.length)
59901 return (this[offset] << 8) | this[offset + 1]
59902 }
59903
59904 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
59905 offset = offset >>> 0
59906 if (!noAssert) checkOffset(offset, 4, this.length)
59907
59908 return ((this[offset]) |
59909 (this[offset + 1] << 8) |
59910 (this[offset + 2] << 16)) +
59911 (this[offset + 3] * 0x1000000)
59912 }
59913
59914 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
59915 offset = offset >>> 0
59916 if (!noAssert) checkOffset(offset, 4, this.length)
59917
59918 return (this[offset] * 0x1000000) +
59919 ((this[offset + 1] << 16) |
59920 (this[offset + 2] << 8) |
59921 this[offset + 3])
59922 }
59923
59924 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
59925 offset = offset >>> 0
59926 byteLength = byteLength >>> 0
59927 if (!noAssert) checkOffset(offset, byteLength, this.length)
59928
59929 var val = this[offset]
59930 var mul = 1
59931 var i = 0
59932 while (++i < byteLength && (mul *= 0x100)) {
59933 val += this[offset + i] * mul
59934 }
59935 mul *= 0x80
59936
59937 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
59938
59939 return val
59940 }
59941
59942 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
59943 offset = offset >>> 0
59944 byteLength = byteLength >>> 0
59945 if (!noAssert) checkOffset(offset, byteLength, this.length)
59946
59947 var i = byteLength
59948 var mul = 1
59949 var val = this[offset + --i]
59950 while (i > 0 && (mul *= 0x100)) {
59951 val += this[offset + --i] * mul
59952 }
59953 mul *= 0x80
59954
59955 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
59956
59957 return val
59958 }
59959
59960 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
59961 offset = offset >>> 0
59962 if (!noAssert) checkOffset(offset, 1, this.length)
59963 if (!(this[offset] & 0x80)) return (this[offset])
59964 return ((0xff - this[offset] + 1) * -1)
59965 }
59966
59967 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
59968 offset = offset >>> 0
59969 if (!noAssert) checkOffset(offset, 2, this.length)
59970 var val = this[offset] | (this[offset + 1] << 8)
59971 return (val & 0x8000) ? val | 0xFFFF0000 : val
59972 }
59973
59974 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
59975 offset = offset >>> 0
59976 if (!noAssert) checkOffset(offset, 2, this.length)
59977 var val = this[offset + 1] | (this[offset] << 8)
59978 return (val & 0x8000) ? val | 0xFFFF0000 : val
59979 }
59980
59981 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
59982 offset = offset >>> 0
59983 if (!noAssert) checkOffset(offset, 4, this.length)
59984
59985 return (this[offset]) |
59986 (this[offset + 1] << 8) |
59987 (this[offset + 2] << 16) |
59988 (this[offset + 3] << 24)
59989 }
59990
59991 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
59992 offset = offset >>> 0
59993 if (!noAssert) checkOffset(offset, 4, this.length)
59994
59995 return (this[offset] << 24) |
59996 (this[offset + 1] << 16) |
59997 (this[offset + 2] << 8) |
59998 (this[offset + 3])
59999 }
60000
60001 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
60002 offset = offset >>> 0
60003 if (!noAssert) checkOffset(offset, 4, this.length)
60004 return ieee754.read(this, offset, true, 23, 4)
60005 }
60006
60007 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
60008 offset = offset >>> 0
60009 if (!noAssert) checkOffset(offset, 4, this.length)
60010 return ieee754.read(this, offset, false, 23, 4)
60011 }
60012
60013 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
60014 offset = offset >>> 0
60015 if (!noAssert) checkOffset(offset, 8, this.length)
60016 return ieee754.read(this, offset, true, 52, 8)
60017 }
60018
60019 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
60020 offset = offset >>> 0
60021 if (!noAssert) checkOffset(offset, 8, this.length)
60022 return ieee754.read(this, offset, false, 52, 8)
60023 }
60024
60025 function checkInt (buf, value, offset, ext, max, min) {
60026 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
60027 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
60028 if (offset + ext > buf.length) throw new RangeError('Index out of range')
60029 }
60030
60031 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
60032 value = +value
60033 offset = offset >>> 0
60034 byteLength = byteLength >>> 0
60035 if (!noAssert) {
60036 var maxBytes = Math.pow(2, 8 * byteLength) - 1
60037 checkInt(this, value, offset, byteLength, maxBytes, 0)
60038 }
60039
60040 var mul = 1
60041 var i = 0
60042 this[offset] = value & 0xFF
60043 while (++i < byteLength && (mul *= 0x100)) {
60044 this[offset + i] = (value / mul) & 0xFF
60045 }
60046
60047 return offset + byteLength
60048 }
60049
60050 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
60051 value = +value
60052 offset = offset >>> 0
60053 byteLength = byteLength >>> 0
60054 if (!noAssert) {
60055 var maxBytes = Math.pow(2, 8 * byteLength) - 1
60056 checkInt(this, value, offset, byteLength, maxBytes, 0)
60057 }
60058
60059 var i = byteLength - 1
60060 var mul = 1
60061 this[offset + i] = value & 0xFF
60062 while (--i >= 0 && (mul *= 0x100)) {
60063 this[offset + i] = (value / mul) & 0xFF
60064 }
60065
60066 return offset + byteLength
60067 }
60068
60069 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
60070 value = +value
60071 offset = offset >>> 0
60072 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
60073 this[offset] = (value & 0xff)
60074 return offset + 1
60075 }
60076
60077 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
60078 value = +value
60079 offset = offset >>> 0
60080 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
60081 this[offset] = (value & 0xff)
60082 this[offset + 1] = (value >>> 8)
60083 return offset + 2
60084 }
60085
60086 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
60087 value = +value
60088 offset = offset >>> 0
60089 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
60090 this[offset] = (value >>> 8)
60091 this[offset + 1] = (value & 0xff)
60092 return offset + 2
60093 }
60094
60095 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
60096 value = +value
60097 offset = offset >>> 0
60098 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
60099 this[offset + 3] = (value >>> 24)
60100 this[offset + 2] = (value >>> 16)
60101 this[offset + 1] = (value >>> 8)
60102 this[offset] = (value & 0xff)
60103 return offset + 4
60104 }
60105
60106 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
60107 value = +value
60108 offset = offset >>> 0
60109 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
60110 this[offset] = (value >>> 24)
60111 this[offset + 1] = (value >>> 16)
60112 this[offset + 2] = (value >>> 8)
60113 this[offset + 3] = (value & 0xff)
60114 return offset + 4
60115 }
60116
60117 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
60118 value = +value
60119 offset = offset >>> 0
60120 if (!noAssert) {
60121 var limit = Math.pow(2, (8 * byteLength) - 1)
60122
60123 checkInt(this, value, offset, byteLength, limit - 1, -limit)
60124 }
60125
60126 var i = 0
60127 var mul = 1
60128 var sub = 0
60129 this[offset] = value & 0xFF
60130 while (++i < byteLength && (mul *= 0x100)) {
60131 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
60132 sub = 1
60133 }
60134 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
60135 }
60136
60137 return offset + byteLength
60138 }
60139
60140 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
60141 value = +value
60142 offset = offset >>> 0
60143 if (!noAssert) {
60144 var limit = Math.pow(2, (8 * byteLength) - 1)
60145
60146 checkInt(this, value, offset, byteLength, limit - 1, -limit)
60147 }
60148
60149 var i = byteLength - 1
60150 var mul = 1
60151 var sub = 0
60152 this[offset + i] = value & 0xFF
60153 while (--i >= 0 && (mul *= 0x100)) {
60154 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
60155 sub = 1
60156 }
60157 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
60158 }
60159
60160 return offset + byteLength
60161 }
60162
60163 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
60164 value = +value
60165 offset = offset >>> 0
60166 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
60167 if (value < 0) value = 0xff + value + 1
60168 this[offset] = (value & 0xff)
60169 return offset + 1
60170 }
60171
60172 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
60173 value = +value
60174 offset = offset >>> 0
60175 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
60176 this[offset] = (value & 0xff)
60177 this[offset + 1] = (value >>> 8)
60178 return offset + 2
60179 }
60180
60181 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
60182 value = +value
60183 offset = offset >>> 0
60184 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
60185 this[offset] = (value >>> 8)
60186 this[offset + 1] = (value & 0xff)
60187 return offset + 2
60188 }
60189
60190 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
60191 value = +value
60192 offset = offset >>> 0
60193 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
60194 this[offset] = (value & 0xff)
60195 this[offset + 1] = (value >>> 8)
60196 this[offset + 2] = (value >>> 16)
60197 this[offset + 3] = (value >>> 24)
60198 return offset + 4
60199 }
60200
60201 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
60202 value = +value
60203 offset = offset >>> 0
60204 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
60205 if (value < 0) value = 0xffffffff + value + 1
60206 this[offset] = (value >>> 24)
60207 this[offset + 1] = (value >>> 16)
60208 this[offset + 2] = (value >>> 8)
60209 this[offset + 3] = (value & 0xff)
60210 return offset + 4
60211 }
60212
60213 function checkIEEE754 (buf, value, offset, ext, max, min) {
60214 if (offset + ext > buf.length) throw new RangeError('Index out of range')
60215 if (offset < 0) throw new RangeError('Index out of range')
60216 }
60217
60218 function writeFloat (buf, value, offset, littleEndian, noAssert) {
60219 value = +value
60220 offset = offset >>> 0
60221 if (!noAssert) {
60222 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
60223 }
60224 ieee754.write(buf, value, offset, littleEndian, 23, 4)
60225 return offset + 4
60226 }
60227
60228 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
60229 return writeFloat(this, value, offset, true, noAssert)
60230 }
60231
60232 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
60233 return writeFloat(this, value, offset, false, noAssert)
60234 }
60235
60236 function writeDouble (buf, value, offset, littleEndian, noAssert) {
60237 value = +value
60238 offset = offset >>> 0
60239 if (!noAssert) {
60240 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
60241 }
60242 ieee754.write(buf, value, offset, littleEndian, 52, 8)
60243 return offset + 8
60244 }
60245
60246 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
60247 return writeDouble(this, value, offset, true, noAssert)
60248 }
60249
60250 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
60251 return writeDouble(this, value, offset, false, noAssert)
60252 }
60253
60254 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
60255 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
60256 if (!start) start = 0
60257 if (!end && end !== 0) end = this.length
60258 if (targetStart >= target.length) targetStart = target.length
60259 if (!targetStart) targetStart = 0
60260 if (end > 0 && end < start) end = start
60261
60262 // Copy 0 bytes; we're done
60263 if (end === start) return 0
60264 if (target.length === 0 || this.length === 0) return 0
60265
60266 // Fatal error conditions
60267 if (targetStart < 0) {
60268 throw new RangeError('targetStart out of bounds')
60269 }
60270 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
60271 if (end < 0) throw new RangeError('sourceEnd out of bounds')
60272
60273 // Are we oob?
60274 if (end > this.length) end = this.length
60275 if (target.length - targetStart < end - start) {
60276 end = target.length - targetStart + start
60277 }
60278
60279 var len = end - start
60280 var i
60281
60282 if (this === target && start < targetStart && targetStart < end) {
60283 // descending copy from end
60284 for (i = len - 1; i >= 0; --i) {
60285 target[i + targetStart] = this[i + start]
60286 }
60287 } else if (len < 1000) {
60288 // ascending copy from start
60289 for (i = 0; i < len; ++i) {
60290 target[i + targetStart] = this[i + start]
60291 }
60292 } else {
60293 Uint8Array.prototype.set.call(
60294 target,
60295 this.subarray(start, start + len),
60296 targetStart
60297 )
60298 }
60299
60300 return len
60301 }
60302
60303 // Usage:
60304 // buffer.fill(number[, offset[, end]])
60305 // buffer.fill(buffer[, offset[, end]])
60306 // buffer.fill(string[, offset[, end]][, encoding])
60307 Buffer.prototype.fill = function fill (val, start, end, encoding) {
60308 // Handle string cases:
60309 if (typeof val === 'string') {
60310 if (typeof start === 'string') {
60311 encoding = start
60312 start = 0
60313 end = this.length
60314 } else if (typeof end === 'string') {
60315 encoding = end
60316 end = this.length
60317 }
60318 if (val.length === 1) {
60319 var code = val.charCodeAt(0)
60320 if (code < 256) {
60321 val = code
60322 }
60323 }
60324 if (encoding !== undefined && typeof encoding !== 'string') {
60325 throw new TypeError('encoding must be a string')
60326 }
60327 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
60328 throw new TypeError('Unknown encoding: ' + encoding)
60329 }
60330 } else if (typeof val === 'number') {
60331 val = val & 255
60332 }
60333
60334 // Invalid ranges are not set to a default, so can range check early.
60335 if (start < 0 || this.length < start || this.length < end) {
60336 throw new RangeError('Out of range index')
60337 }
60338
60339 if (end <= start) {
60340 return this
60341 }
60342
60343 start = start >>> 0
60344 end = end === undefined ? this.length : end >>> 0
60345
60346 if (!val) val = 0
60347
60348 var i
60349 if (typeof val === 'number') {
60350 for (i = start; i < end; ++i) {
60351 this[i] = val
60352 }
60353 } else {
60354 var bytes = Buffer.isBuffer(val)
60355 ? val
60356 : new Buffer(val, encoding)
60357 var len = bytes.length
60358 for (i = 0; i < end - start; ++i) {
60359 this[i + start] = bytes[i % len]
60360 }
60361 }
60362
60363 return this
60364 }
60365
60366 // HELPER FUNCTIONS
60367 // ================
60368
60369 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
60370
60371 function base64clean (str) {
60372 // Node strips out invalid characters like \n and \t from the string, base64-js does not
60373 str = str.trim().replace(INVALID_BASE64_RE, '')
60374 // Node converts strings with length < 2 to ''
60375 if (str.length < 2) return ''
60376 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
60377 while (str.length % 4 !== 0) {
60378 str = str + '='
60379 }
60380 return str
60381 }
60382
60383 function toHex (n) {
60384 if (n < 16) return '0' + n.toString(16)
60385 return n.toString(16)
60386 }
60387
60388 function utf8ToBytes (string, units) {
60389 units = units || Infinity
60390 var codePoint
60391 var length = string.length
60392 var leadSurrogate = null
60393 var bytes = []
60394
60395 for (var i = 0; i < length; ++i) {
60396 codePoint = string.charCodeAt(i)
60397
60398 // is surrogate component
60399 if (codePoint > 0xD7FF && codePoint < 0xE000) {
60400 // last char was a lead
60401 if (!leadSurrogate) {
60402 // no lead yet
60403 if (codePoint > 0xDBFF) {
60404 // unexpected trail
60405 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
60406 continue
60407 } else if (i + 1 === length) {
60408 // unpaired lead
60409 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
60410 continue
60411 }
60412
60413 // valid lead
60414 leadSurrogate = codePoint
60415
60416 continue
60417 }
60418
60419 // 2 leads in a row
60420 if (codePoint < 0xDC00) {
60421 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
60422 leadSurrogate = codePoint
60423 continue
60424 }
60425
60426 // valid surrogate pair
60427 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
60428 } else if (leadSurrogate) {
60429 // valid bmp char, but last char was a lead
60430 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
60431 }
60432
60433 leadSurrogate = null
60434
60435 // encode utf8
60436 if (codePoint < 0x80) {
60437 if ((units -= 1) < 0) break
60438 bytes.push(codePoint)
60439 } else if (codePoint < 0x800) {
60440 if ((units -= 2) < 0) break
60441 bytes.push(
60442 codePoint >> 0x6 | 0xC0,
60443 codePoint & 0x3F | 0x80
60444 )
60445 } else if (codePoint < 0x10000) {
60446 if ((units -= 3) < 0) break
60447 bytes.push(
60448 codePoint >> 0xC | 0xE0,
60449 codePoint >> 0x6 & 0x3F | 0x80,
60450 codePoint & 0x3F | 0x80
60451 )
60452 } else if (codePoint < 0x110000) {
60453 if ((units -= 4) < 0) break
60454 bytes.push(
60455 codePoint >> 0x12 | 0xF0,
60456 codePoint >> 0xC & 0x3F | 0x80,
60457 codePoint >> 0x6 & 0x3F | 0x80,
60458 codePoint & 0x3F | 0x80
60459 )
60460 } else {
60461 throw new Error('Invalid code point')
60462 }
60463 }
60464
60465 return bytes
60466 }
60467
60468 function asciiToBytes (str) {
60469 var byteArray = []
60470 for (var i = 0; i < str.length; ++i) {
60471 // Node's code seems to be doing this and not & 0x7F..
60472 byteArray.push(str.charCodeAt(i) & 0xFF)
60473 }
60474 return byteArray
60475 }
60476
60477 function utf16leToBytes (str, units) {
60478 var c, hi, lo
60479 var byteArray = []
60480 for (var i = 0; i < str.length; ++i) {
60481 if ((units -= 2) < 0) break
60482
60483 c = str.charCodeAt(i)
60484 hi = c >> 8
60485 lo = c % 256
60486 byteArray.push(lo)
60487 byteArray.push(hi)
60488 }
60489
60490 return byteArray
60491 }
60492
60493 function base64ToBytes (str) {
60494 return base64.toByteArray(base64clean(str))
60495 }
60496
60497 function blitBuffer (src, dst, offset, length) {
60498 for (var i = 0; i < length; ++i) {
60499 if ((i + offset >= dst.length) || (i >= src.length)) break
60500 dst[i + offset] = src[i]
60501 }
60502 return i
60503 }
60504
60505 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
60506 function isArrayBufferView (obj) {
60507 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
60508 }
60509
60510 function numberIsNaN (obj) {
60511 return obj !== obj // eslint-disable-line no-self-compare
60512 }
60513
60514 },{"base64-js":16,"ieee754":93}],48:[function(require,module,exports){
60515 (function (Buffer){
60516 var Transform = require('stream').Transform
60517 var inherits = require('inherits')
60518 var StringDecoder = require('string_decoder').StringDecoder
60519 module.exports = CipherBase
60520 inherits(CipherBase, Transform)
60521 function CipherBase (hashMode) {
60522 Transform.call(this)
60523 this.hashMode = typeof hashMode === 'string'
60524 if (this.hashMode) {
60525 this[hashMode] = this._finalOrDigest
60526 } else {
60527 this.final = this._finalOrDigest
60528 }
60529 this._decoder = null
60530 this._encoding = null
60531 }
60532 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
60533 if (typeof data === 'string') {
60534 data = new Buffer(data, inputEnc)
60535 }
60536 var outData = this._update(data)
60537 if (this.hashMode) {
60538 return this
60539 }
60540 if (outputEnc) {
60541 outData = this._toString(outData, outputEnc)
60542 }
60543 return outData
60544 }
60545
60546 CipherBase.prototype.setAutoPadding = function () {}
60547
60548 CipherBase.prototype.getAuthTag = function () {
60549 throw new Error('trying to get auth tag in unsupported state')
60550 }
60551
60552 CipherBase.prototype.setAuthTag = function () {
60553 throw new Error('trying to set auth tag in unsupported state')
60554 }
60555
60556 CipherBase.prototype.setAAD = function () {
60557 throw new Error('trying to set aad in unsupported state')
60558 }
60559
60560 CipherBase.prototype._transform = function (data, _, next) {
60561 var err
60562 try {
60563 if (this.hashMode) {
60564 this._update(data)
60565 } else {
60566 this.push(this._update(data))
60567 }
60568 } catch (e) {
60569 err = e
60570 } finally {
60571 next(err)
60572 }
60573 }
60574 CipherBase.prototype._flush = function (done) {
60575 var err
60576 try {
60577 this.push(this._final())
60578 } catch (e) {
60579 err = e
60580 } finally {
60581 done(err)
60582 }
60583 }
60584 CipherBase.prototype._finalOrDigest = function (outputEnc) {
60585 var outData = this._final() || new Buffer('')
60586 if (outputEnc) {
60587 outData = this._toString(outData, outputEnc, true)
60588 }
60589 return outData
60590 }
60591
60592 CipherBase.prototype._toString = function (value, enc, fin) {
60593 if (!this._decoder) {
60594 this._decoder = new StringDecoder(enc)
60595 this._encoding = enc
60596 }
60597 if (this._encoding !== enc) {
60598 throw new Error('can\'t switch encodings')
60599 }
60600 var out = this._decoder.write(value)
60601 if (fin) {
60602 out += this._decoder.end()
60603 }
60604 return out
60605 }
60606
60607 }).call(this,require("buffer").Buffer)
60608 },{"buffer":47,"inherits":95,"stream":143,"string_decoder":144}],49:[function(require,module,exports){
60609 (function (Buffer){
60610 // Copyright Joyent, Inc. and other Node contributors.
60611 //
60612 // Permission is hereby granted, free of charge, to any person obtaining a
60613 // copy of this software and associated documentation files (the
60614 // "Software"), to deal in the Software without restriction, including
60615 // without limitation the rights to use, copy, modify, merge, publish,
60616 // distribute, sublicense, and/or sell copies of the Software, and to permit
60617 // persons to whom the Software is furnished to do so, subject to the
60618 // following conditions:
60619 //
60620 // The above copyright notice and this permission notice shall be included
60621 // in all copies or substantial portions of the Software.
60622 //
60623 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
60624 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
60625 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
60626 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
60627 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
60628 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
60629 // USE OR OTHER DEALINGS IN THE SOFTWARE.
60630
60631 // NOTE: These type checking functions intentionally don't use `instanceof`
60632 // because it is fragile and can be easily faked with `Object.create()`.
60633
60634 function isArray(arg) {
60635 if (Array.isArray) {
60636 return Array.isArray(arg);
60637 }
60638 return objectToString(arg) === '[object Array]';
60639 }
60640 exports.isArray = isArray;
60641
60642 function isBoolean(arg) {
60643 return typeof arg === 'boolean';
60644 }
60645 exports.isBoolean = isBoolean;
60646
60647 function isNull(arg) {
60648 return arg === null;
60649 }
60650 exports.isNull = isNull;
60651
60652 function isNullOrUndefined(arg) {
60653 return arg == null;
60654 }
60655 exports.isNullOrUndefined = isNullOrUndefined;
60656
60657 function isNumber(arg) {
60658 return typeof arg === 'number';
60659 }
60660 exports.isNumber = isNumber;
60661
60662 function isString(arg) {
60663 return typeof arg === 'string';
60664 }
60665 exports.isString = isString;
60666
60667 function isSymbol(arg) {
60668 return typeof arg === 'symbol';
60669 }
60670 exports.isSymbol = isSymbol;
60671
60672 function isUndefined(arg) {
60673 return arg === void 0;
60674 }
60675 exports.isUndefined = isUndefined;
60676
60677 function isRegExp(re) {
60678 return objectToString(re) === '[object RegExp]';
60679 }
60680 exports.isRegExp = isRegExp;
60681
60682 function isObject(arg) {
60683 return typeof arg === 'object' && arg !== null;
60684 }
60685 exports.isObject = isObject;
60686
60687 function isDate(d) {
60688 return objectToString(d) === '[object Date]';
60689 }
60690 exports.isDate = isDate;
60691
60692 function isError(e) {
60693 return (objectToString(e) === '[object Error]' || e instanceof Error);
60694 }
60695 exports.isError = isError;
60696
60697 function isFunction(arg) {
60698 return typeof arg === 'function';
60699 }
60700 exports.isFunction = isFunction;
60701
60702 function isPrimitive(arg) {
60703 return arg === null ||
60704 typeof arg === 'boolean' ||
60705 typeof arg === 'number' ||
60706 typeof arg === 'string' ||
60707 typeof arg === 'symbol' || // ES6 symbol
60708 typeof arg === 'undefined';
60709 }
60710 exports.isPrimitive = isPrimitive;
60711
60712 exports.isBuffer = Buffer.isBuffer;
60713
60714 function objectToString(o) {
60715 return Object.prototype.toString.call(o);
60716 }
60717
60718 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
60719 },{"../../is-buffer/index.js":96}],50:[function(require,module,exports){
60720 (function (Buffer){
60721 var elliptic = require('elliptic');
60722 var BN = require('bn.js');
60723
60724 module.exports = function createECDH(curve) {
60725 return new ECDH(curve);
60726 };
60727
60728 var aliases = {
60729 secp256k1: {
60730 name: 'secp256k1',
60731 byteLength: 32
60732 },
60733 secp224r1: {
60734 name: 'p224',
60735 byteLength: 28
60736 },
60737 prime256v1: {
60738 name: 'p256',
60739 byteLength: 32
60740 },
60741 prime192v1: {
60742 name: 'p192',
60743 byteLength: 24
60744 },
60745 ed25519: {
60746 name: 'ed25519',
60747 byteLength: 32
60748 },
60749 secp384r1: {
60750 name: 'p384',
60751 byteLength: 48
60752 },
60753 secp521r1: {
60754 name: 'p521',
60755 byteLength: 66
60756 }
60757 };
60758
60759 aliases.p224 = aliases.secp224r1;
60760 aliases.p256 = aliases.secp256r1 = aliases.prime256v1;
60761 aliases.p192 = aliases.secp192r1 = aliases.prime192v1;
60762 aliases.p384 = aliases.secp384r1;
60763 aliases.p521 = aliases.secp521r1;
60764
60765 function ECDH(curve) {
60766 this.curveType = aliases[curve];
60767 if (!this.curveType ) {
60768 this.curveType = {
60769 name: curve
60770 };
60771 }
60772 this.curve = new elliptic.ec(this.curveType.name);
60773 this.keys = void 0;
60774 }
60775
60776 ECDH.prototype.generateKeys = function (enc, format) {
60777 this.keys = this.curve.genKeyPair();
60778 return this.getPublicKey(enc, format);
60779 };
60780
60781 ECDH.prototype.computeSecret = function (other, inenc, enc) {
60782 inenc = inenc || 'utf8';
60783 if (!Buffer.isBuffer(other)) {
60784 other = new Buffer(other, inenc);
60785 }
60786 var otherPub = this.curve.keyFromPublic(other).getPublic();
60787 var out = otherPub.mul(this.keys.getPrivate()).getX();
60788 return formatReturnValue(out, enc, this.curveType.byteLength);
60789 };
60790
60791 ECDH.prototype.getPublicKey = function (enc, format) {
60792 var key = this.keys.getPublic(format === 'compressed', true);
60793 if (format === 'hybrid') {
60794 if (key[key.length - 1] % 2) {
60795 key[0] = 7;
60796 } else {
60797 key [0] = 6;
60798 }
60799 }
60800 return formatReturnValue(key, enc);
60801 };
60802
60803 ECDH.prototype.getPrivateKey = function (enc) {
60804 return formatReturnValue(this.keys.getPrivate(), enc);
60805 };
60806
60807 ECDH.prototype.setPublicKey = function (pub, enc) {
60808 enc = enc || 'utf8';
60809 if (!Buffer.isBuffer(pub)) {
60810 pub = new Buffer(pub, enc);
60811 }
60812 this.keys._importPublic(pub);
60813 return this;
60814 };
60815
60816 ECDH.prototype.setPrivateKey = function (priv, enc) {
60817 enc = enc || 'utf8';
60818 if (!Buffer.isBuffer(priv)) {
60819 priv = new Buffer(priv, enc);
60820 }
60821 var _priv = new BN(priv);
60822 _priv = _priv.toString(16);
60823 this.keys._importPrivate(_priv);
60824 return this;
60825 };
60826
60827 function formatReturnValue(bn, enc, len) {
60828 if (!Array.isArray(bn)) {
60829 bn = bn.toArray();
60830 }
60831 var buf = new Buffer(bn);
60832 if (len && buf.length < len) {
60833 var zeros = new Buffer(len - buf.length);
60834 zeros.fill(0);
60835 buf = Buffer.concat([zeros, buf]);
60836 }
60837 if (!enc) {
60838 return buf;
60839 } else {
60840 return buf.toString(enc);
60841 }
60842 }
60843
60844 }).call(this,require("buffer").Buffer)
60845 },{"bn.js":17,"buffer":47,"elliptic":67}],51:[function(require,module,exports){
60846 (function (Buffer){
60847 'use strict'
60848 var inherits = require('inherits')
60849 var md5 = require('./md5')
60850 var RIPEMD160 = require('ripemd160')
60851 var sha = require('sha.js')
60852
60853 var Base = require('cipher-base')
60854
60855 function HashNoConstructor (hash) {
60856 Base.call(this, 'digest')
60857
60858 this._hash = hash
60859 this.buffers = []
60860 }
60861
60862 inherits(HashNoConstructor, Base)
60863
60864 HashNoConstructor.prototype._update = function (data) {
60865 this.buffers.push(data)
60866 }
60867
60868 HashNoConstructor.prototype._final = function () {
60869 var buf = Buffer.concat(this.buffers)
60870 var r = this._hash(buf)
60871 this.buffers = null
60872
60873 return r
60874 }
60875
60876 function Hash (hash) {
60877 Base.call(this, 'digest')
60878
60879 this._hash = hash
60880 }
60881
60882 inherits(Hash, Base)
60883
60884 Hash.prototype._update = function (data) {
60885 this._hash.update(data)
60886 }
60887
60888 Hash.prototype._final = function () {
60889 return this._hash.digest()
60890 }
60891
60892 module.exports = function createHash (alg) {
60893 alg = alg.toLowerCase()
60894 if (alg === 'md5') return new HashNoConstructor(md5)
60895 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
60896
60897 return new Hash(sha(alg))
60898 }
60899
60900 }).call(this,require("buffer").Buffer)
60901 },{"./md5":53,"buffer":47,"cipher-base":48,"inherits":95,"ripemd160":133,"sha.js":136}],52:[function(require,module,exports){
60902 (function (Buffer){
60903 'use strict'
60904 var intSize = 4
60905 var zeroBuffer = new Buffer(intSize)
60906 zeroBuffer.fill(0)
60907
60908 var charSize = 8
60909 var hashSize = 16
60910
60911 function toArray (buf) {
60912 if ((buf.length % intSize) !== 0) {
60913 var len = buf.length + (intSize - (buf.length % intSize))
60914 buf = Buffer.concat([buf, zeroBuffer], len)
60915 }
60916
60917 var arr = new Array(buf.length >>> 2)
60918 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
60919 arr[j] = buf.readInt32LE(i)
60920 }
60921
60922 return arr
60923 }
60924
60925 module.exports = function hash (buf, fn) {
60926 var arr = fn(toArray(buf), buf.length * charSize)
60927 buf = new Buffer(hashSize)
60928 for (var i = 0; i < arr.length; i++) {
60929 buf.writeInt32LE(arr[i], i << 2, true)
60930 }
60931 return buf
60932 }
60933
60934 }).call(this,require("buffer").Buffer)
60935 },{"buffer":47}],53:[function(require,module,exports){
60936 'use strict'
60937 /*
60938 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
60939 * Digest Algorithm, as defined in RFC 1321.
60940 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
60941 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
60942 * Distributed under the BSD License
60943 * See http://pajhome.org.uk/crypt/md5 for more info.
60944 */
60945
60946 var makeHash = require('./make-hash')
60947
60948 /*
60949 * Calculate the MD5 of an array of little-endian words, and a bit length
60950 */
60951 function core_md5 (x, len) {
60952 /* append padding */
60953 x[len >> 5] |= 0x80 << ((len) % 32)
60954 x[(((len + 64) >>> 9) << 4) + 14] = len
60955
60956 var a = 1732584193
60957 var b = -271733879
60958 var c = -1732584194
60959 var d = 271733878
60960
60961 for (var i = 0; i < x.length; i += 16) {
60962 var olda = a
60963 var oldb = b
60964 var oldc = c
60965 var oldd = d
60966
60967 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
60968 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
60969 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
60970 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
60971 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
60972 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
60973 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
60974 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
60975 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
60976 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
60977 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
60978 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
60979 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
60980 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
60981 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
60982 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
60983
60984 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
60985 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
60986 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
60987 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
60988 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
60989 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
60990 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
60991 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
60992 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
60993 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
60994 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
60995 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
60996 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
60997 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
60998 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
60999 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
61000
61001 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
61002 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
61003 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
61004 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
61005 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
61006 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
61007 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
61008 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
61009 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
61010 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
61011 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
61012 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
61013 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
61014 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
61015 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
61016 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
61017
61018 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
61019 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
61020 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
61021 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
61022 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
61023 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
61024 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
61025 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
61026 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
61027 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
61028 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
61029 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
61030 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
61031 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
61032 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
61033 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
61034
61035 a = safe_add(a, olda)
61036 b = safe_add(b, oldb)
61037 c = safe_add(c, oldc)
61038 d = safe_add(d, oldd)
61039 }
61040
61041 return [a, b, c, d]
61042 }
61043
61044 /*
61045 * These functions implement the four basic operations the algorithm uses.
61046 */
61047 function md5_cmn (q, a, b, x, s, t) {
61048 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
61049 }
61050
61051 function md5_ff (a, b, c, d, x, s, t) {
61052 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
61053 }
61054
61055 function md5_gg (a, b, c, d, x, s, t) {
61056 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
61057 }
61058
61059 function md5_hh (a, b, c, d, x, s, t) {
61060 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
61061 }
61062
61063 function md5_ii (a, b, c, d, x, s, t) {
61064 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
61065 }
61066
61067 /*
61068 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
61069 * to work around bugs in some JS interpreters.
61070 */
61071 function safe_add (x, y) {
61072 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
61073 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
61074 return (msw << 16) | (lsw & 0xFFFF)
61075 }
61076
61077 /*
61078 * Bitwise rotate a 32-bit number to the left.
61079 */
61080 function bit_rol (num, cnt) {
61081 return (num << cnt) | (num >>> (32 - cnt))
61082 }
61083
61084 module.exports = function md5 (buf) {
61085 return makeHash(buf, core_md5)
61086 }
61087
61088 },{"./make-hash":52}],54:[function(require,module,exports){
61089 'use strict'
61090 var inherits = require('inherits')
61091 var Legacy = require('./legacy')
61092 var Base = require('cipher-base')
61093 var Buffer = require('safe-buffer').Buffer
61094 var md5 = require('create-hash/md5')
61095 var RIPEMD160 = require('ripemd160')
61096
61097 var sha = require('sha.js')
61098
61099 var ZEROS = Buffer.alloc(128)
61100
61101 function Hmac (alg, key) {
61102 Base.call(this, 'digest')
61103 if (typeof key === 'string') {
61104 key = Buffer.from(key)
61105 }
61106
61107 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
61108
61109 this._alg = alg
61110 this._key = key
61111 if (key.length > blocksize) {
61112 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
61113 key = hash.update(key).digest()
61114 } else if (key.length < blocksize) {
61115 key = Buffer.concat([key, ZEROS], blocksize)
61116 }
61117
61118 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
61119 var opad = this._opad = Buffer.allocUnsafe(blocksize)
61120
61121 for (var i = 0; i < blocksize; i++) {
61122 ipad[i] = key[i] ^ 0x36
61123 opad[i] = key[i] ^ 0x5C
61124 }
61125 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
61126 this._hash.update(ipad)
61127 }
61128
61129 inherits(Hmac, Base)
61130
61131 Hmac.prototype._update = function (data) {
61132 this._hash.update(data)
61133 }
61134
61135 Hmac.prototype._final = function () {
61136 var h = this._hash.digest()
61137 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
61138 return hash.update(this._opad).update(h).digest()
61139 }
61140
61141 module.exports = function createHmac (alg, key) {
61142 alg = alg.toLowerCase()
61143 if (alg === 'rmd160' || alg === 'ripemd160') {
61144 return new Hmac('rmd160', key)
61145 }
61146 if (alg === 'md5') {
61147 return new Legacy(md5, key)
61148 }
61149 return new Hmac(alg, key)
61150 }
61151
61152 },{"./legacy":55,"cipher-base":48,"create-hash/md5":53,"inherits":95,"ripemd160":133,"safe-buffer":134,"sha.js":136}],55:[function(require,module,exports){
61153 'use strict'
61154 var inherits = require('inherits')
61155 var Buffer = require('safe-buffer').Buffer
61156
61157 var Base = require('cipher-base')
61158
61159 var ZEROS = Buffer.alloc(128)
61160 var blocksize = 64
61161
61162 function Hmac (alg, key) {
61163 Base.call(this, 'digest')
61164 if (typeof key === 'string') {
61165 key = Buffer.from(key)
61166 }
61167
61168 this._alg = alg
61169 this._key = key
61170
61171 if (key.length > blocksize) {
61172 key = alg(key)
61173 } else if (key.length < blocksize) {
61174 key = Buffer.concat([key, ZEROS], blocksize)
61175 }
61176
61177 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
61178 var opad = this._opad = Buffer.allocUnsafe(blocksize)
61179
61180 for (var i = 0; i < blocksize; i++) {
61181 ipad[i] = key[i] ^ 0x36
61182 opad[i] = key[i] ^ 0x5C
61183 }
61184
61185 this._hash = [ipad]
61186 }
61187
61188 inherits(Hmac, Base)
61189
61190 Hmac.prototype._update = function (data) {
61191 this._hash.push(data)
61192 }
61193
61194 Hmac.prototype._final = function () {
61195 var h = this._alg(Buffer.concat(this._hash))
61196 return this._alg(Buffer.concat([this._opad, h]))
61197 }
61198 module.exports = Hmac
61199
61200 },{"cipher-base":48,"inherits":95,"safe-buffer":134}],56:[function(require,module,exports){
61201 'use strict'
61202
61203 exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')
61204 exports.createHash = exports.Hash = require('create-hash')
61205 exports.createHmac = exports.Hmac = require('create-hmac')
61206
61207 var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(Object.keys(require('browserify-sign/algos')))
61208 exports.getHashes = function () {
61209 return hashes
61210 }
61211
61212 var p = require('pbkdf2')
61213 exports.pbkdf2 = p.pbkdf2
61214 exports.pbkdf2Sync = p.pbkdf2Sync
61215
61216 var aes = require('browserify-cipher')
61217 ;[
61218 'Cipher',
61219 'createCipher',
61220 'Cipheriv',
61221 'createCipheriv',
61222 'Decipher',
61223 'createDecipher',
61224 'Decipheriv',
61225 'createDecipheriv',
61226 'getCiphers',
61227 'listCiphers'
61228 ].forEach(function (key) {
61229 exports[key] = aes[key]
61230 })
61231
61232 var dh = require('diffie-hellman')
61233 ;[
61234 'DiffieHellmanGroup',
61235 'createDiffieHellmanGroup',
61236 'getDiffieHellman',
61237 'createDiffieHellman',
61238 'DiffieHellman'
61239 ].forEach(function (key) {
61240 exports[key] = dh[key]
61241 })
61242
61243 var sign = require('browserify-sign')
61244 ;[
61245 'createSign',
61246 'Sign',
61247 'createVerify',
61248 'Verify'
61249 ].forEach(function (key) {
61250 exports[key] = sign[key]
61251 })
61252
61253 exports.createECDH = require('create-ecdh')
61254
61255 var publicEncrypt = require('public-encrypt')
61256
61257 ;[
61258 'publicEncrypt',
61259 'privateEncrypt',
61260 'publicDecrypt',
61261 'privateDecrypt'
61262 ].forEach(function (key) {
61263 exports[key] = publicEncrypt[key]
61264 })
61265
61266 // the least I can do is make error messages for the rest of the node.js/crypto api.
61267 ;[
61268 'createCredentials'
61269 ].forEach(function (name) {
61270 exports[name] = function () {
61271 throw new Error([
61272 'sorry, ' + name + ' is not implemented yet',
61273 'we accept pull requests',
61274 'https://github.com/crypto-browserify/crypto-browserify'
61275 ].join('\n'))
61276 }
61277 })
61278
61279 },{"browserify-cipher":35,"browserify-sign":42,"browserify-sign/algos":39,"create-ecdh":50,"create-hash":51,"create-hmac":54,"diffie-hellman":63,"pbkdf2":106,"public-encrypt":113,"randombytes":119}],57:[function(require,module,exports){
61280 'use strict';
61281
61282 exports.utils = require('./des/utils');
61283 exports.Cipher = require('./des/cipher');
61284 exports.DES = require('./des/des');
61285 exports.CBC = require('./des/cbc');
61286 exports.EDE = require('./des/ede');
61287
61288 },{"./des/cbc":58,"./des/cipher":59,"./des/des":60,"./des/ede":61,"./des/utils":62}],58:[function(require,module,exports){
61289 'use strict';
61290
61291 var assert = require('minimalistic-assert');
61292 var inherits = require('inherits');
61293
61294 var proto = {};
61295
61296 function CBCState(iv) {
61297 assert.equal(iv.length, 8, 'Invalid IV length');
61298
61299 this.iv = new Array(8);
61300 for (var i = 0; i < this.iv.length; i++)
61301 this.iv[i] = iv[i];
61302 }
61303
61304 function instantiate(Base) {
61305 function CBC(options) {
61306 Base.call(this, options);
61307 this._cbcInit();
61308 }
61309 inherits(CBC, Base);
61310
61311 var keys = Object.keys(proto);
61312 for (var i = 0; i < keys.length; i++) {
61313 var key = keys[i];
61314 CBC.prototype[key] = proto[key];
61315 }
61316
61317 CBC.create = function create(options) {
61318 return new CBC(options);
61319 };
61320
61321 return CBC;
61322 }
61323
61324 exports.instantiate = instantiate;
61325
61326 proto._cbcInit = function _cbcInit() {
61327 var state = new CBCState(this.options.iv);
61328 this._cbcState = state;
61329 };
61330
61331 proto._update = function _update(inp, inOff, out, outOff) {
61332 var state = this._cbcState;
61333 var superProto = this.constructor.super_.prototype;
61334
61335 var iv = state.iv;
61336 if (this.type === 'encrypt') {
61337 for (var i = 0; i < this.blockSize; i++)
61338 iv[i] ^= inp[inOff + i];
61339
61340 superProto._update.call(this, iv, 0, out, outOff);
61341
61342 for (var i = 0; i < this.blockSize; i++)
61343 iv[i] = out[outOff + i];
61344 } else {
61345 superProto._update.call(this, inp, inOff, out, outOff);
61346
61347 for (var i = 0; i < this.blockSize; i++)
61348 out[outOff + i] ^= iv[i];
61349
61350 for (var i = 0; i < this.blockSize; i++)
61351 iv[i] = inp[inOff + i];
61352 }
61353 };
61354
61355 },{"inherits":95,"minimalistic-assert":99}],59:[function(require,module,exports){
61356 'use strict';
61357
61358 var assert = require('minimalistic-assert');
61359
61360 function Cipher(options) {
61361 this.options = options;
61362
61363 this.type = this.options.type;
61364 this.blockSize = 8;
61365 this._init();
61366
61367 this.buffer = new Array(this.blockSize);
61368 this.bufferOff = 0;
61369 }
61370 module.exports = Cipher;
61371
61372 Cipher.prototype._init = function _init() {
61373 // Might be overrided
61374 };
61375
61376 Cipher.prototype.update = function update(data) {
61377 if (data.length === 0)
61378 return [];
61379
61380 if (this.type === 'decrypt')
61381 return this._updateDecrypt(data);
61382 else
61383 return this._updateEncrypt(data);
61384 };
61385
61386 Cipher.prototype._buffer = function _buffer(data, off) {
61387 // Append data to buffer
61388 var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);
61389 for (var i = 0; i < min; i++)
61390 this.buffer[this.bufferOff + i] = data[off + i];
61391 this.bufferOff += min;
61392
61393 // Shift next
61394 return min;
61395 };
61396
61397 Cipher.prototype._flushBuffer = function _flushBuffer(out, off) {
61398 this._update(this.buffer, 0, out, off);
61399 this.bufferOff = 0;
61400 return this.blockSize;
61401 };
61402
61403 Cipher.prototype._updateEncrypt = function _updateEncrypt(data) {
61404 var inputOff = 0;
61405 var outputOff = 0;
61406
61407 var count = ((this.bufferOff + data.length) / this.blockSize) | 0;
61408 var out = new Array(count * this.blockSize);
61409
61410 if (this.bufferOff !== 0) {
61411 inputOff += this._buffer(data, inputOff);
61412
61413 if (this.bufferOff === this.buffer.length)
61414 outputOff += this._flushBuffer(out, outputOff);
61415 }
61416
61417 // Write blocks
61418 var max = data.length - ((data.length - inputOff) % this.blockSize);
61419 for (; inputOff < max; inputOff += this.blockSize) {
61420 this._update(data, inputOff, out, outputOff);
61421 outputOff += this.blockSize;
61422 }
61423
61424 // Queue rest
61425 for (; inputOff < data.length; inputOff++, this.bufferOff++)
61426 this.buffer[this.bufferOff] = data[inputOff];
61427
61428 return out;
61429 };
61430
61431 Cipher.prototype._updateDecrypt = function _updateDecrypt(data) {
61432 var inputOff = 0;
61433 var outputOff = 0;
61434
61435 var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;
61436 var out = new Array(count * this.blockSize);
61437
61438 // TODO(indutny): optimize it, this is far from optimal
61439 for (; count > 0; count--) {
61440 inputOff += this._buffer(data, inputOff);
61441 outputOff += this._flushBuffer(out, outputOff);
61442 }
61443
61444 // Buffer rest of the input
61445 inputOff += this._buffer(data, inputOff);
61446
61447 return out;
61448 };
61449
61450 Cipher.prototype.final = function final(buffer) {
61451 var first;
61452 if (buffer)
61453 first = this.update(buffer);
61454
61455 var last;
61456 if (this.type === 'encrypt')
61457 last = this._finalEncrypt();
61458 else
61459 last = this._finalDecrypt();
61460
61461 if (first)
61462 return first.concat(last);
61463 else
61464 return last;
61465 };
61466
61467 Cipher.prototype._pad = function _pad(buffer, off) {
61468 if (off === 0)
61469 return false;
61470
61471 while (off < buffer.length)
61472 buffer[off++] = 0;
61473
61474 return true;
61475 };
61476
61477 Cipher.prototype._finalEncrypt = function _finalEncrypt() {
61478 if (!this._pad(this.buffer, this.bufferOff))
61479 return [];
61480
61481 var out = new Array(this.blockSize);
61482 this._update(this.buffer, 0, out, 0);
61483 return out;
61484 };
61485
61486 Cipher.prototype._unpad = function _unpad(buffer) {
61487 return buffer;
61488 };
61489
61490 Cipher.prototype._finalDecrypt = function _finalDecrypt() {
61491 assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');
61492 var out = new Array(this.blockSize);
61493 this._flushBuffer(out, 0);
61494
61495 return this._unpad(out);
61496 };
61497
61498 },{"minimalistic-assert":99}],60:[function(require,module,exports){
61499 'use strict';
61500
61501 var assert = require('minimalistic-assert');
61502 var inherits = require('inherits');
61503
61504 var des = require('../des');
61505 var utils = des.utils;
61506 var Cipher = des.Cipher;
61507
61508 function DESState() {
61509 this.tmp = new Array(2);
61510 this.keys = null;
61511 }
61512
61513 function DES(options) {
61514 Cipher.call(this, options);
61515
61516 var state = new DESState();
61517 this._desState = state;
61518
61519 this.deriveKeys(state, options.key);
61520 }
61521 inherits(DES, Cipher);
61522 module.exports = DES;
61523
61524 DES.create = function create(options) {
61525 return new DES(options);
61526 };
61527
61528 var shiftTable = [
61529 1, 1, 2, 2, 2, 2, 2, 2,
61530 1, 2, 2, 2, 2, 2, 2, 1
61531 ];
61532
61533 DES.prototype.deriveKeys = function deriveKeys(state, key) {
61534 state.keys = new Array(16 * 2);
61535
61536 assert.equal(key.length, this.blockSize, 'Invalid key length');
61537
61538 var kL = utils.readUInt32BE(key, 0);
61539 var kR = utils.readUInt32BE(key, 4);
61540
61541 utils.pc1(kL, kR, state.tmp, 0);
61542 kL = state.tmp[0];
61543 kR = state.tmp[1];
61544 for (var i = 0; i < state.keys.length; i += 2) {
61545 var shift = shiftTable[i >>> 1];
61546 kL = utils.r28shl(kL, shift);
61547 kR = utils.r28shl(kR, shift);
61548 utils.pc2(kL, kR, state.keys, i);
61549 }
61550 };
61551
61552 DES.prototype._update = function _update(inp, inOff, out, outOff) {
61553 var state = this._desState;
61554
61555 var l = utils.readUInt32BE(inp, inOff);
61556 var r = utils.readUInt32BE(inp, inOff + 4);
61557
61558 // Initial Permutation
61559 utils.ip(l, r, state.tmp, 0);
61560 l = state.tmp[0];
61561 r = state.tmp[1];
61562
61563 if (this.type === 'encrypt')
61564 this._encrypt(state, l, r, state.tmp, 0);
61565 else
61566 this._decrypt(state, l, r, state.tmp, 0);
61567
61568 l = state.tmp[0];
61569 r = state.tmp[1];
61570
61571 utils.writeUInt32BE(out, l, outOff);
61572 utils.writeUInt32BE(out, r, outOff + 4);
61573 };
61574
61575 DES.prototype._pad = function _pad(buffer, off) {
61576 var value = buffer.length - off;
61577 for (var i = off; i < buffer.length; i++)
61578 buffer[i] = value;
61579
61580 return true;
61581 };
61582
61583 DES.prototype._unpad = function _unpad(buffer) {
61584 var pad = buffer[buffer.length - 1];
61585 for (var i = buffer.length - pad; i < buffer.length; i++)
61586 assert.equal(buffer[i], pad);
61587
61588 return buffer.slice(0, buffer.length - pad);
61589 };
61590
61591 DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {
61592 var l = lStart;
61593 var r = rStart;
61594
61595 // Apply f() x16 times
61596 for (var i = 0; i < state.keys.length; i += 2) {
61597 var keyL = state.keys[i];
61598 var keyR = state.keys[i + 1];
61599
61600 // f(r, k)
61601 utils.expand(r, state.tmp, 0);
61602
61603 keyL ^= state.tmp[0];
61604 keyR ^= state.tmp[1];
61605 var s = utils.substitute(keyL, keyR);
61606 var f = utils.permute(s);
61607
61608 var t = r;
61609 r = (l ^ f) >>> 0;
61610 l = t;
61611 }
61612
61613 // Reverse Initial Permutation
61614 utils.rip(r, l, out, off);
61615 };
61616
61617 DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {
61618 var l = rStart;
61619 var r = lStart;
61620
61621 // Apply f() x16 times
61622 for (var i = state.keys.length - 2; i >= 0; i -= 2) {
61623 var keyL = state.keys[i];
61624 var keyR = state.keys[i + 1];
61625
61626 // f(r, k)
61627 utils.expand(l, state.tmp, 0);
61628
61629 keyL ^= state.tmp[0];
61630 keyR ^= state.tmp[1];
61631 var s = utils.substitute(keyL, keyR);
61632 var f = utils.permute(s);
61633
61634 var t = l;
61635 l = (r ^ f) >>> 0;
61636 r = t;
61637 }
61638
61639 // Reverse Initial Permutation
61640 utils.rip(l, r, out, off);
61641 };
61642
61643 },{"../des":57,"inherits":95,"minimalistic-assert":99}],61:[function(require,module,exports){
61644 'use strict';
61645
61646 var assert = require('minimalistic-assert');
61647 var inherits = require('inherits');
61648
61649 var des = require('../des');
61650 var Cipher = des.Cipher;
61651 var DES = des.DES;
61652
61653 function EDEState(type, key) {
61654 assert.equal(key.length, 24, 'Invalid key length');
61655
61656 var k1 = key.slice(0, 8);
61657 var k2 = key.slice(8, 16);
61658 var k3 = key.slice(16, 24);
61659
61660 if (type === 'encrypt') {
61661 this.ciphers = [
61662 DES.create({ type: 'encrypt', key: k1 }),
61663 DES.create({ type: 'decrypt', key: k2 }),
61664 DES.create({ type: 'encrypt', key: k3 })
61665 ];
61666 } else {
61667 this.ciphers = [
61668 DES.create({ type: 'decrypt', key: k3 }),
61669 DES.create({ type: 'encrypt', key: k2 }),
61670 DES.create({ type: 'decrypt', key: k1 })
61671 ];
61672 }
61673 }
61674
61675 function EDE(options) {
61676 Cipher.call(this, options);
61677
61678 var state = new EDEState(this.type, this.options.key);
61679 this._edeState = state;
61680 }
61681 inherits(EDE, Cipher);
61682
61683 module.exports = EDE;
61684
61685 EDE.create = function create(options) {
61686 return new EDE(options);
61687 };
61688
61689 EDE.prototype._update = function _update(inp, inOff, out, outOff) {
61690 var state = this._edeState;
61691
61692 state.ciphers[0]._update(inp, inOff, out, outOff);
61693 state.ciphers[1]._update(out, outOff, out, outOff);
61694 state.ciphers[2]._update(out, outOff, out, outOff);
61695 };
61696
61697 EDE.prototype._pad = DES.prototype._pad;
61698 EDE.prototype._unpad = DES.prototype._unpad;
61699
61700 },{"../des":57,"inherits":95,"minimalistic-assert":99}],62:[function(require,module,exports){
61701 'use strict';
61702
61703 exports.readUInt32BE = function readUInt32BE(bytes, off) {
61704 var res = (bytes[0 + off] << 24) |
61705 (bytes[1 + off] << 16) |
61706 (bytes[2 + off] << 8) |
61707 bytes[3 + off];
61708 return res >>> 0;
61709 };
61710
61711 exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {
61712 bytes[0 + off] = value >>> 24;
61713 bytes[1 + off] = (value >>> 16) & 0xff;
61714 bytes[2 + off] = (value >>> 8) & 0xff;
61715 bytes[3 + off] = value & 0xff;
61716 };
61717
61718 exports.ip = function ip(inL, inR, out, off) {
61719 var outL = 0;
61720 var outR = 0;
61721
61722 for (var i = 6; i >= 0; i -= 2) {
61723 for (var j = 0; j <= 24; j += 8) {
61724 outL <<= 1;
61725 outL |= (inR >>> (j + i)) & 1;
61726 }
61727 for (var j = 0; j <= 24; j += 8) {
61728 outL <<= 1;
61729 outL |= (inL >>> (j + i)) & 1;
61730 }
61731 }
61732
61733 for (var i = 6; i >= 0; i -= 2) {
61734 for (var j = 1; j <= 25; j += 8) {
61735 outR <<= 1;
61736 outR |= (inR >>> (j + i)) & 1;
61737 }
61738 for (var j = 1; j <= 25; j += 8) {
61739 outR <<= 1;
61740 outR |= (inL >>> (j + i)) & 1;
61741 }
61742 }
61743
61744 out[off + 0] = outL >>> 0;
61745 out[off + 1] = outR >>> 0;
61746 };
61747
61748 exports.rip = function rip(inL, inR, out, off) {
61749 var outL = 0;
61750 var outR = 0;
61751
61752 for (var i = 0; i < 4; i++) {
61753 for (var j = 24; j >= 0; j -= 8) {
61754 outL <<= 1;
61755 outL |= (inR >>> (j + i)) & 1;
61756 outL <<= 1;
61757 outL |= (inL >>> (j + i)) & 1;
61758 }
61759 }
61760 for (var i = 4; i < 8; i++) {
61761 for (var j = 24; j >= 0; j -= 8) {
61762 outR <<= 1;
61763 outR |= (inR >>> (j + i)) & 1;
61764 outR <<= 1;
61765 outR |= (inL >>> (j + i)) & 1;
61766 }
61767 }
61768
61769 out[off + 0] = outL >>> 0;
61770 out[off + 1] = outR >>> 0;
61771 };
61772
61773 exports.pc1 = function pc1(inL, inR, out, off) {
61774 var outL = 0;
61775 var outR = 0;
61776
61777 // 7, 15, 23, 31, 39, 47, 55, 63
61778 // 6, 14, 22, 30, 39, 47, 55, 63
61779 // 5, 13, 21, 29, 39, 47, 55, 63
61780 // 4, 12, 20, 28
61781 for (var i = 7; i >= 5; i--) {
61782 for (var j = 0; j <= 24; j += 8) {
61783 outL <<= 1;
61784 outL |= (inR >> (j + i)) & 1;
61785 }
61786 for (var j = 0; j <= 24; j += 8) {
61787 outL <<= 1;
61788 outL |= (inL >> (j + i)) & 1;
61789 }
61790 }
61791 for (var j = 0; j <= 24; j += 8) {
61792 outL <<= 1;
61793 outL |= (inR >> (j + i)) & 1;
61794 }
61795
61796 // 1, 9, 17, 25, 33, 41, 49, 57
61797 // 2, 10, 18, 26, 34, 42, 50, 58
61798 // 3, 11, 19, 27, 35, 43, 51, 59
61799 // 36, 44, 52, 60
61800 for (var i = 1; i <= 3; i++) {
61801 for (var j = 0; j <= 24; j += 8) {
61802 outR <<= 1;
61803 outR |= (inR >> (j + i)) & 1;
61804 }
61805 for (var j = 0; j <= 24; j += 8) {
61806 outR <<= 1;
61807 outR |= (inL >> (j + i)) & 1;
61808 }
61809 }
61810 for (var j = 0; j <= 24; j += 8) {
61811 outR <<= 1;
61812 outR |= (inL >> (j + i)) & 1;
61813 }
61814
61815 out[off + 0] = outL >>> 0;
61816 out[off + 1] = outR >>> 0;
61817 };
61818
61819 exports.r28shl = function r28shl(num, shift) {
61820 return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));
61821 };
61822
61823 var pc2table = [
61824 // inL => outL
61825 14, 11, 17, 4, 27, 23, 25, 0,
61826 13, 22, 7, 18, 5, 9, 16, 24,
61827 2, 20, 12, 21, 1, 8, 15, 26,
61828
61829 // inR => outR
61830 15, 4, 25, 19, 9, 1, 26, 16,
61831 5, 11, 23, 8, 12, 7, 17, 0,
61832 22, 3, 10, 14, 6, 20, 27, 24
61833 ];
61834
61835 exports.pc2 = function pc2(inL, inR, out, off) {
61836 var outL = 0;
61837 var outR = 0;
61838
61839 var len = pc2table.length >>> 1;
61840 for (var i = 0; i < len; i++) {
61841 outL <<= 1;
61842 outL |= (inL >>> pc2table[i]) & 0x1;
61843 }
61844 for (var i = len; i < pc2table.length; i++) {
61845 outR <<= 1;
61846 outR |= (inR >>> pc2table[i]) & 0x1;
61847 }
61848
61849 out[off + 0] = outL >>> 0;
61850 out[off + 1] = outR >>> 0;
61851 };
61852
61853 exports.expand = function expand(r, out, off) {
61854 var outL = 0;
61855 var outR = 0;
61856
61857 outL = ((r & 1) << 5) | (r >>> 27);
61858 for (var i = 23; i >= 15; i -= 4) {
61859 outL <<= 6;
61860 outL |= (r >>> i) & 0x3f;
61861 }
61862 for (var i = 11; i >= 3; i -= 4) {
61863 outR |= (r >>> i) & 0x3f;
61864 outR <<= 6;
61865 }
61866 outR |= ((r & 0x1f) << 1) | (r >>> 31);
61867
61868 out[off + 0] = outL >>> 0;
61869 out[off + 1] = outR >>> 0;
61870 };
61871
61872 var sTable = [
61873 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,
61874 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,
61875 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,
61876 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,
61877
61878 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,
61879 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,
61880 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,
61881 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,
61882
61883 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,
61884 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,
61885 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,
61886 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,
61887
61888 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,
61889 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,
61890 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,
61891 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,
61892
61893 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,
61894 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,
61895 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,
61896 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,
61897
61898 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,
61899 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,
61900 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,
61901 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,
61902
61903 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,
61904 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,
61905 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,
61906 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,
61907
61908 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,
61909 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,
61910 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,
61911 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11
61912 ];
61913
61914 exports.substitute = function substitute(inL, inR) {
61915 var out = 0;
61916 for (var i = 0; i < 4; i++) {
61917 var b = (inL >>> (18 - i * 6)) & 0x3f;
61918 var sb = sTable[i * 0x40 + b];
61919
61920 out <<= 4;
61921 out |= sb;
61922 }
61923 for (var i = 0; i < 4; i++) {
61924 var b = (inR >>> (18 - i * 6)) & 0x3f;
61925 var sb = sTable[4 * 0x40 + i * 0x40 + b];
61926
61927 out <<= 4;
61928 out |= sb;
61929 }
61930 return out >>> 0;
61931 };
61932
61933 var permuteTable = [
61934 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,
61935 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7
61936 ];
61937
61938 exports.permute = function permute(num) {
61939 var out = 0;
61940 for (var i = 0; i < permuteTable.length; i++) {
61941 out <<= 1;
61942 out |= (num >>> permuteTable[i]) & 0x1;
61943 }
61944 return out >>> 0;
61945 };
61946
61947 exports.padSplit = function padSplit(num, size, group) {
61948 var str = num.toString(2);
61949 while (str.length < size)
61950 str = '0' + str;
61951
61952 var out = [];
61953 for (var i = 0; i < size; i += group)
61954 out.push(str.slice(i, i + group));
61955 return out.join(' ');
61956 };
61957
61958 },{}],63:[function(require,module,exports){
61959 (function (Buffer){
61960 var generatePrime = require('./lib/generatePrime')
61961 var primes = require('./lib/primes.json')
61962
61963 var DH = require('./lib/dh')
61964
61965 function getDiffieHellman (mod) {
61966 var prime = new Buffer(primes[mod].prime, 'hex')
61967 var gen = new Buffer(primes[mod].gen, 'hex')
61968
61969 return new DH(prime, gen)
61970 }
61971
61972 var ENCODINGS = {
61973 'binary': true, 'hex': true, 'base64': true
61974 }
61975
61976 function createDiffieHellman (prime, enc, generator, genc) {
61977 if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {
61978 return createDiffieHellman(prime, 'binary', enc, generator)
61979 }
61980
61981 enc = enc || 'binary'
61982 genc = genc || 'binary'
61983 generator = generator || new Buffer([2])
61984
61985 if (!Buffer.isBuffer(generator)) {
61986 generator = new Buffer(generator, genc)
61987 }
61988
61989 if (typeof prime === 'number') {
61990 return new DH(generatePrime(prime, generator), generator, true)
61991 }
61992
61993 if (!Buffer.isBuffer(prime)) {
61994 prime = new Buffer(prime, enc)
61995 }
61996
61997 return new DH(prime, generator, true)
61998 }
61999
62000 exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman
62001 exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman
62002
62003 }).call(this,require("buffer").Buffer)
62004 },{"./lib/dh":64,"./lib/generatePrime":65,"./lib/primes.json":66,"buffer":47}],64:[function(require,module,exports){
62005 (function (Buffer){
62006 var BN = require('bn.js');
62007 var MillerRabin = require('miller-rabin');
62008 var millerRabin = new MillerRabin();
62009 var TWENTYFOUR = new BN(24);
62010 var ELEVEN = new BN(11);
62011 var TEN = new BN(10);
62012 var THREE = new BN(3);
62013 var SEVEN = new BN(7);
62014 var primes = require('./generatePrime');
62015 var randomBytes = require('randombytes');
62016 module.exports = DH;
62017
62018 function setPublicKey(pub, enc) {
62019 enc = enc || 'utf8';
62020 if (!Buffer.isBuffer(pub)) {
62021 pub = new Buffer(pub, enc);
62022 }
62023 this._pub = new BN(pub);
62024 return this;
62025 }
62026
62027 function setPrivateKey(priv, enc) {
62028 enc = enc || 'utf8';
62029 if (!Buffer.isBuffer(priv)) {
62030 priv = new Buffer(priv, enc);
62031 }
62032 this._priv = new BN(priv);
62033 return this;
62034 }
62035
62036 var primeCache = {};
62037 function checkPrime(prime, generator) {
62038 var gen = generator.toString('hex');
62039 var hex = [gen, prime.toString(16)].join('_');
62040 if (hex in primeCache) {
62041 return primeCache[hex];
62042 }
62043 var error = 0;
62044
62045 if (prime.isEven() ||
62046 !primes.simpleSieve ||
62047 !primes.fermatTest(prime) ||
62048 !millerRabin.test(prime)) {
62049 //not a prime so +1
62050 error += 1;
62051
62052 if (gen === '02' || gen === '05') {
62053 // we'd be able to check the generator
62054 // it would fail so +8
62055 error += 8;
62056 } else {
62057 //we wouldn't be able to test the generator
62058 // so +4
62059 error += 4;
62060 }
62061 primeCache[hex] = error;
62062 return error;
62063 }
62064 if (!millerRabin.test(prime.shrn(1))) {
62065 //not a safe prime
62066 error += 2;
62067 }
62068 var rem;
62069 switch (gen) {
62070 case '02':
62071 if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {
62072 // unsuidable generator
62073 error += 8;
62074 }
62075 break;
62076 case '05':
62077 rem = prime.mod(TEN);
62078 if (rem.cmp(THREE) && rem.cmp(SEVEN)) {
62079 // prime mod 10 needs to equal 3 or 7
62080 error += 8;
62081 }
62082 break;
62083 default:
62084 error += 4;
62085 }
62086 primeCache[hex] = error;
62087 return error;
62088 }
62089
62090 function DH(prime, generator, malleable) {
62091 this.setGenerator(generator);
62092 this.__prime = new BN(prime);
62093 this._prime = BN.mont(this.__prime);
62094 this._primeLen = prime.length;
62095 this._pub = undefined;
62096 this._priv = undefined;
62097 this._primeCode = undefined;
62098 if (malleable) {
62099 this.setPublicKey = setPublicKey;
62100 this.setPrivateKey = setPrivateKey;
62101 } else {
62102 this._primeCode = 8;
62103 }
62104 }
62105 Object.defineProperty(DH.prototype, 'verifyError', {
62106 enumerable: true,
62107 get: function () {
62108 if (typeof this._primeCode !== 'number') {
62109 this._primeCode = checkPrime(this.__prime, this.__gen);
62110 }
62111 return this._primeCode;
62112 }
62113 });
62114 DH.prototype.generateKeys = function () {
62115 if (!this._priv) {
62116 this._priv = new BN(randomBytes(this._primeLen));
62117 }
62118 this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();
62119 return this.getPublicKey();
62120 };
62121
62122 DH.prototype.computeSecret = function (other) {
62123 other = new BN(other);
62124 other = other.toRed(this._prime);
62125 var secret = other.redPow(this._priv).fromRed();
62126 var out = new Buffer(secret.toArray());
62127 var prime = this.getPrime();
62128 if (out.length < prime.length) {
62129 var front = new Buffer(prime.length - out.length);
62130 front.fill(0);
62131 out = Buffer.concat([front, out]);
62132 }
62133 return out;
62134 };
62135
62136 DH.prototype.getPublicKey = function getPublicKey(enc) {
62137 return formatReturnValue(this._pub, enc);
62138 };
62139
62140 DH.prototype.getPrivateKey = function getPrivateKey(enc) {
62141 return formatReturnValue(this._priv, enc);
62142 };
62143
62144 DH.prototype.getPrime = function (enc) {
62145 return formatReturnValue(this.__prime, enc);
62146 };
62147
62148 DH.prototype.getGenerator = function (enc) {
62149 return formatReturnValue(this._gen, enc);
62150 };
62151
62152 DH.prototype.setGenerator = function (gen, enc) {
62153 enc = enc || 'utf8';
62154 if (!Buffer.isBuffer(gen)) {
62155 gen = new Buffer(gen, enc);
62156 }
62157 this.__gen = gen;
62158 this._gen = new BN(gen);
62159 return this;
62160 };
62161
62162 function formatReturnValue(bn, enc) {
62163 var buf = new Buffer(bn.toArray());
62164 if (!enc) {
62165 return buf;
62166 } else {
62167 return buf.toString(enc);
62168 }
62169 }
62170
62171 }).call(this,require("buffer").Buffer)
62172 },{"./generatePrime":65,"bn.js":17,"buffer":47,"miller-rabin":98,"randombytes":119}],65:[function(require,module,exports){
62173 var randomBytes = require('randombytes');
62174 module.exports = findPrime;
62175 findPrime.simpleSieve = simpleSieve;
62176 findPrime.fermatTest = fermatTest;
62177 var BN = require('bn.js');
62178 var TWENTYFOUR = new BN(24);
62179 var MillerRabin = require('miller-rabin');
62180 var millerRabin = new MillerRabin();
62181 var ONE = new BN(1);
62182 var TWO = new BN(2);
62183 var FIVE = new BN(5);
62184 var SIXTEEN = new BN(16);
62185 var EIGHT = new BN(8);
62186 var TEN = new BN(10);
62187 var THREE = new BN(3);
62188 var SEVEN = new BN(7);
62189 var ELEVEN = new BN(11);
62190 var FOUR = new BN(4);
62191 var TWELVE = new BN(12);
62192 var primes = null;
62193
62194 function _getPrimes() {
62195 if (primes !== null)
62196 return primes;
62197
62198 var limit = 0x100000;
62199 var res = [];
62200 res[0] = 2;
62201 for (var i = 1, k = 3; k < limit; k += 2) {
62202 var sqrt = Math.ceil(Math.sqrt(k));
62203 for (var j = 0; j < i && res[j] <= sqrt; j++)
62204 if (k % res[j] === 0)
62205 break;
62206
62207 if (i !== j && res[j] <= sqrt)
62208 continue;
62209
62210 res[i++] = k;
62211 }
62212 primes = res;
62213 return res;
62214 }
62215
62216 function simpleSieve(p) {
62217 var primes = _getPrimes();
62218
62219 for (var i = 0; i < primes.length; i++)
62220 if (p.modn(primes[i]) === 0) {
62221 if (p.cmpn(primes[i]) === 0) {
62222 return true;
62223 } else {
62224 return false;
62225 }
62226 }
62227
62228 return true;
62229 }
62230
62231 function fermatTest(p) {
62232 var red = BN.mont(p);
62233 return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;
62234 }
62235
62236 function findPrime(bits, gen) {
62237 if (bits < 16) {
62238 // this is what openssl does
62239 if (gen === 2 || gen === 5) {
62240 return new BN([0x8c, 0x7b]);
62241 } else {
62242 return new BN([0x8c, 0x27]);
62243 }
62244 }
62245 gen = new BN(gen);
62246
62247 var num, n2;
62248
62249 while (true) {
62250 num = new BN(randomBytes(Math.ceil(bits / 8)));
62251 while (num.bitLength() > bits) {
62252 num.ishrn(1);
62253 }
62254 if (num.isEven()) {
62255 num.iadd(ONE);
62256 }
62257 if (!num.testn(1)) {
62258 num.iadd(TWO);
62259 }
62260 if (!gen.cmp(TWO)) {
62261 while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {
62262 num.iadd(FOUR);
62263 }
62264 } else if (!gen.cmp(FIVE)) {
62265 while (num.mod(TEN).cmp(THREE)) {
62266 num.iadd(FOUR);
62267 }
62268 }
62269 n2 = num.shrn(1);
62270 if (simpleSieve(n2) && simpleSieve(num) &&
62271 fermatTest(n2) && fermatTest(num) &&
62272 millerRabin.test(n2) && millerRabin.test(num)) {
62273 return num;
62274 }
62275 }
62276
62277 }
62278
62279 },{"bn.js":17,"miller-rabin":98,"randombytes":119}],66:[function(require,module,exports){
62280 module.exports={
62281 "modp1": {
62282 "gen": "02",
62283 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"
62284 },
62285 "modp2": {
62286 "gen": "02",
62287 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"
62288 },
62289 "modp5": {
62290 "gen": "02",
62291 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"
62292 },
62293 "modp14": {
62294 "gen": "02",
62295 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"
62296 },
62297 "modp15": {
62298 "gen": "02",
62299 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"
62300 },
62301 "modp16": {
62302 "gen": "02",
62303 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"
62304 },
62305 "modp17": {
62306 "gen": "02",
62307 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"
62308 },
62309 "modp18": {
62310 "gen": "02",
62311 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"
62312 }
62313 }
62314 },{}],67:[function(require,module,exports){
62315 'use strict';
62316
62317 var elliptic = exports;
62318
62319 elliptic.version = require('../package.json').version;
62320 elliptic.utils = require('./elliptic/utils');
62321 elliptic.rand = require('brorand');
62322 elliptic.curve = require('./elliptic/curve');
62323 elliptic.curves = require('./elliptic/curves');
62324
62325 // Protocols
62326 elliptic.ec = require('./elliptic/ec');
62327 elliptic.eddsa = require('./elliptic/eddsa');
62328
62329 },{"../package.json":82,"./elliptic/curve":70,"./elliptic/curves":73,"./elliptic/ec":74,"./elliptic/eddsa":77,"./elliptic/utils":81,"brorand":18}],68:[function(require,module,exports){
62330 'use strict';
62331
62332 var BN = require('bn.js');
62333 var elliptic = require('../../elliptic');
62334 var utils = elliptic.utils;
62335 var getNAF = utils.getNAF;
62336 var getJSF = utils.getJSF;
62337 var assert = utils.assert;
62338
62339 function BaseCurve(type, conf) {
62340 this.type = type;
62341 this.p = new BN(conf.p, 16);
62342
62343 // Use Montgomery, when there is no fast reduction for the prime
62344 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
62345
62346 // Useful for many curves
62347 this.zero = new BN(0).toRed(this.red);
62348 this.one = new BN(1).toRed(this.red);
62349 this.two = new BN(2).toRed(this.red);
62350
62351 // Curve configuration, optional
62352 this.n = conf.n && new BN(conf.n, 16);
62353 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
62354
62355 // Temporary arrays
62356 this._wnafT1 = new Array(4);
62357 this._wnafT2 = new Array(4);
62358 this._wnafT3 = new Array(4);
62359 this._wnafT4 = new Array(4);
62360
62361 // Generalized Greg Maxwell's trick
62362 var adjustCount = this.n && this.p.div(this.n);
62363 if (!adjustCount || adjustCount.cmpn(100) > 0) {
62364 this.redN = null;
62365 } else {
62366 this._maxwellTrick = true;
62367 this.redN = this.n.toRed(this.red);
62368 }
62369 }
62370 module.exports = BaseCurve;
62371
62372 BaseCurve.prototype.point = function point() {
62373 throw new Error('Not implemented');
62374 };
62375
62376 BaseCurve.prototype.validate = function validate() {
62377 throw new Error('Not implemented');
62378 };
62379
62380 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
62381 assert(p.precomputed);
62382 var doubles = p._getDoubles();
62383
62384 var naf = getNAF(k, 1);
62385 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
62386 I /= 3;
62387
62388 // Translate into more windowed form
62389 var repr = [];
62390 for (var j = 0; j < naf.length; j += doubles.step) {
62391 var nafW = 0;
62392 for (var k = j + doubles.step - 1; k >= j; k--)
62393 nafW = (nafW << 1) + naf[k];
62394 repr.push(nafW);
62395 }
62396
62397 var a = this.jpoint(null, null, null);
62398 var b = this.jpoint(null, null, null);
62399 for (var i = I; i > 0; i--) {
62400 for (var j = 0; j < repr.length; j++) {
62401 var nafW = repr[j];
62402 if (nafW === i)
62403 b = b.mixedAdd(doubles.points[j]);
62404 else if (nafW === -i)
62405 b = b.mixedAdd(doubles.points[j].neg());
62406 }
62407 a = a.add(b);
62408 }
62409 return a.toP();
62410 };
62411
62412 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
62413 var w = 4;
62414
62415 // Precompute window
62416 var nafPoints = p._getNAFPoints(w);
62417 w = nafPoints.wnd;
62418 var wnd = nafPoints.points;
62419
62420 // Get NAF form
62421 var naf = getNAF(k, w);
62422
62423 // Add `this`*(N+1) for every w-NAF index
62424 var acc = this.jpoint(null, null, null);
62425 for (var i = naf.length - 1; i >= 0; i--) {
62426 // Count zeroes
62427 for (var k = 0; i >= 0 && naf[i] === 0; i--)
62428 k++;
62429 if (i >= 0)
62430 k++;
62431 acc = acc.dblp(k);
62432
62433 if (i < 0)
62434 break;
62435 var z = naf[i];
62436 assert(z !== 0);
62437 if (p.type === 'affine') {
62438 // J +- P
62439 if (z > 0)
62440 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
62441 else
62442 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
62443 } else {
62444 // J +- J
62445 if (z > 0)
62446 acc = acc.add(wnd[(z - 1) >> 1]);
62447 else
62448 acc = acc.add(wnd[(-z - 1) >> 1].neg());
62449 }
62450 }
62451 return p.type === 'affine' ? acc.toP() : acc;
62452 };
62453
62454 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
62455 points,
62456 coeffs,
62457 len,
62458 jacobianResult) {
62459 var wndWidth = this._wnafT1;
62460 var wnd = this._wnafT2;
62461 var naf = this._wnafT3;
62462
62463 // Fill all arrays
62464 var max = 0;
62465 for (var i = 0; i < len; i++) {
62466 var p = points[i];
62467 var nafPoints = p._getNAFPoints(defW);
62468 wndWidth[i] = nafPoints.wnd;
62469 wnd[i] = nafPoints.points;
62470 }
62471
62472 // Comb small window NAFs
62473 for (var i = len - 1; i >= 1; i -= 2) {
62474 var a = i - 1;
62475 var b = i;
62476 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
62477 naf[a] = getNAF(coeffs[a], wndWidth[a]);
62478 naf[b] = getNAF(coeffs[b], wndWidth[b]);
62479 max = Math.max(naf[a].length, max);
62480 max = Math.max(naf[b].length, max);
62481 continue;
62482 }
62483
62484 var comb = [
62485 points[a], /* 1 */
62486 null, /* 3 */
62487 null, /* 5 */
62488 points[b] /* 7 */
62489 ];
62490
62491 // Try to avoid Projective points, if possible
62492 if (points[a].y.cmp(points[b].y) === 0) {
62493 comb[1] = points[a].add(points[b]);
62494 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
62495 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
62496 comb[1] = points[a].toJ().mixedAdd(points[b]);
62497 comb[2] = points[a].add(points[b].neg());
62498 } else {
62499 comb[1] = points[a].toJ().mixedAdd(points[b]);
62500 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
62501 }
62502
62503 var index = [
62504 -3, /* -1 -1 */
62505 -1, /* -1 0 */
62506 -5, /* -1 1 */
62507 -7, /* 0 -1 */
62508 0, /* 0 0 */
62509 7, /* 0 1 */
62510 5, /* 1 -1 */
62511 1, /* 1 0 */
62512 3 /* 1 1 */
62513 ];
62514
62515 var jsf = getJSF(coeffs[a], coeffs[b]);
62516 max = Math.max(jsf[0].length, max);
62517 naf[a] = new Array(max);
62518 naf[b] = new Array(max);
62519 for (var j = 0; j < max; j++) {
62520 var ja = jsf[0][j] | 0;
62521 var jb = jsf[1][j] | 0;
62522
62523 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
62524 naf[b][j] = 0;
62525 wnd[a] = comb;
62526 }
62527 }
62528
62529 var acc = this.jpoint(null, null, null);
62530 var tmp = this._wnafT4;
62531 for (var i = max; i >= 0; i--) {
62532 var k = 0;
62533
62534 while (i >= 0) {
62535 var zero = true;
62536 for (var j = 0; j < len; j++) {
62537 tmp[j] = naf[j][i] | 0;
62538 if (tmp[j] !== 0)
62539 zero = false;
62540 }
62541 if (!zero)
62542 break;
62543 k++;
62544 i--;
62545 }
62546 if (i >= 0)
62547 k++;
62548 acc = acc.dblp(k);
62549 if (i < 0)
62550 break;
62551
62552 for (var j = 0; j < len; j++) {
62553 var z = tmp[j];
62554 var p;
62555 if (z === 0)
62556 continue;
62557 else if (z > 0)
62558 p = wnd[j][(z - 1) >> 1];
62559 else if (z < 0)
62560 p = wnd[j][(-z - 1) >> 1].neg();
62561
62562 if (p.type === 'affine')
62563 acc = acc.mixedAdd(p);
62564 else
62565 acc = acc.add(p);
62566 }
62567 }
62568 // Zeroify references
62569 for (var i = 0; i < len; i++)
62570 wnd[i] = null;
62571
62572 if (jacobianResult)
62573 return acc;
62574 else
62575 return acc.toP();
62576 };
62577
62578 function BasePoint(curve, type) {
62579 this.curve = curve;
62580 this.type = type;
62581 this.precomputed = null;
62582 }
62583 BaseCurve.BasePoint = BasePoint;
62584
62585 BasePoint.prototype.eq = function eq(/*other*/) {
62586 throw new Error('Not implemented');
62587 };
62588
62589 BasePoint.prototype.validate = function validate() {
62590 return this.curve.validate(this);
62591 };
62592
62593 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
62594 bytes = utils.toArray(bytes, enc);
62595
62596 var len = this.p.byteLength();
62597
62598 // uncompressed, hybrid-odd, hybrid-even
62599 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
62600 bytes.length - 1 === 2 * len) {
62601 if (bytes[0] === 0x06)
62602 assert(bytes[bytes.length - 1] % 2 === 0);
62603 else if (bytes[0] === 0x07)
62604 assert(bytes[bytes.length - 1] % 2 === 1);
62605
62606 var res = this.point(bytes.slice(1, 1 + len),
62607 bytes.slice(1 + len, 1 + 2 * len));
62608
62609 return res;
62610 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
62611 bytes.length - 1 === len) {
62612 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
62613 }
62614 throw new Error('Unknown point format');
62615 };
62616
62617 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
62618 return this.encode(enc, true);
62619 };
62620
62621 BasePoint.prototype._encode = function _encode(compact) {
62622 var len = this.curve.p.byteLength();
62623 var x = this.getX().toArray('be', len);
62624
62625 if (compact)
62626 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
62627
62628 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
62629 };
62630
62631 BasePoint.prototype.encode = function encode(enc, compact) {
62632 return utils.encode(this._encode(compact), enc);
62633 };
62634
62635 BasePoint.prototype.precompute = function precompute(power) {
62636 if (this.precomputed)
62637 return this;
62638
62639 var precomputed = {
62640 doubles: null,
62641 naf: null,
62642 beta: null
62643 };
62644 precomputed.naf = this._getNAFPoints(8);
62645 precomputed.doubles = this._getDoubles(4, power);
62646 precomputed.beta = this._getBeta();
62647 this.precomputed = precomputed;
62648
62649 return this;
62650 };
62651
62652 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
62653 if (!this.precomputed)
62654 return false;
62655
62656 var doubles = this.precomputed.doubles;
62657 if (!doubles)
62658 return false;
62659
62660 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
62661 };
62662
62663 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
62664 if (this.precomputed && this.precomputed.doubles)
62665 return this.precomputed.doubles;
62666
62667 var doubles = [ this ];
62668 var acc = this;
62669 for (var i = 0; i < power; i += step) {
62670 for (var j = 0; j < step; j++)
62671 acc = acc.dbl();
62672 doubles.push(acc);
62673 }
62674 return {
62675 step: step,
62676 points: doubles
62677 };
62678 };
62679
62680 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
62681 if (this.precomputed && this.precomputed.naf)
62682 return this.precomputed.naf;
62683
62684 var res = [ this ];
62685 var max = (1 << wnd) - 1;
62686 var dbl = max === 1 ? null : this.dbl();
62687 for (var i = 1; i < max; i++)
62688 res[i] = res[i - 1].add(dbl);
62689 return {
62690 wnd: wnd,
62691 points: res
62692 };
62693 };
62694
62695 BasePoint.prototype._getBeta = function _getBeta() {
62696 return null;
62697 };
62698
62699 BasePoint.prototype.dblp = function dblp(k) {
62700 var r = this;
62701 for (var i = 0; i < k; i++)
62702 r = r.dbl();
62703 return r;
62704 };
62705
62706 },{"../../elliptic":67,"bn.js":17}],69:[function(require,module,exports){
62707 'use strict';
62708
62709 var curve = require('../curve');
62710 var elliptic = require('../../elliptic');
62711 var BN = require('bn.js');
62712 var inherits = require('inherits');
62713 var Base = curve.base;
62714
62715 var assert = elliptic.utils.assert;
62716
62717 function EdwardsCurve(conf) {
62718 // NOTE: Important as we are creating point in Base.call()
62719 this.twisted = (conf.a | 0) !== 1;
62720 this.mOneA = this.twisted && (conf.a | 0) === -1;
62721 this.extended = this.mOneA;
62722
62723 Base.call(this, 'edwards', conf);
62724
62725 this.a = new BN(conf.a, 16).umod(this.red.m);
62726 this.a = this.a.toRed(this.red);
62727 this.c = new BN(conf.c, 16).toRed(this.red);
62728 this.c2 = this.c.redSqr();
62729 this.d = new BN(conf.d, 16).toRed(this.red);
62730 this.dd = this.d.redAdd(this.d);
62731
62732 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
62733 this.oneC = (conf.c | 0) === 1;
62734 }
62735 inherits(EdwardsCurve, Base);
62736 module.exports = EdwardsCurve;
62737
62738 EdwardsCurve.prototype._mulA = function _mulA(num) {
62739 if (this.mOneA)
62740 return num.redNeg();
62741 else
62742 return this.a.redMul(num);
62743 };
62744
62745 EdwardsCurve.prototype._mulC = function _mulC(num) {
62746 if (this.oneC)
62747 return num;
62748 else
62749 return this.c.redMul(num);
62750 };
62751
62752 // Just for compatibility with Short curve
62753 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
62754 return this.point(x, y, z, t);
62755 };
62756
62757 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
62758 x = new BN(x, 16);
62759 if (!x.red)
62760 x = x.toRed(this.red);
62761
62762 var x2 = x.redSqr();
62763 var rhs = this.c2.redSub(this.a.redMul(x2));
62764 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
62765
62766 var y2 = rhs.redMul(lhs.redInvm());
62767 var y = y2.redSqrt();
62768 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
62769 throw new Error('invalid point');
62770
62771 var isOdd = y.fromRed().isOdd();
62772 if (odd && !isOdd || !odd && isOdd)
62773 y = y.redNeg();
62774
62775 return this.point(x, y);
62776 };
62777
62778 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
62779 y = new BN(y, 16);
62780 if (!y.red)
62781 y = y.toRed(this.red);
62782
62783 // x^2 = (y^2 - 1) / (d y^2 + 1)
62784 var y2 = y.redSqr();
62785 var lhs = y2.redSub(this.one);
62786 var rhs = y2.redMul(this.d).redAdd(this.one);
62787 var x2 = lhs.redMul(rhs.redInvm());
62788
62789 if (x2.cmp(this.zero) === 0) {
62790 if (odd)
62791 throw new Error('invalid point');
62792 else
62793 return this.point(this.zero, y);
62794 }
62795
62796 var x = x2.redSqrt();
62797 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
62798 throw new Error('invalid point');
62799
62800 if (x.isOdd() !== odd)
62801 x = x.redNeg();
62802
62803 return this.point(x, y);
62804 };
62805
62806 EdwardsCurve.prototype.validate = function validate(point) {
62807 if (point.isInfinity())
62808 return true;
62809
62810 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
62811 point.normalize();
62812
62813 var x2 = point.x.redSqr();
62814 var y2 = point.y.redSqr();
62815 var lhs = x2.redMul(this.a).redAdd(y2);
62816 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
62817
62818 return lhs.cmp(rhs) === 0;
62819 };
62820
62821 function Point(curve, x, y, z, t) {
62822 Base.BasePoint.call(this, curve, 'projective');
62823 if (x === null && y === null && z === null) {
62824 this.x = this.curve.zero;
62825 this.y = this.curve.one;
62826 this.z = this.curve.one;
62827 this.t = this.curve.zero;
62828 this.zOne = true;
62829 } else {
62830 this.x = new BN(x, 16);
62831 this.y = new BN(y, 16);
62832 this.z = z ? new BN(z, 16) : this.curve.one;
62833 this.t = t && new BN(t, 16);
62834 if (!this.x.red)
62835 this.x = this.x.toRed(this.curve.red);
62836 if (!this.y.red)
62837 this.y = this.y.toRed(this.curve.red);
62838 if (!this.z.red)
62839 this.z = this.z.toRed(this.curve.red);
62840 if (this.t && !this.t.red)
62841 this.t = this.t.toRed(this.curve.red);
62842 this.zOne = this.z === this.curve.one;
62843
62844 // Use extended coordinates
62845 if (this.curve.extended && !this.t) {
62846 this.t = this.x.redMul(this.y);
62847 if (!this.zOne)
62848 this.t = this.t.redMul(this.z.redInvm());
62849 }
62850 }
62851 }
62852 inherits(Point, Base.BasePoint);
62853
62854 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
62855 return Point.fromJSON(this, obj);
62856 };
62857
62858 EdwardsCurve.prototype.point = function point(x, y, z, t) {
62859 return new Point(this, x, y, z, t);
62860 };
62861
62862 Point.fromJSON = function fromJSON(curve, obj) {
62863 return new Point(curve, obj[0], obj[1], obj[2]);
62864 };
62865
62866 Point.prototype.inspect = function inspect() {
62867 if (this.isInfinity())
62868 return '<EC Point Infinity>';
62869 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
62870 ' y: ' + this.y.fromRed().toString(16, 2) +
62871 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
62872 };
62873
62874 Point.prototype.isInfinity = function isInfinity() {
62875 // XXX This code assumes that zero is always zero in red
62876 return this.x.cmpn(0) === 0 &&
62877 this.y.cmp(this.z) === 0;
62878 };
62879
62880 Point.prototype._extDbl = function _extDbl() {
62881 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
62882 // #doubling-dbl-2008-hwcd
62883 // 4M + 4S
62884
62885 // A = X1^2
62886 var a = this.x.redSqr();
62887 // B = Y1^2
62888 var b = this.y.redSqr();
62889 // C = 2 * Z1^2
62890 var c = this.z.redSqr();
62891 c = c.redIAdd(c);
62892 // D = a * A
62893 var d = this.curve._mulA(a);
62894 // E = (X1 + Y1)^2 - A - B
62895 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
62896 // G = D + B
62897 var g = d.redAdd(b);
62898 // F = G - C
62899 var f = g.redSub(c);
62900 // H = D - B
62901 var h = d.redSub(b);
62902 // X3 = E * F
62903 var nx = e.redMul(f);
62904 // Y3 = G * H
62905 var ny = g.redMul(h);
62906 // T3 = E * H
62907 var nt = e.redMul(h);
62908 // Z3 = F * G
62909 var nz = f.redMul(g);
62910 return this.curve.point(nx, ny, nz, nt);
62911 };
62912
62913 Point.prototype._projDbl = function _projDbl() {
62914 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
62915 // #doubling-dbl-2008-bbjlp
62916 // #doubling-dbl-2007-bl
62917 // and others
62918 // Generally 3M + 4S or 2M + 4S
62919
62920 // B = (X1 + Y1)^2
62921 var b = this.x.redAdd(this.y).redSqr();
62922 // C = X1^2
62923 var c = this.x.redSqr();
62924 // D = Y1^2
62925 var d = this.y.redSqr();
62926
62927 var nx;
62928 var ny;
62929 var nz;
62930 if (this.curve.twisted) {
62931 // E = a * C
62932 var e = this.curve._mulA(c);
62933 // F = E + D
62934 var f = e.redAdd(d);
62935 if (this.zOne) {
62936 // X3 = (B - C - D) * (F - 2)
62937 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
62938 // Y3 = F * (E - D)
62939 ny = f.redMul(e.redSub(d));
62940 // Z3 = F^2 - 2 * F
62941 nz = f.redSqr().redSub(f).redSub(f);
62942 } else {
62943 // H = Z1^2
62944 var h = this.z.redSqr();
62945 // J = F - 2 * H
62946 var j = f.redSub(h).redISub(h);
62947 // X3 = (B-C-D)*J
62948 nx = b.redSub(c).redISub(d).redMul(j);
62949 // Y3 = F * (E - D)
62950 ny = f.redMul(e.redSub(d));
62951 // Z3 = F * J
62952 nz = f.redMul(j);
62953 }
62954 } else {
62955 // E = C + D
62956 var e = c.redAdd(d);
62957 // H = (c * Z1)^2
62958 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
62959 // J = E - 2 * H
62960 var j = e.redSub(h).redSub(h);
62961 // X3 = c * (B - E) * J
62962 nx = this.curve._mulC(b.redISub(e)).redMul(j);
62963 // Y3 = c * E * (C - D)
62964 ny = this.curve._mulC(e).redMul(c.redISub(d));
62965 // Z3 = E * J
62966 nz = e.redMul(j);
62967 }
62968 return this.curve.point(nx, ny, nz);
62969 };
62970
62971 Point.prototype.dbl = function dbl() {
62972 if (this.isInfinity())
62973 return this;
62974
62975 // Double in extended coordinates
62976 if (this.curve.extended)
62977 return this._extDbl();
62978 else
62979 return this._projDbl();
62980 };
62981
62982 Point.prototype._extAdd = function _extAdd(p) {
62983 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
62984 // #addition-add-2008-hwcd-3
62985 // 8M
62986
62987 // A = (Y1 - X1) * (Y2 - X2)
62988 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
62989 // B = (Y1 + X1) * (Y2 + X2)
62990 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
62991 // C = T1 * k * T2
62992 var c = this.t.redMul(this.curve.dd).redMul(p.t);
62993 // D = Z1 * 2 * Z2
62994 var d = this.z.redMul(p.z.redAdd(p.z));
62995 // E = B - A
62996 var e = b.redSub(a);
62997 // F = D - C
62998 var f = d.redSub(c);
62999 // G = D + C
63000 var g = d.redAdd(c);
63001 // H = B + A
63002 var h = b.redAdd(a);
63003 // X3 = E * F
63004 var nx = e.redMul(f);
63005 // Y3 = G * H
63006 var ny = g.redMul(h);
63007 // T3 = E * H
63008 var nt = e.redMul(h);
63009 // Z3 = F * G
63010 var nz = f.redMul(g);
63011 return this.curve.point(nx, ny, nz, nt);
63012 };
63013
63014 Point.prototype._projAdd = function _projAdd(p) {
63015 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
63016 // #addition-add-2008-bbjlp
63017 // #addition-add-2007-bl
63018 // 10M + 1S
63019
63020 // A = Z1 * Z2
63021 var a = this.z.redMul(p.z);
63022 // B = A^2
63023 var b = a.redSqr();
63024 // C = X1 * X2
63025 var c = this.x.redMul(p.x);
63026 // D = Y1 * Y2
63027 var d = this.y.redMul(p.y);
63028 // E = d * C * D
63029 var e = this.curve.d.redMul(c).redMul(d);
63030 // F = B - E
63031 var f = b.redSub(e);
63032 // G = B + E
63033 var g = b.redAdd(e);
63034 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
63035 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
63036 var nx = a.redMul(f).redMul(tmp);
63037 var ny;
63038 var nz;
63039 if (this.curve.twisted) {
63040 // Y3 = A * G * (D - a * C)
63041 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
63042 // Z3 = F * G
63043 nz = f.redMul(g);
63044 } else {
63045 // Y3 = A * G * (D - C)
63046 ny = a.redMul(g).redMul(d.redSub(c));
63047 // Z3 = c * F * G
63048 nz = this.curve._mulC(f).redMul(g);
63049 }
63050 return this.curve.point(nx, ny, nz);
63051 };
63052
63053 Point.prototype.add = function add(p) {
63054 if (this.isInfinity())
63055 return p;
63056 if (p.isInfinity())
63057 return this;
63058
63059 if (this.curve.extended)
63060 return this._extAdd(p);
63061 else
63062 return this._projAdd(p);
63063 };
63064
63065 Point.prototype.mul = function mul(k) {
63066 if (this._hasDoubles(k))
63067 return this.curve._fixedNafMul(this, k);
63068 else
63069 return this.curve._wnafMul(this, k);
63070 };
63071
63072 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
63073 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
63074 };
63075
63076 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
63077 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
63078 };
63079
63080 Point.prototype.normalize = function normalize() {
63081 if (this.zOne)
63082 return this;
63083
63084 // Normalize coordinates
63085 var zi = this.z.redInvm();
63086 this.x = this.x.redMul(zi);
63087 this.y = this.y.redMul(zi);
63088 if (this.t)
63089 this.t = this.t.redMul(zi);
63090 this.z = this.curve.one;
63091 this.zOne = true;
63092 return this;
63093 };
63094
63095 Point.prototype.neg = function neg() {
63096 return this.curve.point(this.x.redNeg(),
63097 this.y,
63098 this.z,
63099 this.t && this.t.redNeg());
63100 };
63101
63102 Point.prototype.getX = function getX() {
63103 this.normalize();
63104 return this.x.fromRed();
63105 };
63106
63107 Point.prototype.getY = function getY() {
63108 this.normalize();
63109 return this.y.fromRed();
63110 };
63111
63112 Point.prototype.eq = function eq(other) {
63113 return this === other ||
63114 this.getX().cmp(other.getX()) === 0 &&
63115 this.getY().cmp(other.getY()) === 0;
63116 };
63117
63118 Point.prototype.eqXToP = function eqXToP(x) {
63119 var rx = x.toRed(this.curve.red).redMul(this.z);
63120 if (this.x.cmp(rx) === 0)
63121 return true;
63122
63123 var xc = x.clone();
63124 var t = this.curve.redN.redMul(this.z);
63125 for (;;) {
63126 xc.iadd(this.curve.n);
63127 if (xc.cmp(this.curve.p) >= 0)
63128 return false;
63129
63130 rx.redIAdd(t);
63131 if (this.x.cmp(rx) === 0)
63132 return true;
63133 }
63134 return false;
63135 };
63136
63137 // Compatibility with BaseCurve
63138 Point.prototype.toP = Point.prototype.normalize;
63139 Point.prototype.mixedAdd = Point.prototype.add;
63140
63141 },{"../../elliptic":67,"../curve":70,"bn.js":17,"inherits":95}],70:[function(require,module,exports){
63142 'use strict';
63143
63144 var curve = exports;
63145
63146 curve.base = require('./base');
63147 curve.short = require('./short');
63148 curve.mont = require('./mont');
63149 curve.edwards = require('./edwards');
63150
63151 },{"./base":68,"./edwards":69,"./mont":71,"./short":72}],71:[function(require,module,exports){
63152 'use strict';
63153
63154 var curve = require('../curve');
63155 var BN = require('bn.js');
63156 var inherits = require('inherits');
63157 var Base = curve.base;
63158
63159 var elliptic = require('../../elliptic');
63160 var utils = elliptic.utils;
63161
63162 function MontCurve(conf) {
63163 Base.call(this, 'mont', conf);
63164
63165 this.a = new BN(conf.a, 16).toRed(this.red);
63166 this.b = new BN(conf.b, 16).toRed(this.red);
63167 this.i4 = new BN(4).toRed(this.red).redInvm();
63168 this.two = new BN(2).toRed(this.red);
63169 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
63170 }
63171 inherits(MontCurve, Base);
63172 module.exports = MontCurve;
63173
63174 MontCurve.prototype.validate = function validate(point) {
63175 var x = point.normalize().x;
63176 var x2 = x.redSqr();
63177 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
63178 var y = rhs.redSqrt();
63179
63180 return y.redSqr().cmp(rhs) === 0;
63181 };
63182
63183 function Point(curve, x, z) {
63184 Base.BasePoint.call(this, curve, 'projective');
63185 if (x === null && z === null) {
63186 this.x = this.curve.one;
63187 this.z = this.curve.zero;
63188 } else {
63189 this.x = new BN(x, 16);
63190 this.z = new BN(z, 16);
63191 if (!this.x.red)
63192 this.x = this.x.toRed(this.curve.red);
63193 if (!this.z.red)
63194 this.z = this.z.toRed(this.curve.red);
63195 }
63196 }
63197 inherits(Point, Base.BasePoint);
63198
63199 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
63200 return this.point(utils.toArray(bytes, enc), 1);
63201 };
63202
63203 MontCurve.prototype.point = function point(x, z) {
63204 return new Point(this, x, z);
63205 };
63206
63207 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
63208 return Point.fromJSON(this, obj);
63209 };
63210
63211 Point.prototype.precompute = function precompute() {
63212 // No-op
63213 };
63214
63215 Point.prototype._encode = function _encode() {
63216 return this.getX().toArray('be', this.curve.p.byteLength());
63217 };
63218
63219 Point.fromJSON = function fromJSON(curve, obj) {
63220 return new Point(curve, obj[0], obj[1] || curve.one);
63221 };
63222
63223 Point.prototype.inspect = function inspect() {
63224 if (this.isInfinity())
63225 return '<EC Point Infinity>';
63226 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
63227 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
63228 };
63229
63230 Point.prototype.isInfinity = function isInfinity() {
63231 // XXX This code assumes that zero is always zero in red
63232 return this.z.cmpn(0) === 0;
63233 };
63234
63235 Point.prototype.dbl = function dbl() {
63236 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
63237 // 2M + 2S + 4A
63238
63239 // A = X1 + Z1
63240 var a = this.x.redAdd(this.z);
63241 // AA = A^2
63242 var aa = a.redSqr();
63243 // B = X1 - Z1
63244 var b = this.x.redSub(this.z);
63245 // BB = B^2
63246 var bb = b.redSqr();
63247 // C = AA - BB
63248 var c = aa.redSub(bb);
63249 // X3 = AA * BB
63250 var nx = aa.redMul(bb);
63251 // Z3 = C * (BB + A24 * C)
63252 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
63253 return this.curve.point(nx, nz);
63254 };
63255
63256 Point.prototype.add = function add() {
63257 throw new Error('Not supported on Montgomery curve');
63258 };
63259
63260 Point.prototype.diffAdd = function diffAdd(p, diff) {
63261 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
63262 // 4M + 2S + 6A
63263
63264 // A = X2 + Z2
63265 var a = this.x.redAdd(this.z);
63266 // B = X2 - Z2
63267 var b = this.x.redSub(this.z);
63268 // C = X3 + Z3
63269 var c = p.x.redAdd(p.z);
63270 // D = X3 - Z3
63271 var d = p.x.redSub(p.z);
63272 // DA = D * A
63273 var da = d.redMul(a);
63274 // CB = C * B
63275 var cb = c.redMul(b);
63276 // X5 = Z1 * (DA + CB)^2
63277 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
63278 // Z5 = X1 * (DA - CB)^2
63279 var nz = diff.x.redMul(da.redISub(cb).redSqr());
63280 return this.curve.point(nx, nz);
63281 };
63282
63283 Point.prototype.mul = function mul(k) {
63284 var t = k.clone();
63285 var a = this; // (N / 2) * Q + Q
63286 var b = this.curve.point(null, null); // (N / 2) * Q
63287 var c = this; // Q
63288
63289 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
63290 bits.push(t.andln(1));
63291
63292 for (var i = bits.length - 1; i >= 0; i--) {
63293 if (bits[i] === 0) {
63294 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
63295 a = a.diffAdd(b, c);
63296 // N * Q = 2 * ((N / 2) * Q + Q))
63297 b = b.dbl();
63298 } else {
63299 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
63300 b = a.diffAdd(b, c);
63301 // N * Q + Q = 2 * ((N / 2) * Q + Q)
63302 a = a.dbl();
63303 }
63304 }
63305 return b;
63306 };
63307
63308 Point.prototype.mulAdd = function mulAdd() {
63309 throw new Error('Not supported on Montgomery curve');
63310 };
63311
63312 Point.prototype.jumlAdd = function jumlAdd() {
63313 throw new Error('Not supported on Montgomery curve');
63314 };
63315
63316 Point.prototype.eq = function eq(other) {
63317 return this.getX().cmp(other.getX()) === 0;
63318 };
63319
63320 Point.prototype.normalize = function normalize() {
63321 this.x = this.x.redMul(this.z.redInvm());
63322 this.z = this.curve.one;
63323 return this;
63324 };
63325
63326 Point.prototype.getX = function getX() {
63327 // Normalize coordinates
63328 this.normalize();
63329
63330 return this.x.fromRed();
63331 };
63332
63333 },{"../../elliptic":67,"../curve":70,"bn.js":17,"inherits":95}],72:[function(require,module,exports){
63334 'use strict';
63335
63336 var curve = require('../curve');
63337 var elliptic = require('../../elliptic');
63338 var BN = require('bn.js');
63339 var inherits = require('inherits');
63340 var Base = curve.base;
63341
63342 var assert = elliptic.utils.assert;
63343
63344 function ShortCurve(conf) {
63345 Base.call(this, 'short', conf);
63346
63347 this.a = new BN(conf.a, 16).toRed(this.red);
63348 this.b = new BN(conf.b, 16).toRed(this.red);
63349 this.tinv = this.two.redInvm();
63350
63351 this.zeroA = this.a.fromRed().cmpn(0) === 0;
63352 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
63353
63354 // If the curve is endomorphic, precalculate beta and lambda
63355 this.endo = this._getEndomorphism(conf);
63356 this._endoWnafT1 = new Array(4);
63357 this._endoWnafT2 = new Array(4);
63358 }
63359 inherits(ShortCurve, Base);
63360 module.exports = ShortCurve;
63361
63362 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
63363 // No efficient endomorphism
63364 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
63365 return;
63366
63367 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
63368 var beta;
63369 var lambda;
63370 if (conf.beta) {
63371 beta = new BN(conf.beta, 16).toRed(this.red);
63372 } else {
63373 var betas = this._getEndoRoots(this.p);
63374 // Choose the smallest beta
63375 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
63376 beta = beta.toRed(this.red);
63377 }
63378 if (conf.lambda) {
63379 lambda = new BN(conf.lambda, 16);
63380 } else {
63381 // Choose the lambda that is matching selected beta
63382 var lambdas = this._getEndoRoots(this.n);
63383 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
63384 lambda = lambdas[0];
63385 } else {
63386 lambda = lambdas[1];
63387 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
63388 }
63389 }
63390
63391 // Get basis vectors, used for balanced length-two representation
63392 var basis;
63393 if (conf.basis) {
63394 basis = conf.basis.map(function(vec) {
63395 return {
63396 a: new BN(vec.a, 16),
63397 b: new BN(vec.b, 16)
63398 };
63399 });
63400 } else {
63401 basis = this._getEndoBasis(lambda);
63402 }
63403
63404 return {
63405 beta: beta,
63406 lambda: lambda,
63407 basis: basis
63408 };
63409 };
63410
63411 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
63412 // Find roots of for x^2 + x + 1 in F
63413 // Root = (-1 +- Sqrt(-3)) / 2
63414 //
63415 var red = num === this.p ? this.red : BN.mont(num);
63416 var tinv = new BN(2).toRed(red).redInvm();
63417 var ntinv = tinv.redNeg();
63418
63419 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
63420
63421 var l1 = ntinv.redAdd(s).fromRed();
63422 var l2 = ntinv.redSub(s).fromRed();
63423 return [ l1, l2 ];
63424 };
63425
63426 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
63427 // aprxSqrt >= sqrt(this.n)
63428 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
63429
63430 // 3.74
63431 // Run EGCD, until r(L + 1) < aprxSqrt
63432 var u = lambda;
63433 var v = this.n.clone();
63434 var x1 = new BN(1);
63435 var y1 = new BN(0);
63436 var x2 = new BN(0);
63437 var y2 = new BN(1);
63438
63439 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
63440 var a0;
63441 var b0;
63442 // First vector
63443 var a1;
63444 var b1;
63445 // Second vector
63446 var a2;
63447 var b2;
63448
63449 var prevR;
63450 var i = 0;
63451 var r;
63452 var x;
63453 while (u.cmpn(0) !== 0) {
63454 var q = v.div(u);
63455 r = v.sub(q.mul(u));
63456 x = x2.sub(q.mul(x1));
63457 var y = y2.sub(q.mul(y1));
63458
63459 if (!a1 && r.cmp(aprxSqrt) < 0) {
63460 a0 = prevR.neg();
63461 b0 = x1;
63462 a1 = r.neg();
63463 b1 = x;
63464 } else if (a1 && ++i === 2) {
63465 break;
63466 }
63467 prevR = r;
63468
63469 v = u;
63470 u = r;
63471 x2 = x1;
63472 x1 = x;
63473 y2 = y1;
63474 y1 = y;
63475 }
63476 a2 = r.neg();
63477 b2 = x;
63478
63479 var len1 = a1.sqr().add(b1.sqr());
63480 var len2 = a2.sqr().add(b2.sqr());
63481 if (len2.cmp(len1) >= 0) {
63482 a2 = a0;
63483 b2 = b0;
63484 }
63485
63486 // Normalize signs
63487 if (a1.negative) {
63488 a1 = a1.neg();
63489 b1 = b1.neg();
63490 }
63491 if (a2.negative) {
63492 a2 = a2.neg();
63493 b2 = b2.neg();
63494 }
63495
63496 return [
63497 { a: a1, b: b1 },
63498 { a: a2, b: b2 }
63499 ];
63500 };
63501
63502 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
63503 var basis = this.endo.basis;
63504 var v1 = basis[0];
63505 var v2 = basis[1];
63506
63507 var c1 = v2.b.mul(k).divRound(this.n);
63508 var c2 = v1.b.neg().mul(k).divRound(this.n);
63509
63510 var p1 = c1.mul(v1.a);
63511 var p2 = c2.mul(v2.a);
63512 var q1 = c1.mul(v1.b);
63513 var q2 = c2.mul(v2.b);
63514
63515 // Calculate answer
63516 var k1 = k.sub(p1).sub(p2);
63517 var k2 = q1.add(q2).neg();
63518 return { k1: k1, k2: k2 };
63519 };
63520
63521 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
63522 x = new BN(x, 16);
63523 if (!x.red)
63524 x = x.toRed(this.red);
63525
63526 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
63527 var y = y2.redSqrt();
63528 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
63529 throw new Error('invalid point');
63530
63531 // XXX Is there any way to tell if the number is odd without converting it
63532 // to non-red form?
63533 var isOdd = y.fromRed().isOdd();
63534 if (odd && !isOdd || !odd && isOdd)
63535 y = y.redNeg();
63536
63537 return this.point(x, y);
63538 };
63539
63540 ShortCurve.prototype.validate = function validate(point) {
63541 if (point.inf)
63542 return true;
63543
63544 var x = point.x;
63545 var y = point.y;
63546
63547 var ax = this.a.redMul(x);
63548 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
63549 return y.redSqr().redISub(rhs).cmpn(0) === 0;
63550 };
63551
63552 ShortCurve.prototype._endoWnafMulAdd =
63553 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
63554 var npoints = this._endoWnafT1;
63555 var ncoeffs = this._endoWnafT2;
63556 for (var i = 0; i < points.length; i++) {
63557 var split = this._endoSplit(coeffs[i]);
63558 var p = points[i];
63559 var beta = p._getBeta();
63560
63561 if (split.k1.negative) {
63562 split.k1.ineg();
63563 p = p.neg(true);
63564 }
63565 if (split.k2.negative) {
63566 split.k2.ineg();
63567 beta = beta.neg(true);
63568 }
63569
63570 npoints[i * 2] = p;
63571 npoints[i * 2 + 1] = beta;
63572 ncoeffs[i * 2] = split.k1;
63573 ncoeffs[i * 2 + 1] = split.k2;
63574 }
63575 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
63576
63577 // Clean-up references to points and coefficients
63578 for (var j = 0; j < i * 2; j++) {
63579 npoints[j] = null;
63580 ncoeffs[j] = null;
63581 }
63582 return res;
63583 };
63584
63585 function Point(curve, x, y, isRed) {
63586 Base.BasePoint.call(this, curve, 'affine');
63587 if (x === null && y === null) {
63588 this.x = null;
63589 this.y = null;
63590 this.inf = true;
63591 } else {
63592 this.x = new BN(x, 16);
63593 this.y = new BN(y, 16);
63594 // Force redgomery representation when loading from JSON
63595 if (isRed) {
63596 this.x.forceRed(this.curve.red);
63597 this.y.forceRed(this.curve.red);
63598 }
63599 if (!this.x.red)
63600 this.x = this.x.toRed(this.curve.red);
63601 if (!this.y.red)
63602 this.y = this.y.toRed(this.curve.red);
63603 this.inf = false;
63604 }
63605 }
63606 inherits(Point, Base.BasePoint);
63607
63608 ShortCurve.prototype.point = function point(x, y, isRed) {
63609 return new Point(this, x, y, isRed);
63610 };
63611
63612 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
63613 return Point.fromJSON(this, obj, red);
63614 };
63615
63616 Point.prototype._getBeta = function _getBeta() {
63617 if (!this.curve.endo)
63618 return;
63619
63620 var pre = this.precomputed;
63621 if (pre && pre.beta)
63622 return pre.beta;
63623
63624 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
63625 if (pre) {
63626 var curve = this.curve;
63627 var endoMul = function(p) {
63628 return curve.point(p.x.redMul(curve.endo.beta), p.y);
63629 };
63630 pre.beta = beta;
63631 beta.precomputed = {
63632 beta: null,
63633 naf: pre.naf && {
63634 wnd: pre.naf.wnd,
63635 points: pre.naf.points.map(endoMul)
63636 },
63637 doubles: pre.doubles && {
63638 step: pre.doubles.step,
63639 points: pre.doubles.points.map(endoMul)
63640 }
63641 };
63642 }
63643 return beta;
63644 };
63645
63646 Point.prototype.toJSON = function toJSON() {
63647 if (!this.precomputed)
63648 return [ this.x, this.y ];
63649
63650 return [ this.x, this.y, this.precomputed && {
63651 doubles: this.precomputed.doubles && {
63652 step: this.precomputed.doubles.step,
63653 points: this.precomputed.doubles.points.slice(1)
63654 },
63655 naf: this.precomputed.naf && {
63656 wnd: this.precomputed.naf.wnd,
63657 points: this.precomputed.naf.points.slice(1)
63658 }
63659 } ];
63660 };
63661
63662 Point.fromJSON = function fromJSON(curve, obj, red) {
63663 if (typeof obj === 'string')
63664 obj = JSON.parse(obj);
63665 var res = curve.point(obj[0], obj[1], red);
63666 if (!obj[2])
63667 return res;
63668
63669 function obj2point(obj) {
63670 return curve.point(obj[0], obj[1], red);
63671 }
63672
63673 var pre = obj[2];
63674 res.precomputed = {
63675 beta: null,
63676 doubles: pre.doubles && {
63677 step: pre.doubles.step,
63678 points: [ res ].concat(pre.doubles.points.map(obj2point))
63679 },
63680 naf: pre.naf && {
63681 wnd: pre.naf.wnd,
63682 points: [ res ].concat(pre.naf.points.map(obj2point))
63683 }
63684 };
63685 return res;
63686 };
63687
63688 Point.prototype.inspect = function inspect() {
63689 if (this.isInfinity())
63690 return '<EC Point Infinity>';
63691 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
63692 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
63693 };
63694
63695 Point.prototype.isInfinity = function isInfinity() {
63696 return this.inf;
63697 };
63698
63699 Point.prototype.add = function add(p) {
63700 // O + P = P
63701 if (this.inf)
63702 return p;
63703
63704 // P + O = P
63705 if (p.inf)
63706 return this;
63707
63708 // P + P = 2P
63709 if (this.eq(p))
63710 return this.dbl();
63711
63712 // P + (-P) = O
63713 if (this.neg().eq(p))
63714 return this.curve.point(null, null);
63715
63716 // P + Q = O
63717 if (this.x.cmp(p.x) === 0)
63718 return this.curve.point(null, null);
63719
63720 var c = this.y.redSub(p.y);
63721 if (c.cmpn(0) !== 0)
63722 c = c.redMul(this.x.redSub(p.x).redInvm());
63723 var nx = c.redSqr().redISub(this.x).redISub(p.x);
63724 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
63725 return this.curve.point(nx, ny);
63726 };
63727
63728 Point.prototype.dbl = function dbl() {
63729 if (this.inf)
63730 return this;
63731
63732 // 2P = O
63733 var ys1 = this.y.redAdd(this.y);
63734 if (ys1.cmpn(0) === 0)
63735 return this.curve.point(null, null);
63736
63737 var a = this.curve.a;
63738
63739 var x2 = this.x.redSqr();
63740 var dyinv = ys1.redInvm();
63741 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
63742
63743 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
63744 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
63745 return this.curve.point(nx, ny);
63746 };
63747
63748 Point.prototype.getX = function getX() {
63749 return this.x.fromRed();
63750 };
63751
63752 Point.prototype.getY = function getY() {
63753 return this.y.fromRed();
63754 };
63755
63756 Point.prototype.mul = function mul(k) {
63757 k = new BN(k, 16);
63758
63759 if (this._hasDoubles(k))
63760 return this.curve._fixedNafMul(this, k);
63761 else if (this.curve.endo)
63762 return this.curve._endoWnafMulAdd([ this ], [ k ]);
63763 else
63764 return this.curve._wnafMul(this, k);
63765 };
63766
63767 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
63768 var points = [ this, p2 ];
63769 var coeffs = [ k1, k2 ];
63770 if (this.curve.endo)
63771 return this.curve._endoWnafMulAdd(points, coeffs);
63772 else
63773 return this.curve._wnafMulAdd(1, points, coeffs, 2);
63774 };
63775
63776 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
63777 var points = [ this, p2 ];
63778 var coeffs = [ k1, k2 ];
63779 if (this.curve.endo)
63780 return this.curve._endoWnafMulAdd(points, coeffs, true);
63781 else
63782 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
63783 };
63784
63785 Point.prototype.eq = function eq(p) {
63786 return this === p ||
63787 this.inf === p.inf &&
63788 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
63789 };
63790
63791 Point.prototype.neg = function neg(_precompute) {
63792 if (this.inf)
63793 return this;
63794
63795 var res = this.curve.point(this.x, this.y.redNeg());
63796 if (_precompute && this.precomputed) {
63797 var pre = this.precomputed;
63798 var negate = function(p) {
63799 return p.neg();
63800 };
63801 res.precomputed = {
63802 naf: pre.naf && {
63803 wnd: pre.naf.wnd,
63804 points: pre.naf.points.map(negate)
63805 },
63806 doubles: pre.doubles && {
63807 step: pre.doubles.step,
63808 points: pre.doubles.points.map(negate)
63809 }
63810 };
63811 }
63812 return res;
63813 };
63814
63815 Point.prototype.toJ = function toJ() {
63816 if (this.inf)
63817 return this.curve.jpoint(null, null, null);
63818
63819 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
63820 return res;
63821 };
63822
63823 function JPoint(curve, x, y, z) {
63824 Base.BasePoint.call(this, curve, 'jacobian');
63825 if (x === null && y === null && z === null) {
63826 this.x = this.curve.one;
63827 this.y = this.curve.one;
63828 this.z = new BN(0);
63829 } else {
63830 this.x = new BN(x, 16);
63831 this.y = new BN(y, 16);
63832 this.z = new BN(z, 16);
63833 }
63834 if (!this.x.red)
63835 this.x = this.x.toRed(this.curve.red);
63836 if (!this.y.red)
63837 this.y = this.y.toRed(this.curve.red);
63838 if (!this.z.red)
63839 this.z = this.z.toRed(this.curve.red);
63840
63841 this.zOne = this.z === this.curve.one;
63842 }
63843 inherits(JPoint, Base.BasePoint);
63844
63845 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
63846 return new JPoint(this, x, y, z);
63847 };
63848
63849 JPoint.prototype.toP = function toP() {
63850 if (this.isInfinity())
63851 return this.curve.point(null, null);
63852
63853 var zinv = this.z.redInvm();
63854 var zinv2 = zinv.redSqr();
63855 var ax = this.x.redMul(zinv2);
63856 var ay = this.y.redMul(zinv2).redMul(zinv);
63857
63858 return this.curve.point(ax, ay);
63859 };
63860
63861 JPoint.prototype.neg = function neg() {
63862 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
63863 };
63864
63865 JPoint.prototype.add = function add(p) {
63866 // O + P = P
63867 if (this.isInfinity())
63868 return p;
63869
63870 // P + O = P
63871 if (p.isInfinity())
63872 return this;
63873
63874 // 12M + 4S + 7A
63875 var pz2 = p.z.redSqr();
63876 var z2 = this.z.redSqr();
63877 var u1 = this.x.redMul(pz2);
63878 var u2 = p.x.redMul(z2);
63879 var s1 = this.y.redMul(pz2.redMul(p.z));
63880 var s2 = p.y.redMul(z2.redMul(this.z));
63881
63882 var h = u1.redSub(u2);
63883 var r = s1.redSub(s2);
63884 if (h.cmpn(0) === 0) {
63885 if (r.cmpn(0) !== 0)
63886 return this.curve.jpoint(null, null, null);
63887 else
63888 return this.dbl();
63889 }
63890
63891 var h2 = h.redSqr();
63892 var h3 = h2.redMul(h);
63893 var v = u1.redMul(h2);
63894
63895 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
63896 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
63897 var nz = this.z.redMul(p.z).redMul(h);
63898
63899 return this.curve.jpoint(nx, ny, nz);
63900 };
63901
63902 JPoint.prototype.mixedAdd = function mixedAdd(p) {
63903 // O + P = P
63904 if (this.isInfinity())
63905 return p.toJ();
63906
63907 // P + O = P
63908 if (p.isInfinity())
63909 return this;
63910
63911 // 8M + 3S + 7A
63912 var z2 = this.z.redSqr();
63913 var u1 = this.x;
63914 var u2 = p.x.redMul(z2);
63915 var s1 = this.y;
63916 var s2 = p.y.redMul(z2).redMul(this.z);
63917
63918 var h = u1.redSub(u2);
63919 var r = s1.redSub(s2);
63920 if (h.cmpn(0) === 0) {
63921 if (r.cmpn(0) !== 0)
63922 return this.curve.jpoint(null, null, null);
63923 else
63924 return this.dbl();
63925 }
63926
63927 var h2 = h.redSqr();
63928 var h3 = h2.redMul(h);
63929 var v = u1.redMul(h2);
63930
63931 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
63932 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
63933 var nz = this.z.redMul(h);
63934
63935 return this.curve.jpoint(nx, ny, nz);
63936 };
63937
63938 JPoint.prototype.dblp = function dblp(pow) {
63939 if (pow === 0)
63940 return this;
63941 if (this.isInfinity())
63942 return this;
63943 if (!pow)
63944 return this.dbl();
63945
63946 if (this.curve.zeroA || this.curve.threeA) {
63947 var r = this;
63948 for (var i = 0; i < pow; i++)
63949 r = r.dbl();
63950 return r;
63951 }
63952
63953 // 1M + 2S + 1A + N * (4S + 5M + 8A)
63954 // N = 1 => 6M + 6S + 9A
63955 var a = this.curve.a;
63956 var tinv = this.curve.tinv;
63957
63958 var jx = this.x;
63959 var jy = this.y;
63960 var jz = this.z;
63961 var jz4 = jz.redSqr().redSqr();
63962
63963 // Reuse results
63964 var jyd = jy.redAdd(jy);
63965 for (var i = 0; i < pow; i++) {
63966 var jx2 = jx.redSqr();
63967 var jyd2 = jyd.redSqr();
63968 var jyd4 = jyd2.redSqr();
63969 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
63970
63971 var t1 = jx.redMul(jyd2);
63972 var nx = c.redSqr().redISub(t1.redAdd(t1));
63973 var t2 = t1.redISub(nx);
63974 var dny = c.redMul(t2);
63975 dny = dny.redIAdd(dny).redISub(jyd4);
63976 var nz = jyd.redMul(jz);
63977 if (i + 1 < pow)
63978 jz4 = jz4.redMul(jyd4);
63979
63980 jx = nx;
63981 jz = nz;
63982 jyd = dny;
63983 }
63984
63985 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
63986 };
63987
63988 JPoint.prototype.dbl = function dbl() {
63989 if (this.isInfinity())
63990 return this;
63991
63992 if (this.curve.zeroA)
63993 return this._zeroDbl();
63994 else if (this.curve.threeA)
63995 return this._threeDbl();
63996 else
63997 return this._dbl();
63998 };
63999
64000 JPoint.prototype._zeroDbl = function _zeroDbl() {
64001 var nx;
64002 var ny;
64003 var nz;
64004 // Z = 1
64005 if (this.zOne) {
64006 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
64007 // #doubling-mdbl-2007-bl
64008 // 1M + 5S + 14A
64009
64010 // XX = X1^2
64011 var xx = this.x.redSqr();
64012 // YY = Y1^2
64013 var yy = this.y.redSqr();
64014 // YYYY = YY^2
64015 var yyyy = yy.redSqr();
64016 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
64017 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
64018 s = s.redIAdd(s);
64019 // M = 3 * XX + a; a = 0
64020 var m = xx.redAdd(xx).redIAdd(xx);
64021 // T = M ^ 2 - 2*S
64022 var t = m.redSqr().redISub(s).redISub(s);
64023
64024 // 8 * YYYY
64025 var yyyy8 = yyyy.redIAdd(yyyy);
64026 yyyy8 = yyyy8.redIAdd(yyyy8);
64027 yyyy8 = yyyy8.redIAdd(yyyy8);
64028
64029 // X3 = T
64030 nx = t;
64031 // Y3 = M * (S - T) - 8 * YYYY
64032 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
64033 // Z3 = 2*Y1
64034 nz = this.y.redAdd(this.y);
64035 } else {
64036 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
64037 // #doubling-dbl-2009-l
64038 // 2M + 5S + 13A
64039
64040 // A = X1^2
64041 var a = this.x.redSqr();
64042 // B = Y1^2
64043 var b = this.y.redSqr();
64044 // C = B^2
64045 var c = b.redSqr();
64046 // D = 2 * ((X1 + B)^2 - A - C)
64047 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
64048 d = d.redIAdd(d);
64049 // E = 3 * A
64050 var e = a.redAdd(a).redIAdd(a);
64051 // F = E^2
64052 var f = e.redSqr();
64053
64054 // 8 * C
64055 var c8 = c.redIAdd(c);
64056 c8 = c8.redIAdd(c8);
64057 c8 = c8.redIAdd(c8);
64058
64059 // X3 = F - 2 * D
64060 nx = f.redISub(d).redISub(d);
64061 // Y3 = E * (D - X3) - 8 * C
64062 ny = e.redMul(d.redISub(nx)).redISub(c8);
64063 // Z3 = 2 * Y1 * Z1
64064 nz = this.y.redMul(this.z);
64065 nz = nz.redIAdd(nz);
64066 }
64067
64068 return this.curve.jpoint(nx, ny, nz);
64069 };
64070
64071 JPoint.prototype._threeDbl = function _threeDbl() {
64072 var nx;
64073 var ny;
64074 var nz;
64075 // Z = 1
64076 if (this.zOne) {
64077 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
64078 // #doubling-mdbl-2007-bl
64079 // 1M + 5S + 15A
64080
64081 // XX = X1^2
64082 var xx = this.x.redSqr();
64083 // YY = Y1^2
64084 var yy = this.y.redSqr();
64085 // YYYY = YY^2
64086 var yyyy = yy.redSqr();
64087 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
64088 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
64089 s = s.redIAdd(s);
64090 // M = 3 * XX + a
64091 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
64092 // T = M^2 - 2 * S
64093 var t = m.redSqr().redISub(s).redISub(s);
64094 // X3 = T
64095 nx = t;
64096 // Y3 = M * (S - T) - 8 * YYYY
64097 var yyyy8 = yyyy.redIAdd(yyyy);
64098 yyyy8 = yyyy8.redIAdd(yyyy8);
64099 yyyy8 = yyyy8.redIAdd(yyyy8);
64100 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
64101 // Z3 = 2 * Y1
64102 nz = this.y.redAdd(this.y);
64103 } else {
64104 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
64105 // 3M + 5S
64106
64107 // delta = Z1^2
64108 var delta = this.z.redSqr();
64109 // gamma = Y1^2
64110 var gamma = this.y.redSqr();
64111 // beta = X1 * gamma
64112 var beta = this.x.redMul(gamma);
64113 // alpha = 3 * (X1 - delta) * (X1 + delta)
64114 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
64115 alpha = alpha.redAdd(alpha).redIAdd(alpha);
64116 // X3 = alpha^2 - 8 * beta
64117 var beta4 = beta.redIAdd(beta);
64118 beta4 = beta4.redIAdd(beta4);
64119 var beta8 = beta4.redAdd(beta4);
64120 nx = alpha.redSqr().redISub(beta8);
64121 // Z3 = (Y1 + Z1)^2 - gamma - delta
64122 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
64123 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
64124 var ggamma8 = gamma.redSqr();
64125 ggamma8 = ggamma8.redIAdd(ggamma8);
64126 ggamma8 = ggamma8.redIAdd(ggamma8);
64127 ggamma8 = ggamma8.redIAdd(ggamma8);
64128 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
64129 }
64130
64131 return this.curve.jpoint(nx, ny, nz);
64132 };
64133
64134 JPoint.prototype._dbl = function _dbl() {
64135 var a = this.curve.a;
64136
64137 // 4M + 6S + 10A
64138 var jx = this.x;
64139 var jy = this.y;
64140 var jz = this.z;
64141 var jz4 = jz.redSqr().redSqr();
64142
64143 var jx2 = jx.redSqr();
64144 var jy2 = jy.redSqr();
64145
64146 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
64147
64148 var jxd4 = jx.redAdd(jx);
64149 jxd4 = jxd4.redIAdd(jxd4);
64150 var t1 = jxd4.redMul(jy2);
64151 var nx = c.redSqr().redISub(t1.redAdd(t1));
64152 var t2 = t1.redISub(nx);
64153
64154 var jyd8 = jy2.redSqr();
64155 jyd8 = jyd8.redIAdd(jyd8);
64156 jyd8 = jyd8.redIAdd(jyd8);
64157 jyd8 = jyd8.redIAdd(jyd8);
64158 var ny = c.redMul(t2).redISub(jyd8);
64159 var nz = jy.redAdd(jy).redMul(jz);
64160
64161 return this.curve.jpoint(nx, ny, nz);
64162 };
64163
64164 JPoint.prototype.trpl = function trpl() {
64165 if (!this.curve.zeroA)
64166 return this.dbl().add(this);
64167
64168 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
64169 // 5M + 10S + ...
64170
64171 // XX = X1^2
64172 var xx = this.x.redSqr();
64173 // YY = Y1^2
64174 var yy = this.y.redSqr();
64175 // ZZ = Z1^2
64176 var zz = this.z.redSqr();
64177 // YYYY = YY^2
64178 var yyyy = yy.redSqr();
64179 // M = 3 * XX + a * ZZ2; a = 0
64180 var m = xx.redAdd(xx).redIAdd(xx);
64181 // MM = M^2
64182 var mm = m.redSqr();
64183 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
64184 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
64185 e = e.redIAdd(e);
64186 e = e.redAdd(e).redIAdd(e);
64187 e = e.redISub(mm);
64188 // EE = E^2
64189 var ee = e.redSqr();
64190 // T = 16*YYYY
64191 var t = yyyy.redIAdd(yyyy);
64192 t = t.redIAdd(t);
64193 t = t.redIAdd(t);
64194 t = t.redIAdd(t);
64195 // U = (M + E)^2 - MM - EE - T
64196 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
64197 // X3 = 4 * (X1 * EE - 4 * YY * U)
64198 var yyu4 = yy.redMul(u);
64199 yyu4 = yyu4.redIAdd(yyu4);
64200 yyu4 = yyu4.redIAdd(yyu4);
64201 var nx = this.x.redMul(ee).redISub(yyu4);
64202 nx = nx.redIAdd(nx);
64203 nx = nx.redIAdd(nx);
64204 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
64205 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
64206 ny = ny.redIAdd(ny);
64207 ny = ny.redIAdd(ny);
64208 ny = ny.redIAdd(ny);
64209 // Z3 = (Z1 + E)^2 - ZZ - EE
64210 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
64211
64212 return this.curve.jpoint(nx, ny, nz);
64213 };
64214
64215 JPoint.prototype.mul = function mul(k, kbase) {
64216 k = new BN(k, kbase);
64217
64218 return this.curve._wnafMul(this, k);
64219 };
64220
64221 JPoint.prototype.eq = function eq(p) {
64222 if (p.type === 'affine')
64223 return this.eq(p.toJ());
64224
64225 if (this === p)
64226 return true;
64227
64228 // x1 * z2^2 == x2 * z1^2
64229 var z2 = this.z.redSqr();
64230 var pz2 = p.z.redSqr();
64231 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
64232 return false;
64233
64234 // y1 * z2^3 == y2 * z1^3
64235 var z3 = z2.redMul(this.z);
64236 var pz3 = pz2.redMul(p.z);
64237 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
64238 };
64239
64240 JPoint.prototype.eqXToP = function eqXToP(x) {
64241 var zs = this.z.redSqr();
64242 var rx = x.toRed(this.curve.red).redMul(zs);
64243 if (this.x.cmp(rx) === 0)
64244 return true;
64245
64246 var xc = x.clone();
64247 var t = this.curve.redN.redMul(zs);
64248 for (;;) {
64249 xc.iadd(this.curve.n);
64250 if (xc.cmp(this.curve.p) >= 0)
64251 return false;
64252
64253 rx.redIAdd(t);
64254 if (this.x.cmp(rx) === 0)
64255 return true;
64256 }
64257 return false;
64258 };
64259
64260 JPoint.prototype.inspect = function inspect() {
64261 if (this.isInfinity())
64262 return '<EC JPoint Infinity>';
64263 return '<EC JPoint x: ' + this.x.toString(16, 2) +
64264 ' y: ' + this.y.toString(16, 2) +
64265 ' z: ' + this.z.toString(16, 2) + '>';
64266 };
64267
64268 JPoint.prototype.isInfinity = function isInfinity() {
64269 // XXX This code assumes that zero is always zero in red
64270 return this.z.cmpn(0) === 0;
64271 };
64272
64273 },{"../../elliptic":67,"../curve":70,"bn.js":17,"inherits":95}],73:[function(require,module,exports){
64274 'use strict';
64275
64276 var curves = exports;
64277
64278 var hash = require('hash.js');
64279 var elliptic = require('../elliptic');
64280
64281 var assert = elliptic.utils.assert;
64282
64283 function PresetCurve(options) {
64284 if (options.type === 'short')
64285 this.curve = new elliptic.curve.short(options);
64286 else if (options.type === 'edwards')
64287 this.curve = new elliptic.curve.edwards(options);
64288 else
64289 this.curve = new elliptic.curve.mont(options);
64290 this.g = this.curve.g;
64291 this.n = this.curve.n;
64292 this.hash = options.hash;
64293
64294 assert(this.g.validate(), 'Invalid curve');
64295 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
64296 }
64297 curves.PresetCurve = PresetCurve;
64298
64299 function defineCurve(name, options) {
64300 Object.defineProperty(curves, name, {
64301 configurable: true,
64302 enumerable: true,
64303 get: function() {
64304 var curve = new PresetCurve(options);
64305 Object.defineProperty(curves, name, {
64306 configurable: true,
64307 enumerable: true,
64308 value: curve
64309 });
64310 return curve;
64311 }
64312 });
64313 }
64314
64315 defineCurve('p192', {
64316 type: 'short',
64317 prime: 'p192',
64318 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
64319 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
64320 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
64321 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
64322 hash: hash.sha256,
64323 gRed: false,
64324 g: [
64325 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
64326 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
64327 ]
64328 });
64329
64330 defineCurve('p224', {
64331 type: 'short',
64332 prime: 'p224',
64333 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
64334 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
64335 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
64336 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
64337 hash: hash.sha256,
64338 gRed: false,
64339 g: [
64340 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
64341 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
64342 ]
64343 });
64344
64345 defineCurve('p256', {
64346 type: 'short',
64347 prime: null,
64348 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
64349 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
64350 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
64351 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
64352 hash: hash.sha256,
64353 gRed: false,
64354 g: [
64355 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
64356 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
64357 ]
64358 });
64359
64360 defineCurve('p384', {
64361 type: 'short',
64362 prime: null,
64363 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64364 'fffffffe ffffffff 00000000 00000000 ffffffff',
64365 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64366 'fffffffe ffffffff 00000000 00000000 fffffffc',
64367 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
64368 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
64369 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
64370 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
64371 hash: hash.sha384,
64372 gRed: false,
64373 g: [
64374 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
64375 '5502f25d bf55296c 3a545e38 72760ab7',
64376 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
64377 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
64378 ]
64379 });
64380
64381 defineCurve('p521', {
64382 type: 'short',
64383 prime: null,
64384 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64385 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64386 'ffffffff ffffffff ffffffff ffffffff ffffffff',
64387 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64388 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64389 'ffffffff ffffffff ffffffff ffffffff fffffffc',
64390 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
64391 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
64392 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
64393 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
64394 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
64395 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
64396 hash: hash.sha512,
64397 gRed: false,
64398 g: [
64399 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
64400 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
64401 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
64402 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
64403 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
64404 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
64405 ]
64406 });
64407
64408 defineCurve('curve25519', {
64409 type: 'mont',
64410 prime: 'p25519',
64411 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
64412 a: '76d06',
64413 b: '1',
64414 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
64415 hash: hash.sha256,
64416 gRed: false,
64417 g: [
64418 '9'
64419 ]
64420 });
64421
64422 defineCurve('ed25519', {
64423 type: 'edwards',
64424 prime: 'p25519',
64425 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
64426 a: '-1',
64427 c: '1',
64428 // -121665 * (121666^(-1)) (mod P)
64429 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
64430 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
64431 hash: hash.sha256,
64432 gRed: false,
64433 g: [
64434 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
64435
64436 // 4/5
64437 '6666666666666666666666666666666666666666666666666666666666666658'
64438 ]
64439 });
64440
64441 var pre;
64442 try {
64443 pre = require('./precomputed/secp256k1');
64444 } catch (e) {
64445 pre = undefined;
64446 }
64447
64448 defineCurve('secp256k1', {
64449 type: 'short',
64450 prime: 'k256',
64451 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
64452 a: '0',
64453 b: '7',
64454 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
64455 h: '1',
64456 hash: hash.sha256,
64457
64458 // Precomputed endomorphism
64459 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
64460 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
64461 basis: [
64462 {
64463 a: '3086d221a7d46bcde86c90e49284eb15',
64464 b: '-e4437ed6010e88286f547fa90abfe4c3'
64465 },
64466 {
64467 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
64468 b: '3086d221a7d46bcde86c90e49284eb15'
64469 }
64470 ],
64471
64472 gRed: false,
64473 g: [
64474 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
64475 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
64476 pre
64477 ]
64478 });
64479
64480 },{"../elliptic":67,"./precomputed/secp256k1":80,"hash.js":86}],74:[function(require,module,exports){
64481 'use strict';
64482
64483 var BN = require('bn.js');
64484 var HmacDRBG = require('hmac-drbg');
64485 var elliptic = require('../../elliptic');
64486 var utils = elliptic.utils;
64487 var assert = utils.assert;
64488
64489 var KeyPair = require('./key');
64490 var Signature = require('./signature');
64491
64492 function EC(options) {
64493 if (!(this instanceof EC))
64494 return new EC(options);
64495
64496 // Shortcut `elliptic.ec(curve-name)`
64497 if (typeof options === 'string') {
64498 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
64499
64500 options = elliptic.curves[options];
64501 }
64502
64503 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
64504 if (options instanceof elliptic.curves.PresetCurve)
64505 options = { curve: options };
64506
64507 this.curve = options.curve.curve;
64508 this.n = this.curve.n;
64509 this.nh = this.n.ushrn(1);
64510 this.g = this.curve.g;
64511
64512 // Point on curve
64513 this.g = options.curve.g;
64514 this.g.precompute(options.curve.n.bitLength() + 1);
64515
64516 // Hash for function for DRBG
64517 this.hash = options.hash || options.curve.hash;
64518 }
64519 module.exports = EC;
64520
64521 EC.prototype.keyPair = function keyPair(options) {
64522 return new KeyPair(this, options);
64523 };
64524
64525 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
64526 return KeyPair.fromPrivate(this, priv, enc);
64527 };
64528
64529 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
64530 return KeyPair.fromPublic(this, pub, enc);
64531 };
64532
64533 EC.prototype.genKeyPair = function genKeyPair(options) {
64534 if (!options)
64535 options = {};
64536
64537 // Instantiate Hmac_DRBG
64538 var drbg = new HmacDRBG({
64539 hash: this.hash,
64540 pers: options.pers,
64541 persEnc: options.persEnc || 'utf8',
64542 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
64543 entropyEnc: options.entropy && options.entropyEnc || 'utf8',
64544 nonce: this.n.toArray()
64545 });
64546
64547 var bytes = this.n.byteLength();
64548 var ns2 = this.n.sub(new BN(2));
64549 do {
64550 var priv = new BN(drbg.generate(bytes));
64551 if (priv.cmp(ns2) > 0)
64552 continue;
64553
64554 priv.iaddn(1);
64555 return this.keyFromPrivate(priv);
64556 } while (true);
64557 };
64558
64559 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
64560 var delta = msg.byteLength() * 8 - this.n.bitLength();
64561 if (delta > 0)
64562 msg = msg.ushrn(delta);
64563 if (!truncOnly && msg.cmp(this.n) >= 0)
64564 return msg.sub(this.n);
64565 else
64566 return msg;
64567 };
64568
64569 EC.prototype.sign = function sign(msg, key, enc, options) {
64570 if (typeof enc === 'object') {
64571 options = enc;
64572 enc = null;
64573 }
64574 if (!options)
64575 options = {};
64576
64577 key = this.keyFromPrivate(key, enc);
64578 msg = this._truncateToN(new BN(msg, 16));
64579
64580 // Zero-extend key to provide enough entropy
64581 var bytes = this.n.byteLength();
64582 var bkey = key.getPrivate().toArray('be', bytes);
64583
64584 // Zero-extend nonce to have the same byte size as N
64585 var nonce = msg.toArray('be', bytes);
64586
64587 // Instantiate Hmac_DRBG
64588 var drbg = new HmacDRBG({
64589 hash: this.hash,
64590 entropy: bkey,
64591 nonce: nonce,
64592 pers: options.pers,
64593 persEnc: options.persEnc || 'utf8'
64594 });
64595
64596 // Number of bytes to generate
64597 var ns1 = this.n.sub(new BN(1));
64598
64599 for (var iter = 0; true; iter++) {
64600 var k = options.k ?
64601 options.k(iter) :
64602 new BN(drbg.generate(this.n.byteLength()));
64603 k = this._truncateToN(k, true);
64604 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
64605 continue;
64606
64607 var kp = this.g.mul(k);
64608 if (kp.isInfinity())
64609 continue;
64610
64611 var kpX = kp.getX();
64612 var r = kpX.umod(this.n);
64613 if (r.cmpn(0) === 0)
64614 continue;
64615
64616 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
64617 s = s.umod(this.n);
64618 if (s.cmpn(0) === 0)
64619 continue;
64620
64621 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
64622 (kpX.cmp(r) !== 0 ? 2 : 0);
64623
64624 // Use complement of `s`, if it is > `n / 2`
64625 if (options.canonical && s.cmp(this.nh) > 0) {
64626 s = this.n.sub(s);
64627 recoveryParam ^= 1;
64628 }
64629
64630 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
64631 }
64632 };
64633
64634 EC.prototype.verify = function verify(msg, signature, key, enc) {
64635 msg = this._truncateToN(new BN(msg, 16));
64636 key = this.keyFromPublic(key, enc);
64637 signature = new Signature(signature, 'hex');
64638
64639 // Perform primitive values validation
64640 var r = signature.r;
64641 var s = signature.s;
64642 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
64643 return false;
64644 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
64645 return false;
64646
64647 // Validate signature
64648 var sinv = s.invm(this.n);
64649 var u1 = sinv.mul(msg).umod(this.n);
64650 var u2 = sinv.mul(r).umod(this.n);
64651
64652 if (!this.curve._maxwellTrick) {
64653 var p = this.g.mulAdd(u1, key.getPublic(), u2);
64654 if (p.isInfinity())
64655 return false;
64656
64657 return p.getX().umod(this.n).cmp(r) === 0;
64658 }
64659
64660 // NOTE: Greg Maxwell's trick, inspired by:
64661 // https://git.io/vad3K
64662
64663 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
64664 if (p.isInfinity())
64665 return false;
64666
64667 // Compare `p.x` of Jacobian point with `r`,
64668 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
64669 // inverse of `p.z^2`
64670 return p.eqXToP(r);
64671 };
64672
64673 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
64674 assert((3 & j) === j, 'The recovery param is more than two bits');
64675 signature = new Signature(signature, enc);
64676
64677 var n = this.n;
64678 var e = new BN(msg);
64679 var r = signature.r;
64680 var s = signature.s;
64681
64682 // A set LSB signifies that the y-coordinate is odd
64683 var isYOdd = j & 1;
64684 var isSecondKey = j >> 1;
64685 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
64686 throw new Error('Unable to find sencond key candinate');
64687
64688 // 1.1. Let x = r + jn.
64689 if (isSecondKey)
64690 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
64691 else
64692 r = this.curve.pointFromX(r, isYOdd);
64693
64694 var rInv = signature.r.invm(n);
64695 var s1 = n.sub(e).mul(rInv).umod(n);
64696 var s2 = s.mul(rInv).umod(n);
64697
64698 // 1.6.1 Compute Q = r^-1 (sR - eG)
64699 // Q = r^-1 (sR + -eG)
64700 return this.g.mulAdd(s1, r, s2);
64701 };
64702
64703 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
64704 signature = new Signature(signature, enc);
64705 if (signature.recoveryParam !== null)
64706 return signature.recoveryParam;
64707
64708 for (var i = 0; i < 4; i++) {
64709 var Qprime;
64710 try {
64711 Qprime = this.recoverPubKey(e, signature, i);
64712 } catch (e) {
64713 continue;
64714 }
64715
64716 if (Qprime.eq(Q))
64717 return i;
64718 }
64719 throw new Error('Unable to find valid recovery factor');
64720 };
64721
64722 },{"../../elliptic":67,"./key":75,"./signature":76,"bn.js":17,"hmac-drbg":92}],75:[function(require,module,exports){
64723 'use strict';
64724
64725 var BN = require('bn.js');
64726 var elliptic = require('../../elliptic');
64727 var utils = elliptic.utils;
64728 var assert = utils.assert;
64729
64730 function KeyPair(ec, options) {
64731 this.ec = ec;
64732 this.priv = null;
64733 this.pub = null;
64734
64735 // KeyPair(ec, { priv: ..., pub: ... })
64736 if (options.priv)
64737 this._importPrivate(options.priv, options.privEnc);
64738 if (options.pub)
64739 this._importPublic(options.pub, options.pubEnc);
64740 }
64741 module.exports = KeyPair;
64742
64743 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
64744 if (pub instanceof KeyPair)
64745 return pub;
64746
64747 return new KeyPair(ec, {
64748 pub: pub,
64749 pubEnc: enc
64750 });
64751 };
64752
64753 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
64754 if (priv instanceof KeyPair)
64755 return priv;
64756
64757 return new KeyPair(ec, {
64758 priv: priv,
64759 privEnc: enc
64760 });
64761 };
64762
64763 KeyPair.prototype.validate = function validate() {
64764 var pub = this.getPublic();
64765
64766 if (pub.isInfinity())
64767 return { result: false, reason: 'Invalid public key' };
64768 if (!pub.validate())
64769 return { result: false, reason: 'Public key is not a point' };
64770 if (!pub.mul(this.ec.curve.n).isInfinity())
64771 return { result: false, reason: 'Public key * N != O' };
64772
64773 return { result: true, reason: null };
64774 };
64775
64776 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
64777 // compact is optional argument
64778 if (typeof compact === 'string') {
64779 enc = compact;
64780 compact = null;
64781 }
64782
64783 if (!this.pub)
64784 this.pub = this.ec.g.mul(this.priv);
64785
64786 if (!enc)
64787 return this.pub;
64788
64789 return this.pub.encode(enc, compact);
64790 };
64791
64792 KeyPair.prototype.getPrivate = function getPrivate(enc) {
64793 if (enc === 'hex')
64794 return this.priv.toString(16, 2);
64795 else
64796 return this.priv;
64797 };
64798
64799 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
64800 this.priv = new BN(key, enc || 16);
64801
64802 // Ensure that the priv won't be bigger than n, otherwise we may fail
64803 // in fixed multiplication method
64804 this.priv = this.priv.umod(this.ec.curve.n);
64805 };
64806
64807 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
64808 if (key.x || key.y) {
64809 // Montgomery points only have an `x` coordinate.
64810 // Weierstrass/Edwards points on the other hand have both `x` and
64811 // `y` coordinates.
64812 if (this.ec.curve.type === 'mont') {
64813 assert(key.x, 'Need x coordinate');
64814 } else if (this.ec.curve.type === 'short' ||
64815 this.ec.curve.type === 'edwards') {
64816 assert(key.x && key.y, 'Need both x and y coordinate');
64817 }
64818 this.pub = this.ec.curve.point(key.x, key.y);
64819 return;
64820 }
64821 this.pub = this.ec.curve.decodePoint(key, enc);
64822 };
64823
64824 // ECDH
64825 KeyPair.prototype.derive = function derive(pub) {
64826 return pub.mul(this.priv).getX();
64827 };
64828
64829 // ECDSA
64830 KeyPair.prototype.sign = function sign(msg, enc, options) {
64831 return this.ec.sign(msg, this, enc, options);
64832 };
64833
64834 KeyPair.prototype.verify = function verify(msg, signature) {
64835 return this.ec.verify(msg, signature, this);
64836 };
64837
64838 KeyPair.prototype.inspect = function inspect() {
64839 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
64840 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
64841 };
64842
64843 },{"../../elliptic":67,"bn.js":17}],76:[function(require,module,exports){
64844 'use strict';
64845
64846 var BN = require('bn.js');
64847
64848 var elliptic = require('../../elliptic');
64849 var utils = elliptic.utils;
64850 var assert = utils.assert;
64851
64852 function Signature(options, enc) {
64853 if (options instanceof Signature)
64854 return options;
64855
64856 if (this._importDER(options, enc))
64857 return;
64858
64859 assert(options.r && options.s, 'Signature without r or s');
64860 this.r = new BN(options.r, 16);
64861 this.s = new BN(options.s, 16);
64862 if (options.recoveryParam === undefined)
64863 this.recoveryParam = null;
64864 else
64865 this.recoveryParam = options.recoveryParam;
64866 }
64867 module.exports = Signature;
64868
64869 function Position() {
64870 this.place = 0;
64871 }
64872
64873 function getLength(buf, p) {
64874 var initial = buf[p.place++];
64875 if (!(initial & 0x80)) {
64876 return initial;
64877 }
64878 var octetLen = initial & 0xf;
64879 var val = 0;
64880 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
64881 val <<= 8;
64882 val |= buf[off];
64883 }
64884 p.place = off;
64885 return val;
64886 }
64887
64888 function rmPadding(buf) {
64889 var i = 0;
64890 var len = buf.length - 1;
64891 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
64892 i++;
64893 }
64894 if (i === 0) {
64895 return buf;
64896 }
64897 return buf.slice(i);
64898 }
64899
64900 Signature.prototype._importDER = function _importDER(data, enc) {
64901 data = utils.toArray(data, enc);
64902 var p = new Position();
64903 if (data[p.place++] !== 0x30) {
64904 return false;
64905 }
64906 var len = getLength(data, p);
64907 if ((len + p.place) !== data.length) {
64908 return false;
64909 }
64910 if (data[p.place++] !== 0x02) {
64911 return false;
64912 }
64913 var rlen = getLength(data, p);
64914 var r = data.slice(p.place, rlen + p.place);
64915 p.place += rlen;
64916 if (data[p.place++] !== 0x02) {
64917 return false;
64918 }
64919 var slen = getLength(data, p);
64920 if (data.length !== slen + p.place) {
64921 return false;
64922 }
64923 var s = data.slice(p.place, slen + p.place);
64924 if (r[0] === 0 && (r[1] & 0x80)) {
64925 r = r.slice(1);
64926 }
64927 if (s[0] === 0 && (s[1] & 0x80)) {
64928 s = s.slice(1);
64929 }
64930
64931 this.r = new BN(r);
64932 this.s = new BN(s);
64933 this.recoveryParam = null;
64934
64935 return true;
64936 };
64937
64938 function constructLength(arr, len) {
64939 if (len < 0x80) {
64940 arr.push(len);
64941 return;
64942 }
64943 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
64944 arr.push(octets | 0x80);
64945 while (--octets) {
64946 arr.push((len >>> (octets << 3)) & 0xff);
64947 }
64948 arr.push(len);
64949 }
64950
64951 Signature.prototype.toDER = function toDER(enc) {
64952 var r = this.r.toArray();
64953 var s = this.s.toArray();
64954
64955 // Pad values
64956 if (r[0] & 0x80)
64957 r = [ 0 ].concat(r);
64958 // Pad values
64959 if (s[0] & 0x80)
64960 s = [ 0 ].concat(s);
64961
64962 r = rmPadding(r);
64963 s = rmPadding(s);
64964
64965 while (!s[0] && !(s[1] & 0x80)) {
64966 s = s.slice(1);
64967 }
64968 var arr = [ 0x02 ];
64969 constructLength(arr, r.length);
64970 arr = arr.concat(r);
64971 arr.push(0x02);
64972 constructLength(arr, s.length);
64973 var backHalf = arr.concat(s);
64974 var res = [ 0x30 ];
64975 constructLength(res, backHalf.length);
64976 res = res.concat(backHalf);
64977 return utils.encode(res, enc);
64978 };
64979
64980 },{"../../elliptic":67,"bn.js":17}],77:[function(require,module,exports){
64981 'use strict';
64982
64983 var hash = require('hash.js');
64984 var elliptic = require('../../elliptic');
64985 var utils = elliptic.utils;
64986 var assert = utils.assert;
64987 var parseBytes = utils.parseBytes;
64988 var KeyPair = require('./key');
64989 var Signature = require('./signature');
64990
64991 function EDDSA(curve) {
64992 assert(curve === 'ed25519', 'only tested with ed25519 so far');
64993
64994 if (!(this instanceof EDDSA))
64995 return new EDDSA(curve);
64996
64997 var curve = elliptic.curves[curve].curve;
64998 this.curve = curve;
64999 this.g = curve.g;
65000 this.g.precompute(curve.n.bitLength() + 1);
65001
65002 this.pointClass = curve.point().constructor;
65003 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
65004 this.hash = hash.sha512;
65005 }
65006
65007 module.exports = EDDSA;
65008
65009 /**
65010 * @param {Array|String} message - message bytes
65011 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
65012 * @returns {Signature} - signature
65013 */
65014 EDDSA.prototype.sign = function sign(message, secret) {
65015 message = parseBytes(message);
65016 var key = this.keyFromSecret(secret);
65017 var r = this.hashInt(key.messagePrefix(), message);
65018 var R = this.g.mul(r);
65019 var Rencoded = this.encodePoint(R);
65020 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
65021 .mul(key.priv());
65022 var S = r.add(s_).umod(this.curve.n);
65023 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
65024 };
65025
65026 /**
65027 * @param {Array} message - message bytes
65028 * @param {Array|String|Signature} sig - sig bytes
65029 * @param {Array|String|Point|KeyPair} pub - public key
65030 * @returns {Boolean} - true if public key matches sig of message
65031 */
65032 EDDSA.prototype.verify = function verify(message, sig, pub) {
65033 message = parseBytes(message);
65034 sig = this.makeSignature(sig);
65035 var key = this.keyFromPublic(pub);
65036 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
65037 var SG = this.g.mul(sig.S());
65038 var RplusAh = sig.R().add(key.pub().mul(h));
65039 return RplusAh.eq(SG);
65040 };
65041
65042 EDDSA.prototype.hashInt = function hashInt() {
65043 var hash = this.hash();
65044 for (var i = 0; i < arguments.length; i++)
65045 hash.update(arguments[i]);
65046 return utils.intFromLE(hash.digest()).umod(this.curve.n);
65047 };
65048
65049 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
65050 return KeyPair.fromPublic(this, pub);
65051 };
65052
65053 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
65054 return KeyPair.fromSecret(this, secret);
65055 };
65056
65057 EDDSA.prototype.makeSignature = function makeSignature(sig) {
65058 if (sig instanceof Signature)
65059 return sig;
65060 return new Signature(this, sig);
65061 };
65062
65063 /**
65064 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
65065 *
65066 * EDDSA defines methods for encoding and decoding points and integers. These are
65067 * helper convenience methods, that pass along to utility functions implied
65068 * parameters.
65069 *
65070 */
65071 EDDSA.prototype.encodePoint = function encodePoint(point) {
65072 var enc = point.getY().toArray('le', this.encodingLength);
65073 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
65074 return enc;
65075 };
65076
65077 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
65078 bytes = utils.parseBytes(bytes);
65079
65080 var lastIx = bytes.length - 1;
65081 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
65082 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
65083
65084 var y = utils.intFromLE(normed);
65085 return this.curve.pointFromY(y, xIsOdd);
65086 };
65087
65088 EDDSA.prototype.encodeInt = function encodeInt(num) {
65089 return num.toArray('le', this.encodingLength);
65090 };
65091
65092 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
65093 return utils.intFromLE(bytes);
65094 };
65095
65096 EDDSA.prototype.isPoint = function isPoint(val) {
65097 return val instanceof this.pointClass;
65098 };
65099
65100 },{"../../elliptic":67,"./key":78,"./signature":79,"hash.js":86}],78:[function(require,module,exports){
65101 'use strict';
65102
65103 var elliptic = require('../../elliptic');
65104 var utils = elliptic.utils;
65105 var assert = utils.assert;
65106 var parseBytes = utils.parseBytes;
65107 var cachedProperty = utils.cachedProperty;
65108
65109 /**
65110 * @param {EDDSA} eddsa - instance
65111 * @param {Object} params - public/private key parameters
65112 *
65113 * @param {Array<Byte>} [params.secret] - secret seed bytes
65114 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
65115 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
65116 *
65117 */
65118 function KeyPair(eddsa, params) {
65119 this.eddsa = eddsa;
65120 this._secret = parseBytes(params.secret);
65121 if (eddsa.isPoint(params.pub))
65122 this._pub = params.pub;
65123 else
65124 this._pubBytes = parseBytes(params.pub);
65125 }
65126
65127 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
65128 if (pub instanceof KeyPair)
65129 return pub;
65130 return new KeyPair(eddsa, { pub: pub });
65131 };
65132
65133 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
65134 if (secret instanceof KeyPair)
65135 return secret;
65136 return new KeyPair(eddsa, { secret: secret });
65137 };
65138
65139 KeyPair.prototype.secret = function secret() {
65140 return this._secret;
65141 };
65142
65143 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
65144 return this.eddsa.encodePoint(this.pub());
65145 });
65146
65147 cachedProperty(KeyPair, 'pub', function pub() {
65148 if (this._pubBytes)
65149 return this.eddsa.decodePoint(this._pubBytes);
65150 return this.eddsa.g.mul(this.priv());
65151 });
65152
65153 cachedProperty(KeyPair, 'privBytes', function privBytes() {
65154 var eddsa = this.eddsa;
65155 var hash = this.hash();
65156 var lastIx = eddsa.encodingLength - 1;
65157
65158 var a = hash.slice(0, eddsa.encodingLength);
65159 a[0] &= 248;
65160 a[lastIx] &= 127;
65161 a[lastIx] |= 64;
65162
65163 return a;
65164 });
65165
65166 cachedProperty(KeyPair, 'priv', function priv() {
65167 return this.eddsa.decodeInt(this.privBytes());
65168 });
65169
65170 cachedProperty(KeyPair, 'hash', function hash() {
65171 return this.eddsa.hash().update(this.secret()).digest();
65172 });
65173
65174 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
65175 return this.hash().slice(this.eddsa.encodingLength);
65176 });
65177
65178 KeyPair.prototype.sign = function sign(message) {
65179 assert(this._secret, 'KeyPair can only verify');
65180 return this.eddsa.sign(message, this);
65181 };
65182
65183 KeyPair.prototype.verify = function verify(message, sig) {
65184 return this.eddsa.verify(message, sig, this);
65185 };
65186
65187 KeyPair.prototype.getSecret = function getSecret(enc) {
65188 assert(this._secret, 'KeyPair is public only');
65189 return utils.encode(this.secret(), enc);
65190 };
65191
65192 KeyPair.prototype.getPublic = function getPublic(enc) {
65193 return utils.encode(this.pubBytes(), enc);
65194 };
65195
65196 module.exports = KeyPair;
65197
65198 },{"../../elliptic":67}],79:[function(require,module,exports){
65199 'use strict';
65200
65201 var BN = require('bn.js');
65202 var elliptic = require('../../elliptic');
65203 var utils = elliptic.utils;
65204 var assert = utils.assert;
65205 var cachedProperty = utils.cachedProperty;
65206 var parseBytes = utils.parseBytes;
65207
65208 /**
65209 * @param {EDDSA} eddsa - eddsa instance
65210 * @param {Array<Bytes>|Object} sig -
65211 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
65212 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
65213 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
65214 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
65215 */
65216 function Signature(eddsa, sig) {
65217 this.eddsa = eddsa;
65218
65219 if (typeof sig !== 'object')
65220 sig = parseBytes(sig);
65221
65222 if (Array.isArray(sig)) {
65223 sig = {
65224 R: sig.slice(0, eddsa.encodingLength),
65225 S: sig.slice(eddsa.encodingLength)
65226 };
65227 }
65228
65229 assert(sig.R && sig.S, 'Signature without R or S');
65230
65231 if (eddsa.isPoint(sig.R))
65232 this._R = sig.R;
65233 if (sig.S instanceof BN)
65234 this._S = sig.S;
65235
65236 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
65237 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
65238 }
65239
65240 cachedProperty(Signature, 'S', function S() {
65241 return this.eddsa.decodeInt(this.Sencoded());
65242 });
65243
65244 cachedProperty(Signature, 'R', function R() {
65245 return this.eddsa.decodePoint(this.Rencoded());
65246 });
65247
65248 cachedProperty(Signature, 'Rencoded', function Rencoded() {
65249 return this.eddsa.encodePoint(this.R());
65250 });
65251
65252 cachedProperty(Signature, 'Sencoded', function Sencoded() {
65253 return this.eddsa.encodeInt(this.S());
65254 });
65255
65256 Signature.prototype.toBytes = function toBytes() {
65257 return this.Rencoded().concat(this.Sencoded());
65258 };
65259
65260 Signature.prototype.toHex = function toHex() {
65261 return utils.encode(this.toBytes(), 'hex').toUpperCase();
65262 };
65263
65264 module.exports = Signature;
65265
65266 },{"../../elliptic":67,"bn.js":17}],80:[function(require,module,exports){
65267 module.exports = {
65268 doubles: {
65269 step: 4,
65270 points: [
65271 [
65272 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
65273 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
65274 ],
65275 [
65276 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
65277 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
65278 ],
65279 [
65280 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
65281 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
65282 ],
65283 [
65284 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
65285 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
65286 ],
65287 [
65288 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
65289 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
65290 ],
65291 [
65292 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
65293 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
65294 ],
65295 [
65296 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
65297 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
65298 ],
65299 [
65300 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
65301 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
65302 ],
65303 [
65304 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
65305 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
65306 ],
65307 [
65308 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
65309 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
65310 ],
65311 [
65312 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
65313 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
65314 ],
65315 [
65316 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
65317 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
65318 ],
65319 [
65320 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
65321 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
65322 ],
65323 [
65324 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
65325 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
65326 ],
65327 [
65328 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
65329 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
65330 ],
65331 [
65332 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
65333 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
65334 ],
65335 [
65336 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
65337 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
65338 ],
65339 [
65340 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
65341 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
65342 ],
65343 [
65344 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
65345 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
65346 ],
65347 [
65348 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
65349 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
65350 ],
65351 [
65352 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
65353 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
65354 ],
65355 [
65356 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
65357 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
65358 ],
65359 [
65360 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
65361 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
65362 ],
65363 [
65364 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
65365 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
65366 ],
65367 [
65368 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
65369 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
65370 ],
65371 [
65372 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
65373 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
65374 ],
65375 [
65376 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
65377 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
65378 ],
65379 [
65380 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
65381 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
65382 ],
65383 [
65384 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
65385 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
65386 ],
65387 [
65388 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
65389 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
65390 ],
65391 [
65392 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
65393 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
65394 ],
65395 [
65396 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
65397 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
65398 ],
65399 [
65400 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
65401 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
65402 ],
65403 [
65404 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
65405 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
65406 ],
65407 [
65408 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
65409 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
65410 ],
65411 [
65412 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
65413 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
65414 ],
65415 [
65416 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
65417 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
65418 ],
65419 [
65420 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
65421 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
65422 ],
65423 [
65424 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
65425 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
65426 ],
65427 [
65428 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
65429 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
65430 ],
65431 [
65432 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
65433 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
65434 ],
65435 [
65436 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
65437 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
65438 ],
65439 [
65440 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
65441 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
65442 ],
65443 [
65444 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
65445 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
65446 ],
65447 [
65448 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
65449 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
65450 ],
65451 [
65452 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
65453 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
65454 ],
65455 [
65456 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
65457 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
65458 ],
65459 [
65460 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
65461 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
65462 ],
65463 [
65464 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
65465 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
65466 ],
65467 [
65468 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
65469 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
65470 ],
65471 [
65472 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
65473 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
65474 ],
65475 [
65476 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
65477 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
65478 ],
65479 [
65480 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
65481 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
65482 ],
65483 [
65484 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
65485 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
65486 ],
65487 [
65488 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
65489 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
65490 ],
65491 [
65492 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
65493 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
65494 ],
65495 [
65496 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
65497 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
65498 ],
65499 [
65500 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
65501 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
65502 ],
65503 [
65504 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
65505 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
65506 ],
65507 [
65508 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
65509 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
65510 ],
65511 [
65512 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
65513 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
65514 ],
65515 [
65516 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
65517 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
65518 ],
65519 [
65520 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
65521 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
65522 ],
65523 [
65524 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
65525 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
65526 ],
65527 [
65528 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
65529 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
65530 ]
65531 ]
65532 },
65533 naf: {
65534 wnd: 7,
65535 points: [
65536 [
65537 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
65538 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
65539 ],
65540 [
65541 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
65542 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
65543 ],
65544 [
65545 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
65546 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
65547 ],
65548 [
65549 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
65550 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
65551 ],
65552 [
65553 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
65554 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
65555 ],
65556 [
65557 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
65558 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
65559 ],
65560 [
65561 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
65562 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
65563 ],
65564 [
65565 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
65566 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
65567 ],
65568 [
65569 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
65570 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
65571 ],
65572 [
65573 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
65574 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
65575 ],
65576 [
65577 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
65578 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
65579 ],
65580 [
65581 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
65582 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
65583 ],
65584 [
65585 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
65586 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
65587 ],
65588 [
65589 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
65590 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
65591 ],
65592 [
65593 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
65594 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
65595 ],
65596 [
65597 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
65598 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
65599 ],
65600 [
65601 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
65602 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
65603 ],
65604 [
65605 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
65606 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
65607 ],
65608 [
65609 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
65610 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
65611 ],
65612 [
65613 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
65614 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
65615 ],
65616 [
65617 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
65618 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
65619 ],
65620 [
65621 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
65622 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
65623 ],
65624 [
65625 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
65626 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
65627 ],
65628 [
65629 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
65630 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
65631 ],
65632 [
65633 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
65634 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
65635 ],
65636 [
65637 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
65638 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
65639 ],
65640 [
65641 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
65642 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
65643 ],
65644 [
65645 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
65646 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
65647 ],
65648 [
65649 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
65650 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
65651 ],
65652 [
65653 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
65654 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
65655 ],
65656 [
65657 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
65658 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
65659 ],
65660 [
65661 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
65662 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
65663 ],
65664 [
65665 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
65666 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
65667 ],
65668 [
65669 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
65670 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
65671 ],
65672 [
65673 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
65674 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
65675 ],
65676 [
65677 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
65678 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
65679 ],
65680 [
65681 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
65682 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
65683 ],
65684 [
65685 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
65686 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
65687 ],
65688 [
65689 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
65690 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
65691 ],
65692 [
65693 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
65694 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
65695 ],
65696 [
65697 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
65698 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
65699 ],
65700 [
65701 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
65702 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
65703 ],
65704 [
65705 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
65706 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
65707 ],
65708 [
65709 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
65710 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
65711 ],
65712 [
65713 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
65714 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
65715 ],
65716 [
65717 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
65718 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
65719 ],
65720 [
65721 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
65722 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
65723 ],
65724 [
65725 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
65726 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
65727 ],
65728 [
65729 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
65730 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
65731 ],
65732 [
65733 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
65734 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
65735 ],
65736 [
65737 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
65738 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
65739 ],
65740 [
65741 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
65742 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
65743 ],
65744 [
65745 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
65746 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
65747 ],
65748 [
65749 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
65750 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
65751 ],
65752 [
65753 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
65754 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
65755 ],
65756 [
65757 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
65758 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
65759 ],
65760 [
65761 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
65762 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
65763 ],
65764 [
65765 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
65766 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
65767 ],
65768 [
65769 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
65770 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
65771 ],
65772 [
65773 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
65774 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
65775 ],
65776 [
65777 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
65778 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
65779 ],
65780 [
65781 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
65782 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
65783 ],
65784 [
65785 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
65786 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
65787 ],
65788 [
65789 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
65790 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
65791 ],
65792 [
65793 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
65794 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
65795 ],
65796 [
65797 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
65798 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
65799 ],
65800 [
65801 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
65802 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
65803 ],
65804 [
65805 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
65806 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
65807 ],
65808 [
65809 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
65810 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
65811 ],
65812 [
65813 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
65814 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
65815 ],
65816 [
65817 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
65818 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
65819 ],
65820 [
65821 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
65822 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
65823 ],
65824 [
65825 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
65826 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
65827 ],
65828 [
65829 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
65830 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
65831 ],
65832 [
65833 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
65834 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
65835 ],
65836 [
65837 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
65838 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
65839 ],
65840 [
65841 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
65842 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
65843 ],
65844 [
65845 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
65846 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
65847 ],
65848 [
65849 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
65850 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
65851 ],
65852 [
65853 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
65854 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
65855 ],
65856 [
65857 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
65858 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
65859 ],
65860 [
65861 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
65862 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
65863 ],
65864 [
65865 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
65866 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
65867 ],
65868 [
65869 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
65870 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
65871 ],
65872 [
65873 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
65874 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
65875 ],
65876 [
65877 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
65878 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
65879 ],
65880 [
65881 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
65882 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
65883 ],
65884 [
65885 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
65886 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
65887 ],
65888 [
65889 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
65890 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
65891 ],
65892 [
65893 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
65894 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
65895 ],
65896 [
65897 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
65898 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
65899 ],
65900 [
65901 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
65902 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
65903 ],
65904 [
65905 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
65906 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
65907 ],
65908 [
65909 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
65910 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
65911 ],
65912 [
65913 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
65914 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
65915 ],
65916 [
65917 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
65918 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
65919 ],
65920 [
65921 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
65922 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
65923 ],
65924 [
65925 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
65926 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
65927 ],
65928 [
65929 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
65930 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
65931 ],
65932 [
65933 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
65934 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
65935 ],
65936 [
65937 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
65938 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
65939 ],
65940 [
65941 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
65942 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
65943 ],
65944 [
65945 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
65946 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
65947 ],
65948 [
65949 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
65950 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
65951 ],
65952 [
65953 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
65954 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
65955 ],
65956 [
65957 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
65958 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
65959 ],
65960 [
65961 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
65962 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
65963 ],
65964 [
65965 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
65966 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
65967 ],
65968 [
65969 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
65970 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
65971 ],
65972 [
65973 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
65974 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
65975 ],
65976 [
65977 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
65978 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
65979 ],
65980 [
65981 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
65982 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
65983 ],
65984 [
65985 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
65986 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
65987 ],
65988 [
65989 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
65990 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
65991 ],
65992 [
65993 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
65994 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
65995 ],
65996 [
65997 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
65998 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
65999 ],
66000 [
66001 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
66002 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
66003 ],
66004 [
66005 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
66006 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
66007 ],
66008 [
66009 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
66010 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
66011 ],
66012 [
66013 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
66014 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
66015 ],
66016 [
66017 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
66018 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
66019 ],
66020 [
66021 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
66022 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
66023 ],
66024 [
66025 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
66026 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
66027 ],
66028 [
66029 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
66030 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
66031 ],
66032 [
66033 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
66034 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
66035 ],
66036 [
66037 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
66038 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
66039 ],
66040 [
66041 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
66042 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
66043 ]
66044 ]
66045 }
66046 };
66047
66048 },{}],81:[function(require,module,exports){
66049 'use strict';
66050
66051 var utils = exports;
66052 var BN = require('bn.js');
66053 var minAssert = require('minimalistic-assert');
66054 var minUtils = require('minimalistic-crypto-utils');
66055
66056 utils.assert = minAssert;
66057 utils.toArray = minUtils.toArray;
66058 utils.zero2 = minUtils.zero2;
66059 utils.toHex = minUtils.toHex;
66060 utils.encode = minUtils.encode;
66061
66062 // Represent num in a w-NAF form
66063 function getNAF(num, w) {
66064 var naf = [];
66065 var ws = 1 << (w + 1);
66066 var k = num.clone();
66067 while (k.cmpn(1) >= 0) {
66068 var z;
66069 if (k.isOdd()) {
66070 var mod = k.andln(ws - 1);
66071 if (mod > (ws >> 1) - 1)
66072 z = (ws >> 1) - mod;
66073 else
66074 z = mod;
66075 k.isubn(z);
66076 } else {
66077 z = 0;
66078 }
66079 naf.push(z);
66080
66081 // Optimization, shift by word if possible
66082 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
66083 for (var i = 1; i < shift; i++)
66084 naf.push(0);
66085 k.iushrn(shift);
66086 }
66087
66088 return naf;
66089 }
66090 utils.getNAF = getNAF;
66091
66092 // Represent k1, k2 in a Joint Sparse Form
66093 function getJSF(k1, k2) {
66094 var jsf = [
66095 [],
66096 []
66097 ];
66098
66099 k1 = k1.clone();
66100 k2 = k2.clone();
66101 var d1 = 0;
66102 var d2 = 0;
66103 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
66104
66105 // First phase
66106 var m14 = (k1.andln(3) + d1) & 3;
66107 var m24 = (k2.andln(3) + d2) & 3;
66108 if (m14 === 3)
66109 m14 = -1;
66110 if (m24 === 3)
66111 m24 = -1;
66112 var u1;
66113 if ((m14 & 1) === 0) {
66114 u1 = 0;
66115 } else {
66116 var m8 = (k1.andln(7) + d1) & 7;
66117 if ((m8 === 3 || m8 === 5) && m24 === 2)
66118 u1 = -m14;
66119 else
66120 u1 = m14;
66121 }
66122 jsf[0].push(u1);
66123
66124 var u2;
66125 if ((m24 & 1) === 0) {
66126 u2 = 0;
66127 } else {
66128 var m8 = (k2.andln(7) + d2) & 7;
66129 if ((m8 === 3 || m8 === 5) && m14 === 2)
66130 u2 = -m24;
66131 else
66132 u2 = m24;
66133 }
66134 jsf[1].push(u2);
66135
66136 // Second phase
66137 if (2 * d1 === u1 + 1)
66138 d1 = 1 - d1;
66139 if (2 * d2 === u2 + 1)
66140 d2 = 1 - d2;
66141 k1.iushrn(1);
66142 k2.iushrn(1);
66143 }
66144
66145 return jsf;
66146 }
66147 utils.getJSF = getJSF;
66148
66149 function cachedProperty(obj, name, computer) {
66150 var key = '_' + name;
66151 obj.prototype[name] = function cachedProperty() {
66152 return this[key] !== undefined ? this[key] :
66153 this[key] = computer.call(this);
66154 };
66155 }
66156 utils.cachedProperty = cachedProperty;
66157
66158 function parseBytes(bytes) {
66159 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
66160 bytes;
66161 }
66162 utils.parseBytes = parseBytes;
66163
66164 function intFromLE(bytes) {
66165 return new BN(bytes, 'hex', 'le');
66166 }
66167 utils.intFromLE = intFromLE;
66168
66169
66170 },{"bn.js":17,"minimalistic-assert":99,"minimalistic-crypto-utils":100}],82:[function(require,module,exports){
66171 module.exports={
66172 "_args": [
66173 [
66174 "elliptic@^6.0.0",
66175 "/home/ian/.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/browserify-sign"
66176 ]
66177 ],
66178 "_from": "elliptic@>=6.0.0 <7.0.0",
66179 "_id": "elliptic@6.4.0",
66180 "_inCache": true,
66181 "_installable": true,
66182 "_location": "/browserify/elliptic",
66183 "_nodeVersion": "7.0.0",
66184 "_npmOperationalInternal": {
66185 "host": "packages-18-east.internal.npmjs.com",
66186 "tmp": "tmp/elliptic-6.4.0.tgz_1487798866428_0.30510620190761983"
66187 },
66188 "_npmUser": {
66189 "email": "fedor@indutny.com",
66190 "name": "indutny"
66191 },
66192 "_npmVersion": "3.10.8",
66193 "_phantomChildren": {},
66194 "_requested": {
66195 "name": "elliptic",
66196 "raw": "elliptic@^6.0.0",
66197 "rawSpec": "^6.0.0",
66198 "scope": null,
66199 "spec": ">=6.0.0 <7.0.0",
66200 "type": "range"
66201 },
66202 "_requiredBy": [
66203 "/browserify/browserify-sign",
66204 "/browserify/create-ecdh"
66205 ],
66206 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
66207 "_shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
66208 "_shrinkwrap": null,
66209 "_spec": "elliptic@^6.0.0",
66210 "_where": "/home/ian/.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/browserify-sign",
66211 "author": {
66212 "email": "fedor@indutny.com",
66213 "name": "Fedor Indutny"
66214 },
66215 "bugs": {
66216 "url": "https://github.com/indutny/elliptic/issues"
66217 },
66218 "dependencies": {
66219 "bn.js": "^4.4.0",
66220 "brorand": "^1.0.1",
66221 "hash.js": "^1.0.0",
66222 "hmac-drbg": "^1.0.0",
66223 "inherits": "^2.0.1",
66224 "minimalistic-assert": "^1.0.0",
66225 "minimalistic-crypto-utils": "^1.0.0"
66226 },
66227 "description": "EC cryptography",
66228 "devDependencies": {
66229 "brfs": "^1.4.3",
66230 "coveralls": "^2.11.3",
66231 "grunt": "^0.4.5",
66232 "grunt-browserify": "^5.0.0",
66233 "grunt-cli": "^1.2.0",
66234 "grunt-contrib-connect": "^1.0.0",
66235 "grunt-contrib-copy": "^1.0.0",
66236 "grunt-contrib-uglify": "^1.0.1",
66237 "grunt-mocha-istanbul": "^3.0.1",
66238 "grunt-saucelabs": "^8.6.2",
66239 "istanbul": "^0.4.2",
66240 "jscs": "^2.9.0",
66241 "jshint": "^2.6.0",
66242 "mocha": "^2.1.0"
66243 },
66244 "directories": {},
66245 "dist": {
66246 "shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
66247 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz"
66248 },
66249 "files": [
66250 "lib"
66251 ],
66252 "gitHead": "6b0d2b76caae91471649c8e21f0b1d3ba0f96090",
66253 "homepage": "https://github.com/indutny/elliptic",
66254 "keywords": [
66255 "EC",
66256 "Elliptic",
66257 "curve",
66258 "Cryptography"
66259 ],
66260 "license": "MIT",
66261 "main": "lib/elliptic.js",
66262 "maintainers": [
66263 {
66264 "email": "fedor@indutny.com",
66265 "name": "indutny"
66266 }
66267 ],
66268 "name": "elliptic",
66269 "optionalDependencies": {},
66270 "readme": "ERROR: No README data found!",
66271 "repository": {
66272 "type": "git",
66273 "url": "git+ssh://git@github.com/indutny/elliptic.git"
66274 },
66275 "scripts": {
66276 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
66277 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
66278 "lint": "npm run jscs && npm run jshint",
66279 "test": "npm run lint && npm run unit",
66280 "unit": "istanbul test _mocha --reporter=spec test/index.js",
66281 "version": "grunt dist && git add dist/"
66282 },
66283 "version": "6.4.0"
66284 }
66285
66286 },{}],83:[function(require,module,exports){
66287 // Copyright Joyent, Inc. and other Node contributors.
66288 //
66289 // Permission is hereby granted, free of charge, to any person obtaining a
66290 // copy of this software and associated documentation files (the
66291 // "Software"), to deal in the Software without restriction, including
66292 // without limitation the rights to use, copy, modify, merge, publish,
66293 // distribute, sublicense, and/or sell copies of the Software, and to permit
66294 // persons to whom the Software is furnished to do so, subject to the
66295 // following conditions:
66296 //
66297 // The above copyright notice and this permission notice shall be included
66298 // in all copies or substantial portions of the Software.
66299 //
66300 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
66301 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
66302 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
66303 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
66304 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
66305 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
66306 // USE OR OTHER DEALINGS IN THE SOFTWARE.
66307
66308 function EventEmitter() {
66309 this._events = this._events || {};
66310 this._maxListeners = this._maxListeners || undefined;
66311 }
66312 module.exports = EventEmitter;
66313
66314 // Backwards-compat with node 0.10.x
66315 EventEmitter.EventEmitter = EventEmitter;
66316
66317 EventEmitter.prototype._events = undefined;
66318 EventEmitter.prototype._maxListeners = undefined;
66319
66320 // By default EventEmitters will print a warning if more than 10 listeners are
66321 // added to it. This is a useful default which helps finding memory leaks.
66322 EventEmitter.defaultMaxListeners = 10;
66323
66324 // Obviously not all Emitters should be limited to 10. This function allows
66325 // that to be increased. Set to zero for unlimited.
66326 EventEmitter.prototype.setMaxListeners = function(n) {
66327 if (!isNumber(n) || n < 0 || isNaN(n))
66328 throw TypeError('n must be a positive number');
66329 this._maxListeners = n;
66330 return this;
66331 };
66332
66333 EventEmitter.prototype.emit = function(type) {
66334 var er, handler, len, args, i, listeners;
66335
66336 if (!this._events)
66337 this._events = {};
66338
66339 // If there is no 'error' event listener then throw.
66340 if (type === 'error') {
66341 if (!this._events.error ||
66342 (isObject(this._events.error) && !this._events.error.length)) {
66343 er = arguments[1];
66344 if (er instanceof Error) {
66345 throw er; // Unhandled 'error' event
66346 } else {
66347 // At least give some kind of context to the user
66348 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
66349 err.context = er;
66350 throw err;
66351 }
66352 }
66353 }
66354
66355 handler = this._events[type];
66356
66357 if (isUndefined(handler))
66358 return false;
66359
66360 if (isFunction(handler)) {
66361 switch (arguments.length) {
66362 // fast cases
66363 case 1:
66364 handler.call(this);
66365 break;
66366 case 2:
66367 handler.call(this, arguments[1]);
66368 break;
66369 case 3:
66370 handler.call(this, arguments[1], arguments[2]);
66371 break;
66372 // slower
66373 default:
66374 args = Array.prototype.slice.call(arguments, 1);
66375 handler.apply(this, args);
66376 }
66377 } else if (isObject(handler)) {
66378 args = Array.prototype.slice.call(arguments, 1);
66379 listeners = handler.slice();
66380 len = listeners.length;
66381 for (i = 0; i < len; i++)
66382 listeners[i].apply(this, args);
66383 }
66384
66385 return true;
66386 };
66387
66388 EventEmitter.prototype.addListener = function(type, listener) {
66389 var m;
66390
66391 if (!isFunction(listener))
66392 throw TypeError('listener must be a function');
66393
66394 if (!this._events)
66395 this._events = {};
66396
66397 // To avoid recursion in the case that type === "newListener"! Before
66398 // adding it to the listeners, first emit "newListener".
66399 if (this._events.newListener)
66400 this.emit('newListener', type,
66401 isFunction(listener.listener) ?
66402 listener.listener : listener);
66403
66404 if (!this._events[type])
66405 // Optimize the case of one listener. Don't need the extra array object.
66406 this._events[type] = listener;
66407 else if (isObject(this._events[type]))
66408 // If we've already got an array, just append.
66409 this._events[type].push(listener);
66410 else
66411 // Adding the second element, need to change to array.
66412 this._events[type] = [this._events[type], listener];
66413
66414 // Check for listener leak
66415 if (isObject(this._events[type]) && !this._events[type].warned) {
66416 if (!isUndefined(this._maxListeners)) {
66417 m = this._maxListeners;
66418 } else {
66419 m = EventEmitter.defaultMaxListeners;
66420 }
66421
66422 if (m && m > 0 && this._events[type].length > m) {
66423 this._events[type].warned = true;
66424 console.error('(node) warning: possible EventEmitter memory ' +
66425 'leak detected. %d listeners added. ' +
66426 'Use emitter.setMaxListeners() to increase limit.',
66427 this._events[type].length);
66428 if (typeof console.trace === 'function') {
66429 // not supported in IE 10
66430 console.trace();
66431 }
66432 }
66433 }
66434
66435 return this;
66436 };
66437
66438 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
66439
66440 EventEmitter.prototype.once = function(type, listener) {
66441 if (!isFunction(listener))
66442 throw TypeError('listener must be a function');
66443
66444 var fired = false;
66445
66446 function g() {
66447 this.removeListener(type, g);
66448
66449 if (!fired) {
66450 fired = true;
66451 listener.apply(this, arguments);
66452 }
66453 }
66454
66455 g.listener = listener;
66456 this.on(type, g);
66457
66458 return this;
66459 };
66460
66461 // emits a 'removeListener' event iff the listener was removed
66462 EventEmitter.prototype.removeListener = function(type, listener) {
66463 var list, position, length, i;
66464
66465 if (!isFunction(listener))
66466 throw TypeError('listener must be a function');
66467
66468 if (!this._events || !this._events[type])
66469 return this;
66470
66471 list = this._events[type];
66472 length = list.length;
66473 position = -1;
66474
66475 if (list === listener ||
66476 (isFunction(list.listener) && list.listener === listener)) {
66477 delete this._events[type];
66478 if (this._events.removeListener)
66479 this.emit('removeListener', type, listener);
66480
66481 } else if (isObject(list)) {
66482 for (i = length; i-- > 0;) {
66483 if (list[i] === listener ||
66484 (list[i].listener && list[i].listener === listener)) {
66485 position = i;
66486 break;
66487 }
66488 }
66489
66490 if (position < 0)
66491 return this;
66492
66493 if (list.length === 1) {
66494 list.length = 0;
66495 delete this._events[type];
66496 } else {
66497 list.splice(position, 1);
66498 }
66499
66500 if (this._events.removeListener)
66501 this.emit('removeListener', type, listener);
66502 }
66503
66504 return this;
66505 };
66506
66507 EventEmitter.prototype.removeAllListeners = function(type) {
66508 var key, listeners;
66509
66510 if (!this._events)
66511 return this;
66512
66513 // not listening for removeListener, no need to emit
66514 if (!this._events.removeListener) {
66515 if (arguments.length === 0)
66516 this._events = {};
66517 else if (this._events[type])
66518 delete this._events[type];
66519 return this;
66520 }
66521
66522 // emit removeListener for all listeners on all events
66523 if (arguments.length === 0) {
66524 for (key in this._events) {
66525 if (key === 'removeListener') continue;
66526 this.removeAllListeners(key);
66527 }
66528 this.removeAllListeners('removeListener');
66529 this._events = {};
66530 return this;
66531 }
66532
66533 listeners = this._events[type];
66534
66535 if (isFunction(listeners)) {
66536 this.removeListener(type, listeners);
66537 } else if (listeners) {
66538 // LIFO order
66539 while (listeners.length)
66540 this.removeListener(type, listeners[listeners.length - 1]);
66541 }
66542 delete this._events[type];
66543
66544 return this;
66545 };
66546
66547 EventEmitter.prototype.listeners = function(type) {
66548 var ret;
66549 if (!this._events || !this._events[type])
66550 ret = [];
66551 else if (isFunction(this._events[type]))
66552 ret = [this._events[type]];
66553 else
66554 ret = this._events[type].slice();
66555 return ret;
66556 };
66557
66558 EventEmitter.prototype.listenerCount = function(type) {
66559 if (this._events) {
66560 var evlistener = this._events[type];
66561
66562 if (isFunction(evlistener))
66563 return 1;
66564 else if (evlistener)
66565 return evlistener.length;
66566 }
66567 return 0;
66568 };
66569
66570 EventEmitter.listenerCount = function(emitter, type) {
66571 return emitter.listenerCount(type);
66572 };
66573
66574 function isFunction(arg) {
66575 return typeof arg === 'function';
66576 }
66577
66578 function isNumber(arg) {
66579 return typeof arg === 'number';
66580 }
66581
66582 function isObject(arg) {
66583 return typeof arg === 'object' && arg !== null;
66584 }
66585
66586 function isUndefined(arg) {
66587 return arg === void 0;
66588 }
66589
66590 },{}],84:[function(require,module,exports){
66591 (function (Buffer){
66592 var md5 = require('create-hash/md5')
66593 module.exports = EVP_BytesToKey
66594 function EVP_BytesToKey (password, salt, keyLen, ivLen) {
66595 if (!Buffer.isBuffer(password)) {
66596 password = new Buffer(password, 'binary')
66597 }
66598 if (salt && !Buffer.isBuffer(salt)) {
66599 salt = new Buffer(salt, 'binary')
66600 }
66601 keyLen = keyLen / 8
66602 ivLen = ivLen || 0
66603 var ki = 0
66604 var ii = 0
66605 var key = new Buffer(keyLen)
66606 var iv = new Buffer(ivLen)
66607 var addmd = 0
66608 var md_buf
66609 var i
66610 var bufs = []
66611 while (true) {
66612 if (addmd++ > 0) {
66613 bufs.push(md_buf)
66614 }
66615 bufs.push(password)
66616 if (salt) {
66617 bufs.push(salt)
66618 }
66619 md_buf = md5(Buffer.concat(bufs))
66620 bufs = []
66621 i = 0
66622 if (keyLen > 0) {
66623 while (true) {
66624 if (keyLen === 0) {
66625 break
66626 }
66627 if (i === md_buf.length) {
66628 break
66629 }
66630 key[ki++] = md_buf[i]
66631 keyLen--
66632 i++
66633 }
66634 }
66635 if (ivLen > 0 && i !== md_buf.length) {
66636 while (true) {
66637 if (ivLen === 0) {
66638 break
66639 }
66640 if (i === md_buf.length) {
66641 break
66642 }
66643 iv[ii++] = md_buf[i]
66644 ivLen--
66645 i++
66646 }
66647 }
66648 if (keyLen === 0 && ivLen === 0) {
66649 break
66650 }
66651 }
66652 for (i = 0; i < md_buf.length; i++) {
66653 md_buf[i] = 0
66654 }
66655 return {
66656 key: key,
66657 iv: iv
66658 }
66659 }
66660
66661 }).call(this,require("buffer").Buffer)
66662 },{"buffer":47,"create-hash/md5":53}],85:[function(require,module,exports){
66663 (function (Buffer){
66664 'use strict'
66665 var Transform = require('stream').Transform
66666 var inherits = require('inherits')
66667
66668 function HashBase (blockSize) {
66669 Transform.call(this)
66670
66671 this._block = new Buffer(blockSize)
66672 this._blockSize = blockSize
66673 this._blockOffset = 0
66674 this._length = [0, 0, 0, 0]
66675
66676 this._finalized = false
66677 }
66678
66679 inherits(HashBase, Transform)
66680
66681 HashBase.prototype._transform = function (chunk, encoding, callback) {
66682 var error = null
66683 try {
66684 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
66685 this.update(chunk)
66686 } catch (err) {
66687 error = err
66688 }
66689
66690 callback(error)
66691 }
66692
66693 HashBase.prototype._flush = function (callback) {
66694 var error = null
66695 try {
66696 this.push(this._digest())
66697 } catch (err) {
66698 error = err
66699 }
66700
66701 callback(error)
66702 }
66703
66704 HashBase.prototype.update = function (data, encoding) {
66705 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
66706 if (this._finalized) throw new Error('Digest already called')
66707 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
66708
66709 // consume data
66710 var block = this._block
66711 var offset = 0
66712 while (this._blockOffset + data.length - offset >= this._blockSize) {
66713 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
66714 this._update()
66715 this._blockOffset = 0
66716 }
66717 while (offset < data.length) block[this._blockOffset++] = data[offset++]
66718
66719 // update length
66720 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
66721 this._length[j] += carry
66722 carry = (this._length[j] / 0x0100000000) | 0
66723 if (carry > 0) this._length[j] -= 0x0100000000 * carry
66724 }
66725
66726 return this
66727 }
66728
66729 HashBase.prototype._update = function (data) {
66730 throw new Error('_update is not implemented')
66731 }
66732
66733 HashBase.prototype.digest = function (encoding) {
66734 if (this._finalized) throw new Error('Digest already called')
66735 this._finalized = true
66736
66737 var digest = this._digest()
66738 if (encoding !== undefined) digest = digest.toString(encoding)
66739 return digest
66740 }
66741
66742 HashBase.prototype._digest = function () {
66743 throw new Error('_digest is not implemented')
66744 }
66745
66746 module.exports = HashBase
66747
66748 }).call(this,require("buffer").Buffer)
66749 },{"buffer":47,"inherits":95,"stream":143}],86:[function(require,module,exports){
66750 var hash = exports;
66751
66752 hash.utils = require('./hash/utils');
66753 hash.common = require('./hash/common');
66754 hash.sha = require('./hash/sha');
66755 hash.ripemd = require('./hash/ripemd');
66756 hash.hmac = require('./hash/hmac');
66757
66758 // Proxy hash functions to the main object
66759 hash.sha1 = hash.sha.sha1;
66760 hash.sha256 = hash.sha.sha256;
66761 hash.sha224 = hash.sha.sha224;
66762 hash.sha384 = hash.sha.sha384;
66763 hash.sha512 = hash.sha.sha512;
66764 hash.ripemd160 = hash.ripemd.ripemd160;
66765
66766 },{"./hash/common":87,"./hash/hmac":88,"./hash/ripemd":89,"./hash/sha":90,"./hash/utils":91}],87:[function(require,module,exports){
66767 var hash = require('../hash');
66768 var utils = hash.utils;
66769 var assert = utils.assert;
66770
66771 function BlockHash() {
66772 this.pending = null;
66773 this.pendingTotal = 0;
66774 this.blockSize = this.constructor.blockSize;
66775 this.outSize = this.constructor.outSize;
66776 this.hmacStrength = this.constructor.hmacStrength;
66777 this.padLength = this.constructor.padLength / 8;
66778 this.endian = 'big';
66779
66780 this._delta8 = this.blockSize / 8;
66781 this._delta32 = this.blockSize / 32;
66782 }
66783 exports.BlockHash = BlockHash;
66784
66785 BlockHash.prototype.update = function update(msg, enc) {
66786 // Convert message to array, pad it, and join into 32bit blocks
66787 msg = utils.toArray(msg, enc);
66788 if (!this.pending)
66789 this.pending = msg;
66790 else
66791 this.pending = this.pending.concat(msg);
66792 this.pendingTotal += msg.length;
66793
66794 // Enough data, try updating
66795 if (this.pending.length >= this._delta8) {
66796 msg = this.pending;
66797
66798 // Process pending data in blocks
66799 var r = msg.length % this._delta8;
66800 this.pending = msg.slice(msg.length - r, msg.length);
66801 if (this.pending.length === 0)
66802 this.pending = null;
66803
66804 msg = utils.join32(msg, 0, msg.length - r, this.endian);
66805 for (var i = 0; i < msg.length; i += this._delta32)
66806 this._update(msg, i, i + this._delta32);
66807 }
66808
66809 return this;
66810 };
66811
66812 BlockHash.prototype.digest = function digest(enc) {
66813 this.update(this._pad());
66814 assert(this.pending === null);
66815
66816 return this._digest(enc);
66817 };
66818
66819 BlockHash.prototype._pad = function pad() {
66820 var len = this.pendingTotal;
66821 var bytes = this._delta8;
66822 var k = bytes - ((len + this.padLength) % bytes);
66823 var res = new Array(k + this.padLength);
66824 res[0] = 0x80;
66825 for (var i = 1; i < k; i++)
66826 res[i] = 0;
66827
66828 // Append length
66829 len <<= 3;
66830 if (this.endian === 'big') {
66831 for (var t = 8; t < this.padLength; t++)
66832 res[i++] = 0;
66833
66834 res[i++] = 0;
66835 res[i++] = 0;
66836 res[i++] = 0;
66837 res[i++] = 0;
66838 res[i++] = (len >>> 24) & 0xff;
66839 res[i++] = (len >>> 16) & 0xff;
66840 res[i++] = (len >>> 8) & 0xff;
66841 res[i++] = len & 0xff;
66842 } else {
66843 res[i++] = len & 0xff;
66844 res[i++] = (len >>> 8) & 0xff;
66845 res[i++] = (len >>> 16) & 0xff;
66846 res[i++] = (len >>> 24) & 0xff;
66847 res[i++] = 0;
66848 res[i++] = 0;
66849 res[i++] = 0;
66850 res[i++] = 0;
66851
66852 for (var t = 8; t < this.padLength; t++)
66853 res[i++] = 0;
66854 }
66855
66856 return res;
66857 };
66858
66859 },{"../hash":86}],88:[function(require,module,exports){
66860 var hmac = exports;
66861
66862 var hash = require('../hash');
66863 var utils = hash.utils;
66864 var assert = utils.assert;
66865
66866 function Hmac(hash, key, enc) {
66867 if (!(this instanceof Hmac))
66868 return new Hmac(hash, key, enc);
66869 this.Hash = hash;
66870 this.blockSize = hash.blockSize / 8;
66871 this.outSize = hash.outSize / 8;
66872 this.inner = null;
66873 this.outer = null;
66874
66875 this._init(utils.toArray(key, enc));
66876 }
66877 module.exports = Hmac;
66878
66879 Hmac.prototype._init = function init(key) {
66880 // Shorten key, if needed
66881 if (key.length > this.blockSize)
66882 key = new this.Hash().update(key).digest();
66883 assert(key.length <= this.blockSize);
66884
66885 // Add padding to key
66886 for (var i = key.length; i < this.blockSize; i++)
66887 key.push(0);
66888
66889 for (var i = 0; i < key.length; i++)
66890 key[i] ^= 0x36;
66891 this.inner = new this.Hash().update(key);
66892
66893 // 0x36 ^ 0x5c = 0x6a
66894 for (var i = 0; i < key.length; i++)
66895 key[i] ^= 0x6a;
66896 this.outer = new this.Hash().update(key);
66897 };
66898
66899 Hmac.prototype.update = function update(msg, enc) {
66900 this.inner.update(msg, enc);
66901 return this;
66902 };
66903
66904 Hmac.prototype.digest = function digest(enc) {
66905 this.outer.update(this.inner.digest());
66906 return this.outer.digest(enc);
66907 };
66908
66909 },{"../hash":86}],89:[function(require,module,exports){
66910 var hash = require('../hash');
66911 var utils = hash.utils;
66912
66913 var rotl32 = utils.rotl32;
66914 var sum32 = utils.sum32;
66915 var sum32_3 = utils.sum32_3;
66916 var sum32_4 = utils.sum32_4;
66917 var BlockHash = hash.common.BlockHash;
66918
66919 function RIPEMD160() {
66920 if (!(this instanceof RIPEMD160))
66921 return new RIPEMD160();
66922
66923 BlockHash.call(this);
66924
66925 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
66926 this.endian = 'little';
66927 }
66928 utils.inherits(RIPEMD160, BlockHash);
66929 exports.ripemd160 = RIPEMD160;
66930
66931 RIPEMD160.blockSize = 512;
66932 RIPEMD160.outSize = 160;
66933 RIPEMD160.hmacStrength = 192;
66934 RIPEMD160.padLength = 64;
66935
66936 RIPEMD160.prototype._update = function update(msg, start) {
66937 var A = this.h[0];
66938 var B = this.h[1];
66939 var C = this.h[2];
66940 var D = this.h[3];
66941 var E = this.h[4];
66942 var Ah = A;
66943 var Bh = B;
66944 var Ch = C;
66945 var Dh = D;
66946 var Eh = E;
66947 for (var j = 0; j < 80; j++) {
66948 var T = sum32(
66949 rotl32(
66950 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
66951 s[j]),
66952 E);
66953 A = E;
66954 E = D;
66955 D = rotl32(C, 10);
66956 C = B;
66957 B = T;
66958 T = sum32(
66959 rotl32(
66960 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
66961 sh[j]),
66962 Eh);
66963 Ah = Eh;
66964 Eh = Dh;
66965 Dh = rotl32(Ch, 10);
66966 Ch = Bh;
66967 Bh = T;
66968 }
66969 T = sum32_3(this.h[1], C, Dh);
66970 this.h[1] = sum32_3(this.h[2], D, Eh);
66971 this.h[2] = sum32_3(this.h[3], E, Ah);
66972 this.h[3] = sum32_3(this.h[4], A, Bh);
66973 this.h[4] = sum32_3(this.h[0], B, Ch);
66974 this.h[0] = T;
66975 };
66976
66977 RIPEMD160.prototype._digest = function digest(enc) {
66978 if (enc === 'hex')
66979 return utils.toHex32(this.h, 'little');
66980 else
66981 return utils.split32(this.h, 'little');
66982 };
66983
66984 function f(j, x, y, z) {
66985 if (j <= 15)
66986 return x ^ y ^ z;
66987 else if (j <= 31)
66988 return (x & y) | ((~x) & z);
66989 else if (j <= 47)
66990 return (x | (~y)) ^ z;
66991 else if (j <= 63)
66992 return (x & z) | (y & (~z));
66993 else
66994 return x ^ (y | (~z));
66995 }
66996
66997 function K(j) {
66998 if (j <= 15)
66999 return 0x00000000;
67000 else if (j <= 31)
67001 return 0x5a827999;
67002 else if (j <= 47)
67003 return 0x6ed9eba1;
67004 else if (j <= 63)
67005 return 0x8f1bbcdc;
67006 else
67007 return 0xa953fd4e;
67008 }
67009
67010 function Kh(j) {
67011 if (j <= 15)
67012 return 0x50a28be6;
67013 else if (j <= 31)
67014 return 0x5c4dd124;
67015 else if (j <= 47)
67016 return 0x6d703ef3;
67017 else if (j <= 63)
67018 return 0x7a6d76e9;
67019 else
67020 return 0x00000000;
67021 }
67022
67023 var r = [
67024 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
67025 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
67026 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
67027 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
67028 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
67029 ];
67030
67031 var rh = [
67032 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
67033 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
67034 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
67035 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
67036 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
67037 ];
67038
67039 var s = [
67040 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
67041 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
67042 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
67043 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
67044 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
67045 ];
67046
67047 var sh = [
67048 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
67049 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
67050 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
67051 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
67052 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
67053 ];
67054
67055 },{"../hash":86}],90:[function(require,module,exports){
67056 var hash = require('../hash');
67057 var utils = hash.utils;
67058 var assert = utils.assert;
67059
67060 var rotr32 = utils.rotr32;
67061 var rotl32 = utils.rotl32;
67062 var sum32 = utils.sum32;
67063 var sum32_4 = utils.sum32_4;
67064 var sum32_5 = utils.sum32_5;
67065 var rotr64_hi = utils.rotr64_hi;
67066 var rotr64_lo = utils.rotr64_lo;
67067 var shr64_hi = utils.shr64_hi;
67068 var shr64_lo = utils.shr64_lo;
67069 var sum64 = utils.sum64;
67070 var sum64_hi = utils.sum64_hi;
67071 var sum64_lo = utils.sum64_lo;
67072 var sum64_4_hi = utils.sum64_4_hi;
67073 var sum64_4_lo = utils.sum64_4_lo;
67074 var sum64_5_hi = utils.sum64_5_hi;
67075 var sum64_5_lo = utils.sum64_5_lo;
67076 var BlockHash = hash.common.BlockHash;
67077
67078 var sha256_K = [
67079 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
67080 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
67081 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
67082 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
67083 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
67084 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
67085 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
67086 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
67087 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
67088 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
67089 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
67090 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
67091 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
67092 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
67093 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
67094 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
67095 ];
67096
67097 var sha512_K = [
67098 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
67099 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
67100 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
67101 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
67102 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
67103 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
67104 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
67105 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
67106 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
67107 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
67108 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
67109 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
67110 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
67111 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
67112 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
67113 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
67114 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
67115 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
67116 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
67117 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
67118 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
67119 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
67120 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
67121 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
67122 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
67123 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
67124 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
67125 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
67126 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
67127 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
67128 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
67129 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
67130 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
67131 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
67132 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
67133 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
67134 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
67135 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
67136 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
67137 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
67138 ];
67139
67140 var sha1_K = [
67141 0x5A827999, 0x6ED9EBA1,
67142 0x8F1BBCDC, 0xCA62C1D6
67143 ];
67144
67145 function SHA256() {
67146 if (!(this instanceof SHA256))
67147 return new SHA256();
67148
67149 BlockHash.call(this);
67150 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
67151 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
67152 this.k = sha256_K;
67153 this.W = new Array(64);
67154 }
67155 utils.inherits(SHA256, BlockHash);
67156 exports.sha256 = SHA256;
67157
67158 SHA256.blockSize = 512;
67159 SHA256.outSize = 256;
67160 SHA256.hmacStrength = 192;
67161 SHA256.padLength = 64;
67162
67163 SHA256.prototype._update = function _update(msg, start) {
67164 var W = this.W;
67165
67166 for (var i = 0; i < 16; i++)
67167 W[i] = msg[start + i];
67168 for (; i < W.length; i++)
67169 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
67170
67171 var a = this.h[0];
67172 var b = this.h[1];
67173 var c = this.h[2];
67174 var d = this.h[3];
67175 var e = this.h[4];
67176 var f = this.h[5];
67177 var g = this.h[6];
67178 var h = this.h[7];
67179
67180 assert(this.k.length === W.length);
67181 for (var i = 0; i < W.length; i++) {
67182 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
67183 var T2 = sum32(s0_256(a), maj32(a, b, c));
67184 h = g;
67185 g = f;
67186 f = e;
67187 e = sum32(d, T1);
67188 d = c;
67189 c = b;
67190 b = a;
67191 a = sum32(T1, T2);
67192 }
67193
67194 this.h[0] = sum32(this.h[0], a);
67195 this.h[1] = sum32(this.h[1], b);
67196 this.h[2] = sum32(this.h[2], c);
67197 this.h[3] = sum32(this.h[3], d);
67198 this.h[4] = sum32(this.h[4], e);
67199 this.h[5] = sum32(this.h[5], f);
67200 this.h[6] = sum32(this.h[6], g);
67201 this.h[7] = sum32(this.h[7], h);
67202 };
67203
67204 SHA256.prototype._digest = function digest(enc) {
67205 if (enc === 'hex')
67206 return utils.toHex32(this.h, 'big');
67207 else
67208 return utils.split32(this.h, 'big');
67209 };
67210
67211 function SHA224() {
67212 if (!(this instanceof SHA224))
67213 return new SHA224();
67214
67215 SHA256.call(this);
67216 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
67217 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
67218 }
67219 utils.inherits(SHA224, SHA256);
67220 exports.sha224 = SHA224;
67221
67222 SHA224.blockSize = 512;
67223 SHA224.outSize = 224;
67224 SHA224.hmacStrength = 192;
67225 SHA224.padLength = 64;
67226
67227 SHA224.prototype._digest = function digest(enc) {
67228 // Just truncate output
67229 if (enc === 'hex')
67230 return utils.toHex32(this.h.slice(0, 7), 'big');
67231 else
67232 return utils.split32(this.h.slice(0, 7), 'big');
67233 };
67234
67235 function SHA512() {
67236 if (!(this instanceof SHA512))
67237 return new SHA512();
67238
67239 BlockHash.call(this);
67240 this.h = [ 0x6a09e667, 0xf3bcc908,
67241 0xbb67ae85, 0x84caa73b,
67242 0x3c6ef372, 0xfe94f82b,
67243 0xa54ff53a, 0x5f1d36f1,
67244 0x510e527f, 0xade682d1,
67245 0x9b05688c, 0x2b3e6c1f,
67246 0x1f83d9ab, 0xfb41bd6b,
67247 0x5be0cd19, 0x137e2179 ];
67248 this.k = sha512_K;
67249 this.W = new Array(160);
67250 }
67251 utils.inherits(SHA512, BlockHash);
67252 exports.sha512 = SHA512;
67253
67254 SHA512.blockSize = 1024;
67255 SHA512.outSize = 512;
67256 SHA512.hmacStrength = 192;
67257 SHA512.padLength = 128;
67258
67259 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
67260 var W = this.W;
67261
67262 // 32 x 32bit words
67263 for (var i = 0; i < 32; i++)
67264 W[i] = msg[start + i];
67265 for (; i < W.length; i += 2) {
67266 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
67267 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
67268 var c1_hi = W[i - 14]; // i - 7
67269 var c1_lo = W[i - 13];
67270 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
67271 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
67272 var c3_hi = W[i - 32]; // i - 16
67273 var c3_lo = W[i - 31];
67274
67275 W[i] = sum64_4_hi(c0_hi, c0_lo,
67276 c1_hi, c1_lo,
67277 c2_hi, c2_lo,
67278 c3_hi, c3_lo);
67279 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
67280 c1_hi, c1_lo,
67281 c2_hi, c2_lo,
67282 c3_hi, c3_lo);
67283 }
67284 };
67285
67286 SHA512.prototype._update = function _update(msg, start) {
67287 this._prepareBlock(msg, start);
67288
67289 var W = this.W;
67290
67291 var ah = this.h[0];
67292 var al = this.h[1];
67293 var bh = this.h[2];
67294 var bl = this.h[3];
67295 var ch = this.h[4];
67296 var cl = this.h[5];
67297 var dh = this.h[6];
67298 var dl = this.h[7];
67299 var eh = this.h[8];
67300 var el = this.h[9];
67301 var fh = this.h[10];
67302 var fl = this.h[11];
67303 var gh = this.h[12];
67304 var gl = this.h[13];
67305 var hh = this.h[14];
67306 var hl = this.h[15];
67307
67308 assert(this.k.length === W.length);
67309 for (var i = 0; i < W.length; i += 2) {
67310 var c0_hi = hh;
67311 var c0_lo = hl;
67312 var c1_hi = s1_512_hi(eh, el);
67313 var c1_lo = s1_512_lo(eh, el);
67314 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
67315 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
67316 var c3_hi = this.k[i];
67317 var c3_lo = this.k[i + 1];
67318 var c4_hi = W[i];
67319 var c4_lo = W[i + 1];
67320
67321 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
67322 c1_hi, c1_lo,
67323 c2_hi, c2_lo,
67324 c3_hi, c3_lo,
67325 c4_hi, c4_lo);
67326 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
67327 c1_hi, c1_lo,
67328 c2_hi, c2_lo,
67329 c3_hi, c3_lo,
67330 c4_hi, c4_lo);
67331
67332 var c0_hi = s0_512_hi(ah, al);
67333 var c0_lo = s0_512_lo(ah, al);
67334 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
67335 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
67336
67337 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
67338 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
67339
67340 hh = gh;
67341 hl = gl;
67342
67343 gh = fh;
67344 gl = fl;
67345
67346 fh = eh;
67347 fl = el;
67348
67349 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
67350 el = sum64_lo(dl, dl, T1_hi, T1_lo);
67351
67352 dh = ch;
67353 dl = cl;
67354
67355 ch = bh;
67356 cl = bl;
67357
67358 bh = ah;
67359 bl = al;
67360
67361 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
67362 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
67363 }
67364
67365 sum64(this.h, 0, ah, al);
67366 sum64(this.h, 2, bh, bl);
67367 sum64(this.h, 4, ch, cl);
67368 sum64(this.h, 6, dh, dl);
67369 sum64(this.h, 8, eh, el);
67370 sum64(this.h, 10, fh, fl);
67371 sum64(this.h, 12, gh, gl);
67372 sum64(this.h, 14, hh, hl);
67373 };
67374
67375 SHA512.prototype._digest = function digest(enc) {
67376 if (enc === 'hex')
67377 return utils.toHex32(this.h, 'big');
67378 else
67379 return utils.split32(this.h, 'big');
67380 };
67381
67382 function SHA384() {
67383 if (!(this instanceof SHA384))
67384 return new SHA384();
67385
67386 SHA512.call(this);
67387 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
67388 0x629a292a, 0x367cd507,
67389 0x9159015a, 0x3070dd17,
67390 0x152fecd8, 0xf70e5939,
67391 0x67332667, 0xffc00b31,
67392 0x8eb44a87, 0x68581511,
67393 0xdb0c2e0d, 0x64f98fa7,
67394 0x47b5481d, 0xbefa4fa4 ];
67395 }
67396 utils.inherits(SHA384, SHA512);
67397 exports.sha384 = SHA384;
67398
67399 SHA384.blockSize = 1024;
67400 SHA384.outSize = 384;
67401 SHA384.hmacStrength = 192;
67402 SHA384.padLength = 128;
67403
67404 SHA384.prototype._digest = function digest(enc) {
67405 if (enc === 'hex')
67406 return utils.toHex32(this.h.slice(0, 12), 'big');
67407 else
67408 return utils.split32(this.h.slice(0, 12), 'big');
67409 };
67410
67411 function SHA1() {
67412 if (!(this instanceof SHA1))
67413 return new SHA1();
67414
67415 BlockHash.call(this);
67416 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
67417 0x10325476, 0xc3d2e1f0 ];
67418 this.W = new Array(80);
67419 }
67420
67421 utils.inherits(SHA1, BlockHash);
67422 exports.sha1 = SHA1;
67423
67424 SHA1.blockSize = 512;
67425 SHA1.outSize = 160;
67426 SHA1.hmacStrength = 80;
67427 SHA1.padLength = 64;
67428
67429 SHA1.prototype._update = function _update(msg, start) {
67430 var W = this.W;
67431
67432 for (var i = 0; i < 16; i++)
67433 W[i] = msg[start + i];
67434
67435 for(; i < W.length; i++)
67436 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
67437
67438 var a = this.h[0];
67439 var b = this.h[1];
67440 var c = this.h[2];
67441 var d = this.h[3];
67442 var e = this.h[4];
67443
67444 for (var i = 0; i < W.length; i++) {
67445 var s = ~~(i / 20);
67446 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
67447 e = d;
67448 d = c;
67449 c = rotl32(b, 30);
67450 b = a;
67451 a = t;
67452 }
67453
67454 this.h[0] = sum32(this.h[0], a);
67455 this.h[1] = sum32(this.h[1], b);
67456 this.h[2] = sum32(this.h[2], c);
67457 this.h[3] = sum32(this.h[3], d);
67458 this.h[4] = sum32(this.h[4], e);
67459 };
67460
67461 SHA1.prototype._digest = function digest(enc) {
67462 if (enc === 'hex')
67463 return utils.toHex32(this.h, 'big');
67464 else
67465 return utils.split32(this.h, 'big');
67466 };
67467
67468 function ch32(x, y, z) {
67469 return (x & y) ^ ((~x) & z);
67470 }
67471
67472 function maj32(x, y, z) {
67473 return (x & y) ^ (x & z) ^ (y & z);
67474 }
67475
67476 function p32(x, y, z) {
67477 return x ^ y ^ z;
67478 }
67479
67480 function s0_256(x) {
67481 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
67482 }
67483
67484 function s1_256(x) {
67485 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
67486 }
67487
67488 function g0_256(x) {
67489 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
67490 }
67491
67492 function g1_256(x) {
67493 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
67494 }
67495
67496 function ft_1(s, x, y, z) {
67497 if (s === 0)
67498 return ch32(x, y, z);
67499 if (s === 1 || s === 3)
67500 return p32(x, y, z);
67501 if (s === 2)
67502 return maj32(x, y, z);
67503 }
67504
67505 function ch64_hi(xh, xl, yh, yl, zh, zl) {
67506 var r = (xh & yh) ^ ((~xh) & zh);
67507 if (r < 0)
67508 r += 0x100000000;
67509 return r;
67510 }
67511
67512 function ch64_lo(xh, xl, yh, yl, zh, zl) {
67513 var r = (xl & yl) ^ ((~xl) & zl);
67514 if (r < 0)
67515 r += 0x100000000;
67516 return r;
67517 }
67518
67519 function maj64_hi(xh, xl, yh, yl, zh, zl) {
67520 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
67521 if (r < 0)
67522 r += 0x100000000;
67523 return r;
67524 }
67525
67526 function maj64_lo(xh, xl, yh, yl, zh, zl) {
67527 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
67528 if (r < 0)
67529 r += 0x100000000;
67530 return r;
67531 }
67532
67533 function s0_512_hi(xh, xl) {
67534 var c0_hi = rotr64_hi(xh, xl, 28);
67535 var c1_hi = rotr64_hi(xl, xh, 2); // 34
67536 var c2_hi = rotr64_hi(xl, xh, 7); // 39
67537
67538 var r = c0_hi ^ c1_hi ^ c2_hi;
67539 if (r < 0)
67540 r += 0x100000000;
67541 return r;
67542 }
67543
67544 function s0_512_lo(xh, xl) {
67545 var c0_lo = rotr64_lo(xh, xl, 28);
67546 var c1_lo = rotr64_lo(xl, xh, 2); // 34
67547 var c2_lo = rotr64_lo(xl, xh, 7); // 39
67548
67549 var r = c0_lo ^ c1_lo ^ c2_lo;
67550 if (r < 0)
67551 r += 0x100000000;
67552 return r;
67553 }
67554
67555 function s1_512_hi(xh, xl) {
67556 var c0_hi = rotr64_hi(xh, xl, 14);
67557 var c1_hi = rotr64_hi(xh, xl, 18);
67558 var c2_hi = rotr64_hi(xl, xh, 9); // 41
67559
67560 var r = c0_hi ^ c1_hi ^ c2_hi;
67561 if (r < 0)
67562 r += 0x100000000;
67563 return r;
67564 }
67565
67566 function s1_512_lo(xh, xl) {
67567 var c0_lo = rotr64_lo(xh, xl, 14);
67568 var c1_lo = rotr64_lo(xh, xl, 18);
67569 var c2_lo = rotr64_lo(xl, xh, 9); // 41
67570
67571 var r = c0_lo ^ c1_lo ^ c2_lo;
67572 if (r < 0)
67573 r += 0x100000000;
67574 return r;
67575 }
67576
67577 function g0_512_hi(xh, xl) {
67578 var c0_hi = rotr64_hi(xh, xl, 1);
67579 var c1_hi = rotr64_hi(xh, xl, 8);
67580 var c2_hi = shr64_hi(xh, xl, 7);
67581
67582 var r = c0_hi ^ c1_hi ^ c2_hi;
67583 if (r < 0)
67584 r += 0x100000000;
67585 return r;
67586 }
67587
67588 function g0_512_lo(xh, xl) {
67589 var c0_lo = rotr64_lo(xh, xl, 1);
67590 var c1_lo = rotr64_lo(xh, xl, 8);
67591 var c2_lo = shr64_lo(xh, xl, 7);
67592
67593 var r = c0_lo ^ c1_lo ^ c2_lo;
67594 if (r < 0)
67595 r += 0x100000000;
67596 return r;
67597 }
67598
67599 function g1_512_hi(xh, xl) {
67600 var c0_hi = rotr64_hi(xh, xl, 19);
67601 var c1_hi = rotr64_hi(xl, xh, 29); // 61
67602 var c2_hi = shr64_hi(xh, xl, 6);
67603
67604 var r = c0_hi ^ c1_hi ^ c2_hi;
67605 if (r < 0)
67606 r += 0x100000000;
67607 return r;
67608 }
67609
67610 function g1_512_lo(xh, xl) {
67611 var c0_lo = rotr64_lo(xh, xl, 19);
67612 var c1_lo = rotr64_lo(xl, xh, 29); // 61
67613 var c2_lo = shr64_lo(xh, xl, 6);
67614
67615 var r = c0_lo ^ c1_lo ^ c2_lo;
67616 if (r < 0)
67617 r += 0x100000000;
67618 return r;
67619 }
67620
67621 },{"../hash":86}],91:[function(require,module,exports){
67622 var utils = exports;
67623 var inherits = require('inherits');
67624
67625 function toArray(msg, enc) {
67626 if (Array.isArray(msg))
67627 return msg.slice();
67628 if (!msg)
67629 return [];
67630 var res = [];
67631 if (typeof msg === 'string') {
67632 if (!enc) {
67633 for (var i = 0; i < msg.length; i++) {
67634 var c = msg.charCodeAt(i);
67635 var hi = c >> 8;
67636 var lo = c & 0xff;
67637 if (hi)
67638 res.push(hi, lo);
67639 else
67640 res.push(lo);
67641 }
67642 } else if (enc === 'hex') {
67643 msg = msg.replace(/[^a-z0-9]+/ig, '');
67644 if (msg.length % 2 !== 0)
67645 msg = '0' + msg;
67646 for (var i = 0; i < msg.length; i += 2)
67647 res.push(parseInt(msg[i] + msg[i + 1], 16));
67648 }
67649 } else {
67650 for (var i = 0; i < msg.length; i++)
67651 res[i] = msg[i] | 0;
67652 }
67653 return res;
67654 }
67655 utils.toArray = toArray;
67656
67657 function toHex(msg) {
67658 var res = '';
67659 for (var i = 0; i < msg.length; i++)
67660 res += zero2(msg[i].toString(16));
67661 return res;
67662 }
67663 utils.toHex = toHex;
67664
67665 function htonl(w) {
67666 var res = (w >>> 24) |
67667 ((w >>> 8) & 0xff00) |
67668 ((w << 8) & 0xff0000) |
67669 ((w & 0xff) << 24);
67670 return res >>> 0;
67671 }
67672 utils.htonl = htonl;
67673
67674 function toHex32(msg, endian) {
67675 var res = '';
67676 for (var i = 0; i < msg.length; i++) {
67677 var w = msg[i];
67678 if (endian === 'little')
67679 w = htonl(w);
67680 res += zero8(w.toString(16));
67681 }
67682 return res;
67683 }
67684 utils.toHex32 = toHex32;
67685
67686 function zero2(word) {
67687 if (word.length === 1)
67688 return '0' + word;
67689 else
67690 return word;
67691 }
67692 utils.zero2 = zero2;
67693
67694 function zero8(word) {
67695 if (word.length === 7)
67696 return '0' + word;
67697 else if (word.length === 6)
67698 return '00' + word;
67699 else if (word.length === 5)
67700 return '000' + word;
67701 else if (word.length === 4)
67702 return '0000' + word;
67703 else if (word.length === 3)
67704 return '00000' + word;
67705 else if (word.length === 2)
67706 return '000000' + word;
67707 else if (word.length === 1)
67708 return '0000000' + word;
67709 else
67710 return word;
67711 }
67712 utils.zero8 = zero8;
67713
67714 function join32(msg, start, end, endian) {
67715 var len = end - start;
67716 assert(len % 4 === 0);
67717 var res = new Array(len / 4);
67718 for (var i = 0, k = start; i < res.length; i++, k += 4) {
67719 var w;
67720 if (endian === 'big')
67721 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
67722 else
67723 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
67724 res[i] = w >>> 0;
67725 }
67726 return res;
67727 }
67728 utils.join32 = join32;
67729
67730 function split32(msg, endian) {
67731 var res = new Array(msg.length * 4);
67732 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
67733 var m = msg[i];
67734 if (endian === 'big') {
67735 res[k] = m >>> 24;
67736 res[k + 1] = (m >>> 16) & 0xff;
67737 res[k + 2] = (m >>> 8) & 0xff;
67738 res[k + 3] = m & 0xff;
67739 } else {
67740 res[k + 3] = m >>> 24;
67741 res[k + 2] = (m >>> 16) & 0xff;
67742 res[k + 1] = (m >>> 8) & 0xff;
67743 res[k] = m & 0xff;
67744 }
67745 }
67746 return res;
67747 }
67748 utils.split32 = split32;
67749
67750 function rotr32(w, b) {
67751 return (w >>> b) | (w << (32 - b));
67752 }
67753 utils.rotr32 = rotr32;
67754
67755 function rotl32(w, b) {
67756 return (w << b) | (w >>> (32 - b));
67757 }
67758 utils.rotl32 = rotl32;
67759
67760 function sum32(a, b) {
67761 return (a + b) >>> 0;
67762 }
67763 utils.sum32 = sum32;
67764
67765 function sum32_3(a, b, c) {
67766 return (a + b + c) >>> 0;
67767 }
67768 utils.sum32_3 = sum32_3;
67769
67770 function sum32_4(a, b, c, d) {
67771 return (a + b + c + d) >>> 0;
67772 }
67773 utils.sum32_4 = sum32_4;
67774
67775 function sum32_5(a, b, c, d, e) {
67776 return (a + b + c + d + e) >>> 0;
67777 }
67778 utils.sum32_5 = sum32_5;
67779
67780 function assert(cond, msg) {
67781 if (!cond)
67782 throw new Error(msg || 'Assertion failed');
67783 }
67784 utils.assert = assert;
67785
67786 utils.inherits = inherits;
67787
67788 function sum64(buf, pos, ah, al) {
67789 var bh = buf[pos];
67790 var bl = buf[pos + 1];
67791
67792 var lo = (al + bl) >>> 0;
67793 var hi = (lo < al ? 1 : 0) + ah + bh;
67794 buf[pos] = hi >>> 0;
67795 buf[pos + 1] = lo;
67796 }
67797 exports.sum64 = sum64;
67798
67799 function sum64_hi(ah, al, bh, bl) {
67800 var lo = (al + bl) >>> 0;
67801 var hi = (lo < al ? 1 : 0) + ah + bh;
67802 return hi >>> 0;
67803 };
67804 exports.sum64_hi = sum64_hi;
67805
67806 function sum64_lo(ah, al, bh, bl) {
67807 var lo = al + bl;
67808 return lo >>> 0;
67809 };
67810 exports.sum64_lo = sum64_lo;
67811
67812 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
67813 var carry = 0;
67814 var lo = al;
67815 lo = (lo + bl) >>> 0;
67816 carry += lo < al ? 1 : 0;
67817 lo = (lo + cl) >>> 0;
67818 carry += lo < cl ? 1 : 0;
67819 lo = (lo + dl) >>> 0;
67820 carry += lo < dl ? 1 : 0;
67821
67822 var hi = ah + bh + ch + dh + carry;
67823 return hi >>> 0;
67824 };
67825 exports.sum64_4_hi = sum64_4_hi;
67826
67827 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
67828 var lo = al + bl + cl + dl;
67829 return lo >>> 0;
67830 };
67831 exports.sum64_4_lo = sum64_4_lo;
67832
67833 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
67834 var carry = 0;
67835 var lo = al;
67836 lo = (lo + bl) >>> 0;
67837 carry += lo < al ? 1 : 0;
67838 lo = (lo + cl) >>> 0;
67839 carry += lo < cl ? 1 : 0;
67840 lo = (lo + dl) >>> 0;
67841 carry += lo < dl ? 1 : 0;
67842 lo = (lo + el) >>> 0;
67843 carry += lo < el ? 1 : 0;
67844
67845 var hi = ah + bh + ch + dh + eh + carry;
67846 return hi >>> 0;
67847 };
67848 exports.sum64_5_hi = sum64_5_hi;
67849
67850 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
67851 var lo = al + bl + cl + dl + el;
67852
67853 return lo >>> 0;
67854 };
67855 exports.sum64_5_lo = sum64_5_lo;
67856
67857 function rotr64_hi(ah, al, num) {
67858 var r = (al << (32 - num)) | (ah >>> num);
67859 return r >>> 0;
67860 };
67861 exports.rotr64_hi = rotr64_hi;
67862
67863 function rotr64_lo(ah, al, num) {
67864 var r = (ah << (32 - num)) | (al >>> num);
67865 return r >>> 0;
67866 };
67867 exports.rotr64_lo = rotr64_lo;
67868
67869 function shr64_hi(ah, al, num) {
67870 return ah >>> num;
67871 };
67872 exports.shr64_hi = shr64_hi;
67873
67874 function shr64_lo(ah, al, num) {
67875 var r = (ah << (32 - num)) | (al >>> num);
67876 return r >>> 0;
67877 };
67878 exports.shr64_lo = shr64_lo;
67879
67880 },{"inherits":95}],92:[function(require,module,exports){
67881 'use strict';
67882
67883 var hash = require('hash.js');
67884 var utils = require('minimalistic-crypto-utils');
67885 var assert = require('minimalistic-assert');
67886
67887 function HmacDRBG(options) {
67888 if (!(this instanceof HmacDRBG))
67889 return new HmacDRBG(options);
67890 this.hash = options.hash;
67891 this.predResist = !!options.predResist;
67892
67893 this.outLen = this.hash.outSize;
67894 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
67895
67896 this._reseed = null;
67897 this.reseedInterval = null;
67898 this.K = null;
67899 this.V = null;
67900
67901 var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');
67902 var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');
67903 var pers = utils.toArray(options.pers, options.persEnc || 'hex');
67904 assert(entropy.length >= (this.minEntropy / 8),
67905 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
67906 this._init(entropy, nonce, pers);
67907 }
67908 module.exports = HmacDRBG;
67909
67910 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
67911 var seed = entropy.concat(nonce).concat(pers);
67912
67913 this.K = new Array(this.outLen / 8);
67914 this.V = new Array(this.outLen / 8);
67915 for (var i = 0; i < this.V.length; i++) {
67916 this.K[i] = 0x00;
67917 this.V[i] = 0x01;
67918 }
67919
67920 this._update(seed);
67921 this._reseed = 1;
67922 this.reseedInterval = 0x1000000000000; // 2^48
67923 };
67924
67925 HmacDRBG.prototype._hmac = function hmac() {
67926 return new hash.hmac(this.hash, this.K);
67927 };
67928
67929 HmacDRBG.prototype._update = function update(seed) {
67930 var kmac = this._hmac()
67931 .update(this.V)
67932 .update([ 0x00 ]);
67933 if (seed)
67934 kmac = kmac.update(seed);
67935 this.K = kmac.digest();
67936 this.V = this._hmac().update(this.V).digest();
67937 if (!seed)
67938 return;
67939
67940 this.K = this._hmac()
67941 .update(this.V)
67942 .update([ 0x01 ])
67943 .update(seed)
67944 .digest();
67945 this.V = this._hmac().update(this.V).digest();
67946 };
67947
67948 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
67949 // Optional entropy enc
67950 if (typeof entropyEnc !== 'string') {
67951 addEnc = add;
67952 add = entropyEnc;
67953 entropyEnc = null;
67954 }
67955
67956 entropy = utils.toArray(entropy, entropyEnc);
67957 add = utils.toArray(add, addEnc);
67958
67959 assert(entropy.length >= (this.minEntropy / 8),
67960 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
67961
67962 this._update(entropy.concat(add || []));
67963 this._reseed = 1;
67964 };
67965
67966 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
67967 if (this._reseed > this.reseedInterval)
67968 throw new Error('Reseed is required');
67969
67970 // Optional encoding
67971 if (typeof enc !== 'string') {
67972 addEnc = add;
67973 add = enc;
67974 enc = null;
67975 }
67976
67977 // Optional additional data
67978 if (add) {
67979 add = utils.toArray(add, addEnc || 'hex');
67980 this._update(add);
67981 }
67982
67983 var temp = [];
67984 while (temp.length < len) {
67985 this.V = this._hmac().update(this.V).digest();
67986 temp = temp.concat(this.V);
67987 }
67988
67989 var res = temp.slice(0, len);
67990 this._update(add);
67991 this._reseed++;
67992 return utils.encode(res, enc);
67993 };
67994
67995 },{"hash.js":86,"minimalistic-assert":99,"minimalistic-crypto-utils":100}],93:[function(require,module,exports){
67996 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
67997 var e, m
67998 var eLen = nBytes * 8 - mLen - 1
67999 var eMax = (1 << eLen) - 1
68000 var eBias = eMax >> 1
68001 var nBits = -7
68002 var i = isLE ? (nBytes - 1) : 0
68003 var d = isLE ? -1 : 1
68004 var s = buffer[offset + i]
68005
68006 i += d
68007
68008 e = s & ((1 << (-nBits)) - 1)
68009 s >>= (-nBits)
68010 nBits += eLen
68011 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
68012
68013 m = e & ((1 << (-nBits)) - 1)
68014 e >>= (-nBits)
68015 nBits += mLen
68016 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
68017
68018 if (e === 0) {
68019 e = 1 - eBias
68020 } else if (e === eMax) {
68021 return m ? NaN : ((s ? -1 : 1) * Infinity)
68022 } else {
68023 m = m + Math.pow(2, mLen)
68024 e = e - eBias
68025 }
68026 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
68027 }
68028
68029 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
68030 var e, m, c
68031 var eLen = nBytes * 8 - mLen - 1
68032 var eMax = (1 << eLen) - 1
68033 var eBias = eMax >> 1
68034 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
68035 var i = isLE ? 0 : (nBytes - 1)
68036 var d = isLE ? 1 : -1
68037 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
68038
68039 value = Math.abs(value)
68040
68041 if (isNaN(value) || value === Infinity) {
68042 m = isNaN(value) ? 1 : 0
68043 e = eMax
68044 } else {
68045 e = Math.floor(Math.log(value) / Math.LN2)
68046 if (value * (c = Math.pow(2, -e)) < 1) {
68047 e--
68048 c *= 2
68049 }
68050 if (e + eBias >= 1) {
68051 value += rt / c
68052 } else {
68053 value += rt * Math.pow(2, 1 - eBias)
68054 }
68055 if (value * c >= 2) {
68056 e++
68057 c /= 2
68058 }
68059
68060 if (e + eBias >= eMax) {
68061 m = 0
68062 e = eMax
68063 } else if (e + eBias >= 1) {
68064 m = (value * c - 1) * Math.pow(2, mLen)
68065 e = e + eBias
68066 } else {
68067 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
68068 e = 0
68069 }
68070 }
68071
68072 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
68073
68074 e = (e << mLen) | m
68075 eLen += mLen
68076 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
68077
68078 buffer[offset + i - d] |= s * 128
68079 }
68080
68081 },{}],94:[function(require,module,exports){
68082
68083 var indexOf = [].indexOf;
68084
68085 module.exports = function(arr, obj){
68086 if (indexOf) return arr.indexOf(obj);
68087 for (var i = 0; i < arr.length; ++i) {
68088 if (arr[i] === obj) return i;
68089 }
68090 return -1;
68091 };
68092 },{}],95:[function(require,module,exports){
68093 if (typeof Object.create === 'function') {
68094 // implementation from standard node.js 'util' module
68095 module.exports = function inherits(ctor, superCtor) {
68096 ctor.super_ = superCtor
68097 ctor.prototype = Object.create(superCtor.prototype, {
68098 constructor: {
68099 value: ctor,
68100 enumerable: false,
68101 writable: true,
68102 configurable: true
68103 }
68104 });
68105 };
68106 } else {
68107 // old school shim for old browsers
68108 module.exports = function inherits(ctor, superCtor) {
68109 ctor.super_ = superCtor
68110 var TempCtor = function () {}
68111 TempCtor.prototype = superCtor.prototype
68112 ctor.prototype = new TempCtor()
68113 ctor.prototype.constructor = ctor
68114 }
68115 }
68116
68117 },{}],96:[function(require,module,exports){
68118 /*!
68119 * Determine if an object is a Buffer
68120 *
68121 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
68122 * @license MIT
68123 */
68124
68125 // The _isBuffer check is for Safari 5-7 support, because it's missing
68126 // Object.prototype.constructor. Remove this eventually
68127 module.exports = function (obj) {
68128 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
68129 }
68130
68131 function isBuffer (obj) {
68132 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
68133 }
68134
68135 // For Node v0.10 support. Remove this eventually.
68136 function isSlowBuffer (obj) {
68137 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
68138 }
68139
68140 },{}],97:[function(require,module,exports){
68141 var toString = {}.toString;
68142
68143 module.exports = Array.isArray || function (arr) {
68144 return toString.call(arr) == '[object Array]';
68145 };
68146
68147 },{}],98:[function(require,module,exports){
68148 var bn = require('bn.js');
68149 var brorand = require('brorand');
68150
68151 function MillerRabin(rand) {
68152 this.rand = rand || new brorand.Rand();
68153 }
68154 module.exports = MillerRabin;
68155
68156 MillerRabin.create = function create(rand) {
68157 return new MillerRabin(rand);
68158 };
68159
68160 MillerRabin.prototype._rand = function _rand(n) {
68161 var len = n.bitLength();
68162 var buf = this.rand.generate(Math.ceil(len / 8));
68163
68164 // Set low bits
68165 buf[0] |= 3;
68166
68167 // Mask high bits
68168 var mask = len & 0x7;
68169 if (mask !== 0)
68170 buf[buf.length - 1] >>= 7 - mask;
68171
68172 return new bn(buf);
68173 }
68174
68175 MillerRabin.prototype.test = function test(n, k, cb) {
68176 var len = n.bitLength();
68177 var red = bn.mont(n);
68178 var rone = new bn(1).toRed(red);
68179
68180 if (!k)
68181 k = Math.max(1, (len / 48) | 0);
68182
68183 // Find d and s, (n - 1) = (2 ^ s) * d;
68184 var n1 = n.subn(1);
68185 var n2 = n1.subn(1);
68186 for (var s = 0; !n1.testn(s); s++) {}
68187 var d = n.shrn(s);
68188
68189 var rn1 = n1.toRed(red);
68190
68191 var prime = true;
68192 for (; k > 0; k--) {
68193 var a = this._rand(n2);
68194 if (cb)
68195 cb(a);
68196
68197 var x = a.toRed(red).redPow(d);
68198 if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
68199 continue;
68200
68201 for (var i = 1; i < s; i++) {
68202 x = x.redSqr();
68203
68204 if (x.cmp(rone) === 0)
68205 return false;
68206 if (x.cmp(rn1) === 0)
68207 break;
68208 }
68209
68210 if (i === s)
68211 return false;
68212 }
68213
68214 return prime;
68215 };
68216
68217 MillerRabin.prototype.getDivisor = function getDivisor(n, k) {
68218 var len = n.bitLength();
68219 var red = bn.mont(n);
68220 var rone = new bn(1).toRed(red);
68221
68222 if (!k)
68223 k = Math.max(1, (len / 48) | 0);
68224
68225 // Find d and s, (n - 1) = (2 ^ s) * d;
68226 var n1 = n.subn(1);
68227 var n2 = n1.subn(1);
68228 for (var s = 0; !n1.testn(s); s++) {}
68229 var d = n.shrn(s);
68230
68231 var rn1 = n1.toRed(red);
68232
68233 for (; k > 0; k--) {
68234 var a = this._rand(n2);
68235
68236 var g = n.gcd(a);
68237 if (g.cmpn(1) !== 0)
68238 return g;
68239
68240 var x = a.toRed(red).redPow(d);
68241 if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
68242 continue;
68243
68244 for (var i = 1; i < s; i++) {
68245 x = x.redSqr();
68246
68247 if (x.cmp(rone) === 0)
68248 return x.fromRed().subn(1).gcd(n);
68249 if (x.cmp(rn1) === 0)
68250 break;
68251 }
68252
68253 if (i === s) {
68254 x = x.redSqr();
68255 return x.fromRed().subn(1).gcd(n);
68256 }
68257 }
68258
68259 return false;
68260 };
68261
68262 },{"bn.js":17,"brorand":18}],99:[function(require,module,exports){
68263 module.exports = assert;
68264
68265 function assert(val, msg) {
68266 if (!val)
68267 throw new Error(msg || 'Assertion failed');
68268 }
68269
68270 assert.equal = function assertEqual(l, r, msg) {
68271 if (l != r)
68272 throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
68273 };
68274
68275 },{}],100:[function(require,module,exports){
68276 'use strict';
68277
68278 var utils = exports;
68279
68280 function toArray(msg, enc) {
68281 if (Array.isArray(msg))
68282 return msg.slice();
68283 if (!msg)
68284 return [];
68285 var res = [];
68286 if (typeof msg !== 'string') {
68287 for (var i = 0; i < msg.length; i++)
68288 res[i] = msg[i] | 0;
68289 return res;
68290 }
68291 if (enc === 'hex') {
68292 msg = msg.replace(/[^a-z0-9]+/ig, '');
68293 if (msg.length % 2 !== 0)
68294 msg = '0' + msg;
68295 for (var i = 0; i < msg.length; i += 2)
68296 res.push(parseInt(msg[i] + msg[i + 1], 16));
68297 } else {
68298 for (var i = 0; i < msg.length; i++) {
68299 var c = msg.charCodeAt(i);
68300 var hi = c >> 8;
68301 var lo = c & 0xff;
68302 if (hi)
68303 res.push(hi, lo);
68304 else
68305 res.push(lo);
68306 }
68307 }
68308 return res;
68309 }
68310 utils.toArray = toArray;
68311
68312 function zero2(word) {
68313 if (word.length === 1)
68314 return '0' + word;
68315 else
68316 return word;
68317 }
68318 utils.zero2 = zero2;
68319
68320 function toHex(msg) {
68321 var res = '';
68322 for (var i = 0; i < msg.length; i++)
68323 res += zero2(msg[i].toString(16));
68324 return res;
68325 }
68326 utils.toHex = toHex;
68327
68328 utils.encode = function encode(arr, enc) {
68329 if (enc === 'hex')
68330 return toHex(arr);
68331 else
68332 return arr;
68333 };
68334
68335 },{}],101:[function(require,module,exports){
68336 module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb",
68337 "2.16.840.1.101.3.4.1.2": "aes-128-cbc",
68338 "2.16.840.1.101.3.4.1.3": "aes-128-ofb",
68339 "2.16.840.1.101.3.4.1.4": "aes-128-cfb",
68340 "2.16.840.1.101.3.4.1.21": "aes-192-ecb",
68341 "2.16.840.1.101.3.4.1.22": "aes-192-cbc",
68342 "2.16.840.1.101.3.4.1.23": "aes-192-ofb",
68343 "2.16.840.1.101.3.4.1.24": "aes-192-cfb",
68344 "2.16.840.1.101.3.4.1.41": "aes-256-ecb",
68345 "2.16.840.1.101.3.4.1.42": "aes-256-cbc",
68346 "2.16.840.1.101.3.4.1.43": "aes-256-ofb",
68347 "2.16.840.1.101.3.4.1.44": "aes-256-cfb"
68348 }
68349 },{}],102:[function(require,module,exports){
68350 // from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js
68351 // Fedor, you are amazing.
68352 'use strict'
68353
68354 var asn1 = require('asn1.js')
68355
68356 exports.certificate = require('./certificate')
68357
68358 var RSAPrivateKey = asn1.define('RSAPrivateKey', function () {
68359 this.seq().obj(
68360 this.key('version').int(),
68361 this.key('modulus').int(),
68362 this.key('publicExponent').int(),
68363 this.key('privateExponent').int(),
68364 this.key('prime1').int(),
68365 this.key('prime2').int(),
68366 this.key('exponent1').int(),
68367 this.key('exponent2').int(),
68368 this.key('coefficient').int()
68369 )
68370 })
68371 exports.RSAPrivateKey = RSAPrivateKey
68372
68373 var RSAPublicKey = asn1.define('RSAPublicKey', function () {
68374 this.seq().obj(
68375 this.key('modulus').int(),
68376 this.key('publicExponent').int()
68377 )
68378 })
68379 exports.RSAPublicKey = RSAPublicKey
68380
68381 var PublicKey = asn1.define('SubjectPublicKeyInfo', function () {
68382 this.seq().obj(
68383 this.key('algorithm').use(AlgorithmIdentifier),
68384 this.key('subjectPublicKey').bitstr()
68385 )
68386 })
68387 exports.PublicKey = PublicKey
68388
68389 var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {
68390 this.seq().obj(
68391 this.key('algorithm').objid(),
68392 this.key('none').null_().optional(),
68393 this.key('curve').objid().optional(),
68394 this.key('params').seq().obj(
68395 this.key('p').int(),
68396 this.key('q').int(),
68397 this.key('g').int()
68398 ).optional()
68399 )
68400 })
68401
68402 var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {
68403 this.seq().obj(
68404 this.key('version').int(),
68405 this.key('algorithm').use(AlgorithmIdentifier),
68406 this.key('subjectPrivateKey').octstr()
68407 )
68408 })
68409 exports.PrivateKey = PrivateKeyInfo
68410 var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {
68411 this.seq().obj(
68412 this.key('algorithm').seq().obj(
68413 this.key('id').objid(),
68414 this.key('decrypt').seq().obj(
68415 this.key('kde').seq().obj(
68416 this.key('id').objid(),
68417 this.key('kdeparams').seq().obj(
68418 this.key('salt').octstr(),
68419 this.key('iters').int()
68420 )
68421 ),
68422 this.key('cipher').seq().obj(
68423 this.key('algo').objid(),
68424 this.key('iv').octstr()
68425 )
68426 )
68427 ),
68428 this.key('subjectPrivateKey').octstr()
68429 )
68430 })
68431
68432 exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo
68433
68434 var DSAPrivateKey = asn1.define('DSAPrivateKey', function () {
68435 this.seq().obj(
68436 this.key('version').int(),
68437 this.key('p').int(),
68438 this.key('q').int(),
68439 this.key('g').int(),
68440 this.key('pub_key').int(),
68441 this.key('priv_key').int()
68442 )
68443 })
68444 exports.DSAPrivateKey = DSAPrivateKey
68445
68446 exports.DSAparam = asn1.define('DSAparam', function () {
68447 this.int()
68448 })
68449
68450 var ECPrivateKey = asn1.define('ECPrivateKey', function () {
68451 this.seq().obj(
68452 this.key('version').int(),
68453 this.key('privateKey').octstr(),
68454 this.key('parameters').optional().explicit(0).use(ECParameters),
68455 this.key('publicKey').optional().explicit(1).bitstr()
68456 )
68457 })
68458 exports.ECPrivateKey = ECPrivateKey
68459
68460 var ECParameters = asn1.define('ECParameters', function () {
68461 this.choice({
68462 namedCurve: this.objid()
68463 })
68464 })
68465
68466 exports.signature = asn1.define('signature', function () {
68467 this.seq().obj(
68468 this.key('r').int(),
68469 this.key('s').int()
68470 )
68471 })
68472
68473 },{"./certificate":103,"asn1.js":1}],103:[function(require,module,exports){
68474 // from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js
68475 // thanks to @Rantanen
68476
68477 'use strict'
68478
68479 var asn = require('asn1.js')
68480
68481 var Time = asn.define('Time', function () {
68482 this.choice({
68483 utcTime: this.utctime(),
68484 generalTime: this.gentime()
68485 })
68486 })
68487
68488 var AttributeTypeValue = asn.define('AttributeTypeValue', function () {
68489 this.seq().obj(
68490 this.key('type').objid(),
68491 this.key('value').any()
68492 )
68493 })
68494
68495 var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {
68496 this.seq().obj(
68497 this.key('algorithm').objid(),
68498 this.key('parameters').optional()
68499 )
68500 })
68501
68502 var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {
68503 this.seq().obj(
68504 this.key('algorithm').use(AlgorithmIdentifier),
68505 this.key('subjectPublicKey').bitstr()
68506 )
68507 })
68508
68509 var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {
68510 this.setof(AttributeTypeValue)
68511 })
68512
68513 var RDNSequence = asn.define('RDNSequence', function () {
68514 this.seqof(RelativeDistinguishedName)
68515 })
68516
68517 var Name = asn.define('Name', function () {
68518 this.choice({
68519 rdnSequence: this.use(RDNSequence)
68520 })
68521 })
68522
68523 var Validity = asn.define('Validity', function () {
68524 this.seq().obj(
68525 this.key('notBefore').use(Time),
68526 this.key('notAfter').use(Time)
68527 )
68528 })
68529
68530 var Extension = asn.define('Extension', function () {
68531 this.seq().obj(
68532 this.key('extnID').objid(),
68533 this.key('critical').bool().def(false),
68534 this.key('extnValue').octstr()
68535 )
68536 })
68537
68538 var TBSCertificate = asn.define('TBSCertificate', function () {
68539 this.seq().obj(
68540 this.key('version').explicit(0).int(),
68541 this.key('serialNumber').int(),
68542 this.key('signature').use(AlgorithmIdentifier),
68543 this.key('issuer').use(Name),
68544 this.key('validity').use(Validity),
68545 this.key('subject').use(Name),
68546 this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),
68547 this.key('issuerUniqueID').implicit(1).bitstr().optional(),
68548 this.key('subjectUniqueID').implicit(2).bitstr().optional(),
68549 this.key('extensions').explicit(3).seqof(Extension).optional()
68550 )
68551 })
68552
68553 var X509Certificate = asn.define('X509Certificate', function () {
68554 this.seq().obj(
68555 this.key('tbsCertificate').use(TBSCertificate),
68556 this.key('signatureAlgorithm').use(AlgorithmIdentifier),
68557 this.key('signatureValue').bitstr()
68558 )
68559 })
68560
68561 module.exports = X509Certificate
68562
68563 },{"asn1.js":1}],104:[function(require,module,exports){
68564 (function (Buffer){
68565 // adapted from https://github.com/apatil/pemstrip
68566 var findProc = /Proc-Type: 4,ENCRYPTED\n\r?DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)\n\r?\n\r?([0-9A-z\n\r\+\/\=]+)\n\r?/m
68567 var startRegex = /^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----\n/m
68568 var fullRegex = /^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----\n\r?([0-9A-z\n\r\+\/\=]+)\n\r?-----END \1-----$/m
68569 var evp = require('evp_bytestokey')
68570 var ciphers = require('browserify-aes')
68571 module.exports = function (okey, password) {
68572 var key = okey.toString()
68573 var match = key.match(findProc)
68574 var decrypted
68575 if (!match) {
68576 var match2 = key.match(fullRegex)
68577 decrypted = new Buffer(match2[2].replace(/\r?\n/g, ''), 'base64')
68578 } else {
68579 var suite = 'aes' + match[1]
68580 var iv = new Buffer(match[2], 'hex')
68581 var cipherText = new Buffer(match[3].replace(/\r?\n/g, ''), 'base64')
68582 var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key
68583 var out = []
68584 var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)
68585 out.push(cipher.update(cipherText))
68586 out.push(cipher.final())
68587 decrypted = Buffer.concat(out)
68588 }
68589 var tag = key.match(startRegex)[1]
68590 return {
68591 tag: tag,
68592 data: decrypted
68593 }
68594 }
68595
68596 }).call(this,require("buffer").Buffer)
68597 },{"browserify-aes":22,"buffer":47,"evp_bytestokey":84}],105:[function(require,module,exports){
68598 (function (Buffer){
68599 var asn1 = require('./asn1')
68600 var aesid = require('./aesid.json')
68601 var fixProc = require('./fixProc')
68602 var ciphers = require('browserify-aes')
68603 var compat = require('pbkdf2')
68604 module.exports = parseKeys
68605
68606 function parseKeys (buffer) {
68607 var password
68608 if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {
68609 password = buffer.passphrase
68610 buffer = buffer.key
68611 }
68612 if (typeof buffer === 'string') {
68613 buffer = new Buffer(buffer)
68614 }
68615
68616 var stripped = fixProc(buffer, password)
68617
68618 var type = stripped.tag
68619 var data = stripped.data
68620 var subtype, ndata
68621 switch (type) {
68622 case 'CERTIFICATE':
68623 ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo
68624 // falls through
68625 case 'PUBLIC KEY':
68626 if (!ndata) {
68627 ndata = asn1.PublicKey.decode(data, 'der')
68628 }
68629 subtype = ndata.algorithm.algorithm.join('.')
68630 switch (subtype) {
68631 case '1.2.840.113549.1.1.1':
68632 return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')
68633 case '1.2.840.10045.2.1':
68634 ndata.subjectPrivateKey = ndata.subjectPublicKey
68635 return {
68636 type: 'ec',
68637 data: ndata
68638 }
68639 case '1.2.840.10040.4.1':
68640 ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')
68641 return {
68642 type: 'dsa',
68643 data: ndata.algorithm.params
68644 }
68645 default: throw new Error('unknown key id ' + subtype)
68646 }
68647 throw new Error('unknown key type ' + type)
68648 case 'ENCRYPTED PRIVATE KEY':
68649 data = asn1.EncryptedPrivateKey.decode(data, 'der')
68650 data = decrypt(data, password)
68651 // falls through
68652 case 'PRIVATE KEY':
68653 ndata = asn1.PrivateKey.decode(data, 'der')
68654 subtype = ndata.algorithm.algorithm.join('.')
68655 switch (subtype) {
68656 case '1.2.840.113549.1.1.1':
68657 return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')
68658 case '1.2.840.10045.2.1':
68659 return {
68660 curve: ndata.algorithm.curve,
68661 privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey
68662 }
68663 case '1.2.840.10040.4.1':
68664 ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')
68665 return {
68666 type: 'dsa',
68667 params: ndata.algorithm.params
68668 }
68669 default: throw new Error('unknown key id ' + subtype)
68670 }
68671 throw new Error('unknown key type ' + type)
68672 case 'RSA PUBLIC KEY':
68673 return asn1.RSAPublicKey.decode(data, 'der')
68674 case 'RSA PRIVATE KEY':
68675 return asn1.RSAPrivateKey.decode(data, 'der')
68676 case 'DSA PRIVATE KEY':
68677 return {
68678 type: 'dsa',
68679 params: asn1.DSAPrivateKey.decode(data, 'der')
68680 }
68681 case 'EC PRIVATE KEY':
68682 data = asn1.ECPrivateKey.decode(data, 'der')
68683 return {
68684 curve: data.parameters.value,
68685 privateKey: data.privateKey
68686 }
68687 default: throw new Error('unknown key type ' + type)
68688 }
68689 }
68690 parseKeys.signature = asn1.signature
68691 function decrypt (data, password) {
68692 var salt = data.algorithm.decrypt.kde.kdeparams.salt
68693 var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)
68694 var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]
68695 var iv = data.algorithm.decrypt.cipher.iv
68696 var cipherText = data.subjectPrivateKey
68697 var keylen = parseInt(algo.split('-')[1], 10) / 8
68698 var key = compat.pbkdf2Sync(password, salt, iters, keylen)
68699 var cipher = ciphers.createDecipheriv(algo, key, iv)
68700 var out = []
68701 out.push(cipher.update(cipherText))
68702 out.push(cipher.final())
68703 return Buffer.concat(out)
68704 }
68705
68706 }).call(this,require("buffer").Buffer)
68707 },{"./aesid.json":101,"./asn1":102,"./fixProc":104,"browserify-aes":22,"buffer":47,"pbkdf2":106}],106:[function(require,module,exports){
68708
68709 exports.pbkdf2 = require('./lib/async')
68710
68711 exports.pbkdf2Sync = require('./lib/sync')
68712
68713 },{"./lib/async":107,"./lib/sync":110}],107:[function(require,module,exports){
68714 (function (process,global){
68715 var checkParameters = require('./precondition')
68716 var defaultEncoding = require('./default-encoding')
68717 var sync = require('./sync')
68718 var Buffer = require('safe-buffer').Buffer
68719
68720 var ZERO_BUF
68721 var subtle = global.crypto && global.crypto.subtle
68722 var toBrowser = {
68723 'sha': 'SHA-1',
68724 'sha-1': 'SHA-1',
68725 'sha1': 'SHA-1',
68726 'sha256': 'SHA-256',
68727 'sha-256': 'SHA-256',
68728 'sha384': 'SHA-384',
68729 'sha-384': 'SHA-384',
68730 'sha-512': 'SHA-512',
68731 'sha512': 'SHA-512'
68732 }
68733 var checks = []
68734 function checkNative (algo) {
68735 if (global.process && !global.process.browser) {
68736 return Promise.resolve(false)
68737 }
68738 if (!subtle || !subtle.importKey || !subtle.deriveBits) {
68739 return Promise.resolve(false)
68740 }
68741 if (checks[algo] !== undefined) {
68742 return checks[algo]
68743 }
68744 ZERO_BUF = ZERO_BUF || Buffer.alloc(8)
68745 var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)
68746 .then(function () {
68747 return true
68748 }).catch(function () {
68749 return false
68750 })
68751 checks[algo] = prom
68752 return prom
68753 }
68754 function browserPbkdf2 (password, salt, iterations, length, algo) {
68755 return subtle.importKey(
68756 'raw', password, {name: 'PBKDF2'}, false, ['deriveBits']
68757 ).then(function (key) {
68758 return subtle.deriveBits({
68759 name: 'PBKDF2',
68760 salt: salt,
68761 iterations: iterations,
68762 hash: {
68763 name: algo
68764 }
68765 }, key, length << 3)
68766 }).then(function (res) {
68767 return Buffer.from(res)
68768 })
68769 }
68770 function resolvePromise (promise, callback) {
68771 promise.then(function (out) {
68772 process.nextTick(function () {
68773 callback(null, out)
68774 })
68775 }, function (e) {
68776 process.nextTick(function () {
68777 callback(e)
68778 })
68779 })
68780 }
68781 module.exports = function (password, salt, iterations, keylen, digest, callback) {
68782 if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)
68783 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)
68784
68785 checkParameters(iterations, keylen)
68786 if (typeof digest === 'function') {
68787 callback = digest
68788 digest = undefined
68789 }
68790 if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')
68791
68792 digest = digest || 'sha1'
68793 var algo = toBrowser[digest.toLowerCase()]
68794 if (!algo || typeof global.Promise !== 'function') {
68795 return process.nextTick(function () {
68796 var out
68797 try {
68798 out = sync(password, salt, iterations, keylen, digest)
68799 } catch (e) {
68800 return callback(e)
68801 }
68802 callback(null, out)
68803 })
68804 }
68805 resolvePromise(checkNative(algo).then(function (resp) {
68806 if (resp) {
68807 return browserPbkdf2(password, salt, iterations, keylen, algo)
68808 } else {
68809 return sync(password, salt, iterations, keylen, digest)
68810 }
68811 }), callback)
68812 }
68813
68814 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
68815 },{"./default-encoding":108,"./precondition":109,"./sync":110,"_process":112,"safe-buffer":134}],108:[function(require,module,exports){
68816 (function (process){
68817 var defaultEncoding
68818 /* istanbul ignore next */
68819 if (process.browser) {
68820 defaultEncoding = 'utf-8'
68821 } else {
68822 var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)
68823
68824 defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'
68825 }
68826 module.exports = defaultEncoding
68827
68828 }).call(this,require('_process'))
68829 },{"_process":112}],109:[function(require,module,exports){
68830 var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs
68831 module.exports = function (iterations, keylen) {
68832 if (typeof iterations !== 'number') {
68833 throw new TypeError('Iterations not a number')
68834 }
68835
68836 if (iterations < 0) {
68837 throw new TypeError('Bad iterations')
68838 }
68839
68840 if (typeof keylen !== 'number') {
68841 throw new TypeError('Key length not a number')
68842 }
68843
68844 if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */
68845 throw new TypeError('Bad key length')
68846 }
68847 }
68848
68849 },{}],110:[function(require,module,exports){
68850 var md5 = require('create-hash/md5')
68851 var rmd160 = require('ripemd160')
68852 var sha = require('sha.js')
68853
68854 var checkParameters = require('./precondition')
68855 var defaultEncoding = require('./default-encoding')
68856 var Buffer = require('safe-buffer').Buffer
68857 var ZEROS = Buffer.alloc(128)
68858 var sizes = {
68859 md5: 16,
68860 sha1: 20,
68861 sha224: 28,
68862 sha256: 32,
68863 sha384: 48,
68864 sha512: 64,
68865 rmd160: 20,
68866 ripemd160: 20
68867 }
68868 function Hmac (alg, key, saltLen) {
68869 var hash = getDigest(alg)
68870 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
68871
68872 if (key.length > blocksize) {
68873 key = hash(key)
68874 } else if (key.length < blocksize) {
68875 key = Buffer.concat([key, ZEROS], blocksize)
68876 }
68877
68878 var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])
68879 var opad = Buffer.allocUnsafe(blocksize + sizes[alg])
68880 for (var i = 0; i < blocksize; i++) {
68881 ipad[i] = key[i] ^ 0x36
68882 opad[i] = key[i] ^ 0x5C
68883 }
68884
68885 var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)
68886 ipad.copy(ipad1, 0, 0, blocksize)
68887 this.ipad1 = ipad1
68888 this.ipad2 = ipad
68889 this.opad = opad
68890 this.alg = alg
68891 this.blocksize = blocksize
68892 this.hash = hash
68893 this.size = sizes[alg]
68894 }
68895
68896 Hmac.prototype.run = function (data, ipad) {
68897 data.copy(ipad, this.blocksize)
68898 var h = this.hash(ipad)
68899 h.copy(this.opad, this.blocksize)
68900 return this.hash(this.opad)
68901 }
68902
68903 function getDigest (alg) {
68904 if (alg === 'rmd160' || alg === 'ripemd160') return rmd160
68905 if (alg === 'md5') return md5
68906 return shaFunc
68907
68908 function shaFunc (data) {
68909 return sha(alg).update(data).digest()
68910 }
68911 }
68912
68913 module.exports = function (password, salt, iterations, keylen, digest) {
68914 if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)
68915 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)
68916
68917 checkParameters(iterations, keylen)
68918
68919 digest = digest || 'sha1'
68920
68921 var hmac = new Hmac(digest, password, salt.length)
68922
68923 var DK = Buffer.allocUnsafe(keylen)
68924 var block1 = Buffer.allocUnsafe(salt.length + 4)
68925 salt.copy(block1, 0, 0, salt.length)
68926
68927 var U, j, destPos, len
68928
68929 var hLen = hmac.size
68930 var T = Buffer.allocUnsafe(hLen)
68931 var l = Math.ceil(keylen / hLen)
68932 var r = keylen - (l - 1) * hLen
68933
68934 for (var i = 1; i <= l; i++) {
68935 block1.writeUInt32BE(i, salt.length)
68936 U = hmac.run(block1, hmac.ipad1)
68937
68938 U.copy(T, 0, 0, hLen)
68939
68940 for (j = 1; j < iterations; j++) {
68941 U = hmac.run(U, hmac.ipad2)
68942 for (var k = 0; k < hLen; k++) T[k] ^= U[k]
68943 }
68944
68945 destPos = (i - 1) * hLen
68946 len = (i === l ? r : hLen)
68947 T.copy(DK, destPos, 0, len)
68948 }
68949
68950 return DK
68951 }
68952
68953 },{"./default-encoding":108,"./precondition":109,"create-hash/md5":53,"ripemd160":133,"safe-buffer":134,"sha.js":136}],111:[function(require,module,exports){
68954 (function (process){
68955 'use strict';
68956
68957 if (!process.version ||
68958 process.version.indexOf('v0.') === 0 ||
68959 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
68960 module.exports = nextTick;
68961 } else {
68962 module.exports = process.nextTick;
68963 }
68964
68965 function nextTick(fn, arg1, arg2, arg3) {
68966 if (typeof fn !== 'function') {
68967 throw new TypeError('"callback" argument must be a function');
68968 }
68969 var len = arguments.length;
68970 var args, i;
68971 switch (len) {
68972 case 0:
68973 case 1:
68974 return process.nextTick(fn);
68975 case 2:
68976 return process.nextTick(function afterTickOne() {
68977 fn.call(null, arg1);
68978 });
68979 case 3:
68980 return process.nextTick(function afterTickTwo() {
68981 fn.call(null, arg1, arg2);
68982 });
68983 case 4:
68984 return process.nextTick(function afterTickThree() {
68985 fn.call(null, arg1, arg2, arg3);
68986 });
68987 default:
68988 args = new Array(len - 1);
68989 i = 0;
68990 while (i < args.length) {
68991 args[i++] = arguments[i];
68992 }
68993 return process.nextTick(function afterTick() {
68994 fn.apply(null, args);
68995 });
68996 }
68997 }
68998
68999 }).call(this,require('_process'))
69000 },{"_process":112}],112:[function(require,module,exports){
69001 // shim for using process in browser
69002 var process = module.exports = {};
69003
69004 // cached from whatever global is present so that test runners that stub it
69005 // don't break things. But we need to wrap it in a try catch in case it is
69006 // wrapped in strict mode code which doesn't define any globals. It's inside a
69007 // function because try/catches deoptimize in certain engines.
69008
69009 var cachedSetTimeout;
69010 var cachedClearTimeout;
69011
69012 function defaultSetTimout() {
69013 throw new Error('setTimeout has not been defined');
69014 }
69015 function defaultClearTimeout () {
69016 throw new Error('clearTimeout has not been defined');
69017 }
69018 (function () {
69019 try {
69020 if (typeof setTimeout === 'function') {
69021 cachedSetTimeout = setTimeout;
69022 } else {
69023 cachedSetTimeout = defaultSetTimout;
69024 }
69025 } catch (e) {
69026 cachedSetTimeout = defaultSetTimout;
69027 }
69028 try {
69029 if (typeof clearTimeout === 'function') {
69030 cachedClearTimeout = clearTimeout;
69031 } else {
69032 cachedClearTimeout = defaultClearTimeout;
69033 }
69034 } catch (e) {
69035 cachedClearTimeout = defaultClearTimeout;
69036 }
69037 } ())
69038 function runTimeout(fun) {
69039 if (cachedSetTimeout === setTimeout) {
69040 //normal enviroments in sane situations
69041 return setTimeout(fun, 0);
69042 }
69043 // if setTimeout wasn't available but was latter defined
69044 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
69045 cachedSetTimeout = setTimeout;
69046 return setTimeout(fun, 0);
69047 }
69048 try {
69049 // when when somebody has screwed with setTimeout but no I.E. maddness
69050 return cachedSetTimeout(fun, 0);
69051 } catch(e){
69052 try {
69053 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
69054 return cachedSetTimeout.call(null, fun, 0);
69055 } catch(e){
69056 // 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
69057 return cachedSetTimeout.call(this, fun, 0);
69058 }
69059 }
69060
69061
69062 }
69063 function runClearTimeout(marker) {
69064 if (cachedClearTimeout === clearTimeout) {
69065 //normal enviroments in sane situations
69066 return clearTimeout(marker);
69067 }
69068 // if clearTimeout wasn't available but was latter defined
69069 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
69070 cachedClearTimeout = clearTimeout;
69071 return clearTimeout(marker);
69072 }
69073 try {
69074 // when when somebody has screwed with setTimeout but no I.E. maddness
69075 return cachedClearTimeout(marker);
69076 } catch (e){
69077 try {
69078 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
69079 return cachedClearTimeout.call(null, marker);
69080 } catch (e){
69081 // 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.
69082 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
69083 return cachedClearTimeout.call(this, marker);
69084 }
69085 }
69086
69087
69088
69089 }
69090 var queue = [];
69091 var draining = false;
69092 var currentQueue;
69093 var queueIndex = -1;
69094
69095 function cleanUpNextTick() {
69096 if (!draining || !currentQueue) {
69097 return;
69098 }
69099 draining = false;
69100 if (currentQueue.length) {
69101 queue = currentQueue.concat(queue);
69102 } else {
69103 queueIndex = -1;
69104 }
69105 if (queue.length) {
69106 drainQueue();
69107 }
69108 }
69109
69110 function drainQueue() {
69111 if (draining) {
69112 return;
69113 }
69114 var timeout = runTimeout(cleanUpNextTick);
69115 draining = true;
69116
69117 var len = queue.length;
69118 while(len) {
69119 currentQueue = queue;
69120 queue = [];
69121 while (++queueIndex < len) {
69122 if (currentQueue) {
69123 currentQueue[queueIndex].run();
69124 }
69125 }
69126 queueIndex = -1;
69127 len = queue.length;
69128 }
69129 currentQueue = null;
69130 draining = false;
69131 runClearTimeout(timeout);
69132 }
69133
69134 process.nextTick = function (fun) {
69135 var args = new Array(arguments.length - 1);
69136 if (arguments.length > 1) {
69137 for (var i = 1; i < arguments.length; i++) {
69138 args[i - 1] = arguments[i];
69139 }
69140 }
69141 queue.push(new Item(fun, args));
69142 if (queue.length === 1 && !draining) {
69143 runTimeout(drainQueue);
69144 }
69145 };
69146
69147 // v8 likes predictible objects
69148 function Item(fun, array) {
69149 this.fun = fun;
69150 this.array = array;
69151 }
69152 Item.prototype.run = function () {
69153 this.fun.apply(null, this.array);
69154 };
69155 process.title = 'browser';
69156 process.browser = true;
69157 process.env = {};
69158 process.argv = [];
69159 process.version = ''; // empty string to avoid regexp issues
69160 process.versions = {};
69161
69162 function noop() {}
69163
69164 process.on = noop;
69165 process.addListener = noop;
69166 process.once = noop;
69167 process.off = noop;
69168 process.removeListener = noop;
69169 process.removeAllListeners = noop;
69170 process.emit = noop;
69171 process.prependListener = noop;
69172 process.prependOnceListener = noop;
69173
69174 process.listeners = function (name) { return [] }
69175
69176 process.binding = function (name) {
69177 throw new Error('process.binding is not supported');
69178 };
69179
69180 process.cwd = function () { return '/' };
69181 process.chdir = function (dir) {
69182 throw new Error('process.chdir is not supported');
69183 };
69184 process.umask = function() { return 0; };
69185
69186 },{}],113:[function(require,module,exports){
69187 exports.publicEncrypt = require('./publicEncrypt');
69188 exports.privateDecrypt = require('./privateDecrypt');
69189
69190 exports.privateEncrypt = function privateEncrypt(key, buf) {
69191 return exports.publicEncrypt(key, buf, true);
69192 };
69193
69194 exports.publicDecrypt = function publicDecrypt(key, buf) {
69195 return exports.privateDecrypt(key, buf, true);
69196 };
69197 },{"./privateDecrypt":115,"./publicEncrypt":116}],114:[function(require,module,exports){
69198 (function (Buffer){
69199 var createHash = require('create-hash');
69200 module.exports = function (seed, len) {
69201 var t = new Buffer('');
69202 var i = 0, c;
69203 while (t.length < len) {
69204 c = i2ops(i++);
69205 t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]);
69206 }
69207 return t.slice(0, len);
69208 };
69209
69210 function i2ops(c) {
69211 var out = new Buffer(4);
69212 out.writeUInt32BE(c,0);
69213 return out;
69214 }
69215 }).call(this,require("buffer").Buffer)
69216 },{"buffer":47,"create-hash":51}],115:[function(require,module,exports){
69217 (function (Buffer){
69218 var parseKeys = require('parse-asn1');
69219 var mgf = require('./mgf');
69220 var xor = require('./xor');
69221 var bn = require('bn.js');
69222 var crt = require('browserify-rsa');
69223 var createHash = require('create-hash');
69224 var withPublic = require('./withPublic');
69225 module.exports = function privateDecrypt(private_key, enc, reverse) {
69226 var padding;
69227 if (private_key.padding) {
69228 padding = private_key.padding;
69229 } else if (reverse) {
69230 padding = 1;
69231 } else {
69232 padding = 4;
69233 }
69234
69235 var key = parseKeys(private_key);
69236 var k = key.modulus.byteLength();
69237 if (enc.length > k || new bn(enc).cmp(key.modulus) >= 0) {
69238 throw new Error('decryption error');
69239 }
69240 var msg;
69241 if (reverse) {
69242 msg = withPublic(new bn(enc), key);
69243 } else {
69244 msg = crt(enc, key);
69245 }
69246 var zBuffer = new Buffer(k - msg.length);
69247 zBuffer.fill(0);
69248 msg = Buffer.concat([zBuffer, msg], k);
69249 if (padding === 4) {
69250 return oaep(key, msg);
69251 } else if (padding === 1) {
69252 return pkcs1(key, msg, reverse);
69253 } else if (padding === 3) {
69254 return msg;
69255 } else {
69256 throw new Error('unknown padding');
69257 }
69258 };
69259
69260 function oaep(key, msg){
69261 var n = key.modulus;
69262 var k = key.modulus.byteLength();
69263 var mLen = msg.length;
69264 var iHash = createHash('sha1').update(new Buffer('')).digest();
69265 var hLen = iHash.length;
69266 var hLen2 = 2 * hLen;
69267 if (msg[0] !== 0) {
69268 throw new Error('decryption error');
69269 }
69270 var maskedSeed = msg.slice(1, hLen + 1);
69271 var maskedDb = msg.slice(hLen + 1);
69272 var seed = xor(maskedSeed, mgf(maskedDb, hLen));
69273 var db = xor(maskedDb, mgf(seed, k - hLen - 1));
69274 if (compare(iHash, db.slice(0, hLen))) {
69275 throw new Error('decryption error');
69276 }
69277 var i = hLen;
69278 while (db[i] === 0) {
69279 i++;
69280 }
69281 if (db[i++] !== 1) {
69282 throw new Error('decryption error');
69283 }
69284 return db.slice(i);
69285 }
69286
69287 function pkcs1(key, msg, reverse){
69288 var p1 = msg.slice(0, 2);
69289 var i = 2;
69290 var status = 0;
69291 while (msg[i++] !== 0) {
69292 if (i >= msg.length) {
69293 status++;
69294 break;
69295 }
69296 }
69297 var ps = msg.slice(2, i - 1);
69298 var p2 = msg.slice(i - 1, i);
69299
69300 if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)){
69301 status++;
69302 }
69303 if (ps.length < 8) {
69304 status++;
69305 }
69306 if (status) {
69307 throw new Error('decryption error');
69308 }
69309 return msg.slice(i);
69310 }
69311 function compare(a, b){
69312 a = new Buffer(a);
69313 b = new Buffer(b);
69314 var dif = 0;
69315 var len = a.length;
69316 if (a.length !== b.length) {
69317 dif++;
69318 len = Math.min(a.length, b.length);
69319 }
69320 var i = -1;
69321 while (++i < len) {
69322 dif += (a[i] ^ b[i]);
69323 }
69324 return dif;
69325 }
69326 }).call(this,require("buffer").Buffer)
69327 },{"./mgf":114,"./withPublic":117,"./xor":118,"bn.js":17,"browserify-rsa":38,"buffer":47,"create-hash":51,"parse-asn1":105}],116:[function(require,module,exports){
69328 (function (Buffer){
69329 var parseKeys = require('parse-asn1');
69330 var randomBytes = require('randombytes');
69331 var createHash = require('create-hash');
69332 var mgf = require('./mgf');
69333 var xor = require('./xor');
69334 var bn = require('bn.js');
69335 var withPublic = require('./withPublic');
69336 var crt = require('browserify-rsa');
69337
69338 var constants = {
69339 RSA_PKCS1_OAEP_PADDING: 4,
69340 RSA_PKCS1_PADDIN: 1,
69341 RSA_NO_PADDING: 3
69342 };
69343
69344 module.exports = function publicEncrypt(public_key, msg, reverse) {
69345 var padding;
69346 if (public_key.padding) {
69347 padding = public_key.padding;
69348 } else if (reverse) {
69349 padding = 1;
69350 } else {
69351 padding = 4;
69352 }
69353 var key = parseKeys(public_key);
69354 var paddedMsg;
69355 if (padding === 4) {
69356 paddedMsg = oaep(key, msg);
69357 } else if (padding === 1) {
69358 paddedMsg = pkcs1(key, msg, reverse);
69359 } else if (padding === 3) {
69360 paddedMsg = new bn(msg);
69361 if (paddedMsg.cmp(key.modulus) >= 0) {
69362 throw new Error('data too long for modulus');
69363 }
69364 } else {
69365 throw new Error('unknown padding');
69366 }
69367 if (reverse) {
69368 return crt(paddedMsg, key);
69369 } else {
69370 return withPublic(paddedMsg, key);
69371 }
69372 };
69373
69374 function oaep(key, msg){
69375 var k = key.modulus.byteLength();
69376 var mLen = msg.length;
69377 var iHash = createHash('sha1').update(new Buffer('')).digest();
69378 var hLen = iHash.length;
69379 var hLen2 = 2 * hLen;
69380 if (mLen > k - hLen2 - 2) {
69381 throw new Error('message too long');
69382 }
69383 var ps = new Buffer(k - mLen - hLen2 - 2);
69384 ps.fill(0);
69385 var dblen = k - hLen - 1;
69386 var seed = randomBytes(hLen);
69387 var maskedDb = xor(Buffer.concat([iHash, ps, new Buffer([1]), msg], dblen), mgf(seed, dblen));
69388 var maskedSeed = xor(seed, mgf(maskedDb, hLen));
69389 return new bn(Buffer.concat([new Buffer([0]), maskedSeed, maskedDb], k));
69390 }
69391 function pkcs1(key, msg, reverse){
69392 var mLen = msg.length;
69393 var k = key.modulus.byteLength();
69394 if (mLen > k - 11) {
69395 throw new Error('message too long');
69396 }
69397 var ps;
69398 if (reverse) {
69399 ps = new Buffer(k - mLen - 3);
69400 ps.fill(0xff);
69401 } else {
69402 ps = nonZero(k - mLen - 3);
69403 }
69404 return new bn(Buffer.concat([new Buffer([0, reverse?1:2]), ps, new Buffer([0]), msg], k));
69405 }
69406 function nonZero(len, crypto) {
69407 var out = new Buffer(len);
69408 var i = 0;
69409 var cache = randomBytes(len*2);
69410 var cur = 0;
69411 var num;
69412 while (i < len) {
69413 if (cur === cache.length) {
69414 cache = randomBytes(len*2);
69415 cur = 0;
69416 }
69417 num = cache[cur++];
69418 if (num) {
69419 out[i++] = num;
69420 }
69421 }
69422 return out;
69423 }
69424 }).call(this,require("buffer").Buffer)
69425 },{"./mgf":114,"./withPublic":117,"./xor":118,"bn.js":17,"browserify-rsa":38,"buffer":47,"create-hash":51,"parse-asn1":105,"randombytes":119}],117:[function(require,module,exports){
69426 (function (Buffer){
69427 var bn = require('bn.js');
69428 function withPublic(paddedMsg, key) {
69429 return new Buffer(paddedMsg
69430 .toRed(bn.mont(key.modulus))
69431 .redPow(new bn(key.publicExponent))
69432 .fromRed()
69433 .toArray());
69434 }
69435
69436 module.exports = withPublic;
69437 }).call(this,require("buffer").Buffer)
69438 },{"bn.js":17,"buffer":47}],118:[function(require,module,exports){
69439 module.exports = function xor(a, b) {
69440 var len = a.length;
69441 var i = -1;
69442 while (++i < len) {
69443 a[i] ^= b[i];
69444 }
69445 return a
69446 };
69447 },{}],119:[function(require,module,exports){
69448 (function (process,global,Buffer){
69449 'use strict'
69450
69451 function oldBrowser () {
69452 throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
69453 }
69454
69455 var crypto = global.crypto || global.msCrypto
69456
69457 if (crypto && crypto.getRandomValues) {
69458 module.exports = randomBytes
69459 } else {
69460 module.exports = oldBrowser
69461 }
69462
69463 function randomBytes (size, cb) {
69464 // phantomjs needs to throw
69465 if (size > 65536) throw new Error('requested too many random bytes')
69466 // in case browserify isn't using the Uint8Array version
69467 var rawBytes = new global.Uint8Array(size)
69468
69469 // This will not work in older browsers.
69470 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
69471 if (size > 0) { // getRandomValues fails on IE if size == 0
69472 crypto.getRandomValues(rawBytes)
69473 }
69474 // phantomjs doesn't like a buffer being passed here
69475 var bytes = new Buffer(rawBytes.buffer)
69476
69477 if (typeof cb === 'function') {
69478 return process.nextTick(function () {
69479 cb(null, bytes)
69480 })
69481 }
69482
69483 return bytes
69484 }
69485
69486 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
69487 },{"_process":112,"buffer":47}],120:[function(require,module,exports){
69488 module.exports = require('./lib/_stream_duplex.js');
69489
69490 },{"./lib/_stream_duplex.js":121}],121:[function(require,module,exports){
69491 // a duplex stream is just a stream that is both readable and writable.
69492 // Since JS doesn't have multiple prototypal inheritance, this class
69493 // prototypally inherits from Readable, and then parasitically from
69494 // Writable.
69495
69496 'use strict';
69497
69498 /*<replacement>*/
69499
69500 var objectKeys = Object.keys || function (obj) {
69501 var keys = [];
69502 for (var key in obj) {
69503 keys.push(key);
69504 }return keys;
69505 };
69506 /*</replacement>*/
69507
69508 module.exports = Duplex;
69509
69510 /*<replacement>*/
69511 var processNextTick = require('process-nextick-args');
69512 /*</replacement>*/
69513
69514 /*<replacement>*/
69515 var util = require('core-util-is');
69516 util.inherits = require('inherits');
69517 /*</replacement>*/
69518
69519 var Readable = require('./_stream_readable');
69520 var Writable = require('./_stream_writable');
69521
69522 util.inherits(Duplex, Readable);
69523
69524 var keys = objectKeys(Writable.prototype);
69525 for (var v = 0; v < keys.length; v++) {
69526 var method = keys[v];
69527 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
69528 }
69529
69530 function Duplex(options) {
69531 if (!(this instanceof Duplex)) return new Duplex(options);
69532
69533 Readable.call(this, options);
69534 Writable.call(this, options);
69535
69536 if (options && options.readable === false) this.readable = false;
69537
69538 if (options && options.writable === false) this.writable = false;
69539
69540 this.allowHalfOpen = true;
69541 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
69542
69543 this.once('end', onend);
69544 }
69545
69546 // the no-half-open enforcer
69547 function onend() {
69548 // if we allow half-open state, or if the writable side ended,
69549 // then we're ok.
69550 if (this.allowHalfOpen || this._writableState.ended) return;
69551
69552 // no more data can be written.
69553 // But allow more writes to happen in this tick.
69554 processNextTick(onEndNT, this);
69555 }
69556
69557 function onEndNT(self) {
69558 self.end();
69559 }
69560
69561 function forEach(xs, f) {
69562 for (var i = 0, l = xs.length; i < l; i++) {
69563 f(xs[i], i);
69564 }
69565 }
69566 },{"./_stream_readable":123,"./_stream_writable":125,"core-util-is":49,"inherits":95,"process-nextick-args":111}],122:[function(require,module,exports){
69567 // a passthrough stream.
69568 // basically just the most minimal sort of Transform stream.
69569 // Every written chunk gets output as-is.
69570
69571 'use strict';
69572
69573 module.exports = PassThrough;
69574
69575 var Transform = require('./_stream_transform');
69576
69577 /*<replacement>*/
69578 var util = require('core-util-is');
69579 util.inherits = require('inherits');
69580 /*</replacement>*/
69581
69582 util.inherits(PassThrough, Transform);
69583
69584 function PassThrough(options) {
69585 if (!(this instanceof PassThrough)) return new PassThrough(options);
69586
69587 Transform.call(this, options);
69588 }
69589
69590 PassThrough.prototype._transform = function (chunk, encoding, cb) {
69591 cb(null, chunk);
69592 };
69593 },{"./_stream_transform":124,"core-util-is":49,"inherits":95}],123:[function(require,module,exports){
69594 (function (process){
69595 'use strict';
69596
69597 module.exports = Readable;
69598
69599 /*<replacement>*/
69600 var processNextTick = require('process-nextick-args');
69601 /*</replacement>*/
69602
69603 /*<replacement>*/
69604 var isArray = require('isarray');
69605 /*</replacement>*/
69606
69607 /*<replacement>*/
69608 var Duplex;
69609 /*</replacement>*/
69610
69611 Readable.ReadableState = ReadableState;
69612
69613 /*<replacement>*/
69614 var EE = require('events').EventEmitter;
69615
69616 var EElistenerCount = function (emitter, type) {
69617 return emitter.listeners(type).length;
69618 };
69619 /*</replacement>*/
69620
69621 /*<replacement>*/
69622 var Stream = require('./internal/streams/stream');
69623 /*</replacement>*/
69624
69625 var Buffer = require('buffer').Buffer;
69626 /*<replacement>*/
69627 var bufferShim = require('buffer-shims');
69628 /*</replacement>*/
69629
69630 /*<replacement>*/
69631 var util = require('core-util-is');
69632 util.inherits = require('inherits');
69633 /*</replacement>*/
69634
69635 /*<replacement>*/
69636 var debugUtil = require('util');
69637 var debug = void 0;
69638 if (debugUtil && debugUtil.debuglog) {
69639 debug = debugUtil.debuglog('stream');
69640 } else {
69641 debug = function () {};
69642 }
69643 /*</replacement>*/
69644
69645 var BufferList = require('./internal/streams/BufferList');
69646 var StringDecoder;
69647
69648 util.inherits(Readable, Stream);
69649
69650 var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
69651
69652 function prependListener(emitter, event, fn) {
69653 // Sadly this is not cacheable as some libraries bundle their own
69654 // event emitter implementation with them.
69655 if (typeof emitter.prependListener === 'function') {
69656 return emitter.prependListener(event, fn);
69657 } else {
69658 // This is a hack to make sure that our error handler is attached before any
69659 // userland ones. NEVER DO THIS. This is here only because this code needs
69660 // to continue to work with older versions of Node.js that do not include
69661 // the prependListener() method. The goal is to eventually remove this hack.
69662 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]];
69663 }
69664 }
69665
69666 function ReadableState(options, stream) {
69667 Duplex = Duplex || require('./_stream_duplex');
69668
69669 options = options || {};
69670
69671 // object stream flag. Used to make read(n) ignore n and to
69672 // make all the buffer merging and length checks go away
69673 this.objectMode = !!options.objectMode;
69674
69675 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
69676
69677 // the point at which it stops calling _read() to fill the buffer
69678 // Note: 0 is a valid value, means "don't call _read preemptively ever"
69679 var hwm = options.highWaterMark;
69680 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
69681 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
69682
69683 // cast to ints.
69684 this.highWaterMark = ~~this.highWaterMark;
69685
69686 // A linked list is used to store data chunks instead of an array because the
69687 // linked list can remove elements from the beginning faster than
69688 // array.shift()
69689 this.buffer = new BufferList();
69690 this.length = 0;
69691 this.pipes = null;
69692 this.pipesCount = 0;
69693 this.flowing = null;
69694 this.ended = false;
69695 this.endEmitted = false;
69696 this.reading = false;
69697
69698 // a flag to be able to tell if the onwrite cb is called immediately,
69699 // or on a later tick. We set this to true at first, because any
69700 // actions that shouldn't happen until "later" should generally also
69701 // not happen before the first write call.
69702 this.sync = true;
69703
69704 // whenever we return null, then we set a flag to say
69705 // that we're awaiting a 'readable' event emission.
69706 this.needReadable = false;
69707 this.emittedReadable = false;
69708 this.readableListening = false;
69709 this.resumeScheduled = false;
69710
69711 // Crypto is kind of old and crusty. Historically, its default string
69712 // encoding is 'binary' so we have to make this configurable.
69713 // Everything else in the universe uses 'utf8', though.
69714 this.defaultEncoding = options.defaultEncoding || 'utf8';
69715
69716 // when piping, we only care about 'readable' events that happen
69717 // after read()ing all the bytes and not getting any pushback.
69718 this.ranOut = false;
69719
69720 // the number of writers that are awaiting a drain event in .pipe()s
69721 this.awaitDrain = 0;
69722
69723 // if true, a maybeReadMore has been scheduled
69724 this.readingMore = false;
69725
69726 this.decoder = null;
69727 this.encoding = null;
69728 if (options.encoding) {
69729 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
69730 this.decoder = new StringDecoder(options.encoding);
69731 this.encoding = options.encoding;
69732 }
69733 }
69734
69735 function Readable(options) {
69736 Duplex = Duplex || require('./_stream_duplex');
69737
69738 if (!(this instanceof Readable)) return new Readable(options);
69739
69740 this._readableState = new ReadableState(options, this);
69741
69742 // legacy
69743 this.readable = true;
69744
69745 if (options && typeof options.read === 'function') this._read = options.read;
69746
69747 Stream.call(this);
69748 }
69749
69750 // Manually shove something into the read() buffer.
69751 // This returns true if the highWaterMark has not been hit yet,
69752 // similar to how Writable.write() returns true if you should
69753 // write() some more.
69754 Readable.prototype.push = function (chunk, encoding) {
69755 var state = this._readableState;
69756
69757 if (!state.objectMode && typeof chunk === 'string') {
69758 encoding = encoding || state.defaultEncoding;
69759 if (encoding !== state.encoding) {
69760 chunk = bufferShim.from(chunk, encoding);
69761 encoding = '';
69762 }
69763 }
69764
69765 return readableAddChunk(this, state, chunk, encoding, false);
69766 };
69767
69768 // Unshift should *always* be something directly out of read()
69769 Readable.prototype.unshift = function (chunk) {
69770 var state = this._readableState;
69771 return readableAddChunk(this, state, chunk, '', true);
69772 };
69773
69774 Readable.prototype.isPaused = function () {
69775 return this._readableState.flowing === false;
69776 };
69777
69778 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
69779 var er = chunkInvalid(state, chunk);
69780 if (er) {
69781 stream.emit('error', er);
69782 } else if (chunk === null) {
69783 state.reading = false;
69784 onEofChunk(stream, state);
69785 } else if (state.objectMode || chunk && chunk.length > 0) {
69786 if (state.ended && !addToFront) {
69787 var e = new Error('stream.push() after EOF');
69788 stream.emit('error', e);
69789 } else if (state.endEmitted && addToFront) {
69790 var _e = new Error('stream.unshift() after end event');
69791 stream.emit('error', _e);
69792 } else {
69793 var skipAdd;
69794 if (state.decoder && !addToFront && !encoding) {
69795 chunk = state.decoder.write(chunk);
69796 skipAdd = !state.objectMode && chunk.length === 0;
69797 }
69798
69799 if (!addToFront) state.reading = false;
69800
69801 // Don't add to the buffer if we've decoded to an empty string chunk and
69802 // we're not in object mode
69803 if (!skipAdd) {
69804 // if we want the data now, just emit it.
69805 if (state.flowing && state.length === 0 && !state.sync) {
69806 stream.emit('data', chunk);
69807 stream.read(0);
69808 } else {
69809 // update the buffer info.
69810 state.length += state.objectMode ? 1 : chunk.length;
69811 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
69812
69813 if (state.needReadable) emitReadable(stream);
69814 }
69815 }
69816
69817 maybeReadMore(stream, state);
69818 }
69819 } else if (!addToFront) {
69820 state.reading = false;
69821 }
69822
69823 return needMoreData(state);
69824 }
69825
69826 // if it's past the high water mark, we can push in some more.
69827 // Also, if we have no data yet, we can stand some
69828 // more bytes. This is to work around cases where hwm=0,
69829 // such as the repl. Also, if the push() triggered a
69830 // readable event, and the user called read(largeNumber) such that
69831 // needReadable was set, then we ought to push more, so that another
69832 // 'readable' event will be triggered.
69833 function needMoreData(state) {
69834 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
69835 }
69836
69837 // backwards compatibility.
69838 Readable.prototype.setEncoding = function (enc) {
69839 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
69840 this._readableState.decoder = new StringDecoder(enc);
69841 this._readableState.encoding = enc;
69842 return this;
69843 };
69844
69845 // Don't raise the hwm > 8MB
69846 var MAX_HWM = 0x800000;
69847 function computeNewHighWaterMark(n) {
69848 if (n >= MAX_HWM) {
69849 n = MAX_HWM;
69850 } else {
69851 // Get the next highest power of 2 to prevent increasing hwm excessively in
69852 // tiny amounts
69853 n--;
69854 n |= n >>> 1;
69855 n |= n >>> 2;
69856 n |= n >>> 4;
69857 n |= n >>> 8;
69858 n |= n >>> 16;
69859 n++;
69860 }
69861 return n;
69862 }
69863
69864 // This function is designed to be inlinable, so please take care when making
69865 // changes to the function body.
69866 function howMuchToRead(n, state) {
69867 if (n <= 0 || state.length === 0 && state.ended) return 0;
69868 if (state.objectMode) return 1;
69869 if (n !== n) {
69870 // Only flow one buffer at a time
69871 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
69872 }
69873 // If we're asking for more than the current hwm, then raise the hwm.
69874 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
69875 if (n <= state.length) return n;
69876 // Don't have enough
69877 if (!state.ended) {
69878 state.needReadable = true;
69879 return 0;
69880 }
69881 return state.length;
69882 }
69883
69884 // you can override either this method, or the async _read(n) below.
69885 Readable.prototype.read = function (n) {
69886 debug('read', n);
69887 n = parseInt(n, 10);
69888 var state = this._readableState;
69889 var nOrig = n;
69890
69891 if (n !== 0) state.emittedReadable = false;
69892
69893 // if we're doing read(0) to trigger a readable event, but we
69894 // already have a bunch of data in the buffer, then just trigger
69895 // the 'readable' event and move on.
69896 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
69897 debug('read: emitReadable', state.length, state.ended);
69898 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
69899 return null;
69900 }
69901
69902 n = howMuchToRead(n, state);
69903
69904 // if we've ended, and we're now clear, then finish it up.
69905 if (n === 0 && state.ended) {
69906 if (state.length === 0) endReadable(this);
69907 return null;
69908 }
69909
69910 // All the actual chunk generation logic needs to be
69911 // *below* the call to _read. The reason is that in certain
69912 // synthetic stream cases, such as passthrough streams, _read
69913 // may be a completely synchronous operation which may change
69914 // the state of the read buffer, providing enough data when
69915 // before there was *not* enough.
69916 //
69917 // So, the steps are:
69918 // 1. Figure out what the state of things will be after we do
69919 // a read from the buffer.
69920 //
69921 // 2. If that resulting state will trigger a _read, then call _read.
69922 // Note that this may be asynchronous, or synchronous. Yes, it is
69923 // deeply ugly to write APIs this way, but that still doesn't mean
69924 // that the Readable class should behave improperly, as streams are
69925 // designed to be sync/async agnostic.
69926 // Take note if the _read call is sync or async (ie, if the read call
69927 // has returned yet), so that we know whether or not it's safe to emit
69928 // 'readable' etc.
69929 //
69930 // 3. Actually pull the requested chunks out of the buffer and return.
69931
69932 // if we need a readable event, then we need to do some reading.
69933 var doRead = state.needReadable;
69934 debug('need readable', doRead);
69935
69936 // if we currently have less than the highWaterMark, then also read some
69937 if (state.length === 0 || state.length - n < state.highWaterMark) {
69938 doRead = true;
69939 debug('length less than watermark', doRead);
69940 }
69941
69942 // however, if we've ended, then there's no point, and if we're already
69943 // reading, then it's unnecessary.
69944 if (state.ended || state.reading) {
69945 doRead = false;
69946 debug('reading or ended', doRead);
69947 } else if (doRead) {
69948 debug('do read');
69949 state.reading = true;
69950 state.sync = true;
69951 // if the length is currently zero, then we *need* a readable event.
69952 if (state.length === 0) state.needReadable = true;
69953 // call internal read method
69954 this._read(state.highWaterMark);
69955 state.sync = false;
69956 // If _read pushed data synchronously, then `reading` will be false,
69957 // and we need to re-evaluate how much data we can return to the user.
69958 if (!state.reading) n = howMuchToRead(nOrig, state);
69959 }
69960
69961 var ret;
69962 if (n > 0) ret = fromList(n, state);else ret = null;
69963
69964 if (ret === null) {
69965 state.needReadable = true;
69966 n = 0;
69967 } else {
69968 state.length -= n;
69969 }
69970
69971 if (state.length === 0) {
69972 // If we have nothing in the buffer, then we want to know
69973 // as soon as we *do* get something into the buffer.
69974 if (!state.ended) state.needReadable = true;
69975
69976 // If we tried to read() past the EOF, then emit end on the next tick.
69977 if (nOrig !== n && state.ended) endReadable(this);
69978 }
69979
69980 if (ret !== null) this.emit('data', ret);
69981
69982 return ret;
69983 };
69984
69985 function chunkInvalid(state, chunk) {
69986 var er = null;
69987 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
69988 er = new TypeError('Invalid non-string/buffer chunk');
69989 }
69990 return er;
69991 }
69992
69993 function onEofChunk(stream, state) {
69994 if (state.ended) return;
69995 if (state.decoder) {
69996 var chunk = state.decoder.end();
69997 if (chunk && chunk.length) {
69998 state.buffer.push(chunk);
69999 state.length += state.objectMode ? 1 : chunk.length;
70000 }
70001 }
70002 state.ended = true;
70003
70004 // emit 'readable' now to make sure it gets picked up.
70005 emitReadable(stream);
70006 }
70007
70008 // Don't emit readable right away in sync mode, because this can trigger
70009 // another read() call => stack overflow. This way, it might trigger
70010 // a nextTick recursion warning, but that's not so bad.
70011 function emitReadable(stream) {
70012 var state = stream._readableState;
70013 state.needReadable = false;
70014 if (!state.emittedReadable) {
70015 debug('emitReadable', state.flowing);
70016 state.emittedReadable = true;
70017 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
70018 }
70019 }
70020
70021 function emitReadable_(stream) {
70022 debug('emit readable');
70023 stream.emit('readable');
70024 flow(stream);
70025 }
70026
70027 // at this point, the user has presumably seen the 'readable' event,
70028 // and called read() to consume some data. that may have triggered
70029 // in turn another _read(n) call, in which case reading = true if
70030 // it's in progress.
70031 // However, if we're not ended, or reading, and the length < hwm,
70032 // then go ahead and try to read some more preemptively.
70033 function maybeReadMore(stream, state) {
70034 if (!state.readingMore) {
70035 state.readingMore = true;
70036 processNextTick(maybeReadMore_, stream, state);
70037 }
70038 }
70039
70040 function maybeReadMore_(stream, state) {
70041 var len = state.length;
70042 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
70043 debug('maybeReadMore read 0');
70044 stream.read(0);
70045 if (len === state.length)
70046 // didn't get any data, stop spinning.
70047 break;else len = state.length;
70048 }
70049 state.readingMore = false;
70050 }
70051
70052 // abstract method. to be overridden in specific implementation classes.
70053 // call cb(er, data) where data is <= n in length.
70054 // for virtual (non-string, non-buffer) streams, "length" is somewhat
70055 // arbitrary, and perhaps not very meaningful.
70056 Readable.prototype._read = function (n) {
70057 this.emit('error', new Error('_read() is not implemented'));
70058 };
70059
70060 Readable.prototype.pipe = function (dest, pipeOpts) {
70061 var src = this;
70062 var state = this._readableState;
70063
70064 switch (state.pipesCount) {
70065 case 0:
70066 state.pipes = dest;
70067 break;
70068 case 1:
70069 state.pipes = [state.pipes, dest];
70070 break;
70071 default:
70072 state.pipes.push(dest);
70073 break;
70074 }
70075 state.pipesCount += 1;
70076 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
70077
70078 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
70079
70080 var endFn = doEnd ? onend : cleanup;
70081 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
70082
70083 dest.on('unpipe', onunpipe);
70084 function onunpipe(readable) {
70085 debug('onunpipe');
70086 if (readable === src) {
70087 cleanup();
70088 }
70089 }
70090
70091 function onend() {
70092 debug('onend');
70093 dest.end();
70094 }
70095
70096 // when the dest drains, it reduces the awaitDrain counter
70097 // on the source. This would be more elegant with a .once()
70098 // handler in flow(), but adding and removing repeatedly is
70099 // too slow.
70100 var ondrain = pipeOnDrain(src);
70101 dest.on('drain', ondrain);
70102
70103 var cleanedUp = false;
70104 function cleanup() {
70105 debug('cleanup');
70106 // cleanup event handlers once the pipe is broken
70107 dest.removeListener('close', onclose);
70108 dest.removeListener('finish', onfinish);
70109 dest.removeListener('drain', ondrain);
70110 dest.removeListener('error', onerror);
70111 dest.removeListener('unpipe', onunpipe);
70112 src.removeListener('end', onend);
70113 src.removeListener('end', cleanup);
70114 src.removeListener('data', ondata);
70115
70116 cleanedUp = true;
70117
70118 // if the reader is waiting for a drain event from this
70119 // specific writer, then it would cause it to never start
70120 // flowing again.
70121 // So, if this is awaiting a drain, then we just call it now.
70122 // If we don't know, then assume that we are waiting for one.
70123 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
70124 }
70125
70126 // If the user pushes more data while we're writing to dest then we'll end up
70127 // in ondata again. However, we only want to increase awaitDrain once because
70128 // dest will only emit one 'drain' event for the multiple writes.
70129 // => Introduce a guard on increasing awaitDrain.
70130 var increasedAwaitDrain = false;
70131 src.on('data', ondata);
70132 function ondata(chunk) {
70133 debug('ondata');
70134 increasedAwaitDrain = false;
70135 var ret = dest.write(chunk);
70136 if (false === ret && !increasedAwaitDrain) {
70137 // If the user unpiped during `dest.write()`, it is possible
70138 // to get stuck in a permanently paused state if that write
70139 // also returned false.
70140 // => Check whether `dest` is still a piping destination.
70141 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
70142 debug('false write response, pause', src._readableState.awaitDrain);
70143 src._readableState.awaitDrain++;
70144 increasedAwaitDrain = true;
70145 }
70146 src.pause();
70147 }
70148 }
70149
70150 // if the dest has an error, then stop piping into it.
70151 // however, don't suppress the throwing behavior for this.
70152 function onerror(er) {
70153 debug('onerror', er);
70154 unpipe();
70155 dest.removeListener('error', onerror);
70156 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
70157 }
70158
70159 // Make sure our error handler is attached before userland ones.
70160 prependListener(dest, 'error', onerror);
70161
70162 // Both close and finish should trigger unpipe, but only once.
70163 function onclose() {
70164 dest.removeListener('finish', onfinish);
70165 unpipe();
70166 }
70167 dest.once('close', onclose);
70168 function onfinish() {
70169 debug('onfinish');
70170 dest.removeListener('close', onclose);
70171 unpipe();
70172 }
70173 dest.once('finish', onfinish);
70174
70175 function unpipe() {
70176 debug('unpipe');
70177 src.unpipe(dest);
70178 }
70179
70180 // tell the dest that it's being piped to
70181 dest.emit('pipe', src);
70182
70183 // start the flow if it hasn't been started already.
70184 if (!state.flowing) {
70185 debug('pipe resume');
70186 src.resume();
70187 }
70188
70189 return dest;
70190 };
70191
70192 function pipeOnDrain(src) {
70193 return function () {
70194 var state = src._readableState;
70195 debug('pipeOnDrain', state.awaitDrain);
70196 if (state.awaitDrain) state.awaitDrain--;
70197 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
70198 state.flowing = true;
70199 flow(src);
70200 }
70201 };
70202 }
70203
70204 Readable.prototype.unpipe = function (dest) {
70205 var state = this._readableState;
70206
70207 // if we're not piping anywhere, then do nothing.
70208 if (state.pipesCount === 0) return this;
70209
70210 // just one destination. most common case.
70211 if (state.pipesCount === 1) {
70212 // passed in one, but it's not the right one.
70213 if (dest && dest !== state.pipes) return this;
70214
70215 if (!dest) dest = state.pipes;
70216
70217 // got a match.
70218 state.pipes = null;
70219 state.pipesCount = 0;
70220 state.flowing = false;
70221 if (dest) dest.emit('unpipe', this);
70222 return this;
70223 }
70224
70225 // slow case. multiple pipe destinations.
70226
70227 if (!dest) {
70228 // remove all.
70229 var dests = state.pipes;
70230 var len = state.pipesCount;
70231 state.pipes = null;
70232 state.pipesCount = 0;
70233 state.flowing = false;
70234
70235 for (var i = 0; i < len; i++) {
70236 dests[i].emit('unpipe', this);
70237 }return this;
70238 }
70239
70240 // try to find the right one.
70241 var index = indexOf(state.pipes, dest);
70242 if (index === -1) return this;
70243
70244 state.pipes.splice(index, 1);
70245 state.pipesCount -= 1;
70246 if (state.pipesCount === 1) state.pipes = state.pipes[0];
70247
70248 dest.emit('unpipe', this);
70249
70250 return this;
70251 };
70252
70253 // set up data events if they are asked for
70254 // Ensure readable listeners eventually get something
70255 Readable.prototype.on = function (ev, fn) {
70256 var res = Stream.prototype.on.call(this, ev, fn);
70257
70258 if (ev === 'data') {
70259 // Start flowing on next tick if stream isn't explicitly paused
70260 if (this._readableState.flowing !== false) this.resume();
70261 } else if (ev === 'readable') {
70262 var state = this._readableState;
70263 if (!state.endEmitted && !state.readableListening) {
70264 state.readableListening = state.needReadable = true;
70265 state.emittedReadable = false;
70266 if (!state.reading) {
70267 processNextTick(nReadingNextTick, this);
70268 } else if (state.length) {
70269 emitReadable(this, state);
70270 }
70271 }
70272 }
70273
70274 return res;
70275 };
70276 Readable.prototype.addListener = Readable.prototype.on;
70277
70278 function nReadingNextTick(self) {
70279 debug('readable nexttick read 0');
70280 self.read(0);
70281 }
70282
70283 // pause() and resume() are remnants of the legacy readable stream API
70284 // If the user uses them, then switch into old mode.
70285 Readable.prototype.resume = function () {
70286 var state = this._readableState;
70287 if (!state.flowing) {
70288 debug('resume');
70289 state.flowing = true;
70290 resume(this, state);
70291 }
70292 return this;
70293 };
70294
70295 function resume(stream, state) {
70296 if (!state.resumeScheduled) {
70297 state.resumeScheduled = true;
70298 processNextTick(resume_, stream, state);
70299 }
70300 }
70301
70302 function resume_(stream, state) {
70303 if (!state.reading) {
70304 debug('resume read 0');
70305 stream.read(0);
70306 }
70307
70308 state.resumeScheduled = false;
70309 state.awaitDrain = 0;
70310 stream.emit('resume');
70311 flow(stream);
70312 if (state.flowing && !state.reading) stream.read(0);
70313 }
70314
70315 Readable.prototype.pause = function () {
70316 debug('call pause flowing=%j', this._readableState.flowing);
70317 if (false !== this._readableState.flowing) {
70318 debug('pause');
70319 this._readableState.flowing = false;
70320 this.emit('pause');
70321 }
70322 return this;
70323 };
70324
70325 function flow(stream) {
70326 var state = stream._readableState;
70327 debug('flow', state.flowing);
70328 while (state.flowing && stream.read() !== null) {}
70329 }
70330
70331 // wrap an old-style stream as the async data source.
70332 // This is *not* part of the readable stream interface.
70333 // It is an ugly unfortunate mess of history.
70334 Readable.prototype.wrap = function (stream) {
70335 var state = this._readableState;
70336 var paused = false;
70337
70338 var self = this;
70339 stream.on('end', function () {
70340 debug('wrapped end');
70341 if (state.decoder && !state.ended) {
70342 var chunk = state.decoder.end();
70343 if (chunk && chunk.length) self.push(chunk);
70344 }
70345
70346 self.push(null);
70347 });
70348
70349 stream.on('data', function (chunk) {
70350 debug('wrapped data');
70351 if (state.decoder) chunk = state.decoder.write(chunk);
70352
70353 // don't skip over falsy values in objectMode
70354 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
70355
70356 var ret = self.push(chunk);
70357 if (!ret) {
70358 paused = true;
70359 stream.pause();
70360 }
70361 });
70362
70363 // proxy all the other methods.
70364 // important when wrapping filters and duplexes.
70365 for (var i in stream) {
70366 if (this[i] === undefined && typeof stream[i] === 'function') {
70367 this[i] = function (method) {
70368 return function () {
70369 return stream[method].apply(stream, arguments);
70370 };
70371 }(i);
70372 }
70373 }
70374
70375 // proxy certain important events.
70376 for (var n = 0; n < kProxyEvents.length; n++) {
70377 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
70378 }
70379
70380 // when we try to consume some more bytes, simply unpause the
70381 // underlying stream.
70382 self._read = function (n) {
70383 debug('wrapped _read', n);
70384 if (paused) {
70385 paused = false;
70386 stream.resume();
70387 }
70388 };
70389
70390 return self;
70391 };
70392
70393 // exposed for testing purposes only.
70394 Readable._fromList = fromList;
70395
70396 // Pluck off n bytes from an array of buffers.
70397 // Length is the combined lengths of all the buffers in the list.
70398 // This function is designed to be inlinable, so please take care when making
70399 // changes to the function body.
70400 function fromList(n, state) {
70401 // nothing buffered
70402 if (state.length === 0) return null;
70403
70404 var ret;
70405 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
70406 // read it all, truncate the list
70407 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);
70408 state.buffer.clear();
70409 } else {
70410 // read part of list
70411 ret = fromListPartial(n, state.buffer, state.decoder);
70412 }
70413
70414 return ret;
70415 }
70416
70417 // Extracts only enough buffered data to satisfy the amount requested.
70418 // This function is designed to be inlinable, so please take care when making
70419 // changes to the function body.
70420 function fromListPartial(n, list, hasStrings) {
70421 var ret;
70422 if (n < list.head.data.length) {
70423 // slice is the same for buffers and strings
70424 ret = list.head.data.slice(0, n);
70425 list.head.data = list.head.data.slice(n);
70426 } else if (n === list.head.data.length) {
70427 // first chunk is a perfect match
70428 ret = list.shift();
70429 } else {
70430 // result spans more than one buffer
70431 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
70432 }
70433 return ret;
70434 }
70435
70436 // Copies a specified amount of characters from the list of buffered data
70437 // chunks.
70438 // This function is designed to be inlinable, so please take care when making
70439 // changes to the function body.
70440 function copyFromBufferString(n, list) {
70441 var p = list.head;
70442 var c = 1;
70443 var ret = p.data;
70444 n -= ret.length;
70445 while (p = p.next) {
70446 var str = p.data;
70447 var nb = n > str.length ? str.length : n;
70448 if (nb === str.length) ret += str;else ret += str.slice(0, n);
70449 n -= nb;
70450 if (n === 0) {
70451 if (nb === str.length) {
70452 ++c;
70453 if (p.next) list.head = p.next;else list.head = list.tail = null;
70454 } else {
70455 list.head = p;
70456 p.data = str.slice(nb);
70457 }
70458 break;
70459 }
70460 ++c;
70461 }
70462 list.length -= c;
70463 return ret;
70464 }
70465
70466 // Copies a specified amount of bytes from the list of buffered data chunks.
70467 // This function is designed to be inlinable, so please take care when making
70468 // changes to the function body.
70469 function copyFromBuffer(n, list) {
70470 var ret = bufferShim.allocUnsafe(n);
70471 var p = list.head;
70472 var c = 1;
70473 p.data.copy(ret);
70474 n -= p.data.length;
70475 while (p = p.next) {
70476 var buf = p.data;
70477 var nb = n > buf.length ? buf.length : n;
70478 buf.copy(ret, ret.length - n, 0, nb);
70479 n -= nb;
70480 if (n === 0) {
70481 if (nb === buf.length) {
70482 ++c;
70483 if (p.next) list.head = p.next;else list.head = list.tail = null;
70484 } else {
70485 list.head = p;
70486 p.data = buf.slice(nb);
70487 }
70488 break;
70489 }
70490 ++c;
70491 }
70492 list.length -= c;
70493 return ret;
70494 }
70495
70496 function endReadable(stream) {
70497 var state = stream._readableState;
70498
70499 // If we get here before consuming all the bytes, then that is a
70500 // bug in node. Should never happen.
70501 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
70502
70503 if (!state.endEmitted) {
70504 state.ended = true;
70505 processNextTick(endReadableNT, state, stream);
70506 }
70507 }
70508
70509 function endReadableNT(state, stream) {
70510 // Check that we didn't get one last unshift.
70511 if (!state.endEmitted && state.length === 0) {
70512 state.endEmitted = true;
70513 stream.readable = false;
70514 stream.emit('end');
70515 }
70516 }
70517
70518 function forEach(xs, f) {
70519 for (var i = 0, l = xs.length; i < l; i++) {
70520 f(xs[i], i);
70521 }
70522 }
70523
70524 function indexOf(xs, x) {
70525 for (var i = 0, l = xs.length; i < l; i++) {
70526 if (xs[i] === x) return i;
70527 }
70528 return -1;
70529 }
70530 }).call(this,require('_process'))
70531 },{"./_stream_duplex":121,"./internal/streams/BufferList":126,"./internal/streams/stream":127,"_process":112,"buffer":47,"buffer-shims":45,"core-util-is":49,"events":83,"inherits":95,"isarray":97,"process-nextick-args":111,"string_decoder/":128,"util":19}],124:[function(require,module,exports){
70532 // a transform stream is a readable/writable stream where you do
70533 // something with the data. Sometimes it's called a "filter",
70534 // but that's not a great name for it, since that implies a thing where
70535 // some bits pass through, and others are simply ignored. (That would
70536 // be a valid example of a transform, of course.)
70537 //
70538 // While the output is causally related to the input, it's not a
70539 // necessarily symmetric or synchronous transformation. For example,
70540 // a zlib stream might take multiple plain-text writes(), and then
70541 // emit a single compressed chunk some time in the future.
70542 //
70543 // Here's how this works:
70544 //
70545 // The Transform stream has all the aspects of the readable and writable
70546 // stream classes. When you write(chunk), that calls _write(chunk,cb)
70547 // internally, and returns false if there's a lot of pending writes
70548 // buffered up. When you call read(), that calls _read(n) until
70549 // there's enough pending readable data buffered up.
70550 //
70551 // In a transform stream, the written data is placed in a buffer. When
70552 // _read(n) is called, it transforms the queued up data, calling the
70553 // buffered _write cb's as it consumes chunks. If consuming a single
70554 // written chunk would result in multiple output chunks, then the first
70555 // outputted bit calls the readcb, and subsequent chunks just go into
70556 // the read buffer, and will cause it to emit 'readable' if necessary.
70557 //
70558 // This way, back-pressure is actually determined by the reading side,
70559 // since _read has to be called to start processing a new chunk. However,
70560 // a pathological inflate type of transform can cause excessive buffering
70561 // here. For example, imagine a stream where every byte of input is
70562 // interpreted as an integer from 0-255, and then results in that many
70563 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
70564 // 1kb of data being output. In this case, you could write a very small
70565 // amount of input, and end up with a very large amount of output. In
70566 // such a pathological inflating mechanism, there'd be no way to tell
70567 // the system to stop doing the transform. A single 4MB write could
70568 // cause the system to run out of memory.
70569 //
70570 // However, even in such a pathological case, only a single written chunk
70571 // would be consumed, and then the rest would wait (un-transformed) until
70572 // the results of the previous transformed chunk were consumed.
70573
70574 'use strict';
70575
70576 module.exports = Transform;
70577
70578 var Duplex = require('./_stream_duplex');
70579
70580 /*<replacement>*/
70581 var util = require('core-util-is');
70582 util.inherits = require('inherits');
70583 /*</replacement>*/
70584
70585 util.inherits(Transform, Duplex);
70586
70587 function TransformState(stream) {
70588 this.afterTransform = function (er, data) {
70589 return afterTransform(stream, er, data);
70590 };
70591
70592 this.needTransform = false;
70593 this.transforming = false;
70594 this.writecb = null;
70595 this.writechunk = null;
70596 this.writeencoding = null;
70597 }
70598
70599 function afterTransform(stream, er, data) {
70600 var ts = stream._transformState;
70601 ts.transforming = false;
70602
70603 var cb = ts.writecb;
70604
70605 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
70606
70607 ts.writechunk = null;
70608 ts.writecb = null;
70609
70610 if (data !== null && data !== undefined) stream.push(data);
70611
70612 cb(er);
70613
70614 var rs = stream._readableState;
70615 rs.reading = false;
70616 if (rs.needReadable || rs.length < rs.highWaterMark) {
70617 stream._read(rs.highWaterMark);
70618 }
70619 }
70620
70621 function Transform(options) {
70622 if (!(this instanceof Transform)) return new Transform(options);
70623
70624 Duplex.call(this, options);
70625
70626 this._transformState = new TransformState(this);
70627
70628 var stream = this;
70629
70630 // start out asking for a readable event once data is transformed.
70631 this._readableState.needReadable = true;
70632
70633 // we have implemented the _read method, and done the other things
70634 // that Readable wants before the first _read call, so unset the
70635 // sync guard flag.
70636 this._readableState.sync = false;
70637
70638 if (options) {
70639 if (typeof options.transform === 'function') this._transform = options.transform;
70640
70641 if (typeof options.flush === 'function') this._flush = options.flush;
70642 }
70643
70644 // When the writable side finishes, then flush out anything remaining.
70645 this.once('prefinish', function () {
70646 if (typeof this._flush === 'function') this._flush(function (er, data) {
70647 done(stream, er, data);
70648 });else done(stream);
70649 });
70650 }
70651
70652 Transform.prototype.push = function (chunk, encoding) {
70653 this._transformState.needTransform = false;
70654 return Duplex.prototype.push.call(this, chunk, encoding);
70655 };
70656
70657 // This is the part where you do stuff!
70658 // override this function in implementation classes.
70659 // 'chunk' is an input chunk.
70660 //
70661 // Call `push(newChunk)` to pass along transformed output
70662 // to the readable side. You may call 'push' zero or more times.
70663 //
70664 // Call `cb(err)` when you are done with this chunk. If you pass
70665 // an error, then that'll put the hurt on the whole operation. If you
70666 // never call cb(), then you'll never get another chunk.
70667 Transform.prototype._transform = function (chunk, encoding, cb) {
70668 throw new Error('_transform() is not implemented');
70669 };
70670
70671 Transform.prototype._write = function (chunk, encoding, cb) {
70672 var ts = this._transformState;
70673 ts.writecb = cb;
70674 ts.writechunk = chunk;
70675 ts.writeencoding = encoding;
70676 if (!ts.transforming) {
70677 var rs = this._readableState;
70678 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
70679 }
70680 };
70681
70682 // Doesn't matter what the args are here.
70683 // _transform does all the work.
70684 // That we got here means that the readable side wants more data.
70685 Transform.prototype._read = function (n) {
70686 var ts = this._transformState;
70687
70688 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
70689 ts.transforming = true;
70690 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
70691 } else {
70692 // mark that we need a transform, so that any data that comes in
70693 // will get processed, now that we've asked for it.
70694 ts.needTransform = true;
70695 }
70696 };
70697
70698 function done(stream, er, data) {
70699 if (er) return stream.emit('error', er);
70700
70701 if (data !== null && data !== undefined) stream.push(data);
70702
70703 // if there's nothing in the write buffer, then that means
70704 // that nothing more will ever be provided
70705 var ws = stream._writableState;
70706 var ts = stream._transformState;
70707
70708 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
70709
70710 if (ts.transforming) throw new Error('Calling transform done when still transforming');
70711
70712 return stream.push(null);
70713 }
70714 },{"./_stream_duplex":121,"core-util-is":49,"inherits":95}],125:[function(require,module,exports){
70715 (function (process){
70716 // A bit simpler than readable streams.
70717 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
70718 // the drain event emission and buffering.
70719
70720 'use strict';
70721
70722 module.exports = Writable;
70723
70724 /*<replacement>*/
70725 var processNextTick = require('process-nextick-args');
70726 /*</replacement>*/
70727
70728 /*<replacement>*/
70729 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
70730 /*</replacement>*/
70731
70732 /*<replacement>*/
70733 var Duplex;
70734 /*</replacement>*/
70735
70736 Writable.WritableState = WritableState;
70737
70738 /*<replacement>*/
70739 var util = require('core-util-is');
70740 util.inherits = require('inherits');
70741 /*</replacement>*/
70742
70743 /*<replacement>*/
70744 var internalUtil = {
70745 deprecate: require('util-deprecate')
70746 };
70747 /*</replacement>*/
70748
70749 /*<replacement>*/
70750 var Stream = require('./internal/streams/stream');
70751 /*</replacement>*/
70752
70753 var Buffer = require('buffer').Buffer;
70754 /*<replacement>*/
70755 var bufferShim = require('buffer-shims');
70756 /*</replacement>*/
70757
70758 util.inherits(Writable, Stream);
70759
70760 function nop() {}
70761
70762 function WriteReq(chunk, encoding, cb) {
70763 this.chunk = chunk;
70764 this.encoding = encoding;
70765 this.callback = cb;
70766 this.next = null;
70767 }
70768
70769 function WritableState(options, stream) {
70770 Duplex = Duplex || require('./_stream_duplex');
70771
70772 options = options || {};
70773
70774 // object stream flag to indicate whether or not this stream
70775 // contains buffers or objects.
70776 this.objectMode = !!options.objectMode;
70777
70778 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
70779
70780 // the point at which write() starts returning false
70781 // Note: 0 is a valid value, means that we always return false if
70782 // the entire buffer is not flushed immediately on write()
70783 var hwm = options.highWaterMark;
70784 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
70785 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
70786
70787 // cast to ints.
70788 this.highWaterMark = ~~this.highWaterMark;
70789
70790 // drain event flag.
70791 this.needDrain = false;
70792 // at the start of calling end()
70793 this.ending = false;
70794 // when end() has been called, and returned
70795 this.ended = false;
70796 // when 'finish' is emitted
70797 this.finished = false;
70798
70799 // should we decode strings into buffers before passing to _write?
70800 // this is here so that some node-core streams can optimize string
70801 // handling at a lower level.
70802 var noDecode = options.decodeStrings === false;
70803 this.decodeStrings = !noDecode;
70804
70805 // Crypto is kind of old and crusty. Historically, its default string
70806 // encoding is 'binary' so we have to make this configurable.
70807 // Everything else in the universe uses 'utf8', though.
70808 this.defaultEncoding = options.defaultEncoding || 'utf8';
70809
70810 // not an actual buffer we keep track of, but a measurement
70811 // of how much we're waiting to get pushed to some underlying
70812 // socket or file.
70813 this.length = 0;
70814
70815 // a flag to see when we're in the middle of a write.
70816 this.writing = false;
70817
70818 // when true all writes will be buffered until .uncork() call
70819 this.corked = 0;
70820
70821 // a flag to be able to tell if the onwrite cb is called immediately,
70822 // or on a later tick. We set this to true at first, because any
70823 // actions that shouldn't happen until "later" should generally also
70824 // not happen before the first write call.
70825 this.sync = true;
70826
70827 // a flag to know if we're processing previously buffered items, which
70828 // may call the _write() callback in the same tick, so that we don't
70829 // end up in an overlapped onwrite situation.
70830 this.bufferProcessing = false;
70831
70832 // the callback that's passed to _write(chunk,cb)
70833 this.onwrite = function (er) {
70834 onwrite(stream, er);
70835 };
70836
70837 // the callback that the user supplies to write(chunk,encoding,cb)
70838 this.writecb = null;
70839
70840 // the amount that is being written when _write is called.
70841 this.writelen = 0;
70842
70843 this.bufferedRequest = null;
70844 this.lastBufferedRequest = null;
70845
70846 // number of pending user-supplied write callbacks
70847 // this must be 0 before 'finish' can be emitted
70848 this.pendingcb = 0;
70849
70850 // emit prefinish if the only thing we're waiting for is _write cbs
70851 // This is relevant for synchronous Transform streams
70852 this.prefinished = false;
70853
70854 // True if the error was already emitted and should not be thrown again
70855 this.errorEmitted = false;
70856
70857 // count buffered requests
70858 this.bufferedRequestCount = 0;
70859
70860 // allocate the first CorkedRequest, there is always
70861 // one allocated and free to use, and we maintain at most two
70862 this.corkedRequestsFree = new CorkedRequest(this);
70863 }
70864
70865 WritableState.prototype.getBuffer = function getBuffer() {
70866 var current = this.bufferedRequest;
70867 var out = [];
70868 while (current) {
70869 out.push(current);
70870 current = current.next;
70871 }
70872 return out;
70873 };
70874
70875 (function () {
70876 try {
70877 Object.defineProperty(WritableState.prototype, 'buffer', {
70878 get: internalUtil.deprecate(function () {
70879 return this.getBuffer();
70880 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
70881 });
70882 } catch (_) {}
70883 })();
70884
70885 // Test _writableState for inheritance to account for Duplex streams,
70886 // whose prototype chain only points to Readable.
70887 var realHasInstance;
70888 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
70889 realHasInstance = Function.prototype[Symbol.hasInstance];
70890 Object.defineProperty(Writable, Symbol.hasInstance, {
70891 value: function (object) {
70892 if (realHasInstance.call(this, object)) return true;
70893
70894 return object && object._writableState instanceof WritableState;
70895 }
70896 });
70897 } else {
70898 realHasInstance = function (object) {
70899 return object instanceof this;
70900 };
70901 }
70902
70903 function Writable(options) {
70904 Duplex = Duplex || require('./_stream_duplex');
70905
70906 // Writable ctor is applied to Duplexes, too.
70907 // `realHasInstance` is necessary because using plain `instanceof`
70908 // would return false, as no `_writableState` property is attached.
70909
70910 // Trying to use the custom `instanceof` for Writable here will also break the
70911 // Node.js LazyTransform implementation, which has a non-trivial getter for
70912 // `_writableState` that would lead to infinite recursion.
70913 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
70914 return new Writable(options);
70915 }
70916
70917 this._writableState = new WritableState(options, this);
70918
70919 // legacy.
70920 this.writable = true;
70921
70922 if (options) {
70923 if (typeof options.write === 'function') this._write = options.write;
70924
70925 if (typeof options.writev === 'function') this._writev = options.writev;
70926 }
70927
70928 Stream.call(this);
70929 }
70930
70931 // Otherwise people can pipe Writable streams, which is just wrong.
70932 Writable.prototype.pipe = function () {
70933 this.emit('error', new Error('Cannot pipe, not readable'));
70934 };
70935
70936 function writeAfterEnd(stream, cb) {
70937 var er = new Error('write after end');
70938 // TODO: defer error events consistently everywhere, not just the cb
70939 stream.emit('error', er);
70940 processNextTick(cb, er);
70941 }
70942
70943 // Checks that a user-supplied chunk is valid, especially for the particular
70944 // mode the stream is in. Currently this means that `null` is never accepted
70945 // and undefined/non-string values are only allowed in object mode.
70946 function validChunk(stream, state, chunk, cb) {
70947 var valid = true;
70948 var er = false;
70949
70950 if (chunk === null) {
70951 er = new TypeError('May not write null values to stream');
70952 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
70953 er = new TypeError('Invalid non-string/buffer chunk');
70954 }
70955 if (er) {
70956 stream.emit('error', er);
70957 processNextTick(cb, er);
70958 valid = false;
70959 }
70960 return valid;
70961 }
70962
70963 Writable.prototype.write = function (chunk, encoding, cb) {
70964 var state = this._writableState;
70965 var ret = false;
70966 var isBuf = Buffer.isBuffer(chunk);
70967
70968 if (typeof encoding === 'function') {
70969 cb = encoding;
70970 encoding = null;
70971 }
70972
70973 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
70974
70975 if (typeof cb !== 'function') cb = nop;
70976
70977 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
70978 state.pendingcb++;
70979 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
70980 }
70981
70982 return ret;
70983 };
70984
70985 Writable.prototype.cork = function () {
70986 var state = this._writableState;
70987
70988 state.corked++;
70989 };
70990
70991 Writable.prototype.uncork = function () {
70992 var state = this._writableState;
70993
70994 if (state.corked) {
70995 state.corked--;
70996
70997 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
70998 }
70999 };
71000
71001 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
71002 // node::ParseEncoding() requires lower case.
71003 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
71004 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);
71005 this._writableState.defaultEncoding = encoding;
71006 return this;
71007 };
71008
71009 function decodeChunk(state, chunk, encoding) {
71010 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
71011 chunk = bufferShim.from(chunk, encoding);
71012 }
71013 return chunk;
71014 }
71015
71016 // if we're already writing something, then just put this
71017 // in the queue, and wait our turn. Otherwise, call _write
71018 // If we return false, then we need a drain event, so set that flag.
71019 function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
71020 if (!isBuf) {
71021 chunk = decodeChunk(state, chunk, encoding);
71022 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
71023 }
71024 var len = state.objectMode ? 1 : chunk.length;
71025
71026 state.length += len;
71027
71028 var ret = state.length < state.highWaterMark;
71029 // we must ensure that previous needDrain will not be reset to false.
71030 if (!ret) state.needDrain = true;
71031
71032 if (state.writing || state.corked) {
71033 var last = state.lastBufferedRequest;
71034 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
71035 if (last) {
71036 last.next = state.lastBufferedRequest;
71037 } else {
71038 state.bufferedRequest = state.lastBufferedRequest;
71039 }
71040 state.bufferedRequestCount += 1;
71041 } else {
71042 doWrite(stream, state, false, len, chunk, encoding, cb);
71043 }
71044
71045 return ret;
71046 }
71047
71048 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
71049 state.writelen = len;
71050 state.writecb = cb;
71051 state.writing = true;
71052 state.sync = true;
71053 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
71054 state.sync = false;
71055 }
71056
71057 function onwriteError(stream, state, sync, er, cb) {
71058 --state.pendingcb;
71059 if (sync) processNextTick(cb, er);else cb(er);
71060
71061 stream._writableState.errorEmitted = true;
71062 stream.emit('error', er);
71063 }
71064
71065 function onwriteStateUpdate(state) {
71066 state.writing = false;
71067 state.writecb = null;
71068 state.length -= state.writelen;
71069 state.writelen = 0;
71070 }
71071
71072 function onwrite(stream, er) {
71073 var state = stream._writableState;
71074 var sync = state.sync;
71075 var cb = state.writecb;
71076
71077 onwriteStateUpdate(state);
71078
71079 if (er) onwriteError(stream, state, sync, er, cb);else {
71080 // Check if we're actually ready to finish, but don't emit yet
71081 var finished = needFinish(state);
71082
71083 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
71084 clearBuffer(stream, state);
71085 }
71086
71087 if (sync) {
71088 /*<replacement>*/
71089 asyncWrite(afterWrite, stream, state, finished, cb);
71090 /*</replacement>*/
71091 } else {
71092 afterWrite(stream, state, finished, cb);
71093 }
71094 }
71095 }
71096
71097 function afterWrite(stream, state, finished, cb) {
71098 if (!finished) onwriteDrain(stream, state);
71099 state.pendingcb--;
71100 cb();
71101 finishMaybe(stream, state);
71102 }
71103
71104 // Must force callback to be called on nextTick, so that we don't
71105 // emit 'drain' before the write() consumer gets the 'false' return
71106 // value, and has a chance to attach a 'drain' listener.
71107 function onwriteDrain(stream, state) {
71108 if (state.length === 0 && state.needDrain) {
71109 state.needDrain = false;
71110 stream.emit('drain');
71111 }
71112 }
71113
71114 // if there's something in the buffer waiting, then process it
71115 function clearBuffer(stream, state) {
71116 state.bufferProcessing = true;
71117 var entry = state.bufferedRequest;
71118
71119 if (stream._writev && entry && entry.next) {
71120 // Fast case, write everything using _writev()
71121 var l = state.bufferedRequestCount;
71122 var buffer = new Array(l);
71123 var holder = state.corkedRequestsFree;
71124 holder.entry = entry;
71125
71126 var count = 0;
71127 while (entry) {
71128 buffer[count] = entry;
71129 entry = entry.next;
71130 count += 1;
71131 }
71132
71133 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
71134
71135 // doWrite is almost always async, defer these to save a bit of time
71136 // as the hot path ends with doWrite
71137 state.pendingcb++;
71138 state.lastBufferedRequest = null;
71139 if (holder.next) {
71140 state.corkedRequestsFree = holder.next;
71141 holder.next = null;
71142 } else {
71143 state.corkedRequestsFree = new CorkedRequest(state);
71144 }
71145 } else {
71146 // Slow case, write chunks one-by-one
71147 while (entry) {
71148 var chunk = entry.chunk;
71149 var encoding = entry.encoding;
71150 var cb = entry.callback;
71151 var len = state.objectMode ? 1 : chunk.length;
71152
71153 doWrite(stream, state, false, len, chunk, encoding, cb);
71154 entry = entry.next;
71155 // if we didn't call the onwrite immediately, then
71156 // it means that we need to wait until it does.
71157 // also, that means that the chunk and cb are currently
71158 // being processed, so move the buffer counter past them.
71159 if (state.writing) {
71160 break;
71161 }
71162 }
71163
71164 if (entry === null) state.lastBufferedRequest = null;
71165 }
71166
71167 state.bufferedRequestCount = 0;
71168 state.bufferedRequest = entry;
71169 state.bufferProcessing = false;
71170 }
71171
71172 Writable.prototype._write = function (chunk, encoding, cb) {
71173 cb(new Error('_write() is not implemented'));
71174 };
71175
71176 Writable.prototype._writev = null;
71177
71178 Writable.prototype.end = function (chunk, encoding, cb) {
71179 var state = this._writableState;
71180
71181 if (typeof chunk === 'function') {
71182 cb = chunk;
71183 chunk = null;
71184 encoding = null;
71185 } else if (typeof encoding === 'function') {
71186 cb = encoding;
71187 encoding = null;
71188 }
71189
71190 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
71191
71192 // .end() fully uncorks
71193 if (state.corked) {
71194 state.corked = 1;
71195 this.uncork();
71196 }
71197
71198 // ignore unnecessary end() calls.
71199 if (!state.ending && !state.finished) endWritable(this, state, cb);
71200 };
71201
71202 function needFinish(state) {
71203 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
71204 }
71205
71206 function prefinish(stream, state) {
71207 if (!state.prefinished) {
71208 state.prefinished = true;
71209 stream.emit('prefinish');
71210 }
71211 }
71212
71213 function finishMaybe(stream, state) {
71214 var need = needFinish(state);
71215 if (need) {
71216 if (state.pendingcb === 0) {
71217 prefinish(stream, state);
71218 state.finished = true;
71219 stream.emit('finish');
71220 } else {
71221 prefinish(stream, state);
71222 }
71223 }
71224 return need;
71225 }
71226
71227 function endWritable(stream, state, cb) {
71228 state.ending = true;
71229 finishMaybe(stream, state);
71230 if (cb) {
71231 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
71232 }
71233 state.ended = true;
71234 stream.writable = false;
71235 }
71236
71237 // It seems a linked list but it is not
71238 // there will be only 2 of these for each stream
71239 function CorkedRequest(state) {
71240 var _this = this;
71241
71242 this.next = null;
71243 this.entry = null;
71244 this.finish = function (err) {
71245 var entry = _this.entry;
71246 _this.entry = null;
71247 while (entry) {
71248 var cb = entry.callback;
71249 state.pendingcb--;
71250 cb(err);
71251 entry = entry.next;
71252 }
71253 if (state.corkedRequestsFree) {
71254 state.corkedRequestsFree.next = _this;
71255 } else {
71256 state.corkedRequestsFree = _this;
71257 }
71258 };
71259 }
71260 }).call(this,require('_process'))
71261 },{"./_stream_duplex":121,"./internal/streams/stream":127,"_process":112,"buffer":47,"buffer-shims":45,"core-util-is":49,"inherits":95,"process-nextick-args":111,"util-deprecate":145}],126:[function(require,module,exports){
71262 'use strict';
71263
71264 var Buffer = require('buffer').Buffer;
71265 /*<replacement>*/
71266 var bufferShim = require('buffer-shims');
71267 /*</replacement>*/
71268
71269 module.exports = BufferList;
71270
71271 function BufferList() {
71272 this.head = null;
71273 this.tail = null;
71274 this.length = 0;
71275 }
71276
71277 BufferList.prototype.push = function (v) {
71278 var entry = { data: v, next: null };
71279 if (this.length > 0) this.tail.next = entry;else this.head = entry;
71280 this.tail = entry;
71281 ++this.length;
71282 };
71283
71284 BufferList.prototype.unshift = function (v) {
71285 var entry = { data: v, next: this.head };
71286 if (this.length === 0) this.tail = entry;
71287 this.head = entry;
71288 ++this.length;
71289 };
71290
71291 BufferList.prototype.shift = function () {
71292 if (this.length === 0) return;
71293 var ret = this.head.data;
71294 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
71295 --this.length;
71296 return ret;
71297 };
71298
71299 BufferList.prototype.clear = function () {
71300 this.head = this.tail = null;
71301 this.length = 0;
71302 };
71303
71304 BufferList.prototype.join = function (s) {
71305 if (this.length === 0) return '';
71306 var p = this.head;
71307 var ret = '' + p.data;
71308 while (p = p.next) {
71309 ret += s + p.data;
71310 }return ret;
71311 };
71312
71313 BufferList.prototype.concat = function (n) {
71314 if (this.length === 0) return bufferShim.alloc(0);
71315 if (this.length === 1) return this.head.data;
71316 var ret = bufferShim.allocUnsafe(n >>> 0);
71317 var p = this.head;
71318 var i = 0;
71319 while (p) {
71320 p.data.copy(ret, i);
71321 i += p.data.length;
71322 p = p.next;
71323 }
71324 return ret;
71325 };
71326 },{"buffer":47,"buffer-shims":45}],127:[function(require,module,exports){
71327 module.exports = require('events').EventEmitter;
71328
71329 },{"events":83}],128:[function(require,module,exports){
71330 'use strict';
71331
71332 var Buffer = require('safe-buffer').Buffer;
71333
71334 var isEncoding = Buffer.isEncoding || function (encoding) {
71335 encoding = '' + encoding;
71336 switch (encoding && encoding.toLowerCase()) {
71337 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':
71338 return true;
71339 default:
71340 return false;
71341 }
71342 };
71343
71344 function _normalizeEncoding(enc) {
71345 if (!enc) return 'utf8';
71346 var retried;
71347 while (true) {
71348 switch (enc) {
71349 case 'utf8':
71350 case 'utf-8':
71351 return 'utf8';
71352 case 'ucs2':
71353 case 'ucs-2':
71354 case 'utf16le':
71355 case 'utf-16le':
71356 return 'utf16le';
71357 case 'latin1':
71358 case 'binary':
71359 return 'latin1';
71360 case 'base64':
71361 case 'ascii':
71362 case 'hex':
71363 return enc;
71364 default:
71365 if (retried) return; // undefined
71366 enc = ('' + enc).toLowerCase();
71367 retried = true;
71368 }
71369 }
71370 };
71371
71372 // Do not cache `Buffer.isEncoding` when checking encoding names as some
71373 // modules monkey-patch it to support additional encodings
71374 function normalizeEncoding(enc) {
71375 var nenc = _normalizeEncoding(enc);
71376 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
71377 return nenc || enc;
71378 }
71379
71380 // StringDecoder provides an interface for efficiently splitting a series of
71381 // buffers into a series of JS strings without breaking apart multi-byte
71382 // characters.
71383 exports.StringDecoder = StringDecoder;
71384 function StringDecoder(encoding) {
71385 this.encoding = normalizeEncoding(encoding);
71386 var nb;
71387 switch (this.encoding) {
71388 case 'utf16le':
71389 this.text = utf16Text;
71390 this.end = utf16End;
71391 nb = 4;
71392 break;
71393 case 'utf8':
71394 this.fillLast = utf8FillLast;
71395 nb = 4;
71396 break;
71397 case 'base64':
71398 this.text = base64Text;
71399 this.end = base64End;
71400 nb = 3;
71401 break;
71402 default:
71403 this.write = simpleWrite;
71404 this.end = simpleEnd;
71405 return;
71406 }
71407 this.lastNeed = 0;
71408 this.lastTotal = 0;
71409 this.lastChar = Buffer.allocUnsafe(nb);
71410 }
71411
71412 StringDecoder.prototype.write = function (buf) {
71413 if (buf.length === 0) return '';
71414 var r;
71415 var i;
71416 if (this.lastNeed) {
71417 r = this.fillLast(buf);
71418 if (r === undefined) return '';
71419 i = this.lastNeed;
71420 this.lastNeed = 0;
71421 } else {
71422 i = 0;
71423 }
71424 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
71425 return r || '';
71426 };
71427
71428 StringDecoder.prototype.end = utf8End;
71429
71430 // Returns only complete characters in a Buffer
71431 StringDecoder.prototype.text = utf8Text;
71432
71433 // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
71434 StringDecoder.prototype.fillLast = function (buf) {
71435 if (this.lastNeed <= buf.length) {
71436 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
71437 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
71438 }
71439 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
71440 this.lastNeed -= buf.length;
71441 };
71442
71443 // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
71444 // continuation byte.
71445 function utf8CheckByte(byte) {
71446 if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
71447 return -1;
71448 }
71449
71450 // Checks at most 3 bytes at the end of a Buffer in order to detect an
71451 // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
71452 // needed to complete the UTF-8 character (if applicable) are returned.
71453 function utf8CheckIncomplete(self, buf, i) {
71454 var j = buf.length - 1;
71455 if (j < i) return 0;
71456 var nb = utf8CheckByte(buf[j]);
71457 if (nb >= 0) {
71458 if (nb > 0) self.lastNeed = nb - 1;
71459 return nb;
71460 }
71461 if (--j < i) return 0;
71462 nb = utf8CheckByte(buf[j]);
71463 if (nb >= 0) {
71464 if (nb > 0) self.lastNeed = nb - 2;
71465 return nb;
71466 }
71467 if (--j < i) return 0;
71468 nb = utf8CheckByte(buf[j]);
71469 if (nb >= 0) {
71470 if (nb > 0) {
71471 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
71472 }
71473 return nb;
71474 }
71475 return 0;
71476 }
71477
71478 // Validates as many continuation bytes for a multi-byte UTF-8 character as
71479 // needed or are available. If we see a non-continuation byte where we expect
71480 // one, we "replace" the validated continuation bytes we've seen so far with
71481 // UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
71482 // behavior. The continuation byte check is included three times in the case
71483 // where all of the continuation bytes for a character exist in the same buffer.
71484 // It is also done this way as a slight performance increase instead of using a
71485 // loop.
71486 function utf8CheckExtraBytes(self, buf, p) {
71487 if ((buf[0] & 0xC0) !== 0x80) {
71488 self.lastNeed = 0;
71489 return '\ufffd'.repeat(p);
71490 }
71491 if (self.lastNeed > 1 && buf.length > 1) {
71492 if ((buf[1] & 0xC0) !== 0x80) {
71493 self.lastNeed = 1;
71494 return '\ufffd'.repeat(p + 1);
71495 }
71496 if (self.lastNeed > 2 && buf.length > 2) {
71497 if ((buf[2] & 0xC0) !== 0x80) {
71498 self.lastNeed = 2;
71499 return '\ufffd'.repeat(p + 2);
71500 }
71501 }
71502 }
71503 }
71504
71505 // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
71506 function utf8FillLast(buf) {
71507 var p = this.lastTotal - this.lastNeed;
71508 var r = utf8CheckExtraBytes(this, buf, p);
71509 if (r !== undefined) return r;
71510 if (this.lastNeed <= buf.length) {
71511 buf.copy(this.lastChar, p, 0, this.lastNeed);
71512 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
71513 }
71514 buf.copy(this.lastChar, p, 0, buf.length);
71515 this.lastNeed -= buf.length;
71516 }
71517
71518 // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
71519 // partial character, the character's bytes are buffered until the required
71520 // number of bytes are available.
71521 function utf8Text(buf, i) {
71522 var total = utf8CheckIncomplete(this, buf, i);
71523 if (!this.lastNeed) return buf.toString('utf8', i);
71524 this.lastTotal = total;
71525 var end = buf.length - (total - this.lastNeed);
71526 buf.copy(this.lastChar, 0, end);
71527 return buf.toString('utf8', i, end);
71528 }
71529
71530 // For UTF-8, a replacement character for each buffered byte of a (partial)
71531 // character needs to be added to the output.
71532 function utf8End(buf) {
71533 var r = buf && buf.length ? this.write(buf) : '';
71534 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
71535 return r;
71536 }
71537
71538 // UTF-16LE typically needs two bytes per character, but even if we have an even
71539 // number of bytes available, we need to check if we end on a leading/high
71540 // surrogate. In that case, we need to wait for the next two bytes in order to
71541 // decode the last character properly.
71542 function utf16Text(buf, i) {
71543 if ((buf.length - i) % 2 === 0) {
71544 var r = buf.toString('utf16le', i);
71545 if (r) {
71546 var c = r.charCodeAt(r.length - 1);
71547 if (c >= 0xD800 && c <= 0xDBFF) {
71548 this.lastNeed = 2;
71549 this.lastTotal = 4;
71550 this.lastChar[0] = buf[buf.length - 2];
71551 this.lastChar[1] = buf[buf.length - 1];
71552 return r.slice(0, -1);
71553 }
71554 }
71555 return r;
71556 }
71557 this.lastNeed = 1;
71558 this.lastTotal = 2;
71559 this.lastChar[0] = buf[buf.length - 1];
71560 return buf.toString('utf16le', i, buf.length - 1);
71561 }
71562
71563 // For UTF-16LE we do not explicitly append special replacement characters if we
71564 // end on a partial character, we simply let v8 handle that.
71565 function utf16End(buf) {
71566 var r = buf && buf.length ? this.write(buf) : '';
71567 if (this.lastNeed) {
71568 var end = this.lastTotal - this.lastNeed;
71569 return r + this.lastChar.toString('utf16le', 0, end);
71570 }
71571 return r;
71572 }
71573
71574 function base64Text(buf, i) {
71575 var n = (buf.length - i) % 3;
71576 if (n === 0) return buf.toString('base64', i);
71577 this.lastNeed = 3 - n;
71578 this.lastTotal = 3;
71579 if (n === 1) {
71580 this.lastChar[0] = buf[buf.length - 1];
71581 } else {
71582 this.lastChar[0] = buf[buf.length - 2];
71583 this.lastChar[1] = buf[buf.length - 1];
71584 }
71585 return buf.toString('base64', i, buf.length - n);
71586 }
71587
71588 function base64End(buf) {
71589 var r = buf && buf.length ? this.write(buf) : '';
71590 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
71591 return r;
71592 }
71593
71594 // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
71595 function simpleWrite(buf) {
71596 return buf.toString(this.encoding);
71597 }
71598
71599 function simpleEnd(buf) {
71600 return buf && buf.length ? this.write(buf) : '';
71601 }
71602 },{"safe-buffer":134}],129:[function(require,module,exports){
71603 module.exports = require('./readable').PassThrough
71604
71605 },{"./readable":130}],130:[function(require,module,exports){
71606 exports = module.exports = require('./lib/_stream_readable.js');
71607 exports.Stream = exports;
71608 exports.Readable = exports;
71609 exports.Writable = require('./lib/_stream_writable.js');
71610 exports.Duplex = require('./lib/_stream_duplex.js');
71611 exports.Transform = require('./lib/_stream_transform.js');
71612 exports.PassThrough = require('./lib/_stream_passthrough.js');
71613
71614 },{"./lib/_stream_duplex.js":121,"./lib/_stream_passthrough.js":122,"./lib/_stream_readable.js":123,"./lib/_stream_transform.js":124,"./lib/_stream_writable.js":125}],131:[function(require,module,exports){
71615 module.exports = require('./readable').Transform
71616
71617 },{"./readable":130}],132:[function(require,module,exports){
71618 module.exports = require('./lib/_stream_writable.js');
71619
71620 },{"./lib/_stream_writable.js":125}],133:[function(require,module,exports){
71621 (function (Buffer){
71622 'use strict'
71623 var inherits = require('inherits')
71624 var HashBase = require('hash-base')
71625
71626 function RIPEMD160 () {
71627 HashBase.call(this, 64)
71628
71629 // state
71630 this._a = 0x67452301
71631 this._b = 0xefcdab89
71632 this._c = 0x98badcfe
71633 this._d = 0x10325476
71634 this._e = 0xc3d2e1f0
71635 }
71636
71637 inherits(RIPEMD160, HashBase)
71638
71639 RIPEMD160.prototype._update = function () {
71640 var m = new Array(16)
71641 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
71642
71643 var al = this._a
71644 var bl = this._b
71645 var cl = this._c
71646 var dl = this._d
71647 var el = this._e
71648
71649 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
71650 // K = 0x00000000
71651 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
71652 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
71653 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
71654 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
71655 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
71656 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
71657 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
71658 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
71659 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
71660 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
71661 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
71662 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
71663 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
71664 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
71665 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
71666 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
71667 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
71668
71669 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
71670 // K = 0x5a827999
71671 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
71672 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
71673 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
71674 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
71675 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
71676 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
71677 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
71678 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
71679 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
71680 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
71681 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
71682 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
71683 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
71684 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
71685 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
71686 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
71687 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
71688
71689 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
71690 // K = 0x6ed9eba1
71691 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
71692 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
71693 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
71694 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
71695 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
71696 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
71697 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
71698 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
71699 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
71700 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
71701 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
71702 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
71703 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
71704 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
71705 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
71706 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
71707 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
71708
71709 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
71710 // K = 0x8f1bbcdc
71711 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
71712 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
71713 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
71714 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
71715 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
71716 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
71717 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
71718 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
71719 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
71720 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
71721 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
71722 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
71723 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
71724 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
71725 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
71726 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
71727 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
71728
71729 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
71730 // K = 0xa953fd4e
71731 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
71732 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
71733 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
71734 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
71735 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
71736 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
71737 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
71738 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
71739 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
71740 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
71741 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
71742 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
71743 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
71744 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
71745 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
71746 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
71747 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
71748
71749 var ar = this._a
71750 var br = this._b
71751 var cr = this._c
71752 var dr = this._d
71753 var er = this._e
71754
71755 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
71756 // K' = 0x50a28be6
71757 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
71758 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
71759 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
71760 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
71761 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
71762 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
71763 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
71764 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
71765 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
71766 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
71767 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
71768 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
71769 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
71770 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
71771 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
71772 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
71773 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
71774
71775 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
71776 // K' = 0x5c4dd124
71777 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
71778 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
71779 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
71780 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
71781 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
71782 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
71783 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
71784 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
71785 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
71786 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
71787 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
71788 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
71789 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
71790 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
71791 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
71792 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
71793 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
71794
71795 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
71796 // K' = 0x6d703ef3
71797 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
71798 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
71799 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
71800 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
71801 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
71802 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
71803 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
71804 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
71805 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
71806 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
71807 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
71808 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
71809 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
71810 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
71811 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
71812 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
71813 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
71814
71815 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
71816 // K' = 0x7a6d76e9
71817 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
71818 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
71819 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
71820 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
71821 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
71822 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
71823 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
71824 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
71825 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
71826 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
71827 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
71828 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
71829 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
71830 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
71831 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
71832 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
71833 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
71834
71835 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
71836 // K' = 0x00000000
71837 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
71838 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
71839 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
71840 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
71841 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
71842 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
71843 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
71844 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
71845 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
71846 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
71847 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
71848 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
71849 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
71850 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
71851 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
71852 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
71853 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
71854
71855 // change state
71856 var t = (this._b + cl + dr) | 0
71857 this._b = (this._c + dl + er) | 0
71858 this._c = (this._d + el + ar) | 0
71859 this._d = (this._e + al + br) | 0
71860 this._e = (this._a + bl + cr) | 0
71861 this._a = t
71862 }
71863
71864 RIPEMD160.prototype._digest = function () {
71865 // create padding and handle blocks
71866 this._block[this._blockOffset++] = 0x80
71867 if (this._blockOffset > 56) {
71868 this._block.fill(0, this._blockOffset, 64)
71869 this._update()
71870 this._blockOffset = 0
71871 }
71872
71873 this._block.fill(0, this._blockOffset, 56)
71874 this._block.writeUInt32LE(this._length[0], 56)
71875 this._block.writeUInt32LE(this._length[1], 60)
71876 this._update()
71877
71878 // produce result
71879 var buffer = new Buffer(20)
71880 buffer.writeInt32LE(this._a, 0)
71881 buffer.writeInt32LE(this._b, 4)
71882 buffer.writeInt32LE(this._c, 8)
71883 buffer.writeInt32LE(this._d, 12)
71884 buffer.writeInt32LE(this._e, 16)
71885 return buffer
71886 }
71887
71888 function rotl (x, n) {
71889 return (x << n) | (x >>> (32 - n))
71890 }
71891
71892 function fn1 (a, b, c, d, e, m, k, s) {
71893 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
71894 }
71895
71896 function fn2 (a, b, c, d, e, m, k, s) {
71897 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
71898 }
71899
71900 function fn3 (a, b, c, d, e, m, k, s) {
71901 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
71902 }
71903
71904 function fn4 (a, b, c, d, e, m, k, s) {
71905 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
71906 }
71907
71908 function fn5 (a, b, c, d, e, m, k, s) {
71909 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
71910 }
71911
71912 module.exports = RIPEMD160
71913
71914 }).call(this,require("buffer").Buffer)
71915 },{"buffer":47,"hash-base":85,"inherits":95}],134:[function(require,module,exports){
71916 module.exports = require('buffer')
71917
71918 },{"buffer":47}],135:[function(require,module,exports){
71919 (function (Buffer){
71920 // prototype class for hash functions
71921 function Hash (blockSize, finalSize) {
71922 this._block = new Buffer(blockSize)
71923 this._finalSize = finalSize
71924 this._blockSize = blockSize
71925 this._len = 0
71926 this._s = 0
71927 }
71928
71929 Hash.prototype.update = function (data, enc) {
71930 if (typeof data === 'string') {
71931 enc = enc || 'utf8'
71932 data = new Buffer(data, enc)
71933 }
71934
71935 var l = this._len += data.length
71936 var s = this._s || 0
71937 var f = 0
71938 var buffer = this._block
71939
71940 while (s < l) {
71941 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
71942 var ch = (t - f)
71943
71944 for (var i = 0; i < ch; i++) {
71945 buffer[(s % this._blockSize) + i] = data[i + f]
71946 }
71947
71948 s += ch
71949 f += ch
71950
71951 if ((s % this._blockSize) === 0) {
71952 this._update(buffer)
71953 }
71954 }
71955 this._s = s
71956
71957 return this
71958 }
71959
71960 Hash.prototype.digest = function (enc) {
71961 // Suppose the length of the message M, in bits, is l
71962 var l = this._len * 8
71963
71964 // Append the bit 1 to the end of the message
71965 this._block[this._len % this._blockSize] = 0x80
71966
71967 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
71968 this._block.fill(0, this._len % this._blockSize + 1)
71969
71970 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
71971 this._update(this._block)
71972 this._block.fill(0)
71973 }
71974
71975 // to this append the block which is equal to the number l written in binary
71976 // TODO: handle case where l is > Math.pow(2, 29)
71977 this._block.writeInt32BE(l, this._blockSize - 4)
71978
71979 var hash = this._update(this._block) || this._hash()
71980
71981 return enc ? hash.toString(enc) : hash
71982 }
71983
71984 Hash.prototype._update = function () {
71985 throw new Error('_update must be implemented by subclass')
71986 }
71987
71988 module.exports = Hash
71989
71990 }).call(this,require("buffer").Buffer)
71991 },{"buffer":47}],136:[function(require,module,exports){
71992 var exports = module.exports = function SHA (algorithm) {
71993 algorithm = algorithm.toLowerCase()
71994
71995 var Algorithm = exports[algorithm]
71996 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
71997
71998 return new Algorithm()
71999 }
72000
72001 exports.sha = require('./sha')
72002 exports.sha1 = require('./sha1')
72003 exports.sha224 = require('./sha224')
72004 exports.sha256 = require('./sha256')
72005 exports.sha384 = require('./sha384')
72006 exports.sha512 = require('./sha512')
72007
72008 },{"./sha":137,"./sha1":138,"./sha224":139,"./sha256":140,"./sha384":141,"./sha512":142}],137:[function(require,module,exports){
72009 (function (Buffer){
72010 /*
72011 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
72012 * in FIPS PUB 180-1
72013 * This source code is derived from sha1.js of the same repository.
72014 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
72015 * operation was added.
72016 */
72017
72018 var inherits = require('inherits')
72019 var Hash = require('./hash')
72020
72021 var K = [
72022 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
72023 ]
72024
72025 var W = new Array(80)
72026
72027 function Sha () {
72028 this.init()
72029 this._w = W
72030
72031 Hash.call(this, 64, 56)
72032 }
72033
72034 inherits(Sha, Hash)
72035
72036 Sha.prototype.init = function () {
72037 this._a = 0x67452301
72038 this._b = 0xefcdab89
72039 this._c = 0x98badcfe
72040 this._d = 0x10325476
72041 this._e = 0xc3d2e1f0
72042
72043 return this
72044 }
72045
72046 function rotl5 (num) {
72047 return (num << 5) | (num >>> 27)
72048 }
72049
72050 function rotl30 (num) {
72051 return (num << 30) | (num >>> 2)
72052 }
72053
72054 function ft (s, b, c, d) {
72055 if (s === 0) return (b & c) | ((~b) & d)
72056 if (s === 2) return (b & c) | (b & d) | (c & d)
72057 return b ^ c ^ d
72058 }
72059
72060 Sha.prototype._update = function (M) {
72061 var W = this._w
72062
72063 var a = this._a | 0
72064 var b = this._b | 0
72065 var c = this._c | 0
72066 var d = this._d | 0
72067 var e = this._e | 0
72068
72069 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
72070 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
72071
72072 for (var j = 0; j < 80; ++j) {
72073 var s = ~~(j / 20)
72074 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
72075
72076 e = d
72077 d = c
72078 c = rotl30(b)
72079 b = a
72080 a = t
72081 }
72082
72083 this._a = (a + this._a) | 0
72084 this._b = (b + this._b) | 0
72085 this._c = (c + this._c) | 0
72086 this._d = (d + this._d) | 0
72087 this._e = (e + this._e) | 0
72088 }
72089
72090 Sha.prototype._hash = function () {
72091 var H = new Buffer(20)
72092
72093 H.writeInt32BE(this._a | 0, 0)
72094 H.writeInt32BE(this._b | 0, 4)
72095 H.writeInt32BE(this._c | 0, 8)
72096 H.writeInt32BE(this._d | 0, 12)
72097 H.writeInt32BE(this._e | 0, 16)
72098
72099 return H
72100 }
72101
72102 module.exports = Sha
72103
72104 }).call(this,require("buffer").Buffer)
72105 },{"./hash":135,"buffer":47,"inherits":95}],138:[function(require,module,exports){
72106 (function (Buffer){
72107 /*
72108 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
72109 * in FIPS PUB 180-1
72110 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
72111 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
72112 * Distributed under the BSD License
72113 * See http://pajhome.org.uk/crypt/md5 for details.
72114 */
72115
72116 var inherits = require('inherits')
72117 var Hash = require('./hash')
72118
72119 var K = [
72120 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
72121 ]
72122
72123 var W = new Array(80)
72124
72125 function Sha1 () {
72126 this.init()
72127 this._w = W
72128
72129 Hash.call(this, 64, 56)
72130 }
72131
72132 inherits(Sha1, Hash)
72133
72134 Sha1.prototype.init = function () {
72135 this._a = 0x67452301
72136 this._b = 0xefcdab89
72137 this._c = 0x98badcfe
72138 this._d = 0x10325476
72139 this._e = 0xc3d2e1f0
72140
72141 return this
72142 }
72143
72144 function rotl1 (num) {
72145 return (num << 1) | (num >>> 31)
72146 }
72147
72148 function rotl5 (num) {
72149 return (num << 5) | (num >>> 27)
72150 }
72151
72152 function rotl30 (num) {
72153 return (num << 30) | (num >>> 2)
72154 }
72155
72156 function ft (s, b, c, d) {
72157 if (s === 0) return (b & c) | ((~b) & d)
72158 if (s === 2) return (b & c) | (b & d) | (c & d)
72159 return b ^ c ^ d
72160 }
72161
72162 Sha1.prototype._update = function (M) {
72163 var W = this._w
72164
72165 var a = this._a | 0
72166 var b = this._b | 0
72167 var c = this._c | 0
72168 var d = this._d | 0
72169 var e = this._e | 0
72170
72171 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
72172 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
72173
72174 for (var j = 0; j < 80; ++j) {
72175 var s = ~~(j / 20)
72176 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
72177
72178 e = d
72179 d = c
72180 c = rotl30(b)
72181 b = a
72182 a = t
72183 }
72184
72185 this._a = (a + this._a) | 0
72186 this._b = (b + this._b) | 0
72187 this._c = (c + this._c) | 0
72188 this._d = (d + this._d) | 0
72189 this._e = (e + this._e) | 0
72190 }
72191
72192 Sha1.prototype._hash = function () {
72193 var H = new Buffer(20)
72194
72195 H.writeInt32BE(this._a | 0, 0)
72196 H.writeInt32BE(this._b | 0, 4)
72197 H.writeInt32BE(this._c | 0, 8)
72198 H.writeInt32BE(this._d | 0, 12)
72199 H.writeInt32BE(this._e | 0, 16)
72200
72201 return H
72202 }
72203
72204 module.exports = Sha1
72205
72206 }).call(this,require("buffer").Buffer)
72207 },{"./hash":135,"buffer":47,"inherits":95}],139:[function(require,module,exports){
72208 (function (Buffer){
72209 /**
72210 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
72211 * in FIPS 180-2
72212 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
72213 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
72214 *
72215 */
72216
72217 var inherits = require('inherits')
72218 var Sha256 = require('./sha256')
72219 var Hash = require('./hash')
72220
72221 var W = new Array(64)
72222
72223 function Sha224 () {
72224 this.init()
72225
72226 this._w = W // new Array(64)
72227
72228 Hash.call(this, 64, 56)
72229 }
72230
72231 inherits(Sha224, Sha256)
72232
72233 Sha224.prototype.init = function () {
72234 this._a = 0xc1059ed8
72235 this._b = 0x367cd507
72236 this._c = 0x3070dd17
72237 this._d = 0xf70e5939
72238 this._e = 0xffc00b31
72239 this._f = 0x68581511
72240 this._g = 0x64f98fa7
72241 this._h = 0xbefa4fa4
72242
72243 return this
72244 }
72245
72246 Sha224.prototype._hash = function () {
72247 var H = new Buffer(28)
72248
72249 H.writeInt32BE(this._a, 0)
72250 H.writeInt32BE(this._b, 4)
72251 H.writeInt32BE(this._c, 8)
72252 H.writeInt32BE(this._d, 12)
72253 H.writeInt32BE(this._e, 16)
72254 H.writeInt32BE(this._f, 20)
72255 H.writeInt32BE(this._g, 24)
72256
72257 return H
72258 }
72259
72260 module.exports = Sha224
72261
72262 }).call(this,require("buffer").Buffer)
72263 },{"./hash":135,"./sha256":140,"buffer":47,"inherits":95}],140:[function(require,module,exports){
72264 (function (Buffer){
72265 /**
72266 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
72267 * in FIPS 180-2
72268 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
72269 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
72270 *
72271 */
72272
72273 var inherits = require('inherits')
72274 var Hash = require('./hash')
72275
72276 var K = [
72277 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
72278 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
72279 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
72280 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
72281 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
72282 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
72283 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
72284 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
72285 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
72286 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
72287 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
72288 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
72289 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
72290 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
72291 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
72292 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
72293 ]
72294
72295 var W = new Array(64)
72296
72297 function Sha256 () {
72298 this.init()
72299
72300 this._w = W // new Array(64)
72301
72302 Hash.call(this, 64, 56)
72303 }
72304
72305 inherits(Sha256, Hash)
72306
72307 Sha256.prototype.init = function () {
72308 this._a = 0x6a09e667
72309 this._b = 0xbb67ae85
72310 this._c = 0x3c6ef372
72311 this._d = 0xa54ff53a
72312 this._e = 0x510e527f
72313 this._f = 0x9b05688c
72314 this._g = 0x1f83d9ab
72315 this._h = 0x5be0cd19
72316
72317 return this
72318 }
72319
72320 function ch (x, y, z) {
72321 return z ^ (x & (y ^ z))
72322 }
72323
72324 function maj (x, y, z) {
72325 return (x & y) | (z & (x | y))
72326 }
72327
72328 function sigma0 (x) {
72329 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
72330 }
72331
72332 function sigma1 (x) {
72333 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
72334 }
72335
72336 function gamma0 (x) {
72337 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
72338 }
72339
72340 function gamma1 (x) {
72341 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
72342 }
72343
72344 Sha256.prototype._update = function (M) {
72345 var W = this._w
72346
72347 var a = this._a | 0
72348 var b = this._b | 0
72349 var c = this._c | 0
72350 var d = this._d | 0
72351 var e = this._e | 0
72352 var f = this._f | 0
72353 var g = this._g | 0
72354 var h = this._h | 0
72355
72356 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
72357 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
72358
72359 for (var j = 0; j < 64; ++j) {
72360 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
72361 var T2 = (sigma0(a) + maj(a, b, c)) | 0
72362
72363 h = g
72364 g = f
72365 f = e
72366 e = (d + T1) | 0
72367 d = c
72368 c = b
72369 b = a
72370 a = (T1 + T2) | 0
72371 }
72372
72373 this._a = (a + this._a) | 0
72374 this._b = (b + this._b) | 0
72375 this._c = (c + this._c) | 0
72376 this._d = (d + this._d) | 0
72377 this._e = (e + this._e) | 0
72378 this._f = (f + this._f) | 0
72379 this._g = (g + this._g) | 0
72380 this._h = (h + this._h) | 0
72381 }
72382
72383 Sha256.prototype._hash = function () {
72384 var H = new Buffer(32)
72385
72386 H.writeInt32BE(this._a, 0)
72387 H.writeInt32BE(this._b, 4)
72388 H.writeInt32BE(this._c, 8)
72389 H.writeInt32BE(this._d, 12)
72390 H.writeInt32BE(this._e, 16)
72391 H.writeInt32BE(this._f, 20)
72392 H.writeInt32BE(this._g, 24)
72393 H.writeInt32BE(this._h, 28)
72394
72395 return H
72396 }
72397
72398 module.exports = Sha256
72399
72400 }).call(this,require("buffer").Buffer)
72401 },{"./hash":135,"buffer":47,"inherits":95}],141:[function(require,module,exports){
72402 (function (Buffer){
72403 var inherits = require('inherits')
72404 var SHA512 = require('./sha512')
72405 var Hash = require('./hash')
72406
72407 var W = new Array(160)
72408
72409 function Sha384 () {
72410 this.init()
72411 this._w = W
72412
72413 Hash.call(this, 128, 112)
72414 }
72415
72416 inherits(Sha384, SHA512)
72417
72418 Sha384.prototype.init = function () {
72419 this._ah = 0xcbbb9d5d
72420 this._bh = 0x629a292a
72421 this._ch = 0x9159015a
72422 this._dh = 0x152fecd8
72423 this._eh = 0x67332667
72424 this._fh = 0x8eb44a87
72425 this._gh = 0xdb0c2e0d
72426 this._hh = 0x47b5481d
72427
72428 this._al = 0xc1059ed8
72429 this._bl = 0x367cd507
72430 this._cl = 0x3070dd17
72431 this._dl = 0xf70e5939
72432 this._el = 0xffc00b31
72433 this._fl = 0x68581511
72434 this._gl = 0x64f98fa7
72435 this._hl = 0xbefa4fa4
72436
72437 return this
72438 }
72439
72440 Sha384.prototype._hash = function () {
72441 var H = new Buffer(48)
72442
72443 function writeInt64BE (h, l, offset) {
72444 H.writeInt32BE(h, offset)
72445 H.writeInt32BE(l, offset + 4)
72446 }
72447
72448 writeInt64BE(this._ah, this._al, 0)
72449 writeInt64BE(this._bh, this._bl, 8)
72450 writeInt64BE(this._ch, this._cl, 16)
72451 writeInt64BE(this._dh, this._dl, 24)
72452 writeInt64BE(this._eh, this._el, 32)
72453 writeInt64BE(this._fh, this._fl, 40)
72454
72455 return H
72456 }
72457
72458 module.exports = Sha384
72459
72460 }).call(this,require("buffer").Buffer)
72461 },{"./hash":135,"./sha512":142,"buffer":47,"inherits":95}],142:[function(require,module,exports){
72462 (function (Buffer){
72463 var inherits = require('inherits')
72464 var Hash = require('./hash')
72465
72466 var K = [
72467 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
72468 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
72469 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
72470 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
72471 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
72472 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
72473 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
72474 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
72475 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
72476 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
72477 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
72478 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
72479 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
72480 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
72481 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
72482 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
72483 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
72484 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
72485 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
72486 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
72487 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
72488 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
72489 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
72490 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
72491 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
72492 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
72493 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
72494 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
72495 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
72496 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
72497 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
72498 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
72499 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
72500 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
72501 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
72502 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
72503 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
72504 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
72505 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
72506 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
72507 ]
72508
72509 var W = new Array(160)
72510
72511 function Sha512 () {
72512 this.init()
72513 this._w = W
72514
72515 Hash.call(this, 128, 112)
72516 }
72517
72518 inherits(Sha512, Hash)
72519
72520 Sha512.prototype.init = function () {
72521 this._ah = 0x6a09e667
72522 this._bh = 0xbb67ae85
72523 this._ch = 0x3c6ef372
72524 this._dh = 0xa54ff53a
72525 this._eh = 0x510e527f
72526 this._fh = 0x9b05688c
72527 this._gh = 0x1f83d9ab
72528 this._hh = 0x5be0cd19
72529
72530 this._al = 0xf3bcc908
72531 this._bl = 0x84caa73b
72532 this._cl = 0xfe94f82b
72533 this._dl = 0x5f1d36f1
72534 this._el = 0xade682d1
72535 this._fl = 0x2b3e6c1f
72536 this._gl = 0xfb41bd6b
72537 this._hl = 0x137e2179
72538
72539 return this
72540 }
72541
72542 function Ch (x, y, z) {
72543 return z ^ (x & (y ^ z))
72544 }
72545
72546 function maj (x, y, z) {
72547 return (x & y) | (z & (x | y))
72548 }
72549
72550 function sigma0 (x, xl) {
72551 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
72552 }
72553
72554 function sigma1 (x, xl) {
72555 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
72556 }
72557
72558 function Gamma0 (x, xl) {
72559 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
72560 }
72561
72562 function Gamma0l (x, xl) {
72563 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
72564 }
72565
72566 function Gamma1 (x, xl) {
72567 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
72568 }
72569
72570 function Gamma1l (x, xl) {
72571 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
72572 }
72573
72574 function getCarry (a, b) {
72575 return (a >>> 0) < (b >>> 0) ? 1 : 0
72576 }
72577
72578 Sha512.prototype._update = function (M) {
72579 var W = this._w
72580
72581 var ah = this._ah | 0
72582 var bh = this._bh | 0
72583 var ch = this._ch | 0
72584 var dh = this._dh | 0
72585 var eh = this._eh | 0
72586 var fh = this._fh | 0
72587 var gh = this._gh | 0
72588 var hh = this._hh | 0
72589
72590 var al = this._al | 0
72591 var bl = this._bl | 0
72592 var cl = this._cl | 0
72593 var dl = this._dl | 0
72594 var el = this._el | 0
72595 var fl = this._fl | 0
72596 var gl = this._gl | 0
72597 var hl = this._hl | 0
72598
72599 for (var i = 0; i < 32; i += 2) {
72600 W[i] = M.readInt32BE(i * 4)
72601 W[i + 1] = M.readInt32BE(i * 4 + 4)
72602 }
72603 for (; i < 160; i += 2) {
72604 var xh = W[i - 15 * 2]
72605 var xl = W[i - 15 * 2 + 1]
72606 var gamma0 = Gamma0(xh, xl)
72607 var gamma0l = Gamma0l(xl, xh)
72608
72609 xh = W[i - 2 * 2]
72610 xl = W[i - 2 * 2 + 1]
72611 var gamma1 = Gamma1(xh, xl)
72612 var gamma1l = Gamma1l(xl, xh)
72613
72614 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
72615 var Wi7h = W[i - 7 * 2]
72616 var Wi7l = W[i - 7 * 2 + 1]
72617
72618 var Wi16h = W[i - 16 * 2]
72619 var Wi16l = W[i - 16 * 2 + 1]
72620
72621 var Wil = (gamma0l + Wi7l) | 0
72622 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
72623 Wil = (Wil + gamma1l) | 0
72624 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
72625 Wil = (Wil + Wi16l) | 0
72626 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
72627
72628 W[i] = Wih
72629 W[i + 1] = Wil
72630 }
72631
72632 for (var j = 0; j < 160; j += 2) {
72633 Wih = W[j]
72634 Wil = W[j + 1]
72635
72636 var majh = maj(ah, bh, ch)
72637 var majl = maj(al, bl, cl)
72638
72639 var sigma0h = sigma0(ah, al)
72640 var sigma0l = sigma0(al, ah)
72641 var sigma1h = sigma1(eh, el)
72642 var sigma1l = sigma1(el, eh)
72643
72644 // t1 = h + sigma1 + ch + K[j] + W[j]
72645 var Kih = K[j]
72646 var Kil = K[j + 1]
72647
72648 var chh = Ch(eh, fh, gh)
72649 var chl = Ch(el, fl, gl)
72650
72651 var t1l = (hl + sigma1l) | 0
72652 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
72653 t1l = (t1l + chl) | 0
72654 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
72655 t1l = (t1l + Kil) | 0
72656 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
72657 t1l = (t1l + Wil) | 0
72658 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
72659
72660 // t2 = sigma0 + maj
72661 var t2l = (sigma0l + majl) | 0
72662 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
72663
72664 hh = gh
72665 hl = gl
72666 gh = fh
72667 gl = fl
72668 fh = eh
72669 fl = el
72670 el = (dl + t1l) | 0
72671 eh = (dh + t1h + getCarry(el, dl)) | 0
72672 dh = ch
72673 dl = cl
72674 ch = bh
72675 cl = bl
72676 bh = ah
72677 bl = al
72678 al = (t1l + t2l) | 0
72679 ah = (t1h + t2h + getCarry(al, t1l)) | 0
72680 }
72681
72682 this._al = (this._al + al) | 0
72683 this._bl = (this._bl + bl) | 0
72684 this._cl = (this._cl + cl) | 0
72685 this._dl = (this._dl + dl) | 0
72686 this._el = (this._el + el) | 0
72687 this._fl = (this._fl + fl) | 0
72688 this._gl = (this._gl + gl) | 0
72689 this._hl = (this._hl + hl) | 0
72690
72691 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
72692 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
72693 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
72694 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
72695 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
72696 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
72697 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
72698 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
72699 }
72700
72701 Sha512.prototype._hash = function () {
72702 var H = new Buffer(64)
72703
72704 function writeInt64BE (h, l, offset) {
72705 H.writeInt32BE(h, offset)
72706 H.writeInt32BE(l, offset + 4)
72707 }
72708
72709 writeInt64BE(this._ah, this._al, 0)
72710 writeInt64BE(this._bh, this._bl, 8)
72711 writeInt64BE(this._ch, this._cl, 16)
72712 writeInt64BE(this._dh, this._dl, 24)
72713 writeInt64BE(this._eh, this._el, 32)
72714 writeInt64BE(this._fh, this._fl, 40)
72715 writeInt64BE(this._gh, this._gl, 48)
72716 writeInt64BE(this._hh, this._hl, 56)
72717
72718 return H
72719 }
72720
72721 module.exports = Sha512
72722
72723 }).call(this,require("buffer").Buffer)
72724 },{"./hash":135,"buffer":47,"inherits":95}],143:[function(require,module,exports){
72725 // Copyright Joyent, Inc. and other Node contributors.
72726 //
72727 // Permission is hereby granted, free of charge, to any person obtaining a
72728 // copy of this software and associated documentation files (the
72729 // "Software"), to deal in the Software without restriction, including
72730 // without limitation the rights to use, copy, modify, merge, publish,
72731 // distribute, sublicense, and/or sell copies of the Software, and to permit
72732 // persons to whom the Software is furnished to do so, subject to the
72733 // following conditions:
72734 //
72735 // The above copyright notice and this permission notice shall be included
72736 // in all copies or substantial portions of the Software.
72737 //
72738 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
72739 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
72740 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
72741 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
72742 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
72743 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
72744 // USE OR OTHER DEALINGS IN THE SOFTWARE.
72745
72746 module.exports = Stream;
72747
72748 var EE = require('events').EventEmitter;
72749 var inherits = require('inherits');
72750
72751 inherits(Stream, EE);
72752 Stream.Readable = require('readable-stream/readable.js');
72753 Stream.Writable = require('readable-stream/writable.js');
72754 Stream.Duplex = require('readable-stream/duplex.js');
72755 Stream.Transform = require('readable-stream/transform.js');
72756 Stream.PassThrough = require('readable-stream/passthrough.js');
72757
72758 // Backwards-compat with node 0.4.x
72759 Stream.Stream = Stream;
72760
72761
72762
72763 // old-style streams. Note that the pipe method (the only relevant
72764 // part of this class) is overridden in the Readable class.
72765
72766 function Stream() {
72767 EE.call(this);
72768 }
72769
72770 Stream.prototype.pipe = function(dest, options) {
72771 var source = this;
72772
72773 function ondata(chunk) {
72774 if (dest.writable) {
72775 if (false === dest.write(chunk) && source.pause) {
72776 source.pause();
72777 }
72778 }
72779 }
72780
72781 source.on('data', ondata);
72782
72783 function ondrain() {
72784 if (source.readable && source.resume) {
72785 source.resume();
72786 }
72787 }
72788
72789 dest.on('drain', ondrain);
72790
72791 // If the 'end' option is not supplied, dest.end() will be called when
72792 // source gets the 'end' or 'close' events. Only dest.end() once.
72793 if (!dest._isStdio && (!options || options.end !== false)) {
72794 source.on('end', onend);
72795 source.on('close', onclose);
72796 }
72797
72798 var didOnEnd = false;
72799 function onend() {
72800 if (didOnEnd) return;
72801 didOnEnd = true;
72802
72803 dest.end();
72804 }
72805
72806
72807 function onclose() {
72808 if (didOnEnd) return;
72809 didOnEnd = true;
72810
72811 if (typeof dest.destroy === 'function') dest.destroy();
72812 }
72813
72814 // don't leave dangling pipes when there are errors.
72815 function onerror(er) {
72816 cleanup();
72817 if (EE.listenerCount(this, 'error') === 0) {
72818 throw er; // Unhandled stream error in pipe.
72819 }
72820 }
72821
72822 source.on('error', onerror);
72823 dest.on('error', onerror);
72824
72825 // remove all the event listeners that were added.
72826 function cleanup() {
72827 source.removeListener('data', ondata);
72828 dest.removeListener('drain', ondrain);
72829
72830 source.removeListener('end', onend);
72831 source.removeListener('close', onclose);
72832
72833 source.removeListener('error', onerror);
72834 dest.removeListener('error', onerror);
72835
72836 source.removeListener('end', cleanup);
72837 source.removeListener('close', cleanup);
72838
72839 dest.removeListener('close', cleanup);
72840 }
72841
72842 source.on('end', cleanup);
72843 source.on('close', cleanup);
72844
72845 dest.on('close', cleanup);
72846
72847 dest.emit('pipe', source);
72848
72849 // Allow for unix-like usage: A.pipe(B).pipe(C)
72850 return dest;
72851 };
72852
72853 },{"events":83,"inherits":95,"readable-stream/duplex.js":120,"readable-stream/passthrough.js":129,"readable-stream/readable.js":130,"readable-stream/transform.js":131,"readable-stream/writable.js":132}],144:[function(require,module,exports){
72854 // Copyright Joyent, Inc. and other Node contributors.
72855 //
72856 // Permission is hereby granted, free of charge, to any person obtaining a
72857 // copy of this software and associated documentation files (the
72858 // "Software"), to deal in the Software without restriction, including
72859 // without limitation the rights to use, copy, modify, merge, publish,
72860 // distribute, sublicense, and/or sell copies of the Software, and to permit
72861 // persons to whom the Software is furnished to do so, subject to the
72862 // following conditions:
72863 //
72864 // The above copyright notice and this permission notice shall be included
72865 // in all copies or substantial portions of the Software.
72866 //
72867 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
72868 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
72869 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
72870 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
72871 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
72872 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
72873 // USE OR OTHER DEALINGS IN THE SOFTWARE.
72874
72875 var Buffer = require('buffer').Buffer;
72876
72877 var isBufferEncoding = Buffer.isEncoding
72878 || function(encoding) {
72879 switch (encoding && encoding.toLowerCase()) {
72880 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;
72881 default: return false;
72882 }
72883 }
72884
72885
72886 function assertEncoding(encoding) {
72887 if (encoding && !isBufferEncoding(encoding)) {
72888 throw new Error('Unknown encoding: ' + encoding);
72889 }
72890 }
72891
72892 // StringDecoder provides an interface for efficiently splitting a series of
72893 // buffers into a series of JS strings without breaking apart multi-byte
72894 // characters. CESU-8 is handled as part of the UTF-8 encoding.
72895 //
72896 // @TODO Handling all encodings inside a single object makes it very difficult
72897 // to reason about this code, so it should be split up in the future.
72898 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
72899 // points as used by CESU-8.
72900 var StringDecoder = exports.StringDecoder = function(encoding) {
72901 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
72902 assertEncoding(encoding);
72903 switch (this.encoding) {
72904 case 'utf8':
72905 // CESU-8 represents each of Surrogate Pair by 3-bytes
72906 this.surrogateSize = 3;
72907 break;
72908 case 'ucs2':
72909 case 'utf16le':
72910 // UTF-16 represents each of Surrogate Pair by 2-bytes
72911 this.surrogateSize = 2;
72912 this.detectIncompleteChar = utf16DetectIncompleteChar;
72913 break;
72914 case 'base64':
72915 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
72916 this.surrogateSize = 3;
72917 this.detectIncompleteChar = base64DetectIncompleteChar;
72918 break;
72919 default:
72920 this.write = passThroughWrite;
72921 return;
72922 }
72923
72924 // Enough space to store all bytes of a single character. UTF-8 needs 4
72925 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
72926 this.charBuffer = new Buffer(6);
72927 // Number of bytes received for the current incomplete multi-byte character.
72928 this.charReceived = 0;
72929 // Number of bytes expected for the current incomplete multi-byte character.
72930 this.charLength = 0;
72931 };
72932
72933
72934 // write decodes the given buffer and returns it as JS string that is
72935 // guaranteed to not contain any partial multi-byte characters. Any partial
72936 // character found at the end of the buffer is buffered up, and will be
72937 // returned when calling write again with the remaining bytes.
72938 //
72939 // Note: Converting a Buffer containing an orphan surrogate to a String
72940 // currently works, but converting a String to a Buffer (via `new Buffer`, or
72941 // Buffer#write) will replace incomplete surrogates with the unicode
72942 // replacement character. See https://codereview.chromium.org/121173009/ .
72943 StringDecoder.prototype.write = function(buffer) {
72944 var charStr = '';
72945 // if our last write ended with an incomplete multibyte character
72946 while (this.charLength) {
72947 // determine how many remaining bytes this buffer has to offer for this char
72948 var available = (buffer.length >= this.charLength - this.charReceived) ?
72949 this.charLength - this.charReceived :
72950 buffer.length;
72951
72952 // add the new bytes to the char buffer
72953 buffer.copy(this.charBuffer, this.charReceived, 0, available);
72954 this.charReceived += available;
72955
72956 if (this.charReceived < this.charLength) {
72957 // still not enough chars in this buffer? wait for more ...
72958 return '';
72959 }
72960
72961 // remove bytes belonging to the current character from the buffer
72962 buffer = buffer.slice(available, buffer.length);
72963
72964 // get the character that was split
72965 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
72966
72967 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
72968 var charCode = charStr.charCodeAt(charStr.length - 1);
72969 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
72970 this.charLength += this.surrogateSize;
72971 charStr = '';
72972 continue;
72973 }
72974 this.charReceived = this.charLength = 0;
72975
72976 // if there are no more bytes in this buffer, just emit our char
72977 if (buffer.length === 0) {
72978 return charStr;
72979 }
72980 break;
72981 }
72982
72983 // determine and set charLength / charReceived
72984 this.detectIncompleteChar(buffer);
72985
72986 var end = buffer.length;
72987 if (this.charLength) {
72988 // buffer the incomplete character bytes we got
72989 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
72990 end -= this.charReceived;
72991 }
72992
72993 charStr += buffer.toString(this.encoding, 0, end);
72994
72995 var end = charStr.length - 1;
72996 var charCode = charStr.charCodeAt(end);
72997 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
72998 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
72999 var size = this.surrogateSize;
73000 this.charLength += size;
73001 this.charReceived += size;
73002 this.charBuffer.copy(this.charBuffer, size, 0, size);
73003 buffer.copy(this.charBuffer, 0, 0, size);
73004 return charStr.substring(0, end);
73005 }
73006
73007 // or just emit the charStr
73008 return charStr;
73009 };
73010
73011 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
73012 // the end of the given buffer. If so, it sets this.charLength to the byte
73013 // length that character, and sets this.charReceived to the number of bytes
73014 // that are available for this character.
73015 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
73016 // determine how many bytes we have to check at the end of this buffer
73017 var i = (buffer.length >= 3) ? 3 : buffer.length;
73018
73019 // Figure out if one of the last i bytes of our buffer announces an
73020 // incomplete char.
73021 for (; i > 0; i--) {
73022 var c = buffer[buffer.length - i];
73023
73024 // See http://en.wikipedia.org/wiki/UTF-8#Description
73025
73026 // 110XXXXX
73027 if (i == 1 && c >> 5 == 0x06) {
73028 this.charLength = 2;
73029 break;
73030 }
73031
73032 // 1110XXXX
73033 if (i <= 2 && c >> 4 == 0x0E) {
73034 this.charLength = 3;
73035 break;
73036 }
73037
73038 // 11110XXX
73039 if (i <= 3 && c >> 3 == 0x1E) {
73040 this.charLength = 4;
73041 break;
73042 }
73043 }
73044 this.charReceived = i;
73045 };
73046
73047 StringDecoder.prototype.end = function(buffer) {
73048 var res = '';
73049 if (buffer && buffer.length)
73050 res = this.write(buffer);
73051
73052 if (this.charReceived) {
73053 var cr = this.charReceived;
73054 var buf = this.charBuffer;
73055 var enc = this.encoding;
73056 res += buf.slice(0, cr).toString(enc);
73057 }
73058
73059 return res;
73060 };
73061
73062 function passThroughWrite(buffer) {
73063 return buffer.toString(this.encoding);
73064 }
73065
73066 function utf16DetectIncompleteChar(buffer) {
73067 this.charReceived = buffer.length % 2;
73068 this.charLength = this.charReceived ? 2 : 0;
73069 }
73070
73071 function base64DetectIncompleteChar(buffer) {
73072 this.charReceived = buffer.length % 3;
73073 this.charLength = this.charReceived ? 3 : 0;
73074 }
73075
73076 },{"buffer":47}],145:[function(require,module,exports){
73077 (function (global){
73078
73079 /**
73080 * Module exports.
73081 */
73082
73083 module.exports = deprecate;
73084
73085 /**
73086 * Mark that a method should not be used.
73087 * Returns a modified function which warns once by default.
73088 *
73089 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
73090 *
73091 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
73092 * will throw an Error when invoked.
73093 *
73094 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
73095 * will invoke `console.trace()` instead of `console.error()`.
73096 *
73097 * @param {Function} fn - the function to deprecate
73098 * @param {String} msg - the string to print to the console when `fn` is invoked
73099 * @returns {Function} a new "deprecated" version of `fn`
73100 * @api public
73101 */
73102
73103 function deprecate (fn, msg) {
73104 if (config('noDeprecation')) {
73105 return fn;
73106 }
73107
73108 var warned = false;
73109 function deprecated() {
73110 if (!warned) {
73111 if (config('throwDeprecation')) {
73112 throw new Error(msg);
73113 } else if (config('traceDeprecation')) {
73114 console.trace(msg);
73115 } else {
73116 console.warn(msg);
73117 }
73118 warned = true;
73119 }
73120 return fn.apply(this, arguments);
73121 }
73122
73123 return deprecated;
73124 }
73125
73126 /**
73127 * Checks `localStorage` for boolean values for the given `name`.
73128 *
73129 * @param {String} name
73130 * @returns {Boolean}
73131 * @api private
73132 */
73133
73134 function config (name) {
73135 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
73136 try {
73137 if (!global.localStorage) return false;
73138 } catch (_) {
73139 return false;
73140 }
73141 var val = global.localStorage[name];
73142 if (null == val) return false;
73143 return String(val).toLowerCase() === 'true';
73144 }
73145
73146 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
73147 },{}],146:[function(require,module,exports){
73148 arguments[4][95][0].apply(exports,arguments)
73149 },{"dup":95}],147:[function(require,module,exports){
73150 module.exports = function isBuffer(arg) {
73151 return arg && typeof arg === 'object'
73152 && typeof arg.copy === 'function'
73153 && typeof arg.fill === 'function'
73154 && typeof arg.readUInt8 === 'function';
73155 }
73156 },{}],148:[function(require,module,exports){
73157 (function (process,global){
73158 // Copyright Joyent, Inc. and other Node contributors.
73159 //
73160 // Permission is hereby granted, free of charge, to any person obtaining a
73161 // copy of this software and associated documentation files (the
73162 // "Software"), to deal in the Software without restriction, including
73163 // without limitation the rights to use, copy, modify, merge, publish,
73164 // distribute, sublicense, and/or sell copies of the Software, and to permit
73165 // persons to whom the Software is furnished to do so, subject to the
73166 // following conditions:
73167 //
73168 // The above copyright notice and this permission notice shall be included
73169 // in all copies or substantial portions of the Software.
73170 //
73171 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
73172 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
73173 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
73174 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
73175 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
73176 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
73177 // USE OR OTHER DEALINGS IN THE SOFTWARE.
73178
73179 var formatRegExp = /%[sdj%]/g;
73180 exports.format = function(f) {
73181 if (!isString(f)) {
73182 var objects = [];
73183 for (var i = 0; i < arguments.length; i++) {
73184 objects.push(inspect(arguments[i]));
73185 }
73186 return objects.join(' ');
73187 }
73188
73189 var i = 1;
73190 var args = arguments;
73191 var len = args.length;
73192 var str = String(f).replace(formatRegExp, function(x) {
73193 if (x === '%%') return '%';
73194 if (i >= len) return x;
73195 switch (x) {
73196 case '%s': return String(args[i++]);
73197 case '%d': return Number(args[i++]);
73198 case '%j':
73199 try {
73200 return JSON.stringify(args[i++]);
73201 } catch (_) {
73202 return '[Circular]';
73203 }
73204 default:
73205 return x;
73206 }
73207 });
73208 for (var x = args[i]; i < len; x = args[++i]) {
73209 if (isNull(x) || !isObject(x)) {
73210 str += ' ' + x;
73211 } else {
73212 str += ' ' + inspect(x);
73213 }
73214 }
73215 return str;
73216 };
73217
73218
73219 // Mark that a method should not be used.
73220 // Returns a modified function which warns once by default.
73221 // If --no-deprecation is set, then it is a no-op.
73222 exports.deprecate = function(fn, msg) {
73223 // Allow for deprecating things in the process of starting up.
73224 if (isUndefined(global.process)) {
73225 return function() {
73226 return exports.deprecate(fn, msg).apply(this, arguments);
73227 };
73228 }
73229
73230 if (process.noDeprecation === true) {
73231 return fn;
73232 }
73233
73234 var warned = false;
73235 function deprecated() {
73236 if (!warned) {
73237 if (process.throwDeprecation) {
73238 throw new Error(msg);
73239 } else if (process.traceDeprecation) {
73240 console.trace(msg);
73241 } else {
73242 console.error(msg);
73243 }
73244 warned = true;
73245 }
73246 return fn.apply(this, arguments);
73247 }
73248
73249 return deprecated;
73250 };
73251
73252
73253 var debugs = {};
73254 var debugEnviron;
73255 exports.debuglog = function(set) {
73256 if (isUndefined(debugEnviron))
73257 debugEnviron = process.env.NODE_DEBUG || '';
73258 set = set.toUpperCase();
73259 if (!debugs[set]) {
73260 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
73261 var pid = process.pid;
73262 debugs[set] = function() {
73263 var msg = exports.format.apply(exports, arguments);
73264 console.error('%s %d: %s', set, pid, msg);
73265 };
73266 } else {
73267 debugs[set] = function() {};
73268 }
73269 }
73270 return debugs[set];
73271 };
73272
73273
73274 /**
73275 * Echos the value of a value. Trys to print the value out
73276 * in the best way possible given the different types.
73277 *
73278 * @param {Object} obj The object to print out.
73279 * @param {Object} opts Optional options object that alters the output.
73280 */
73281 /* legacy: obj, showHidden, depth, colors*/
73282 function inspect(obj, opts) {
73283 // default options
73284 var ctx = {
73285 seen: [],
73286 stylize: stylizeNoColor
73287 };
73288 // legacy...
73289 if (arguments.length >= 3) ctx.depth = arguments[2];
73290 if (arguments.length >= 4) ctx.colors = arguments[3];
73291 if (isBoolean(opts)) {
73292 // legacy...
73293 ctx.showHidden = opts;
73294 } else if (opts) {
73295 // got an "options" object
73296 exports._extend(ctx, opts);
73297 }
73298 // set default options
73299 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
73300 if (isUndefined(ctx.depth)) ctx.depth = 2;
73301 if (isUndefined(ctx.colors)) ctx.colors = false;
73302 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
73303 if (ctx.colors) ctx.stylize = stylizeWithColor;
73304 return formatValue(ctx, obj, ctx.depth);
73305 }
73306 exports.inspect = inspect;
73307
73308
73309 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
73310 inspect.colors = {
73311 'bold' : [1, 22],
73312 'italic' : [3, 23],
73313 'underline' : [4, 24],
73314 'inverse' : [7, 27],
73315 'white' : [37, 39],
73316 'grey' : [90, 39],
73317 'black' : [30, 39],
73318 'blue' : [34, 39],
73319 'cyan' : [36, 39],
73320 'green' : [32, 39],
73321 'magenta' : [35, 39],
73322 'red' : [31, 39],
73323 'yellow' : [33, 39]
73324 };
73325
73326 // Don't use 'blue' not visible on cmd.exe
73327 inspect.styles = {
73328 'special': 'cyan',
73329 'number': 'yellow',
73330 'boolean': 'yellow',
73331 'undefined': 'grey',
73332 'null': 'bold',
73333 'string': 'green',
73334 'date': 'magenta',
73335 // "name": intentionally not styling
73336 'regexp': 'red'
73337 };
73338
73339
73340 function stylizeWithColor(str, styleType) {
73341 var style = inspect.styles[styleType];
73342
73343 if (style) {
73344 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
73345 '\u001b[' + inspect.colors[style][1] + 'm';
73346 } else {
73347 return str;
73348 }
73349 }
73350
73351
73352 function stylizeNoColor(str, styleType) {
73353 return str;
73354 }
73355
73356
73357 function arrayToHash(array) {
73358 var hash = {};
73359
73360 array.forEach(function(val, idx) {
73361 hash[val] = true;
73362 });
73363
73364 return hash;
73365 }
73366
73367
73368 function formatValue(ctx, value, recurseTimes) {
73369 // Provide a hook for user-specified inspect functions.
73370 // Check that value is an object with an inspect function on it
73371 if (ctx.customInspect &&
73372 value &&
73373 isFunction(value.inspect) &&
73374 // Filter out the util module, it's inspect function is special
73375 value.inspect !== exports.inspect &&
73376 // Also filter out any prototype objects using the circular check.
73377 !(value.constructor && value.constructor.prototype === value)) {
73378 var ret = value.inspect(recurseTimes, ctx);
73379 if (!isString(ret)) {
73380 ret = formatValue(ctx, ret, recurseTimes);
73381 }
73382 return ret;
73383 }
73384
73385 // Primitive types cannot have properties
73386 var primitive = formatPrimitive(ctx, value);
73387 if (primitive) {
73388 return primitive;
73389 }
73390
73391 // Look up the keys of the object.
73392 var keys = Object.keys(value);
73393 var visibleKeys = arrayToHash(keys);
73394
73395 if (ctx.showHidden) {
73396 keys = Object.getOwnPropertyNames(value);
73397 }
73398
73399 // IE doesn't make error fields non-enumerable
73400 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
73401 if (isError(value)
73402 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
73403 return formatError(value);
73404 }
73405
73406 // Some type of object without properties can be shortcutted.
73407 if (keys.length === 0) {
73408 if (isFunction(value)) {
73409 var name = value.name ? ': ' + value.name : '';
73410 return ctx.stylize('[Function' + name + ']', 'special');
73411 }
73412 if (isRegExp(value)) {
73413 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
73414 }
73415 if (isDate(value)) {
73416 return ctx.stylize(Date.prototype.toString.call(value), 'date');
73417 }
73418 if (isError(value)) {
73419 return formatError(value);
73420 }
73421 }
73422
73423 var base = '', array = false, braces = ['{', '}'];
73424
73425 // Make Array say that they are Array
73426 if (isArray(value)) {
73427 array = true;
73428 braces = ['[', ']'];
73429 }
73430
73431 // Make functions say that they are functions
73432 if (isFunction(value)) {
73433 var n = value.name ? ': ' + value.name : '';
73434 base = ' [Function' + n + ']';
73435 }
73436
73437 // Make RegExps say that they are RegExps
73438 if (isRegExp(value)) {
73439 base = ' ' + RegExp.prototype.toString.call(value);
73440 }
73441
73442 // Make dates with properties first say the date
73443 if (isDate(value)) {
73444 base = ' ' + Date.prototype.toUTCString.call(value);
73445 }
73446
73447 // Make error with message first say the error
73448 if (isError(value)) {
73449 base = ' ' + formatError(value);
73450 }
73451
73452 if (keys.length === 0 && (!array || value.length == 0)) {
73453 return braces[0] + base + braces[1];
73454 }
73455
73456 if (recurseTimes < 0) {
73457 if (isRegExp(value)) {
73458 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
73459 } else {
73460 return ctx.stylize('[Object]', 'special');
73461 }
73462 }
73463
73464 ctx.seen.push(value);
73465
73466 var output;
73467 if (array) {
73468 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
73469 } else {
73470 output = keys.map(function(key) {
73471 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
73472 });
73473 }
73474
73475 ctx.seen.pop();
73476
73477 return reduceToSingleString(output, base, braces);
73478 }
73479
73480
73481 function formatPrimitive(ctx, value) {
73482 if (isUndefined(value))
73483 return ctx.stylize('undefined', 'undefined');
73484 if (isString(value)) {
73485 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
73486 .replace(/'/g, "\\'")
73487 .replace(/\\"/g, '"') + '\'';
73488 return ctx.stylize(simple, 'string');
73489 }
73490 if (isNumber(value))
73491 return ctx.stylize('' + value, 'number');
73492 if (isBoolean(value))
73493 return ctx.stylize('' + value, 'boolean');
73494 // For some reason typeof null is "object", so special case here.
73495 if (isNull(value))
73496 return ctx.stylize('null', 'null');
73497 }
73498
73499
73500 function formatError(value) {
73501 return '[' + Error.prototype.toString.call(value) + ']';
73502 }
73503
73504
73505 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
73506 var output = [];
73507 for (var i = 0, l = value.length; i < l; ++i) {
73508 if (hasOwnProperty(value, String(i))) {
73509 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
73510 String(i), true));
73511 } else {
73512 output.push('');
73513 }
73514 }
73515 keys.forEach(function(key) {
73516 if (!key.match(/^\d+$/)) {
73517 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
73518 key, true));
73519 }
73520 });
73521 return output;
73522 }
73523
73524
73525 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
73526 var name, str, desc;
73527 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
73528 if (desc.get) {
73529 if (desc.set) {
73530 str = ctx.stylize('[Getter/Setter]', 'special');
73531 } else {
73532 str = ctx.stylize('[Getter]', 'special');
73533 }
73534 } else {
73535 if (desc.set) {
73536 str = ctx.stylize('[Setter]', 'special');
73537 }
73538 }
73539 if (!hasOwnProperty(visibleKeys, key)) {
73540 name = '[' + key + ']';
73541 }
73542 if (!str) {
73543 if (ctx.seen.indexOf(desc.value) < 0) {
73544 if (isNull(recurseTimes)) {
73545 str = formatValue(ctx, desc.value, null);
73546 } else {
73547 str = formatValue(ctx, desc.value, recurseTimes - 1);
73548 }
73549 if (str.indexOf('\n') > -1) {
73550 if (array) {
73551 str = str.split('\n').map(function(line) {
73552 return ' ' + line;
73553 }).join('\n').substr(2);
73554 } else {
73555 str = '\n' + str.split('\n').map(function(line) {
73556 return ' ' + line;
73557 }).join('\n');
73558 }
73559 }
73560 } else {
73561 str = ctx.stylize('[Circular]', 'special');
73562 }
73563 }
73564 if (isUndefined(name)) {
73565 if (array && key.match(/^\d+$/)) {
73566 return str;
73567 }
73568 name = JSON.stringify('' + key);
73569 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
73570 name = name.substr(1, name.length - 2);
73571 name = ctx.stylize(name, 'name');
73572 } else {
73573 name = name.replace(/'/g, "\\'")
73574 .replace(/\\"/g, '"')
73575 .replace(/(^"|"$)/g, "'");
73576 name = ctx.stylize(name, 'string');
73577 }
73578 }
73579
73580 return name + ': ' + str;
73581 }
73582
73583
73584 function reduceToSingleString(output, base, braces) {
73585 var numLinesEst = 0;
73586 var length = output.reduce(function(prev, cur) {
73587 numLinesEst++;
73588 if (cur.indexOf('\n') >= 0) numLinesEst++;
73589 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
73590 }, 0);
73591
73592 if (length > 60) {
73593 return braces[0] +
73594 (base === '' ? '' : base + '\n ') +
73595 ' ' +
73596 output.join(',\n ') +
73597 ' ' +
73598 braces[1];
73599 }
73600
73601 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
73602 }
73603
73604
73605 // NOTE: These type checking functions intentionally don't use `instanceof`
73606 // because it is fragile and can be easily faked with `Object.create()`.
73607 function isArray(ar) {
73608 return Array.isArray(ar);
73609 }
73610 exports.isArray = isArray;
73611
73612 function isBoolean(arg) {
73613 return typeof arg === 'boolean';
73614 }
73615 exports.isBoolean = isBoolean;
73616
73617 function isNull(arg) {
73618 return arg === null;
73619 }
73620 exports.isNull = isNull;
73621
73622 function isNullOrUndefined(arg) {
73623 return arg == null;
73624 }
73625 exports.isNullOrUndefined = isNullOrUndefined;
73626
73627 function isNumber(arg) {
73628 return typeof arg === 'number';
73629 }
73630 exports.isNumber = isNumber;
73631
73632 function isString(arg) {
73633 return typeof arg === 'string';
73634 }
73635 exports.isString = isString;
73636
73637 function isSymbol(arg) {
73638 return typeof arg === 'symbol';
73639 }
73640 exports.isSymbol = isSymbol;
73641
73642 function isUndefined(arg) {
73643 return arg === void 0;
73644 }
73645 exports.isUndefined = isUndefined;
73646
73647 function isRegExp(re) {
73648 return isObject(re) && objectToString(re) === '[object RegExp]';
73649 }
73650 exports.isRegExp = isRegExp;
73651
73652 function isObject(arg) {
73653 return typeof arg === 'object' && arg !== null;
73654 }
73655 exports.isObject = isObject;
73656
73657 function isDate(d) {
73658 return isObject(d) && objectToString(d) === '[object Date]';
73659 }
73660 exports.isDate = isDate;
73661
73662 function isError(e) {
73663 return isObject(e) &&
73664 (objectToString(e) === '[object Error]' || e instanceof Error);
73665 }
73666 exports.isError = isError;
73667
73668 function isFunction(arg) {
73669 return typeof arg === 'function';
73670 }
73671 exports.isFunction = isFunction;
73672
73673 function isPrimitive(arg) {
73674 return arg === null ||
73675 typeof arg === 'boolean' ||
73676 typeof arg === 'number' ||
73677 typeof arg === 'string' ||
73678 typeof arg === 'symbol' || // ES6 symbol
73679 typeof arg === 'undefined';
73680 }
73681 exports.isPrimitive = isPrimitive;
73682
73683 exports.isBuffer = require('./support/isBuffer');
73684
73685 function objectToString(o) {
73686 return Object.prototype.toString.call(o);
73687 }
73688
73689
73690 function pad(n) {
73691 return n < 10 ? '0' + n.toString(10) : n.toString(10);
73692 }
73693
73694
73695 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
73696 'Oct', 'Nov', 'Dec'];
73697
73698 // 26 Feb 16:19:34
73699 function timestamp() {
73700 var d = new Date();
73701 var time = [pad(d.getHours()),
73702 pad(d.getMinutes()),
73703 pad(d.getSeconds())].join(':');
73704 return [d.getDate(), months[d.getMonth()], time].join(' ');
73705 }
73706
73707
73708 // log is just a thin wrapper to console.log that prepends a timestamp
73709 exports.log = function() {
73710 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
73711 };
73712
73713
73714 /**
73715 * Inherit the prototype methods from one constructor into another.
73716 *
73717 * The Function.prototype.inherits from lang.js rewritten as a standalone
73718 * function (not on Function.prototype). NOTE: If this file is to be loaded
73719 * during bootstrapping this function needs to be rewritten using some native
73720 * functions as prototype setup using normal JavaScript does not work as
73721 * expected during bootstrapping (see mirror.js in r114903).
73722 *
73723 * @param {function} ctor Constructor function which needs to inherit the
73724 * prototype.
73725 * @param {function} superCtor Constructor function to inherit prototype from.
73726 */
73727 exports.inherits = require('inherits');
73728
73729 exports._extend = function(origin, add) {
73730 // Don't do anything if add isn't an object
73731 if (!add || !isObject(add)) return origin;
73732
73733 var keys = Object.keys(add);
73734 var i = keys.length;
73735 while (i--) {
73736 origin[keys[i]] = add[keys[i]];
73737 }
73738 return origin;
73739 };
73740
73741 function hasOwnProperty(obj, prop) {
73742 return Object.prototype.hasOwnProperty.call(obj, prop);
73743 }
73744
73745 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
73746 },{"./support/isBuffer":147,"_process":112,"inherits":146}],149:[function(require,module,exports){
73747 var indexOf = require('indexof');
73748
73749 var Object_keys = function (obj) {
73750 if (Object.keys) return Object.keys(obj)
73751 else {
73752 var res = [];
73753 for (var key in obj) res.push(key)
73754 return res;
73755 }
73756 };
73757
73758 var forEach = function (xs, fn) {
73759 if (xs.forEach) return xs.forEach(fn)
73760 else for (var i = 0; i < xs.length; i++) {
73761 fn(xs[i], i, xs);
73762 }
73763 };
73764
73765 var defineProp = (function() {
73766 try {
73767 Object.defineProperty({}, '_', {});
73768 return function(obj, name, value) {
73769 Object.defineProperty(obj, name, {
73770 writable: true,
73771 enumerable: false,
73772 configurable: true,
73773 value: value
73774 })
73775 };
73776 } catch(e) {
73777 return function(obj, name, value) {
73778 obj[name] = value;
73779 };
73780 }
73781 }());
73782
73783 var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',
73784 'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',
73785 'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',
73786 'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',
73787 'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];
73788
73789 function Context() {}
73790 Context.prototype = {};
73791
73792 var Script = exports.Script = function NodeScript (code) {
73793 if (!(this instanceof Script)) return new Script(code);
73794 this.code = code;
73795 };
73796
73797 Script.prototype.runInContext = function (context) {
73798 if (!(context instanceof Context)) {
73799 throw new TypeError("needs a 'context' argument.");
73800 }
73801
73802 var iframe = document.createElement('iframe');
73803 if (!iframe.style) iframe.style = {};
73804 iframe.style.display = 'none';
73805
73806 document.body.appendChild(iframe);
73807
73808 var win = iframe.contentWindow;
73809 var wEval = win.eval, wExecScript = win.execScript;
73810
73811 if (!wEval && wExecScript) {
73812 // win.eval() magically appears when this is called in IE:
73813 wExecScript.call(win, 'null');
73814 wEval = win.eval;
73815 }
73816
73817 forEach(Object_keys(context), function (key) {
73818 win[key] = context[key];
73819 });
73820 forEach(globals, function (key) {
73821 if (context[key]) {
73822 win[key] = context[key];
73823 }
73824 });
73825
73826 var winKeys = Object_keys(win);
73827
73828 var res = wEval.call(win, this.code);
73829
73830 forEach(Object_keys(win), function (key) {
73831 // Avoid copying circular objects like `top` and `window` by only
73832 // updating existing context properties or new properties in the `win`
73833 // that was only introduced after the eval.
73834 if (key in context || indexOf(winKeys, key) === -1) {
73835 context[key] = win[key];
73836 }
73837 });
73838
73839 forEach(globals, function (key) {
73840 if (!(key in context)) {
73841 defineProp(context, key, win[key]);
73842 }
73843 });
73844
73845 document.body.removeChild(iframe);
73846
73847 return res;
73848 };
73849
73850 Script.prototype.runInThisContext = function () {
73851 return eval(this.code); // maybe...
73852 };
73853
73854 Script.prototype.runInNewContext = function (context) {
73855 var ctx = Script.createContext(context);
73856 var res = this.runInContext(ctx);
73857
73858 forEach(Object_keys(ctx), function (key) {
73859 context[key] = ctx[key];
73860 });
73861
73862 return res;
73863 };
73864
73865 forEach(Object_keys(Script.prototype), function (name) {
73866 exports[name] = Script[name] = function (code) {
73867 var s = Script(code);
73868 return s[name].apply(s, [].slice.call(arguments, 1));
73869 };
73870 });
73871
73872 exports.createScript = function (code) {
73873 return exports.Script(code);
73874 };
73875
73876 exports.createContext = Script.createContext = function (context) {
73877 var copy = new Context();
73878 if(typeof context === 'object') {
73879 forEach(Object_keys(context), function (key) {
73880 copy[key] = context[key];
73881 });
73882 }
73883 return copy;
73884 };
73885
73886 },{"indexof":94}],150:[function(require,module,exports){
73887 var aes = require('browserify-aes')
73888 var assert = require('assert')
73889 var Buffer = require('safe-buffer').Buffer
73890 var bs58check = require('bs58check')
73891 var createHash = require('create-hash')
73892 var scrypt = require('scryptsy')
73893 var xor = require('buffer-xor/inplace')
73894
73895 var ecurve = require('ecurve')
73896 var curve = ecurve.getCurveByName('secp256k1')
73897
73898 var BigInteger = require('bigi')
73899
73900 // constants
73901 var SCRYPT_PARAMS = {
73902 N: 16384, // specified by BIP38
73903 r: 8,
73904 p: 8
73905 }
73906 var NULL = Buffer.alloc(0)
73907
73908 function hash160 (buffer) {
73909 return createHash('rmd160').update(
73910 createHash('sha256').update(buffer).digest()
73911 ).digest()
73912 }
73913
73914 function hash256 (buffer) {
73915 return createHash('sha256').update(
73916 createHash('sha256').update(buffer).digest()
73917 ).digest()
73918 }
73919
73920 function getAddress (d, compressed) {
73921 var Q = curve.G.multiply(d).getEncoded(compressed)
73922 var hash = hash160(Q)
73923 var payload = Buffer.allocUnsafe(21)
73924 payload.writeUInt8(0x00, 0) // XXX TODO FIXME bitcoin only??? damn you BIP38
73925 hash.copy(payload, 1)
73926
73927 return bs58check.encode(payload)
73928 }
73929
73930 function encryptRaw (buffer, compressed, passphrase, progressCallback, scryptParams) {
73931 if (buffer.length !== 32) throw new Error('Invalid private key length')
73932 scryptParams = scryptParams || SCRYPT_PARAMS
73933
73934 var d = BigInteger.fromBuffer(buffer)
73935 var address = getAddress(d, compressed)
73936 var secret = Buffer.from(passphrase, 'utf8')
73937 var salt = hash256(address).slice(0, 4)
73938
73939 var N = scryptParams.N
73940 var r = scryptParams.r
73941 var p = scryptParams.p
73942
73943 var scryptBuf = scrypt(secret, salt, N, r, p, 64, progressCallback)
73944 var derivedHalf1 = scryptBuf.slice(0, 32)
73945 var derivedHalf2 = scryptBuf.slice(32, 64)
73946
73947 var xorBuf = xor(derivedHalf1, buffer)
73948 var cipher = aes.createCipheriv('aes-256-ecb', derivedHalf2, NULL)
73949 cipher.setAutoPadding(false)
73950 cipher.end(xorBuf)
73951
73952 var cipherText = cipher.read()
73953
73954 // 0x01 | 0x42 | flagByte | salt (4) | cipherText (32)
73955 var result = Buffer.allocUnsafe(7 + 32)
73956 result.writeUInt8(0x01, 0)
73957 result.writeUInt8(0x42, 1)
73958 result.writeUInt8(compressed ? 0xe0 : 0xc0, 2)
73959 salt.copy(result, 3)
73960 cipherText.copy(result, 7)
73961
73962 return result
73963 }
73964
73965 function encrypt (buffer, compressed, passphrase, progressCallback, scryptParams) {
73966 return bs58check.encode(encryptRaw(buffer, compressed, passphrase, progressCallback, scryptParams))
73967 }
73968
73969 // some of the techniques borrowed from: https://github.com/pointbiz/bitaddress.org
73970 function decryptRaw (buffer, passphrase, progressCallback, scryptParams) {
73971 // 39 bytes: 2 bytes prefix, 37 bytes payload
73972 if (buffer.length !== 39) throw new Error('Invalid BIP38 data length')
73973 if (buffer.readUInt8(0) !== 0x01) throw new Error('Invalid BIP38 prefix')
73974 scryptParams = scryptParams || SCRYPT_PARAMS
73975
73976 // check if BIP38 EC multiply
73977 var type = buffer.readUInt8(1)
73978 if (type === 0x43) return decryptECMult(buffer, passphrase, progressCallback, scryptParams)
73979 if (type !== 0x42) throw new Error('Invalid BIP38 type')
73980
73981 passphrase = Buffer.from(passphrase, 'utf8')
73982
73983 var flagByte = buffer.readUInt8(2)
73984 var compressed = flagByte === 0xe0
73985 if (!compressed && flagByte !== 0xc0) throw new Error('Invalid BIP38 compression flag')
73986
73987 var N = scryptParams.N
73988 var r = scryptParams.r
73989 var p = scryptParams.p
73990
73991 var salt = buffer.slice(3, 7)
73992 var scryptBuf = scrypt(passphrase, salt, N, r, p, 64, progressCallback)
73993 var derivedHalf1 = scryptBuf.slice(0, 32)
73994 var derivedHalf2 = scryptBuf.slice(32, 64)
73995
73996 var privKeyBuf = buffer.slice(7, 7 + 32)
73997 var decipher = aes.createDecipheriv('aes-256-ecb', derivedHalf2, NULL)
73998 decipher.setAutoPadding(false)
73999 decipher.end(privKeyBuf)
74000
74001 var plainText = decipher.read()
74002 var privateKey = xor(derivedHalf1, plainText)
74003
74004 // verify salt matches address
74005 var d = BigInteger.fromBuffer(privateKey)
74006 var address = getAddress(d, compressed)
74007 var checksum = hash256(address).slice(0, 4)
74008 assert.deepEqual(salt, checksum)
74009
74010 return {
74011 privateKey: privateKey,
74012 compressed: compressed
74013 }
74014 }
74015
74016 function decrypt (string, passphrase, progressCallback, scryptParams) {
74017 return decryptRaw(bs58check.decode(string), passphrase, progressCallback, scryptParams)
74018 }
74019
74020 function decryptECMult (buffer, passphrase, progressCallback, scryptParams) {
74021 passphrase = Buffer.from(passphrase, 'utf8')
74022 buffer = buffer.slice(1) // FIXME: we can avoid this
74023 scryptParams = scryptParams || SCRYPT_PARAMS
74024
74025 var flag = buffer.readUInt8(1)
74026 var compressed = (flag & 0x20) !== 0
74027 var hasLotSeq = (flag & 0x04) !== 0
74028
74029 assert.equal((flag & 0x24), flag, 'Invalid private key.')
74030
74031 var addressHash = buffer.slice(2, 6)
74032 var ownerEntropy = buffer.slice(6, 14)
74033 var ownerSalt
74034
74035 // 4 bytes ownerSalt if 4 bytes lot/sequence
74036 if (hasLotSeq) {
74037 ownerSalt = ownerEntropy.slice(0, 4)
74038
74039 // else, 8 bytes ownerSalt
74040 } else {
74041 ownerSalt = ownerEntropy
74042 }
74043
74044 var encryptedPart1 = buffer.slice(14, 22) // First 8 bytes
74045 var encryptedPart2 = buffer.slice(22, 38) // 16 bytes
74046
74047 var N = scryptParams.N
74048 var r = scryptParams.r
74049 var p = scryptParams.p
74050 var preFactor = scrypt(passphrase, ownerSalt, N, r, p, 32, progressCallback)
74051
74052 var passFactor
74053 if (hasLotSeq) {
74054 var hashTarget = Buffer.concat([preFactor, ownerEntropy])
74055 passFactor = hash256(hashTarget)
74056 } else {
74057 passFactor = preFactor
74058 }
74059
74060 var passInt = BigInteger.fromBuffer(passFactor)
74061 var passPoint = curve.G.multiply(passInt).getEncoded(true)
74062
74063 var seedBPass = scrypt(passPoint, Buffer.concat([addressHash, ownerEntropy]), 1024, 1, 1, 64)
74064 var derivedHalf1 = seedBPass.slice(0, 32)
74065 var derivedHalf2 = seedBPass.slice(32, 64)
74066
74067 var decipher = aes.createDecipheriv('aes-256-ecb', derivedHalf2, Buffer.alloc(0))
74068 decipher.setAutoPadding(false)
74069 decipher.end(encryptedPart2)
74070
74071 var decryptedPart2 = decipher.read()
74072 var tmp = xor(decryptedPart2, derivedHalf1.slice(16, 32))
74073 var seedBPart2 = tmp.slice(8, 16)
74074
74075 var decipher2 = aes.createDecipheriv('aes-256-ecb', derivedHalf2, Buffer.alloc(0))
74076 decipher2.setAutoPadding(false)
74077 decipher2.write(encryptedPart1) // first 8 bytes
74078 decipher2.end(tmp.slice(0, 8)) // last 8 bytes
74079
74080 var seedBPart1 = xor(decipher2.read(), derivedHalf1.slice(0, 16))
74081 var seedB = Buffer.concat([seedBPart1, seedBPart2], 24)
74082 var factorB = BigInteger.fromBuffer(hash256(seedB))
74083
74084 // d = passFactor * factorB (mod n)
74085 var d = passInt.multiply(factorB).mod(curve.n)
74086
74087 return {
74088 privateKey: d.toBuffer(32),
74089 compressed: compressed
74090 }
74091 }
74092
74093 function verify (string) {
74094 var decoded = bs58check.decodeUnsafe(string)
74095 if (!decoded) return false
74096
74097 if (decoded.length !== 39) return false
74098 if (decoded.readUInt8(0) !== 0x01) return false
74099
74100 var type = decoded.readUInt8(1)
74101 var flag = decoded.readUInt8(2)
74102
74103 // encrypted WIF
74104 if (type === 0x42) {
74105 if (flag !== 0xc0 && flag !== 0xe0) return false
74106
74107 // EC mult
74108 } else if (type === 0x43) {
74109 if ((flag & ~0x24)) return false
74110 } else {
74111 return false
74112 }
74113
74114 return true
74115 }
74116
74117 module.exports = {
74118 decrypt: decrypt,
74119 decryptECMult: decryptECMult,
74120 decryptRaw: decryptRaw,
74121 encrypt: encrypt,
74122 encryptRaw: encryptRaw,
74123 verify: verify
74124 }
74125
74126 },{"assert":15,"bigi":154,"browserify-aes":158,"bs58check":175,"buffer-xor/inplace":177,"create-hash":179,"ecurve":184,"safe-buffer":193,"scryptsy":194}],151:[function(require,module,exports){
74127 // base-x encoding
74128 // Forked from https://github.com/cryptocoinjs/bs58
74129 // Originally written by Mike Hearn for BitcoinJ
74130 // Copyright (c) 2011 Google Inc
74131 // Ported to JavaScript by Stefan Thomas
74132 // Merged Buffer refactorings from base58-native by Stephen Pair
74133 // Copyright (c) 2013 BitPay Inc
74134
74135 var Buffer = require('safe-buffer').Buffer
74136
74137 module.exports = function base (ALPHABET) {
74138 var ALPHABET_MAP = {}
74139 var BASE = ALPHABET.length
74140 var LEADER = ALPHABET.charAt(0)
74141
74142 // pre-compute lookup table
74143 for (var z = 0; z < ALPHABET.length; z++) {
74144 var x = ALPHABET.charAt(z)
74145
74146 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
74147 ALPHABET_MAP[x] = z
74148 }
74149
74150 function encode (source) {
74151 if (source.length === 0) return ''
74152
74153 var digits = [0]
74154 for (var i = 0; i < source.length; ++i) {
74155 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
74156 carry += digits[j] << 8
74157 digits[j] = carry % BASE
74158 carry = (carry / BASE) | 0
74159 }
74160
74161 while (carry > 0) {
74162 digits.push(carry % BASE)
74163 carry = (carry / BASE) | 0
74164 }
74165 }
74166
74167 var string = ''
74168
74169 // deal with leading zeros
74170 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += LEADER
74171 // convert digits to a string
74172 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
74173
74174 return string
74175 }
74176
74177 function decodeUnsafe (string) {
74178 if (typeof string !== 'string') throw new TypeError('Expected String')
74179 if (string.length === 0) return Buffer.allocUnsafe(0)
74180
74181 var bytes = [0]
74182 for (var i = 0; i < string.length; i++) {
74183 var value = ALPHABET_MAP[string[i]]
74184 if (value === undefined) return
74185
74186 for (var j = 0, carry = value; j < bytes.length; ++j) {
74187 carry += bytes[j] * BASE
74188 bytes[j] = carry & 0xff
74189 carry >>= 8
74190 }
74191
74192 while (carry > 0) {
74193 bytes.push(carry & 0xff)
74194 carry >>= 8
74195 }
74196 }
74197
74198 // deal with leading zeros
74199 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
74200 bytes.push(0)
74201 }
74202
74203 return Buffer.from(bytes.reverse())
74204 }
74205
74206 function decode (string) {
74207 var buffer = decodeUnsafe(string)
74208 if (buffer) return buffer
74209
74210 throw new Error('Non-base' + BASE + ' character')
74211 }
74212
74213 return {
74214 encode: encode,
74215 decodeUnsafe: decodeUnsafe,
74216 decode: decode
74217 }
74218 }
74219
74220 },{"safe-buffer":193}],152:[function(require,module,exports){
74221 // (public) Constructor
74222 function BigInteger(a, b, c) {
74223 if (!(this instanceof BigInteger))
74224 return new BigInteger(a, b, c)
74225
74226 if (a != null) {
74227 if ("number" == typeof a) this.fromNumber(a, b, c)
74228 else if (b == null && "string" != typeof a) this.fromString(a, 256)
74229 else this.fromString(a, b)
74230 }
74231 }
74232
74233 var proto = BigInteger.prototype
74234
74235 // duck-typed isBigInteger
74236 proto.__bigi = require('../package.json').version
74237 BigInteger.isBigInteger = function (obj, check_ver) {
74238 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
74239 }
74240
74241 // Bits per digit
74242 var dbits
74243
74244 // am: Compute w_j += (x*this_i), propagate carries,
74245 // c is initial carry, returns final carry.
74246 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
74247 // We need to select the fastest one that works in this environment.
74248
74249 // am1: use a single mult and divide to get the high bits,
74250 // max digit bits should be 26 because
74251 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
74252 function am1(i, x, w, j, c, n) {
74253 while (--n >= 0) {
74254 var v = x * this[i++] + w[j] + c
74255 c = Math.floor(v / 0x4000000)
74256 w[j++] = v & 0x3ffffff
74257 }
74258 return c
74259 }
74260 // am2 avoids a big mult-and-extract completely.
74261 // Max digit bits should be <= 30 because we do bitwise ops
74262 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
74263 function am2(i, x, w, j, c, n) {
74264 var xl = x & 0x7fff,
74265 xh = x >> 15
74266 while (--n >= 0) {
74267 var l = this[i] & 0x7fff
74268 var h = this[i++] >> 15
74269 var m = xh * l + h * xl
74270 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
74271 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
74272 w[j++] = l & 0x3fffffff
74273 }
74274 return c
74275 }
74276 // Alternately, set max digit bits to 28 since some
74277 // browsers slow down when dealing with 32-bit numbers.
74278 function am3(i, x, w, j, c, n) {
74279 var xl = x & 0x3fff,
74280 xh = x >> 14
74281 while (--n >= 0) {
74282 var l = this[i] & 0x3fff
74283 var h = this[i++] >> 14
74284 var m = xh * l + h * xl
74285 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
74286 c = (l >> 28) + (m >> 14) + xh * h
74287 w[j++] = l & 0xfffffff
74288 }
74289 return c
74290 }
74291
74292 // wtf?
74293 BigInteger.prototype.am = am1
74294 dbits = 26
74295
74296 BigInteger.prototype.DB = dbits
74297 BigInteger.prototype.DM = ((1 << dbits) - 1)
74298 var DV = BigInteger.prototype.DV = (1 << dbits)
74299
74300 var BI_FP = 52
74301 BigInteger.prototype.FV = Math.pow(2, BI_FP)
74302 BigInteger.prototype.F1 = BI_FP - dbits
74303 BigInteger.prototype.F2 = 2 * dbits - BI_FP
74304
74305 // Digit conversions
74306 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
74307 var BI_RC = new Array()
74308 var rr, vv
74309 rr = "0".charCodeAt(0)
74310 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
74311 rr = "a".charCodeAt(0)
74312 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
74313 rr = "A".charCodeAt(0)
74314 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
74315
74316 function int2char(n) {
74317 return BI_RM.charAt(n)
74318 }
74319
74320 function intAt(s, i) {
74321 var c = BI_RC[s.charCodeAt(i)]
74322 return (c == null) ? -1 : c
74323 }
74324
74325 // (protected) copy this to r
74326 function bnpCopyTo(r) {
74327 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
74328 r.t = this.t
74329 r.s = this.s
74330 }
74331
74332 // (protected) set from integer value x, -DV <= x < DV
74333 function bnpFromInt(x) {
74334 this.t = 1
74335 this.s = (x < 0) ? -1 : 0
74336 if (x > 0) this[0] = x
74337 else if (x < -1) this[0] = x + DV
74338 else this.t = 0
74339 }
74340
74341 // return bigint initialized to value
74342 function nbv(i) {
74343 var r = new BigInteger()
74344 r.fromInt(i)
74345 return r
74346 }
74347
74348 // (protected) set from string and radix
74349 function bnpFromString(s, b) {
74350 var self = this
74351
74352 var k
74353 if (b == 16) k = 4
74354 else if (b == 8) k = 3
74355 else if (b == 256) k = 8; // byte array
74356 else if (b == 2) k = 1
74357 else if (b == 32) k = 5
74358 else if (b == 4) k = 2
74359 else {
74360 self.fromRadix(s, b)
74361 return
74362 }
74363 self.t = 0
74364 self.s = 0
74365 var i = s.length,
74366 mi = false,
74367 sh = 0
74368 while (--i >= 0) {
74369 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
74370 if (x < 0) {
74371 if (s.charAt(i) == "-") mi = true
74372 continue
74373 }
74374 mi = false
74375 if (sh == 0)
74376 self[self.t++] = x
74377 else if (sh + k > self.DB) {
74378 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
74379 self[self.t++] = (x >> (self.DB - sh))
74380 } else
74381 self[self.t - 1] |= x << sh
74382 sh += k
74383 if (sh >= self.DB) sh -= self.DB
74384 }
74385 if (k == 8 && (s[0] & 0x80) != 0) {
74386 self.s = -1
74387 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
74388 }
74389 self.clamp()
74390 if (mi) BigInteger.ZERO.subTo(self, self)
74391 }
74392
74393 // (protected) clamp off excess high words
74394 function bnpClamp() {
74395 var c = this.s & this.DM
74396 while (this.t > 0 && this[this.t - 1] == c)--this.t
74397 }
74398
74399 // (public) return string representation in given radix
74400 function bnToString(b) {
74401 var self = this
74402 if (self.s < 0) return "-" + self.negate()
74403 .toString(b)
74404 var k
74405 if (b == 16) k = 4
74406 else if (b == 8) k = 3
74407 else if (b == 2) k = 1
74408 else if (b == 32) k = 5
74409 else if (b == 4) k = 2
74410 else return self.toRadix(b)
74411 var km = (1 << k) - 1,
74412 d, m = false,
74413 r = "",
74414 i = self.t
74415 var p = self.DB - (i * self.DB) % k
74416 if (i-- > 0) {
74417 if (p < self.DB && (d = self[i] >> p) > 0) {
74418 m = true
74419 r = int2char(d)
74420 }
74421 while (i >= 0) {
74422 if (p < k) {
74423 d = (self[i] & ((1 << p) - 1)) << (k - p)
74424 d |= self[--i] >> (p += self.DB - k)
74425 } else {
74426 d = (self[i] >> (p -= k)) & km
74427 if (p <= 0) {
74428 p += self.DB
74429 --i
74430 }
74431 }
74432 if (d > 0) m = true
74433 if (m) r += int2char(d)
74434 }
74435 }
74436 return m ? r : "0"
74437 }
74438
74439 // (public) -this
74440 function bnNegate() {
74441 var r = new BigInteger()
74442 BigInteger.ZERO.subTo(this, r)
74443 return r
74444 }
74445
74446 // (public) |this|
74447 function bnAbs() {
74448 return (this.s < 0) ? this.negate() : this
74449 }
74450
74451 // (public) return + if this > a, - if this < a, 0 if equal
74452 function bnCompareTo(a) {
74453 var r = this.s - a.s
74454 if (r != 0) return r
74455 var i = this.t
74456 r = i - a.t
74457 if (r != 0) return (this.s < 0) ? -r : r
74458 while (--i >= 0)
74459 if ((r = this[i] - a[i]) != 0) return r
74460 return 0
74461 }
74462
74463 // returns bit length of the integer x
74464 function nbits(x) {
74465 var r = 1,
74466 t
74467 if ((t = x >>> 16) != 0) {
74468 x = t
74469 r += 16
74470 }
74471 if ((t = x >> 8) != 0) {
74472 x = t
74473 r += 8
74474 }
74475 if ((t = x >> 4) != 0) {
74476 x = t
74477 r += 4
74478 }
74479 if ((t = x >> 2) != 0) {
74480 x = t
74481 r += 2
74482 }
74483 if ((t = x >> 1) != 0) {
74484 x = t
74485 r += 1
74486 }
74487 return r
74488 }
74489
74490 // (public) return the number of bits in "this"
74491 function bnBitLength() {
74492 if (this.t <= 0) return 0
74493 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
74494 }
74495
74496 // (public) return the number of bytes in "this"
74497 function bnByteLength() {
74498 return this.bitLength() >> 3
74499 }
74500
74501 // (protected) r = this << n*DB
74502 function bnpDLShiftTo(n, r) {
74503 var i
74504 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
74505 for (i = n - 1; i >= 0; --i) r[i] = 0
74506 r.t = this.t + n
74507 r.s = this.s
74508 }
74509
74510 // (protected) r = this >> n*DB
74511 function bnpDRShiftTo(n, r) {
74512 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
74513 r.t = Math.max(this.t - n, 0)
74514 r.s = this.s
74515 }
74516
74517 // (protected) r = this << n
74518 function bnpLShiftTo(n, r) {
74519 var self = this
74520 var bs = n % self.DB
74521 var cbs = self.DB - bs
74522 var bm = (1 << cbs) - 1
74523 var ds = Math.floor(n / self.DB),
74524 c = (self.s << bs) & self.DM,
74525 i
74526 for (i = self.t - 1; i >= 0; --i) {
74527 r[i + ds + 1] = (self[i] >> cbs) | c
74528 c = (self[i] & bm) << bs
74529 }
74530 for (i = ds - 1; i >= 0; --i) r[i] = 0
74531 r[ds] = c
74532 r.t = self.t + ds + 1
74533 r.s = self.s
74534 r.clamp()
74535 }
74536
74537 // (protected) r = this >> n
74538 function bnpRShiftTo(n, r) {
74539 var self = this
74540 r.s = self.s
74541 var ds = Math.floor(n / self.DB)
74542 if (ds >= self.t) {
74543 r.t = 0
74544 return
74545 }
74546 var bs = n % self.DB
74547 var cbs = self.DB - bs
74548 var bm = (1 << bs) - 1
74549 r[0] = self[ds] >> bs
74550 for (var i = ds + 1; i < self.t; ++i) {
74551 r[i - ds - 1] |= (self[i] & bm) << cbs
74552 r[i - ds] = self[i] >> bs
74553 }
74554 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
74555 r.t = self.t - ds
74556 r.clamp()
74557 }
74558
74559 // (protected) r = this - a
74560 function bnpSubTo(a, r) {
74561 var self = this
74562 var i = 0,
74563 c = 0,
74564 m = Math.min(a.t, self.t)
74565 while (i < m) {
74566 c += self[i] - a[i]
74567 r[i++] = c & self.DM
74568 c >>= self.DB
74569 }
74570 if (a.t < self.t) {
74571 c -= a.s
74572 while (i < self.t) {
74573 c += self[i]
74574 r[i++] = c & self.DM
74575 c >>= self.DB
74576 }
74577 c += self.s
74578 } else {
74579 c += self.s
74580 while (i < a.t) {
74581 c -= a[i]
74582 r[i++] = c & self.DM
74583 c >>= self.DB
74584 }
74585 c -= a.s
74586 }
74587 r.s = (c < 0) ? -1 : 0
74588 if (c < -1) r[i++] = self.DV + c
74589 else if (c > 0) r[i++] = c
74590 r.t = i
74591 r.clamp()
74592 }
74593
74594 // (protected) r = this * a, r != this,a (HAC 14.12)
74595 // "this" should be the larger one if appropriate.
74596 function bnpMultiplyTo(a, r) {
74597 var x = this.abs(),
74598 y = a.abs()
74599 var i = x.t
74600 r.t = i + y.t
74601 while (--i >= 0) r[i] = 0
74602 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
74603 r.s = 0
74604 r.clamp()
74605 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
74606 }
74607
74608 // (protected) r = this^2, r != this (HAC 14.16)
74609 function bnpSquareTo(r) {
74610 var x = this.abs()
74611 var i = r.t = 2 * x.t
74612 while (--i >= 0) r[i] = 0
74613 for (i = 0; i < x.t - 1; ++i) {
74614 var c = x.am(i, x[i], r, 2 * i, 0, 1)
74615 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
74616 r[i + x.t] -= x.DV
74617 r[i + x.t + 1] = 1
74618 }
74619 }
74620 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
74621 r.s = 0
74622 r.clamp()
74623 }
74624
74625 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
74626 // r != q, this != m. q or r may be null.
74627 function bnpDivRemTo(m, q, r) {
74628 var self = this
74629 var pm = m.abs()
74630 if (pm.t <= 0) return
74631 var pt = self.abs()
74632 if (pt.t < pm.t) {
74633 if (q != null) q.fromInt(0)
74634 if (r != null) self.copyTo(r)
74635 return
74636 }
74637 if (r == null) r = new BigInteger()
74638 var y = new BigInteger(),
74639 ts = self.s,
74640 ms = m.s
74641 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
74642 if (nsh > 0) {
74643 pm.lShiftTo(nsh, y)
74644 pt.lShiftTo(nsh, r)
74645 } else {
74646 pm.copyTo(y)
74647 pt.copyTo(r)
74648 }
74649 var ys = y.t
74650 var y0 = y[ys - 1]
74651 if (y0 == 0) return
74652 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
74653 var d1 = self.FV / yt,
74654 d2 = (1 << self.F1) / yt,
74655 e = 1 << self.F2
74656 var i = r.t,
74657 j = i - ys,
74658 t = (q == null) ? new BigInteger() : q
74659 y.dlShiftTo(j, t)
74660 if (r.compareTo(t) >= 0) {
74661 r[r.t++] = 1
74662 r.subTo(t, r)
74663 }
74664 BigInteger.ONE.dlShiftTo(ys, t)
74665 t.subTo(y, y); // "negative" y so we can replace sub with am later
74666 while (y.t < ys) y[y.t++] = 0
74667 while (--j >= 0) {
74668 // Estimate quotient digit
74669 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
74670 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
74671 y.dlShiftTo(j, t)
74672 r.subTo(t, r)
74673 while (r[i] < --qd) r.subTo(t, r)
74674 }
74675 }
74676 if (q != null) {
74677 r.drShiftTo(ys, q)
74678 if (ts != ms) BigInteger.ZERO.subTo(q, q)
74679 }
74680 r.t = ys
74681 r.clamp()
74682 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
74683 if (ts < 0) BigInteger.ZERO.subTo(r, r)
74684 }
74685
74686 // (public) this mod a
74687 function bnMod(a) {
74688 var r = new BigInteger()
74689 this.abs()
74690 .divRemTo(a, null, r)
74691 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
74692 return r
74693 }
74694
74695 // Modular reduction using "classic" algorithm
74696 function Classic(m) {
74697 this.m = m
74698 }
74699
74700 function cConvert(x) {
74701 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
74702 else return x
74703 }
74704
74705 function cRevert(x) {
74706 return x
74707 }
74708
74709 function cReduce(x) {
74710 x.divRemTo(this.m, null, x)
74711 }
74712
74713 function cMulTo(x, y, r) {
74714 x.multiplyTo(y, r)
74715 this.reduce(r)
74716 }
74717
74718 function cSqrTo(x, r) {
74719 x.squareTo(r)
74720 this.reduce(r)
74721 }
74722
74723 Classic.prototype.convert = cConvert
74724 Classic.prototype.revert = cRevert
74725 Classic.prototype.reduce = cReduce
74726 Classic.prototype.mulTo = cMulTo
74727 Classic.prototype.sqrTo = cSqrTo
74728
74729 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
74730 // justification:
74731 // xy == 1 (mod m)
74732 // xy = 1+km
74733 // xy(2-xy) = (1+km)(1-km)
74734 // x[y(2-xy)] = 1-k^2m^2
74735 // x[y(2-xy)] == 1 (mod m^2)
74736 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
74737 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
74738 // JS multiply "overflows" differently from C/C++, so care is needed here.
74739 function bnpInvDigit() {
74740 if (this.t < 1) return 0
74741 var x = this[0]
74742 if ((x & 1) == 0) return 0
74743 var y = x & 3; // y == 1/x mod 2^2
74744 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
74745 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
74746 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
74747 // last step - calculate inverse mod DV directly
74748 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
74749 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
74750 // we really want the negative inverse, and -DV < y < DV
74751 return (y > 0) ? this.DV - y : -y
74752 }
74753
74754 // Montgomery reduction
74755 function Montgomery(m) {
74756 this.m = m
74757 this.mp = m.invDigit()
74758 this.mpl = this.mp & 0x7fff
74759 this.mph = this.mp >> 15
74760 this.um = (1 << (m.DB - 15)) - 1
74761 this.mt2 = 2 * m.t
74762 }
74763
74764 // xR mod m
74765 function montConvert(x) {
74766 var r = new BigInteger()
74767 x.abs()
74768 .dlShiftTo(this.m.t, r)
74769 r.divRemTo(this.m, null, r)
74770 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
74771 return r
74772 }
74773
74774 // x/R mod m
74775 function montRevert(x) {
74776 var r = new BigInteger()
74777 x.copyTo(r)
74778 this.reduce(r)
74779 return r
74780 }
74781
74782 // x = x/R mod m (HAC 14.32)
74783 function montReduce(x) {
74784 while (x.t <= this.mt2) // pad x so am has enough room later
74785 x[x.t++] = 0
74786 for (var i = 0; i < this.m.t; ++i) {
74787 // faster way of calculating u0 = x[i]*mp mod DV
74788 var j = x[i] & 0x7fff
74789 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
74790 // use am to combine the multiply-shift-add into one call
74791 j = i + this.m.t
74792 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
74793 // propagate carry
74794 while (x[j] >= x.DV) {
74795 x[j] -= x.DV
74796 x[++j]++
74797 }
74798 }
74799 x.clamp()
74800 x.drShiftTo(this.m.t, x)
74801 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
74802 }
74803
74804 // r = "x^2/R mod m"; x != r
74805 function montSqrTo(x, r) {
74806 x.squareTo(r)
74807 this.reduce(r)
74808 }
74809
74810 // r = "xy/R mod m"; x,y != r
74811 function montMulTo(x, y, r) {
74812 x.multiplyTo(y, r)
74813 this.reduce(r)
74814 }
74815
74816 Montgomery.prototype.convert = montConvert
74817 Montgomery.prototype.revert = montRevert
74818 Montgomery.prototype.reduce = montReduce
74819 Montgomery.prototype.mulTo = montMulTo
74820 Montgomery.prototype.sqrTo = montSqrTo
74821
74822 // (protected) true iff this is even
74823 function bnpIsEven() {
74824 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
74825 }
74826
74827 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
74828 function bnpExp(e, z) {
74829 if (e > 0xffffffff || e < 1) return BigInteger.ONE
74830 var r = new BigInteger(),
74831 r2 = new BigInteger(),
74832 g = z.convert(this),
74833 i = nbits(e) - 1
74834 g.copyTo(r)
74835 while (--i >= 0) {
74836 z.sqrTo(r, r2)
74837 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
74838 else {
74839 var t = r
74840 r = r2
74841 r2 = t
74842 }
74843 }
74844 return z.revert(r)
74845 }
74846
74847 // (public) this^e % m, 0 <= e < 2^32
74848 function bnModPowInt(e, m) {
74849 var z
74850 if (e < 256 || m.isEven()) z = new Classic(m)
74851 else z = new Montgomery(m)
74852 return this.exp(e, z)
74853 }
74854
74855 // protected
74856 proto.copyTo = bnpCopyTo
74857 proto.fromInt = bnpFromInt
74858 proto.fromString = bnpFromString
74859 proto.clamp = bnpClamp
74860 proto.dlShiftTo = bnpDLShiftTo
74861 proto.drShiftTo = bnpDRShiftTo
74862 proto.lShiftTo = bnpLShiftTo
74863 proto.rShiftTo = bnpRShiftTo
74864 proto.subTo = bnpSubTo
74865 proto.multiplyTo = bnpMultiplyTo
74866 proto.squareTo = bnpSquareTo
74867 proto.divRemTo = bnpDivRemTo
74868 proto.invDigit = bnpInvDigit
74869 proto.isEven = bnpIsEven
74870 proto.exp = bnpExp
74871
74872 // public
74873 proto.toString = bnToString
74874 proto.negate = bnNegate
74875 proto.abs = bnAbs
74876 proto.compareTo = bnCompareTo
74877 proto.bitLength = bnBitLength
74878 proto.byteLength = bnByteLength
74879 proto.mod = bnMod
74880 proto.modPowInt = bnModPowInt
74881
74882 // (public)
74883 function bnClone() {
74884 var r = new BigInteger()
74885 this.copyTo(r)
74886 return r
74887 }
74888
74889 // (public) return value as integer
74890 function bnIntValue() {
74891 if (this.s < 0) {
74892 if (this.t == 1) return this[0] - this.DV
74893 else if (this.t == 0) return -1
74894 } else if (this.t == 1) return this[0]
74895 else if (this.t == 0) return 0
74896 // assumes 16 < DB < 32
74897 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
74898 }
74899
74900 // (public) return value as byte
74901 function bnByteValue() {
74902 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
74903 }
74904
74905 // (public) return value as short (assumes DB>=16)
74906 function bnShortValue() {
74907 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
74908 }
74909
74910 // (protected) return x s.t. r^x < DV
74911 function bnpChunkSize(r) {
74912 return Math.floor(Math.LN2 * this.DB / Math.log(r))
74913 }
74914
74915 // (public) 0 if this == 0, 1 if this > 0
74916 function bnSigNum() {
74917 if (this.s < 0) return -1
74918 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
74919 else return 1
74920 }
74921
74922 // (protected) convert to radix string
74923 function bnpToRadix(b) {
74924 if (b == null) b = 10
74925 if (this.signum() == 0 || b < 2 || b > 36) return "0"
74926 var cs = this.chunkSize(b)
74927 var a = Math.pow(b, cs)
74928 var d = nbv(a),
74929 y = new BigInteger(),
74930 z = new BigInteger(),
74931 r = ""
74932 this.divRemTo(d, y, z)
74933 while (y.signum() > 0) {
74934 r = (a + z.intValue())
74935 .toString(b)
74936 .substr(1) + r
74937 y.divRemTo(d, y, z)
74938 }
74939 return z.intValue()
74940 .toString(b) + r
74941 }
74942
74943 // (protected) convert from radix string
74944 function bnpFromRadix(s, b) {
74945 var self = this
74946 self.fromInt(0)
74947 if (b == null) b = 10
74948 var cs = self.chunkSize(b)
74949 var d = Math.pow(b, cs),
74950 mi = false,
74951 j = 0,
74952 w = 0
74953 for (var i = 0; i < s.length; ++i) {
74954 var x = intAt(s, i)
74955 if (x < 0) {
74956 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
74957 continue
74958 }
74959 w = b * w + x
74960 if (++j >= cs) {
74961 self.dMultiply(d)
74962 self.dAddOffset(w, 0)
74963 j = 0
74964 w = 0
74965 }
74966 }
74967 if (j > 0) {
74968 self.dMultiply(Math.pow(b, j))
74969 self.dAddOffset(w, 0)
74970 }
74971 if (mi) BigInteger.ZERO.subTo(self, self)
74972 }
74973
74974 // (protected) alternate constructor
74975 function bnpFromNumber(a, b, c) {
74976 var self = this
74977 if ("number" == typeof b) {
74978 // new BigInteger(int,int,RNG)
74979 if (a < 2) self.fromInt(1)
74980 else {
74981 self.fromNumber(a, c)
74982 if (!self.testBit(a - 1)) // force MSB set
74983 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
74984 if (self.isEven()) self.dAddOffset(1, 0); // force odd
74985 while (!self.isProbablePrime(b)) {
74986 self.dAddOffset(2, 0)
74987 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
74988 }
74989 }
74990 } else {
74991 // new BigInteger(int,RNG)
74992 var x = new Array(),
74993 t = a & 7
74994 x.length = (a >> 3) + 1
74995 b.nextBytes(x)
74996 if (t > 0) x[0] &= ((1 << t) - 1)
74997 else x[0] = 0
74998 self.fromString(x, 256)
74999 }
75000 }
75001
75002 // (public) convert to bigendian byte array
75003 function bnToByteArray() {
75004 var self = this
75005 var i = self.t,
75006 r = new Array()
75007 r[0] = self.s
75008 var p = self.DB - (i * self.DB) % 8,
75009 d, k = 0
75010 if (i-- > 0) {
75011 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
75012 r[k++] = d | (self.s << (self.DB - p))
75013 while (i >= 0) {
75014 if (p < 8) {
75015 d = (self[i] & ((1 << p) - 1)) << (8 - p)
75016 d |= self[--i] >> (p += self.DB - 8)
75017 } else {
75018 d = (self[i] >> (p -= 8)) & 0xff
75019 if (p <= 0) {
75020 p += self.DB
75021 --i
75022 }
75023 }
75024 if ((d & 0x80) != 0) d |= -256
75025 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
75026 if (k > 0 || d != self.s) r[k++] = d
75027 }
75028 }
75029 return r
75030 }
75031
75032 function bnEquals(a) {
75033 return (this.compareTo(a) == 0)
75034 }
75035
75036 function bnMin(a) {
75037 return (this.compareTo(a) < 0) ? this : a
75038 }
75039
75040 function bnMax(a) {
75041 return (this.compareTo(a) > 0) ? this : a
75042 }
75043
75044 // (protected) r = this op a (bitwise)
75045 function bnpBitwiseTo(a, op, r) {
75046 var self = this
75047 var i, f, m = Math.min(a.t, self.t)
75048 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
75049 if (a.t < self.t) {
75050 f = a.s & self.DM
75051 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
75052 r.t = self.t
75053 } else {
75054 f = self.s & self.DM
75055 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
75056 r.t = a.t
75057 }
75058 r.s = op(self.s, a.s)
75059 r.clamp()
75060 }
75061
75062 // (public) this & a
75063 function op_and(x, y) {
75064 return x & y
75065 }
75066
75067 function bnAnd(a) {
75068 var r = new BigInteger()
75069 this.bitwiseTo(a, op_and, r)
75070 return r
75071 }
75072
75073 // (public) this | a
75074 function op_or(x, y) {
75075 return x | y
75076 }
75077
75078 function bnOr(a) {
75079 var r = new BigInteger()
75080 this.bitwiseTo(a, op_or, r)
75081 return r
75082 }
75083
75084 // (public) this ^ a
75085 function op_xor(x, y) {
75086 return x ^ y
75087 }
75088
75089 function bnXor(a) {
75090 var r = new BigInteger()
75091 this.bitwiseTo(a, op_xor, r)
75092 return r
75093 }
75094
75095 // (public) this & ~a
75096 function op_andnot(x, y) {
75097 return x & ~y
75098 }
75099
75100 function bnAndNot(a) {
75101 var r = new BigInteger()
75102 this.bitwiseTo(a, op_andnot, r)
75103 return r
75104 }
75105
75106 // (public) ~this
75107 function bnNot() {
75108 var r = new BigInteger()
75109 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
75110 r.t = this.t
75111 r.s = ~this.s
75112 return r
75113 }
75114
75115 // (public) this << n
75116 function bnShiftLeft(n) {
75117 var r = new BigInteger()
75118 if (n < 0) this.rShiftTo(-n, r)
75119 else this.lShiftTo(n, r)
75120 return r
75121 }
75122
75123 // (public) this >> n
75124 function bnShiftRight(n) {
75125 var r = new BigInteger()
75126 if (n < 0) this.lShiftTo(-n, r)
75127 else this.rShiftTo(n, r)
75128 return r
75129 }
75130
75131 // return index of lowest 1-bit in x, x < 2^31
75132 function lbit(x) {
75133 if (x == 0) return -1
75134 var r = 0
75135 if ((x & 0xffff) == 0) {
75136 x >>= 16
75137 r += 16
75138 }
75139 if ((x & 0xff) == 0) {
75140 x >>= 8
75141 r += 8
75142 }
75143 if ((x & 0xf) == 0) {
75144 x >>= 4
75145 r += 4
75146 }
75147 if ((x & 3) == 0) {
75148 x >>= 2
75149 r += 2
75150 }
75151 if ((x & 1) == 0)++r
75152 return r
75153 }
75154
75155 // (public) returns index of lowest 1-bit (or -1 if none)
75156 function bnGetLowestSetBit() {
75157 for (var i = 0; i < this.t; ++i)
75158 if (this[i] != 0) return i * this.DB + lbit(this[i])
75159 if (this.s < 0) return this.t * this.DB
75160 return -1
75161 }
75162
75163 // return number of 1 bits in x
75164 function cbit(x) {
75165 var r = 0
75166 while (x != 0) {
75167 x &= x - 1
75168 ++r
75169 }
75170 return r
75171 }
75172
75173 // (public) return number of set bits
75174 function bnBitCount() {
75175 var r = 0,
75176 x = this.s & this.DM
75177 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
75178 return r
75179 }
75180
75181 // (public) true iff nth bit is set
75182 function bnTestBit(n) {
75183 var j = Math.floor(n / this.DB)
75184 if (j >= this.t) return (this.s != 0)
75185 return ((this[j] & (1 << (n % this.DB))) != 0)
75186 }
75187
75188 // (protected) this op (1<<n)
75189 function bnpChangeBit(n, op) {
75190 var r = BigInteger.ONE.shiftLeft(n)
75191 this.bitwiseTo(r, op, r)
75192 return r
75193 }
75194
75195 // (public) this | (1<<n)
75196 function bnSetBit(n) {
75197 return this.changeBit(n, op_or)
75198 }
75199
75200 // (public) this & ~(1<<n)
75201 function bnClearBit(n) {
75202 return this.changeBit(n, op_andnot)
75203 }
75204
75205 // (public) this ^ (1<<n)
75206 function bnFlipBit(n) {
75207 return this.changeBit(n, op_xor)
75208 }
75209
75210 // (protected) r = this + a
75211 function bnpAddTo(a, r) {
75212 var self = this
75213
75214 var i = 0,
75215 c = 0,
75216 m = Math.min(a.t, self.t)
75217 while (i < m) {
75218 c += self[i] + a[i]
75219 r[i++] = c & self.DM
75220 c >>= self.DB
75221 }
75222 if (a.t < self.t) {
75223 c += a.s
75224 while (i < self.t) {
75225 c += self[i]
75226 r[i++] = c & self.DM
75227 c >>= self.DB
75228 }
75229 c += self.s
75230 } else {
75231 c += self.s
75232 while (i < a.t) {
75233 c += a[i]
75234 r[i++] = c & self.DM
75235 c >>= self.DB
75236 }
75237 c += a.s
75238 }
75239 r.s = (c < 0) ? -1 : 0
75240 if (c > 0) r[i++] = c
75241 else if (c < -1) r[i++] = self.DV + c
75242 r.t = i
75243 r.clamp()
75244 }
75245
75246 // (public) this + a
75247 function bnAdd(a) {
75248 var r = new BigInteger()
75249 this.addTo(a, r)
75250 return r
75251 }
75252
75253 // (public) this - a
75254 function bnSubtract(a) {
75255 var r = new BigInteger()
75256 this.subTo(a, r)
75257 return r
75258 }
75259
75260 // (public) this * a
75261 function bnMultiply(a) {
75262 var r = new BigInteger()
75263 this.multiplyTo(a, r)
75264 return r
75265 }
75266
75267 // (public) this^2
75268 function bnSquare() {
75269 var r = new BigInteger()
75270 this.squareTo(r)
75271 return r
75272 }
75273
75274 // (public) this / a
75275 function bnDivide(a) {
75276 var r = new BigInteger()
75277 this.divRemTo(a, r, null)
75278 return r
75279 }
75280
75281 // (public) this % a
75282 function bnRemainder(a) {
75283 var r = new BigInteger()
75284 this.divRemTo(a, null, r)
75285 return r
75286 }
75287
75288 // (public) [this/a,this%a]
75289 function bnDivideAndRemainder(a) {
75290 var q = new BigInteger(),
75291 r = new BigInteger()
75292 this.divRemTo(a, q, r)
75293 return new Array(q, r)
75294 }
75295
75296 // (protected) this *= n, this >= 0, 1 < n < DV
75297 function bnpDMultiply(n) {
75298 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
75299 ++this.t
75300 this.clamp()
75301 }
75302
75303 // (protected) this += n << w words, this >= 0
75304 function bnpDAddOffset(n, w) {
75305 if (n == 0) return
75306 while (this.t <= w) this[this.t++] = 0
75307 this[w] += n
75308 while (this[w] >= this.DV) {
75309 this[w] -= this.DV
75310 if (++w >= this.t) this[this.t++] = 0
75311 ++this[w]
75312 }
75313 }
75314
75315 // A "null" reducer
75316 function NullExp() {}
75317
75318 function nNop(x) {
75319 return x
75320 }
75321
75322 function nMulTo(x, y, r) {
75323 x.multiplyTo(y, r)
75324 }
75325
75326 function nSqrTo(x, r) {
75327 x.squareTo(r)
75328 }
75329
75330 NullExp.prototype.convert = nNop
75331 NullExp.prototype.revert = nNop
75332 NullExp.prototype.mulTo = nMulTo
75333 NullExp.prototype.sqrTo = nSqrTo
75334
75335 // (public) this^e
75336 function bnPow(e) {
75337 return this.exp(e, new NullExp())
75338 }
75339
75340 // (protected) r = lower n words of "this * a", a.t <= n
75341 // "this" should be the larger one if appropriate.
75342 function bnpMultiplyLowerTo(a, n, r) {
75343 var i = Math.min(this.t + a.t, n)
75344 r.s = 0; // assumes a,this >= 0
75345 r.t = i
75346 while (i > 0) r[--i] = 0
75347 var j
75348 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
75349 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
75350 r.clamp()
75351 }
75352
75353 // (protected) r = "this * a" without lower n words, n > 0
75354 // "this" should be the larger one if appropriate.
75355 function bnpMultiplyUpperTo(a, n, r) {
75356 --n
75357 var i = r.t = this.t + a.t - n
75358 r.s = 0; // assumes a,this >= 0
75359 while (--i >= 0) r[i] = 0
75360 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
75361 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
75362 r.clamp()
75363 r.drShiftTo(1, r)
75364 }
75365
75366 // Barrett modular reduction
75367 function Barrett(m) {
75368 // setup Barrett
75369 this.r2 = new BigInteger()
75370 this.q3 = new BigInteger()
75371 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
75372 this.mu = this.r2.divide(m)
75373 this.m = m
75374 }
75375
75376 function barrettConvert(x) {
75377 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
75378 else if (x.compareTo(this.m) < 0) return x
75379 else {
75380 var r = new BigInteger()
75381 x.copyTo(r)
75382 this.reduce(r)
75383 return r
75384 }
75385 }
75386
75387 function barrettRevert(x) {
75388 return x
75389 }
75390
75391 // x = x mod m (HAC 14.42)
75392 function barrettReduce(x) {
75393 var self = this
75394 x.drShiftTo(self.m.t - 1, self.r2)
75395 if (x.t > self.m.t + 1) {
75396 x.t = self.m.t + 1
75397 x.clamp()
75398 }
75399 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
75400 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
75401 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
75402 x.subTo(self.r2, x)
75403 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
75404 }
75405
75406 // r = x^2 mod m; x != r
75407 function barrettSqrTo(x, r) {
75408 x.squareTo(r)
75409 this.reduce(r)
75410 }
75411
75412 // r = x*y mod m; x,y != r
75413 function barrettMulTo(x, y, r) {
75414 x.multiplyTo(y, r)
75415 this.reduce(r)
75416 }
75417
75418 Barrett.prototype.convert = barrettConvert
75419 Barrett.prototype.revert = barrettRevert
75420 Barrett.prototype.reduce = barrettReduce
75421 Barrett.prototype.mulTo = barrettMulTo
75422 Barrett.prototype.sqrTo = barrettSqrTo
75423
75424 // (public) this^e % m (HAC 14.85)
75425 function bnModPow(e, m) {
75426 var i = e.bitLength(),
75427 k, r = nbv(1),
75428 z
75429 if (i <= 0) return r
75430 else if (i < 18) k = 1
75431 else if (i < 48) k = 3
75432 else if (i < 144) k = 4
75433 else if (i < 768) k = 5
75434 else k = 6
75435 if (i < 8)
75436 z = new Classic(m)
75437 else if (m.isEven())
75438 z = new Barrett(m)
75439 else
75440 z = new Montgomery(m)
75441
75442 // precomputation
75443 var g = new Array(),
75444 n = 3,
75445 k1 = k - 1,
75446 km = (1 << k) - 1
75447 g[1] = z.convert(this)
75448 if (k > 1) {
75449 var g2 = new BigInteger()
75450 z.sqrTo(g[1], g2)
75451 while (n <= km) {
75452 g[n] = new BigInteger()
75453 z.mulTo(g2, g[n - 2], g[n])
75454 n += 2
75455 }
75456 }
75457
75458 var j = e.t - 1,
75459 w, is1 = true,
75460 r2 = new BigInteger(),
75461 t
75462 i = nbits(e[j]) - 1
75463 while (j >= 0) {
75464 if (i >= k1) w = (e[j] >> (i - k1)) & km
75465 else {
75466 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
75467 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
75468 }
75469
75470 n = k
75471 while ((w & 1) == 0) {
75472 w >>= 1
75473 --n
75474 }
75475 if ((i -= n) < 0) {
75476 i += this.DB
75477 --j
75478 }
75479 if (is1) { // ret == 1, don't bother squaring or multiplying it
75480 g[w].copyTo(r)
75481 is1 = false
75482 } else {
75483 while (n > 1) {
75484 z.sqrTo(r, r2)
75485 z.sqrTo(r2, r)
75486 n -= 2
75487 }
75488 if (n > 0) z.sqrTo(r, r2)
75489 else {
75490 t = r
75491 r = r2
75492 r2 = t
75493 }
75494 z.mulTo(r2, g[w], r)
75495 }
75496
75497 while (j >= 0 && (e[j] & (1 << i)) == 0) {
75498 z.sqrTo(r, r2)
75499 t = r
75500 r = r2
75501 r2 = t
75502 if (--i < 0) {
75503 i = this.DB - 1
75504 --j
75505 }
75506 }
75507 }
75508 return z.revert(r)
75509 }
75510
75511 // (public) gcd(this,a) (HAC 14.54)
75512 function bnGCD(a) {
75513 var x = (this.s < 0) ? this.negate() : this.clone()
75514 var y = (a.s < 0) ? a.negate() : a.clone()
75515 if (x.compareTo(y) < 0) {
75516 var t = x
75517 x = y
75518 y = t
75519 }
75520 var i = x.getLowestSetBit(),
75521 g = y.getLowestSetBit()
75522 if (g < 0) return x
75523 if (i < g) g = i
75524 if (g > 0) {
75525 x.rShiftTo(g, x)
75526 y.rShiftTo(g, y)
75527 }
75528 while (x.signum() > 0) {
75529 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
75530 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
75531 if (x.compareTo(y) >= 0) {
75532 x.subTo(y, x)
75533 x.rShiftTo(1, x)
75534 } else {
75535 y.subTo(x, y)
75536 y.rShiftTo(1, y)
75537 }
75538 }
75539 if (g > 0) y.lShiftTo(g, y)
75540 return y
75541 }
75542
75543 // (protected) this % n, n < 2^26
75544 function bnpModInt(n) {
75545 if (n <= 0) return 0
75546 var d = this.DV % n,
75547 r = (this.s < 0) ? n - 1 : 0
75548 if (this.t > 0)
75549 if (d == 0) r = this[0] % n
75550 else
75551 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
75552 return r
75553 }
75554
75555 // (public) 1/this % m (HAC 14.61)
75556 function bnModInverse(m) {
75557 var ac = m.isEven()
75558 if (this.signum() === 0) throw new Error('division by zero')
75559 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
75560 var u = m.clone(),
75561 v = this.clone()
75562 var a = nbv(1),
75563 b = nbv(0),
75564 c = nbv(0),
75565 d = nbv(1)
75566 while (u.signum() != 0) {
75567 while (u.isEven()) {
75568 u.rShiftTo(1, u)
75569 if (ac) {
75570 if (!a.isEven() || !b.isEven()) {
75571 a.addTo(this, a)
75572 b.subTo(m, b)
75573 }
75574 a.rShiftTo(1, a)
75575 } else if (!b.isEven()) b.subTo(m, b)
75576 b.rShiftTo(1, b)
75577 }
75578 while (v.isEven()) {
75579 v.rShiftTo(1, v)
75580 if (ac) {
75581 if (!c.isEven() || !d.isEven()) {
75582 c.addTo(this, c)
75583 d.subTo(m, d)
75584 }
75585 c.rShiftTo(1, c)
75586 } else if (!d.isEven()) d.subTo(m, d)
75587 d.rShiftTo(1, d)
75588 }
75589 if (u.compareTo(v) >= 0) {
75590 u.subTo(v, u)
75591 if (ac) a.subTo(c, a)
75592 b.subTo(d, b)
75593 } else {
75594 v.subTo(u, v)
75595 if (ac) c.subTo(a, c)
75596 d.subTo(b, d)
75597 }
75598 }
75599 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
75600 while (d.compareTo(m) >= 0) d.subTo(m, d)
75601 while (d.signum() < 0) d.addTo(m, d)
75602 return d
75603 }
75604
75605 var lowprimes = [
75606 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
75607 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
75608 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
75609 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
75610 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
75611 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
75612 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
75613 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
75614 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
75615 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
75616 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
75617 ]
75618
75619 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
75620
75621 // (public) test primality with certainty >= 1-.5^t
75622 function bnIsProbablePrime(t) {
75623 var i, x = this.abs()
75624 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
75625 for (i = 0; i < lowprimes.length; ++i)
75626 if (x[0] == lowprimes[i]) return true
75627 return false
75628 }
75629 if (x.isEven()) return false
75630 i = 1
75631 while (i < lowprimes.length) {
75632 var m = lowprimes[i],
75633 j = i + 1
75634 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
75635 m = x.modInt(m)
75636 while (i < j) if (m % lowprimes[i++] == 0) return false
75637 }
75638 return x.millerRabin(t)
75639 }
75640
75641 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
75642 function bnpMillerRabin(t) {
75643 var n1 = this.subtract(BigInteger.ONE)
75644 var k = n1.getLowestSetBit()
75645 if (k <= 0) return false
75646 var r = n1.shiftRight(k)
75647 t = (t + 1) >> 1
75648 if (t > lowprimes.length) t = lowprimes.length
75649 var a = new BigInteger(null)
75650 var j, bases = []
75651 for (var i = 0; i < t; ++i) {
75652 for (;;) {
75653 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
75654 if (bases.indexOf(j) == -1) break
75655 }
75656 bases.push(j)
75657 a.fromInt(j)
75658 var y = a.modPow(r, this)
75659 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
75660 var j = 1
75661 while (j++ < k && y.compareTo(n1) != 0) {
75662 y = y.modPowInt(2, this)
75663 if (y.compareTo(BigInteger.ONE) == 0) return false
75664 }
75665 if (y.compareTo(n1) != 0) return false
75666 }
75667 }
75668 return true
75669 }
75670
75671 // protected
75672 proto.chunkSize = bnpChunkSize
75673 proto.toRadix = bnpToRadix
75674 proto.fromRadix = bnpFromRadix
75675 proto.fromNumber = bnpFromNumber
75676 proto.bitwiseTo = bnpBitwiseTo
75677 proto.changeBit = bnpChangeBit
75678 proto.addTo = bnpAddTo
75679 proto.dMultiply = bnpDMultiply
75680 proto.dAddOffset = bnpDAddOffset
75681 proto.multiplyLowerTo = bnpMultiplyLowerTo
75682 proto.multiplyUpperTo = bnpMultiplyUpperTo
75683 proto.modInt = bnpModInt
75684 proto.millerRabin = bnpMillerRabin
75685
75686 // public
75687 proto.clone = bnClone
75688 proto.intValue = bnIntValue
75689 proto.byteValue = bnByteValue
75690 proto.shortValue = bnShortValue
75691 proto.signum = bnSigNum
75692 proto.toByteArray = bnToByteArray
75693 proto.equals = bnEquals
75694 proto.min = bnMin
75695 proto.max = bnMax
75696 proto.and = bnAnd
75697 proto.or = bnOr
75698 proto.xor = bnXor
75699 proto.andNot = bnAndNot
75700 proto.not = bnNot
75701 proto.shiftLeft = bnShiftLeft
75702 proto.shiftRight = bnShiftRight
75703 proto.getLowestSetBit = bnGetLowestSetBit
75704 proto.bitCount = bnBitCount
75705 proto.testBit = bnTestBit
75706 proto.setBit = bnSetBit
75707 proto.clearBit = bnClearBit
75708 proto.flipBit = bnFlipBit
75709 proto.add = bnAdd
75710 proto.subtract = bnSubtract
75711 proto.multiply = bnMultiply
75712 proto.divide = bnDivide
75713 proto.remainder = bnRemainder
75714 proto.divideAndRemainder = bnDivideAndRemainder
75715 proto.modPow = bnModPow
75716 proto.modInverse = bnModInverse
75717 proto.pow = bnPow
75718 proto.gcd = bnGCD
75719 proto.isProbablePrime = bnIsProbablePrime
75720
75721 // JSBN-specific extension
75722 proto.square = bnSquare
75723
75724 // constants
75725 BigInteger.ZERO = nbv(0)
75726 BigInteger.ONE = nbv(1)
75727 BigInteger.valueOf = nbv
75728
75729 module.exports = BigInteger
75730
75731 },{"../package.json":155}],153:[function(require,module,exports){
75732 (function (Buffer){
75733 // FIXME: Kind of a weird way to throw exceptions, consider removing
75734 var assert = require('assert')
75735 var BigInteger = require('./bigi')
75736
75737 /**
75738 * Turns a byte array into a big integer.
75739 *
75740 * This function will interpret a byte array as a big integer in big
75741 * endian notation.
75742 */
75743 BigInteger.fromByteArrayUnsigned = function(byteArray) {
75744 // BigInteger expects a DER integer conformant byte array
75745 if (byteArray[0] & 0x80) {
75746 return new BigInteger([0].concat(byteArray))
75747 }
75748
75749 return new BigInteger(byteArray)
75750 }
75751
75752 /**
75753 * Returns a byte array representation of the big integer.
75754 *
75755 * This returns the absolute of the contained value in big endian
75756 * form. A value of zero results in an empty array.
75757 */
75758 BigInteger.prototype.toByteArrayUnsigned = function() {
75759 var byteArray = this.toByteArray()
75760 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
75761 }
75762
75763 BigInteger.fromDERInteger = function(byteArray) {
75764 return new BigInteger(byteArray)
75765 }
75766
75767 /*
75768 * Converts BigInteger to a DER integer representation.
75769 *
75770 * The format for this value uses the most significant bit as a sign
75771 * bit. If the most significant bit is already set and the integer is
75772 * positive, a 0x00 is prepended.
75773 *
75774 * Examples:
75775 *
75776 * 0 => 0x00
75777 * 1 => 0x01
75778 * -1 => 0xff
75779 * 127 => 0x7f
75780 * -127 => 0x81
75781 * 128 => 0x0080
75782 * -128 => 0x80
75783 * 255 => 0x00ff
75784 * -255 => 0xff01
75785 * 16300 => 0x3fac
75786 * -16300 => 0xc054
75787 * 62300 => 0x00f35c
75788 * -62300 => 0xff0ca4
75789 */
75790 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
75791
75792 BigInteger.fromBuffer = function(buffer) {
75793 // BigInteger expects a DER integer conformant byte array
75794 if (buffer[0] & 0x80) {
75795 var byteArray = Array.prototype.slice.call(buffer)
75796
75797 return new BigInteger([0].concat(byteArray))
75798 }
75799
75800 return new BigInteger(buffer)
75801 }
75802
75803 BigInteger.fromHex = function(hex) {
75804 if (hex === '') return BigInteger.ZERO
75805
75806 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
75807 assert.equal(hex.length % 2, 0, 'Incomplete hex')
75808 return new BigInteger(hex, 16)
75809 }
75810
75811 BigInteger.prototype.toBuffer = function(size) {
75812 var byteArray = this.toByteArrayUnsigned()
75813 var zeros = []
75814
75815 var padding = size - byteArray.length
75816 while (zeros.length < padding) zeros.push(0)
75817
75818 return new Buffer(zeros.concat(byteArray))
75819 }
75820
75821 BigInteger.prototype.toHex = function(size) {
75822 return this.toBuffer(size).toString('hex')
75823 }
75824
75825 }).call(this,require("buffer").Buffer)
75826 },{"./bigi":152,"assert":15,"buffer":47}],154:[function(require,module,exports){
75827 var BigInteger = require('./bigi')
75828
75829 //addons
75830 require('./convert')
75831
75832 module.exports = BigInteger
75833 },{"./bigi":152,"./convert":153}],155:[function(require,module,exports){
75834 module.exports={
75835 "_args": [
75836 [
75837 "bigi@^1.2.0",
75838 "/home/ian/git/bitcoin/bitcoinjs-bip38"
75839 ]
75840 ],
75841 "_from": "bigi@>=1.2.0 <2.0.0",
75842 "_id": "bigi@1.4.2",
75843 "_inCache": true,
75844 "_installable": true,
75845 "_location": "/bigi",
75846 "_nodeVersion": "6.1.0",
75847 "_npmOperationalInternal": {
75848 "host": "packages-12-west.internal.npmjs.com",
75849 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
75850 },
75851 "_npmUser": {
75852 "email": "jprichardson@gmail.com",
75853 "name": "jprichardson"
75854 },
75855 "_npmVersion": "3.8.6",
75856 "_phantomChildren": {},
75857 "_requested": {
75858 "name": "bigi",
75859 "raw": "bigi@^1.2.0",
75860 "rawSpec": "^1.2.0",
75861 "scope": null,
75862 "spec": ">=1.2.0 <2.0.0",
75863 "type": "range"
75864 },
75865 "_requiredBy": [
75866 "/",
75867 "/ecurve"
75868 ],
75869 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
75870 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
75871 "_shrinkwrap": null,
75872 "_spec": "bigi@^1.2.0",
75873 "_where": "/home/ian/git/bitcoin/bitcoinjs-bip38",
75874 "bugs": {
75875 "url": "https://github.com/cryptocoinjs/bigi/issues"
75876 },
75877 "dependencies": {},
75878 "description": "Big integers.",
75879 "devDependencies": {
75880 "coveralls": "^2.11.2",
75881 "istanbul": "^0.3.5",
75882 "jshint": "^2.5.1",
75883 "mocha": "^2.1.0",
75884 "mochify": "^2.1.0"
75885 },
75886 "directories": {},
75887 "dist": {
75888 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
75889 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
75890 },
75891 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
75892 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
75893 "keywords": [
75894 "cryptography",
75895 "math",
75896 "bitcoin",
75897 "arbitrary",
75898 "precision",
75899 "arithmetic",
75900 "big",
75901 "integer",
75902 "int",
75903 "number",
75904 "biginteger",
75905 "bigint",
75906 "bignumber",
75907 "decimal",
75908 "float"
75909 ],
75910 "main": "./lib/index.js",
75911 "maintainers": [
75912 {
75913 "email": "boydb@midnightdesign.ws",
75914 "name": "midnightlightning"
75915 },
75916 {
75917 "email": "sidazhang89@gmail.com",
75918 "name": "sidazhang"
75919 },
75920 {
75921 "email": "npm@shesek.info",
75922 "name": "nadav"
75923 },
75924 {
75925 "email": "jprichardson@gmail.com",
75926 "name": "jprichardson"
75927 }
75928 ],
75929 "name": "bigi",
75930 "optionalDependencies": {},
75931 "readme": "ERROR: No README data found!",
75932 "repository": {
75933 "type": "git",
75934 "url": "git+https://github.com/cryptocoinjs/bigi.git"
75935 },
75936 "scripts": {
75937 "browser-test": "mochify --wd -R spec",
75938 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
75939 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
75940 "jshint": "jshint --config jshint.json lib/*.js ; true",
75941 "test": "_mocha -- test/*.js",
75942 "unit": "mocha"
75943 },
75944 "testling": {
75945 "browsers": [
75946 "ie/9..latest",
75947 "firefox/latest",
75948 "chrome/latest",
75949 "safari/6.0..latest",
75950 "iphone/6.0..latest",
75951 "android-browser/4.2..latest"
75952 ],
75953 "files": "test/*.js",
75954 "harness": "mocha"
75955 },
75956 "version": "1.4.2"
75957 }
75958
75959 },{}],156:[function(require,module,exports){
75960 // based on the aes implimentation in triple sec
75961 // https://github.com/keybase/triplesec
75962 // which is in turn based on the one from crypto-js
75963 // https://code.google.com/p/crypto-js/
75964
75965 var Buffer = require('safe-buffer').Buffer
75966
75967 function asUInt32Array (buf) {
75968 if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)
75969
75970 var len = (buf.length / 4) | 0
75971 var out = new Array(len)
75972
75973 for (var i = 0; i < len; i++) {
75974 out[i] = buf.readUInt32BE(i * 4)
75975 }
75976
75977 return out
75978 }
75979
75980 function scrubVec (v) {
75981 for (var i = 0; i < v.length; v++) {
75982 v[i] = 0
75983 }
75984 }
75985
75986 function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {
75987 var SUB_MIX0 = SUB_MIX[0]
75988 var SUB_MIX1 = SUB_MIX[1]
75989 var SUB_MIX2 = SUB_MIX[2]
75990 var SUB_MIX3 = SUB_MIX[3]
75991
75992 var s0 = M[0] ^ keySchedule[0]
75993 var s1 = M[1] ^ keySchedule[1]
75994 var s2 = M[2] ^ keySchedule[2]
75995 var s3 = M[3] ^ keySchedule[3]
75996 var t0, t1, t2, t3
75997 var ksRow = 4
75998
75999 for (var round = 1; round < nRounds; round++) {
76000 t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]
76001 t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]
76002 t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]
76003 t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]
76004 s0 = t0
76005 s1 = t1
76006 s2 = t2
76007 s3 = t3
76008 }
76009
76010 t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]
76011 t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]
76012 t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]
76013 t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]
76014 t0 = t0 >>> 0
76015 t1 = t1 >>> 0
76016 t2 = t2 >>> 0
76017 t3 = t3 >>> 0
76018
76019 return [t0, t1, t2, t3]
76020 }
76021
76022 // AES constants
76023 var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]
76024 var G = (function () {
76025 // Compute double table
76026 var d = new Array(256)
76027 for (var j = 0; j < 256; j++) {
76028 if (j < 128) {
76029 d[j] = j << 1
76030 } else {
76031 d[j] = (j << 1) ^ 0x11b
76032 }
76033 }
76034
76035 var SBOX = []
76036 var INV_SBOX = []
76037 var SUB_MIX = [[], [], [], []]
76038 var INV_SUB_MIX = [[], [], [], []]
76039
76040 // Walk GF(2^8)
76041 var x = 0
76042 var xi = 0
76043 for (var i = 0; i < 256; ++i) {
76044 // Compute sbox
76045 var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)
76046 sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63
76047 SBOX[x] = sx
76048 INV_SBOX[sx] = x
76049
76050 // Compute multiplication
76051 var x2 = d[x]
76052 var x4 = d[x2]
76053 var x8 = d[x4]
76054
76055 // Compute sub bytes, mix columns tables
76056 var t = (d[sx] * 0x101) ^ (sx * 0x1010100)
76057 SUB_MIX[0][x] = (t << 24) | (t >>> 8)
76058 SUB_MIX[1][x] = (t << 16) | (t >>> 16)
76059 SUB_MIX[2][x] = (t << 8) | (t >>> 24)
76060 SUB_MIX[3][x] = t
76061
76062 // Compute inv sub bytes, inv mix columns tables
76063 t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
76064 INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)
76065 INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)
76066 INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)
76067 INV_SUB_MIX[3][sx] = t
76068
76069 if (x === 0) {
76070 x = xi = 1
76071 } else {
76072 x = x2 ^ d[d[d[x8 ^ x2]]]
76073 xi ^= d[d[xi]]
76074 }
76075 }
76076
76077 return {
76078 SBOX: SBOX,
76079 INV_SBOX: INV_SBOX,
76080 SUB_MIX: SUB_MIX,
76081 INV_SUB_MIX: INV_SUB_MIX
76082 }
76083 })()
76084
76085 function AES (key) {
76086 this._key = asUInt32Array(key)
76087 this._reset()
76088 }
76089
76090 AES.blockSize = 4 * 4
76091 AES.keySize = 256 / 8
76092 AES.prototype.blockSize = AES.blockSize
76093 AES.prototype.keySize = AES.keySize
76094 AES.prototype._reset = function () {
76095 var keyWords = this._key
76096 var keySize = keyWords.length
76097 var nRounds = keySize + 6
76098 var ksRows = (nRounds + 1) * 4
76099
76100 var keySchedule = []
76101 for (var k = 0; k < keySize; k++) {
76102 keySchedule[k] = keyWords[k]
76103 }
76104
76105 for (k = keySize; k < ksRows; k++) {
76106 var t = keySchedule[k - 1]
76107
76108 if (k % keySize === 0) {
76109 t = (t << 8) | (t >>> 24)
76110 t =
76111 (G.SBOX[t >>> 24] << 24) |
76112 (G.SBOX[(t >>> 16) & 0xff] << 16) |
76113 (G.SBOX[(t >>> 8) & 0xff] << 8) |
76114 (G.SBOX[t & 0xff])
76115
76116 t ^= RCON[(k / keySize) | 0] << 24
76117 } else if (keySize > 6 && k % keySize === 4) {
76118 t =
76119 (G.SBOX[t >>> 24] << 24) |
76120 (G.SBOX[(t >>> 16) & 0xff] << 16) |
76121 (G.SBOX[(t >>> 8) & 0xff] << 8) |
76122 (G.SBOX[t & 0xff])
76123 }
76124
76125 keySchedule[k] = keySchedule[k - keySize] ^ t
76126 }
76127
76128 var invKeySchedule = []
76129 for (var ik = 0; ik < ksRows; ik++) {
76130 var ksR = ksRows - ik
76131 var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]
76132
76133 if (ik < 4 || ksR <= 4) {
76134 invKeySchedule[ik] = tt
76135 } else {
76136 invKeySchedule[ik] =
76137 G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^
76138 G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^
76139 G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^
76140 G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]
76141 }
76142 }
76143
76144 this._nRounds = nRounds
76145 this._keySchedule = keySchedule
76146 this._invKeySchedule = invKeySchedule
76147 }
76148
76149 AES.prototype.encryptBlockRaw = function (M) {
76150 M = asUInt32Array(M)
76151 return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)
76152 }
76153
76154 AES.prototype.encryptBlock = function (M) {
76155 var out = this.encryptBlockRaw(M)
76156 var buf = Buffer.allocUnsafe(16)
76157 buf.writeUInt32BE(out[0], 0)
76158 buf.writeUInt32BE(out[1], 4)
76159 buf.writeUInt32BE(out[2], 8)
76160 buf.writeUInt32BE(out[3], 12)
76161 return buf
76162 }
76163
76164 AES.prototype.decryptBlock = function (M) {
76165 M = asUInt32Array(M)
76166
76167 // swap
76168 var m1 = M[1]
76169 M[1] = M[3]
76170 M[3] = m1
76171
76172 var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)
76173 var buf = Buffer.allocUnsafe(16)
76174 buf.writeUInt32BE(out[0], 0)
76175 buf.writeUInt32BE(out[3], 4)
76176 buf.writeUInt32BE(out[2], 8)
76177 buf.writeUInt32BE(out[1], 12)
76178 return buf
76179 }
76180
76181 AES.prototype.scrub = function () {
76182 scrubVec(this._keySchedule)
76183 scrubVec(this._invKeySchedule)
76184 scrubVec(this._key)
76185 }
76186
76187 module.exports.AES = AES
76188
76189 },{"safe-buffer":193}],157:[function(require,module,exports){
76190 var aes = require('./aes')
76191 var Buffer = require('safe-buffer').Buffer
76192 var Transform = require('cipher-base')
76193 var inherits = require('inherits')
76194 var GHASH = require('./ghash')
76195 var xor = require('buffer-xor')
76196 var incr32 = require('./incr32')
76197
76198 function xorTest (a, b) {
76199 var out = 0
76200 if (a.length !== b.length) out++
76201
76202 var len = Math.min(a.length, b.length)
76203 for (var i = 0; i < len; ++i) {
76204 out += (a[i] ^ b[i])
76205 }
76206
76207 return out
76208 }
76209
76210 function calcIv (self, iv, ck) {
76211 if (iv.length === 12) {
76212 self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])
76213 return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])
76214 }
76215 var ghash = new GHASH(ck)
76216 var len = iv.length
76217 var toPad = len % 16
76218 ghash.update(iv)
76219 if (toPad) {
76220 toPad = 16 - toPad
76221 ghash.update(Buffer.alloc(toPad, 0))
76222 }
76223 ghash.update(Buffer.alloc(8, 0))
76224 var ivBits = len * 8
76225 var tail = Buffer.alloc(8)
76226 tail.writeUIntBE(ivBits, 0, 8)
76227 ghash.update(tail)
76228 self._finID = ghash.state
76229 var out = Buffer.from(self._finID)
76230 incr32(out)
76231 return out
76232 }
76233 function StreamCipher (mode, key, iv, decrypt) {
76234 Transform.call(this)
76235
76236 var h = Buffer.alloc(4, 0)
76237
76238 this._cipher = new aes.AES(key)
76239 var ck = this._cipher.encryptBlock(h)
76240 this._ghash = new GHASH(ck)
76241 iv = calcIv(this, iv, ck)
76242
76243 this._prev = Buffer.from(iv)
76244 this._cache = Buffer.allocUnsafe(0)
76245 this._secCache = Buffer.allocUnsafe(0)
76246 this._decrypt = decrypt
76247 this._alen = 0
76248 this._len = 0
76249 this._mode = mode
76250
76251 this._authTag = null
76252 this._called = false
76253 }
76254
76255 inherits(StreamCipher, Transform)
76256
76257 StreamCipher.prototype._update = function (chunk) {
76258 if (!this._called && this._alen) {
76259 var rump = 16 - (this._alen % 16)
76260 if (rump < 16) {
76261 rump = Buffer.alloc(rump, 0)
76262 this._ghash.update(rump)
76263 }
76264 }
76265
76266 this._called = true
76267 var out = this._mode.encrypt(this, chunk)
76268 if (this._decrypt) {
76269 this._ghash.update(chunk)
76270 } else {
76271 this._ghash.update(out)
76272 }
76273 this._len += chunk.length
76274 return out
76275 }
76276
76277 StreamCipher.prototype._final = function () {
76278 if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')
76279
76280 var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))
76281 if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')
76282
76283 this._authTag = tag
76284 this._cipher.scrub()
76285 }
76286
76287 StreamCipher.prototype.getAuthTag = function getAuthTag () {
76288 if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')
76289
76290 return this._authTag
76291 }
76292
76293 StreamCipher.prototype.setAuthTag = function setAuthTag (tag) {
76294 if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')
76295
76296 this._authTag = tag
76297 }
76298
76299 StreamCipher.prototype.setAAD = function setAAD (buf) {
76300 if (this._called) throw new Error('Attempting to set AAD in unsupported state')
76301
76302 this._ghash.update(buf)
76303 this._alen += buf.length
76304 }
76305
76306 module.exports = StreamCipher
76307
76308 },{"./aes":156,"./ghash":161,"./incr32":162,"buffer-xor":176,"cipher-base":178,"inherits":189,"safe-buffer":193}],158:[function(require,module,exports){
76309 var ciphers = require('./encrypter')
76310 var deciphers = require('./decrypter')
76311 var modes = require('./modes/list.json')
76312
76313 function getCiphers () {
76314 return Object.keys(modes)
76315 }
76316
76317 exports.createCipher = exports.Cipher = ciphers.createCipher
76318 exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv
76319 exports.createDecipher = exports.Decipher = deciphers.createDecipher
76320 exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv
76321 exports.listCiphers = exports.getCiphers = getCiphers
76322
76323 },{"./decrypter":159,"./encrypter":160,"./modes/list.json":170}],159:[function(require,module,exports){
76324 var AuthCipher = require('./authCipher')
76325 var Buffer = require('safe-buffer').Buffer
76326 var MODES = require('./modes')
76327 var StreamCipher = require('./streamCipher')
76328 var Transform = require('cipher-base')
76329 var aes = require('./aes')
76330 var ebtk = require('evp_bytestokey')
76331 var inherits = require('inherits')
76332
76333 function Decipher (mode, key, iv) {
76334 Transform.call(this)
76335
76336 this._cache = new Splitter()
76337 this._last = void 0
76338 this._cipher = new aes.AES(key)
76339 this._prev = Buffer.from(iv)
76340 this._mode = mode
76341 this._autopadding = true
76342 }
76343
76344 inherits(Decipher, Transform)
76345
76346 Decipher.prototype._update = function (data) {
76347 this._cache.add(data)
76348 var chunk
76349 var thing
76350 var out = []
76351 while ((chunk = this._cache.get(this._autopadding))) {
76352 thing = this._mode.decrypt(this, chunk)
76353 out.push(thing)
76354 }
76355 return Buffer.concat(out)
76356 }
76357
76358 Decipher.prototype._final = function () {
76359 var chunk = this._cache.flush()
76360 if (this._autopadding) {
76361 return unpad(this._mode.decrypt(this, chunk))
76362 } else if (chunk) {
76363 throw new Error('data not multiple of block length')
76364 }
76365 }
76366
76367 Decipher.prototype.setAutoPadding = function (setTo) {
76368 this._autopadding = !!setTo
76369 return this
76370 }
76371
76372 function Splitter () {
76373 this.cache = Buffer.allocUnsafe(0)
76374 }
76375
76376 Splitter.prototype.add = function (data) {
76377 this.cache = Buffer.concat([this.cache, data])
76378 }
76379
76380 Splitter.prototype.get = function (autoPadding) {
76381 var out
76382 if (autoPadding) {
76383 if (this.cache.length > 16) {
76384 out = this.cache.slice(0, 16)
76385 this.cache = this.cache.slice(16)
76386 return out
76387 }
76388 } else {
76389 if (this.cache.length >= 16) {
76390 out = this.cache.slice(0, 16)
76391 this.cache = this.cache.slice(16)
76392 return out
76393 }
76394 }
76395
76396 return null
76397 }
76398
76399 Splitter.prototype.flush = function () {
76400 if (this.cache.length) return this.cache
76401 }
76402
76403 function unpad (last) {
76404 var padded = last[15]
76405 var i = -1
76406 while (++i < padded) {
76407 if (last[(i + (16 - padded))] !== padded) {
76408 throw new Error('unable to decrypt data')
76409 }
76410 }
76411 if (padded === 16) return
76412
76413 return last.slice(0, 16 - padded)
76414 }
76415
76416 function createDecipheriv (suite, password, iv) {
76417 var config = MODES[suite.toLowerCase()]
76418 if (!config) throw new TypeError('invalid suite type')
76419
76420 if (typeof iv === 'string') iv = Buffer.from(iv)
76421 if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)
76422
76423 if (typeof password === 'string') password = Buffer.from(password)
76424 if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)
76425
76426 if (config.type === 'stream') {
76427 return new StreamCipher(config.module, password, iv, true)
76428 } else if (config.type === 'auth') {
76429 return new AuthCipher(config.module, password, iv, true)
76430 }
76431
76432 return new Decipher(config.module, password, iv)
76433 }
76434
76435 function createDecipher (suite, password) {
76436 var config = MODES[suite.toLowerCase()]
76437 if (!config) throw new TypeError('invalid suite type')
76438
76439 var keys = ebtk(password, false, config.key, config.iv)
76440 return createDecipheriv(suite, keys.key, keys.iv)
76441 }
76442
76443 exports.createDecipher = createDecipher
76444 exports.createDecipheriv = createDecipheriv
76445
76446 },{"./aes":156,"./authCipher":157,"./modes":169,"./streamCipher":172,"cipher-base":178,"evp_bytestokey":187,"inherits":189,"safe-buffer":193}],160:[function(require,module,exports){
76447 var MODES = require('./modes')
76448 var AuthCipher = require('./authCipher')
76449 var Buffer = require('safe-buffer').Buffer
76450 var StreamCipher = require('./streamCipher')
76451 var Transform = require('cipher-base')
76452 var aes = require('./aes')
76453 var ebtk = require('evp_bytestokey')
76454 var inherits = require('inherits')
76455
76456 function Cipher (mode, key, iv) {
76457 Transform.call(this)
76458
76459 this._cache = new Splitter()
76460 this._cipher = new aes.AES(key)
76461 this._prev = Buffer.from(iv)
76462 this._mode = mode
76463 this._autopadding = true
76464 }
76465
76466 inherits(Cipher, Transform)
76467
76468 Cipher.prototype._update = function (data) {
76469 this._cache.add(data)
76470 var chunk
76471 var thing
76472 var out = []
76473
76474 while ((chunk = this._cache.get())) {
76475 thing = this._mode.encrypt(this, chunk)
76476 out.push(thing)
76477 }
76478
76479 return Buffer.concat(out)
76480 }
76481
76482 var PADDING = Buffer.alloc(16, 0x10)
76483
76484 Cipher.prototype._final = function () {
76485 var chunk = this._cache.flush()
76486 if (this._autopadding) {
76487 chunk = this._mode.encrypt(this, chunk)
76488 this._cipher.scrub()
76489 return chunk
76490 }
76491
76492 if (!chunk.equals(PADDING)) {
76493 this._cipher.scrub()
76494 throw new Error('data not multiple of block length')
76495 }
76496 }
76497
76498 Cipher.prototype.setAutoPadding = function (setTo) {
76499 this._autopadding = !!setTo
76500 return this
76501 }
76502
76503 function Splitter () {
76504 this.cache = Buffer.allocUnsafe(0)
76505 }
76506
76507 Splitter.prototype.add = function (data) {
76508 this.cache = Buffer.concat([this.cache, data])
76509 }
76510
76511 Splitter.prototype.get = function () {
76512 if (this.cache.length > 15) {
76513 var out = this.cache.slice(0, 16)
76514 this.cache = this.cache.slice(16)
76515 return out
76516 }
76517 return null
76518 }
76519
76520 Splitter.prototype.flush = function () {
76521 var len = 16 - this.cache.length
76522 var padBuff = Buffer.allocUnsafe(len)
76523
76524 var i = -1
76525 while (++i < len) {
76526 padBuff.writeUInt8(len, i)
76527 }
76528
76529 return Buffer.concat([this.cache, padBuff])
76530 }
76531
76532 function createCipheriv (suite, password, iv) {
76533 var config = MODES[suite.toLowerCase()]
76534 if (!config) throw new TypeError('invalid suite type')
76535
76536 if (typeof password === 'string') password = Buffer.from(password)
76537 if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)
76538
76539 if (typeof iv === 'string') iv = Buffer.from(iv)
76540 if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)
76541
76542 if (config.type === 'stream') {
76543 return new StreamCipher(config.module, password, iv)
76544 } else if (config.type === 'auth') {
76545 return new AuthCipher(config.module, password, iv)
76546 }
76547
76548 return new Cipher(config.module, password, iv)
76549 }
76550
76551 function createCipher (suite, password) {
76552 var config = MODES[suite.toLowerCase()]
76553 if (!config) throw new TypeError('invalid suite type')
76554
76555 var keys = ebtk(password, false, config.key, config.iv)
76556 return createCipheriv(suite, keys.key, keys.iv)
76557 }
76558
76559 exports.createCipheriv = createCipheriv
76560 exports.createCipher = createCipher
76561
76562 },{"./aes":156,"./authCipher":157,"./modes":169,"./streamCipher":172,"cipher-base":178,"evp_bytestokey":187,"inherits":189,"safe-buffer":193}],161:[function(require,module,exports){
76563 var Buffer = require('safe-buffer').Buffer
76564 var ZEROES = Buffer.alloc(16, 0)
76565
76566 function toArray (buf) {
76567 return [
76568 buf.readUInt32BE(0),
76569 buf.readUInt32BE(4),
76570 buf.readUInt32BE(8),
76571 buf.readUInt32BE(12)
76572 ]
76573 }
76574
76575 function fromArray (out) {
76576 var buf = Buffer.allocUnsafe(16)
76577 buf.writeUInt32BE(out[0] >>> 0, 0)
76578 buf.writeUInt32BE(out[1] >>> 0, 4)
76579 buf.writeUInt32BE(out[2] >>> 0, 8)
76580 buf.writeUInt32BE(out[3] >>> 0, 12)
76581 return buf
76582 }
76583
76584 function GHASH (key) {
76585 this.h = key
76586 this.state = Buffer.alloc(16, 0)
76587 this.cache = Buffer.allocUnsafe(0)
76588 }
76589
76590 // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html
76591 // by Juho Vähä-Herttua
76592 GHASH.prototype.ghash = function (block) {
76593 var i = -1
76594 while (++i < block.length) {
76595 this.state[i] ^= block[i]
76596 }
76597 this._multiply()
76598 }
76599
76600 GHASH.prototype._multiply = function () {
76601 var Vi = toArray(this.h)
76602 var Zi = [0, 0, 0, 0]
76603 var j, xi, lsbVi
76604 var i = -1
76605 while (++i < 128) {
76606 xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0
76607 if (xi) {
76608 // Z_i+1 = Z_i ^ V_i
76609 Zi[0] ^= Vi[0]
76610 Zi[1] ^= Vi[1]
76611 Zi[2] ^= Vi[2]
76612 Zi[3] ^= Vi[3]
76613 }
76614
76615 // Store the value of LSB(V_i)
76616 lsbVi = (Vi[3] & 1) !== 0
76617
76618 // V_i+1 = V_i >> 1
76619 for (j = 3; j > 0; j--) {
76620 Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)
76621 }
76622 Vi[0] = Vi[0] >>> 1
76623
76624 // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R
76625 if (lsbVi) {
76626 Vi[0] = Vi[0] ^ (0xe1 << 24)
76627 }
76628 }
76629 this.state = fromArray(Zi)
76630 }
76631
76632 GHASH.prototype.update = function (buf) {
76633 this.cache = Buffer.concat([this.cache, buf])
76634 var chunk
76635 while (this.cache.length >= 16) {
76636 chunk = this.cache.slice(0, 16)
76637 this.cache = this.cache.slice(16)
76638 this.ghash(chunk)
76639 }
76640 }
76641
76642 GHASH.prototype.final = function (abl, bl) {
76643 if (this.cache.length) {
76644 this.ghash(Buffer.concat([this.cache, ZEROES], 16))
76645 }
76646
76647 this.ghash(fromArray([0, abl, 0, bl]))
76648 return this.state
76649 }
76650
76651 module.exports = GHASH
76652
76653 },{"safe-buffer":193}],162:[function(require,module,exports){
76654 function incr32 (iv) {
76655 var len = iv.length
76656 var item
76657 while (len--) {
76658 item = iv.readUInt8(len)
76659 if (item === 255) {
76660 iv.writeUInt8(0, len)
76661 } else {
76662 item++
76663 iv.writeUInt8(item, len)
76664 break
76665 }
76666 }
76667 }
76668 module.exports = incr32
76669
76670 },{}],163:[function(require,module,exports){
76671 arguments[4][27][0].apply(exports,arguments)
76672 },{"buffer-xor":176,"dup":27}],164:[function(require,module,exports){
76673 var Buffer = require('safe-buffer').Buffer
76674 var xor = require('buffer-xor')
76675
76676 function encryptStart (self, data, decrypt) {
76677 var len = data.length
76678 var out = xor(data, self._cache)
76679 self._cache = self._cache.slice(len)
76680 self._prev = Buffer.concat([self._prev, decrypt ? data : out])
76681 return out
76682 }
76683
76684 exports.encrypt = function (self, data, decrypt) {
76685 var out = Buffer.allocUnsafe(0)
76686 var len
76687
76688 while (data.length) {
76689 if (self._cache.length === 0) {
76690 self._cache = self._cipher.encryptBlock(self._prev)
76691 self._prev = Buffer.allocUnsafe(0)
76692 }
76693
76694 if (self._cache.length <= data.length) {
76695 len = self._cache.length
76696 out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])
76697 data = data.slice(len)
76698 } else {
76699 out = Buffer.concat([out, encryptStart(self, data, decrypt)])
76700 break
76701 }
76702 }
76703
76704 return out
76705 }
76706
76707 },{"buffer-xor":176,"safe-buffer":193}],165:[function(require,module,exports){
76708 var Buffer = require('safe-buffer').Buffer
76709
76710 function encryptByte (self, byteParam, decrypt) {
76711 var pad
76712 var i = -1
76713 var len = 8
76714 var out = 0
76715 var bit, value
76716 while (++i < len) {
76717 pad = self._cipher.encryptBlock(self._prev)
76718 bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0
76719 value = pad[0] ^ bit
76720 out += ((value & 0x80) >> (i % 8))
76721 self._prev = shiftIn(self._prev, decrypt ? bit : value)
76722 }
76723 return out
76724 }
76725
76726 function shiftIn (buffer, value) {
76727 var len = buffer.length
76728 var i = -1
76729 var out = Buffer.allocUnsafe(buffer.length)
76730 buffer = Buffer.concat([buffer, Buffer.from([value])])
76731
76732 while (++i < len) {
76733 out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)
76734 }
76735
76736 return out
76737 }
76738
76739 exports.encrypt = function (self, chunk, decrypt) {
76740 var len = chunk.length
76741 var out = Buffer.allocUnsafe(len)
76742 var i = -1
76743
76744 while (++i < len) {
76745 out[i] = encryptByte(self, chunk[i], decrypt)
76746 }
76747
76748 return out
76749 }
76750
76751 },{"safe-buffer":193}],166:[function(require,module,exports){
76752 var Buffer = require('safe-buffer').Buffer
76753
76754 function encryptByte (self, byteParam, decrypt) {
76755 var pad = self._cipher.encryptBlock(self._prev)
76756 var out = pad[0] ^ byteParam
76757
76758 self._prev = Buffer.concat([
76759 self._prev.slice(1),
76760 Buffer.from([decrypt ? byteParam : out])
76761 ])
76762
76763 return out
76764 }
76765
76766 exports.encrypt = function (self, chunk, decrypt) {
76767 var len = chunk.length
76768 var out = Buffer.allocUnsafe(len)
76769 var i = -1
76770
76771 while (++i < len) {
76772 out[i] = encryptByte(self, chunk[i], decrypt)
76773 }
76774
76775 return out
76776 }
76777
76778 },{"safe-buffer":193}],167:[function(require,module,exports){
76779 var xor = require('buffer-xor')
76780 var Buffer = require('safe-buffer').Buffer
76781 var incr32 = require('../incr32')
76782
76783 function getBlock (self) {
76784 var out = self._cipher.encryptBlockRaw(self._prev)
76785 incr32(self._prev)
76786 return out
76787 }
76788
76789 var blockSize = 16
76790 exports.encrypt = function (self, chunk) {
76791 var chunkNum = Math.ceil(chunk.length / blockSize)
76792 var start = self._cache.length
76793 self._cache = Buffer.concat([
76794 self._cache,
76795 Buffer.allocUnsafe(chunkNum * blockSize)
76796 ])
76797 for (var i = 0; i < chunkNum; i++) {
76798 var out = getBlock(self)
76799 var offset = start + i * blockSize
76800 self._cache.writeUInt32BE(out[0], offset + 0)
76801 self._cache.writeUInt32BE(out[1], offset + 4)
76802 self._cache.writeUInt32BE(out[2], offset + 8)
76803 self._cache.writeUInt32BE(out[3], offset + 12)
76804 }
76805 var pad = self._cache.slice(0, chunk.length)
76806 self._cache = self._cache.slice(chunk.length)
76807 return xor(chunk, pad)
76808 }
76809
76810 },{"../incr32":162,"buffer-xor":176,"safe-buffer":193}],168:[function(require,module,exports){
76811 exports.encrypt = function (self, block) {
76812 return self._cipher.encryptBlock(block)
76813 }
76814
76815 exports.decrypt = function (self, block) {
76816 return self._cipher.decryptBlock(block)
76817 }
76818
76819 },{}],169:[function(require,module,exports){
76820 var modeModules = {
76821 ECB: require('./ecb'),
76822 CBC: require('./cbc'),
76823 CFB: require('./cfb'),
76824 CFB8: require('./cfb8'),
76825 CFB1: require('./cfb1'),
76826 OFB: require('./ofb'),
76827 CTR: require('./ctr'),
76828 GCM: require('./ctr')
76829 }
76830
76831 var modes = require('./list.json')
76832
76833 for (var key in modes) {
76834 modes[key].module = modeModules[modes[key].mode]
76835 }
76836
76837 module.exports = modes
76838
76839 },{"./cbc":163,"./cfb":164,"./cfb1":165,"./cfb8":166,"./ctr":167,"./ecb":168,"./list.json":170,"./ofb":171}],170:[function(require,module,exports){
76840 module.exports={
76841 "aes-128-ecb": {
76842 "cipher": "AES",
76843 "key": 128,
76844 "iv": 0,
76845 "mode": "ECB",
76846 "type": "block"
76847 },
76848 "aes-192-ecb": {
76849 "cipher": "AES",
76850 "key": 192,
76851 "iv": 0,
76852 "mode": "ECB",
76853 "type": "block"
76854 },
76855 "aes-256-ecb": {
76856 "cipher": "AES",
76857 "key": 256,
76858 "iv": 0,
76859 "mode": "ECB",
76860 "type": "block"
76861 },
76862 "aes-128-cbc": {
76863 "cipher": "AES",
76864 "key": 128,
76865 "iv": 16,
76866 "mode": "CBC",
76867 "type": "block"
76868 },
76869 "aes-192-cbc": {
76870 "cipher": "AES",
76871 "key": 192,
76872 "iv": 16,
76873 "mode": "CBC",
76874 "type": "block"
76875 },
76876 "aes-256-cbc": {
76877 "cipher": "AES",
76878 "key": 256,
76879 "iv": 16,
76880 "mode": "CBC",
76881 "type": "block"
76882 },
76883 "aes128": {
76884 "cipher": "AES",
76885 "key": 128,
76886 "iv": 16,
76887 "mode": "CBC",
76888 "type": "block"
76889 },
76890 "aes192": {
76891 "cipher": "AES",
76892 "key": 192,
76893 "iv": 16,
76894 "mode": "CBC",
76895 "type": "block"
76896 },
76897 "aes256": {
76898 "cipher": "AES",
76899 "key": 256,
76900 "iv": 16,
76901 "mode": "CBC",
76902 "type": "block"
76903 },
76904 "aes-128-cfb": {
76905 "cipher": "AES",
76906 "key": 128,
76907 "iv": 16,
76908 "mode": "CFB",
76909 "type": "stream"
76910 },
76911 "aes-192-cfb": {
76912 "cipher": "AES",
76913 "key": 192,
76914 "iv": 16,
76915 "mode": "CFB",
76916 "type": "stream"
76917 },
76918 "aes-256-cfb": {
76919 "cipher": "AES",
76920 "key": 256,
76921 "iv": 16,
76922 "mode": "CFB",
76923 "type": "stream"
76924 },
76925 "aes-128-cfb8": {
76926 "cipher": "AES",
76927 "key": 128,
76928 "iv": 16,
76929 "mode": "CFB8",
76930 "type": "stream"
76931 },
76932 "aes-192-cfb8": {
76933 "cipher": "AES",
76934 "key": 192,
76935 "iv": 16,
76936 "mode": "CFB8",
76937 "type": "stream"
76938 },
76939 "aes-256-cfb8": {
76940 "cipher": "AES",
76941 "key": 256,
76942 "iv": 16,
76943 "mode": "CFB8",
76944 "type": "stream"
76945 },
76946 "aes-128-cfb1": {
76947 "cipher": "AES",
76948 "key": 128,
76949 "iv": 16,
76950 "mode": "CFB1",
76951 "type": "stream"
76952 },
76953 "aes-192-cfb1": {
76954 "cipher": "AES",
76955 "key": 192,
76956 "iv": 16,
76957 "mode": "CFB1",
76958 "type": "stream"
76959 },
76960 "aes-256-cfb1": {
76961 "cipher": "AES",
76962 "key": 256,
76963 "iv": 16,
76964 "mode": "CFB1",
76965 "type": "stream"
76966 },
76967 "aes-128-ofb": {
76968 "cipher": "AES",
76969 "key": 128,
76970 "iv": 16,
76971 "mode": "OFB",
76972 "type": "stream"
76973 },
76974 "aes-192-ofb": {
76975 "cipher": "AES",
76976 "key": 192,
76977 "iv": 16,
76978 "mode": "OFB",
76979 "type": "stream"
76980 },
76981 "aes-256-ofb": {
76982 "cipher": "AES",
76983 "key": 256,
76984 "iv": 16,
76985 "mode": "OFB",
76986 "type": "stream"
76987 },
76988 "aes-128-ctr": {
76989 "cipher": "AES",
76990 "key": 128,
76991 "iv": 16,
76992 "mode": "CTR",
76993 "type": "stream"
76994 },
76995 "aes-192-ctr": {
76996 "cipher": "AES",
76997 "key": 192,
76998 "iv": 16,
76999 "mode": "CTR",
77000 "type": "stream"
77001 },
77002 "aes-256-ctr": {
77003 "cipher": "AES",
77004 "key": 256,
77005 "iv": 16,
77006 "mode": "CTR",
77007 "type": "stream"
77008 },
77009 "aes-128-gcm": {
77010 "cipher": "AES",
77011 "key": 128,
77012 "iv": 12,
77013 "mode": "GCM",
77014 "type": "auth"
77015 },
77016 "aes-192-gcm": {
77017 "cipher": "AES",
77018 "key": 192,
77019 "iv": 12,
77020 "mode": "GCM",
77021 "type": "auth"
77022 },
77023 "aes-256-gcm": {
77024 "cipher": "AES",
77025 "key": 256,
77026 "iv": 12,
77027 "mode": "GCM",
77028 "type": "auth"
77029 }
77030 }
77031
77032 },{}],171:[function(require,module,exports){
77033 arguments[4][33][0].apply(exports,arguments)
77034 },{"buffer":47,"buffer-xor":176,"dup":33}],172:[function(require,module,exports){
77035 var aes = require('./aes')
77036 var Buffer = require('safe-buffer').Buffer
77037 var Transform = require('cipher-base')
77038 var inherits = require('inherits')
77039
77040 function StreamCipher (mode, key, iv, decrypt) {
77041 Transform.call(this)
77042
77043 this._cipher = new aes.AES(key)
77044 this._prev = Buffer.from(iv)
77045 this._cache = Buffer.allocUnsafe(0)
77046 this._secCache = Buffer.allocUnsafe(0)
77047 this._decrypt = decrypt
77048 this._mode = mode
77049 }
77050
77051 inherits(StreamCipher, Transform)
77052
77053 StreamCipher.prototype._update = function (chunk) {
77054 return this._mode.encrypt(this, chunk, this._decrypt)
77055 }
77056
77057 StreamCipher.prototype._final = function () {
77058 this._cipher.scrub()
77059 }
77060
77061 module.exports = StreamCipher
77062
77063 },{"./aes":156,"cipher-base":178,"inherits":189,"safe-buffer":193}],173:[function(require,module,exports){
77064 var basex = require('base-x')
77065 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
77066
77067 module.exports = basex(ALPHABET)
77068
77069 },{"base-x":151}],174:[function(require,module,exports){
77070 'use strict'
77071
77072 var base58 = require('bs58')
77073 var Buffer = require('safe-buffer').Buffer
77074
77075 module.exports = function (checksumFn) {
77076 // Encode a buffer as a base58-check encoded string
77077 function encode (payload) {
77078 var checksum = checksumFn(payload)
77079
77080 return base58.encode(Buffer.concat([
77081 payload,
77082 checksum
77083 ], payload.length + 4))
77084 }
77085
77086 function decodeRaw (buffer) {
77087 var payload = buffer.slice(0, -4)
77088 var checksum = buffer.slice(-4)
77089 var newChecksum = checksumFn(payload)
77090
77091 if (checksum[0] ^ newChecksum[0] |
77092 checksum[1] ^ newChecksum[1] |
77093 checksum[2] ^ newChecksum[2] |
77094 checksum[3] ^ newChecksum[3]) return
77095
77096 return payload
77097 }
77098
77099 // Decode a base58-check encoded string to a buffer, no result if checksum is wrong
77100 function decodeUnsafe (string) {
77101 var buffer = base58.decodeUnsafe(string)
77102 if (!buffer) return
77103
77104 return decodeRaw(buffer)
77105 }
77106
77107 function decode (string) {
77108 var buffer = base58.decode(string)
77109 var payload = decodeRaw(buffer, checksumFn)
77110 if (!payload) throw new Error('Invalid checksum')
77111 return payload
77112 }
77113
77114 return {
77115 encode: encode,
77116 decode: decode,
77117 decodeUnsafe: decodeUnsafe
77118 }
77119 }
77120
77121 },{"bs58":173,"safe-buffer":193}],175:[function(require,module,exports){
77122 'use strict'
77123
77124 var createHash = require('create-hash')
77125 var bs58checkBase = require('./base')
77126
77127 // SHA256(SHA256(buffer))
77128 function sha256x2 (buffer) {
77129 var tmp = createHash('sha256').update(buffer).digest()
77130 return createHash('sha256').update(tmp).digest()
77131 }
77132
77133 module.exports = bs58checkBase(sha256x2)
77134
77135 },{"./base":174,"create-hash":179}],176:[function(require,module,exports){
77136 arguments[4][46][0].apply(exports,arguments)
77137 },{"buffer":47,"dup":46}],177:[function(require,module,exports){
77138 module.exports = function xorInplace (a, b) {
77139 var length = Math.min(a.length, b.length)
77140
77141 for (var i = 0; i < length; ++i) {
77142 a[i] = a[i] ^ b[i]
77143 }
77144
77145 return a.slice(0, length)
77146 }
77147
77148 },{}],178:[function(require,module,exports){
77149 var Buffer = require('safe-buffer').Buffer
77150 var Transform = require('stream').Transform
77151 var StringDecoder = require('string_decoder').StringDecoder
77152 var inherits = require('inherits')
77153
77154 function CipherBase (hashMode) {
77155 Transform.call(this)
77156 this.hashMode = typeof hashMode === 'string'
77157 if (this.hashMode) {
77158 this[hashMode] = this._finalOrDigest
77159 } else {
77160 this.final = this._finalOrDigest
77161 }
77162 if (this._final) {
77163 this.__final = this._final
77164 this._final = null
77165 }
77166 this._decoder = null
77167 this._encoding = null
77168 }
77169 inherits(CipherBase, Transform)
77170
77171 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
77172 if (typeof data === 'string') {
77173 data = Buffer.from(data, inputEnc)
77174 }
77175
77176 var outData = this._update(data)
77177 if (this.hashMode) return this
77178
77179 if (outputEnc) {
77180 outData = this._toString(outData, outputEnc)
77181 }
77182
77183 return outData
77184 }
77185
77186 CipherBase.prototype.setAutoPadding = function () {}
77187 CipherBase.prototype.getAuthTag = function () {
77188 throw new Error('trying to get auth tag in unsupported state')
77189 }
77190
77191 CipherBase.prototype.setAuthTag = function () {
77192 throw new Error('trying to set auth tag in unsupported state')
77193 }
77194
77195 CipherBase.prototype.setAAD = function () {
77196 throw new Error('trying to set aad in unsupported state')
77197 }
77198
77199 CipherBase.prototype._transform = function (data, _, next) {
77200 var err
77201 try {
77202 if (this.hashMode) {
77203 this._update(data)
77204 } else {
77205 this.push(this._update(data))
77206 }
77207 } catch (e) {
77208 err = e
77209 } finally {
77210 next(err)
77211 }
77212 }
77213 CipherBase.prototype._flush = function (done) {
77214 var err
77215 try {
77216 this.push(this.__final())
77217 } catch (e) {
77218 err = e
77219 }
77220
77221 done(err)
77222 }
77223 CipherBase.prototype._finalOrDigest = function (outputEnc) {
77224 var outData = this.__final() || Buffer.alloc(0)
77225 if (outputEnc) {
77226 outData = this._toString(outData, outputEnc, true)
77227 }
77228 return outData
77229 }
77230
77231 CipherBase.prototype._toString = function (value, enc, fin) {
77232 if (!this._decoder) {
77233 this._decoder = new StringDecoder(enc)
77234 this._encoding = enc
77235 }
77236
77237 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
77238
77239 var out = this._decoder.write(value)
77240 if (fin) {
77241 out += this._decoder.end()
77242 }
77243
77244 return out
77245 }
77246
77247 module.exports = CipherBase
77248
77249 },{"inherits":189,"safe-buffer":193,"stream":143,"string_decoder":144}],179:[function(require,module,exports){
77250 arguments[4][51][0].apply(exports,arguments)
77251 },{"./md5":181,"buffer":47,"cipher-base":178,"dup":51,"inherits":189,"ripemd160":192,"sha.js":196}],180:[function(require,module,exports){
77252 arguments[4][52][0].apply(exports,arguments)
77253 },{"buffer":47,"dup":52}],181:[function(require,module,exports){
77254 arguments[4][53][0].apply(exports,arguments)
77255 },{"./make-hash":180,"dup":53}],182:[function(require,module,exports){
77256 var assert = require('assert')
77257 var BigInteger = require('bigi')
77258
77259 var Point = require('./point')
77260
77261 function Curve (p, a, b, Gx, Gy, n, h) {
77262 this.p = p
77263 this.a = a
77264 this.b = b
77265 this.G = Point.fromAffine(this, Gx, Gy)
77266 this.n = n
77267 this.h = h
77268
77269 this.infinity = new Point(this, null, null, BigInteger.ZERO)
77270
77271 // result caching
77272 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
77273
77274 // determine size of p in bytes
77275 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
77276 }
77277
77278 Curve.prototype.pointFromX = function (isOdd, x) {
77279 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
77280 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
77281
77282 var y = beta
77283 if (beta.isEven() ^ !isOdd) {
77284 y = this.p.subtract(y) // -y % p
77285 }
77286
77287 return Point.fromAffine(this, x, y)
77288 }
77289
77290 Curve.prototype.isInfinity = function (Q) {
77291 if (Q === this.infinity) return true
77292
77293 return Q.z.signum() === 0 && Q.y.signum() !== 0
77294 }
77295
77296 Curve.prototype.isOnCurve = function (Q) {
77297 if (this.isInfinity(Q)) return true
77298
77299 var x = Q.affineX
77300 var y = Q.affineY
77301 var a = this.a
77302 var b = this.b
77303 var p = this.p
77304
77305 // Check that xQ and yQ are integers in the interval [0, p - 1]
77306 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
77307 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
77308
77309 // and check that y^2 = x^3 + ax + b (mod p)
77310 var lhs = y.square().mod(p)
77311 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
77312 return lhs.equals(rhs)
77313 }
77314
77315 /**
77316 * Validate an elliptic curve point.
77317 *
77318 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
77319 */
77320 Curve.prototype.validate = function (Q) {
77321 // Check Q != O
77322 assert(!this.isInfinity(Q), 'Point is at infinity')
77323 assert(this.isOnCurve(Q), 'Point is not on the curve')
77324
77325 // Check nQ = O (where Q is a scalar multiple of G)
77326 var nQ = Q.multiply(this.n)
77327 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
77328
77329 return true
77330 }
77331
77332 module.exports = Curve
77333
77334 },{"./point":186,"assert":15,"bigi":154}],183:[function(require,module,exports){
77335 module.exports={
77336 "secp128r1": {
77337 "p": "fffffffdffffffffffffffffffffffff",
77338 "a": "fffffffdfffffffffffffffffffffffc",
77339 "b": "e87579c11079f43dd824993c2cee5ed3",
77340 "n": "fffffffe0000000075a30d1b9038a115",
77341 "h": "01",
77342 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
77343 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
77344 },
77345 "secp160k1": {
77346 "p": "fffffffffffffffffffffffffffffffeffffac73",
77347 "a": "00",
77348 "b": "07",
77349 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
77350 "h": "01",
77351 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
77352 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
77353 },
77354 "secp160r1": {
77355 "p": "ffffffffffffffffffffffffffffffff7fffffff",
77356 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
77357 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
77358 "n": "0100000000000000000001f4c8f927aed3ca752257",
77359 "h": "01",
77360 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
77361 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
77362 },
77363 "secp192k1": {
77364 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
77365 "a": "00",
77366 "b": "03",
77367 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
77368 "h": "01",
77369 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
77370 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
77371 },
77372 "secp192r1": {
77373 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
77374 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
77375 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
77376 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
77377 "h": "01",
77378 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
77379 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
77380 },
77381 "secp256k1": {
77382 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
77383 "a": "00",
77384 "b": "07",
77385 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
77386 "h": "01",
77387 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
77388 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
77389 },
77390 "secp256r1": {
77391 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
77392 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
77393 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
77394 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
77395 "h": "01",
77396 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
77397 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
77398 }
77399 }
77400
77401 },{}],184:[function(require,module,exports){
77402 var Point = require('./point')
77403 var Curve = require('./curve')
77404
77405 var getCurveByName = require('./names')
77406
77407 module.exports = {
77408 Curve: Curve,
77409 Point: Point,
77410 getCurveByName: getCurveByName
77411 }
77412
77413 },{"./curve":182,"./names":185,"./point":186}],185:[function(require,module,exports){
77414 var BigInteger = require('bigi')
77415
77416 var curves = require('./curves.json')
77417 var Curve = require('./curve')
77418
77419 function getCurveByName (name) {
77420 var curve = curves[name]
77421 if (!curve) return null
77422
77423 var p = new BigInteger(curve.p, 16)
77424 var a = new BigInteger(curve.a, 16)
77425 var b = new BigInteger(curve.b, 16)
77426 var n = new BigInteger(curve.n, 16)
77427 var h = new BigInteger(curve.h, 16)
77428 var Gx = new BigInteger(curve.Gx, 16)
77429 var Gy = new BigInteger(curve.Gy, 16)
77430
77431 return new Curve(p, a, b, Gx, Gy, n, h)
77432 }
77433
77434 module.exports = getCurveByName
77435
77436 },{"./curve":182,"./curves.json":183,"bigi":154}],186:[function(require,module,exports){
77437 var assert = require('assert')
77438 var Buffer = require('safe-buffer').Buffer
77439 var BigInteger = require('bigi')
77440
77441 var THREE = BigInteger.valueOf(3)
77442
77443 function Point (curve, x, y, z) {
77444 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
77445
77446 this.curve = curve
77447 this.x = x
77448 this.y = y
77449 this.z = z
77450 this._zInv = null
77451
77452 this.compressed = true
77453 }
77454
77455 Object.defineProperty(Point.prototype, 'zInv', {
77456 get: function () {
77457 if (this._zInv === null) {
77458 this._zInv = this.z.modInverse(this.curve.p)
77459 }
77460
77461 return this._zInv
77462 }
77463 })
77464
77465 Object.defineProperty(Point.prototype, 'affineX', {
77466 get: function () {
77467 return this.x.multiply(this.zInv).mod(this.curve.p)
77468 }
77469 })
77470
77471 Object.defineProperty(Point.prototype, 'affineY', {
77472 get: function () {
77473 return this.y.multiply(this.zInv).mod(this.curve.p)
77474 }
77475 })
77476
77477 Point.fromAffine = function (curve, x, y) {
77478 return new Point(curve, x, y, BigInteger.ONE)
77479 }
77480
77481 Point.prototype.equals = function (other) {
77482 if (other === this) return true
77483 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
77484 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
77485
77486 // u = Y2 * Z1 - Y1 * Z2
77487 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
77488
77489 if (u.signum() !== 0) return false
77490
77491 // v = X2 * Z1 - X1 * Z2
77492 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
77493
77494 return v.signum() === 0
77495 }
77496
77497 Point.prototype.negate = function () {
77498 var y = this.curve.p.subtract(this.y)
77499
77500 return new Point(this.curve, this.x, y, this.z)
77501 }
77502
77503 Point.prototype.add = function (b) {
77504 if (this.curve.isInfinity(this)) return b
77505 if (this.curve.isInfinity(b)) return this
77506
77507 var x1 = this.x
77508 var y1 = this.y
77509 var x2 = b.x
77510 var y2 = b.y
77511
77512 // u = Y2 * Z1 - Y1 * Z2
77513 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
77514 // v = X2 * Z1 - X1 * Z2
77515 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
77516
77517 if (v.signum() === 0) {
77518 if (u.signum() === 0) {
77519 return this.twice() // this == b, so double
77520 }
77521
77522 return this.curve.infinity // this = -b, so infinity
77523 }
77524
77525 var v2 = v.square()
77526 var v3 = v2.multiply(v)
77527 var x1v2 = x1.multiply(v2)
77528 var zu2 = u.square().multiply(this.z)
77529
77530 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
77531 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
77532 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
77533 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)
77534 // z3 = v^3 * z1 * z2
77535 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
77536
77537 return new Point(this.curve, x3, y3, z3)
77538 }
77539
77540 Point.prototype.twice = function () {
77541 if (this.curve.isInfinity(this)) return this
77542 if (this.y.signum() === 0) return this.curve.infinity
77543
77544 var x1 = this.x
77545 var y1 = this.y
77546
77547 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
77548 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
77549 var a = this.curve.a
77550
77551 // w = 3 * x1^2 + a * z1^2
77552 var w = x1.square().multiply(THREE)
77553
77554 if (a.signum() !== 0) {
77555 w = w.add(this.z.square().multiply(a))
77556 }
77557
77558 w = w.mod(this.curve.p)
77559 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
77560 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
77561 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
77562 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
77563 // z3 = 8 * (y1 * z1)^3
77564 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
77565
77566 return new Point(this.curve, x3, y3, z3)
77567 }
77568
77569 // Simple NAF (Non-Adjacent Form) multiplication algorithm
77570 // TODO: modularize the multiplication algorithm
77571 Point.prototype.multiply = function (k) {
77572 if (this.curve.isInfinity(this)) return this
77573 if (k.signum() === 0) return this.curve.infinity
77574
77575 var e = k
77576 var h = e.multiply(THREE)
77577
77578 var neg = this.negate()
77579 var R = this
77580
77581 for (var i = h.bitLength() - 2; i > 0; --i) {
77582 var hBit = h.testBit(i)
77583 var eBit = e.testBit(i)
77584
77585 R = R.twice()
77586
77587 if (hBit !== eBit) {
77588 R = R.add(hBit ? this : neg)
77589 }
77590 }
77591
77592 return R
77593 }
77594
77595 // Compute this*j + x*k (simultaneous multiplication)
77596 Point.prototype.multiplyTwo = function (j, x, k) {
77597 var i = Math.max(j.bitLength(), k.bitLength()) - 1
77598 var R = this.curve.infinity
77599 var both = this.add(x)
77600
77601 while (i >= 0) {
77602 var jBit = j.testBit(i)
77603 var kBit = k.testBit(i)
77604
77605 R = R.twice()
77606
77607 if (jBit) {
77608 if (kBit) {
77609 R = R.add(both)
77610 } else {
77611 R = R.add(this)
77612 }
77613 } else if (kBit) {
77614 R = R.add(x)
77615 }
77616 --i
77617 }
77618
77619 return R
77620 }
77621
77622 Point.prototype.getEncoded = function (compressed) {
77623 if (compressed == null) compressed = this.compressed
77624 if (this.curve.isInfinity(this)) return Buffer.alloc(1, 0) // Infinity point encoded is simply '00'
77625
77626 var x = this.affineX
77627 var y = this.affineY
77628 var byteLength = this.curve.pLength
77629 var buffer
77630
77631 // 0x02/0x03 | X
77632 if (compressed) {
77633 buffer = Buffer.allocUnsafe(1 + byteLength)
77634 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
77635
77636 // 0x04 | X | Y
77637 } else {
77638 buffer = Buffer.allocUnsafe(1 + byteLength + byteLength)
77639 buffer.writeUInt8(0x04, 0)
77640
77641 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
77642 }
77643
77644 x.toBuffer(byteLength).copy(buffer, 1)
77645
77646 return buffer
77647 }
77648
77649 Point.decodeFrom = function (curve, buffer) {
77650 var type = buffer.readUInt8(0)
77651 var compressed = (type !== 4)
77652
77653 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
77654 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
77655
77656 var Q
77657 if (compressed) {
77658 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
77659 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
77660
77661 var isOdd = (type === 0x03)
77662 Q = curve.pointFromX(isOdd, x)
77663 } else {
77664 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
77665
77666 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
77667 Q = Point.fromAffine(curve, x, y)
77668 }
77669
77670 Q.compressed = compressed
77671 return Q
77672 }
77673
77674 Point.prototype.toString = function () {
77675 if (this.curve.isInfinity(this)) return '(INFINITY)'
77676
77677 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
77678 }
77679
77680 module.exports = Point
77681
77682 },{"assert":15,"bigi":154,"safe-buffer":193}],187:[function(require,module,exports){
77683 var Buffer = require('safe-buffer').Buffer
77684 var MD5 = require('md5.js')
77685
77686 /* eslint-disable camelcase */
77687 function EVP_BytesToKey (password, salt, keyBits, ivLen) {
77688 if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')
77689 if (salt) {
77690 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')
77691 if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')
77692 }
77693
77694 var keyLen = keyBits / 8
77695 var key = Buffer.alloc(keyLen)
77696 var iv = Buffer.alloc(ivLen || 0)
77697 var tmp = Buffer.alloc(0)
77698
77699 while (keyLen > 0 || ivLen > 0) {
77700 var hash = new MD5()
77701 hash.update(tmp)
77702 hash.update(password)
77703 if (salt) hash.update(salt)
77704 tmp = hash.digest()
77705
77706 var used = 0
77707
77708 if (keyLen > 0) {
77709 var keyStart = key.length - keyLen
77710 used = Math.min(keyLen, tmp.length)
77711 tmp.copy(key, keyStart, 0, used)
77712 keyLen -= used
77713 }
77714
77715 if (used < tmp.length && ivLen > 0) {
77716 var ivStart = iv.length - ivLen
77717 var length = Math.min(ivLen, tmp.length - used)
77718 tmp.copy(iv, ivStart, used, used + length)
77719 ivLen -= length
77720 }
77721 }
77722
77723 tmp.fill(0)
77724 return { key: key, iv: iv }
77725 }
77726
77727 module.exports = EVP_BytesToKey
77728
77729 },{"md5.js":190,"safe-buffer":193}],188:[function(require,module,exports){
77730 arguments[4][85][0].apply(exports,arguments)
77731 },{"buffer":47,"dup":85,"inherits":189,"stream":143}],189:[function(require,module,exports){
77732 arguments[4][95][0].apply(exports,arguments)
77733 },{"dup":95}],190:[function(require,module,exports){
77734 (function (Buffer){
77735 'use strict'
77736 var inherits = require('inherits')
77737 var HashBase = require('hash-base')
77738
77739 var ARRAY16 = new Array(16)
77740
77741 function MD5 () {
77742 HashBase.call(this, 64)
77743
77744 // state
77745 this._a = 0x67452301
77746 this._b = 0xefcdab89
77747 this._c = 0x98badcfe
77748 this._d = 0x10325476
77749 }
77750
77751 inherits(MD5, HashBase)
77752
77753 MD5.prototype._update = function () {
77754 var M = ARRAY16
77755 for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)
77756
77757 var a = this._a
77758 var b = this._b
77759 var c = this._c
77760 var d = this._d
77761
77762 a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)
77763 d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)
77764 c = fnF(c, d, a, b, M[2], 0x242070db, 17)
77765 b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)
77766 a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)
77767 d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)
77768 c = fnF(c, d, a, b, M[6], 0xa8304613, 17)
77769 b = fnF(b, c, d, a, M[7], 0xfd469501, 22)
77770 a = fnF(a, b, c, d, M[8], 0x698098d8, 7)
77771 d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)
77772 c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)
77773 b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)
77774 a = fnF(a, b, c, d, M[12], 0x6b901122, 7)
77775 d = fnF(d, a, b, c, M[13], 0xfd987193, 12)
77776 c = fnF(c, d, a, b, M[14], 0xa679438e, 17)
77777 b = fnF(b, c, d, a, M[15], 0x49b40821, 22)
77778
77779 a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)
77780 d = fnG(d, a, b, c, M[6], 0xc040b340, 9)
77781 c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)
77782 b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)
77783 a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)
77784 d = fnG(d, a, b, c, M[10], 0x02441453, 9)
77785 c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)
77786 b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)
77787 a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)
77788 d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)
77789 c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)
77790 b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)
77791 a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)
77792 d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)
77793 c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)
77794 b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)
77795
77796 a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)
77797 d = fnH(d, a, b, c, M[8], 0x8771f681, 11)
77798 c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)
77799 b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)
77800 a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)
77801 d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)
77802 c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)
77803 b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)
77804 a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)
77805 d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)
77806 c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)
77807 b = fnH(b, c, d, a, M[6], 0x04881d05, 23)
77808 a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)
77809 d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)
77810 c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)
77811 b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)
77812
77813 a = fnI(a, b, c, d, M[0], 0xf4292244, 6)
77814 d = fnI(d, a, b, c, M[7], 0x432aff97, 10)
77815 c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)
77816 b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)
77817 a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)
77818 d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)
77819 c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)
77820 b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)
77821 a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)
77822 d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)
77823 c = fnI(c, d, a, b, M[6], 0xa3014314, 15)
77824 b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)
77825 a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)
77826 d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)
77827 c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)
77828 b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)
77829
77830 this._a = (this._a + a) | 0
77831 this._b = (this._b + b) | 0
77832 this._c = (this._c + c) | 0
77833 this._d = (this._d + d) | 0
77834 }
77835
77836 MD5.prototype._digest = function () {
77837 // create padding and handle blocks
77838 this._block[this._blockOffset++] = 0x80
77839 if (this._blockOffset > 56) {
77840 this._block.fill(0, this._blockOffset, 64)
77841 this._update()
77842 this._blockOffset = 0
77843 }
77844
77845 this._block.fill(0, this._blockOffset, 56)
77846 this._block.writeUInt32LE(this._length[0], 56)
77847 this._block.writeUInt32LE(this._length[1], 60)
77848 this._update()
77849
77850 // produce result
77851 var buffer = new Buffer(16)
77852 buffer.writeInt32LE(this._a, 0)
77853 buffer.writeInt32LE(this._b, 4)
77854 buffer.writeInt32LE(this._c, 8)
77855 buffer.writeInt32LE(this._d, 12)
77856 return buffer
77857 }
77858
77859 function rotl (x, n) {
77860 return (x << n) | (x >>> (32 - n))
77861 }
77862
77863 function fnF (a, b, c, d, m, k, s) {
77864 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0
77865 }
77866
77867 function fnG (a, b, c, d, m, k, s) {
77868 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0
77869 }
77870
77871 function fnH (a, b, c, d, m, k, s) {
77872 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0
77873 }
77874
77875 function fnI (a, b, c, d, m, k, s) {
77876 return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0
77877 }
77878
77879 module.exports = MD5
77880
77881 }).call(this,require("buffer").Buffer)
77882 },{"buffer":47,"hash-base":191,"inherits":189}],191:[function(require,module,exports){
77883 'use strict'
77884 var Buffer = require('safe-buffer').Buffer
77885 var Transform = require('stream').Transform
77886 var inherits = require('inherits')
77887
77888 function throwIfNotStringOrBuffer (val, prefix) {
77889 if (!Buffer.isBuffer(val) && typeof val !== 'string') {
77890 throw new TypeError(prefix + ' must be a string or a buffer')
77891 }
77892 }
77893
77894 function HashBase (blockSize) {
77895 Transform.call(this)
77896
77897 this._block = Buffer.allocUnsafe(blockSize)
77898 this._blockSize = blockSize
77899 this._blockOffset = 0
77900 this._length = [0, 0, 0, 0]
77901
77902 this._finalized = false
77903 }
77904
77905 inherits(HashBase, Transform)
77906
77907 HashBase.prototype._transform = function (chunk, encoding, callback) {
77908 var error = null
77909 try {
77910 this.update(chunk, encoding)
77911 } catch (err) {
77912 error = err
77913 }
77914
77915 callback(error)
77916 }
77917
77918 HashBase.prototype._flush = function (callback) {
77919 var error = null
77920 try {
77921 this.push(this.digest())
77922 } catch (err) {
77923 error = err
77924 }
77925
77926 callback(error)
77927 }
77928
77929 HashBase.prototype.update = function (data, encoding) {
77930 throwIfNotStringOrBuffer(data, 'Data')
77931 if (this._finalized) throw new Error('Digest already called')
77932 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
77933
77934 // consume data
77935 var block = this._block
77936 var offset = 0
77937 while (this._blockOffset + data.length - offset >= this._blockSize) {
77938 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
77939 this._update()
77940 this._blockOffset = 0
77941 }
77942 while (offset < data.length) block[this._blockOffset++] = data[offset++]
77943
77944 // update length
77945 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
77946 this._length[j] += carry
77947 carry = (this._length[j] / 0x0100000000) | 0
77948 if (carry > 0) this._length[j] -= 0x0100000000 * carry
77949 }
77950
77951 return this
77952 }
77953
77954 HashBase.prototype._update = function () {
77955 throw new Error('_update is not implemented')
77956 }
77957
77958 HashBase.prototype.digest = function (encoding) {
77959 if (this._finalized) throw new Error('Digest already called')
77960 this._finalized = true
77961
77962 var digest = this._digest()
77963 if (encoding !== undefined) digest = digest.toString(encoding)
77964
77965 // reset state
77966 this._block.fill(0)
77967 this._blockOffset = 0
77968 for (var i = 0; i < 4; ++i) this._length[i] = 0
77969
77970 return digest
77971 }
77972
77973 HashBase.prototype._digest = function () {
77974 throw new Error('_digest is not implemented')
77975 }
77976
77977 module.exports = HashBase
77978
77979 },{"inherits":189,"safe-buffer":193,"stream":143}],192:[function(require,module,exports){
77980 arguments[4][133][0].apply(exports,arguments)
77981 },{"buffer":47,"dup":133,"hash-base":188,"inherits":189}],193:[function(require,module,exports){
77982 /* eslint-disable node/no-deprecated-api */
77983 var buffer = require('buffer')
77984 var Buffer = buffer.Buffer
77985
77986 // alternative to using Object.keys for old browsers
77987 function copyProps (src, dst) {
77988 for (var key in src) {
77989 dst[key] = src[key]
77990 }
77991 }
77992 if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
77993 module.exports = buffer
77994 } else {
77995 // Copy properties from require('buffer')
77996 copyProps(buffer, exports)
77997 exports.Buffer = SafeBuffer
77998 }
77999
78000 function SafeBuffer (arg, encodingOrOffset, length) {
78001 return Buffer(arg, encodingOrOffset, length)
78002 }
78003
78004 // Copy static methods from Buffer
78005 copyProps(Buffer, SafeBuffer)
78006
78007 SafeBuffer.from = function (arg, encodingOrOffset, length) {
78008 if (typeof arg === 'number') {
78009 throw new TypeError('Argument must not be a number')
78010 }
78011 return Buffer(arg, encodingOrOffset, length)
78012 }
78013
78014 SafeBuffer.alloc = function (size, fill, encoding) {
78015 if (typeof size !== 'number') {
78016 throw new TypeError('Argument must be a number')
78017 }
78018 var buf = Buffer(size)
78019 if (fill !== undefined) {
78020 if (typeof encoding === 'string') {
78021 buf.fill(fill, encoding)
78022 } else {
78023 buf.fill(fill)
78024 }
78025 } else {
78026 buf.fill(0)
78027 }
78028 return buf
78029 }
78030
78031 SafeBuffer.allocUnsafe = function (size) {
78032 if (typeof size !== 'number') {
78033 throw new TypeError('Argument must be a number')
78034 }
78035 return Buffer(size)
78036 }
78037
78038 SafeBuffer.allocUnsafeSlow = function (size) {
78039 if (typeof size !== 'number') {
78040 throw new TypeError('Argument must be a number')
78041 }
78042 return buffer.SlowBuffer(size)
78043 }
78044
78045 },{"buffer":47}],194:[function(require,module,exports){
78046 (function (Buffer){
78047 var crypto = require('crypto')
78048 /* eslint-disable camelcase */
78049
78050 var MAX_VALUE = 0x7fffffff
78051
78052 // N = Cpu cost, r = Memory cost, p = parallelization cost
78053 function scrypt (key, salt, N, r, p, dkLen, progressCallback) {
78054 if (N === 0 || (N & (N - 1)) !== 0) throw Error('N must be > 0 and a power of 2')
78055
78056 if (N > MAX_VALUE / 128 / r) throw Error('Parameter N is too large')
78057 if (r > MAX_VALUE / 128 / p) throw Error('Parameter r is too large')
78058
78059 var XY = new Buffer(256 * r)
78060 var V = new Buffer(128 * r * N)
78061
78062 // pseudo global
78063 var B32 = new Int32Array(16) // salsa20_8
78064 var x = new Int32Array(16) // salsa20_8
78065 var _X = new Buffer(64) // blockmix_salsa8
78066
78067 // pseudo global
78068 var B = crypto.pbkdf2Sync(key, salt, 1, p * 128 * r, 'sha256')
78069
78070 var tickCallback
78071 if (progressCallback) {
78072 var totalOps = p * N * 2
78073 var currentOp = 0
78074
78075 tickCallback = function () {
78076 ++currentOp
78077
78078 // send progress notifications once every 1,000 ops
78079 if (currentOp % 1000 === 0) {
78080 progressCallback({
78081 current: currentOp,
78082 total: totalOps,
78083 percent: (currentOp / totalOps) * 100.0
78084 })
78085 }
78086 }
78087 }
78088
78089 for (var i = 0; i < p; i++) {
78090 smix(B, i * 128 * r, r, N, V, XY)
78091 }
78092
78093 return crypto.pbkdf2Sync(key, B, 1, dkLen, 'sha256')
78094
78095 // all of these functions are actually moved to the top
78096 // due to function hoisting
78097
78098 function smix (B, Bi, r, N, V, XY) {
78099 var Xi = 0
78100 var Yi = 128 * r
78101 var i
78102
78103 B.copy(XY, Xi, Bi, Bi + Yi)
78104
78105 for (i = 0; i < N; i++) {
78106 XY.copy(V, i * Yi, Xi, Xi + Yi)
78107 blockmix_salsa8(XY, Xi, Yi, r)
78108
78109 if (tickCallback) tickCallback()
78110 }
78111
78112 for (i = 0; i < N; i++) {
78113 var offset = Xi + (2 * r - 1) * 64
78114 var j = XY.readUInt32LE(offset) & (N - 1)
78115 blockxor(V, j * Yi, XY, Xi, Yi)
78116 blockmix_salsa8(XY, Xi, Yi, r)
78117
78118 if (tickCallback) tickCallback()
78119 }
78120
78121 XY.copy(B, Bi, Xi, Xi + Yi)
78122 }
78123
78124 function blockmix_salsa8 (BY, Bi, Yi, r) {
78125 var i
78126
78127 arraycopy(BY, Bi + (2 * r - 1) * 64, _X, 0, 64)
78128
78129 for (i = 0; i < 2 * r; i++) {
78130 blockxor(BY, i * 64, _X, 0, 64)
78131 salsa20_8(_X)
78132 arraycopy(_X, 0, BY, Yi + (i * 64), 64)
78133 }
78134
78135 for (i = 0; i < r; i++) {
78136 arraycopy(BY, Yi + (i * 2) * 64, BY, Bi + (i * 64), 64)
78137 }
78138
78139 for (i = 0; i < r; i++) {
78140 arraycopy(BY, Yi + (i * 2 + 1) * 64, BY, Bi + (i + r) * 64, 64)
78141 }
78142 }
78143
78144 function R (a, b) {
78145 return (a << b) | (a >>> (32 - b))
78146 }
78147
78148 function salsa20_8 (B) {
78149 var i
78150
78151 for (i = 0; i < 16; i++) {
78152 B32[i] = (B[i * 4 + 0] & 0xff) << 0
78153 B32[i] |= (B[i * 4 + 1] & 0xff) << 8
78154 B32[i] |= (B[i * 4 + 2] & 0xff) << 16
78155 B32[i] |= (B[i * 4 + 3] & 0xff) << 24
78156 // B32[i] = B.readUInt32LE(i*4) <--- this is signficantly slower even in Node.js
78157 }
78158
78159 arraycopy(B32, 0, x, 0, 16)
78160
78161 for (i = 8; i > 0; i -= 2) {
78162 x[4] ^= R(x[0] + x[12], 7)
78163 x[8] ^= R(x[4] + x[0], 9)
78164 x[12] ^= R(x[8] + x[4], 13)
78165 x[0] ^= R(x[12] + x[8], 18)
78166 x[9] ^= R(x[5] + x[1], 7)
78167 x[13] ^= R(x[9] + x[5], 9)
78168 x[1] ^= R(x[13] + x[9], 13)
78169 x[5] ^= R(x[1] + x[13], 18)
78170 x[14] ^= R(x[10] + x[6], 7)
78171 x[2] ^= R(x[14] + x[10], 9)
78172 x[6] ^= R(x[2] + x[14], 13)
78173 x[10] ^= R(x[6] + x[2], 18)
78174 x[3] ^= R(x[15] + x[11], 7)
78175 x[7] ^= R(x[3] + x[15], 9)
78176 x[11] ^= R(x[7] + x[3], 13)
78177 x[15] ^= R(x[11] + x[7], 18)
78178 x[1] ^= R(x[0] + x[3], 7)
78179 x[2] ^= R(x[1] + x[0], 9)
78180 x[3] ^= R(x[2] + x[1], 13)
78181 x[0] ^= R(x[3] + x[2], 18)
78182 x[6] ^= R(x[5] + x[4], 7)
78183 x[7] ^= R(x[6] + x[5], 9)
78184 x[4] ^= R(x[7] + x[6], 13)
78185 x[5] ^= R(x[4] + x[7], 18)
78186 x[11] ^= R(x[10] + x[9], 7)
78187 x[8] ^= R(x[11] + x[10], 9)
78188 x[9] ^= R(x[8] + x[11], 13)
78189 x[10] ^= R(x[9] + x[8], 18)
78190 x[12] ^= R(x[15] + x[14], 7)
78191 x[13] ^= R(x[12] + x[15], 9)
78192 x[14] ^= R(x[13] + x[12], 13)
78193 x[15] ^= R(x[14] + x[13], 18)
78194 }
78195
78196 for (i = 0; i < 16; ++i) B32[i] = x[i] + B32[i]
78197
78198 for (i = 0; i < 16; i++) {
78199 var bi = i * 4
78200 B[bi + 0] = (B32[i] >> 0 & 0xff)
78201 B[bi + 1] = (B32[i] >> 8 & 0xff)
78202 B[bi + 2] = (B32[i] >> 16 & 0xff)
78203 B[bi + 3] = (B32[i] >> 24 & 0xff)
78204 // B.writeInt32LE(B32[i], i*4) //<--- this is signficantly slower even in Node.js
78205 }
78206 }
78207
78208 // naive approach... going back to loop unrolling may yield additional performance
78209 function blockxor (S, Si, D, Di, len) {
78210 for (var i = 0; i < len; i++) {
78211 D[Di + i] ^= S[Si + i]
78212 }
78213 }
78214 }
78215
78216 function arraycopy (src, srcPos, dest, destPos, length) {
78217 if (Buffer.isBuffer(src) && Buffer.isBuffer(dest)) {
78218 src.copy(dest, destPos, srcPos, srcPos + length)
78219 } else {
78220 while (length--) {
78221 dest[destPos++] = src[srcPos++]
78222 }
78223 }
78224 }
78225
78226 module.exports = scrypt
78227
78228 }).call(this,require("buffer").Buffer)
78229 },{"buffer":47,"crypto":56}],195:[function(require,module,exports){
78230 var Buffer = require('safe-buffer').Buffer
78231
78232 // prototype class for hash functions
78233 function Hash (blockSize, finalSize) {
78234 this._block = Buffer.alloc(blockSize)
78235 this._finalSize = finalSize
78236 this._blockSize = blockSize
78237 this._len = 0
78238 }
78239
78240 Hash.prototype.update = function (data, enc) {
78241 if (typeof data === 'string') {
78242 enc = enc || 'utf8'
78243 data = Buffer.from(data, enc)
78244 }
78245
78246 var block = this._block
78247 var blockSize = this._blockSize
78248 var length = data.length
78249 var accum = this._len
78250
78251 for (var offset = 0; offset < length;) {
78252 var assigned = accum % blockSize
78253 var remainder = Math.min(length - offset, blockSize - assigned)
78254
78255 for (var i = 0; i < remainder; i++) {
78256 block[assigned + i] = data[offset + i]
78257 }
78258
78259 accum += remainder
78260 offset += remainder
78261
78262 if ((accum % blockSize) === 0) {
78263 this._update(block)
78264 }
78265 }
78266
78267 this._len += length
78268 return this
78269 }
78270
78271 Hash.prototype.digest = function (enc) {
78272 var rem = this._len % this._blockSize
78273
78274 this._block[rem] = 0x80
78275
78276 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
78277 // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
78278 this._block.fill(0, rem + 1)
78279
78280 if (rem >= this._finalSize) {
78281 this._update(this._block)
78282 this._block.fill(0)
78283 }
78284
78285 var bits = this._len * 8
78286
78287 // uint32
78288 if (bits <= 0xffffffff) {
78289 this._block.writeUInt32BE(bits, this._blockSize - 4)
78290
78291 // uint64
78292 } else {
78293 var lowBits = (bits & 0xffffffff) >>> 0
78294 var highBits = (bits - lowBits) / 0x100000000
78295
78296 this._block.writeUInt32BE(highBits, this._blockSize - 8)
78297 this._block.writeUInt32BE(lowBits, this._blockSize - 4)
78298 }
78299
78300 this._update(this._block)
78301 var hash = this._hash()
78302
78303 return enc ? hash.toString(enc) : hash
78304 }
78305
78306 Hash.prototype._update = function () {
78307 throw new Error('_update must be implemented by subclass')
78308 }
78309
78310 module.exports = Hash
78311
78312 },{"safe-buffer":193}],196:[function(require,module,exports){
78313 arguments[4][136][0].apply(exports,arguments)
78314 },{"./sha":197,"./sha1":198,"./sha224":199,"./sha256":200,"./sha384":201,"./sha512":202,"dup":136}],197:[function(require,module,exports){
78315 /*
78316 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
78317 * in FIPS PUB 180-1
78318 * This source code is derived from sha1.js of the same repository.
78319 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
78320 * operation was added.
78321 */
78322
78323 var inherits = require('inherits')
78324 var Hash = require('./hash')
78325 var Buffer = require('safe-buffer').Buffer
78326
78327 var K = [
78328 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
78329 ]
78330
78331 var W = new Array(80)
78332
78333 function Sha () {
78334 this.init()
78335 this._w = W
78336
78337 Hash.call(this, 64, 56)
78338 }
78339
78340 inherits(Sha, Hash)
78341
78342 Sha.prototype.init = function () {
78343 this._a = 0x67452301
78344 this._b = 0xefcdab89
78345 this._c = 0x98badcfe
78346 this._d = 0x10325476
78347 this._e = 0xc3d2e1f0
78348
78349 return this
78350 }
78351
78352 function rotl5 (num) {
78353 return (num << 5) | (num >>> 27)
78354 }
78355
78356 function rotl30 (num) {
78357 return (num << 30) | (num >>> 2)
78358 }
78359
78360 function ft (s, b, c, d) {
78361 if (s === 0) return (b & c) | ((~b) & d)
78362 if (s === 2) return (b & c) | (b & d) | (c & d)
78363 return b ^ c ^ d
78364 }
78365
78366 Sha.prototype._update = function (M) {
78367 var W = this._w
78368
78369 var a = this._a | 0
78370 var b = this._b | 0
78371 var c = this._c | 0
78372 var d = this._d | 0
78373 var e = this._e | 0
78374
78375 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
78376 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
78377
78378 for (var j = 0; j < 80; ++j) {
78379 var s = ~~(j / 20)
78380 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
78381
78382 e = d
78383 d = c
78384 c = rotl30(b)
78385 b = a
78386 a = t
78387 }
78388
78389 this._a = (a + this._a) | 0
78390 this._b = (b + this._b) | 0
78391 this._c = (c + this._c) | 0
78392 this._d = (d + this._d) | 0
78393 this._e = (e + this._e) | 0
78394 }
78395
78396 Sha.prototype._hash = function () {
78397 var H = Buffer.allocUnsafe(20)
78398
78399 H.writeInt32BE(this._a | 0, 0)
78400 H.writeInt32BE(this._b | 0, 4)
78401 H.writeInt32BE(this._c | 0, 8)
78402 H.writeInt32BE(this._d | 0, 12)
78403 H.writeInt32BE(this._e | 0, 16)
78404
78405 return H
78406 }
78407
78408 module.exports = Sha
78409
78410 },{"./hash":195,"inherits":189,"safe-buffer":193}],198:[function(require,module,exports){
78411 /*
78412 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
78413 * in FIPS PUB 180-1
78414 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
78415 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
78416 * Distributed under the BSD License
78417 * See http://pajhome.org.uk/crypt/md5 for details.
78418 */
78419
78420 var inherits = require('inherits')
78421 var Hash = require('./hash')
78422 var Buffer = require('safe-buffer').Buffer
78423
78424 var K = [
78425 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
78426 ]
78427
78428 var W = new Array(80)
78429
78430 function Sha1 () {
78431 this.init()
78432 this._w = W
78433
78434 Hash.call(this, 64, 56)
78435 }
78436
78437 inherits(Sha1, Hash)
78438
78439 Sha1.prototype.init = function () {
78440 this._a = 0x67452301
78441 this._b = 0xefcdab89
78442 this._c = 0x98badcfe
78443 this._d = 0x10325476
78444 this._e = 0xc3d2e1f0
78445
78446 return this
78447 }
78448
78449 function rotl1 (num) {
78450 return (num << 1) | (num >>> 31)
78451 }
78452
78453 function rotl5 (num) {
78454 return (num << 5) | (num >>> 27)
78455 }
78456
78457 function rotl30 (num) {
78458 return (num << 30) | (num >>> 2)
78459 }
78460
78461 function ft (s, b, c, d) {
78462 if (s === 0) return (b & c) | ((~b) & d)
78463 if (s === 2) return (b & c) | (b & d) | (c & d)
78464 return b ^ c ^ d
78465 }
78466
78467 Sha1.prototype._update = function (M) {
78468 var W = this._w
78469
78470 var a = this._a | 0
78471 var b = this._b | 0
78472 var c = this._c | 0
78473 var d = this._d | 0
78474 var e = this._e | 0
78475
78476 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
78477 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
78478
78479 for (var j = 0; j < 80; ++j) {
78480 var s = ~~(j / 20)
78481 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
78482
78483 e = d
78484 d = c
78485 c = rotl30(b)
78486 b = a
78487 a = t
78488 }
78489
78490 this._a = (a + this._a) | 0
78491 this._b = (b + this._b) | 0
78492 this._c = (c + this._c) | 0
78493 this._d = (d + this._d) | 0
78494 this._e = (e + this._e) | 0
78495 }
78496
78497 Sha1.prototype._hash = function () {
78498 var H = Buffer.allocUnsafe(20)
78499
78500 H.writeInt32BE(this._a | 0, 0)
78501 H.writeInt32BE(this._b | 0, 4)
78502 H.writeInt32BE(this._c | 0, 8)
78503 H.writeInt32BE(this._d | 0, 12)
78504 H.writeInt32BE(this._e | 0, 16)
78505
78506 return H
78507 }
78508
78509 module.exports = Sha1
78510
78511 },{"./hash":195,"inherits":189,"safe-buffer":193}],199:[function(require,module,exports){
78512 /**
78513 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
78514 * in FIPS 180-2
78515 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
78516 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
78517 *
78518 */
78519
78520 var inherits = require('inherits')
78521 var Sha256 = require('./sha256')
78522 var Hash = require('./hash')
78523 var Buffer = require('safe-buffer').Buffer
78524
78525 var W = new Array(64)
78526
78527 function Sha224 () {
78528 this.init()
78529
78530 this._w = W // new Array(64)
78531
78532 Hash.call(this, 64, 56)
78533 }
78534
78535 inherits(Sha224, Sha256)
78536
78537 Sha224.prototype.init = function () {
78538 this._a = 0xc1059ed8
78539 this._b = 0x367cd507
78540 this._c = 0x3070dd17
78541 this._d = 0xf70e5939
78542 this._e = 0xffc00b31
78543 this._f = 0x68581511
78544 this._g = 0x64f98fa7
78545 this._h = 0xbefa4fa4
78546
78547 return this
78548 }
78549
78550 Sha224.prototype._hash = function () {
78551 var H = Buffer.allocUnsafe(28)
78552
78553 H.writeInt32BE(this._a, 0)
78554 H.writeInt32BE(this._b, 4)
78555 H.writeInt32BE(this._c, 8)
78556 H.writeInt32BE(this._d, 12)
78557 H.writeInt32BE(this._e, 16)
78558 H.writeInt32BE(this._f, 20)
78559 H.writeInt32BE(this._g, 24)
78560
78561 return H
78562 }
78563
78564 module.exports = Sha224
78565
78566 },{"./hash":195,"./sha256":200,"inherits":189,"safe-buffer":193}],200:[function(require,module,exports){
78567 /**
78568 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
78569 * in FIPS 180-2
78570 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
78571 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
78572 *
78573 */
78574
78575 var inherits = require('inherits')
78576 var Hash = require('./hash')
78577 var Buffer = require('safe-buffer').Buffer
78578
78579 var K = [
78580 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
78581 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
78582 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
78583 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
78584 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
78585 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
78586 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
78587 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
78588 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
78589 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
78590 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
78591 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
78592 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
78593 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
78594 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
78595 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
78596 ]
78597
78598 var W = new Array(64)
78599
78600 function Sha256 () {
78601 this.init()
78602
78603 this._w = W // new Array(64)
78604
78605 Hash.call(this, 64, 56)
78606 }
78607
78608 inherits(Sha256, Hash)
78609
78610 Sha256.prototype.init = function () {
78611 this._a = 0x6a09e667
78612 this._b = 0xbb67ae85
78613 this._c = 0x3c6ef372
78614 this._d = 0xa54ff53a
78615 this._e = 0x510e527f
78616 this._f = 0x9b05688c
78617 this._g = 0x1f83d9ab
78618 this._h = 0x5be0cd19
78619
78620 return this
78621 }
78622
78623 function ch (x, y, z) {
78624 return z ^ (x & (y ^ z))
78625 }
78626
78627 function maj (x, y, z) {
78628 return (x & y) | (z & (x | y))
78629 }
78630
78631 function sigma0 (x) {
78632 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
78633 }
78634
78635 function sigma1 (x) {
78636 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
78637 }
78638
78639 function gamma0 (x) {
78640 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
78641 }
78642
78643 function gamma1 (x) {
78644 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
78645 }
78646
78647 Sha256.prototype._update = function (M) {
78648 var W = this._w
78649
78650 var a = this._a | 0
78651 var b = this._b | 0
78652 var c = this._c | 0
78653 var d = this._d | 0
78654 var e = this._e | 0
78655 var f = this._f | 0
78656 var g = this._g | 0
78657 var h = this._h | 0
78658
78659 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
78660 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
78661
78662 for (var j = 0; j < 64; ++j) {
78663 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
78664 var T2 = (sigma0(a) + maj(a, b, c)) | 0
78665
78666 h = g
78667 g = f
78668 f = e
78669 e = (d + T1) | 0
78670 d = c
78671 c = b
78672 b = a
78673 a = (T1 + T2) | 0
78674 }
78675
78676 this._a = (a + this._a) | 0
78677 this._b = (b + this._b) | 0
78678 this._c = (c + this._c) | 0
78679 this._d = (d + this._d) | 0
78680 this._e = (e + this._e) | 0
78681 this._f = (f + this._f) | 0
78682 this._g = (g + this._g) | 0
78683 this._h = (h + this._h) | 0
78684 }
78685
78686 Sha256.prototype._hash = function () {
78687 var H = Buffer.allocUnsafe(32)
78688
78689 H.writeInt32BE(this._a, 0)
78690 H.writeInt32BE(this._b, 4)
78691 H.writeInt32BE(this._c, 8)
78692 H.writeInt32BE(this._d, 12)
78693 H.writeInt32BE(this._e, 16)
78694 H.writeInt32BE(this._f, 20)
78695 H.writeInt32BE(this._g, 24)
78696 H.writeInt32BE(this._h, 28)
78697
78698 return H
78699 }
78700
78701 module.exports = Sha256
78702
78703 },{"./hash":195,"inherits":189,"safe-buffer":193}],201:[function(require,module,exports){
78704 var inherits = require('inherits')
78705 var SHA512 = require('./sha512')
78706 var Hash = require('./hash')
78707 var Buffer = require('safe-buffer').Buffer
78708
78709 var W = new Array(160)
78710
78711 function Sha384 () {
78712 this.init()
78713 this._w = W
78714
78715 Hash.call(this, 128, 112)
78716 }
78717
78718 inherits(Sha384, SHA512)
78719
78720 Sha384.prototype.init = function () {
78721 this._ah = 0xcbbb9d5d
78722 this._bh = 0x629a292a
78723 this._ch = 0x9159015a
78724 this._dh = 0x152fecd8
78725 this._eh = 0x67332667
78726 this._fh = 0x8eb44a87
78727 this._gh = 0xdb0c2e0d
78728 this._hh = 0x47b5481d
78729
78730 this._al = 0xc1059ed8
78731 this._bl = 0x367cd507
78732 this._cl = 0x3070dd17
78733 this._dl = 0xf70e5939
78734 this._el = 0xffc00b31
78735 this._fl = 0x68581511
78736 this._gl = 0x64f98fa7
78737 this._hl = 0xbefa4fa4
78738
78739 return this
78740 }
78741
78742 Sha384.prototype._hash = function () {
78743 var H = Buffer.allocUnsafe(48)
78744
78745 function writeInt64BE (h, l, offset) {
78746 H.writeInt32BE(h, offset)
78747 H.writeInt32BE(l, offset + 4)
78748 }
78749
78750 writeInt64BE(this._ah, this._al, 0)
78751 writeInt64BE(this._bh, this._bl, 8)
78752 writeInt64BE(this._ch, this._cl, 16)
78753 writeInt64BE(this._dh, this._dl, 24)
78754 writeInt64BE(this._eh, this._el, 32)
78755 writeInt64BE(this._fh, this._fl, 40)
78756
78757 return H
78758 }
78759
78760 module.exports = Sha384
78761
78762 },{"./hash":195,"./sha512":202,"inherits":189,"safe-buffer":193}],202:[function(require,module,exports){
78763 var inherits = require('inherits')
78764 var Hash = require('./hash')
78765 var Buffer = require('safe-buffer').Buffer
78766
78767 var K = [
78768 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
78769 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
78770 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
78771 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
78772 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
78773 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
78774 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
78775 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
78776 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
78777 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
78778 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
78779 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
78780 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
78781 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
78782 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
78783 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
78784 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
78785 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
78786 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
78787 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
78788 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
78789 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
78790 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
78791 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
78792 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
78793 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
78794 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
78795 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
78796 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
78797 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
78798 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
78799 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
78800 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
78801 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
78802 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
78803 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
78804 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
78805 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
78806 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
78807 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
78808 ]
78809
78810 var W = new Array(160)
78811
78812 function Sha512 () {
78813 this.init()
78814 this._w = W
78815
78816 Hash.call(this, 128, 112)
78817 }
78818
78819 inherits(Sha512, Hash)
78820
78821 Sha512.prototype.init = function () {
78822 this._ah = 0x6a09e667
78823 this._bh = 0xbb67ae85
78824 this._ch = 0x3c6ef372
78825 this._dh = 0xa54ff53a
78826 this._eh = 0x510e527f
78827 this._fh = 0x9b05688c
78828 this._gh = 0x1f83d9ab
78829 this._hh = 0x5be0cd19
78830
78831 this._al = 0xf3bcc908
78832 this._bl = 0x84caa73b
78833 this._cl = 0xfe94f82b
78834 this._dl = 0x5f1d36f1
78835 this._el = 0xade682d1
78836 this._fl = 0x2b3e6c1f
78837 this._gl = 0xfb41bd6b
78838 this._hl = 0x137e2179
78839
78840 return this
78841 }
78842
78843 function Ch (x, y, z) {
78844 return z ^ (x & (y ^ z))
78845 }
78846
78847 function maj (x, y, z) {
78848 return (x & y) | (z & (x | y))
78849 }
78850
78851 function sigma0 (x, xl) {
78852 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
78853 }
78854
78855 function sigma1 (x, xl) {
78856 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
78857 }
78858
78859 function Gamma0 (x, xl) {
78860 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
78861 }
78862
78863 function Gamma0l (x, xl) {
78864 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
78865 }
78866
78867 function Gamma1 (x, xl) {
78868 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
78869 }
78870
78871 function Gamma1l (x, xl) {
78872 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
78873 }
78874
78875 function getCarry (a, b) {
78876 return (a >>> 0) < (b >>> 0) ? 1 : 0
78877 }
78878
78879 Sha512.prototype._update = function (M) {
78880 var W = this._w
78881
78882 var ah = this._ah | 0
78883 var bh = this._bh | 0
78884 var ch = this._ch | 0
78885 var dh = this._dh | 0
78886 var eh = this._eh | 0
78887 var fh = this._fh | 0
78888 var gh = this._gh | 0
78889 var hh = this._hh | 0
78890
78891 var al = this._al | 0
78892 var bl = this._bl | 0
78893 var cl = this._cl | 0
78894 var dl = this._dl | 0
78895 var el = this._el | 0
78896 var fl = this._fl | 0
78897 var gl = this._gl | 0
78898 var hl = this._hl | 0
78899
78900 for (var i = 0; i < 32; i += 2) {
78901 W[i] = M.readInt32BE(i * 4)
78902 W[i + 1] = M.readInt32BE(i * 4 + 4)
78903 }
78904 for (; i < 160; i += 2) {
78905 var xh = W[i - 15 * 2]
78906 var xl = W[i - 15 * 2 + 1]
78907 var gamma0 = Gamma0(xh, xl)
78908 var gamma0l = Gamma0l(xl, xh)
78909
78910 xh = W[i - 2 * 2]
78911 xl = W[i - 2 * 2 + 1]
78912 var gamma1 = Gamma1(xh, xl)
78913 var gamma1l = Gamma1l(xl, xh)
78914
78915 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
78916 var Wi7h = W[i - 7 * 2]
78917 var Wi7l = W[i - 7 * 2 + 1]
78918
78919 var Wi16h = W[i - 16 * 2]
78920 var Wi16l = W[i - 16 * 2 + 1]
78921
78922 var Wil = (gamma0l + Wi7l) | 0
78923 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
78924 Wil = (Wil + gamma1l) | 0
78925 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
78926 Wil = (Wil + Wi16l) | 0
78927 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
78928
78929 W[i] = Wih
78930 W[i + 1] = Wil
78931 }
78932
78933 for (var j = 0; j < 160; j += 2) {
78934 Wih = W[j]
78935 Wil = W[j + 1]
78936
78937 var majh = maj(ah, bh, ch)
78938 var majl = maj(al, bl, cl)
78939
78940 var sigma0h = sigma0(ah, al)
78941 var sigma0l = sigma0(al, ah)
78942 var sigma1h = sigma1(eh, el)
78943 var sigma1l = sigma1(el, eh)
78944
78945 // t1 = h + sigma1 + ch + K[j] + W[j]
78946 var Kih = K[j]
78947 var Kil = K[j + 1]
78948
78949 var chh = Ch(eh, fh, gh)
78950 var chl = Ch(el, fl, gl)
78951
78952 var t1l = (hl + sigma1l) | 0
78953 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
78954 t1l = (t1l + chl) | 0
78955 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
78956 t1l = (t1l + Kil) | 0
78957 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
78958 t1l = (t1l + Wil) | 0
78959 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
78960
78961 // t2 = sigma0 + maj
78962 var t2l = (sigma0l + majl) | 0
78963 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
78964
78965 hh = gh
78966 hl = gl
78967 gh = fh
78968 gl = fl
78969 fh = eh
78970 fl = el
78971 el = (dl + t1l) | 0
78972 eh = (dh + t1h + getCarry(el, dl)) | 0
78973 dh = ch
78974 dl = cl
78975 ch = bh
78976 cl = bl
78977 bh = ah
78978 bl = al
78979 al = (t1l + t2l) | 0
78980 ah = (t1h + t2h + getCarry(al, t1l)) | 0
78981 }
78982
78983 this._al = (this._al + al) | 0
78984 this._bl = (this._bl + bl) | 0
78985 this._cl = (this._cl + cl) | 0
78986 this._dl = (this._dl + dl) | 0
78987 this._el = (this._el + el) | 0
78988 this._fl = (this._fl + fl) | 0
78989 this._gl = (this._gl + gl) | 0
78990 this._hl = (this._hl + hl) | 0
78991
78992 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
78993 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
78994 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
78995 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
78996 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
78997 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
78998 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
78999 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
79000 }
79001
79002 Sha512.prototype._hash = function () {
79003 var H = Buffer.allocUnsafe(64)
79004
79005 function writeInt64BE (h, l, offset) {
79006 H.writeInt32BE(h, offset)
79007 H.writeInt32BE(l, offset + 4)
79008 }
79009
79010 writeInt64BE(this._ah, this._al, 0)
79011 writeInt64BE(this._bh, this._bl, 8)
79012 writeInt64BE(this._ch, this._cl, 16)
79013 writeInt64BE(this._dh, this._dl, 24)
79014 writeInt64BE(this._eh, this._el, 32)
79015 writeInt64BE(this._fh, this._fl, 40)
79016 writeInt64BE(this._gh, this._gl, 48)
79017 writeInt64BE(this._hh, this._hl, 56)
79018
79019 return H
79020 }
79021
79022 module.exports = Sha512
79023
79024 },{"./hash":195,"inherits":189,"safe-buffer":193}]},{},[150])(150)
79025 });</script>
79026 <script>(function() {
79027
79028 // p2wpkh
79029
79030 bitcoinjs.bitcoin.networks.bitcoin.p2wpkh = {
79031 baseNetwork: "bitcoin",
79032 messagePrefix: '\x18Bitcoin Signed Message:\n',
79033 bech32: 'bc',
79034 bip32: {
79035 public: 0x04b24746,
79036 private: 0x04b2430c
79037 },
79038 pubKeyHash: 0x00,
79039 scriptHash: 0x05,
79040 wif: 0x80
79041 };
79042
79043 // p2wpkh in p2sh
79044
79045 bitcoinjs.bitcoin.networks.bitcoin.p2wpkhInP2sh = {
79046 baseNetwork: "bitcoin",
79047 messagePrefix: '\x18Bitcoin Signed Message:\n',
79048 bech32: 'bc',
79049 bip32: {
79050 public: 0x049d7cb2,
79051 private: 0x049d7878
79052 },
79053 pubKeyHash: 0x00,
79054 scriptHash: 0x05,
79055 wif: 0x80
79056 };
79057
79058 bitcoinjs.bitcoin.networks.testnet.p2wpkhInP2sh = {
79059 baseNetwork: "testnet",
79060 messagePrefix: '\x18Bitcoin Signed Message:\n',
79061 bech32: 'tb',
79062 bip32: {
79063 public: 0x044a5262,
79064 private: 0x044a4e28
79065 },
79066 pubKeyHash: 0x6f,
79067 scriptHash: 0xc4,
79068 wif: 0xef
79069 };
79070
79071 bitcoinjs.bitcoin.networks.litecoin.p2wpkhInP2sh = {
79072 baseNetwork: "litecoin",
79073 messagePrefix: '\x19Litecoin Signed Message:\n',
79074 bip32: {
79075 public: 0x01b26ef6,
79076 private: 0x01b26792
79077 },
79078 pubKeyHash: 0x30,
79079 scriptHash: 0x32,
79080 wif: 0xb0
79081 };
79082
79083 })();
79084 </script>
79085 <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){
79086 (function (global){
79087 'use strict';
79088
79089 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
79090 // original notice:
79091
79092 /*!
79093 * The buffer module from node.js, for the browser.
79094 *
79095 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
79096 * @license MIT
79097 */
79098 function compare(a, b) {
79099 if (a === b) {
79100 return 0;
79101 }
79102
79103 var x = a.length;
79104 var y = b.length;
79105
79106 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
79107 if (a[i] !== b[i]) {
79108 x = a[i];
79109 y = b[i];
79110 break;
79111 }
79112 }
79113
79114 if (x < y) {
79115 return -1;
79116 }
79117 if (y < x) {
79118 return 1;
79119 }
79120 return 0;
79121 }
79122 function isBuffer(b) {
79123 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
79124 return global.Buffer.isBuffer(b);
79125 }
79126 return !!(b != null && b._isBuffer);
79127 }
79128
79129 // based on node assert, original notice:
79130
79131 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
79132 //
79133 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
79134 //
79135 // Originally from narwhal.js (http://narwhaljs.org)
79136 // Copyright (c) 2009 Thomas Robinson <280north.com>
79137 //
79138 // Permission is hereby granted, free of charge, to any person obtaining a copy
79139 // of this software and associated documentation files (the 'Software'), to
79140 // deal in the Software without restriction, including without limitation the
79141 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
79142 // sell copies of the Software, and to permit persons to whom the Software is
79143 // furnished to do so, subject to the following conditions:
79144 //
79145 // The above copyright notice and this permission notice shall be included in
79146 // all copies or substantial portions of the Software.
79147 //
79148 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
79149 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
79150 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
79151 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
79152 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
79153 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
79154
79155 var util = require('util/');
79156 var hasOwn = Object.prototype.hasOwnProperty;
79157 var pSlice = Array.prototype.slice;
79158 var functionsHaveNames = (function () {
79159 return function foo() {}.name === 'foo';
79160 }());
79161 function pToString (obj) {
79162 return Object.prototype.toString.call(obj);
79163 }
79164 function isView(arrbuf) {
79165 if (isBuffer(arrbuf)) {
79166 return false;
79167 }
79168 if (typeof global.ArrayBuffer !== 'function') {
79169 return false;
79170 }
79171 if (typeof ArrayBuffer.isView === 'function') {
79172 return ArrayBuffer.isView(arrbuf);
79173 }
79174 if (!arrbuf) {
79175 return false;
79176 }
79177 if (arrbuf instanceof DataView) {
79178 return true;
79179 }
79180 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
79181 return true;
79182 }
79183 return false;
79184 }
79185 // 1. The assert module provides functions that throw
79186 // AssertionError's when particular conditions are not met. The
79187 // assert module must conform to the following interface.
79188
79189 var assert = module.exports = ok;
79190
79191 // 2. The AssertionError is defined in assert.
79192 // new assert.AssertionError({ message: message,
79193 // actual: actual,
79194 // expected: expected })
79195
79196 var regex = /\s*function\s+([^\(\s]*)\s*/;
79197 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
79198 function getName(func) {
79199 if (!util.isFunction(func)) {
79200 return;
79201 }
79202 if (functionsHaveNames) {
79203 return func.name;
79204 }
79205 var str = func.toString();
79206 var match = str.match(regex);
79207 return match && match[1];
79208 }
79209 assert.AssertionError = function AssertionError(options) {
79210 this.name = 'AssertionError';
79211 this.actual = options.actual;
79212 this.expected = options.expected;
79213 this.operator = options.operator;
79214 if (options.message) {
79215 this.message = options.message;
79216 this.generatedMessage = false;
79217 } else {
79218 this.message = getMessage(this);
79219 this.generatedMessage = true;
79220 }
79221 var stackStartFunction = options.stackStartFunction || fail;
79222 if (Error.captureStackTrace) {
79223 Error.captureStackTrace(this, stackStartFunction);
79224 } else {
79225 // non v8 browsers so we can have a stacktrace
79226 var err = new Error();
79227 if (err.stack) {
79228 var out = err.stack;
79229
79230 // try to strip useless frames
79231 var fn_name = getName(stackStartFunction);
79232 var idx = out.indexOf('\n' + fn_name);
79233 if (idx >= 0) {
79234 // once we have located the function frame
79235 // we need to strip out everything before it (and its line)
79236 var next_line = out.indexOf('\n', idx + 1);
79237 out = out.substring(next_line + 1);
79238 }
79239
79240 this.stack = out;
79241 }
79242 }
79243 };
79244
79245 // assert.AssertionError instanceof Error
79246 util.inherits(assert.AssertionError, Error);
79247
79248 function truncate(s, n) {
79249 if (typeof s === 'string') {
79250 return s.length < n ? s : s.slice(0, n);
79251 } else {
79252 return s;
79253 }
79254 }
79255 function inspect(something) {
79256 if (functionsHaveNames || !util.isFunction(something)) {
79257 return util.inspect(something);
79258 }
79259 var rawname = getName(something);
79260 var name = rawname ? ': ' + rawname : '';
79261 return '[Function' + name + ']';
79262 }
79263 function getMessage(self) {
79264 return truncate(inspect(self.actual), 128) + ' ' +
79265 self.operator + ' ' +
79266 truncate(inspect(self.expected), 128);
79267 }
79268
79269 // At present only the three keys mentioned above are used and
79270 // understood by the spec. Implementations or sub modules can pass
79271 // other keys to the AssertionError's constructor - they will be
79272 // ignored.
79273
79274 // 3. All of the following functions must throw an AssertionError
79275 // when a corresponding condition is not met, with a message that
79276 // may be undefined if not provided. All assertion methods provide
79277 // both the actual and expected values to the assertion error for
79278 // display purposes.
79279
79280 function fail(actual, expected, message, operator, stackStartFunction) {
79281 throw new assert.AssertionError({
79282 message: message,
79283 actual: actual,
79284 expected: expected,
79285 operator: operator,
79286 stackStartFunction: stackStartFunction
79287 });
79288 }
79289
79290 // EXTENSION! allows for well behaved errors defined elsewhere.
79291 assert.fail = fail;
79292
79293 // 4. Pure assertion tests whether a value is truthy, as determined
79294 // by !!guard.
79295 // assert.ok(guard, message_opt);
79296 // This statement is equivalent to assert.equal(true, !!guard,
79297 // message_opt);. To test strictly for the value true, use
79298 // assert.strictEqual(true, guard, message_opt);.
79299
79300 function ok(value, message) {
79301 if (!value) fail(value, true, message, '==', assert.ok);
79302 }
79303 assert.ok = ok;
79304
79305 // 5. The equality assertion tests shallow, coercive equality with
79306 // ==.
79307 // assert.equal(actual, expected, message_opt);
79308
79309 assert.equal = function equal(actual, expected, message) {
79310 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
79311 };
79312
79313 // 6. The non-equality assertion tests for whether two objects are not equal
79314 // with != assert.notEqual(actual, expected, message_opt);
79315
79316 assert.notEqual = function notEqual(actual, expected, message) {
79317 if (actual == expected) {
79318 fail(actual, expected, message, '!=', assert.notEqual);
79319 }
79320 };
79321
79322 // 7. The equivalence assertion tests a deep equality relation.
79323 // assert.deepEqual(actual, expected, message_opt);
79324
79325 assert.deepEqual = function deepEqual(actual, expected, message) {
79326 if (!_deepEqual(actual, expected, false)) {
79327 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
79328 }
79329 };
79330
79331 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
79332 if (!_deepEqual(actual, expected, true)) {
79333 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
79334 }
79335 };
79336
79337 function _deepEqual(actual, expected, strict, memos) {
79338 // 7.1. All identical values are equivalent, as determined by ===.
79339 if (actual === expected) {
79340 return true;
79341 } else if (isBuffer(actual) && isBuffer(expected)) {
79342 return compare(actual, expected) === 0;
79343
79344 // 7.2. If the expected value is a Date object, the actual value is
79345 // equivalent if it is also a Date object that refers to the same time.
79346 } else if (util.isDate(actual) && util.isDate(expected)) {
79347 return actual.getTime() === expected.getTime();
79348
79349 // 7.3 If the expected value is a RegExp object, the actual value is
79350 // equivalent if it is also a RegExp object with the same source and
79351 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
79352 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
79353 return actual.source === expected.source &&
79354 actual.global === expected.global &&
79355 actual.multiline === expected.multiline &&
79356 actual.lastIndex === expected.lastIndex &&
79357 actual.ignoreCase === expected.ignoreCase;
79358
79359 // 7.4. Other pairs that do not both pass typeof value == 'object',
79360 // equivalence is determined by ==.
79361 } else if ((actual === null || typeof actual !== 'object') &&
79362 (expected === null || typeof expected !== 'object')) {
79363 return strict ? actual === expected : actual == expected;
79364
79365 // If both values are instances of typed arrays, wrap their underlying
79366 // ArrayBuffers in a Buffer each to increase performance
79367 // This optimization requires the arrays to have the same type as checked by
79368 // Object.prototype.toString (aka pToString). Never perform binary
79369 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
79370 // bit patterns are not identical.
79371 } else if (isView(actual) && isView(expected) &&
79372 pToString(actual) === pToString(expected) &&
79373 !(actual instanceof Float32Array ||
79374 actual instanceof Float64Array)) {
79375 return compare(new Uint8Array(actual.buffer),
79376 new Uint8Array(expected.buffer)) === 0;
79377
79378 // 7.5 For all other Object pairs, including Array objects, equivalence is
79379 // determined by having the same number of owned properties (as verified
79380 // with Object.prototype.hasOwnProperty.call), the same set of keys
79381 // (although not necessarily the same order), equivalent values for every
79382 // corresponding key, and an identical 'prototype' property. Note: this
79383 // accounts for both named and indexed properties on Arrays.
79384 } else if (isBuffer(actual) !== isBuffer(expected)) {
79385 return false;
79386 } else {
79387 memos = memos || {actual: [], expected: []};
79388
79389 var actualIndex = memos.actual.indexOf(actual);
79390 if (actualIndex !== -1) {
79391 if (actualIndex === memos.expected.indexOf(expected)) {
79392 return true;
79393 }
79394 }
79395
79396 memos.actual.push(actual);
79397 memos.expected.push(expected);
79398
79399 return objEquiv(actual, expected, strict, memos);
79400 }
79401 }
79402
79403 function isArguments(object) {
79404 return Object.prototype.toString.call(object) == '[object Arguments]';
79405 }
79406
79407 function objEquiv(a, b, strict, actualVisitedObjects) {
79408 if (a === null || a === undefined || b === null || b === undefined)
79409 return false;
79410 // if one is a primitive, the other must be same
79411 if (util.isPrimitive(a) || util.isPrimitive(b))
79412 return a === b;
79413 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
79414 return false;
79415 var aIsArgs = isArguments(a);
79416 var bIsArgs = isArguments(b);
79417 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
79418 return false;
79419 if (aIsArgs) {
79420 a = pSlice.call(a);
79421 b = pSlice.call(b);
79422 return _deepEqual(a, b, strict);
79423 }
79424 var ka = objectKeys(a);
79425 var kb = objectKeys(b);
79426 var key, i;
79427 // having the same number of owned properties (keys incorporates
79428 // hasOwnProperty)
79429 if (ka.length !== kb.length)
79430 return false;
79431 //the same set of keys (although not necessarily the same order),
79432 ka.sort();
79433 kb.sort();
79434 //~~~cheap key test
79435 for (i = ka.length - 1; i >= 0; i--) {
79436 if (ka[i] !== kb[i])
79437 return false;
79438 }
79439 //equivalent values for every corresponding key, and
79440 //~~~possibly expensive deep test
79441 for (i = ka.length - 1; i >= 0; i--) {
79442 key = ka[i];
79443 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
79444 return false;
79445 }
79446 return true;
79447 }
79448
79449 // 8. The non-equivalence assertion tests for any deep inequality.
79450 // assert.notDeepEqual(actual, expected, message_opt);
79451
79452 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
79453 if (_deepEqual(actual, expected, false)) {
79454 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
79455 }
79456 };
79457
79458 assert.notDeepStrictEqual = notDeepStrictEqual;
79459 function notDeepStrictEqual(actual, expected, message) {
79460 if (_deepEqual(actual, expected, true)) {
79461 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
79462 }
79463 }
79464
79465
79466 // 9. The strict equality assertion tests strict equality, as determined by ===.
79467 // assert.strictEqual(actual, expected, message_opt);
79468
79469 assert.strictEqual = function strictEqual(actual, expected, message) {
79470 if (actual !== expected) {
79471 fail(actual, expected, message, '===', assert.strictEqual);
79472 }
79473 };
79474
79475 // 10. The strict non-equality assertion tests for strict inequality, as
79476 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
79477
79478 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
79479 if (actual === expected) {
79480 fail(actual, expected, message, '!==', assert.notStrictEqual);
79481 }
79482 };
79483
79484 function expectedException(actual, expected) {
79485 if (!actual || !expected) {
79486 return false;
79487 }
79488
79489 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
79490 return expected.test(actual);
79491 }
79492
79493 try {
79494 if (actual instanceof expected) {
79495 return true;
79496 }
79497 } catch (e) {
79498 // Ignore. The instanceof check doesn't work for arrow functions.
79499 }
79500
79501 if (Error.isPrototypeOf(expected)) {
79502 return false;
79503 }
79504
79505 return expected.call({}, actual) === true;
79506 }
79507
79508 function _tryBlock(block) {
79509 var error;
79510 try {
79511 block();
79512 } catch (e) {
79513 error = e;
79514 }
79515 return error;
79516 }
79517
79518 function _throws(shouldThrow, block, expected, message) {
79519 var actual;
79520
79521 if (typeof block !== 'function') {
79522 throw new TypeError('"block" argument must be a function');
79523 }
79524
79525 if (typeof expected === 'string') {
79526 message = expected;
79527 expected = null;
79528 }
79529
79530 actual = _tryBlock(block);
79531
79532 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
79533 (message ? ' ' + message : '.');
79534
79535 if (shouldThrow && !actual) {
79536 fail(actual, expected, 'Missing expected exception' + message);
79537 }
79538
79539 var userProvidedMessage = typeof message === 'string';
79540 var isUnwantedException = !shouldThrow && util.isError(actual);
79541 var isUnexpectedException = !shouldThrow && actual && !expected;
79542
79543 if ((isUnwantedException &&
79544 userProvidedMessage &&
79545 expectedException(actual, expected)) ||
79546 isUnexpectedException) {
79547 fail(actual, expected, 'Got unwanted exception' + message);
79548 }
79549
79550 if ((shouldThrow && actual && expected &&
79551 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
79552 throw actual;
79553 }
79554 }
79555
79556 // 11. Expected to throw an error:
79557 // assert.throws(block, Error_opt, message_opt);
79558
79559 assert.throws = function(block, /*optional*/error, /*optional*/message) {
79560 _throws(true, block, error, message);
79561 };
79562
79563 // EXTENSION! This is annoying to write outside this module.
79564 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
79565 _throws(false, block, error, message);
79566 };
79567
79568 assert.ifError = function(err) { if (err) throw err; };
79569
79570 var objectKeys = Object.keys || function (obj) {
79571 var keys = [];
79572 for (var key in obj) {
79573 if (hasOwn.call(obj, key)) keys.push(key);
79574 }
79575 return keys;
79576 };
79577
79578 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
79579 },{"util/":30}],2:[function(require,module,exports){
79580 'use strict'
79581
79582 exports.byteLength = byteLength
79583 exports.toByteArray = toByteArray
79584 exports.fromByteArray = fromByteArray
79585
79586 var lookup = []
79587 var revLookup = []
79588 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
79589
79590 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
79591 for (var i = 0, len = code.length; i < len; ++i) {
79592 lookup[i] = code[i]
79593 revLookup[code.charCodeAt(i)] = i
79594 }
79595
79596 revLookup['-'.charCodeAt(0)] = 62
79597 revLookup['_'.charCodeAt(0)] = 63
79598
79599 function placeHoldersCount (b64) {
79600 var len = b64.length
79601 if (len % 4 > 0) {
79602 throw new Error('Invalid string. Length must be a multiple of 4')
79603 }
79604
79605 // the number of equal signs (place holders)
79606 // if there are two placeholders, than the two characters before it
79607 // represent one byte
79608 // if there is only one, then the three characters before it represent 2 bytes
79609 // this is just a cheap hack to not do indexOf twice
79610 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
79611 }
79612
79613 function byteLength (b64) {
79614 // base64 is 4/3 + up to two characters of the original data
79615 return b64.length * 3 / 4 - placeHoldersCount(b64)
79616 }
79617
79618 function toByteArray (b64) {
79619 var i, j, l, tmp, placeHolders, arr
79620 var len = b64.length
79621 placeHolders = placeHoldersCount(b64)
79622
79623 arr = new Arr(len * 3 / 4 - placeHolders)
79624
79625 // if there are placeholders, only get up to the last complete 4 chars
79626 l = placeHolders > 0 ? len - 4 : len
79627
79628 var L = 0
79629
79630 for (i = 0, j = 0; i < l; i += 4, j += 3) {
79631 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
79632 arr[L++] = (tmp >> 16) & 0xFF
79633 arr[L++] = (tmp >> 8) & 0xFF
79634 arr[L++] = tmp & 0xFF
79635 }
79636
79637 if (placeHolders === 2) {
79638 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
79639 arr[L++] = tmp & 0xFF
79640 } else if (placeHolders === 1) {
79641 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
79642 arr[L++] = (tmp >> 8) & 0xFF
79643 arr[L++] = tmp & 0xFF
79644 }
79645
79646 return arr
79647 }
79648
79649 function tripletToBase64 (num) {
79650 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
79651 }
79652
79653 function encodeChunk (uint8, start, end) {
79654 var tmp
79655 var output = []
79656 for (var i = start; i < end; i += 3) {
79657 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
79658 output.push(tripletToBase64(tmp))
79659 }
79660 return output.join('')
79661 }
79662
79663 function fromByteArray (uint8) {
79664 var tmp
79665 var len = uint8.length
79666 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
79667 var output = ''
79668 var parts = []
79669 var maxChunkLength = 16383 // must be multiple of 3
79670
79671 // go through the array every three bytes, we'll deal with trailing stuff later
79672 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
79673 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
79674 }
79675
79676 // pad the end with zeros, but make sure to not forget the extra bytes
79677 if (extraBytes === 1) {
79678 tmp = uint8[len - 1]
79679 output += lookup[tmp >> 2]
79680 output += lookup[(tmp << 4) & 0x3F]
79681 output += '=='
79682 } else if (extraBytes === 2) {
79683 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
79684 output += lookup[tmp >> 10]
79685 output += lookup[(tmp >> 4) & 0x3F]
79686 output += lookup[(tmp << 2) & 0x3F]
79687 output += '='
79688 }
79689
79690 parts.push(output)
79691
79692 return parts.join('')
79693 }
79694
79695 },{}],3:[function(require,module,exports){
79696
79697 },{}],4:[function(require,module,exports){
79698 (function (global){
79699 'use strict';
79700
79701 var buffer = require('buffer');
79702 var Buffer = buffer.Buffer;
79703 var SlowBuffer = buffer.SlowBuffer;
79704 var MAX_LEN = buffer.kMaxLength || 2147483647;
79705 exports.alloc = function alloc(size, fill, encoding) {
79706 if (typeof Buffer.alloc === 'function') {
79707 return Buffer.alloc(size, fill, encoding);
79708 }
79709 if (typeof encoding === 'number') {
79710 throw new TypeError('encoding must not be number');
79711 }
79712 if (typeof size !== 'number') {
79713 throw new TypeError('size must be a number');
79714 }
79715 if (size > MAX_LEN) {
79716 throw new RangeError('size is too large');
79717 }
79718 var enc = encoding;
79719 var _fill = fill;
79720 if (_fill === undefined) {
79721 enc = undefined;
79722 _fill = 0;
79723 }
79724 var buf = new Buffer(size);
79725 if (typeof _fill === 'string') {
79726 var fillBuf = new Buffer(_fill, enc);
79727 var flen = fillBuf.length;
79728 var i = -1;
79729 while (++i < size) {
79730 buf[i] = fillBuf[i % flen];
79731 }
79732 } else {
79733 buf.fill(_fill);
79734 }
79735 return buf;
79736 }
79737 exports.allocUnsafe = function allocUnsafe(size) {
79738 if (typeof Buffer.allocUnsafe === 'function') {
79739 return Buffer.allocUnsafe(size);
79740 }
79741 if (typeof size !== 'number') {
79742 throw new TypeError('size must be a number');
79743 }
79744 if (size > MAX_LEN) {
79745 throw new RangeError('size is too large');
79746 }
79747 return new Buffer(size);
79748 }
79749 exports.from = function from(value, encodingOrOffset, length) {
79750 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
79751 return Buffer.from(value, encodingOrOffset, length);
79752 }
79753 if (typeof value === 'number') {
79754 throw new TypeError('"value" argument must not be a number');
79755 }
79756 if (typeof value === 'string') {
79757 return new Buffer(value, encodingOrOffset);
79758 }
79759 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
79760 var offset = encodingOrOffset;
79761 if (arguments.length === 1) {
79762 return new Buffer(value);
79763 }
79764 if (typeof offset === 'undefined') {
79765 offset = 0;
79766 }
79767 var len = length;
79768 if (typeof len === 'undefined') {
79769 len = value.byteLength - offset;
79770 }
79771 if (offset >= value.byteLength) {
79772 throw new RangeError('\'offset\' is out of bounds');
79773 }
79774 if (len > value.byteLength - offset) {
79775 throw new RangeError('\'length\' is out of bounds');
79776 }
79777 return new Buffer(value.slice(offset, offset + len));
79778 }
79779 if (Buffer.isBuffer(value)) {
79780 var out = new Buffer(value.length);
79781 value.copy(out, 0, 0, value.length);
79782 return out;
79783 }
79784 if (value) {
79785 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
79786 return new Buffer(value);
79787 }
79788 if (value.type === 'Buffer' && Array.isArray(value.data)) {
79789 return new Buffer(value.data);
79790 }
79791 }
79792
79793 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
79794 }
79795 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
79796 if (typeof Buffer.allocUnsafeSlow === 'function') {
79797 return Buffer.allocUnsafeSlow(size);
79798 }
79799 if (typeof size !== 'number') {
79800 throw new TypeError('size must be a number');
79801 }
79802 if (size >= MAX_LEN) {
79803 throw new RangeError('size is too large');
79804 }
79805 return new SlowBuffer(size);
79806 }
79807
79808 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
79809 },{"buffer":5}],5:[function(require,module,exports){
79810 /*!
79811 * The buffer module from node.js, for the browser.
79812 *
79813 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
79814 * @license MIT
79815 */
79816 /* eslint-disable no-proto */
79817
79818 'use strict'
79819
79820 var base64 = require('base64-js')
79821 var ieee754 = require('ieee754')
79822
79823 exports.Buffer = Buffer
79824 exports.SlowBuffer = SlowBuffer
79825 exports.INSPECT_MAX_BYTES = 50
79826
79827 var K_MAX_LENGTH = 0x7fffffff
79828 exports.kMaxLength = K_MAX_LENGTH
79829
79830 /**
79831 * If `Buffer.TYPED_ARRAY_SUPPORT`:
79832 * === true Use Uint8Array implementation (fastest)
79833 * === false Print warning and recommend using `buffer` v4.x which has an Object
79834 * implementation (most compatible, even IE6)
79835 *
79836 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
79837 * Opera 11.6+, iOS 4.2+.
79838 *
79839 * We report that the browser does not support typed arrays if the are not subclassable
79840 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
79841 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
79842 * for __proto__ and has a buggy typed array implementation.
79843 */
79844 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
79845
79846 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
79847 typeof console.error === 'function') {
79848 console.error(
79849 'This browser lacks typed array (Uint8Array) support which is required by ' +
79850 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
79851 )
79852 }
79853
79854 function typedArraySupport () {
79855 // Can typed array instances can be augmented?
79856 try {
79857 var arr = new Uint8Array(1)
79858 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
79859 return arr.foo() === 42
79860 } catch (e) {
79861 return false
79862 }
79863 }
79864
79865 function createBuffer (length) {
79866 if (length > K_MAX_LENGTH) {
79867 throw new RangeError('Invalid typed array length')
79868 }
79869 // Return an augmented `Uint8Array` instance
79870 var buf = new Uint8Array(length)
79871 buf.__proto__ = Buffer.prototype
79872 return buf
79873 }
79874
79875 /**
79876 * The Buffer constructor returns instances of `Uint8Array` that have their
79877 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
79878 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
79879 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
79880 * returns a single octet.
79881 *
79882 * The `Uint8Array` prototype remains unmodified.
79883 */
79884
79885 function Buffer (arg, encodingOrOffset, length) {
79886 // Common case.
79887 if (typeof arg === 'number') {
79888 if (typeof encodingOrOffset === 'string') {
79889 throw new Error(
79890 'If encoding is specified then the first argument must be a string'
79891 )
79892 }
79893 return allocUnsafe(arg)
79894 }
79895 return from(arg, encodingOrOffset, length)
79896 }
79897
79898 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
79899 if (typeof Symbol !== 'undefined' && Symbol.species &&
79900 Buffer[Symbol.species] === Buffer) {
79901 Object.defineProperty(Buffer, Symbol.species, {
79902 value: null,
79903 configurable: true,
79904 enumerable: false,
79905 writable: false
79906 })
79907 }
79908
79909 Buffer.poolSize = 8192 // not used by this implementation
79910
79911 function from (value, encodingOrOffset, length) {
79912 if (typeof value === 'number') {
79913 throw new TypeError('"value" argument must not be a number')
79914 }
79915
79916 if (value instanceof ArrayBuffer) {
79917 return fromArrayBuffer(value, encodingOrOffset, length)
79918 }
79919
79920 if (typeof value === 'string') {
79921 return fromString(value, encodingOrOffset)
79922 }
79923
79924 return fromObject(value)
79925 }
79926
79927 /**
79928 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
79929 * if value is a number.
79930 * Buffer.from(str[, encoding])
79931 * Buffer.from(array)
79932 * Buffer.from(buffer)
79933 * Buffer.from(arrayBuffer[, byteOffset[, length]])
79934 **/
79935 Buffer.from = function (value, encodingOrOffset, length) {
79936 return from(value, encodingOrOffset, length)
79937 }
79938
79939 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
79940 // https://github.com/feross/buffer/pull/148
79941 Buffer.prototype.__proto__ = Uint8Array.prototype
79942 Buffer.__proto__ = Uint8Array
79943
79944 function assertSize (size) {
79945 if (typeof size !== 'number') {
79946 throw new TypeError('"size" argument must be a number')
79947 } else if (size < 0) {
79948 throw new RangeError('"size" argument must not be negative')
79949 }
79950 }
79951
79952 function alloc (size, fill, encoding) {
79953 assertSize(size)
79954 if (size <= 0) {
79955 return createBuffer(size)
79956 }
79957 if (fill !== undefined) {
79958 // Only pay attention to encoding if it's a string. This
79959 // prevents accidentally sending in a number that would
79960 // be interpretted as a start offset.
79961 return typeof encoding === 'string'
79962 ? createBuffer(size).fill(fill, encoding)
79963 : createBuffer(size).fill(fill)
79964 }
79965 return createBuffer(size)
79966 }
79967
79968 /**
79969 * Creates a new filled Buffer instance.
79970 * alloc(size[, fill[, encoding]])
79971 **/
79972 Buffer.alloc = function (size, fill, encoding) {
79973 return alloc(size, fill, encoding)
79974 }
79975
79976 function allocUnsafe (size) {
79977 assertSize(size)
79978 return createBuffer(size < 0 ? 0 : checked(size) | 0)
79979 }
79980
79981 /**
79982 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
79983 * */
79984 Buffer.allocUnsafe = function (size) {
79985 return allocUnsafe(size)
79986 }
79987 /**
79988 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
79989 */
79990 Buffer.allocUnsafeSlow = function (size) {
79991 return allocUnsafe(size)
79992 }
79993
79994 function fromString (string, encoding) {
79995 if (typeof encoding !== 'string' || encoding === '') {
79996 encoding = 'utf8'
79997 }
79998
79999 if (!Buffer.isEncoding(encoding)) {
80000 throw new TypeError('"encoding" must be a valid string encoding')
80001 }
80002
80003 var length = byteLength(string, encoding) | 0
80004 var buf = createBuffer(length)
80005
80006 var actual = buf.write(string, encoding)
80007
80008 if (actual !== length) {
80009 // Writing a hex string, for example, that contains invalid characters will
80010 // cause everything after the first invalid character to be ignored. (e.g.
80011 // 'abxxcd' will be treated as 'ab')
80012 buf = buf.slice(0, actual)
80013 }
80014
80015 return buf
80016 }
80017
80018 function fromArrayLike (array) {
80019 var length = array.length < 0 ? 0 : checked(array.length) | 0
80020 var buf = createBuffer(length)
80021 for (var i = 0; i < length; i += 1) {
80022 buf[i] = array[i] & 255
80023 }
80024 return buf
80025 }
80026
80027 function fromArrayBuffer (array, byteOffset, length) {
80028 if (byteOffset < 0 || array.byteLength < byteOffset) {
80029 throw new RangeError('\'offset\' is out of bounds')
80030 }
80031
80032 if (array.byteLength < byteOffset + (length || 0)) {
80033 throw new RangeError('\'length\' is out of bounds')
80034 }
80035
80036 var buf
80037 if (byteOffset === undefined && length === undefined) {
80038 buf = new Uint8Array(array)
80039 } else if (length === undefined) {
80040 buf = new Uint8Array(array, byteOffset)
80041 } else {
80042 buf = new Uint8Array(array, byteOffset, length)
80043 }
80044
80045 // Return an augmented `Uint8Array` instance
80046 buf.__proto__ = Buffer.prototype
80047 return buf
80048 }
80049
80050 function fromObject (obj) {
80051 if (Buffer.isBuffer(obj)) {
80052 var len = checked(obj.length) | 0
80053 var buf = createBuffer(len)
80054
80055 if (buf.length === 0) {
80056 return buf
80057 }
80058
80059 obj.copy(buf, 0, 0, len)
80060 return buf
80061 }
80062
80063 if (obj) {
80064 if (ArrayBuffer.isView(obj) || 'length' in obj) {
80065 if (typeof obj.length !== 'number' || isnan(obj.length)) {
80066 return createBuffer(0)
80067 }
80068 return fromArrayLike(obj)
80069 }
80070
80071 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
80072 return fromArrayLike(obj.data)
80073 }
80074 }
80075
80076 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
80077 }
80078
80079 function checked (length) {
80080 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
80081 // length is NaN (which is otherwise coerced to zero.)
80082 if (length >= K_MAX_LENGTH) {
80083 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
80084 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
80085 }
80086 return length | 0
80087 }
80088
80089 function SlowBuffer (length) {
80090 if (+length != length) { // eslint-disable-line eqeqeq
80091 length = 0
80092 }
80093 return Buffer.alloc(+length)
80094 }
80095
80096 Buffer.isBuffer = function isBuffer (b) {
80097 return b != null && b._isBuffer === true
80098 }
80099
80100 Buffer.compare = function compare (a, b) {
80101 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
80102 throw new TypeError('Arguments must be Buffers')
80103 }
80104
80105 if (a === b) return 0
80106
80107 var x = a.length
80108 var y = b.length
80109
80110 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
80111 if (a[i] !== b[i]) {
80112 x = a[i]
80113 y = b[i]
80114 break
80115 }
80116 }
80117
80118 if (x < y) return -1
80119 if (y < x) return 1
80120 return 0
80121 }
80122
80123 Buffer.isEncoding = function isEncoding (encoding) {
80124 switch (String(encoding).toLowerCase()) {
80125 case 'hex':
80126 case 'utf8':
80127 case 'utf-8':
80128 case 'ascii':
80129 case 'latin1':
80130 case 'binary':
80131 case 'base64':
80132 case 'ucs2':
80133 case 'ucs-2':
80134 case 'utf16le':
80135 case 'utf-16le':
80136 return true
80137 default:
80138 return false
80139 }
80140 }
80141
80142 Buffer.concat = function concat (list, length) {
80143 if (!Array.isArray(list)) {
80144 throw new TypeError('"list" argument must be an Array of Buffers')
80145 }
80146
80147 if (list.length === 0) {
80148 return Buffer.alloc(0)
80149 }
80150
80151 var i
80152 if (length === undefined) {
80153 length = 0
80154 for (i = 0; i < list.length; ++i) {
80155 length += list[i].length
80156 }
80157 }
80158
80159 var buffer = Buffer.allocUnsafe(length)
80160 var pos = 0
80161 for (i = 0; i < list.length; ++i) {
80162 var buf = list[i]
80163 if (!Buffer.isBuffer(buf)) {
80164 throw new TypeError('"list" argument must be an Array of Buffers')
80165 }
80166 buf.copy(buffer, pos)
80167 pos += buf.length
80168 }
80169 return buffer
80170 }
80171
80172 function byteLength (string, encoding) {
80173 if (Buffer.isBuffer(string)) {
80174 return string.length
80175 }
80176 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
80177 return string.byteLength
80178 }
80179 if (typeof string !== 'string') {
80180 string = '' + string
80181 }
80182
80183 var len = string.length
80184 if (len === 0) return 0
80185
80186 // Use a for loop to avoid recursion
80187 var loweredCase = false
80188 for (;;) {
80189 switch (encoding) {
80190 case 'ascii':
80191 case 'latin1':
80192 case 'binary':
80193 return len
80194 case 'utf8':
80195 case 'utf-8':
80196 case undefined:
80197 return utf8ToBytes(string).length
80198 case 'ucs2':
80199 case 'ucs-2':
80200 case 'utf16le':
80201 case 'utf-16le':
80202 return len * 2
80203 case 'hex':
80204 return len >>> 1
80205 case 'base64':
80206 return base64ToBytes(string).length
80207 default:
80208 if (loweredCase) return utf8ToBytes(string).length // assume utf8
80209 encoding = ('' + encoding).toLowerCase()
80210 loweredCase = true
80211 }
80212 }
80213 }
80214 Buffer.byteLength = byteLength
80215
80216 function slowToString (encoding, start, end) {
80217 var loweredCase = false
80218
80219 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
80220 // property of a typed array.
80221
80222 // This behaves neither like String nor Uint8Array in that we set start/end
80223 // to their upper/lower bounds if the value passed is out of range.
80224 // undefined is handled specially as per ECMA-262 6th Edition,
80225 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
80226 if (start === undefined || start < 0) {
80227 start = 0
80228 }
80229 // Return early if start > this.length. Done here to prevent potential uint32
80230 // coercion fail below.
80231 if (start > this.length) {
80232 return ''
80233 }
80234
80235 if (end === undefined || end > this.length) {
80236 end = this.length
80237 }
80238
80239 if (end <= 0) {
80240 return ''
80241 }
80242
80243 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
80244 end >>>= 0
80245 start >>>= 0
80246
80247 if (end <= start) {
80248 return ''
80249 }
80250
80251 if (!encoding) encoding = 'utf8'
80252
80253 while (true) {
80254 switch (encoding) {
80255 case 'hex':
80256 return hexSlice(this, start, end)
80257
80258 case 'utf8':
80259 case 'utf-8':
80260 return utf8Slice(this, start, end)
80261
80262 case 'ascii':
80263 return asciiSlice(this, start, end)
80264
80265 case 'latin1':
80266 case 'binary':
80267 return latin1Slice(this, start, end)
80268
80269 case 'base64':
80270 return base64Slice(this, start, end)
80271
80272 case 'ucs2':
80273 case 'ucs-2':
80274 case 'utf16le':
80275 case 'utf-16le':
80276 return utf16leSlice(this, start, end)
80277
80278 default:
80279 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
80280 encoding = (encoding + '').toLowerCase()
80281 loweredCase = true
80282 }
80283 }
80284 }
80285
80286 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
80287 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
80288 // reliably in a browserify context because there could be multiple different
80289 // copies of the 'buffer' package in use. This method works even for Buffer
80290 // instances that were created from another copy of the `buffer` package.
80291 // See: https://github.com/feross/buffer/issues/154
80292 Buffer.prototype._isBuffer = true
80293
80294 function swap (b, n, m) {
80295 var i = b[n]
80296 b[n] = b[m]
80297 b[m] = i
80298 }
80299
80300 Buffer.prototype.swap16 = function swap16 () {
80301 var len = this.length
80302 if (len % 2 !== 0) {
80303 throw new RangeError('Buffer size must be a multiple of 16-bits')
80304 }
80305 for (var i = 0; i < len; i += 2) {
80306 swap(this, i, i + 1)
80307 }
80308 return this
80309 }
80310
80311 Buffer.prototype.swap32 = function swap32 () {
80312 var len = this.length
80313 if (len % 4 !== 0) {
80314 throw new RangeError('Buffer size must be a multiple of 32-bits')
80315 }
80316 for (var i = 0; i < len; i += 4) {
80317 swap(this, i, i + 3)
80318 swap(this, i + 1, i + 2)
80319 }
80320 return this
80321 }
80322
80323 Buffer.prototype.swap64 = function swap64 () {
80324 var len = this.length
80325 if (len % 8 !== 0) {
80326 throw new RangeError('Buffer size must be a multiple of 64-bits')
80327 }
80328 for (var i = 0; i < len; i += 8) {
80329 swap(this, i, i + 7)
80330 swap(this, i + 1, i + 6)
80331 swap(this, i + 2, i + 5)
80332 swap(this, i + 3, i + 4)
80333 }
80334 return this
80335 }
80336
80337 Buffer.prototype.toString = function toString () {
80338 var length = this.length
80339 if (length === 0) return ''
80340 if (arguments.length === 0) return utf8Slice(this, 0, length)
80341 return slowToString.apply(this, arguments)
80342 }
80343
80344 Buffer.prototype.equals = function equals (b) {
80345 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
80346 if (this === b) return true
80347 return Buffer.compare(this, b) === 0
80348 }
80349
80350 Buffer.prototype.inspect = function inspect () {
80351 var str = ''
80352 var max = exports.INSPECT_MAX_BYTES
80353 if (this.length > 0) {
80354 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
80355 if (this.length > max) str += ' ... '
80356 }
80357 return '<Buffer ' + str + '>'
80358 }
80359
80360 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
80361 if (!Buffer.isBuffer(target)) {
80362 throw new TypeError('Argument must be a Buffer')
80363 }
80364
80365 if (start === undefined) {
80366 start = 0
80367 }
80368 if (end === undefined) {
80369 end = target ? target.length : 0
80370 }
80371 if (thisStart === undefined) {
80372 thisStart = 0
80373 }
80374 if (thisEnd === undefined) {
80375 thisEnd = this.length
80376 }
80377
80378 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
80379 throw new RangeError('out of range index')
80380 }
80381
80382 if (thisStart >= thisEnd && start >= end) {
80383 return 0
80384 }
80385 if (thisStart >= thisEnd) {
80386 return -1
80387 }
80388 if (start >= end) {
80389 return 1
80390 }
80391
80392 start >>>= 0
80393 end >>>= 0
80394 thisStart >>>= 0
80395 thisEnd >>>= 0
80396
80397 if (this === target) return 0
80398
80399 var x = thisEnd - thisStart
80400 var y = end - start
80401 var len = Math.min(x, y)
80402
80403 var thisCopy = this.slice(thisStart, thisEnd)
80404 var targetCopy = target.slice(start, end)
80405
80406 for (var i = 0; i < len; ++i) {
80407 if (thisCopy[i] !== targetCopy[i]) {
80408 x = thisCopy[i]
80409 y = targetCopy[i]
80410 break
80411 }
80412 }
80413
80414 if (x < y) return -1
80415 if (y < x) return 1
80416 return 0
80417 }
80418
80419 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
80420 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
80421 //
80422 // Arguments:
80423 // - buffer - a Buffer to search
80424 // - val - a string, Buffer, or number
80425 // - byteOffset - an index into `buffer`; will be clamped to an int32
80426 // - encoding - an optional encoding, relevant is val is a string
80427 // - dir - true for indexOf, false for lastIndexOf
80428 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
80429 // Empty buffer means no match
80430 if (buffer.length === 0) return -1
80431
80432 // Normalize byteOffset
80433 if (typeof byteOffset === 'string') {
80434 encoding = byteOffset
80435 byteOffset = 0
80436 } else if (byteOffset > 0x7fffffff) {
80437 byteOffset = 0x7fffffff
80438 } else if (byteOffset < -0x80000000) {
80439 byteOffset = -0x80000000
80440 }
80441 byteOffset = +byteOffset // Coerce to Number.
80442 if (isNaN(byteOffset)) {
80443 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
80444 byteOffset = dir ? 0 : (buffer.length - 1)
80445 }
80446
80447 // Normalize byteOffset: negative offsets start from the end of the buffer
80448 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
80449 if (byteOffset >= buffer.length) {
80450 if (dir) return -1
80451 else byteOffset = buffer.length - 1
80452 } else if (byteOffset < 0) {
80453 if (dir) byteOffset = 0
80454 else return -1
80455 }
80456
80457 // Normalize val
80458 if (typeof val === 'string') {
80459 val = Buffer.from(val, encoding)
80460 }
80461
80462 // Finally, search either indexOf (if dir is true) or lastIndexOf
80463 if (Buffer.isBuffer(val)) {
80464 // Special case: looking for empty string/buffer always fails
80465 if (val.length === 0) {
80466 return -1
80467 }
80468 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
80469 } else if (typeof val === 'number') {
80470 val = val & 0xFF // Search for a byte value [0-255]
80471 if (typeof Uint8Array.prototype.indexOf === 'function') {
80472 if (dir) {
80473 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
80474 } else {
80475 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
80476 }
80477 }
80478 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
80479 }
80480
80481 throw new TypeError('val must be string, number or Buffer')
80482 }
80483
80484 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
80485 var indexSize = 1
80486 var arrLength = arr.length
80487 var valLength = val.length
80488
80489 if (encoding !== undefined) {
80490 encoding = String(encoding).toLowerCase()
80491 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
80492 encoding === 'utf16le' || encoding === 'utf-16le') {
80493 if (arr.length < 2 || val.length < 2) {
80494 return -1
80495 }
80496 indexSize = 2
80497 arrLength /= 2
80498 valLength /= 2
80499 byteOffset /= 2
80500 }
80501 }
80502
80503 function read (buf, i) {
80504 if (indexSize === 1) {
80505 return buf[i]
80506 } else {
80507 return buf.readUInt16BE(i * indexSize)
80508 }
80509 }
80510
80511 var i
80512 if (dir) {
80513 var foundIndex = -1
80514 for (i = byteOffset; i < arrLength; i++) {
80515 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
80516 if (foundIndex === -1) foundIndex = i
80517 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
80518 } else {
80519 if (foundIndex !== -1) i -= i - foundIndex
80520 foundIndex = -1
80521 }
80522 }
80523 } else {
80524 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
80525 for (i = byteOffset; i >= 0; i--) {
80526 var found = true
80527 for (var j = 0; j < valLength; j++) {
80528 if (read(arr, i + j) !== read(val, j)) {
80529 found = false
80530 break
80531 }
80532 }
80533 if (found) return i
80534 }
80535 }
80536
80537 return -1
80538 }
80539
80540 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
80541 return this.indexOf(val, byteOffset, encoding) !== -1
80542 }
80543
80544 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
80545 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
80546 }
80547
80548 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
80549 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
80550 }
80551
80552 function hexWrite (buf, string, offset, length) {
80553 offset = Number(offset) || 0
80554 var remaining = buf.length - offset
80555 if (!length) {
80556 length = remaining
80557 } else {
80558 length = Number(length)
80559 if (length > remaining) {
80560 length = remaining
80561 }
80562 }
80563
80564 // must be an even number of digits
80565 var strLen = string.length
80566 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
80567
80568 if (length > strLen / 2) {
80569 length = strLen / 2
80570 }
80571 for (var i = 0; i < length; ++i) {
80572 var parsed = parseInt(string.substr(i * 2, 2), 16)
80573 if (isNaN(parsed)) return i
80574 buf[offset + i] = parsed
80575 }
80576 return i
80577 }
80578
80579 function utf8Write (buf, string, offset, length) {
80580 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
80581 }
80582
80583 function asciiWrite (buf, string, offset, length) {
80584 return blitBuffer(asciiToBytes(string), buf, offset, length)
80585 }
80586
80587 function latin1Write (buf, string, offset, length) {
80588 return asciiWrite(buf, string, offset, length)
80589 }
80590
80591 function base64Write (buf, string, offset, length) {
80592 return blitBuffer(base64ToBytes(string), buf, offset, length)
80593 }
80594
80595 function ucs2Write (buf, string, offset, length) {
80596 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
80597 }
80598
80599 Buffer.prototype.write = function write (string, offset, length, encoding) {
80600 // Buffer#write(string)
80601 if (offset === undefined) {
80602 encoding = 'utf8'
80603 length = this.length
80604 offset = 0
80605 // Buffer#write(string, encoding)
80606 } else if (length === undefined && typeof offset === 'string') {
80607 encoding = offset
80608 length = this.length
80609 offset = 0
80610 // Buffer#write(string, offset[, length][, encoding])
80611 } else if (isFinite(offset)) {
80612 offset = offset >>> 0
80613 if (isFinite(length)) {
80614 length = length >>> 0
80615 if (encoding === undefined) encoding = 'utf8'
80616 } else {
80617 encoding = length
80618 length = undefined
80619 }
80620 } else {
80621 throw new Error(
80622 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
80623 )
80624 }
80625
80626 var remaining = this.length - offset
80627 if (length === undefined || length > remaining) length = remaining
80628
80629 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
80630 throw new RangeError('Attempt to write outside buffer bounds')
80631 }
80632
80633 if (!encoding) encoding = 'utf8'
80634
80635 var loweredCase = false
80636 for (;;) {
80637 switch (encoding) {
80638 case 'hex':
80639 return hexWrite(this, string, offset, length)
80640
80641 case 'utf8':
80642 case 'utf-8':
80643 return utf8Write(this, string, offset, length)
80644
80645 case 'ascii':
80646 return asciiWrite(this, string, offset, length)
80647
80648 case 'latin1':
80649 case 'binary':
80650 return latin1Write(this, string, offset, length)
80651
80652 case 'base64':
80653 // Warning: maxLength not taken into account in base64Write
80654 return base64Write(this, string, offset, length)
80655
80656 case 'ucs2':
80657 case 'ucs-2':
80658 case 'utf16le':
80659 case 'utf-16le':
80660 return ucs2Write(this, string, offset, length)
80661
80662 default:
80663 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
80664 encoding = ('' + encoding).toLowerCase()
80665 loweredCase = true
80666 }
80667 }
80668 }
80669
80670 Buffer.prototype.toJSON = function toJSON () {
80671 return {
80672 type: 'Buffer',
80673 data: Array.prototype.slice.call(this._arr || this, 0)
80674 }
80675 }
80676
80677 function base64Slice (buf, start, end) {
80678 if (start === 0 && end === buf.length) {
80679 return base64.fromByteArray(buf)
80680 } else {
80681 return base64.fromByteArray(buf.slice(start, end))
80682 }
80683 }
80684
80685 function utf8Slice (buf, start, end) {
80686 end = Math.min(buf.length, end)
80687 var res = []
80688
80689 var i = start
80690 while (i < end) {
80691 var firstByte = buf[i]
80692 var codePoint = null
80693 var bytesPerSequence = (firstByte > 0xEF) ? 4
80694 : (firstByte > 0xDF) ? 3
80695 : (firstByte > 0xBF) ? 2
80696 : 1
80697
80698 if (i + bytesPerSequence <= end) {
80699 var secondByte, thirdByte, fourthByte, tempCodePoint
80700
80701 switch (bytesPerSequence) {
80702 case 1:
80703 if (firstByte < 0x80) {
80704 codePoint = firstByte
80705 }
80706 break
80707 case 2:
80708 secondByte = buf[i + 1]
80709 if ((secondByte & 0xC0) === 0x80) {
80710 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
80711 if (tempCodePoint > 0x7F) {
80712 codePoint = tempCodePoint
80713 }
80714 }
80715 break
80716 case 3:
80717 secondByte = buf[i + 1]
80718 thirdByte = buf[i + 2]
80719 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
80720 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
80721 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
80722 codePoint = tempCodePoint
80723 }
80724 }
80725 break
80726 case 4:
80727 secondByte = buf[i + 1]
80728 thirdByte = buf[i + 2]
80729 fourthByte = buf[i + 3]
80730 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
80731 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
80732 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
80733 codePoint = tempCodePoint
80734 }
80735 }
80736 }
80737 }
80738
80739 if (codePoint === null) {
80740 // we did not generate a valid codePoint so insert a
80741 // replacement char (U+FFFD) and advance only 1 byte
80742 codePoint = 0xFFFD
80743 bytesPerSequence = 1
80744 } else if (codePoint > 0xFFFF) {
80745 // encode to utf16 (surrogate pair dance)
80746 codePoint -= 0x10000
80747 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
80748 codePoint = 0xDC00 | codePoint & 0x3FF
80749 }
80750
80751 res.push(codePoint)
80752 i += bytesPerSequence
80753 }
80754
80755 return decodeCodePointsArray(res)
80756 }
80757
80758 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
80759 // the lowest limit is Chrome, with 0x10000 args.
80760 // We go 1 magnitude less, for safety
80761 var MAX_ARGUMENTS_LENGTH = 0x1000
80762
80763 function decodeCodePointsArray (codePoints) {
80764 var len = codePoints.length
80765 if (len <= MAX_ARGUMENTS_LENGTH) {
80766 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
80767 }
80768
80769 // Decode in chunks to avoid "call stack size exceeded".
80770 var res = ''
80771 var i = 0
80772 while (i < len) {
80773 res += String.fromCharCode.apply(
80774 String,
80775 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
80776 )
80777 }
80778 return res
80779 }
80780
80781 function asciiSlice (buf, start, end) {
80782 var ret = ''
80783 end = Math.min(buf.length, end)
80784
80785 for (var i = start; i < end; ++i) {
80786 ret += String.fromCharCode(buf[i] & 0x7F)
80787 }
80788 return ret
80789 }
80790
80791 function latin1Slice (buf, start, end) {
80792 var ret = ''
80793 end = Math.min(buf.length, end)
80794
80795 for (var i = start; i < end; ++i) {
80796 ret += String.fromCharCode(buf[i])
80797 }
80798 return ret
80799 }
80800
80801 function hexSlice (buf, start, end) {
80802 var len = buf.length
80803
80804 if (!start || start < 0) start = 0
80805 if (!end || end < 0 || end > len) end = len
80806
80807 var out = ''
80808 for (var i = start; i < end; ++i) {
80809 out += toHex(buf[i])
80810 }
80811 return out
80812 }
80813
80814 function utf16leSlice (buf, start, end) {
80815 var bytes = buf.slice(start, end)
80816 var res = ''
80817 for (var i = 0; i < bytes.length; i += 2) {
80818 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
80819 }
80820 return res
80821 }
80822
80823 Buffer.prototype.slice = function slice (start, end) {
80824 var len = this.length
80825 start = ~~start
80826 end = end === undefined ? len : ~~end
80827
80828 if (start < 0) {
80829 start += len
80830 if (start < 0) start = 0
80831 } else if (start > len) {
80832 start = len
80833 }
80834
80835 if (end < 0) {
80836 end += len
80837 if (end < 0) end = 0
80838 } else if (end > len) {
80839 end = len
80840 }
80841
80842 if (end < start) end = start
80843
80844 var newBuf = this.subarray(start, end)
80845 // Return an augmented `Uint8Array` instance
80846 newBuf.__proto__ = Buffer.prototype
80847 return newBuf
80848 }
80849
80850 /*
80851 * Need to make sure that buffer isn't trying to write out of bounds.
80852 */
80853 function checkOffset (offset, ext, length) {
80854 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
80855 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
80856 }
80857
80858 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
80859 offset = offset >>> 0
80860 byteLength = byteLength >>> 0
80861 if (!noAssert) checkOffset(offset, byteLength, this.length)
80862
80863 var val = this[offset]
80864 var mul = 1
80865 var i = 0
80866 while (++i < byteLength && (mul *= 0x100)) {
80867 val += this[offset + i] * mul
80868 }
80869
80870 return val
80871 }
80872
80873 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
80874 offset = offset >>> 0
80875 byteLength = byteLength >>> 0
80876 if (!noAssert) {
80877 checkOffset(offset, byteLength, this.length)
80878 }
80879
80880 var val = this[offset + --byteLength]
80881 var mul = 1
80882 while (byteLength > 0 && (mul *= 0x100)) {
80883 val += this[offset + --byteLength] * mul
80884 }
80885
80886 return val
80887 }
80888
80889 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
80890 offset = offset >>> 0
80891 if (!noAssert) checkOffset(offset, 1, this.length)
80892 return this[offset]
80893 }
80894
80895 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
80896 offset = offset >>> 0
80897 if (!noAssert) checkOffset(offset, 2, this.length)
80898 return this[offset] | (this[offset + 1] << 8)
80899 }
80900
80901 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
80902 offset = offset >>> 0
80903 if (!noAssert) checkOffset(offset, 2, this.length)
80904 return (this[offset] << 8) | this[offset + 1]
80905 }
80906
80907 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
80908 offset = offset >>> 0
80909 if (!noAssert) checkOffset(offset, 4, this.length)
80910
80911 return ((this[offset]) |
80912 (this[offset + 1] << 8) |
80913 (this[offset + 2] << 16)) +
80914 (this[offset + 3] * 0x1000000)
80915 }
80916
80917 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
80918 offset = offset >>> 0
80919 if (!noAssert) checkOffset(offset, 4, this.length)
80920
80921 return (this[offset] * 0x1000000) +
80922 ((this[offset + 1] << 16) |
80923 (this[offset + 2] << 8) |
80924 this[offset + 3])
80925 }
80926
80927 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
80928 offset = offset >>> 0
80929 byteLength = byteLength >>> 0
80930 if (!noAssert) checkOffset(offset, byteLength, this.length)
80931
80932 var val = this[offset]
80933 var mul = 1
80934 var i = 0
80935 while (++i < byteLength && (mul *= 0x100)) {
80936 val += this[offset + i] * mul
80937 }
80938 mul *= 0x80
80939
80940 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
80941
80942 return val
80943 }
80944
80945 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
80946 offset = offset >>> 0
80947 byteLength = byteLength >>> 0
80948 if (!noAssert) checkOffset(offset, byteLength, this.length)
80949
80950 var i = byteLength
80951 var mul = 1
80952 var val = this[offset + --i]
80953 while (i > 0 && (mul *= 0x100)) {
80954 val += this[offset + --i] * mul
80955 }
80956 mul *= 0x80
80957
80958 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
80959
80960 return val
80961 }
80962
80963 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
80964 offset = offset >>> 0
80965 if (!noAssert) checkOffset(offset, 1, this.length)
80966 if (!(this[offset] & 0x80)) return (this[offset])
80967 return ((0xff - this[offset] + 1) * -1)
80968 }
80969
80970 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
80971 offset = offset >>> 0
80972 if (!noAssert) checkOffset(offset, 2, this.length)
80973 var val = this[offset] | (this[offset + 1] << 8)
80974 return (val & 0x8000) ? val | 0xFFFF0000 : val
80975 }
80976
80977 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
80978 offset = offset >>> 0
80979 if (!noAssert) checkOffset(offset, 2, this.length)
80980 var val = this[offset + 1] | (this[offset] << 8)
80981 return (val & 0x8000) ? val | 0xFFFF0000 : val
80982 }
80983
80984 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
80985 offset = offset >>> 0
80986 if (!noAssert) checkOffset(offset, 4, this.length)
80987
80988 return (this[offset]) |
80989 (this[offset + 1] << 8) |
80990 (this[offset + 2] << 16) |
80991 (this[offset + 3] << 24)
80992 }
80993
80994 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
80995 offset = offset >>> 0
80996 if (!noAssert) checkOffset(offset, 4, this.length)
80997
80998 return (this[offset] << 24) |
80999 (this[offset + 1] << 16) |
81000 (this[offset + 2] << 8) |
81001 (this[offset + 3])
81002 }
81003
81004 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
81005 offset = offset >>> 0
81006 if (!noAssert) checkOffset(offset, 4, this.length)
81007 return ieee754.read(this, offset, true, 23, 4)
81008 }
81009
81010 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
81011 offset = offset >>> 0
81012 if (!noAssert) checkOffset(offset, 4, this.length)
81013 return ieee754.read(this, offset, false, 23, 4)
81014 }
81015
81016 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
81017 offset = offset >>> 0
81018 if (!noAssert) checkOffset(offset, 8, this.length)
81019 return ieee754.read(this, offset, true, 52, 8)
81020 }
81021
81022 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
81023 offset = offset >>> 0
81024 if (!noAssert) checkOffset(offset, 8, this.length)
81025 return ieee754.read(this, offset, false, 52, 8)
81026 }
81027
81028 function checkInt (buf, value, offset, ext, max, min) {
81029 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
81030 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
81031 if (offset + ext > buf.length) throw new RangeError('Index out of range')
81032 }
81033
81034 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
81035 value = +value
81036 offset = offset >>> 0
81037 byteLength = byteLength >>> 0
81038 if (!noAssert) {
81039 var maxBytes = Math.pow(2, 8 * byteLength) - 1
81040 checkInt(this, value, offset, byteLength, maxBytes, 0)
81041 }
81042
81043 var mul = 1
81044 var i = 0
81045 this[offset] = value & 0xFF
81046 while (++i < byteLength && (mul *= 0x100)) {
81047 this[offset + i] = (value / mul) & 0xFF
81048 }
81049
81050 return offset + byteLength
81051 }
81052
81053 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
81054 value = +value
81055 offset = offset >>> 0
81056 byteLength = byteLength >>> 0
81057 if (!noAssert) {
81058 var maxBytes = Math.pow(2, 8 * byteLength) - 1
81059 checkInt(this, value, offset, byteLength, maxBytes, 0)
81060 }
81061
81062 var i = byteLength - 1
81063 var mul = 1
81064 this[offset + i] = value & 0xFF
81065 while (--i >= 0 && (mul *= 0x100)) {
81066 this[offset + i] = (value / mul) & 0xFF
81067 }
81068
81069 return offset + byteLength
81070 }
81071
81072 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
81073 value = +value
81074 offset = offset >>> 0
81075 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
81076 this[offset] = (value & 0xff)
81077 return offset + 1
81078 }
81079
81080 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
81081 value = +value
81082 offset = offset >>> 0
81083 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
81084 this[offset] = (value & 0xff)
81085 this[offset + 1] = (value >>> 8)
81086 return offset + 2
81087 }
81088
81089 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
81090 value = +value
81091 offset = offset >>> 0
81092 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
81093 this[offset] = (value >>> 8)
81094 this[offset + 1] = (value & 0xff)
81095 return offset + 2
81096 }
81097
81098 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
81099 value = +value
81100 offset = offset >>> 0
81101 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
81102 this[offset + 3] = (value >>> 24)
81103 this[offset + 2] = (value >>> 16)
81104 this[offset + 1] = (value >>> 8)
81105 this[offset] = (value & 0xff)
81106 return offset + 4
81107 }
81108
81109 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
81110 value = +value
81111 offset = offset >>> 0
81112 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
81113 this[offset] = (value >>> 24)
81114 this[offset + 1] = (value >>> 16)
81115 this[offset + 2] = (value >>> 8)
81116 this[offset + 3] = (value & 0xff)
81117 return offset + 4
81118 }
81119
81120 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
81121 value = +value
81122 offset = offset >>> 0
81123 if (!noAssert) {
81124 var limit = Math.pow(2, (8 * byteLength) - 1)
81125
81126 checkInt(this, value, offset, byteLength, limit - 1, -limit)
81127 }
81128
81129 var i = 0
81130 var mul = 1
81131 var sub = 0
81132 this[offset] = value & 0xFF
81133 while (++i < byteLength && (mul *= 0x100)) {
81134 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
81135 sub = 1
81136 }
81137 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
81138 }
81139
81140 return offset + byteLength
81141 }
81142
81143 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
81144 value = +value
81145 offset = offset >>> 0
81146 if (!noAssert) {
81147 var limit = Math.pow(2, (8 * byteLength) - 1)
81148
81149 checkInt(this, value, offset, byteLength, limit - 1, -limit)
81150 }
81151
81152 var i = byteLength - 1
81153 var mul = 1
81154 var sub = 0
81155 this[offset + i] = value & 0xFF
81156 while (--i >= 0 && (mul *= 0x100)) {
81157 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
81158 sub = 1
81159 }
81160 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
81161 }
81162
81163 return offset + byteLength
81164 }
81165
81166 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
81167 value = +value
81168 offset = offset >>> 0
81169 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
81170 if (value < 0) value = 0xff + value + 1
81171 this[offset] = (value & 0xff)
81172 return offset + 1
81173 }
81174
81175 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
81176 value = +value
81177 offset = offset >>> 0
81178 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
81179 this[offset] = (value & 0xff)
81180 this[offset + 1] = (value >>> 8)
81181 return offset + 2
81182 }
81183
81184 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
81185 value = +value
81186 offset = offset >>> 0
81187 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
81188 this[offset] = (value >>> 8)
81189 this[offset + 1] = (value & 0xff)
81190 return offset + 2
81191 }
81192
81193 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
81194 value = +value
81195 offset = offset >>> 0
81196 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
81197 this[offset] = (value & 0xff)
81198 this[offset + 1] = (value >>> 8)
81199 this[offset + 2] = (value >>> 16)
81200 this[offset + 3] = (value >>> 24)
81201 return offset + 4
81202 }
81203
81204 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
81205 value = +value
81206 offset = offset >>> 0
81207 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
81208 if (value < 0) value = 0xffffffff + value + 1
81209 this[offset] = (value >>> 24)
81210 this[offset + 1] = (value >>> 16)
81211 this[offset + 2] = (value >>> 8)
81212 this[offset + 3] = (value & 0xff)
81213 return offset + 4
81214 }
81215
81216 function checkIEEE754 (buf, value, offset, ext, max, min) {
81217 if (offset + ext > buf.length) throw new RangeError('Index out of range')
81218 if (offset < 0) throw new RangeError('Index out of range')
81219 }
81220
81221 function writeFloat (buf, value, offset, littleEndian, noAssert) {
81222 value = +value
81223 offset = offset >>> 0
81224 if (!noAssert) {
81225 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
81226 }
81227 ieee754.write(buf, value, offset, littleEndian, 23, 4)
81228 return offset + 4
81229 }
81230
81231 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
81232 return writeFloat(this, value, offset, true, noAssert)
81233 }
81234
81235 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
81236 return writeFloat(this, value, offset, false, noAssert)
81237 }
81238
81239 function writeDouble (buf, value, offset, littleEndian, noAssert) {
81240 value = +value
81241 offset = offset >>> 0
81242 if (!noAssert) {
81243 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
81244 }
81245 ieee754.write(buf, value, offset, littleEndian, 52, 8)
81246 return offset + 8
81247 }
81248
81249 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
81250 return writeDouble(this, value, offset, true, noAssert)
81251 }
81252
81253 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
81254 return writeDouble(this, value, offset, false, noAssert)
81255 }
81256
81257 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
81258 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
81259 if (!start) start = 0
81260 if (!end && end !== 0) end = this.length
81261 if (targetStart >= target.length) targetStart = target.length
81262 if (!targetStart) targetStart = 0
81263 if (end > 0 && end < start) end = start
81264
81265 // Copy 0 bytes; we're done
81266 if (end === start) return 0
81267 if (target.length === 0 || this.length === 0) return 0
81268
81269 // Fatal error conditions
81270 if (targetStart < 0) {
81271 throw new RangeError('targetStart out of bounds')
81272 }
81273 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
81274 if (end < 0) throw new RangeError('sourceEnd out of bounds')
81275
81276 // Are we oob?
81277 if (end > this.length) end = this.length
81278 if (target.length - targetStart < end - start) {
81279 end = target.length - targetStart + start
81280 }
81281
81282 var len = end - start
81283 var i
81284
81285 if (this === target && start < targetStart && targetStart < end) {
81286 // descending copy from end
81287 for (i = len - 1; i >= 0; --i) {
81288 target[i + targetStart] = this[i + start]
81289 }
81290 } else if (len < 1000) {
81291 // ascending copy from start
81292 for (i = 0; i < len; ++i) {
81293 target[i + targetStart] = this[i + start]
81294 }
81295 } else {
81296 Uint8Array.prototype.set.call(
81297 target,
81298 this.subarray(start, start + len),
81299 targetStart
81300 )
81301 }
81302
81303 return len
81304 }
81305
81306 // Usage:
81307 // buffer.fill(number[, offset[, end]])
81308 // buffer.fill(buffer[, offset[, end]])
81309 // buffer.fill(string[, offset[, end]][, encoding])
81310 Buffer.prototype.fill = function fill (val, start, end, encoding) {
81311 // Handle string cases:
81312 if (typeof val === 'string') {
81313 if (typeof start === 'string') {
81314 encoding = start
81315 start = 0
81316 end = this.length
81317 } else if (typeof end === 'string') {
81318 encoding = end
81319 end = this.length
81320 }
81321 if (val.length === 1) {
81322 var code = val.charCodeAt(0)
81323 if (code < 256) {
81324 val = code
81325 }
81326 }
81327 if (encoding !== undefined && typeof encoding !== 'string') {
81328 throw new TypeError('encoding must be a string')
81329 }
81330 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
81331 throw new TypeError('Unknown encoding: ' + encoding)
81332 }
81333 } else if (typeof val === 'number') {
81334 val = val & 255
81335 }
81336
81337 // Invalid ranges are not set to a default, so can range check early.
81338 if (start < 0 || this.length < start || this.length < end) {
81339 throw new RangeError('Out of range index')
81340 }
81341
81342 if (end <= start) {
81343 return this
81344 }
81345
81346 start = start >>> 0
81347 end = end === undefined ? this.length : end >>> 0
81348
81349 if (!val) val = 0
81350
81351 var i
81352 if (typeof val === 'number') {
81353 for (i = start; i < end; ++i) {
81354 this[i] = val
81355 }
81356 } else {
81357 var bytes = Buffer.isBuffer(val)
81358 ? val
81359 : new Buffer(val, encoding)
81360 var len = bytes.length
81361 for (i = 0; i < end - start; ++i) {
81362 this[i + start] = bytes[i % len]
81363 }
81364 }
81365
81366 return this
81367 }
81368
81369 // HELPER FUNCTIONS
81370 // ================
81371
81372 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
81373
81374 function base64clean (str) {
81375 // Node strips out invalid characters like \n and \t from the string, base64-js does not
81376 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
81377 // Node converts strings with length < 2 to ''
81378 if (str.length < 2) return ''
81379 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
81380 while (str.length % 4 !== 0) {
81381 str = str + '='
81382 }
81383 return str
81384 }
81385
81386 function stringtrim (str) {
81387 if (str.trim) return str.trim()
81388 return str.replace(/^\s+|\s+$/g, '')
81389 }
81390
81391 function toHex (n) {
81392 if (n < 16) return '0' + n.toString(16)
81393 return n.toString(16)
81394 }
81395
81396 function utf8ToBytes (string, units) {
81397 units = units || Infinity
81398 var codePoint
81399 var length = string.length
81400 var leadSurrogate = null
81401 var bytes = []
81402
81403 for (var i = 0; i < length; ++i) {
81404 codePoint = string.charCodeAt(i)
81405
81406 // is surrogate component
81407 if (codePoint > 0xD7FF && codePoint < 0xE000) {
81408 // last char was a lead
81409 if (!leadSurrogate) {
81410 // no lead yet
81411 if (codePoint > 0xDBFF) {
81412 // unexpected trail
81413 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
81414 continue
81415 } else if (i + 1 === length) {
81416 // unpaired lead
81417 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
81418 continue
81419 }
81420
81421 // valid lead
81422 leadSurrogate = codePoint
81423
81424 continue
81425 }
81426
81427 // 2 leads in a row
81428 if (codePoint < 0xDC00) {
81429 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
81430 leadSurrogate = codePoint
81431 continue
81432 }
81433
81434 // valid surrogate pair
81435 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
81436 } else if (leadSurrogate) {
81437 // valid bmp char, but last char was a lead
81438 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
81439 }
81440
81441 leadSurrogate = null
81442
81443 // encode utf8
81444 if (codePoint < 0x80) {
81445 if ((units -= 1) < 0) break
81446 bytes.push(codePoint)
81447 } else if (codePoint < 0x800) {
81448 if ((units -= 2) < 0) break
81449 bytes.push(
81450 codePoint >> 0x6 | 0xC0,
81451 codePoint & 0x3F | 0x80
81452 )
81453 } else if (codePoint < 0x10000) {
81454 if ((units -= 3) < 0) break
81455 bytes.push(
81456 codePoint >> 0xC | 0xE0,
81457 codePoint >> 0x6 & 0x3F | 0x80,
81458 codePoint & 0x3F | 0x80
81459 )
81460 } else if (codePoint < 0x110000) {
81461 if ((units -= 4) < 0) break
81462 bytes.push(
81463 codePoint >> 0x12 | 0xF0,
81464 codePoint >> 0xC & 0x3F | 0x80,
81465 codePoint >> 0x6 & 0x3F | 0x80,
81466 codePoint & 0x3F | 0x80
81467 )
81468 } else {
81469 throw new Error('Invalid code point')
81470 }
81471 }
81472
81473 return bytes
81474 }
81475
81476 function asciiToBytes (str) {
81477 var byteArray = []
81478 for (var i = 0; i < str.length; ++i) {
81479 // Node's code seems to be doing this and not & 0x7F..
81480 byteArray.push(str.charCodeAt(i) & 0xFF)
81481 }
81482 return byteArray
81483 }
81484
81485 function utf16leToBytes (str, units) {
81486 var c, hi, lo
81487 var byteArray = []
81488 for (var i = 0; i < str.length; ++i) {
81489 if ((units -= 2) < 0) break
81490
81491 c = str.charCodeAt(i)
81492 hi = c >> 8
81493 lo = c % 256
81494 byteArray.push(lo)
81495 byteArray.push(hi)
81496 }
81497
81498 return byteArray
81499 }
81500
81501 function base64ToBytes (str) {
81502 return base64.toByteArray(base64clean(str))
81503 }
81504
81505 function blitBuffer (src, dst, offset, length) {
81506 for (var i = 0; i < length; ++i) {
81507 if ((i + offset >= dst.length) || (i >= src.length)) break
81508 dst[i + offset] = src[i]
81509 }
81510 return i
81511 }
81512
81513 function isnan (val) {
81514 return val !== val // eslint-disable-line no-self-compare
81515 }
81516
81517 },{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
81518 (function (Buffer){
81519 // Copyright Joyent, Inc. and other Node contributors.
81520 //
81521 // Permission is hereby granted, free of charge, to any person obtaining a
81522 // copy of this software and associated documentation files (the
81523 // "Software"), to deal in the Software without restriction, including
81524 // without limitation the rights to use, copy, modify, merge, publish,
81525 // distribute, sublicense, and/or sell copies of the Software, and to permit
81526 // persons to whom the Software is furnished to do so, subject to the
81527 // following conditions:
81528 //
81529 // The above copyright notice and this permission notice shall be included
81530 // in all copies or substantial portions of the Software.
81531 //
81532 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
81533 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
81534 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
81535 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
81536 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
81537 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
81538 // USE OR OTHER DEALINGS IN THE SOFTWARE.
81539
81540 // NOTE: These type checking functions intentionally don't use `instanceof`
81541 // because it is fragile and can be easily faked with `Object.create()`.
81542
81543 function isArray(arg) {
81544 if (Array.isArray) {
81545 return Array.isArray(arg);
81546 }
81547 return objectToString(arg) === '[object Array]';
81548 }
81549 exports.isArray = isArray;
81550
81551 function isBoolean(arg) {
81552 return typeof arg === 'boolean';
81553 }
81554 exports.isBoolean = isBoolean;
81555
81556 function isNull(arg) {
81557 return arg === null;
81558 }
81559 exports.isNull = isNull;
81560
81561 function isNullOrUndefined(arg) {
81562 return arg == null;
81563 }
81564 exports.isNullOrUndefined = isNullOrUndefined;
81565
81566 function isNumber(arg) {
81567 return typeof arg === 'number';
81568 }
81569 exports.isNumber = isNumber;
81570
81571 function isString(arg) {
81572 return typeof arg === 'string';
81573 }
81574 exports.isString = isString;
81575
81576 function isSymbol(arg) {
81577 return typeof arg === 'symbol';
81578 }
81579 exports.isSymbol = isSymbol;
81580
81581 function isUndefined(arg) {
81582 return arg === void 0;
81583 }
81584 exports.isUndefined = isUndefined;
81585
81586 function isRegExp(re) {
81587 return objectToString(re) === '[object RegExp]';
81588 }
81589 exports.isRegExp = isRegExp;
81590
81591 function isObject(arg) {
81592 return typeof arg === 'object' && arg !== null;
81593 }
81594 exports.isObject = isObject;
81595
81596 function isDate(d) {
81597 return objectToString(d) === '[object Date]';
81598 }
81599 exports.isDate = isDate;
81600
81601 function isError(e) {
81602 return (objectToString(e) === '[object Error]' || e instanceof Error);
81603 }
81604 exports.isError = isError;
81605
81606 function isFunction(arg) {
81607 return typeof arg === 'function';
81608 }
81609 exports.isFunction = isFunction;
81610
81611 function isPrimitive(arg) {
81612 return arg === null ||
81613 typeof arg === 'boolean' ||
81614 typeof arg === 'number' ||
81615 typeof arg === 'string' ||
81616 typeof arg === 'symbol' || // ES6 symbol
81617 typeof arg === 'undefined';
81618 }
81619 exports.isPrimitive = isPrimitive;
81620
81621 exports.isBuffer = Buffer.isBuffer;
81622
81623 function objectToString(o) {
81624 return Object.prototype.toString.call(o);
81625 }
81626
81627 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
81628 },{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
81629 // Copyright Joyent, Inc. and other Node contributors.
81630 //
81631 // Permission is hereby granted, free of charge, to any person obtaining a
81632 // copy of this software and associated documentation files (the
81633 // "Software"), to deal in the Software without restriction, including
81634 // without limitation the rights to use, copy, modify, merge, publish,
81635 // distribute, sublicense, and/or sell copies of the Software, and to permit
81636 // persons to whom the Software is furnished to do so, subject to the
81637 // following conditions:
81638 //
81639 // The above copyright notice and this permission notice shall be included
81640 // in all copies or substantial portions of the Software.
81641 //
81642 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
81643 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
81644 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
81645 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
81646 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
81647 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
81648 // USE OR OTHER DEALINGS IN THE SOFTWARE.
81649
81650 function EventEmitter() {
81651 this._events = this._events || {};
81652 this._maxListeners = this._maxListeners || undefined;
81653 }
81654 module.exports = EventEmitter;
81655
81656 // Backwards-compat with node 0.10.x
81657 EventEmitter.EventEmitter = EventEmitter;
81658
81659 EventEmitter.prototype._events = undefined;
81660 EventEmitter.prototype._maxListeners = undefined;
81661
81662 // By default EventEmitters will print a warning if more than 10 listeners are
81663 // added to it. This is a useful default which helps finding memory leaks.
81664 EventEmitter.defaultMaxListeners = 10;
81665
81666 // Obviously not all Emitters should be limited to 10. This function allows
81667 // that to be increased. Set to zero for unlimited.
81668 EventEmitter.prototype.setMaxListeners = function(n) {
81669 if (!isNumber(n) || n < 0 || isNaN(n))
81670 throw TypeError('n must be a positive number');
81671 this._maxListeners = n;
81672 return this;
81673 };
81674
81675 EventEmitter.prototype.emit = function(type) {
81676 var er, handler, len, args, i, listeners;
81677
81678 if (!this._events)
81679 this._events = {};
81680
81681 // If there is no 'error' event listener then throw.
81682 if (type === 'error') {
81683 if (!this._events.error ||
81684 (isObject(this._events.error) && !this._events.error.length)) {
81685 er = arguments[1];
81686 if (er instanceof Error) {
81687 throw er; // Unhandled 'error' event
81688 } else {
81689 // At least give some kind of context to the user
81690 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
81691 err.context = er;
81692 throw err;
81693 }
81694 }
81695 }
81696
81697 handler = this._events[type];
81698
81699 if (isUndefined(handler))
81700 return false;
81701
81702 if (isFunction(handler)) {
81703 switch (arguments.length) {
81704 // fast cases
81705 case 1:
81706 handler.call(this);
81707 break;
81708 case 2:
81709 handler.call(this, arguments[1]);
81710 break;
81711 case 3:
81712 handler.call(this, arguments[1], arguments[2]);
81713 break;
81714 // slower
81715 default:
81716 args = Array.prototype.slice.call(arguments, 1);
81717 handler.apply(this, args);
81718 }
81719 } else if (isObject(handler)) {
81720 args = Array.prototype.slice.call(arguments, 1);
81721 listeners = handler.slice();
81722 len = listeners.length;
81723 for (i = 0; i < len; i++)
81724 listeners[i].apply(this, args);
81725 }
81726
81727 return true;
81728 };
81729
81730 EventEmitter.prototype.addListener = function(type, listener) {
81731 var m;
81732
81733 if (!isFunction(listener))
81734 throw TypeError('listener must be a function');
81735
81736 if (!this._events)
81737 this._events = {};
81738
81739 // To avoid recursion in the case that type === "newListener"! Before
81740 // adding it to the listeners, first emit "newListener".
81741 if (this._events.newListener)
81742 this.emit('newListener', type,
81743 isFunction(listener.listener) ?
81744 listener.listener : listener);
81745
81746 if (!this._events[type])
81747 // Optimize the case of one listener. Don't need the extra array object.
81748 this._events[type] = listener;
81749 else if (isObject(this._events[type]))
81750 // If we've already got an array, just append.
81751 this._events[type].push(listener);
81752 else
81753 // Adding the second element, need to change to array.
81754 this._events[type] = [this._events[type], listener];
81755
81756 // Check for listener leak
81757 if (isObject(this._events[type]) && !this._events[type].warned) {
81758 if (!isUndefined(this._maxListeners)) {
81759 m = this._maxListeners;
81760 } else {
81761 m = EventEmitter.defaultMaxListeners;
81762 }
81763
81764 if (m && m > 0 && this._events[type].length > m) {
81765 this._events[type].warned = true;
81766 console.error('(node) warning: possible EventEmitter memory ' +
81767 'leak detected. %d listeners added. ' +
81768 'Use emitter.setMaxListeners() to increase limit.',
81769 this._events[type].length);
81770 if (typeof console.trace === 'function') {
81771 // not supported in IE 10
81772 console.trace();
81773 }
81774 }
81775 }
81776
81777 return this;
81778 };
81779
81780 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
81781
81782 EventEmitter.prototype.once = function(type, listener) {
81783 if (!isFunction(listener))
81784 throw TypeError('listener must be a function');
81785
81786 var fired = false;
81787
81788 function g() {
81789 this.removeListener(type, g);
81790
81791 if (!fired) {
81792 fired = true;
81793 listener.apply(this, arguments);
81794 }
81795 }
81796
81797 g.listener = listener;
81798 this.on(type, g);
81799
81800 return this;
81801 };
81802
81803 // emits a 'removeListener' event iff the listener was removed
81804 EventEmitter.prototype.removeListener = function(type, listener) {
81805 var list, position, length, i;
81806
81807 if (!isFunction(listener))
81808 throw TypeError('listener must be a function');
81809
81810 if (!this._events || !this._events[type])
81811 return this;
81812
81813 list = this._events[type];
81814 length = list.length;
81815 position = -1;
81816
81817 if (list === listener ||
81818 (isFunction(list.listener) && list.listener === listener)) {
81819 delete this._events[type];
81820 if (this._events.removeListener)
81821 this.emit('removeListener', type, listener);
81822
81823 } else if (isObject(list)) {
81824 for (i = length; i-- > 0;) {
81825 if (list[i] === listener ||
81826 (list[i].listener && list[i].listener === listener)) {
81827 position = i;
81828 break;
81829 }
81830 }
81831
81832 if (position < 0)
81833 return this;
81834
81835 if (list.length === 1) {
81836 list.length = 0;
81837 delete this._events[type];
81838 } else {
81839 list.splice(position, 1);
81840 }
81841
81842 if (this._events.removeListener)
81843 this.emit('removeListener', type, listener);
81844 }
81845
81846 return this;
81847 };
81848
81849 EventEmitter.prototype.removeAllListeners = function(type) {
81850 var key, listeners;
81851
81852 if (!this._events)
81853 return this;
81854
81855 // not listening for removeListener, no need to emit
81856 if (!this._events.removeListener) {
81857 if (arguments.length === 0)
81858 this._events = {};
81859 else if (this._events[type])
81860 delete this._events[type];
81861 return this;
81862 }
81863
81864 // emit removeListener for all listeners on all events
81865 if (arguments.length === 0) {
81866 for (key in this._events) {
81867 if (key === 'removeListener') continue;
81868 this.removeAllListeners(key);
81869 }
81870 this.removeAllListeners('removeListener');
81871 this._events = {};
81872 return this;
81873 }
81874
81875 listeners = this._events[type];
81876
81877 if (isFunction(listeners)) {
81878 this.removeListener(type, listeners);
81879 } else if (listeners) {
81880 // LIFO order
81881 while (listeners.length)
81882 this.removeListener(type, listeners[listeners.length - 1]);
81883 }
81884 delete this._events[type];
81885
81886 return this;
81887 };
81888
81889 EventEmitter.prototype.listeners = function(type) {
81890 var ret;
81891 if (!this._events || !this._events[type])
81892 ret = [];
81893 else if (isFunction(this._events[type]))
81894 ret = [this._events[type]];
81895 else
81896 ret = this._events[type].slice();
81897 return ret;
81898 };
81899
81900 EventEmitter.prototype.listenerCount = function(type) {
81901 if (this._events) {
81902 var evlistener = this._events[type];
81903
81904 if (isFunction(evlistener))
81905 return 1;
81906 else if (evlistener)
81907 return evlistener.length;
81908 }
81909 return 0;
81910 };
81911
81912 EventEmitter.listenerCount = function(emitter, type) {
81913 return emitter.listenerCount(type);
81914 };
81915
81916 function isFunction(arg) {
81917 return typeof arg === 'function';
81918 }
81919
81920 function isNumber(arg) {
81921 return typeof arg === 'number';
81922 }
81923
81924 function isObject(arg) {
81925 return typeof arg === 'object' && arg !== null;
81926 }
81927
81928 function isUndefined(arg) {
81929 return arg === void 0;
81930 }
81931
81932 },{}],8:[function(require,module,exports){
81933 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
81934 var e, m
81935 var eLen = nBytes * 8 - mLen - 1
81936 var eMax = (1 << eLen) - 1
81937 var eBias = eMax >> 1
81938 var nBits = -7
81939 var i = isLE ? (nBytes - 1) : 0
81940 var d = isLE ? -1 : 1
81941 var s = buffer[offset + i]
81942
81943 i += d
81944
81945 e = s & ((1 << (-nBits)) - 1)
81946 s >>= (-nBits)
81947 nBits += eLen
81948 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
81949
81950 m = e & ((1 << (-nBits)) - 1)
81951 e >>= (-nBits)
81952 nBits += mLen
81953 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
81954
81955 if (e === 0) {
81956 e = 1 - eBias
81957 } else if (e === eMax) {
81958 return m ? NaN : ((s ? -1 : 1) * Infinity)
81959 } else {
81960 m = m + Math.pow(2, mLen)
81961 e = e - eBias
81962 }
81963 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
81964 }
81965
81966 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
81967 var e, m, c
81968 var eLen = nBytes * 8 - mLen - 1
81969 var eMax = (1 << eLen) - 1
81970 var eBias = eMax >> 1
81971 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
81972 var i = isLE ? 0 : (nBytes - 1)
81973 var d = isLE ? 1 : -1
81974 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
81975
81976 value = Math.abs(value)
81977
81978 if (isNaN(value) || value === Infinity) {
81979 m = isNaN(value) ? 1 : 0
81980 e = eMax
81981 } else {
81982 e = Math.floor(Math.log(value) / Math.LN2)
81983 if (value * (c = Math.pow(2, -e)) < 1) {
81984 e--
81985 c *= 2
81986 }
81987 if (e + eBias >= 1) {
81988 value += rt / c
81989 } else {
81990 value += rt * Math.pow(2, 1 - eBias)
81991 }
81992 if (value * c >= 2) {
81993 e++
81994 c /= 2
81995 }
81996
81997 if (e + eBias >= eMax) {
81998 m = 0
81999 e = eMax
82000 } else if (e + eBias >= 1) {
82001 m = (value * c - 1) * Math.pow(2, mLen)
82002 e = e + eBias
82003 } else {
82004 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
82005 e = 0
82006 }
82007 }
82008
82009 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
82010
82011 e = (e << mLen) | m
82012 eLen += mLen
82013 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
82014
82015 buffer[offset + i - d] |= s * 128
82016 }
82017
82018 },{}],9:[function(require,module,exports){
82019 if (typeof Object.create === 'function') {
82020 // implementation from standard node.js 'util' module
82021 module.exports = function inherits(ctor, superCtor) {
82022 ctor.super_ = superCtor
82023 ctor.prototype = Object.create(superCtor.prototype, {
82024 constructor: {
82025 value: ctor,
82026 enumerable: false,
82027 writable: true,
82028 configurable: true
82029 }
82030 });
82031 };
82032 } else {
82033 // old school shim for old browsers
82034 module.exports = function inherits(ctor, superCtor) {
82035 ctor.super_ = superCtor
82036 var TempCtor = function () {}
82037 TempCtor.prototype = superCtor.prototype
82038 ctor.prototype = new TempCtor()
82039 ctor.prototype.constructor = ctor
82040 }
82041 }
82042
82043 },{}],10:[function(require,module,exports){
82044 /*!
82045 * Determine if an object is a Buffer
82046 *
82047 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
82048 * @license MIT
82049 */
82050
82051 // The _isBuffer check is for Safari 5-7 support, because it's missing
82052 // Object.prototype.constructor. Remove this eventually
82053 module.exports = function (obj) {
82054 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
82055 }
82056
82057 function isBuffer (obj) {
82058 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
82059 }
82060
82061 // For Node v0.10 support. Remove this eventually.
82062 function isSlowBuffer (obj) {
82063 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
82064 }
82065
82066 },{}],11:[function(require,module,exports){
82067 var toString = {}.toString;
82068
82069 module.exports = Array.isArray || function (arr) {
82070 return toString.call(arr) == '[object Array]';
82071 };
82072
82073 },{}],12:[function(require,module,exports){
82074 (function (process){
82075 'use strict';
82076
82077 if (!process.version ||
82078 process.version.indexOf('v0.') === 0 ||
82079 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
82080 module.exports = nextTick;
82081 } else {
82082 module.exports = process.nextTick;
82083 }
82084
82085 function nextTick(fn, arg1, arg2, arg3) {
82086 if (typeof fn !== 'function') {
82087 throw new TypeError('"callback" argument must be a function');
82088 }
82089 var len = arguments.length;
82090 var args, i;
82091 switch (len) {
82092 case 0:
82093 case 1:
82094 return process.nextTick(fn);
82095 case 2:
82096 return process.nextTick(function afterTickOne() {
82097 fn.call(null, arg1);
82098 });
82099 case 3:
82100 return process.nextTick(function afterTickTwo() {
82101 fn.call(null, arg1, arg2);
82102 });
82103 case 4:
82104 return process.nextTick(function afterTickThree() {
82105 fn.call(null, arg1, arg2, arg3);
82106 });
82107 default:
82108 args = new Array(len - 1);
82109 i = 0;
82110 while (i < args.length) {
82111 args[i++] = arguments[i];
82112 }
82113 return process.nextTick(function afterTick() {
82114 fn.apply(null, args);
82115 });
82116 }
82117 }
82118
82119 }).call(this,require('_process'))
82120 },{"_process":13}],13:[function(require,module,exports){
82121 // shim for using process in browser
82122 var process = module.exports = {};
82123
82124 // cached from whatever global is present so that test runners that stub it
82125 // don't break things. But we need to wrap it in a try catch in case it is
82126 // wrapped in strict mode code which doesn't define any globals. It's inside a
82127 // function because try/catches deoptimize in certain engines.
82128
82129 var cachedSetTimeout;
82130 var cachedClearTimeout;
82131
82132 function defaultSetTimout() {
82133 throw new Error('setTimeout has not been defined');
82134 }
82135 function defaultClearTimeout () {
82136 throw new Error('clearTimeout has not been defined');
82137 }
82138 (function () {
82139 try {
82140 if (typeof setTimeout === 'function') {
82141 cachedSetTimeout = setTimeout;
82142 } else {
82143 cachedSetTimeout = defaultSetTimout;
82144 }
82145 } catch (e) {
82146 cachedSetTimeout = defaultSetTimout;
82147 }
82148 try {
82149 if (typeof clearTimeout === 'function') {
82150 cachedClearTimeout = clearTimeout;
82151 } else {
82152 cachedClearTimeout = defaultClearTimeout;
82153 }
82154 } catch (e) {
82155 cachedClearTimeout = defaultClearTimeout;
82156 }
82157 } ())
82158 function runTimeout(fun) {
82159 if (cachedSetTimeout === setTimeout) {
82160 //normal enviroments in sane situations
82161 return setTimeout(fun, 0);
82162 }
82163 // if setTimeout wasn't available but was latter defined
82164 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
82165 cachedSetTimeout = setTimeout;
82166 return setTimeout(fun, 0);
82167 }
82168 try {
82169 // when when somebody has screwed with setTimeout but no I.E. maddness
82170 return cachedSetTimeout(fun, 0);
82171 } catch(e){
82172 try {
82173 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
82174 return cachedSetTimeout.call(null, fun, 0);
82175 } catch(e){
82176 // 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
82177 return cachedSetTimeout.call(this, fun, 0);
82178 }
82179 }
82180
82181
82182 }
82183 function runClearTimeout(marker) {
82184 if (cachedClearTimeout === clearTimeout) {
82185 //normal enviroments in sane situations
82186 return clearTimeout(marker);
82187 }
82188 // if clearTimeout wasn't available but was latter defined
82189 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
82190 cachedClearTimeout = clearTimeout;
82191 return clearTimeout(marker);
82192 }
82193 try {
82194 // when when somebody has screwed with setTimeout but no I.E. maddness
82195 return cachedClearTimeout(marker);
82196 } catch (e){
82197 try {
82198 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
82199 return cachedClearTimeout.call(null, marker);
82200 } catch (e){
82201 // 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.
82202 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
82203 return cachedClearTimeout.call(this, marker);
82204 }
82205 }
82206
82207
82208
82209 }
82210 var queue = [];
82211 var draining = false;
82212 var currentQueue;
82213 var queueIndex = -1;
82214
82215 function cleanUpNextTick() {
82216 if (!draining || !currentQueue) {
82217 return;
82218 }
82219 draining = false;
82220 if (currentQueue.length) {
82221 queue = currentQueue.concat(queue);
82222 } else {
82223 queueIndex = -1;
82224 }
82225 if (queue.length) {
82226 drainQueue();
82227 }
82228 }
82229
82230 function drainQueue() {
82231 if (draining) {
82232 return;
82233 }
82234 var timeout = runTimeout(cleanUpNextTick);
82235 draining = true;
82236
82237 var len = queue.length;
82238 while(len) {
82239 currentQueue = queue;
82240 queue = [];
82241 while (++queueIndex < len) {
82242 if (currentQueue) {
82243 currentQueue[queueIndex].run();
82244 }
82245 }
82246 queueIndex = -1;
82247 len = queue.length;
82248 }
82249 currentQueue = null;
82250 draining = false;
82251 runClearTimeout(timeout);
82252 }
82253
82254 process.nextTick = function (fun) {
82255 var args = new Array(arguments.length - 1);
82256 if (arguments.length > 1) {
82257 for (var i = 1; i < arguments.length; i++) {
82258 args[i - 1] = arguments[i];
82259 }
82260 }
82261 queue.push(new Item(fun, args));
82262 if (queue.length === 1 && !draining) {
82263 runTimeout(drainQueue);
82264 }
82265 };
82266
82267 // v8 likes predictible objects
82268 function Item(fun, array) {
82269 this.fun = fun;
82270 this.array = array;
82271 }
82272 Item.prototype.run = function () {
82273 this.fun.apply(null, this.array);
82274 };
82275 process.title = 'browser';
82276 process.browser = true;
82277 process.env = {};
82278 process.argv = [];
82279 process.version = ''; // empty string to avoid regexp issues
82280 process.versions = {};
82281
82282 function noop() {}
82283
82284 process.on = noop;
82285 process.addListener = noop;
82286 process.once = noop;
82287 process.off = noop;
82288 process.removeListener = noop;
82289 process.removeAllListeners = noop;
82290 process.emit = noop;
82291
82292 process.binding = function (name) {
82293 throw new Error('process.binding is not supported');
82294 };
82295
82296 process.cwd = function () { return '/' };
82297 process.chdir = function (dir) {
82298 throw new Error('process.chdir is not supported');
82299 };
82300 process.umask = function() { return 0; };
82301
82302 },{}],14:[function(require,module,exports){
82303 module.exports = require("./lib/_stream_duplex.js")
82304
82305 },{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
82306 // a duplex stream is just a stream that is both readable and writable.
82307 // Since JS doesn't have multiple prototypal inheritance, this class
82308 // prototypally inherits from Readable, and then parasitically from
82309 // Writable.
82310
82311 'use strict';
82312
82313 /*<replacement>*/
82314
82315 var objectKeys = Object.keys || function (obj) {
82316 var keys = [];
82317 for (var key in obj) {
82318 keys.push(key);
82319 }return keys;
82320 };
82321 /*</replacement>*/
82322
82323 module.exports = Duplex;
82324
82325 /*<replacement>*/
82326 var processNextTick = require('process-nextick-args');
82327 /*</replacement>*/
82328
82329 /*<replacement>*/
82330 var util = require('core-util-is');
82331 util.inherits = require('inherits');
82332 /*</replacement>*/
82333
82334 var Readable = require('./_stream_readable');
82335 var Writable = require('./_stream_writable');
82336
82337 util.inherits(Duplex, Readable);
82338
82339 var keys = objectKeys(Writable.prototype);
82340 for (var v = 0; v < keys.length; v++) {
82341 var method = keys[v];
82342 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
82343 }
82344
82345 function Duplex(options) {
82346 if (!(this instanceof Duplex)) return new Duplex(options);
82347
82348 Readable.call(this, options);
82349 Writable.call(this, options);
82350
82351 if (options && options.readable === false) this.readable = false;
82352
82353 if (options && options.writable === false) this.writable = false;
82354
82355 this.allowHalfOpen = true;
82356 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
82357
82358 this.once('end', onend);
82359 }
82360
82361 // the no-half-open enforcer
82362 function onend() {
82363 // if we allow half-open state, or if the writable side ended,
82364 // then we're ok.
82365 if (this.allowHalfOpen || this._writableState.ended) return;
82366
82367 // no more data can be written.
82368 // But allow more writes to happen in this tick.
82369 processNextTick(onEndNT, this);
82370 }
82371
82372 function onEndNT(self) {
82373 self.end();
82374 }
82375
82376 function forEach(xs, f) {
82377 for (var i = 0, l = xs.length; i < l; i++) {
82378 f(xs[i], i);
82379 }
82380 }
82381 },{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
82382 // a passthrough stream.
82383 // basically just the most minimal sort of Transform stream.
82384 // Every written chunk gets output as-is.
82385
82386 'use strict';
82387
82388 module.exports = PassThrough;
82389
82390 var Transform = require('./_stream_transform');
82391
82392 /*<replacement>*/
82393 var util = require('core-util-is');
82394 util.inherits = require('inherits');
82395 /*</replacement>*/
82396
82397 util.inherits(PassThrough, Transform);
82398
82399 function PassThrough(options) {
82400 if (!(this instanceof PassThrough)) return new PassThrough(options);
82401
82402 Transform.call(this, options);
82403 }
82404
82405 PassThrough.prototype._transform = function (chunk, encoding, cb) {
82406 cb(null, chunk);
82407 };
82408 },{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
82409 (function (process){
82410 'use strict';
82411
82412 module.exports = Readable;
82413
82414 /*<replacement>*/
82415 var processNextTick = require('process-nextick-args');
82416 /*</replacement>*/
82417
82418 /*<replacement>*/
82419 var isArray = require('isarray');
82420 /*</replacement>*/
82421
82422 /*<replacement>*/
82423 var Duplex;
82424 /*</replacement>*/
82425
82426 Readable.ReadableState = ReadableState;
82427
82428 /*<replacement>*/
82429 var EE = require('events').EventEmitter;
82430
82431 var EElistenerCount = function (emitter, type) {
82432 return emitter.listeners(type).length;
82433 };
82434 /*</replacement>*/
82435
82436 /*<replacement>*/
82437 var Stream;
82438 (function () {
82439 try {
82440 Stream = require('st' + 'ream');
82441 } catch (_) {} finally {
82442 if (!Stream) Stream = require('events').EventEmitter;
82443 }
82444 })();
82445 /*</replacement>*/
82446
82447 var Buffer = require('buffer').Buffer;
82448 /*<replacement>*/
82449 var bufferShim = require('buffer-shims');
82450 /*</replacement>*/
82451
82452 /*<replacement>*/
82453 var util = require('core-util-is');
82454 util.inherits = require('inherits');
82455 /*</replacement>*/
82456
82457 /*<replacement>*/
82458 var debugUtil = require('util');
82459 var debug = void 0;
82460 if (debugUtil && debugUtil.debuglog) {
82461 debug = debugUtil.debuglog('stream');
82462 } else {
82463 debug = function () {};
82464 }
82465 /*</replacement>*/
82466
82467 var BufferList = require('./internal/streams/BufferList');
82468 var StringDecoder;
82469
82470 util.inherits(Readable, Stream);
82471
82472 function prependListener(emitter, event, fn) {
82473 // Sadly this is not cacheable as some libraries bundle their own
82474 // event emitter implementation with them.
82475 if (typeof emitter.prependListener === 'function') {
82476 return emitter.prependListener(event, fn);
82477 } else {
82478 // This is a hack to make sure that our error handler is attached before any
82479 // userland ones. NEVER DO THIS. This is here only because this code needs
82480 // to continue to work with older versions of Node.js that do not include
82481 // the prependListener() method. The goal is to eventually remove this hack.
82482 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]];
82483 }
82484 }
82485
82486 function ReadableState(options, stream) {
82487 Duplex = Duplex || require('./_stream_duplex');
82488
82489 options = options || {};
82490
82491 // object stream flag. Used to make read(n) ignore n and to
82492 // make all the buffer merging and length checks go away
82493 this.objectMode = !!options.objectMode;
82494
82495 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
82496
82497 // the point at which it stops calling _read() to fill the buffer
82498 // Note: 0 is a valid value, means "don't call _read preemptively ever"
82499 var hwm = options.highWaterMark;
82500 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
82501 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
82502
82503 // cast to ints.
82504 this.highWaterMark = ~ ~this.highWaterMark;
82505
82506 // A linked list is used to store data chunks instead of an array because the
82507 // linked list can remove elements from the beginning faster than
82508 // array.shift()
82509 this.buffer = new BufferList();
82510 this.length = 0;
82511 this.pipes = null;
82512 this.pipesCount = 0;
82513 this.flowing = null;
82514 this.ended = false;
82515 this.endEmitted = false;
82516 this.reading = false;
82517
82518 // a flag to be able to tell if the onwrite cb is called immediately,
82519 // or on a later tick. We set this to true at first, because any
82520 // actions that shouldn't happen until "later" should generally also
82521 // not happen before the first write call.
82522 this.sync = true;
82523
82524 // whenever we return null, then we set a flag to say
82525 // that we're awaiting a 'readable' event emission.
82526 this.needReadable = false;
82527 this.emittedReadable = false;
82528 this.readableListening = false;
82529 this.resumeScheduled = false;
82530
82531 // Crypto is kind of old and crusty. Historically, its default string
82532 // encoding is 'binary' so we have to make this configurable.
82533 // Everything else in the universe uses 'utf8', though.
82534 this.defaultEncoding = options.defaultEncoding || 'utf8';
82535
82536 // when piping, we only care about 'readable' events that happen
82537 // after read()ing all the bytes and not getting any pushback.
82538 this.ranOut = false;
82539
82540 // the number of writers that are awaiting a drain event in .pipe()s
82541 this.awaitDrain = 0;
82542
82543 // if true, a maybeReadMore has been scheduled
82544 this.readingMore = false;
82545
82546 this.decoder = null;
82547 this.encoding = null;
82548 if (options.encoding) {
82549 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
82550 this.decoder = new StringDecoder(options.encoding);
82551 this.encoding = options.encoding;
82552 }
82553 }
82554
82555 function Readable(options) {
82556 Duplex = Duplex || require('./_stream_duplex');
82557
82558 if (!(this instanceof Readable)) return new Readable(options);
82559
82560 this._readableState = new ReadableState(options, this);
82561
82562 // legacy
82563 this.readable = true;
82564
82565 if (options && typeof options.read === 'function') this._read = options.read;
82566
82567 Stream.call(this);
82568 }
82569
82570 // Manually shove something into the read() buffer.
82571 // This returns true if the highWaterMark has not been hit yet,
82572 // similar to how Writable.write() returns true if you should
82573 // write() some more.
82574 Readable.prototype.push = function (chunk, encoding) {
82575 var state = this._readableState;
82576
82577 if (!state.objectMode && typeof chunk === 'string') {
82578 encoding = encoding || state.defaultEncoding;
82579 if (encoding !== state.encoding) {
82580 chunk = bufferShim.from(chunk, encoding);
82581 encoding = '';
82582 }
82583 }
82584
82585 return readableAddChunk(this, state, chunk, encoding, false);
82586 };
82587
82588 // Unshift should *always* be something directly out of read()
82589 Readable.prototype.unshift = function (chunk) {
82590 var state = this._readableState;
82591 return readableAddChunk(this, state, chunk, '', true);
82592 };
82593
82594 Readable.prototype.isPaused = function () {
82595 return this._readableState.flowing === false;
82596 };
82597
82598 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
82599 var er = chunkInvalid(state, chunk);
82600 if (er) {
82601 stream.emit('error', er);
82602 } else if (chunk === null) {
82603 state.reading = false;
82604 onEofChunk(stream, state);
82605 } else if (state.objectMode || chunk && chunk.length > 0) {
82606 if (state.ended && !addToFront) {
82607 var e = new Error('stream.push() after EOF');
82608 stream.emit('error', e);
82609 } else if (state.endEmitted && addToFront) {
82610 var _e = new Error('stream.unshift() after end event');
82611 stream.emit('error', _e);
82612 } else {
82613 var skipAdd;
82614 if (state.decoder && !addToFront && !encoding) {
82615 chunk = state.decoder.write(chunk);
82616 skipAdd = !state.objectMode && chunk.length === 0;
82617 }
82618
82619 if (!addToFront) state.reading = false;
82620
82621 // Don't add to the buffer if we've decoded to an empty string chunk and
82622 // we're not in object mode
82623 if (!skipAdd) {
82624 // if we want the data now, just emit it.
82625 if (state.flowing && state.length === 0 && !state.sync) {
82626 stream.emit('data', chunk);
82627 stream.read(0);
82628 } else {
82629 // update the buffer info.
82630 state.length += state.objectMode ? 1 : chunk.length;
82631 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
82632
82633 if (state.needReadable) emitReadable(stream);
82634 }
82635 }
82636
82637 maybeReadMore(stream, state);
82638 }
82639 } else if (!addToFront) {
82640 state.reading = false;
82641 }
82642
82643 return needMoreData(state);
82644 }
82645
82646 // if it's past the high water mark, we can push in some more.
82647 // Also, if we have no data yet, we can stand some
82648 // more bytes. This is to work around cases where hwm=0,
82649 // such as the repl. Also, if the push() triggered a
82650 // readable event, and the user called read(largeNumber) such that
82651 // needReadable was set, then we ought to push more, so that another
82652 // 'readable' event will be triggered.
82653 function needMoreData(state) {
82654 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
82655 }
82656
82657 // backwards compatibility.
82658 Readable.prototype.setEncoding = function (enc) {
82659 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
82660 this._readableState.decoder = new StringDecoder(enc);
82661 this._readableState.encoding = enc;
82662 return this;
82663 };
82664
82665 // Don't raise the hwm > 8MB
82666 var MAX_HWM = 0x800000;
82667 function computeNewHighWaterMark(n) {
82668 if (n >= MAX_HWM) {
82669 n = MAX_HWM;
82670 } else {
82671 // Get the next highest power of 2 to prevent increasing hwm excessively in
82672 // tiny amounts
82673 n--;
82674 n |= n >>> 1;
82675 n |= n >>> 2;
82676 n |= n >>> 4;
82677 n |= n >>> 8;
82678 n |= n >>> 16;
82679 n++;
82680 }
82681 return n;
82682 }
82683
82684 // This function is designed to be inlinable, so please take care when making
82685 // changes to the function body.
82686 function howMuchToRead(n, state) {
82687 if (n <= 0 || state.length === 0 && state.ended) return 0;
82688 if (state.objectMode) return 1;
82689 if (n !== n) {
82690 // Only flow one buffer at a time
82691 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
82692 }
82693 // If we're asking for more than the current hwm, then raise the hwm.
82694 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
82695 if (n <= state.length) return n;
82696 // Don't have enough
82697 if (!state.ended) {
82698 state.needReadable = true;
82699 return 0;
82700 }
82701 return state.length;
82702 }
82703
82704 // you can override either this method, or the async _read(n) below.
82705 Readable.prototype.read = function (n) {
82706 debug('read', n);
82707 n = parseInt(n, 10);
82708 var state = this._readableState;
82709 var nOrig = n;
82710
82711 if (n !== 0) state.emittedReadable = false;
82712
82713 // if we're doing read(0) to trigger a readable event, but we
82714 // already have a bunch of data in the buffer, then just trigger
82715 // the 'readable' event and move on.
82716 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
82717 debug('read: emitReadable', state.length, state.ended);
82718 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
82719 return null;
82720 }
82721
82722 n = howMuchToRead(n, state);
82723
82724 // if we've ended, and we're now clear, then finish it up.
82725 if (n === 0 && state.ended) {
82726 if (state.length === 0) endReadable(this);
82727 return null;
82728 }
82729
82730 // All the actual chunk generation logic needs to be
82731 // *below* the call to _read. The reason is that in certain
82732 // synthetic stream cases, such as passthrough streams, _read
82733 // may be a completely synchronous operation which may change
82734 // the state of the read buffer, providing enough data when
82735 // before there was *not* enough.
82736 //
82737 // So, the steps are:
82738 // 1. Figure out what the state of things will be after we do
82739 // a read from the buffer.
82740 //
82741 // 2. If that resulting state will trigger a _read, then call _read.
82742 // Note that this may be asynchronous, or synchronous. Yes, it is
82743 // deeply ugly to write APIs this way, but that still doesn't mean
82744 // that the Readable class should behave improperly, as streams are
82745 // designed to be sync/async agnostic.
82746 // Take note if the _read call is sync or async (ie, if the read call
82747 // has returned yet), so that we know whether or not it's safe to emit
82748 // 'readable' etc.
82749 //
82750 // 3. Actually pull the requested chunks out of the buffer and return.
82751
82752 // if we need a readable event, then we need to do some reading.
82753 var doRead = state.needReadable;
82754 debug('need readable', doRead);
82755
82756 // if we currently have less than the highWaterMark, then also read some
82757 if (state.length === 0 || state.length - n < state.highWaterMark) {
82758 doRead = true;
82759 debug('length less than watermark', doRead);
82760 }
82761
82762 // however, if we've ended, then there's no point, and if we're already
82763 // reading, then it's unnecessary.
82764 if (state.ended || state.reading) {
82765 doRead = false;
82766 debug('reading or ended', doRead);
82767 } else if (doRead) {
82768 debug('do read');
82769 state.reading = true;
82770 state.sync = true;
82771 // if the length is currently zero, then we *need* a readable event.
82772 if (state.length === 0) state.needReadable = true;
82773 // call internal read method
82774 this._read(state.highWaterMark);
82775 state.sync = false;
82776 // If _read pushed data synchronously, then `reading` will be false,
82777 // and we need to re-evaluate how much data we can return to the user.
82778 if (!state.reading) n = howMuchToRead(nOrig, state);
82779 }
82780
82781 var ret;
82782 if (n > 0) ret = fromList(n, state);else ret = null;
82783
82784 if (ret === null) {
82785 state.needReadable = true;
82786 n = 0;
82787 } else {
82788 state.length -= n;
82789 }
82790
82791 if (state.length === 0) {
82792 // If we have nothing in the buffer, then we want to know
82793 // as soon as we *do* get something into the buffer.
82794 if (!state.ended) state.needReadable = true;
82795
82796 // If we tried to read() past the EOF, then emit end on the next tick.
82797 if (nOrig !== n && state.ended) endReadable(this);
82798 }
82799
82800 if (ret !== null) this.emit('data', ret);
82801
82802 return ret;
82803 };
82804
82805 function chunkInvalid(state, chunk) {
82806 var er = null;
82807 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
82808 er = new TypeError('Invalid non-string/buffer chunk');
82809 }
82810 return er;
82811 }
82812
82813 function onEofChunk(stream, state) {
82814 if (state.ended) return;
82815 if (state.decoder) {
82816 var chunk = state.decoder.end();
82817 if (chunk && chunk.length) {
82818 state.buffer.push(chunk);
82819 state.length += state.objectMode ? 1 : chunk.length;
82820 }
82821 }
82822 state.ended = true;
82823
82824 // emit 'readable' now to make sure it gets picked up.
82825 emitReadable(stream);
82826 }
82827
82828 // Don't emit readable right away in sync mode, because this can trigger
82829 // another read() call => stack overflow. This way, it might trigger
82830 // a nextTick recursion warning, but that's not so bad.
82831 function emitReadable(stream) {
82832 var state = stream._readableState;
82833 state.needReadable = false;
82834 if (!state.emittedReadable) {
82835 debug('emitReadable', state.flowing);
82836 state.emittedReadable = true;
82837 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
82838 }
82839 }
82840
82841 function emitReadable_(stream) {
82842 debug('emit readable');
82843 stream.emit('readable');
82844 flow(stream);
82845 }
82846
82847 // at this point, the user has presumably seen the 'readable' event,
82848 // and called read() to consume some data. that may have triggered
82849 // in turn another _read(n) call, in which case reading = true if
82850 // it's in progress.
82851 // However, if we're not ended, or reading, and the length < hwm,
82852 // then go ahead and try to read some more preemptively.
82853 function maybeReadMore(stream, state) {
82854 if (!state.readingMore) {
82855 state.readingMore = true;
82856 processNextTick(maybeReadMore_, stream, state);
82857 }
82858 }
82859
82860 function maybeReadMore_(stream, state) {
82861 var len = state.length;
82862 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
82863 debug('maybeReadMore read 0');
82864 stream.read(0);
82865 if (len === state.length)
82866 // didn't get any data, stop spinning.
82867 break;else len = state.length;
82868 }
82869 state.readingMore = false;
82870 }
82871
82872 // abstract method. to be overridden in specific implementation classes.
82873 // call cb(er, data) where data is <= n in length.
82874 // for virtual (non-string, non-buffer) streams, "length" is somewhat
82875 // arbitrary, and perhaps not very meaningful.
82876 Readable.prototype._read = function (n) {
82877 this.emit('error', new Error('_read() is not implemented'));
82878 };
82879
82880 Readable.prototype.pipe = function (dest, pipeOpts) {
82881 var src = this;
82882 var state = this._readableState;
82883
82884 switch (state.pipesCount) {
82885 case 0:
82886 state.pipes = dest;
82887 break;
82888 case 1:
82889 state.pipes = [state.pipes, dest];
82890 break;
82891 default:
82892 state.pipes.push(dest);
82893 break;
82894 }
82895 state.pipesCount += 1;
82896 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
82897
82898 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
82899
82900 var endFn = doEnd ? onend : cleanup;
82901 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
82902
82903 dest.on('unpipe', onunpipe);
82904 function onunpipe(readable) {
82905 debug('onunpipe');
82906 if (readable === src) {
82907 cleanup();
82908 }
82909 }
82910
82911 function onend() {
82912 debug('onend');
82913 dest.end();
82914 }
82915
82916 // when the dest drains, it reduces the awaitDrain counter
82917 // on the source. This would be more elegant with a .once()
82918 // handler in flow(), but adding and removing repeatedly is
82919 // too slow.
82920 var ondrain = pipeOnDrain(src);
82921 dest.on('drain', ondrain);
82922
82923 var cleanedUp = false;
82924 function cleanup() {
82925 debug('cleanup');
82926 // cleanup event handlers once the pipe is broken
82927 dest.removeListener('close', onclose);
82928 dest.removeListener('finish', onfinish);
82929 dest.removeListener('drain', ondrain);
82930 dest.removeListener('error', onerror);
82931 dest.removeListener('unpipe', onunpipe);
82932 src.removeListener('end', onend);
82933 src.removeListener('end', cleanup);
82934 src.removeListener('data', ondata);
82935
82936 cleanedUp = true;
82937
82938 // if the reader is waiting for a drain event from this
82939 // specific writer, then it would cause it to never start
82940 // flowing again.
82941 // So, if this is awaiting a drain, then we just call it now.
82942 // If we don't know, then assume that we are waiting for one.
82943 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
82944 }
82945
82946 // If the user pushes more data while we're writing to dest then we'll end up
82947 // in ondata again. However, we only want to increase awaitDrain once because
82948 // dest will only emit one 'drain' event for the multiple writes.
82949 // => Introduce a guard on increasing awaitDrain.
82950 var increasedAwaitDrain = false;
82951 src.on('data', ondata);
82952 function ondata(chunk) {
82953 debug('ondata');
82954 increasedAwaitDrain = false;
82955 var ret = dest.write(chunk);
82956 if (false === ret && !increasedAwaitDrain) {
82957 // If the user unpiped during `dest.write()`, it is possible
82958 // to get stuck in a permanently paused state if that write
82959 // also returned false.
82960 // => Check whether `dest` is still a piping destination.
82961 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
82962 debug('false write response, pause', src._readableState.awaitDrain);
82963 src._readableState.awaitDrain++;
82964 increasedAwaitDrain = true;
82965 }
82966 src.pause();
82967 }
82968 }
82969
82970 // if the dest has an error, then stop piping into it.
82971 // however, don't suppress the throwing behavior for this.
82972 function onerror(er) {
82973 debug('onerror', er);
82974 unpipe();
82975 dest.removeListener('error', onerror);
82976 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
82977 }
82978
82979 // Make sure our error handler is attached before userland ones.
82980 prependListener(dest, 'error', onerror);
82981
82982 // Both close and finish should trigger unpipe, but only once.
82983 function onclose() {
82984 dest.removeListener('finish', onfinish);
82985 unpipe();
82986 }
82987 dest.once('close', onclose);
82988 function onfinish() {
82989 debug('onfinish');
82990 dest.removeListener('close', onclose);
82991 unpipe();
82992 }
82993 dest.once('finish', onfinish);
82994
82995 function unpipe() {
82996 debug('unpipe');
82997 src.unpipe(dest);
82998 }
82999
83000 // tell the dest that it's being piped to
83001 dest.emit('pipe', src);
83002
83003 // start the flow if it hasn't been started already.
83004 if (!state.flowing) {
83005 debug('pipe resume');
83006 src.resume();
83007 }
83008
83009 return dest;
83010 };
83011
83012 function pipeOnDrain(src) {
83013 return function () {
83014 var state = src._readableState;
83015 debug('pipeOnDrain', state.awaitDrain);
83016 if (state.awaitDrain) state.awaitDrain--;
83017 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
83018 state.flowing = true;
83019 flow(src);
83020 }
83021 };
83022 }
83023
83024 Readable.prototype.unpipe = function (dest) {
83025 var state = this._readableState;
83026
83027 // if we're not piping anywhere, then do nothing.
83028 if (state.pipesCount === 0) return this;
83029
83030 // just one destination. most common case.
83031 if (state.pipesCount === 1) {
83032 // passed in one, but it's not the right one.
83033 if (dest && dest !== state.pipes) return this;
83034
83035 if (!dest) dest = state.pipes;
83036
83037 // got a match.
83038 state.pipes = null;
83039 state.pipesCount = 0;
83040 state.flowing = false;
83041 if (dest) dest.emit('unpipe', this);
83042 return this;
83043 }
83044
83045 // slow case. multiple pipe destinations.
83046
83047 if (!dest) {
83048 // remove all.
83049 var dests = state.pipes;
83050 var len = state.pipesCount;
83051 state.pipes = null;
83052 state.pipesCount = 0;
83053 state.flowing = false;
83054
83055 for (var i = 0; i < len; i++) {
83056 dests[i].emit('unpipe', this);
83057 }return this;
83058 }
83059
83060 // try to find the right one.
83061 var index = indexOf(state.pipes, dest);
83062 if (index === -1) return this;
83063
83064 state.pipes.splice(index, 1);
83065 state.pipesCount -= 1;
83066 if (state.pipesCount === 1) state.pipes = state.pipes[0];
83067
83068 dest.emit('unpipe', this);
83069
83070 return this;
83071 };
83072
83073 // set up data events if they are asked for
83074 // Ensure readable listeners eventually get something
83075 Readable.prototype.on = function (ev, fn) {
83076 var res = Stream.prototype.on.call(this, ev, fn);
83077
83078 if (ev === 'data') {
83079 // Start flowing on next tick if stream isn't explicitly paused
83080 if (this._readableState.flowing !== false) this.resume();
83081 } else if (ev === 'readable') {
83082 var state = this._readableState;
83083 if (!state.endEmitted && !state.readableListening) {
83084 state.readableListening = state.needReadable = true;
83085 state.emittedReadable = false;
83086 if (!state.reading) {
83087 processNextTick(nReadingNextTick, this);
83088 } else if (state.length) {
83089 emitReadable(this, state);
83090 }
83091 }
83092 }
83093
83094 return res;
83095 };
83096 Readable.prototype.addListener = Readable.prototype.on;
83097
83098 function nReadingNextTick(self) {
83099 debug('readable nexttick read 0');
83100 self.read(0);
83101 }
83102
83103 // pause() and resume() are remnants of the legacy readable stream API
83104 // If the user uses them, then switch into old mode.
83105 Readable.prototype.resume = function () {
83106 var state = this._readableState;
83107 if (!state.flowing) {
83108 debug('resume');
83109 state.flowing = true;
83110 resume(this, state);
83111 }
83112 return this;
83113 };
83114
83115 function resume(stream, state) {
83116 if (!state.resumeScheduled) {
83117 state.resumeScheduled = true;
83118 processNextTick(resume_, stream, state);
83119 }
83120 }
83121
83122 function resume_(stream, state) {
83123 if (!state.reading) {
83124 debug('resume read 0');
83125 stream.read(0);
83126 }
83127
83128 state.resumeScheduled = false;
83129 state.awaitDrain = 0;
83130 stream.emit('resume');
83131 flow(stream);
83132 if (state.flowing && !state.reading) stream.read(0);
83133 }
83134
83135 Readable.prototype.pause = function () {
83136 debug('call pause flowing=%j', this._readableState.flowing);
83137 if (false !== this._readableState.flowing) {
83138 debug('pause');
83139 this._readableState.flowing = false;
83140 this.emit('pause');
83141 }
83142 return this;
83143 };
83144
83145 function flow(stream) {
83146 var state = stream._readableState;
83147 debug('flow', state.flowing);
83148 while (state.flowing && stream.read() !== null) {}
83149 }
83150
83151 // wrap an old-style stream as the async data source.
83152 // This is *not* part of the readable stream interface.
83153 // It is an ugly unfortunate mess of history.
83154 Readable.prototype.wrap = function (stream) {
83155 var state = this._readableState;
83156 var paused = false;
83157
83158 var self = this;
83159 stream.on('end', function () {
83160 debug('wrapped end');
83161 if (state.decoder && !state.ended) {
83162 var chunk = state.decoder.end();
83163 if (chunk && chunk.length) self.push(chunk);
83164 }
83165
83166 self.push(null);
83167 });
83168
83169 stream.on('data', function (chunk) {
83170 debug('wrapped data');
83171 if (state.decoder) chunk = state.decoder.write(chunk);
83172
83173 // don't skip over falsy values in objectMode
83174 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
83175
83176 var ret = self.push(chunk);
83177 if (!ret) {
83178 paused = true;
83179 stream.pause();
83180 }
83181 });
83182
83183 // proxy all the other methods.
83184 // important when wrapping filters and duplexes.
83185 for (var i in stream) {
83186 if (this[i] === undefined && typeof stream[i] === 'function') {
83187 this[i] = function (method) {
83188 return function () {
83189 return stream[method].apply(stream, arguments);
83190 };
83191 }(i);
83192 }
83193 }
83194
83195 // proxy certain important events.
83196 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
83197 forEach(events, function (ev) {
83198 stream.on(ev, self.emit.bind(self, ev));
83199 });
83200
83201 // when we try to consume some more bytes, simply unpause the
83202 // underlying stream.
83203 self._read = function (n) {
83204 debug('wrapped _read', n);
83205 if (paused) {
83206 paused = false;
83207 stream.resume();
83208 }
83209 };
83210
83211 return self;
83212 };
83213
83214 // exposed for testing purposes only.
83215 Readable._fromList = fromList;
83216
83217 // Pluck off n bytes from an array of buffers.
83218 // Length is the combined lengths of all the buffers in the list.
83219 // This function is designed to be inlinable, so please take care when making
83220 // changes to the function body.
83221 function fromList(n, state) {
83222 // nothing buffered
83223 if (state.length === 0) return null;
83224
83225 var ret;
83226 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
83227 // read it all, truncate the list
83228 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);
83229 state.buffer.clear();
83230 } else {
83231 // read part of list
83232 ret = fromListPartial(n, state.buffer, state.decoder);
83233 }
83234
83235 return ret;
83236 }
83237
83238 // Extracts only enough buffered data to satisfy the amount requested.
83239 // This function is designed to be inlinable, so please take care when making
83240 // changes to the function body.
83241 function fromListPartial(n, list, hasStrings) {
83242 var ret;
83243 if (n < list.head.data.length) {
83244 // slice is the same for buffers and strings
83245 ret = list.head.data.slice(0, n);
83246 list.head.data = list.head.data.slice(n);
83247 } else if (n === list.head.data.length) {
83248 // first chunk is a perfect match
83249 ret = list.shift();
83250 } else {
83251 // result spans more than one buffer
83252 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
83253 }
83254 return ret;
83255 }
83256
83257 // Copies a specified amount of characters from the list of buffered data
83258 // chunks.
83259 // This function is designed to be inlinable, so please take care when making
83260 // changes to the function body.
83261 function copyFromBufferString(n, list) {
83262 var p = list.head;
83263 var c = 1;
83264 var ret = p.data;
83265 n -= ret.length;
83266 while (p = p.next) {
83267 var str = p.data;
83268 var nb = n > str.length ? str.length : n;
83269 if (nb === str.length) ret += str;else ret += str.slice(0, n);
83270 n -= nb;
83271 if (n === 0) {
83272 if (nb === str.length) {
83273 ++c;
83274 if (p.next) list.head = p.next;else list.head = list.tail = null;
83275 } else {
83276 list.head = p;
83277 p.data = str.slice(nb);
83278 }
83279 break;
83280 }
83281 ++c;
83282 }
83283 list.length -= c;
83284 return ret;
83285 }
83286
83287 // Copies a specified amount of bytes from the list of buffered data chunks.
83288 // This function is designed to be inlinable, so please take care when making
83289 // changes to the function body.
83290 function copyFromBuffer(n, list) {
83291 var ret = bufferShim.allocUnsafe(n);
83292 var p = list.head;
83293 var c = 1;
83294 p.data.copy(ret);
83295 n -= p.data.length;
83296 while (p = p.next) {
83297 var buf = p.data;
83298 var nb = n > buf.length ? buf.length : n;
83299 buf.copy(ret, ret.length - n, 0, nb);
83300 n -= nb;
83301 if (n === 0) {
83302 if (nb === buf.length) {
83303 ++c;
83304 if (p.next) list.head = p.next;else list.head = list.tail = null;
83305 } else {
83306 list.head = p;
83307 p.data = buf.slice(nb);
83308 }
83309 break;
83310 }
83311 ++c;
83312 }
83313 list.length -= c;
83314 return ret;
83315 }
83316
83317 function endReadable(stream) {
83318 var state = stream._readableState;
83319
83320 // If we get here before consuming all the bytes, then that is a
83321 // bug in node. Should never happen.
83322 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
83323
83324 if (!state.endEmitted) {
83325 state.ended = true;
83326 processNextTick(endReadableNT, state, stream);
83327 }
83328 }
83329
83330 function endReadableNT(state, stream) {
83331 // Check that we didn't get one last unshift.
83332 if (!state.endEmitted && state.length === 0) {
83333 state.endEmitted = true;
83334 stream.readable = false;
83335 stream.emit('end');
83336 }
83337 }
83338
83339 function forEach(xs, f) {
83340 for (var i = 0, l = xs.length; i < l; i++) {
83341 f(xs[i], i);
83342 }
83343 }
83344
83345 function indexOf(xs, x) {
83346 for (var i = 0, l = xs.length; i < l; i++) {
83347 if (xs[i] === x) return i;
83348 }
83349 return -1;
83350 }
83351 }).call(this,require('_process'))
83352 },{"./_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){
83353 // a transform stream is a readable/writable stream where you do
83354 // something with the data. Sometimes it's called a "filter",
83355 // but that's not a great name for it, since that implies a thing where
83356 // some bits pass through, and others are simply ignored. (That would
83357 // be a valid example of a transform, of course.)
83358 //
83359 // While the output is causally related to the input, it's not a
83360 // necessarily symmetric or synchronous transformation. For example,
83361 // a zlib stream might take multiple plain-text writes(), and then
83362 // emit a single compressed chunk some time in the future.
83363 //
83364 // Here's how this works:
83365 //
83366 // The Transform stream has all the aspects of the readable and writable
83367 // stream classes. When you write(chunk), that calls _write(chunk,cb)
83368 // internally, and returns false if there's a lot of pending writes
83369 // buffered up. When you call read(), that calls _read(n) until
83370 // there's enough pending readable data buffered up.
83371 //
83372 // In a transform stream, the written data is placed in a buffer. When
83373 // _read(n) is called, it transforms the queued up data, calling the
83374 // buffered _write cb's as it consumes chunks. If consuming a single
83375 // written chunk would result in multiple output chunks, then the first
83376 // outputted bit calls the readcb, and subsequent chunks just go into
83377 // the read buffer, and will cause it to emit 'readable' if necessary.
83378 //
83379 // This way, back-pressure is actually determined by the reading side,
83380 // since _read has to be called to start processing a new chunk. However,
83381 // a pathological inflate type of transform can cause excessive buffering
83382 // here. For example, imagine a stream where every byte of input is
83383 // interpreted as an integer from 0-255, and then results in that many
83384 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
83385 // 1kb of data being output. In this case, you could write a very small
83386 // amount of input, and end up with a very large amount of output. In
83387 // such a pathological inflating mechanism, there'd be no way to tell
83388 // the system to stop doing the transform. A single 4MB write could
83389 // cause the system to run out of memory.
83390 //
83391 // However, even in such a pathological case, only a single written chunk
83392 // would be consumed, and then the rest would wait (un-transformed) until
83393 // the results of the previous transformed chunk were consumed.
83394
83395 'use strict';
83396
83397 module.exports = Transform;
83398
83399 var Duplex = require('./_stream_duplex');
83400
83401 /*<replacement>*/
83402 var util = require('core-util-is');
83403 util.inherits = require('inherits');
83404 /*</replacement>*/
83405
83406 util.inherits(Transform, Duplex);
83407
83408 function TransformState(stream) {
83409 this.afterTransform = function (er, data) {
83410 return afterTransform(stream, er, data);
83411 };
83412
83413 this.needTransform = false;
83414 this.transforming = false;
83415 this.writecb = null;
83416 this.writechunk = null;
83417 this.writeencoding = null;
83418 }
83419
83420 function afterTransform(stream, er, data) {
83421 var ts = stream._transformState;
83422 ts.transforming = false;
83423
83424 var cb = ts.writecb;
83425
83426 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
83427
83428 ts.writechunk = null;
83429 ts.writecb = null;
83430
83431 if (data !== null && data !== undefined) stream.push(data);
83432
83433 cb(er);
83434
83435 var rs = stream._readableState;
83436 rs.reading = false;
83437 if (rs.needReadable || rs.length < rs.highWaterMark) {
83438 stream._read(rs.highWaterMark);
83439 }
83440 }
83441
83442 function Transform(options) {
83443 if (!(this instanceof Transform)) return new Transform(options);
83444
83445 Duplex.call(this, options);
83446
83447 this._transformState = new TransformState(this);
83448
83449 var stream = this;
83450
83451 // start out asking for a readable event once data is transformed.
83452 this._readableState.needReadable = true;
83453
83454 // we have implemented the _read method, and done the other things
83455 // that Readable wants before the first _read call, so unset the
83456 // sync guard flag.
83457 this._readableState.sync = false;
83458
83459 if (options) {
83460 if (typeof options.transform === 'function') this._transform = options.transform;
83461
83462 if (typeof options.flush === 'function') this._flush = options.flush;
83463 }
83464
83465 // When the writable side finishes, then flush out anything remaining.
83466 this.once('prefinish', function () {
83467 if (typeof this._flush === 'function') this._flush(function (er, data) {
83468 done(stream, er, data);
83469 });else done(stream);
83470 });
83471 }
83472
83473 Transform.prototype.push = function (chunk, encoding) {
83474 this._transformState.needTransform = false;
83475 return Duplex.prototype.push.call(this, chunk, encoding);
83476 };
83477
83478 // This is the part where you do stuff!
83479 // override this function in implementation classes.
83480 // 'chunk' is an input chunk.
83481 //
83482 // Call `push(newChunk)` to pass along transformed output
83483 // to the readable side. You may call 'push' zero or more times.
83484 //
83485 // Call `cb(err)` when you are done with this chunk. If you pass
83486 // an error, then that'll put the hurt on the whole operation. If you
83487 // never call cb(), then you'll never get another chunk.
83488 Transform.prototype._transform = function (chunk, encoding, cb) {
83489 throw new Error('_transform() is not implemented');
83490 };
83491
83492 Transform.prototype._write = function (chunk, encoding, cb) {
83493 var ts = this._transformState;
83494 ts.writecb = cb;
83495 ts.writechunk = chunk;
83496 ts.writeencoding = encoding;
83497 if (!ts.transforming) {
83498 var rs = this._readableState;
83499 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
83500 }
83501 };
83502
83503 // Doesn't matter what the args are here.
83504 // _transform does all the work.
83505 // That we got here means that the readable side wants more data.
83506 Transform.prototype._read = function (n) {
83507 var ts = this._transformState;
83508
83509 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
83510 ts.transforming = true;
83511 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
83512 } else {
83513 // mark that we need a transform, so that any data that comes in
83514 // will get processed, now that we've asked for it.
83515 ts.needTransform = true;
83516 }
83517 };
83518
83519 function done(stream, er, data) {
83520 if (er) return stream.emit('error', er);
83521
83522 if (data !== null && data !== undefined) stream.push(data);
83523
83524 // if there's nothing in the write buffer, then that means
83525 // that nothing more will ever be provided
83526 var ws = stream._writableState;
83527 var ts = stream._transformState;
83528
83529 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
83530
83531 if (ts.transforming) throw new Error('Calling transform done when still transforming');
83532
83533 return stream.push(null);
83534 }
83535 },{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
83536 (function (process){
83537 // A bit simpler than readable streams.
83538 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
83539 // the drain event emission and buffering.
83540
83541 'use strict';
83542
83543 module.exports = Writable;
83544
83545 /*<replacement>*/
83546 var processNextTick = require('process-nextick-args');
83547 /*</replacement>*/
83548
83549 /*<replacement>*/
83550 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
83551 /*</replacement>*/
83552
83553 /*<replacement>*/
83554 var Duplex;
83555 /*</replacement>*/
83556
83557 Writable.WritableState = WritableState;
83558
83559 /*<replacement>*/
83560 var util = require('core-util-is');
83561 util.inherits = require('inherits');
83562 /*</replacement>*/
83563
83564 /*<replacement>*/
83565 var internalUtil = {
83566 deprecate: require('util-deprecate')
83567 };
83568 /*</replacement>*/
83569
83570 /*<replacement>*/
83571 var Stream;
83572 (function () {
83573 try {
83574 Stream = require('st' + 'ream');
83575 } catch (_) {} finally {
83576 if (!Stream) Stream = require('events').EventEmitter;
83577 }
83578 })();
83579 /*</replacement>*/
83580
83581 var Buffer = require('buffer').Buffer;
83582 /*<replacement>*/
83583 var bufferShim = require('buffer-shims');
83584 /*</replacement>*/
83585
83586 util.inherits(Writable, Stream);
83587
83588 function nop() {}
83589
83590 function WriteReq(chunk, encoding, cb) {
83591 this.chunk = chunk;
83592 this.encoding = encoding;
83593 this.callback = cb;
83594 this.next = null;
83595 }
83596
83597 function WritableState(options, stream) {
83598 Duplex = Duplex || require('./_stream_duplex');
83599
83600 options = options || {};
83601
83602 // object stream flag to indicate whether or not this stream
83603 // contains buffers or objects.
83604 this.objectMode = !!options.objectMode;
83605
83606 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
83607
83608 // the point at which write() starts returning false
83609 // Note: 0 is a valid value, means that we always return false if
83610 // the entire buffer is not flushed immediately on write()
83611 var hwm = options.highWaterMark;
83612 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
83613 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
83614
83615 // cast to ints.
83616 this.highWaterMark = ~ ~this.highWaterMark;
83617
83618 // drain event flag.
83619 this.needDrain = false;
83620 // at the start of calling end()
83621 this.ending = false;
83622 // when end() has been called, and returned
83623 this.ended = false;
83624 // when 'finish' is emitted
83625 this.finished = false;
83626
83627 // should we decode strings into buffers before passing to _write?
83628 // this is here so that some node-core streams can optimize string
83629 // handling at a lower level.
83630 var noDecode = options.decodeStrings === false;
83631 this.decodeStrings = !noDecode;
83632
83633 // Crypto is kind of old and crusty. Historically, its default string
83634 // encoding is 'binary' so we have to make this configurable.
83635 // Everything else in the universe uses 'utf8', though.
83636 this.defaultEncoding = options.defaultEncoding || 'utf8';
83637
83638 // not an actual buffer we keep track of, but a measurement
83639 // of how much we're waiting to get pushed to some underlying
83640 // socket or file.
83641 this.length = 0;
83642
83643 // a flag to see when we're in the middle of a write.
83644 this.writing = false;
83645
83646 // when true all writes will be buffered until .uncork() call
83647 this.corked = 0;
83648
83649 // a flag to be able to tell if the onwrite cb is called immediately,
83650 // or on a later tick. We set this to true at first, because any
83651 // actions that shouldn't happen until "later" should generally also
83652 // not happen before the first write call.
83653 this.sync = true;
83654
83655 // a flag to know if we're processing previously buffered items, which
83656 // may call the _write() callback in the same tick, so that we don't
83657 // end up in an overlapped onwrite situation.
83658 this.bufferProcessing = false;
83659
83660 // the callback that's passed to _write(chunk,cb)
83661 this.onwrite = function (er) {
83662 onwrite(stream, er);
83663 };
83664
83665 // the callback that the user supplies to write(chunk,encoding,cb)
83666 this.writecb = null;
83667
83668 // the amount that is being written when _write is called.
83669 this.writelen = 0;
83670
83671 this.bufferedRequest = null;
83672 this.lastBufferedRequest = null;
83673
83674 // number of pending user-supplied write callbacks
83675 // this must be 0 before 'finish' can be emitted
83676 this.pendingcb = 0;
83677
83678 // emit prefinish if the only thing we're waiting for is _write cbs
83679 // This is relevant for synchronous Transform streams
83680 this.prefinished = false;
83681
83682 // True if the error was already emitted and should not be thrown again
83683 this.errorEmitted = false;
83684
83685 // count buffered requests
83686 this.bufferedRequestCount = 0;
83687
83688 // allocate the first CorkedRequest, there is always
83689 // one allocated and free to use, and we maintain at most two
83690 this.corkedRequestsFree = new CorkedRequest(this);
83691 }
83692
83693 WritableState.prototype.getBuffer = function getBuffer() {
83694 var current = this.bufferedRequest;
83695 var out = [];
83696 while (current) {
83697 out.push(current);
83698 current = current.next;
83699 }
83700 return out;
83701 };
83702
83703 (function () {
83704 try {
83705 Object.defineProperty(WritableState.prototype, 'buffer', {
83706 get: internalUtil.deprecate(function () {
83707 return this.getBuffer();
83708 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
83709 });
83710 } catch (_) {}
83711 })();
83712
83713 // Test _writableState for inheritance to account for Duplex streams,
83714 // whose prototype chain only points to Readable.
83715 var realHasInstance;
83716 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
83717 realHasInstance = Function.prototype[Symbol.hasInstance];
83718 Object.defineProperty(Writable, Symbol.hasInstance, {
83719 value: function (object) {
83720 if (realHasInstance.call(this, object)) return true;
83721
83722 return object && object._writableState instanceof WritableState;
83723 }
83724 });
83725 } else {
83726 realHasInstance = function (object) {
83727 return object instanceof this;
83728 };
83729 }
83730
83731 function Writable(options) {
83732 Duplex = Duplex || require('./_stream_duplex');
83733
83734 // Writable ctor is applied to Duplexes, too.
83735 // `realHasInstance` is necessary because using plain `instanceof`
83736 // would return false, as no `_writableState` property is attached.
83737
83738 // Trying to use the custom `instanceof` for Writable here will also break the
83739 // Node.js LazyTransform implementation, which has a non-trivial getter for
83740 // `_writableState` that would lead to infinite recursion.
83741 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
83742 return new Writable(options);
83743 }
83744
83745 this._writableState = new WritableState(options, this);
83746
83747 // legacy.
83748 this.writable = true;
83749
83750 if (options) {
83751 if (typeof options.write === 'function') this._write = options.write;
83752
83753 if (typeof options.writev === 'function') this._writev = options.writev;
83754 }
83755
83756 Stream.call(this);
83757 }
83758
83759 // Otherwise people can pipe Writable streams, which is just wrong.
83760 Writable.prototype.pipe = function () {
83761 this.emit('error', new Error('Cannot pipe, not readable'));
83762 };
83763
83764 function writeAfterEnd(stream, cb) {
83765 var er = new Error('write after end');
83766 // TODO: defer error events consistently everywhere, not just the cb
83767 stream.emit('error', er);
83768 processNextTick(cb, er);
83769 }
83770
83771 // If we get something that is not a buffer, string, null, or undefined,
83772 // and we're not in objectMode, then that's an error.
83773 // Otherwise stream chunks are all considered to be of length=1, and the
83774 // watermarks determine how many objects to keep in the buffer, rather than
83775 // how many bytes or characters.
83776 function validChunk(stream, state, chunk, cb) {
83777 var valid = true;
83778 var er = false;
83779 // Always throw error if a null is written
83780 // if we are not in object mode then throw
83781 // if it is not a buffer, string, or undefined.
83782 if (chunk === null) {
83783 er = new TypeError('May not write null values to stream');
83784 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
83785 er = new TypeError('Invalid non-string/buffer chunk');
83786 }
83787 if (er) {
83788 stream.emit('error', er);
83789 processNextTick(cb, er);
83790 valid = false;
83791 }
83792 return valid;
83793 }
83794
83795 Writable.prototype.write = function (chunk, encoding, cb) {
83796 var state = this._writableState;
83797 var ret = false;
83798
83799 if (typeof encoding === 'function') {
83800 cb = encoding;
83801 encoding = null;
83802 }
83803
83804 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
83805
83806 if (typeof cb !== 'function') cb = nop;
83807
83808 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
83809 state.pendingcb++;
83810 ret = writeOrBuffer(this, state, chunk, encoding, cb);
83811 }
83812
83813 return ret;
83814 };
83815
83816 Writable.prototype.cork = function () {
83817 var state = this._writableState;
83818
83819 state.corked++;
83820 };
83821
83822 Writable.prototype.uncork = function () {
83823 var state = this._writableState;
83824
83825 if (state.corked) {
83826 state.corked--;
83827
83828 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
83829 }
83830 };
83831
83832 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
83833 // node::ParseEncoding() requires lower case.
83834 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
83835 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);
83836 this._writableState.defaultEncoding = encoding;
83837 return this;
83838 };
83839
83840 function decodeChunk(state, chunk, encoding) {
83841 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
83842 chunk = bufferShim.from(chunk, encoding);
83843 }
83844 return chunk;
83845 }
83846
83847 // if we're already writing something, then just put this
83848 // in the queue, and wait our turn. Otherwise, call _write
83849 // If we return false, then we need a drain event, so set that flag.
83850 function writeOrBuffer(stream, state, chunk, encoding, cb) {
83851 chunk = decodeChunk(state, chunk, encoding);
83852
83853 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
83854 var len = state.objectMode ? 1 : chunk.length;
83855
83856 state.length += len;
83857
83858 var ret = state.length < state.highWaterMark;
83859 // we must ensure that previous needDrain will not be reset to false.
83860 if (!ret) state.needDrain = true;
83861
83862 if (state.writing || state.corked) {
83863 var last = state.lastBufferedRequest;
83864 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
83865 if (last) {
83866 last.next = state.lastBufferedRequest;
83867 } else {
83868 state.bufferedRequest = state.lastBufferedRequest;
83869 }
83870 state.bufferedRequestCount += 1;
83871 } else {
83872 doWrite(stream, state, false, len, chunk, encoding, cb);
83873 }
83874
83875 return ret;
83876 }
83877
83878 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
83879 state.writelen = len;
83880 state.writecb = cb;
83881 state.writing = true;
83882 state.sync = true;
83883 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
83884 state.sync = false;
83885 }
83886
83887 function onwriteError(stream, state, sync, er, cb) {
83888 --state.pendingcb;
83889 if (sync) processNextTick(cb, er);else cb(er);
83890
83891 stream._writableState.errorEmitted = true;
83892 stream.emit('error', er);
83893 }
83894
83895 function onwriteStateUpdate(state) {
83896 state.writing = false;
83897 state.writecb = null;
83898 state.length -= state.writelen;
83899 state.writelen = 0;
83900 }
83901
83902 function onwrite(stream, er) {
83903 var state = stream._writableState;
83904 var sync = state.sync;
83905 var cb = state.writecb;
83906
83907 onwriteStateUpdate(state);
83908
83909 if (er) onwriteError(stream, state, sync, er, cb);else {
83910 // Check if we're actually ready to finish, but don't emit yet
83911 var finished = needFinish(state);
83912
83913 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
83914 clearBuffer(stream, state);
83915 }
83916
83917 if (sync) {
83918 /*<replacement>*/
83919 asyncWrite(afterWrite, stream, state, finished, cb);
83920 /*</replacement>*/
83921 } else {
83922 afterWrite(stream, state, finished, cb);
83923 }
83924 }
83925 }
83926
83927 function afterWrite(stream, state, finished, cb) {
83928 if (!finished) onwriteDrain(stream, state);
83929 state.pendingcb--;
83930 cb();
83931 finishMaybe(stream, state);
83932 }
83933
83934 // Must force callback to be called on nextTick, so that we don't
83935 // emit 'drain' before the write() consumer gets the 'false' return
83936 // value, and has a chance to attach a 'drain' listener.
83937 function onwriteDrain(stream, state) {
83938 if (state.length === 0 && state.needDrain) {
83939 state.needDrain = false;
83940 stream.emit('drain');
83941 }
83942 }
83943
83944 // if there's something in the buffer waiting, then process it
83945 function clearBuffer(stream, state) {
83946 state.bufferProcessing = true;
83947 var entry = state.bufferedRequest;
83948
83949 if (stream._writev && entry && entry.next) {
83950 // Fast case, write everything using _writev()
83951 var l = state.bufferedRequestCount;
83952 var buffer = new Array(l);
83953 var holder = state.corkedRequestsFree;
83954 holder.entry = entry;
83955
83956 var count = 0;
83957 while (entry) {
83958 buffer[count] = entry;
83959 entry = entry.next;
83960 count += 1;
83961 }
83962
83963 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
83964
83965 // doWrite is almost always async, defer these to save a bit of time
83966 // as the hot path ends with doWrite
83967 state.pendingcb++;
83968 state.lastBufferedRequest = null;
83969 if (holder.next) {
83970 state.corkedRequestsFree = holder.next;
83971 holder.next = null;
83972 } else {
83973 state.corkedRequestsFree = new CorkedRequest(state);
83974 }
83975 } else {
83976 // Slow case, write chunks one-by-one
83977 while (entry) {
83978 var chunk = entry.chunk;
83979 var encoding = entry.encoding;
83980 var cb = entry.callback;
83981 var len = state.objectMode ? 1 : chunk.length;
83982
83983 doWrite(stream, state, false, len, chunk, encoding, cb);
83984 entry = entry.next;
83985 // if we didn't call the onwrite immediately, then
83986 // it means that we need to wait until it does.
83987 // also, that means that the chunk and cb are currently
83988 // being processed, so move the buffer counter past them.
83989 if (state.writing) {
83990 break;
83991 }
83992 }
83993
83994 if (entry === null) state.lastBufferedRequest = null;
83995 }
83996
83997 state.bufferedRequestCount = 0;
83998 state.bufferedRequest = entry;
83999 state.bufferProcessing = false;
84000 }
84001
84002 Writable.prototype._write = function (chunk, encoding, cb) {
84003 cb(new Error('_write() is not implemented'));
84004 };
84005
84006 Writable.prototype._writev = null;
84007
84008 Writable.prototype.end = function (chunk, encoding, cb) {
84009 var state = this._writableState;
84010
84011 if (typeof chunk === 'function') {
84012 cb = chunk;
84013 chunk = null;
84014 encoding = null;
84015 } else if (typeof encoding === 'function') {
84016 cb = encoding;
84017 encoding = null;
84018 }
84019
84020 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
84021
84022 // .end() fully uncorks
84023 if (state.corked) {
84024 state.corked = 1;
84025 this.uncork();
84026 }
84027
84028 // ignore unnecessary end() calls.
84029 if (!state.ending && !state.finished) endWritable(this, state, cb);
84030 };
84031
84032 function needFinish(state) {
84033 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
84034 }
84035
84036 function prefinish(stream, state) {
84037 if (!state.prefinished) {
84038 state.prefinished = true;
84039 stream.emit('prefinish');
84040 }
84041 }
84042
84043 function finishMaybe(stream, state) {
84044 var need = needFinish(state);
84045 if (need) {
84046 if (state.pendingcb === 0) {
84047 prefinish(stream, state);
84048 state.finished = true;
84049 stream.emit('finish');
84050 } else {
84051 prefinish(stream, state);
84052 }
84053 }
84054 return need;
84055 }
84056
84057 function endWritable(stream, state, cb) {
84058 state.ending = true;
84059 finishMaybe(stream, state);
84060 if (cb) {
84061 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
84062 }
84063 state.ended = true;
84064 stream.writable = false;
84065 }
84066
84067 // It seems a linked list but it is not
84068 // there will be only 2 of these for each stream
84069 function CorkedRequest(state) {
84070 var _this = this;
84071
84072 this.next = null;
84073 this.entry = null;
84074
84075 this.finish = function (err) {
84076 var entry = _this.entry;
84077 _this.entry = null;
84078 while (entry) {
84079 var cb = entry.callback;
84080 state.pendingcb--;
84081 cb(err);
84082 entry = entry.next;
84083 }
84084 if (state.corkedRequestsFree) {
84085 state.corkedRequestsFree.next = _this;
84086 } else {
84087 state.corkedRequestsFree = _this;
84088 }
84089 };
84090 }
84091 }).call(this,require('_process'))
84092 },{"./_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){
84093 'use strict';
84094
84095 var Buffer = require('buffer').Buffer;
84096 /*<replacement>*/
84097 var bufferShim = require('buffer-shims');
84098 /*</replacement>*/
84099
84100 module.exports = BufferList;
84101
84102 function BufferList() {
84103 this.head = null;
84104 this.tail = null;
84105 this.length = 0;
84106 }
84107
84108 BufferList.prototype.push = function (v) {
84109 var entry = { data: v, next: null };
84110 if (this.length > 0) this.tail.next = entry;else this.head = entry;
84111 this.tail = entry;
84112 ++this.length;
84113 };
84114
84115 BufferList.prototype.unshift = function (v) {
84116 var entry = { data: v, next: this.head };
84117 if (this.length === 0) this.tail = entry;
84118 this.head = entry;
84119 ++this.length;
84120 };
84121
84122 BufferList.prototype.shift = function () {
84123 if (this.length === 0) return;
84124 var ret = this.head.data;
84125 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
84126 --this.length;
84127 return ret;
84128 };
84129
84130 BufferList.prototype.clear = function () {
84131 this.head = this.tail = null;
84132 this.length = 0;
84133 };
84134
84135 BufferList.prototype.join = function (s) {
84136 if (this.length === 0) return '';
84137 var p = this.head;
84138 var ret = '' + p.data;
84139 while (p = p.next) {
84140 ret += s + p.data;
84141 }return ret;
84142 };
84143
84144 BufferList.prototype.concat = function (n) {
84145 if (this.length === 0) return bufferShim.alloc(0);
84146 if (this.length === 1) return this.head.data;
84147 var ret = bufferShim.allocUnsafe(n >>> 0);
84148 var p = this.head;
84149 var i = 0;
84150 while (p) {
84151 p.data.copy(ret, i);
84152 i += p.data.length;
84153 p = p.next;
84154 }
84155 return ret;
84156 };
84157 },{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
84158 module.exports = require("./lib/_stream_passthrough.js")
84159
84160 },{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
84161 (function (process){
84162 var Stream = (function (){
84163 try {
84164 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
84165 } catch(_){}
84166 }());
84167 exports = module.exports = require('./lib/_stream_readable.js');
84168 exports.Stream = Stream || exports;
84169 exports.Readable = exports;
84170 exports.Writable = require('./lib/_stream_writable.js');
84171 exports.Duplex = require('./lib/_stream_duplex.js');
84172 exports.Transform = require('./lib/_stream_transform.js');
84173 exports.PassThrough = require('./lib/_stream_passthrough.js');
84174
84175 if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
84176 module.exports = Stream;
84177 }
84178
84179 }).call(this,require('_process'))
84180 },{"./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){
84181 module.exports = require("./lib/_stream_transform.js")
84182
84183 },{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
84184 module.exports = require("./lib/_stream_writable.js")
84185
84186 },{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
84187 // Copyright Joyent, Inc. and other Node contributors.
84188 //
84189 // Permission is hereby granted, free of charge, to any person obtaining a
84190 // copy of this software and associated documentation files (the
84191 // "Software"), to deal in the Software without restriction, including
84192 // without limitation the rights to use, copy, modify, merge, publish,
84193 // distribute, sublicense, and/or sell copies of the Software, and to permit
84194 // persons to whom the Software is furnished to do so, subject to the
84195 // following conditions:
84196 //
84197 // The above copyright notice and this permission notice shall be included
84198 // in all copies or substantial portions of the Software.
84199 //
84200 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
84201 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
84202 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
84203 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
84204 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
84205 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
84206 // USE OR OTHER DEALINGS IN THE SOFTWARE.
84207
84208 module.exports = Stream;
84209
84210 var EE = require('events').EventEmitter;
84211 var inherits = require('inherits');
84212
84213 inherits(Stream, EE);
84214 Stream.Readable = require('readable-stream/readable.js');
84215 Stream.Writable = require('readable-stream/writable.js');
84216 Stream.Duplex = require('readable-stream/duplex.js');
84217 Stream.Transform = require('readable-stream/transform.js');
84218 Stream.PassThrough = require('readable-stream/passthrough.js');
84219
84220 // Backwards-compat with node 0.4.x
84221 Stream.Stream = Stream;
84222
84223
84224
84225 // old-style streams. Note that the pipe method (the only relevant
84226 // part of this class) is overridden in the Readable class.
84227
84228 function Stream() {
84229 EE.call(this);
84230 }
84231
84232 Stream.prototype.pipe = function(dest, options) {
84233 var source = this;
84234
84235 function ondata(chunk) {
84236 if (dest.writable) {
84237 if (false === dest.write(chunk) && source.pause) {
84238 source.pause();
84239 }
84240 }
84241 }
84242
84243 source.on('data', ondata);
84244
84245 function ondrain() {
84246 if (source.readable && source.resume) {
84247 source.resume();
84248 }
84249 }
84250
84251 dest.on('drain', ondrain);
84252
84253 // If the 'end' option is not supplied, dest.end() will be called when
84254 // source gets the 'end' or 'close' events. Only dest.end() once.
84255 if (!dest._isStdio && (!options || options.end !== false)) {
84256 source.on('end', onend);
84257 source.on('close', onclose);
84258 }
84259
84260 var didOnEnd = false;
84261 function onend() {
84262 if (didOnEnd) return;
84263 didOnEnd = true;
84264
84265 dest.end();
84266 }
84267
84268
84269 function onclose() {
84270 if (didOnEnd) return;
84271 didOnEnd = true;
84272
84273 if (typeof dest.destroy === 'function') dest.destroy();
84274 }
84275
84276 // don't leave dangling pipes when there are errors.
84277 function onerror(er) {
84278 cleanup();
84279 if (EE.listenerCount(this, 'error') === 0) {
84280 throw er; // Unhandled stream error in pipe.
84281 }
84282 }
84283
84284 source.on('error', onerror);
84285 dest.on('error', onerror);
84286
84287 // remove all the event listeners that were added.
84288 function cleanup() {
84289 source.removeListener('data', ondata);
84290 dest.removeListener('drain', ondrain);
84291
84292 source.removeListener('end', onend);
84293 source.removeListener('close', onclose);
84294
84295 source.removeListener('error', onerror);
84296 dest.removeListener('error', onerror);
84297
84298 source.removeListener('end', cleanup);
84299 source.removeListener('close', cleanup);
84300
84301 dest.removeListener('close', cleanup);
84302 }
84303
84304 source.on('end', cleanup);
84305 source.on('close', cleanup);
84306
84307 dest.on('close', cleanup);
84308
84309 dest.emit('pipe', source);
84310
84311 // Allow for unix-like usage: A.pipe(B).pipe(C)
84312 return dest;
84313 };
84314
84315 },{"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){
84316 // Copyright Joyent, Inc. and other Node contributors.
84317 //
84318 // Permission is hereby granted, free of charge, to any person obtaining a
84319 // copy of this software and associated documentation files (the
84320 // "Software"), to deal in the Software without restriction, including
84321 // without limitation the rights to use, copy, modify, merge, publish,
84322 // distribute, sublicense, and/or sell copies of the Software, and to permit
84323 // persons to whom the Software is furnished to do so, subject to the
84324 // following conditions:
84325 //
84326 // The above copyright notice and this permission notice shall be included
84327 // in all copies or substantial portions of the Software.
84328 //
84329 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
84330 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
84331 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
84332 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
84333 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
84334 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
84335 // USE OR OTHER DEALINGS IN THE SOFTWARE.
84336
84337 var Buffer = require('buffer').Buffer;
84338
84339 var isBufferEncoding = Buffer.isEncoding
84340 || function(encoding) {
84341 switch (encoding && encoding.toLowerCase()) {
84342 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;
84343 default: return false;
84344 }
84345 }
84346
84347
84348 function assertEncoding(encoding) {
84349 if (encoding && !isBufferEncoding(encoding)) {
84350 throw new Error('Unknown encoding: ' + encoding);
84351 }
84352 }
84353
84354 // StringDecoder provides an interface for efficiently splitting a series of
84355 // buffers into a series of JS strings without breaking apart multi-byte
84356 // characters. CESU-8 is handled as part of the UTF-8 encoding.
84357 //
84358 // @TODO Handling all encodings inside a single object makes it very difficult
84359 // to reason about this code, so it should be split up in the future.
84360 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
84361 // points as used by CESU-8.
84362 var StringDecoder = exports.StringDecoder = function(encoding) {
84363 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
84364 assertEncoding(encoding);
84365 switch (this.encoding) {
84366 case 'utf8':
84367 // CESU-8 represents each of Surrogate Pair by 3-bytes
84368 this.surrogateSize = 3;
84369 break;
84370 case 'ucs2':
84371 case 'utf16le':
84372 // UTF-16 represents each of Surrogate Pair by 2-bytes
84373 this.surrogateSize = 2;
84374 this.detectIncompleteChar = utf16DetectIncompleteChar;
84375 break;
84376 case 'base64':
84377 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
84378 this.surrogateSize = 3;
84379 this.detectIncompleteChar = base64DetectIncompleteChar;
84380 break;
84381 default:
84382 this.write = passThroughWrite;
84383 return;
84384 }
84385
84386 // Enough space to store all bytes of a single character. UTF-8 needs 4
84387 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
84388 this.charBuffer = new Buffer(6);
84389 // Number of bytes received for the current incomplete multi-byte character.
84390 this.charReceived = 0;
84391 // Number of bytes expected for the current incomplete multi-byte character.
84392 this.charLength = 0;
84393 };
84394
84395
84396 // write decodes the given buffer and returns it as JS string that is
84397 // guaranteed to not contain any partial multi-byte characters. Any partial
84398 // character found at the end of the buffer is buffered up, and will be
84399 // returned when calling write again with the remaining bytes.
84400 //
84401 // Note: Converting a Buffer containing an orphan surrogate to a String
84402 // currently works, but converting a String to a Buffer (via `new Buffer`, or
84403 // Buffer#write) will replace incomplete surrogates with the unicode
84404 // replacement character. See https://codereview.chromium.org/121173009/ .
84405 StringDecoder.prototype.write = function(buffer) {
84406 var charStr = '';
84407 // if our last write ended with an incomplete multibyte character
84408 while (this.charLength) {
84409 // determine how many remaining bytes this buffer has to offer for this char
84410 var available = (buffer.length >= this.charLength - this.charReceived) ?
84411 this.charLength - this.charReceived :
84412 buffer.length;
84413
84414 // add the new bytes to the char buffer
84415 buffer.copy(this.charBuffer, this.charReceived, 0, available);
84416 this.charReceived += available;
84417
84418 if (this.charReceived < this.charLength) {
84419 // still not enough chars in this buffer? wait for more ...
84420 return '';
84421 }
84422
84423 // remove bytes belonging to the current character from the buffer
84424 buffer = buffer.slice(available, buffer.length);
84425
84426 // get the character that was split
84427 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
84428
84429 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
84430 var charCode = charStr.charCodeAt(charStr.length - 1);
84431 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
84432 this.charLength += this.surrogateSize;
84433 charStr = '';
84434 continue;
84435 }
84436 this.charReceived = this.charLength = 0;
84437
84438 // if there are no more bytes in this buffer, just emit our char
84439 if (buffer.length === 0) {
84440 return charStr;
84441 }
84442 break;
84443 }
84444
84445 // determine and set charLength / charReceived
84446 this.detectIncompleteChar(buffer);
84447
84448 var end = buffer.length;
84449 if (this.charLength) {
84450 // buffer the incomplete character bytes we got
84451 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
84452 end -= this.charReceived;
84453 }
84454
84455 charStr += buffer.toString(this.encoding, 0, end);
84456
84457 var end = charStr.length - 1;
84458 var charCode = charStr.charCodeAt(end);
84459 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
84460 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
84461 var size = this.surrogateSize;
84462 this.charLength += size;
84463 this.charReceived += size;
84464 this.charBuffer.copy(this.charBuffer, size, 0, size);
84465 buffer.copy(this.charBuffer, 0, 0, size);
84466 return charStr.substring(0, end);
84467 }
84468
84469 // or just emit the charStr
84470 return charStr;
84471 };
84472
84473 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
84474 // the end of the given buffer. If so, it sets this.charLength to the byte
84475 // length that character, and sets this.charReceived to the number of bytes
84476 // that are available for this character.
84477 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
84478 // determine how many bytes we have to check at the end of this buffer
84479 var i = (buffer.length >= 3) ? 3 : buffer.length;
84480
84481 // Figure out if one of the last i bytes of our buffer announces an
84482 // incomplete char.
84483 for (; i > 0; i--) {
84484 var c = buffer[buffer.length - i];
84485
84486 // See http://en.wikipedia.org/wiki/UTF-8#Description
84487
84488 // 110XXXXX
84489 if (i == 1 && c >> 5 == 0x06) {
84490 this.charLength = 2;
84491 break;
84492 }
84493
84494 // 1110XXXX
84495 if (i <= 2 && c >> 4 == 0x0E) {
84496 this.charLength = 3;
84497 break;
84498 }
84499
84500 // 11110XXX
84501 if (i <= 3 && c >> 3 == 0x1E) {
84502 this.charLength = 4;
84503 break;
84504 }
84505 }
84506 this.charReceived = i;
84507 };
84508
84509 StringDecoder.prototype.end = function(buffer) {
84510 var res = '';
84511 if (buffer && buffer.length)
84512 res = this.write(buffer);
84513
84514 if (this.charReceived) {
84515 var cr = this.charReceived;
84516 var buf = this.charBuffer;
84517 var enc = this.encoding;
84518 res += buf.slice(0, cr).toString(enc);
84519 }
84520
84521 return res;
84522 };
84523
84524 function passThroughWrite(buffer) {
84525 return buffer.toString(this.encoding);
84526 }
84527
84528 function utf16DetectIncompleteChar(buffer) {
84529 this.charReceived = buffer.length % 2;
84530 this.charLength = this.charReceived ? 2 : 0;
84531 }
84532
84533 function base64DetectIncompleteChar(buffer) {
84534 this.charReceived = buffer.length % 3;
84535 this.charLength = this.charReceived ? 3 : 0;
84536 }
84537
84538 },{"buffer":5}],27:[function(require,module,exports){
84539 (function (global){
84540
84541 /**
84542 * Module exports.
84543 */
84544
84545 module.exports = deprecate;
84546
84547 /**
84548 * Mark that a method should not be used.
84549 * Returns a modified function which warns once by default.
84550 *
84551 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
84552 *
84553 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
84554 * will throw an Error when invoked.
84555 *
84556 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
84557 * will invoke `console.trace()` instead of `console.error()`.
84558 *
84559 * @param {Function} fn - the function to deprecate
84560 * @param {String} msg - the string to print to the console when `fn` is invoked
84561 * @returns {Function} a new "deprecated" version of `fn`
84562 * @api public
84563 */
84564
84565 function deprecate (fn, msg) {
84566 if (config('noDeprecation')) {
84567 return fn;
84568 }
84569
84570 var warned = false;
84571 function deprecated() {
84572 if (!warned) {
84573 if (config('throwDeprecation')) {
84574 throw new Error(msg);
84575 } else if (config('traceDeprecation')) {
84576 console.trace(msg);
84577 } else {
84578 console.warn(msg);
84579 }
84580 warned = true;
84581 }
84582 return fn.apply(this, arguments);
84583 }
84584
84585 return deprecated;
84586 }
84587
84588 /**
84589 * Checks `localStorage` for boolean values for the given `name`.
84590 *
84591 * @param {String} name
84592 * @returns {Boolean}
84593 * @api private
84594 */
84595
84596 function config (name) {
84597 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
84598 try {
84599 if (!global.localStorage) return false;
84600 } catch (_) {
84601 return false;
84602 }
84603 var val = global.localStorage[name];
84604 if (null == val) return false;
84605 return String(val).toLowerCase() === 'true';
84606 }
84607
84608 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
84609 },{}],28:[function(require,module,exports){
84610 arguments[4][9][0].apply(exports,arguments)
84611 },{"dup":9}],29:[function(require,module,exports){
84612 module.exports = function isBuffer(arg) {
84613 return arg && typeof arg === 'object'
84614 && typeof arg.copy === 'function'
84615 && typeof arg.fill === 'function'
84616 && typeof arg.readUInt8 === 'function';
84617 }
84618 },{}],30:[function(require,module,exports){
84619 (function (process,global){
84620 // Copyright Joyent, Inc. and other Node contributors.
84621 //
84622 // Permission is hereby granted, free of charge, to any person obtaining a
84623 // copy of this software and associated documentation files (the
84624 // "Software"), to deal in the Software without restriction, including
84625 // without limitation the rights to use, copy, modify, merge, publish,
84626 // distribute, sublicense, and/or sell copies of the Software, and to permit
84627 // persons to whom the Software is furnished to do so, subject to the
84628 // following conditions:
84629 //
84630 // The above copyright notice and this permission notice shall be included
84631 // in all copies or substantial portions of the Software.
84632 //
84633 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
84634 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
84635 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
84636 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
84637 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
84638 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
84639 // USE OR OTHER DEALINGS IN THE SOFTWARE.
84640
84641 var formatRegExp = /%[sdj%]/g;
84642 exports.format = function(f) {
84643 if (!isString(f)) {
84644 var objects = [];
84645 for (var i = 0; i < arguments.length; i++) {
84646 objects.push(inspect(arguments[i]));
84647 }
84648 return objects.join(' ');
84649 }
84650
84651 var i = 1;
84652 var args = arguments;
84653 var len = args.length;
84654 var str = String(f).replace(formatRegExp, function(x) {
84655 if (x === '%%') return '%';
84656 if (i >= len) return x;
84657 switch (x) {
84658 case '%s': return String(args[i++]);
84659 case '%d': return Number(args[i++]);
84660 case '%j':
84661 try {
84662 return JSON.stringify(args[i++]);
84663 } catch (_) {
84664 return '[Circular]';
84665 }
84666 default:
84667 return x;
84668 }
84669 });
84670 for (var x = args[i]; i < len; x = args[++i]) {
84671 if (isNull(x) || !isObject(x)) {
84672 str += ' ' + x;
84673 } else {
84674 str += ' ' + inspect(x);
84675 }
84676 }
84677 return str;
84678 };
84679
84680
84681 // Mark that a method should not be used.
84682 // Returns a modified function which warns once by default.
84683 // If --no-deprecation is set, then it is a no-op.
84684 exports.deprecate = function(fn, msg) {
84685 // Allow for deprecating things in the process of starting up.
84686 if (isUndefined(global.process)) {
84687 return function() {
84688 return exports.deprecate(fn, msg).apply(this, arguments);
84689 };
84690 }
84691
84692 if (process.noDeprecation === true) {
84693 return fn;
84694 }
84695
84696 var warned = false;
84697 function deprecated() {
84698 if (!warned) {
84699 if (process.throwDeprecation) {
84700 throw new Error(msg);
84701 } else if (process.traceDeprecation) {
84702 console.trace(msg);
84703 } else {
84704 console.error(msg);
84705 }
84706 warned = true;
84707 }
84708 return fn.apply(this, arguments);
84709 }
84710
84711 return deprecated;
84712 };
84713
84714
84715 var debugs = {};
84716 var debugEnviron;
84717 exports.debuglog = function(set) {
84718 if (isUndefined(debugEnviron))
84719 debugEnviron = process.env.NODE_DEBUG || '';
84720 set = set.toUpperCase();
84721 if (!debugs[set]) {
84722 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
84723 var pid = process.pid;
84724 debugs[set] = function() {
84725 var msg = exports.format.apply(exports, arguments);
84726 console.error('%s %d: %s', set, pid, msg);
84727 };
84728 } else {
84729 debugs[set] = function() {};
84730 }
84731 }
84732 return debugs[set];
84733 };
84734
84735
84736 /**
84737 * Echos the value of a value. Trys to print the value out
84738 * in the best way possible given the different types.
84739 *
84740 * @param {Object} obj The object to print out.
84741 * @param {Object} opts Optional options object that alters the output.
84742 */
84743 /* legacy: obj, showHidden, depth, colors*/
84744 function inspect(obj, opts) {
84745 // default options
84746 var ctx = {
84747 seen: [],
84748 stylize: stylizeNoColor
84749 };
84750 // legacy...
84751 if (arguments.length >= 3) ctx.depth = arguments[2];
84752 if (arguments.length >= 4) ctx.colors = arguments[3];
84753 if (isBoolean(opts)) {
84754 // legacy...
84755 ctx.showHidden = opts;
84756 } else if (opts) {
84757 // got an "options" object
84758 exports._extend(ctx, opts);
84759 }
84760 // set default options
84761 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
84762 if (isUndefined(ctx.depth)) ctx.depth = 2;
84763 if (isUndefined(ctx.colors)) ctx.colors = false;
84764 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
84765 if (ctx.colors) ctx.stylize = stylizeWithColor;
84766 return formatValue(ctx, obj, ctx.depth);
84767 }
84768 exports.inspect = inspect;
84769
84770
84771 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
84772 inspect.colors = {
84773 'bold' : [1, 22],
84774 'italic' : [3, 23],
84775 'underline' : [4, 24],
84776 'inverse' : [7, 27],
84777 'white' : [37, 39],
84778 'grey' : [90, 39],
84779 'black' : [30, 39],
84780 'blue' : [34, 39],
84781 'cyan' : [36, 39],
84782 'green' : [32, 39],
84783 'magenta' : [35, 39],
84784 'red' : [31, 39],
84785 'yellow' : [33, 39]
84786 };
84787
84788 // Don't use 'blue' not visible on cmd.exe
84789 inspect.styles = {
84790 'special': 'cyan',
84791 'number': 'yellow',
84792 'boolean': 'yellow',
84793 'undefined': 'grey',
84794 'null': 'bold',
84795 'string': 'green',
84796 'date': 'magenta',
84797 // "name": intentionally not styling
84798 'regexp': 'red'
84799 };
84800
84801
84802 function stylizeWithColor(str, styleType) {
84803 var style = inspect.styles[styleType];
84804
84805 if (style) {
84806 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
84807 '\u001b[' + inspect.colors[style][1] + 'm';
84808 } else {
84809 return str;
84810 }
84811 }
84812
84813
84814 function stylizeNoColor(str, styleType) {
84815 return str;
84816 }
84817
84818
84819 function arrayToHash(array) {
84820 var hash = {};
84821
84822 array.forEach(function(val, idx) {
84823 hash[val] = true;
84824 });
84825
84826 return hash;
84827 }
84828
84829
84830 function formatValue(ctx, value, recurseTimes) {
84831 // Provide a hook for user-specified inspect functions.
84832 // Check that value is an object with an inspect function on it
84833 if (ctx.customInspect &&
84834 value &&
84835 isFunction(value.inspect) &&
84836 // Filter out the util module, it's inspect function is special
84837 value.inspect !== exports.inspect &&
84838 // Also filter out any prototype objects using the circular check.
84839 !(value.constructor && value.constructor.prototype === value)) {
84840 var ret = value.inspect(recurseTimes, ctx);
84841 if (!isString(ret)) {
84842 ret = formatValue(ctx, ret, recurseTimes);
84843 }
84844 return ret;
84845 }
84846
84847 // Primitive types cannot have properties
84848 var primitive = formatPrimitive(ctx, value);
84849 if (primitive) {
84850 return primitive;
84851 }
84852
84853 // Look up the keys of the object.
84854 var keys = Object.keys(value);
84855 var visibleKeys = arrayToHash(keys);
84856
84857 if (ctx.showHidden) {
84858 keys = Object.getOwnPropertyNames(value);
84859 }
84860
84861 // IE doesn't make error fields non-enumerable
84862 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
84863 if (isError(value)
84864 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
84865 return formatError(value);
84866 }
84867
84868 // Some type of object without properties can be shortcutted.
84869 if (keys.length === 0) {
84870 if (isFunction(value)) {
84871 var name = value.name ? ': ' + value.name : '';
84872 return ctx.stylize('[Function' + name + ']', 'special');
84873 }
84874 if (isRegExp(value)) {
84875 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
84876 }
84877 if (isDate(value)) {
84878 return ctx.stylize(Date.prototype.toString.call(value), 'date');
84879 }
84880 if (isError(value)) {
84881 return formatError(value);
84882 }
84883 }
84884
84885 var base = '', array = false, braces = ['{', '}'];
84886
84887 // Make Array say that they are Array
84888 if (isArray(value)) {
84889 array = true;
84890 braces = ['[', ']'];
84891 }
84892
84893 // Make functions say that they are functions
84894 if (isFunction(value)) {
84895 var n = value.name ? ': ' + value.name : '';
84896 base = ' [Function' + n + ']';
84897 }
84898
84899 // Make RegExps say that they are RegExps
84900 if (isRegExp(value)) {
84901 base = ' ' + RegExp.prototype.toString.call(value);
84902 }
84903
84904 // Make dates with properties first say the date
84905 if (isDate(value)) {
84906 base = ' ' + Date.prototype.toUTCString.call(value);
84907 }
84908
84909 // Make error with message first say the error
84910 if (isError(value)) {
84911 base = ' ' + formatError(value);
84912 }
84913
84914 if (keys.length === 0 && (!array || value.length == 0)) {
84915 return braces[0] + base + braces[1];
84916 }
84917
84918 if (recurseTimes < 0) {
84919 if (isRegExp(value)) {
84920 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
84921 } else {
84922 return ctx.stylize('[Object]', 'special');
84923 }
84924 }
84925
84926 ctx.seen.push(value);
84927
84928 var output;
84929 if (array) {
84930 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
84931 } else {
84932 output = keys.map(function(key) {
84933 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
84934 });
84935 }
84936
84937 ctx.seen.pop();
84938
84939 return reduceToSingleString(output, base, braces);
84940 }
84941
84942
84943 function formatPrimitive(ctx, value) {
84944 if (isUndefined(value))
84945 return ctx.stylize('undefined', 'undefined');
84946 if (isString(value)) {
84947 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
84948 .replace(/'/g, "\\'")
84949 .replace(/\\"/g, '"') + '\'';
84950 return ctx.stylize(simple, 'string');
84951 }
84952 if (isNumber(value))
84953 return ctx.stylize('' + value, 'number');
84954 if (isBoolean(value))
84955 return ctx.stylize('' + value, 'boolean');
84956 // For some reason typeof null is "object", so special case here.
84957 if (isNull(value))
84958 return ctx.stylize('null', 'null');
84959 }
84960
84961
84962 function formatError(value) {
84963 return '[' + Error.prototype.toString.call(value) + ']';
84964 }
84965
84966
84967 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
84968 var output = [];
84969 for (var i = 0, l = value.length; i < l; ++i) {
84970 if (hasOwnProperty(value, String(i))) {
84971 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
84972 String(i), true));
84973 } else {
84974 output.push('');
84975 }
84976 }
84977 keys.forEach(function(key) {
84978 if (!key.match(/^\d+$/)) {
84979 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
84980 key, true));
84981 }
84982 });
84983 return output;
84984 }
84985
84986
84987 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
84988 var name, str, desc;
84989 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
84990 if (desc.get) {
84991 if (desc.set) {
84992 str = ctx.stylize('[Getter/Setter]', 'special');
84993 } else {
84994 str = ctx.stylize('[Getter]', 'special');
84995 }
84996 } else {
84997 if (desc.set) {
84998 str = ctx.stylize('[Setter]', 'special');
84999 }
85000 }
85001 if (!hasOwnProperty(visibleKeys, key)) {
85002 name = '[' + key + ']';
85003 }
85004 if (!str) {
85005 if (ctx.seen.indexOf(desc.value) < 0) {
85006 if (isNull(recurseTimes)) {
85007 str = formatValue(ctx, desc.value, null);
85008 } else {
85009 str = formatValue(ctx, desc.value, recurseTimes - 1);
85010 }
85011 if (str.indexOf('\n') > -1) {
85012 if (array) {
85013 str = str.split('\n').map(function(line) {
85014 return ' ' + line;
85015 }).join('\n').substr(2);
85016 } else {
85017 str = '\n' + str.split('\n').map(function(line) {
85018 return ' ' + line;
85019 }).join('\n');
85020 }
85021 }
85022 } else {
85023 str = ctx.stylize('[Circular]', 'special');
85024 }
85025 }
85026 if (isUndefined(name)) {
85027 if (array && key.match(/^\d+$/)) {
85028 return str;
85029 }
85030 name = JSON.stringify('' + key);
85031 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
85032 name = name.substr(1, name.length - 2);
85033 name = ctx.stylize(name, 'name');
85034 } else {
85035 name = name.replace(/'/g, "\\'")
85036 .replace(/\\"/g, '"')
85037 .replace(/(^"|"$)/g, "'");
85038 name = ctx.stylize(name, 'string');
85039 }
85040 }
85041
85042 return name + ': ' + str;
85043 }
85044
85045
85046 function reduceToSingleString(output, base, braces) {
85047 var numLinesEst = 0;
85048 var length = output.reduce(function(prev, cur) {
85049 numLinesEst++;
85050 if (cur.indexOf('\n') >= 0) numLinesEst++;
85051 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
85052 }, 0);
85053
85054 if (length > 60) {
85055 return braces[0] +
85056 (base === '' ? '' : base + '\n ') +
85057 ' ' +
85058 output.join(',\n ') +
85059 ' ' +
85060 braces[1];
85061 }
85062
85063 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
85064 }
85065
85066
85067 // NOTE: These type checking functions intentionally don't use `instanceof`
85068 // because it is fragile and can be easily faked with `Object.create()`.
85069 function isArray(ar) {
85070 return Array.isArray(ar);
85071 }
85072 exports.isArray = isArray;
85073
85074 function isBoolean(arg) {
85075 return typeof arg === 'boolean';
85076 }
85077 exports.isBoolean = isBoolean;
85078
85079 function isNull(arg) {
85080 return arg === null;
85081 }
85082 exports.isNull = isNull;
85083
85084 function isNullOrUndefined(arg) {
85085 return arg == null;
85086 }
85087 exports.isNullOrUndefined = isNullOrUndefined;
85088
85089 function isNumber(arg) {
85090 return typeof arg === 'number';
85091 }
85092 exports.isNumber = isNumber;
85093
85094 function isString(arg) {
85095 return typeof arg === 'string';
85096 }
85097 exports.isString = isString;
85098
85099 function isSymbol(arg) {
85100 return typeof arg === 'symbol';
85101 }
85102 exports.isSymbol = isSymbol;
85103
85104 function isUndefined(arg) {
85105 return arg === void 0;
85106 }
85107 exports.isUndefined = isUndefined;
85108
85109 function isRegExp(re) {
85110 return isObject(re) && objectToString(re) === '[object RegExp]';
85111 }
85112 exports.isRegExp = isRegExp;
85113
85114 function isObject(arg) {
85115 return typeof arg === 'object' && arg !== null;
85116 }
85117 exports.isObject = isObject;
85118
85119 function isDate(d) {
85120 return isObject(d) && objectToString(d) === '[object Date]';
85121 }
85122 exports.isDate = isDate;
85123
85124 function isError(e) {
85125 return isObject(e) &&
85126 (objectToString(e) === '[object Error]' || e instanceof Error);
85127 }
85128 exports.isError = isError;
85129
85130 function isFunction(arg) {
85131 return typeof arg === 'function';
85132 }
85133 exports.isFunction = isFunction;
85134
85135 function isPrimitive(arg) {
85136 return arg === null ||
85137 typeof arg === 'boolean' ||
85138 typeof arg === 'number' ||
85139 typeof arg === 'string' ||
85140 typeof arg === 'symbol' || // ES6 symbol
85141 typeof arg === 'undefined';
85142 }
85143 exports.isPrimitive = isPrimitive;
85144
85145 exports.isBuffer = require('./support/isBuffer');
85146
85147 function objectToString(o) {
85148 return Object.prototype.toString.call(o);
85149 }
85150
85151
85152 function pad(n) {
85153 return n < 10 ? '0' + n.toString(10) : n.toString(10);
85154 }
85155
85156
85157 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
85158 'Oct', 'Nov', 'Dec'];
85159
85160 // 26 Feb 16:19:34
85161 function timestamp() {
85162 var d = new Date();
85163 var time = [pad(d.getHours()),
85164 pad(d.getMinutes()),
85165 pad(d.getSeconds())].join(':');
85166 return [d.getDate(), months[d.getMonth()], time].join(' ');
85167 }
85168
85169
85170 // log is just a thin wrapper to console.log that prepends a timestamp
85171 exports.log = function() {
85172 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
85173 };
85174
85175
85176 /**
85177 * Inherit the prototype methods from one constructor into another.
85178 *
85179 * The Function.prototype.inherits from lang.js rewritten as a standalone
85180 * function (not on Function.prototype). NOTE: If this file is to be loaded
85181 * during bootstrapping this function needs to be rewritten using some native
85182 * functions as prototype setup using normal JavaScript does not work as
85183 * expected during bootstrapping (see mirror.js in r114903).
85184 *
85185 * @param {function} ctor Constructor function which needs to inherit the
85186 * prototype.
85187 * @param {function} superCtor Constructor function to inherit prototype from.
85188 */
85189 exports.inherits = require('inherits');
85190
85191 exports._extend = function(origin, add) {
85192 // Don't do anything if add isn't an object
85193 if (!add || !isObject(add)) return origin;
85194
85195 var keys = Object.keys(add);
85196 var i = keys.length;
85197 while (i--) {
85198 origin[keys[i]] = add[keys[i]];
85199 }
85200 return origin;
85201 };
85202
85203 function hasOwnProperty(obj, prop) {
85204 return Object.prototype.hasOwnProperty.call(obj, prop);
85205 }
85206
85207 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
85208 },{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
85209 (function (Buffer){
85210 const createKeccakHash = require('keccak')
85211 const secp256k1 = require('secp256k1')
85212 const assert = require('assert')
85213 const rlp = require('rlp')
85214 const BN = require('bn.js')
85215 const createHash = require('create-hash')
85216 Object.assign(exports, require('ethjs-util'))
85217
85218 /**
85219 * the max integer that this VM can handle (a ```BN```)
85220 * @var {BN} MAX_INTEGER
85221 */
85222 exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
85223
85224 /**
85225 * 2^256 (a ```BN```)
85226 * @var {BN} TWO_POW256
85227 */
85228 exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
85229
85230 /**
85231 * SHA3-256 hash of null (a ```String```)
85232 * @var {String} SHA3_NULL_S
85233 */
85234 exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
85235
85236 /**
85237 * SHA3-256 hash of null (a ```Buffer```)
85238 * @var {Buffer} SHA3_NULL
85239 */
85240 exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
85241
85242 /**
85243 * SHA3-256 of an RLP of an empty array (a ```String```)
85244 * @var {String} SHA3_RLP_ARRAY_S
85245 */
85246 exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
85247
85248 /**
85249 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
85250 * @var {Buffer} SHA3_RLP_ARRAY
85251 */
85252 exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
85253
85254 /**
85255 * SHA3-256 hash of the RLP of null (a ```String```)
85256 * @var {String} SHA3_RLP_S
85257 */
85258 exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
85259
85260 /**
85261 * SHA3-256 hash of the RLP of null (a ```Buffer```)
85262 * @var {Buffer} SHA3_RLP
85263 */
85264 exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
85265
85266 /**
85267 * [`BN`](https://github.com/indutny/bn.js)
85268 * @var {Function}
85269 */
85270 exports.BN = BN
85271
85272 /**
85273 * [`rlp`](https://github.com/ethereumjs/rlp)
85274 * @var {Function}
85275 */
85276 exports.rlp = rlp
85277
85278 /**
85279 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
85280 * @var {Object}
85281 */
85282 exports.secp256k1 = secp256k1
85283
85284 /**
85285 * Returns a buffer filled with 0s
85286 * @method zeros
85287 * @param {Number} bytes the number of bytes the buffer should be
85288 * @return {Buffer}
85289 */
85290 exports.zeros = function (bytes) {
85291 return Buffer.allocUnsafe(bytes).fill(0)
85292 }
85293
85294 /**
85295 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
85296 * Or it truncates the beginning if it exceeds.
85297 * @method lsetLength
85298 * @param {Buffer|Array} msg the value to pad
85299 * @param {Number} length the number of bytes the output should be
85300 * @param {Boolean} [right=false] whether to start padding form the left or right
85301 * @return {Buffer|Array}
85302 */
85303 exports.setLengthLeft = exports.setLength = function (msg, length, right) {
85304 var buf = exports.zeros(length)
85305 msg = exports.toBuffer(msg)
85306 if (right) {
85307 if (msg.length < length) {
85308 msg.copy(buf)
85309 return buf
85310 }
85311 return msg.slice(0, length)
85312 } else {
85313 if (msg.length < length) {
85314 msg.copy(buf, length - msg.length)
85315 return buf
85316 }
85317 return msg.slice(-length)
85318 }
85319 }
85320
85321 /**
85322 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
85323 * Or it truncates the beginning if it exceeds.
85324 * @param {Buffer|Array} msg the value to pad
85325 * @param {Number} length the number of bytes the output should be
85326 * @return {Buffer|Array}
85327 */
85328 exports.setLengthRight = function (msg, length) {
85329 return exports.setLength(msg, length, true)
85330 }
85331
85332 /**
85333 * Trims leading zeros from a `Buffer` or an `Array`
85334 * @param {Buffer|Array|String} a
85335 * @return {Buffer|Array|String}
85336 */
85337 exports.unpad = exports.stripZeros = function (a) {
85338 a = exports.stripHexPrefix(a)
85339 var first = a[0]
85340 while (a.length > 0 && first.toString() === '0') {
85341 a = a.slice(1)
85342 first = a[0]
85343 }
85344 return a
85345 }
85346 /**
85347 * 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.
85348 * @param {*} v the value
85349 */
85350 exports.toBuffer = function (v) {
85351 if (!Buffer.isBuffer(v)) {
85352 if (Array.isArray(v)) {
85353 v = Buffer.from(v)
85354 } else if (typeof v === 'string') {
85355 if (exports.isHexPrefixed(v)) {
85356 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
85357 } else {
85358 v = Buffer.from(v)
85359 }
85360 } else if (typeof v === 'number') {
85361 v = exports.intToBuffer(v)
85362 } else if (v === null || v === undefined) {
85363 v = Buffer.allocUnsafe(0)
85364 } else if (v.toArray) {
85365 // converts a BN to a Buffer
85366 v = Buffer.from(v.toArray())
85367 } else {
85368 throw new Error('invalid type')
85369 }
85370 }
85371 return v
85372 }
85373
85374 /**
85375 * Converts a `Buffer` to a `Number`
85376 * @param {Buffer} buf
85377 * @return {Number}
85378 * @throws If the input number exceeds 53 bits.
85379 */
85380 exports.bufferToInt = function (buf) {
85381 return new BN(exports.toBuffer(buf)).toNumber()
85382 }
85383
85384 /**
85385 * Converts a `Buffer` into a hex `String`
85386 * @param {Buffer} buf
85387 * @return {String}
85388 */
85389 exports.bufferToHex = function (buf) {
85390 buf = exports.toBuffer(buf)
85391 return '0x' + buf.toString('hex')
85392 }
85393
85394 /**
85395 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
85396 * @param {Buffer} num
85397 * @return {BN}
85398 */
85399 exports.fromSigned = function (num) {
85400 return new BN(num).fromTwos(256)
85401 }
85402
85403 /**
85404 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
85405 * @param {BN} num
85406 * @return {Buffer}
85407 */
85408 exports.toUnsigned = function (num) {
85409 return Buffer.from(num.toTwos(256).toArray())
85410 }
85411
85412 /**
85413 * Creates SHA-3 hash of the input
85414 * @param {Buffer|Array|String|Number} a the input data
85415 * @param {Number} [bits=256] the SHA width
85416 * @return {Buffer}
85417 */
85418 exports.sha3 = function (a, bits) {
85419 a = exports.toBuffer(a)
85420 if (!bits) bits = 256
85421
85422 return createKeccakHash('keccak' + bits).update(a).digest()
85423 }
85424
85425 /**
85426 * Creates SHA256 hash of the input
85427 * @param {Buffer|Array|String|Number} a the input data
85428 * @return {Buffer}
85429 */
85430 exports.sha256 = function (a) {
85431 a = exports.toBuffer(a)
85432 return createHash('sha256').update(a).digest()
85433 }
85434
85435 /**
85436 * Creates RIPEMD160 hash of the input
85437 * @param {Buffer|Array|String|Number} a the input data
85438 * @param {Boolean} padded whether it should be padded to 256 bits or not
85439 * @return {Buffer}
85440 */
85441 exports.ripemd160 = function (a, padded) {
85442 a = exports.toBuffer(a)
85443 var hash = createHash('rmd160').update(a).digest()
85444 if (padded === true) {
85445 return exports.setLength(hash, 32)
85446 } else {
85447 return hash
85448 }
85449 }
85450
85451 /**
85452 * Creates SHA-3 hash of the RLP encoded version of the input
85453 * @param {Buffer|Array|String|Number} a the input data
85454 * @return {Buffer}
85455 */
85456 exports.rlphash = function (a) {
85457 return exports.sha3(rlp.encode(a))
85458 }
85459
85460 /**
85461 * Checks if the private key satisfies the rules of the curve secp256k1.
85462 * @param {Buffer} privateKey
85463 * @return {Boolean}
85464 */
85465 exports.isValidPrivate = function (privateKey) {
85466 return secp256k1.privateKeyVerify(privateKey)
85467 }
85468
85469 /**
85470 * Checks if the public key satisfies the rules of the curve secp256k1
85471 * and the requirements of Ethereum.
85472 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
85473 * @param {Boolean} [sanitize=false] Accept public keys in other formats
85474 * @return {Boolean}
85475 */
85476 exports.isValidPublic = function (publicKey, sanitize) {
85477 if (publicKey.length === 64) {
85478 // Convert to SEC1 for secp256k1
85479 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
85480 }
85481
85482 if (!sanitize) {
85483 return false
85484 }
85485
85486 return secp256k1.publicKeyVerify(publicKey)
85487 }
85488
85489 /**
85490 * Returns the ethereum address of a given public key.
85491 * Accepts "Ethereum public keys" and SEC1 encoded keys.
85492 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
85493 * @param {Boolean} [sanitize=false] Accept public keys in other formats
85494 * @return {Buffer}
85495 */
85496 exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
85497 pubKey = exports.toBuffer(pubKey)
85498 if (sanitize && (pubKey.length !== 64)) {
85499 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
85500 }
85501 assert(pubKey.length === 64)
85502 // Only take the lower 160bits of the hash
85503 return exports.sha3(pubKey).slice(-20)
85504 }
85505
85506 /**
85507 * Returns the ethereum public key of a given private key
85508 * @param {Buffer} privateKey A private key must be 256 bits wide
85509 * @return {Buffer}
85510 */
85511 var privateToPublic = exports.privateToPublic = function (privateKey) {
85512 privateKey = exports.toBuffer(privateKey)
85513 // skip the type flag and use the X, Y points
85514 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
85515 }
85516
85517 /**
85518 * Converts a public key to the Ethereum format.
85519 * @param {Buffer} publicKey
85520 * @return {Buffer}
85521 */
85522 exports.importPublic = function (publicKey) {
85523 publicKey = exports.toBuffer(publicKey)
85524 if (publicKey.length !== 64) {
85525 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
85526 }
85527 return publicKey
85528 }
85529
85530 /**
85531 * ECDSA sign
85532 * @param {Buffer} msgHash
85533 * @param {Buffer} privateKey
85534 * @return {Object}
85535 */
85536 exports.ecsign = function (msgHash, privateKey) {
85537 var sig = secp256k1.sign(msgHash, privateKey)
85538
85539 var ret = {}
85540 ret.r = sig.signature.slice(0, 32)
85541 ret.s = sig.signature.slice(32, 64)
85542 ret.v = sig.recovery + 27
85543 return ret
85544 }
85545
85546 /**
85547 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
85548 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
85549 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
85550 * used to produce the signature.
85551 * @param message
85552 * @returns {Buffer} hash
85553 */
85554 exports.hashPersonalMessage = function (message) {
85555 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
85556 return exports.sha3(Buffer.concat([prefix, message]))
85557 }
85558
85559 /**
85560 * ECDSA public key recovery from signature
85561 * @param {Buffer} msgHash
85562 * @param {Number} v
85563 * @param {Buffer} r
85564 * @param {Buffer} s
85565 * @return {Buffer} publicKey
85566 */
85567 exports.ecrecover = function (msgHash, v, r, s) {
85568 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
85569 var recovery = v - 27
85570 if (recovery !== 0 && recovery !== 1) {
85571 throw new Error('Invalid signature v value')
85572 }
85573 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
85574 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
85575 }
85576
85577 /**
85578 * Convert signature parameters into the format of `eth_sign` RPC method
85579 * @param {Number} v
85580 * @param {Buffer} r
85581 * @param {Buffer} s
85582 * @return {String} sig
85583 */
85584 exports.toRpcSig = function (v, r, s) {
85585 // NOTE: with potential introduction of chainId this might need to be updated
85586 if (v !== 27 && v !== 28) {
85587 throw new Error('Invalid recovery id')
85588 }
85589
85590 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
85591 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
85592 return exports.bufferToHex(Buffer.concat([
85593 exports.setLengthLeft(r, 32),
85594 exports.setLengthLeft(s, 32),
85595 exports.toBuffer(v - 27)
85596 ]))
85597 }
85598
85599 /**
85600 * Convert signature format of the `eth_sign` RPC method to signature parameters
85601 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
85602 * @param {String} sig
85603 * @return {Object}
85604 */
85605 exports.fromRpcSig = function (sig) {
85606 sig = exports.toBuffer(sig)
85607
85608 // NOTE: with potential introduction of chainId this might need to be updated
85609 if (sig.length !== 65) {
85610 throw new Error('Invalid signature length')
85611 }
85612
85613 var v = sig[64]
85614 // support both versions of `eth_sign` responses
85615 if (v < 27) {
85616 v += 27
85617 }
85618
85619 return {
85620 v: v,
85621 r: sig.slice(0, 32),
85622 s: sig.slice(32, 64)
85623 }
85624 }
85625
85626 /**
85627 * Returns the ethereum address of a given private key
85628 * @param {Buffer} privateKey A private key must be 256 bits wide
85629 * @return {Buffer}
85630 */
85631 exports.privateToAddress = function (privateKey) {
85632 return exports.publicToAddress(privateToPublic(privateKey))
85633 }
85634
85635 /**
85636 * Checks if the address is a valid. Accepts checksummed addresses too
85637 * @param {String} address
85638 * @return {Boolean}
85639 */
85640 exports.isValidAddress = function (address) {
85641 return /^0x[0-9a-fA-F]{40}$/i.test(address)
85642 }
85643
85644 /**
85645 * Returns a checksummed address
85646 * @param {String} address
85647 * @return {String}
85648 */
85649 exports.toChecksumAddress = function (address) {
85650 address = exports.stripHexPrefix(address).toLowerCase()
85651 var hash = exports.sha3(address).toString('hex')
85652 var ret = '0x'
85653
85654 for (var i = 0; i < address.length; i++) {
85655 if (parseInt(hash[i], 16) >= 8) {
85656 ret += address[i].toUpperCase()
85657 } else {
85658 ret += address[i]
85659 }
85660 }
85661
85662 return ret
85663 }
85664
85665 /**
85666 * Checks if the address is a valid checksummed address
85667 * @param {Buffer} address
85668 * @return {Boolean}
85669 */
85670 exports.isValidChecksumAddress = function (address) {
85671 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
85672 }
85673
85674 /**
85675 * Generates an address of a newly created contract
85676 * @param {Buffer} from the address which is creating this new address
85677 * @param {Buffer} nonce the nonce of the from account
85678 * @return {Buffer}
85679 */
85680 exports.generateAddress = function (from, nonce) {
85681 from = exports.toBuffer(from)
85682 nonce = new BN(nonce)
85683
85684 if (nonce.isZero()) {
85685 // in RLP we want to encode null in the case of zero nonce
85686 // read the RLP documentation for an answer if you dare
85687 nonce = null
85688 } else {
85689 nonce = Buffer.from(nonce.toArray())
85690 }
85691
85692 // Only take the lower 160bits of the hash
85693 return exports.rlphash([from, nonce]).slice(-20)
85694 }
85695
85696 /**
85697 * Returns true if the supplied address belongs to a precompiled account
85698 * @param {Buffer|String} address
85699 * @return {Boolean}
85700 */
85701 exports.isPrecompiled = function (address) {
85702 var a = exports.unpad(address)
85703 return a.length === 1 && a[0] > 0 && a[0] < 5
85704 }
85705
85706 /**
85707 * Adds "0x" to a given `String` if it does not already start with "0x"
85708 * @param {String} str
85709 * @return {String}
85710 */
85711 exports.addHexPrefix = function (str) {
85712 if (typeof str !== 'string') {
85713 return str
85714 }
85715
85716 return exports.isHexPrefixed(str) ? str : '0x' + str
85717 }
85718
85719 /**
85720 * Validate ECDSA signature
85721 * @method isValidSignature
85722 * @param {Buffer} v
85723 * @param {Buffer} r
85724 * @param {Buffer} s
85725 * @param {Boolean} [homestead=true]
85726 * @return {Boolean}
85727 */
85728
85729 exports.isValidSignature = function (v, r, s, homestead) {
85730 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
85731 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
85732
85733 if (r.length !== 32 || s.length !== 32) {
85734 return false
85735 }
85736
85737 if (v !== 27 && v !== 28) {
85738 return false
85739 }
85740
85741 r = new BN(r)
85742 s = new BN(s)
85743
85744 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
85745 return false
85746 }
85747
85748 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
85749 return false
85750 }
85751
85752 return true
85753 }
85754
85755 /**
85756 * Converts a `Buffer` or `Array` to JSON
85757 * @param {Buffer|Array} ba
85758 * @return {Array|String|null}
85759 */
85760 exports.baToJSON = function (ba) {
85761 if (Buffer.isBuffer(ba)) {
85762 return '0x' + ba.toString('hex')
85763 } else if (ba instanceof Array) {
85764 var array = []
85765 for (var i = 0; i < ba.length; i++) {
85766 array.push(exports.baToJSON(ba[i]))
85767 }
85768 return array
85769 }
85770 }
85771
85772 /**
85773 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
85774 * @param {Object} self the `Object` to define properties on
85775 * @param {Array} fields an array fields to define. Fields can contain:
85776 * * `name` - the name of the properties
85777 * * `length` - the number of bytes the field can have
85778 * * `allowLess` - if the field can be less than the length
85779 * * `allowEmpty`
85780 * @param {*} data data to be validated against the definitions
85781 */
85782 exports.defineProperties = function (self, fields, data) {
85783 self.raw = []
85784 self._fields = []
85785
85786 // attach the `toJSON`
85787 self.toJSON = function (label) {
85788 if (label) {
85789 var obj = {}
85790 self._fields.forEach(function (field) {
85791 obj[field] = '0x' + self[field].toString('hex')
85792 })
85793 return obj
85794 }
85795 return exports.baToJSON(this.raw)
85796 }
85797
85798 self.serialize = function serialize () {
85799 return rlp.encode(self.raw)
85800 }
85801
85802 fields.forEach(function (field, i) {
85803 self._fields.push(field.name)
85804 function getter () {
85805 return self.raw[i]
85806 }
85807 function setter (v) {
85808 v = exports.toBuffer(v)
85809
85810 if (v.toString('hex') === '00' && !field.allowZero) {
85811 v = Buffer.allocUnsafe(0)
85812 }
85813
85814 if (field.allowLess && field.length) {
85815 v = exports.stripZeros(v)
85816 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
85817 } else if (!(field.allowZero && v.length === 0) && field.length) {
85818 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
85819 }
85820
85821 self.raw[i] = v
85822 }
85823
85824 Object.defineProperty(self, field.name, {
85825 enumerable: true,
85826 configurable: true,
85827 get: getter,
85828 set: setter
85829 })
85830
85831 if (field.default) {
85832 self[field.name] = field.default
85833 }
85834
85835 // attach alias
85836 if (field.alias) {
85837 Object.defineProperty(self, field.alias, {
85838 enumerable: false,
85839 configurable: true,
85840 set: setter,
85841 get: getter
85842 })
85843 }
85844 })
85845
85846 // if the constuctor is passed data
85847 if (data) {
85848 if (typeof data === 'string') {
85849 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
85850 }
85851
85852 if (Buffer.isBuffer(data)) {
85853 data = rlp.decode(data)
85854 }
85855
85856 if (Array.isArray(data)) {
85857 if (data.length > self._fields.length) {
85858 throw (new Error('wrong number of fields in data'))
85859 }
85860
85861 // make sure all the items are buffers
85862 data.forEach(function (d, i) {
85863 self[self._fields[i]] = exports.toBuffer(d)
85864 })
85865 } else if (typeof data === 'object') {
85866 const keys = Object.keys(data)
85867 fields.forEach(function (field) {
85868 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
85869 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
85870 })
85871 } else {
85872 throw new Error('invalid data')
85873 }
85874 }
85875 }
85876
85877 }).call(this,require("buffer").Buffer)
85878 },{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
85879 (function (Buffer){
85880 // Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
85881 // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
85882 // NOTE: SIGHASH byte ignored AND restricted, truncate before use
85883
85884 function check (buffer) {
85885 if (buffer.length < 8) return false
85886 if (buffer.length > 72) return false
85887 if (buffer[0] !== 0x30) return false
85888 if (buffer[1] !== buffer.length - 2) return false
85889 if (buffer[2] !== 0x02) return false
85890
85891 var lenR = buffer[3]
85892 if (lenR === 0) return false
85893 if (5 + lenR >= buffer.length) return false
85894 if (buffer[4 + lenR] !== 0x02) return false
85895
85896 var lenS = buffer[5 + lenR]
85897 if (lenS === 0) return false
85898 if ((6 + lenR + lenS) !== buffer.length) return false
85899
85900 if (buffer[4] & 0x80) return false
85901 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
85902
85903 if (buffer[lenR + 6] & 0x80) return false
85904 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
85905 return true
85906 }
85907
85908 function decode (buffer) {
85909 if (buffer.length < 8) throw new Error('DER sequence length is too short')
85910 if (buffer.length > 72) throw new Error('DER sequence length is too long')
85911 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
85912 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
85913 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
85914
85915 var lenR = buffer[3]
85916 if (lenR === 0) throw new Error('R length is zero')
85917 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
85918 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
85919
85920 var lenS = buffer[5 + lenR]
85921 if (lenS === 0) throw new Error('S length is zero')
85922 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
85923
85924 if (buffer[4] & 0x80) throw new Error('R value is negative')
85925 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
85926
85927 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
85928 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
85929
85930 // non-BIP66 - extract R, S values
85931 return {
85932 r: buffer.slice(4, 4 + lenR),
85933 s: buffer.slice(6 + lenR)
85934 }
85935 }
85936
85937 /*
85938 * Expects r and s to be positive DER integers.
85939 *
85940 * The DER format uses the most significant bit as a sign bit (& 0x80).
85941 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
85942 *
85943 * Examples:
85944 *
85945 * 0 => 0x00
85946 * 1 => 0x01
85947 * -1 => 0xff
85948 * 127 => 0x7f
85949 * -127 => 0x81
85950 * 128 => 0x0080
85951 * -128 => 0x80
85952 * 255 => 0x00ff
85953 * -255 => 0xff01
85954 * 16300 => 0x3fac
85955 * -16300 => 0xc054
85956 * 62300 => 0x00f35c
85957 * -62300 => 0xff0ca4
85958 */
85959 function encode (r, s) {
85960 var lenR = r.length
85961 var lenS = s.length
85962 if (lenR === 0) throw new Error('R length is zero')
85963 if (lenS === 0) throw new Error('S length is zero')
85964 if (lenR > 33) throw new Error('R length is too long')
85965 if (lenS > 33) throw new Error('S length is too long')
85966 if (r[0] & 0x80) throw new Error('R value is negative')
85967 if (s[0] & 0x80) throw new Error('S value is negative')
85968 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
85969 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
85970
85971 var signature = new Buffer(6 + lenR + lenS)
85972
85973 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
85974 signature[0] = 0x30
85975 signature[1] = signature.length - 2
85976 signature[2] = 0x02
85977 signature[3] = r.length
85978 r.copy(signature, 4)
85979 signature[4 + lenR] = 0x02
85980 signature[5 + lenR] = s.length
85981 s.copy(signature, 6 + lenR)
85982
85983 return signature
85984 }
85985
85986 module.exports = {
85987 check: check,
85988 decode: decode,
85989 encode: encode
85990 }
85991
85992 }).call(this,require("buffer").Buffer)
85993 },{"buffer":5}],33:[function(require,module,exports){
85994 (function (module, exports) {
85995 'use strict';
85996
85997 // Utils
85998 function assert (val, msg) {
85999 if (!val) throw new Error(msg || 'Assertion failed');
86000 }
86001
86002 // Could use `inherits` module, but don't want to move from single file
86003 // architecture yet.
86004 function inherits (ctor, superCtor) {
86005 ctor.super_ = superCtor;
86006 var TempCtor = function () {};
86007 TempCtor.prototype = superCtor.prototype;
86008 ctor.prototype = new TempCtor();
86009 ctor.prototype.constructor = ctor;
86010 }
86011
86012 // BN
86013
86014 function BN (number, base, endian) {
86015 if (BN.isBN(number)) {
86016 return number;
86017 }
86018
86019 this.negative = 0;
86020 this.words = null;
86021 this.length = 0;
86022
86023 // Reduction context
86024 this.red = null;
86025
86026 if (number !== null) {
86027 if (base === 'le' || base === 'be') {
86028 endian = base;
86029 base = 10;
86030 }
86031
86032 this._init(number || 0, base || 10, endian || 'be');
86033 }
86034 }
86035 if (typeof module === 'object') {
86036 module.exports = BN;
86037 } else {
86038 exports.BN = BN;
86039 }
86040
86041 BN.BN = BN;
86042 BN.wordSize = 26;
86043
86044 var Buffer;
86045 try {
86046 Buffer = require('buf' + 'fer').Buffer;
86047 } catch (e) {
86048 }
86049
86050 BN.isBN = function isBN (num) {
86051 if (num instanceof BN) {
86052 return true;
86053 }
86054
86055 return num !== null && typeof num === 'object' &&
86056 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
86057 };
86058
86059 BN.max = function max (left, right) {
86060 if (left.cmp(right) > 0) return left;
86061 return right;
86062 };
86063
86064 BN.min = function min (left, right) {
86065 if (left.cmp(right) < 0) return left;
86066 return right;
86067 };
86068
86069 BN.prototype._init = function init (number, base, endian) {
86070 if (typeof number === 'number') {
86071 return this._initNumber(number, base, endian);
86072 }
86073
86074 if (typeof number === 'object') {
86075 return this._initArray(number, base, endian);
86076 }
86077
86078 if (base === 'hex') {
86079 base = 16;
86080 }
86081 assert(base === (base | 0) && base >= 2 && base <= 36);
86082
86083 number = number.toString().replace(/\s+/g, '');
86084 var start = 0;
86085 if (number[0] === '-') {
86086 start++;
86087 }
86088
86089 if (base === 16) {
86090 this._parseHex(number, start);
86091 } else {
86092 this._parseBase(number, base, start);
86093 }
86094
86095 if (number[0] === '-') {
86096 this.negative = 1;
86097 }
86098
86099 this.strip();
86100
86101 if (endian !== 'le') return;
86102
86103 this._initArray(this.toArray(), base, endian);
86104 };
86105
86106 BN.prototype._initNumber = function _initNumber (number, base, endian) {
86107 if (number < 0) {
86108 this.negative = 1;
86109 number = -number;
86110 }
86111 if (number < 0x4000000) {
86112 this.words = [ number & 0x3ffffff ];
86113 this.length = 1;
86114 } else if (number < 0x10000000000000) {
86115 this.words = [
86116 number & 0x3ffffff,
86117 (number / 0x4000000) & 0x3ffffff
86118 ];
86119 this.length = 2;
86120 } else {
86121 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
86122 this.words = [
86123 number & 0x3ffffff,
86124 (number / 0x4000000) & 0x3ffffff,
86125 1
86126 ];
86127 this.length = 3;
86128 }
86129
86130 if (endian !== 'le') return;
86131
86132 // Reverse the bytes
86133 this._initArray(this.toArray(), base, endian);
86134 };
86135
86136 BN.prototype._initArray = function _initArray (number, base, endian) {
86137 // Perhaps a Uint8Array
86138 assert(typeof number.length === 'number');
86139 if (number.length <= 0) {
86140 this.words = [ 0 ];
86141 this.length = 1;
86142 return this;
86143 }
86144
86145 this.length = Math.ceil(number.length / 3);
86146 this.words = new Array(this.length);
86147 for (var i = 0; i < this.length; i++) {
86148 this.words[i] = 0;
86149 }
86150
86151 var j, w;
86152 var off = 0;
86153 if (endian === 'be') {
86154 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
86155 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
86156 this.words[j] |= (w << off) & 0x3ffffff;
86157 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
86158 off += 24;
86159 if (off >= 26) {
86160 off -= 26;
86161 j++;
86162 }
86163 }
86164 } else if (endian === 'le') {
86165 for (i = 0, j = 0; i < number.length; i += 3) {
86166 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
86167 this.words[j] |= (w << off) & 0x3ffffff;
86168 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
86169 off += 24;
86170 if (off >= 26) {
86171 off -= 26;
86172 j++;
86173 }
86174 }
86175 }
86176 return this.strip();
86177 };
86178
86179 function parseHex (str, start, end) {
86180 var r = 0;
86181 var len = Math.min(str.length, end);
86182 for (var i = start; i < len; i++) {
86183 var c = str.charCodeAt(i) - 48;
86184
86185 r <<= 4;
86186
86187 // 'a' - 'f'
86188 if (c >= 49 && c <= 54) {
86189 r |= c - 49 + 0xa;
86190
86191 // 'A' - 'F'
86192 } else if (c >= 17 && c <= 22) {
86193 r |= c - 17 + 0xa;
86194
86195 // '0' - '9'
86196 } else {
86197 r |= c & 0xf;
86198 }
86199 }
86200 return r;
86201 }
86202
86203 BN.prototype._parseHex = function _parseHex (number, start) {
86204 // Create possibly bigger array to ensure that it fits the number
86205 this.length = Math.ceil((number.length - start) / 6);
86206 this.words = new Array(this.length);
86207 for (var i = 0; i < this.length; i++) {
86208 this.words[i] = 0;
86209 }
86210
86211 var j, w;
86212 // Scan 24-bit chunks and add them to the number
86213 var off = 0;
86214 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
86215 w = parseHex(number, i, i + 6);
86216 this.words[j] |= (w << off) & 0x3ffffff;
86217 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
86218 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
86219 off += 24;
86220 if (off >= 26) {
86221 off -= 26;
86222 j++;
86223 }
86224 }
86225 if (i + 6 !== start) {
86226 w = parseHex(number, start, i + 6);
86227 this.words[j] |= (w << off) & 0x3ffffff;
86228 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
86229 }
86230 this.strip();
86231 };
86232
86233 function parseBase (str, start, end, mul) {
86234 var r = 0;
86235 var len = Math.min(str.length, end);
86236 for (var i = start; i < len; i++) {
86237 var c = str.charCodeAt(i) - 48;
86238
86239 r *= mul;
86240
86241 // 'a'
86242 if (c >= 49) {
86243 r += c - 49 + 0xa;
86244
86245 // 'A'
86246 } else if (c >= 17) {
86247 r += c - 17 + 0xa;
86248
86249 // '0' - '9'
86250 } else {
86251 r += c;
86252 }
86253 }
86254 return r;
86255 }
86256
86257 BN.prototype._parseBase = function _parseBase (number, base, start) {
86258 // Initialize as zero
86259 this.words = [ 0 ];
86260 this.length = 1;
86261
86262 // Find length of limb in base
86263 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
86264 limbLen++;
86265 }
86266 limbLen--;
86267 limbPow = (limbPow / base) | 0;
86268
86269 var total = number.length - start;
86270 var mod = total % limbLen;
86271 var end = Math.min(total, total - mod) + start;
86272
86273 var word = 0;
86274 for (var i = start; i < end; i += limbLen) {
86275 word = parseBase(number, i, i + limbLen, base);
86276
86277 this.imuln(limbPow);
86278 if (this.words[0] + word < 0x4000000) {
86279 this.words[0] += word;
86280 } else {
86281 this._iaddn(word);
86282 }
86283 }
86284
86285 if (mod !== 0) {
86286 var pow = 1;
86287 word = parseBase(number, i, number.length, base);
86288
86289 for (i = 0; i < mod; i++) {
86290 pow *= base;
86291 }
86292
86293 this.imuln(pow);
86294 if (this.words[0] + word < 0x4000000) {
86295 this.words[0] += word;
86296 } else {
86297 this._iaddn(word);
86298 }
86299 }
86300 };
86301
86302 BN.prototype.copy = function copy (dest) {
86303 dest.words = new Array(this.length);
86304 for (var i = 0; i < this.length; i++) {
86305 dest.words[i] = this.words[i];
86306 }
86307 dest.length = this.length;
86308 dest.negative = this.negative;
86309 dest.red = this.red;
86310 };
86311
86312 BN.prototype.clone = function clone () {
86313 var r = new BN(null);
86314 this.copy(r);
86315 return r;
86316 };
86317
86318 BN.prototype._expand = function _expand (size) {
86319 while (this.length < size) {
86320 this.words[this.length++] = 0;
86321 }
86322 return this;
86323 };
86324
86325 // Remove leading `0` from `this`
86326 BN.prototype.strip = function strip () {
86327 while (this.length > 1 && this.words[this.length - 1] === 0) {
86328 this.length--;
86329 }
86330 return this._normSign();
86331 };
86332
86333 BN.prototype._normSign = function _normSign () {
86334 // -0 = 0
86335 if (this.length === 1 && this.words[0] === 0) {
86336 this.negative = 0;
86337 }
86338 return this;
86339 };
86340
86341 BN.prototype.inspect = function inspect () {
86342 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
86343 };
86344
86345 /*
86346
86347 var zeros = [];
86348 var groupSizes = [];
86349 var groupBases = [];
86350
86351 var s = '';
86352 var i = -1;
86353 while (++i < BN.wordSize) {
86354 zeros[i] = s;
86355 s += '0';
86356 }
86357 groupSizes[0] = 0;
86358 groupSizes[1] = 0;
86359 groupBases[0] = 0;
86360 groupBases[1] = 0;
86361 var base = 2 - 1;
86362 while (++base < 36 + 1) {
86363 var groupSize = 0;
86364 var groupBase = 1;
86365 while (groupBase < (1 << BN.wordSize) / base) {
86366 groupBase *= base;
86367 groupSize += 1;
86368 }
86369 groupSizes[base] = groupSize;
86370 groupBases[base] = groupBase;
86371 }
86372
86373 */
86374
86375 var zeros = [
86376 '',
86377 '0',
86378 '00',
86379 '000',
86380 '0000',
86381 '00000',
86382 '000000',
86383 '0000000',
86384 '00000000',
86385 '000000000',
86386 '0000000000',
86387 '00000000000',
86388 '000000000000',
86389 '0000000000000',
86390 '00000000000000',
86391 '000000000000000',
86392 '0000000000000000',
86393 '00000000000000000',
86394 '000000000000000000',
86395 '0000000000000000000',
86396 '00000000000000000000',
86397 '000000000000000000000',
86398 '0000000000000000000000',
86399 '00000000000000000000000',
86400 '000000000000000000000000',
86401 '0000000000000000000000000'
86402 ];
86403
86404 var groupSizes = [
86405 0, 0,
86406 25, 16, 12, 11, 10, 9, 8,
86407 8, 7, 7, 7, 7, 6, 6,
86408 6, 6, 6, 6, 6, 5, 5,
86409 5, 5, 5, 5, 5, 5, 5,
86410 5, 5, 5, 5, 5, 5, 5
86411 ];
86412
86413 var groupBases = [
86414 0, 0,
86415 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
86416 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
86417 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
86418 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
86419 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
86420 ];
86421
86422 BN.prototype.toString = function toString (base, padding) {
86423 base = base || 10;
86424 padding = padding | 0 || 1;
86425
86426 var out;
86427 if (base === 16 || base === 'hex') {
86428 out = '';
86429 var off = 0;
86430 var carry = 0;
86431 for (var i = 0; i < this.length; i++) {
86432 var w = this.words[i];
86433 var word = (((w << off) | carry) & 0xffffff).toString(16);
86434 carry = (w >>> (24 - off)) & 0xffffff;
86435 if (carry !== 0 || i !== this.length - 1) {
86436 out = zeros[6 - word.length] + word + out;
86437 } else {
86438 out = word + out;
86439 }
86440 off += 2;
86441 if (off >= 26) {
86442 off -= 26;
86443 i--;
86444 }
86445 }
86446 if (carry !== 0) {
86447 out = carry.toString(16) + out;
86448 }
86449 while (out.length % padding !== 0) {
86450 out = '0' + out;
86451 }
86452 if (this.negative !== 0) {
86453 out = '-' + out;
86454 }
86455 return out;
86456 }
86457
86458 if (base === (base | 0) && base >= 2 && base <= 36) {
86459 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
86460 var groupSize = groupSizes[base];
86461 // var groupBase = Math.pow(base, groupSize);
86462 var groupBase = groupBases[base];
86463 out = '';
86464 var c = this.clone();
86465 c.negative = 0;
86466 while (!c.isZero()) {
86467 var r = c.modn(groupBase).toString(base);
86468 c = c.idivn(groupBase);
86469
86470 if (!c.isZero()) {
86471 out = zeros[groupSize - r.length] + r + out;
86472 } else {
86473 out = r + out;
86474 }
86475 }
86476 if (this.isZero()) {
86477 out = '0' + out;
86478 }
86479 while (out.length % padding !== 0) {
86480 out = '0' + out;
86481 }
86482 if (this.negative !== 0) {
86483 out = '-' + out;
86484 }
86485 return out;
86486 }
86487
86488 assert(false, 'Base should be between 2 and 36');
86489 };
86490
86491 BN.prototype.toNumber = function toNumber () {
86492 var ret = this.words[0];
86493 if (this.length === 2) {
86494 ret += this.words[1] * 0x4000000;
86495 } else if (this.length === 3 && this.words[2] === 0x01) {
86496 // NOTE: at this stage it is known that the top bit is set
86497 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
86498 } else if (this.length > 2) {
86499 assert(false, 'Number can only safely store up to 53 bits');
86500 }
86501 return (this.negative !== 0) ? -ret : ret;
86502 };
86503
86504 BN.prototype.toJSON = function toJSON () {
86505 return this.toString(16);
86506 };
86507
86508 BN.prototype.toBuffer = function toBuffer (endian, length) {
86509 assert(typeof Buffer !== 'undefined');
86510 return this.toArrayLike(Buffer, endian, length);
86511 };
86512
86513 BN.prototype.toArray = function toArray (endian, length) {
86514 return this.toArrayLike(Array, endian, length);
86515 };
86516
86517 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
86518 var byteLength = this.byteLength();
86519 var reqLength = length || Math.max(1, byteLength);
86520 assert(byteLength <= reqLength, 'byte array longer than desired length');
86521 assert(reqLength > 0, 'Requested array length <= 0');
86522
86523 this.strip();
86524 var littleEndian = endian === 'le';
86525 var res = new ArrayType(reqLength);
86526
86527 var b, i;
86528 var q = this.clone();
86529 if (!littleEndian) {
86530 // Assume big-endian
86531 for (i = 0; i < reqLength - byteLength; i++) {
86532 res[i] = 0;
86533 }
86534
86535 for (i = 0; !q.isZero(); i++) {
86536 b = q.andln(0xff);
86537 q.iushrn(8);
86538
86539 res[reqLength - i - 1] = b;
86540 }
86541 } else {
86542 for (i = 0; !q.isZero(); i++) {
86543 b = q.andln(0xff);
86544 q.iushrn(8);
86545
86546 res[i] = b;
86547 }
86548
86549 for (; i < reqLength; i++) {
86550 res[i] = 0;
86551 }
86552 }
86553
86554 return res;
86555 };
86556
86557 if (Math.clz32) {
86558 BN.prototype._countBits = function _countBits (w) {
86559 return 32 - Math.clz32(w);
86560 };
86561 } else {
86562 BN.prototype._countBits = function _countBits (w) {
86563 var t = w;
86564 var r = 0;
86565 if (t >= 0x1000) {
86566 r += 13;
86567 t >>>= 13;
86568 }
86569 if (t >= 0x40) {
86570 r += 7;
86571 t >>>= 7;
86572 }
86573 if (t >= 0x8) {
86574 r += 4;
86575 t >>>= 4;
86576 }
86577 if (t >= 0x02) {
86578 r += 2;
86579 t >>>= 2;
86580 }
86581 return r + t;
86582 };
86583 }
86584
86585 BN.prototype._zeroBits = function _zeroBits (w) {
86586 // Short-cut
86587 if (w === 0) return 26;
86588
86589 var t = w;
86590 var r = 0;
86591 if ((t & 0x1fff) === 0) {
86592 r += 13;
86593 t >>>= 13;
86594 }
86595 if ((t & 0x7f) === 0) {
86596 r += 7;
86597 t >>>= 7;
86598 }
86599 if ((t & 0xf) === 0) {
86600 r += 4;
86601 t >>>= 4;
86602 }
86603 if ((t & 0x3) === 0) {
86604 r += 2;
86605 t >>>= 2;
86606 }
86607 if ((t & 0x1) === 0) {
86608 r++;
86609 }
86610 return r;
86611 };
86612
86613 // Return number of used bits in a BN
86614 BN.prototype.bitLength = function bitLength () {
86615 var w = this.words[this.length - 1];
86616 var hi = this._countBits(w);
86617 return (this.length - 1) * 26 + hi;
86618 };
86619
86620 function toBitArray (num) {
86621 var w = new Array(num.bitLength());
86622
86623 for (var bit = 0; bit < w.length; bit++) {
86624 var off = (bit / 26) | 0;
86625 var wbit = bit % 26;
86626
86627 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
86628 }
86629
86630 return w;
86631 }
86632
86633 // Number of trailing zero bits
86634 BN.prototype.zeroBits = function zeroBits () {
86635 if (this.isZero()) return 0;
86636
86637 var r = 0;
86638 for (var i = 0; i < this.length; i++) {
86639 var b = this._zeroBits(this.words[i]);
86640 r += b;
86641 if (b !== 26) break;
86642 }
86643 return r;
86644 };
86645
86646 BN.prototype.byteLength = function byteLength () {
86647 return Math.ceil(this.bitLength() / 8);
86648 };
86649
86650 BN.prototype.toTwos = function toTwos (width) {
86651 if (this.negative !== 0) {
86652 return this.abs().inotn(width).iaddn(1);
86653 }
86654 return this.clone();
86655 };
86656
86657 BN.prototype.fromTwos = function fromTwos (width) {
86658 if (this.testn(width - 1)) {
86659 return this.notn(width).iaddn(1).ineg();
86660 }
86661 return this.clone();
86662 };
86663
86664 BN.prototype.isNeg = function isNeg () {
86665 return this.negative !== 0;
86666 };
86667
86668 // Return negative clone of `this`
86669 BN.prototype.neg = function neg () {
86670 return this.clone().ineg();
86671 };
86672
86673 BN.prototype.ineg = function ineg () {
86674 if (!this.isZero()) {
86675 this.negative ^= 1;
86676 }
86677
86678 return this;
86679 };
86680
86681 // Or `num` with `this` in-place
86682 BN.prototype.iuor = function iuor (num) {
86683 while (this.length < num.length) {
86684 this.words[this.length++] = 0;
86685 }
86686
86687 for (var i = 0; i < num.length; i++) {
86688 this.words[i] = this.words[i] | num.words[i];
86689 }
86690
86691 return this.strip();
86692 };
86693
86694 BN.prototype.ior = function ior (num) {
86695 assert((this.negative | num.negative) === 0);
86696 return this.iuor(num);
86697 };
86698
86699 // Or `num` with `this`
86700 BN.prototype.or = function or (num) {
86701 if (this.length > num.length) return this.clone().ior(num);
86702 return num.clone().ior(this);
86703 };
86704
86705 BN.prototype.uor = function uor (num) {
86706 if (this.length > num.length) return this.clone().iuor(num);
86707 return num.clone().iuor(this);
86708 };
86709
86710 // And `num` with `this` in-place
86711 BN.prototype.iuand = function iuand (num) {
86712 // b = min-length(num, this)
86713 var b;
86714 if (this.length > num.length) {
86715 b = num;
86716 } else {
86717 b = this;
86718 }
86719
86720 for (var i = 0; i < b.length; i++) {
86721 this.words[i] = this.words[i] & num.words[i];
86722 }
86723
86724 this.length = b.length;
86725
86726 return this.strip();
86727 };
86728
86729 BN.prototype.iand = function iand (num) {
86730 assert((this.negative | num.negative) === 0);
86731 return this.iuand(num);
86732 };
86733
86734 // And `num` with `this`
86735 BN.prototype.and = function and (num) {
86736 if (this.length > num.length) return this.clone().iand(num);
86737 return num.clone().iand(this);
86738 };
86739
86740 BN.prototype.uand = function uand (num) {
86741 if (this.length > num.length) return this.clone().iuand(num);
86742 return num.clone().iuand(this);
86743 };
86744
86745 // Xor `num` with `this` in-place
86746 BN.prototype.iuxor = function iuxor (num) {
86747 // a.length > b.length
86748 var a;
86749 var b;
86750 if (this.length > num.length) {
86751 a = this;
86752 b = num;
86753 } else {
86754 a = num;
86755 b = this;
86756 }
86757
86758 for (var i = 0; i < b.length; i++) {
86759 this.words[i] = a.words[i] ^ b.words[i];
86760 }
86761
86762 if (this !== a) {
86763 for (; i < a.length; i++) {
86764 this.words[i] = a.words[i];
86765 }
86766 }
86767
86768 this.length = a.length;
86769
86770 return this.strip();
86771 };
86772
86773 BN.prototype.ixor = function ixor (num) {
86774 assert((this.negative | num.negative) === 0);
86775 return this.iuxor(num);
86776 };
86777
86778 // Xor `num` with `this`
86779 BN.prototype.xor = function xor (num) {
86780 if (this.length > num.length) return this.clone().ixor(num);
86781 return num.clone().ixor(this);
86782 };
86783
86784 BN.prototype.uxor = function uxor (num) {
86785 if (this.length > num.length) return this.clone().iuxor(num);
86786 return num.clone().iuxor(this);
86787 };
86788
86789 // Not ``this`` with ``width`` bitwidth
86790 BN.prototype.inotn = function inotn (width) {
86791 assert(typeof width === 'number' && width >= 0);
86792
86793 var bytesNeeded = Math.ceil(width / 26) | 0;
86794 var bitsLeft = width % 26;
86795
86796 // Extend the buffer with leading zeroes
86797 this._expand(bytesNeeded);
86798
86799 if (bitsLeft > 0) {
86800 bytesNeeded--;
86801 }
86802
86803 // Handle complete words
86804 for (var i = 0; i < bytesNeeded; i++) {
86805 this.words[i] = ~this.words[i] & 0x3ffffff;
86806 }
86807
86808 // Handle the residue
86809 if (bitsLeft > 0) {
86810 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
86811 }
86812
86813 // And remove leading zeroes
86814 return this.strip();
86815 };
86816
86817 BN.prototype.notn = function notn (width) {
86818 return this.clone().inotn(width);
86819 };
86820
86821 // Set `bit` of `this`
86822 BN.prototype.setn = function setn (bit, val) {
86823 assert(typeof bit === 'number' && bit >= 0);
86824
86825 var off = (bit / 26) | 0;
86826 var wbit = bit % 26;
86827
86828 this._expand(off + 1);
86829
86830 if (val) {
86831 this.words[off] = this.words[off] | (1 << wbit);
86832 } else {
86833 this.words[off] = this.words[off] & ~(1 << wbit);
86834 }
86835
86836 return this.strip();
86837 };
86838
86839 // Add `num` to `this` in-place
86840 BN.prototype.iadd = function iadd (num) {
86841 var r;
86842
86843 // negative + positive
86844 if (this.negative !== 0 && num.negative === 0) {
86845 this.negative = 0;
86846 r = this.isub(num);
86847 this.negative ^= 1;
86848 return this._normSign();
86849
86850 // positive + negative
86851 } else if (this.negative === 0 && num.negative !== 0) {
86852 num.negative = 0;
86853 r = this.isub(num);
86854 num.negative = 1;
86855 return r._normSign();
86856 }
86857
86858 // a.length > b.length
86859 var a, b;
86860 if (this.length > num.length) {
86861 a = this;
86862 b = num;
86863 } else {
86864 a = num;
86865 b = this;
86866 }
86867
86868 var carry = 0;
86869 for (var i = 0; i < b.length; i++) {
86870 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
86871 this.words[i] = r & 0x3ffffff;
86872 carry = r >>> 26;
86873 }
86874 for (; carry !== 0 && i < a.length; i++) {
86875 r = (a.words[i] | 0) + carry;
86876 this.words[i] = r & 0x3ffffff;
86877 carry = r >>> 26;
86878 }
86879
86880 this.length = a.length;
86881 if (carry !== 0) {
86882 this.words[this.length] = carry;
86883 this.length++;
86884 // Copy the rest of the words
86885 } else if (a !== this) {
86886 for (; i < a.length; i++) {
86887 this.words[i] = a.words[i];
86888 }
86889 }
86890
86891 return this;
86892 };
86893
86894 // Add `num` to `this`
86895 BN.prototype.add = function add (num) {
86896 var res;
86897 if (num.negative !== 0 && this.negative === 0) {
86898 num.negative = 0;
86899 res = this.sub(num);
86900 num.negative ^= 1;
86901 return res;
86902 } else if (num.negative === 0 && this.negative !== 0) {
86903 this.negative = 0;
86904 res = num.sub(this);
86905 this.negative = 1;
86906 return res;
86907 }
86908
86909 if (this.length > num.length) return this.clone().iadd(num);
86910
86911 return num.clone().iadd(this);
86912 };
86913
86914 // Subtract `num` from `this` in-place
86915 BN.prototype.isub = function isub (num) {
86916 // this - (-num) = this + num
86917 if (num.negative !== 0) {
86918 num.negative = 0;
86919 var r = this.iadd(num);
86920 num.negative = 1;
86921 return r._normSign();
86922
86923 // -this - num = -(this + num)
86924 } else if (this.negative !== 0) {
86925 this.negative = 0;
86926 this.iadd(num);
86927 this.negative = 1;
86928 return this._normSign();
86929 }
86930
86931 // At this point both numbers are positive
86932 var cmp = this.cmp(num);
86933
86934 // Optimization - zeroify
86935 if (cmp === 0) {
86936 this.negative = 0;
86937 this.length = 1;
86938 this.words[0] = 0;
86939 return this;
86940 }
86941
86942 // a > b
86943 var a, b;
86944 if (cmp > 0) {
86945 a = this;
86946 b = num;
86947 } else {
86948 a = num;
86949 b = this;
86950 }
86951
86952 var carry = 0;
86953 for (var i = 0; i < b.length; i++) {
86954 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
86955 carry = r >> 26;
86956 this.words[i] = r & 0x3ffffff;
86957 }
86958 for (; carry !== 0 && i < a.length; i++) {
86959 r = (a.words[i] | 0) + carry;
86960 carry = r >> 26;
86961 this.words[i] = r & 0x3ffffff;
86962 }
86963
86964 // Copy rest of the words
86965 if (carry === 0 && i < a.length && a !== this) {
86966 for (; i < a.length; i++) {
86967 this.words[i] = a.words[i];
86968 }
86969 }
86970
86971 this.length = Math.max(this.length, i);
86972
86973 if (a !== this) {
86974 this.negative = 1;
86975 }
86976
86977 return this.strip();
86978 };
86979
86980 // Subtract `num` from `this`
86981 BN.prototype.sub = function sub (num) {
86982 return this.clone().isub(num);
86983 };
86984
86985 function smallMulTo (self, num, out) {
86986 out.negative = num.negative ^ self.negative;
86987 var len = (self.length + num.length) | 0;
86988 out.length = len;
86989 len = (len - 1) | 0;
86990
86991 // Peel one iteration (compiler can't do it, because of code complexity)
86992 var a = self.words[0] | 0;
86993 var b = num.words[0] | 0;
86994 var r = a * b;
86995
86996 var lo = r & 0x3ffffff;
86997 var carry = (r / 0x4000000) | 0;
86998 out.words[0] = lo;
86999
87000 for (var k = 1; k < len; k++) {
87001 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
87002 // note that ncarry could be >= 0x3ffffff
87003 var ncarry = carry >>> 26;
87004 var rword = carry & 0x3ffffff;
87005 var maxJ = Math.min(k, num.length - 1);
87006 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
87007 var i = (k - j) | 0;
87008 a = self.words[i] | 0;
87009 b = num.words[j] | 0;
87010 r = a * b + rword;
87011 ncarry += (r / 0x4000000) | 0;
87012 rword = r & 0x3ffffff;
87013 }
87014 out.words[k] = rword | 0;
87015 carry = ncarry | 0;
87016 }
87017 if (carry !== 0) {
87018 out.words[k] = carry | 0;
87019 } else {
87020 out.length--;
87021 }
87022
87023 return out.strip();
87024 }
87025
87026 // TODO(indutny): it may be reasonable to omit it for users who don't need
87027 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
87028 // multiplication (like elliptic secp256k1).
87029 var comb10MulTo = function comb10MulTo (self, num, out) {
87030 var a = self.words;
87031 var b = num.words;
87032 var o = out.words;
87033 var c = 0;
87034 var lo;
87035 var mid;
87036 var hi;
87037 var a0 = a[0] | 0;
87038 var al0 = a0 & 0x1fff;
87039 var ah0 = a0 >>> 13;
87040 var a1 = a[1] | 0;
87041 var al1 = a1 & 0x1fff;
87042 var ah1 = a1 >>> 13;
87043 var a2 = a[2] | 0;
87044 var al2 = a2 & 0x1fff;
87045 var ah2 = a2 >>> 13;
87046 var a3 = a[3] | 0;
87047 var al3 = a3 & 0x1fff;
87048 var ah3 = a3 >>> 13;
87049 var a4 = a[4] | 0;
87050 var al4 = a4 & 0x1fff;
87051 var ah4 = a4 >>> 13;
87052 var a5 = a[5] | 0;
87053 var al5 = a5 & 0x1fff;
87054 var ah5 = a5 >>> 13;
87055 var a6 = a[6] | 0;
87056 var al6 = a6 & 0x1fff;
87057 var ah6 = a6 >>> 13;
87058 var a7 = a[7] | 0;
87059 var al7 = a7 & 0x1fff;
87060 var ah7 = a7 >>> 13;
87061 var a8 = a[8] | 0;
87062 var al8 = a8 & 0x1fff;
87063 var ah8 = a8 >>> 13;
87064 var a9 = a[9] | 0;
87065 var al9 = a9 & 0x1fff;
87066 var ah9 = a9 >>> 13;
87067 var b0 = b[0] | 0;
87068 var bl0 = b0 & 0x1fff;
87069 var bh0 = b0 >>> 13;
87070 var b1 = b[1] | 0;
87071 var bl1 = b1 & 0x1fff;
87072 var bh1 = b1 >>> 13;
87073 var b2 = b[2] | 0;
87074 var bl2 = b2 & 0x1fff;
87075 var bh2 = b2 >>> 13;
87076 var b3 = b[3] | 0;
87077 var bl3 = b3 & 0x1fff;
87078 var bh3 = b3 >>> 13;
87079 var b4 = b[4] | 0;
87080 var bl4 = b4 & 0x1fff;
87081 var bh4 = b4 >>> 13;
87082 var b5 = b[5] | 0;
87083 var bl5 = b5 & 0x1fff;
87084 var bh5 = b5 >>> 13;
87085 var b6 = b[6] | 0;
87086 var bl6 = b6 & 0x1fff;
87087 var bh6 = b6 >>> 13;
87088 var b7 = b[7] | 0;
87089 var bl7 = b7 & 0x1fff;
87090 var bh7 = b7 >>> 13;
87091 var b8 = b[8] | 0;
87092 var bl8 = b8 & 0x1fff;
87093 var bh8 = b8 >>> 13;
87094 var b9 = b[9] | 0;
87095 var bl9 = b9 & 0x1fff;
87096 var bh9 = b9 >>> 13;
87097
87098 out.negative = self.negative ^ num.negative;
87099 out.length = 19;
87100 /* k = 0 */
87101 lo = Math.imul(al0, bl0);
87102 mid = Math.imul(al0, bh0);
87103 mid = (mid + Math.imul(ah0, bl0)) | 0;
87104 hi = Math.imul(ah0, bh0);
87105 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87106 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
87107 w0 &= 0x3ffffff;
87108 /* k = 1 */
87109 lo = Math.imul(al1, bl0);
87110 mid = Math.imul(al1, bh0);
87111 mid = (mid + Math.imul(ah1, bl0)) | 0;
87112 hi = Math.imul(ah1, bh0);
87113 lo = (lo + Math.imul(al0, bl1)) | 0;
87114 mid = (mid + Math.imul(al0, bh1)) | 0;
87115 mid = (mid + Math.imul(ah0, bl1)) | 0;
87116 hi = (hi + Math.imul(ah0, bh1)) | 0;
87117 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87118 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
87119 w1 &= 0x3ffffff;
87120 /* k = 2 */
87121 lo = Math.imul(al2, bl0);
87122 mid = Math.imul(al2, bh0);
87123 mid = (mid + Math.imul(ah2, bl0)) | 0;
87124 hi = Math.imul(ah2, bh0);
87125 lo = (lo + Math.imul(al1, bl1)) | 0;
87126 mid = (mid + Math.imul(al1, bh1)) | 0;
87127 mid = (mid + Math.imul(ah1, bl1)) | 0;
87128 hi = (hi + Math.imul(ah1, bh1)) | 0;
87129 lo = (lo + Math.imul(al0, bl2)) | 0;
87130 mid = (mid + Math.imul(al0, bh2)) | 0;
87131 mid = (mid + Math.imul(ah0, bl2)) | 0;
87132 hi = (hi + Math.imul(ah0, bh2)) | 0;
87133 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87134 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
87135 w2 &= 0x3ffffff;
87136 /* k = 3 */
87137 lo = Math.imul(al3, bl0);
87138 mid = Math.imul(al3, bh0);
87139 mid = (mid + Math.imul(ah3, bl0)) | 0;
87140 hi = Math.imul(ah3, bh0);
87141 lo = (lo + Math.imul(al2, bl1)) | 0;
87142 mid = (mid + Math.imul(al2, bh1)) | 0;
87143 mid = (mid + Math.imul(ah2, bl1)) | 0;
87144 hi = (hi + Math.imul(ah2, bh1)) | 0;
87145 lo = (lo + Math.imul(al1, bl2)) | 0;
87146 mid = (mid + Math.imul(al1, bh2)) | 0;
87147 mid = (mid + Math.imul(ah1, bl2)) | 0;
87148 hi = (hi + Math.imul(ah1, bh2)) | 0;
87149 lo = (lo + Math.imul(al0, bl3)) | 0;
87150 mid = (mid + Math.imul(al0, bh3)) | 0;
87151 mid = (mid + Math.imul(ah0, bl3)) | 0;
87152 hi = (hi + Math.imul(ah0, bh3)) | 0;
87153 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87154 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
87155 w3 &= 0x3ffffff;
87156 /* k = 4 */
87157 lo = Math.imul(al4, bl0);
87158 mid = Math.imul(al4, bh0);
87159 mid = (mid + Math.imul(ah4, bl0)) | 0;
87160 hi = Math.imul(ah4, bh0);
87161 lo = (lo + Math.imul(al3, bl1)) | 0;
87162 mid = (mid + Math.imul(al3, bh1)) | 0;
87163 mid = (mid + Math.imul(ah3, bl1)) | 0;
87164 hi = (hi + Math.imul(ah3, bh1)) | 0;
87165 lo = (lo + Math.imul(al2, bl2)) | 0;
87166 mid = (mid + Math.imul(al2, bh2)) | 0;
87167 mid = (mid + Math.imul(ah2, bl2)) | 0;
87168 hi = (hi + Math.imul(ah2, bh2)) | 0;
87169 lo = (lo + Math.imul(al1, bl3)) | 0;
87170 mid = (mid + Math.imul(al1, bh3)) | 0;
87171 mid = (mid + Math.imul(ah1, bl3)) | 0;
87172 hi = (hi + Math.imul(ah1, bh3)) | 0;
87173 lo = (lo + Math.imul(al0, bl4)) | 0;
87174 mid = (mid + Math.imul(al0, bh4)) | 0;
87175 mid = (mid + Math.imul(ah0, bl4)) | 0;
87176 hi = (hi + Math.imul(ah0, bh4)) | 0;
87177 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87178 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
87179 w4 &= 0x3ffffff;
87180 /* k = 5 */
87181 lo = Math.imul(al5, bl0);
87182 mid = Math.imul(al5, bh0);
87183 mid = (mid + Math.imul(ah5, bl0)) | 0;
87184 hi = Math.imul(ah5, bh0);
87185 lo = (lo + Math.imul(al4, bl1)) | 0;
87186 mid = (mid + Math.imul(al4, bh1)) | 0;
87187 mid = (mid + Math.imul(ah4, bl1)) | 0;
87188 hi = (hi + Math.imul(ah4, bh1)) | 0;
87189 lo = (lo + Math.imul(al3, bl2)) | 0;
87190 mid = (mid + Math.imul(al3, bh2)) | 0;
87191 mid = (mid + Math.imul(ah3, bl2)) | 0;
87192 hi = (hi + Math.imul(ah3, bh2)) | 0;
87193 lo = (lo + Math.imul(al2, bl3)) | 0;
87194 mid = (mid + Math.imul(al2, bh3)) | 0;
87195 mid = (mid + Math.imul(ah2, bl3)) | 0;
87196 hi = (hi + Math.imul(ah2, bh3)) | 0;
87197 lo = (lo + Math.imul(al1, bl4)) | 0;
87198 mid = (mid + Math.imul(al1, bh4)) | 0;
87199 mid = (mid + Math.imul(ah1, bl4)) | 0;
87200 hi = (hi + Math.imul(ah1, bh4)) | 0;
87201 lo = (lo + Math.imul(al0, bl5)) | 0;
87202 mid = (mid + Math.imul(al0, bh5)) | 0;
87203 mid = (mid + Math.imul(ah0, bl5)) | 0;
87204 hi = (hi + Math.imul(ah0, bh5)) | 0;
87205 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87206 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
87207 w5 &= 0x3ffffff;
87208 /* k = 6 */
87209 lo = Math.imul(al6, bl0);
87210 mid = Math.imul(al6, bh0);
87211 mid = (mid + Math.imul(ah6, bl0)) | 0;
87212 hi = Math.imul(ah6, bh0);
87213 lo = (lo + Math.imul(al5, bl1)) | 0;
87214 mid = (mid + Math.imul(al5, bh1)) | 0;
87215 mid = (mid + Math.imul(ah5, bl1)) | 0;
87216 hi = (hi + Math.imul(ah5, bh1)) | 0;
87217 lo = (lo + Math.imul(al4, bl2)) | 0;
87218 mid = (mid + Math.imul(al4, bh2)) | 0;
87219 mid = (mid + Math.imul(ah4, bl2)) | 0;
87220 hi = (hi + Math.imul(ah4, bh2)) | 0;
87221 lo = (lo + Math.imul(al3, bl3)) | 0;
87222 mid = (mid + Math.imul(al3, bh3)) | 0;
87223 mid = (mid + Math.imul(ah3, bl3)) | 0;
87224 hi = (hi + Math.imul(ah3, bh3)) | 0;
87225 lo = (lo + Math.imul(al2, bl4)) | 0;
87226 mid = (mid + Math.imul(al2, bh4)) | 0;
87227 mid = (mid + Math.imul(ah2, bl4)) | 0;
87228 hi = (hi + Math.imul(ah2, bh4)) | 0;
87229 lo = (lo + Math.imul(al1, bl5)) | 0;
87230 mid = (mid + Math.imul(al1, bh5)) | 0;
87231 mid = (mid + Math.imul(ah1, bl5)) | 0;
87232 hi = (hi + Math.imul(ah1, bh5)) | 0;
87233 lo = (lo + Math.imul(al0, bl6)) | 0;
87234 mid = (mid + Math.imul(al0, bh6)) | 0;
87235 mid = (mid + Math.imul(ah0, bl6)) | 0;
87236 hi = (hi + Math.imul(ah0, bh6)) | 0;
87237 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87238 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
87239 w6 &= 0x3ffffff;
87240 /* k = 7 */
87241 lo = Math.imul(al7, bl0);
87242 mid = Math.imul(al7, bh0);
87243 mid = (mid + Math.imul(ah7, bl0)) | 0;
87244 hi = Math.imul(ah7, bh0);
87245 lo = (lo + Math.imul(al6, bl1)) | 0;
87246 mid = (mid + Math.imul(al6, bh1)) | 0;
87247 mid = (mid + Math.imul(ah6, bl1)) | 0;
87248 hi = (hi + Math.imul(ah6, bh1)) | 0;
87249 lo = (lo + Math.imul(al5, bl2)) | 0;
87250 mid = (mid + Math.imul(al5, bh2)) | 0;
87251 mid = (mid + Math.imul(ah5, bl2)) | 0;
87252 hi = (hi + Math.imul(ah5, bh2)) | 0;
87253 lo = (lo + Math.imul(al4, bl3)) | 0;
87254 mid = (mid + Math.imul(al4, bh3)) | 0;
87255 mid = (mid + Math.imul(ah4, bl3)) | 0;
87256 hi = (hi + Math.imul(ah4, bh3)) | 0;
87257 lo = (lo + Math.imul(al3, bl4)) | 0;
87258 mid = (mid + Math.imul(al3, bh4)) | 0;
87259 mid = (mid + Math.imul(ah3, bl4)) | 0;
87260 hi = (hi + Math.imul(ah3, bh4)) | 0;
87261 lo = (lo + Math.imul(al2, bl5)) | 0;
87262 mid = (mid + Math.imul(al2, bh5)) | 0;
87263 mid = (mid + Math.imul(ah2, bl5)) | 0;
87264 hi = (hi + Math.imul(ah2, bh5)) | 0;
87265 lo = (lo + Math.imul(al1, bl6)) | 0;
87266 mid = (mid + Math.imul(al1, bh6)) | 0;
87267 mid = (mid + Math.imul(ah1, bl6)) | 0;
87268 hi = (hi + Math.imul(ah1, bh6)) | 0;
87269 lo = (lo + Math.imul(al0, bl7)) | 0;
87270 mid = (mid + Math.imul(al0, bh7)) | 0;
87271 mid = (mid + Math.imul(ah0, bl7)) | 0;
87272 hi = (hi + Math.imul(ah0, bh7)) | 0;
87273 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87274 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
87275 w7 &= 0x3ffffff;
87276 /* k = 8 */
87277 lo = Math.imul(al8, bl0);
87278 mid = Math.imul(al8, bh0);
87279 mid = (mid + Math.imul(ah8, bl0)) | 0;
87280 hi = Math.imul(ah8, bh0);
87281 lo = (lo + Math.imul(al7, bl1)) | 0;
87282 mid = (mid + Math.imul(al7, bh1)) | 0;
87283 mid = (mid + Math.imul(ah7, bl1)) | 0;
87284 hi = (hi + Math.imul(ah7, bh1)) | 0;
87285 lo = (lo + Math.imul(al6, bl2)) | 0;
87286 mid = (mid + Math.imul(al6, bh2)) | 0;
87287 mid = (mid + Math.imul(ah6, bl2)) | 0;
87288 hi = (hi + Math.imul(ah6, bh2)) | 0;
87289 lo = (lo + Math.imul(al5, bl3)) | 0;
87290 mid = (mid + Math.imul(al5, bh3)) | 0;
87291 mid = (mid + Math.imul(ah5, bl3)) | 0;
87292 hi = (hi + Math.imul(ah5, bh3)) | 0;
87293 lo = (lo + Math.imul(al4, bl4)) | 0;
87294 mid = (mid + Math.imul(al4, bh4)) | 0;
87295 mid = (mid + Math.imul(ah4, bl4)) | 0;
87296 hi = (hi + Math.imul(ah4, bh4)) | 0;
87297 lo = (lo + Math.imul(al3, bl5)) | 0;
87298 mid = (mid + Math.imul(al3, bh5)) | 0;
87299 mid = (mid + Math.imul(ah3, bl5)) | 0;
87300 hi = (hi + Math.imul(ah3, bh5)) | 0;
87301 lo = (lo + Math.imul(al2, bl6)) | 0;
87302 mid = (mid + Math.imul(al2, bh6)) | 0;
87303 mid = (mid + Math.imul(ah2, bl6)) | 0;
87304 hi = (hi + Math.imul(ah2, bh6)) | 0;
87305 lo = (lo + Math.imul(al1, bl7)) | 0;
87306 mid = (mid + Math.imul(al1, bh7)) | 0;
87307 mid = (mid + Math.imul(ah1, bl7)) | 0;
87308 hi = (hi + Math.imul(ah1, bh7)) | 0;
87309 lo = (lo + Math.imul(al0, bl8)) | 0;
87310 mid = (mid + Math.imul(al0, bh8)) | 0;
87311 mid = (mid + Math.imul(ah0, bl8)) | 0;
87312 hi = (hi + Math.imul(ah0, bh8)) | 0;
87313 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87314 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
87315 w8 &= 0x3ffffff;
87316 /* k = 9 */
87317 lo = Math.imul(al9, bl0);
87318 mid = Math.imul(al9, bh0);
87319 mid = (mid + Math.imul(ah9, bl0)) | 0;
87320 hi = Math.imul(ah9, bh0);
87321 lo = (lo + Math.imul(al8, bl1)) | 0;
87322 mid = (mid + Math.imul(al8, bh1)) | 0;
87323 mid = (mid + Math.imul(ah8, bl1)) | 0;
87324 hi = (hi + Math.imul(ah8, bh1)) | 0;
87325 lo = (lo + Math.imul(al7, bl2)) | 0;
87326 mid = (mid + Math.imul(al7, bh2)) | 0;
87327 mid = (mid + Math.imul(ah7, bl2)) | 0;
87328 hi = (hi + Math.imul(ah7, bh2)) | 0;
87329 lo = (lo + Math.imul(al6, bl3)) | 0;
87330 mid = (mid + Math.imul(al6, bh3)) | 0;
87331 mid = (mid + Math.imul(ah6, bl3)) | 0;
87332 hi = (hi + Math.imul(ah6, bh3)) | 0;
87333 lo = (lo + Math.imul(al5, bl4)) | 0;
87334 mid = (mid + Math.imul(al5, bh4)) | 0;
87335 mid = (mid + Math.imul(ah5, bl4)) | 0;
87336 hi = (hi + Math.imul(ah5, bh4)) | 0;
87337 lo = (lo + Math.imul(al4, bl5)) | 0;
87338 mid = (mid + Math.imul(al4, bh5)) | 0;
87339 mid = (mid + Math.imul(ah4, bl5)) | 0;
87340 hi = (hi + Math.imul(ah4, bh5)) | 0;
87341 lo = (lo + Math.imul(al3, bl6)) | 0;
87342 mid = (mid + Math.imul(al3, bh6)) | 0;
87343 mid = (mid + Math.imul(ah3, bl6)) | 0;
87344 hi = (hi + Math.imul(ah3, bh6)) | 0;
87345 lo = (lo + Math.imul(al2, bl7)) | 0;
87346 mid = (mid + Math.imul(al2, bh7)) | 0;
87347 mid = (mid + Math.imul(ah2, bl7)) | 0;
87348 hi = (hi + Math.imul(ah2, bh7)) | 0;
87349 lo = (lo + Math.imul(al1, bl8)) | 0;
87350 mid = (mid + Math.imul(al1, bh8)) | 0;
87351 mid = (mid + Math.imul(ah1, bl8)) | 0;
87352 hi = (hi + Math.imul(ah1, bh8)) | 0;
87353 lo = (lo + Math.imul(al0, bl9)) | 0;
87354 mid = (mid + Math.imul(al0, bh9)) | 0;
87355 mid = (mid + Math.imul(ah0, bl9)) | 0;
87356 hi = (hi + Math.imul(ah0, bh9)) | 0;
87357 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87358 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
87359 w9 &= 0x3ffffff;
87360 /* k = 10 */
87361 lo = Math.imul(al9, bl1);
87362 mid = Math.imul(al9, bh1);
87363 mid = (mid + Math.imul(ah9, bl1)) | 0;
87364 hi = Math.imul(ah9, bh1);
87365 lo = (lo + Math.imul(al8, bl2)) | 0;
87366 mid = (mid + Math.imul(al8, bh2)) | 0;
87367 mid = (mid + Math.imul(ah8, bl2)) | 0;
87368 hi = (hi + Math.imul(ah8, bh2)) | 0;
87369 lo = (lo + Math.imul(al7, bl3)) | 0;
87370 mid = (mid + Math.imul(al7, bh3)) | 0;
87371 mid = (mid + Math.imul(ah7, bl3)) | 0;
87372 hi = (hi + Math.imul(ah7, bh3)) | 0;
87373 lo = (lo + Math.imul(al6, bl4)) | 0;
87374 mid = (mid + Math.imul(al6, bh4)) | 0;
87375 mid = (mid + Math.imul(ah6, bl4)) | 0;
87376 hi = (hi + Math.imul(ah6, bh4)) | 0;
87377 lo = (lo + Math.imul(al5, bl5)) | 0;
87378 mid = (mid + Math.imul(al5, bh5)) | 0;
87379 mid = (mid + Math.imul(ah5, bl5)) | 0;
87380 hi = (hi + Math.imul(ah5, bh5)) | 0;
87381 lo = (lo + Math.imul(al4, bl6)) | 0;
87382 mid = (mid + Math.imul(al4, bh6)) | 0;
87383 mid = (mid + Math.imul(ah4, bl6)) | 0;
87384 hi = (hi + Math.imul(ah4, bh6)) | 0;
87385 lo = (lo + Math.imul(al3, bl7)) | 0;
87386 mid = (mid + Math.imul(al3, bh7)) | 0;
87387 mid = (mid + Math.imul(ah3, bl7)) | 0;
87388 hi = (hi + Math.imul(ah3, bh7)) | 0;
87389 lo = (lo + Math.imul(al2, bl8)) | 0;
87390 mid = (mid + Math.imul(al2, bh8)) | 0;
87391 mid = (mid + Math.imul(ah2, bl8)) | 0;
87392 hi = (hi + Math.imul(ah2, bh8)) | 0;
87393 lo = (lo + Math.imul(al1, bl9)) | 0;
87394 mid = (mid + Math.imul(al1, bh9)) | 0;
87395 mid = (mid + Math.imul(ah1, bl9)) | 0;
87396 hi = (hi + Math.imul(ah1, bh9)) | 0;
87397 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87398 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
87399 w10 &= 0x3ffffff;
87400 /* k = 11 */
87401 lo = Math.imul(al9, bl2);
87402 mid = Math.imul(al9, bh2);
87403 mid = (mid + Math.imul(ah9, bl2)) | 0;
87404 hi = Math.imul(ah9, bh2);
87405 lo = (lo + Math.imul(al8, bl3)) | 0;
87406 mid = (mid + Math.imul(al8, bh3)) | 0;
87407 mid = (mid + Math.imul(ah8, bl3)) | 0;
87408 hi = (hi + Math.imul(ah8, bh3)) | 0;
87409 lo = (lo + Math.imul(al7, bl4)) | 0;
87410 mid = (mid + Math.imul(al7, bh4)) | 0;
87411 mid = (mid + Math.imul(ah7, bl4)) | 0;
87412 hi = (hi + Math.imul(ah7, bh4)) | 0;
87413 lo = (lo + Math.imul(al6, bl5)) | 0;
87414 mid = (mid + Math.imul(al6, bh5)) | 0;
87415 mid = (mid + Math.imul(ah6, bl5)) | 0;
87416 hi = (hi + Math.imul(ah6, bh5)) | 0;
87417 lo = (lo + Math.imul(al5, bl6)) | 0;
87418 mid = (mid + Math.imul(al5, bh6)) | 0;
87419 mid = (mid + Math.imul(ah5, bl6)) | 0;
87420 hi = (hi + Math.imul(ah5, bh6)) | 0;
87421 lo = (lo + Math.imul(al4, bl7)) | 0;
87422 mid = (mid + Math.imul(al4, bh7)) | 0;
87423 mid = (mid + Math.imul(ah4, bl7)) | 0;
87424 hi = (hi + Math.imul(ah4, bh7)) | 0;
87425 lo = (lo + Math.imul(al3, bl8)) | 0;
87426 mid = (mid + Math.imul(al3, bh8)) | 0;
87427 mid = (mid + Math.imul(ah3, bl8)) | 0;
87428 hi = (hi + Math.imul(ah3, bh8)) | 0;
87429 lo = (lo + Math.imul(al2, bl9)) | 0;
87430 mid = (mid + Math.imul(al2, bh9)) | 0;
87431 mid = (mid + Math.imul(ah2, bl9)) | 0;
87432 hi = (hi + Math.imul(ah2, bh9)) | 0;
87433 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87434 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
87435 w11 &= 0x3ffffff;
87436 /* k = 12 */
87437 lo = Math.imul(al9, bl3);
87438 mid = Math.imul(al9, bh3);
87439 mid = (mid + Math.imul(ah9, bl3)) | 0;
87440 hi = Math.imul(ah9, bh3);
87441 lo = (lo + Math.imul(al8, bl4)) | 0;
87442 mid = (mid + Math.imul(al8, bh4)) | 0;
87443 mid = (mid + Math.imul(ah8, bl4)) | 0;
87444 hi = (hi + Math.imul(ah8, bh4)) | 0;
87445 lo = (lo + Math.imul(al7, bl5)) | 0;
87446 mid = (mid + Math.imul(al7, bh5)) | 0;
87447 mid = (mid + Math.imul(ah7, bl5)) | 0;
87448 hi = (hi + Math.imul(ah7, bh5)) | 0;
87449 lo = (lo + Math.imul(al6, bl6)) | 0;
87450 mid = (mid + Math.imul(al6, bh6)) | 0;
87451 mid = (mid + Math.imul(ah6, bl6)) | 0;
87452 hi = (hi + Math.imul(ah6, bh6)) | 0;
87453 lo = (lo + Math.imul(al5, bl7)) | 0;
87454 mid = (mid + Math.imul(al5, bh7)) | 0;
87455 mid = (mid + Math.imul(ah5, bl7)) | 0;
87456 hi = (hi + Math.imul(ah5, bh7)) | 0;
87457 lo = (lo + Math.imul(al4, bl8)) | 0;
87458 mid = (mid + Math.imul(al4, bh8)) | 0;
87459 mid = (mid + Math.imul(ah4, bl8)) | 0;
87460 hi = (hi + Math.imul(ah4, bh8)) | 0;
87461 lo = (lo + Math.imul(al3, bl9)) | 0;
87462 mid = (mid + Math.imul(al3, bh9)) | 0;
87463 mid = (mid + Math.imul(ah3, bl9)) | 0;
87464 hi = (hi + Math.imul(ah3, bh9)) | 0;
87465 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87466 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
87467 w12 &= 0x3ffffff;
87468 /* k = 13 */
87469 lo = Math.imul(al9, bl4);
87470 mid = Math.imul(al9, bh4);
87471 mid = (mid + Math.imul(ah9, bl4)) | 0;
87472 hi = Math.imul(ah9, bh4);
87473 lo = (lo + Math.imul(al8, bl5)) | 0;
87474 mid = (mid + Math.imul(al8, bh5)) | 0;
87475 mid = (mid + Math.imul(ah8, bl5)) | 0;
87476 hi = (hi + Math.imul(ah8, bh5)) | 0;
87477 lo = (lo + Math.imul(al7, bl6)) | 0;
87478 mid = (mid + Math.imul(al7, bh6)) | 0;
87479 mid = (mid + Math.imul(ah7, bl6)) | 0;
87480 hi = (hi + Math.imul(ah7, bh6)) | 0;
87481 lo = (lo + Math.imul(al6, bl7)) | 0;
87482 mid = (mid + Math.imul(al6, bh7)) | 0;
87483 mid = (mid + Math.imul(ah6, bl7)) | 0;
87484 hi = (hi + Math.imul(ah6, bh7)) | 0;
87485 lo = (lo + Math.imul(al5, bl8)) | 0;
87486 mid = (mid + Math.imul(al5, bh8)) | 0;
87487 mid = (mid + Math.imul(ah5, bl8)) | 0;
87488 hi = (hi + Math.imul(ah5, bh8)) | 0;
87489 lo = (lo + Math.imul(al4, bl9)) | 0;
87490 mid = (mid + Math.imul(al4, bh9)) | 0;
87491 mid = (mid + Math.imul(ah4, bl9)) | 0;
87492 hi = (hi + Math.imul(ah4, bh9)) | 0;
87493 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87494 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
87495 w13 &= 0x3ffffff;
87496 /* k = 14 */
87497 lo = Math.imul(al9, bl5);
87498 mid = Math.imul(al9, bh5);
87499 mid = (mid + Math.imul(ah9, bl5)) | 0;
87500 hi = Math.imul(ah9, bh5);
87501 lo = (lo + Math.imul(al8, bl6)) | 0;
87502 mid = (mid + Math.imul(al8, bh6)) | 0;
87503 mid = (mid + Math.imul(ah8, bl6)) | 0;
87504 hi = (hi + Math.imul(ah8, bh6)) | 0;
87505 lo = (lo + Math.imul(al7, bl7)) | 0;
87506 mid = (mid + Math.imul(al7, bh7)) | 0;
87507 mid = (mid + Math.imul(ah7, bl7)) | 0;
87508 hi = (hi + Math.imul(ah7, bh7)) | 0;
87509 lo = (lo + Math.imul(al6, bl8)) | 0;
87510 mid = (mid + Math.imul(al6, bh8)) | 0;
87511 mid = (mid + Math.imul(ah6, bl8)) | 0;
87512 hi = (hi + Math.imul(ah6, bh8)) | 0;
87513 lo = (lo + Math.imul(al5, bl9)) | 0;
87514 mid = (mid + Math.imul(al5, bh9)) | 0;
87515 mid = (mid + Math.imul(ah5, bl9)) | 0;
87516 hi = (hi + Math.imul(ah5, bh9)) | 0;
87517 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87518 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
87519 w14 &= 0x3ffffff;
87520 /* k = 15 */
87521 lo = Math.imul(al9, bl6);
87522 mid = Math.imul(al9, bh6);
87523 mid = (mid + Math.imul(ah9, bl6)) | 0;
87524 hi = Math.imul(ah9, bh6);
87525 lo = (lo + Math.imul(al8, bl7)) | 0;
87526 mid = (mid + Math.imul(al8, bh7)) | 0;
87527 mid = (mid + Math.imul(ah8, bl7)) | 0;
87528 hi = (hi + Math.imul(ah8, bh7)) | 0;
87529 lo = (lo + Math.imul(al7, bl8)) | 0;
87530 mid = (mid + Math.imul(al7, bh8)) | 0;
87531 mid = (mid + Math.imul(ah7, bl8)) | 0;
87532 hi = (hi + Math.imul(ah7, bh8)) | 0;
87533 lo = (lo + Math.imul(al6, bl9)) | 0;
87534 mid = (mid + Math.imul(al6, bh9)) | 0;
87535 mid = (mid + Math.imul(ah6, bl9)) | 0;
87536 hi = (hi + Math.imul(ah6, bh9)) | 0;
87537 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87538 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
87539 w15 &= 0x3ffffff;
87540 /* k = 16 */
87541 lo = Math.imul(al9, bl7);
87542 mid = Math.imul(al9, bh7);
87543 mid = (mid + Math.imul(ah9, bl7)) | 0;
87544 hi = Math.imul(ah9, bh7);
87545 lo = (lo + Math.imul(al8, bl8)) | 0;
87546 mid = (mid + Math.imul(al8, bh8)) | 0;
87547 mid = (mid + Math.imul(ah8, bl8)) | 0;
87548 hi = (hi + Math.imul(ah8, bh8)) | 0;
87549 lo = (lo + Math.imul(al7, bl9)) | 0;
87550 mid = (mid + Math.imul(al7, bh9)) | 0;
87551 mid = (mid + Math.imul(ah7, bl9)) | 0;
87552 hi = (hi + Math.imul(ah7, bh9)) | 0;
87553 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87554 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
87555 w16 &= 0x3ffffff;
87556 /* k = 17 */
87557 lo = Math.imul(al9, bl8);
87558 mid = Math.imul(al9, bh8);
87559 mid = (mid + Math.imul(ah9, bl8)) | 0;
87560 hi = Math.imul(ah9, bh8);
87561 lo = (lo + Math.imul(al8, bl9)) | 0;
87562 mid = (mid + Math.imul(al8, bh9)) | 0;
87563 mid = (mid + Math.imul(ah8, bl9)) | 0;
87564 hi = (hi + Math.imul(ah8, bh9)) | 0;
87565 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87566 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
87567 w17 &= 0x3ffffff;
87568 /* k = 18 */
87569 lo = Math.imul(al9, bl9);
87570 mid = Math.imul(al9, bh9);
87571 mid = (mid + Math.imul(ah9, bl9)) | 0;
87572 hi = Math.imul(ah9, bh9);
87573 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
87574 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
87575 w18 &= 0x3ffffff;
87576 o[0] = w0;
87577 o[1] = w1;
87578 o[2] = w2;
87579 o[3] = w3;
87580 o[4] = w4;
87581 o[5] = w5;
87582 o[6] = w6;
87583 o[7] = w7;
87584 o[8] = w8;
87585 o[9] = w9;
87586 o[10] = w10;
87587 o[11] = w11;
87588 o[12] = w12;
87589 o[13] = w13;
87590 o[14] = w14;
87591 o[15] = w15;
87592 o[16] = w16;
87593 o[17] = w17;
87594 o[18] = w18;
87595 if (c !== 0) {
87596 o[19] = c;
87597 out.length++;
87598 }
87599 return out;
87600 };
87601
87602 // Polyfill comb
87603 if (!Math.imul) {
87604 comb10MulTo = smallMulTo;
87605 }
87606
87607 function bigMulTo (self, num, out) {
87608 out.negative = num.negative ^ self.negative;
87609 out.length = self.length + num.length;
87610
87611 var carry = 0;
87612 var hncarry = 0;
87613 for (var k = 0; k < out.length - 1; k++) {
87614 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
87615 // note that ncarry could be >= 0x3ffffff
87616 var ncarry = hncarry;
87617 hncarry = 0;
87618 var rword = carry & 0x3ffffff;
87619 var maxJ = Math.min(k, num.length - 1);
87620 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
87621 var i = k - j;
87622 var a = self.words[i] | 0;
87623 var b = num.words[j] | 0;
87624 var r = a * b;
87625
87626 var lo = r & 0x3ffffff;
87627 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
87628 lo = (lo + rword) | 0;
87629 rword = lo & 0x3ffffff;
87630 ncarry = (ncarry + (lo >>> 26)) | 0;
87631
87632 hncarry += ncarry >>> 26;
87633 ncarry &= 0x3ffffff;
87634 }
87635 out.words[k] = rword;
87636 carry = ncarry;
87637 ncarry = hncarry;
87638 }
87639 if (carry !== 0) {
87640 out.words[k] = carry;
87641 } else {
87642 out.length--;
87643 }
87644
87645 return out.strip();
87646 }
87647
87648 function jumboMulTo (self, num, out) {
87649 var fftm = new FFTM();
87650 return fftm.mulp(self, num, out);
87651 }
87652
87653 BN.prototype.mulTo = function mulTo (num, out) {
87654 var res;
87655 var len = this.length + num.length;
87656 if (this.length === 10 && num.length === 10) {
87657 res = comb10MulTo(this, num, out);
87658 } else if (len < 63) {
87659 res = smallMulTo(this, num, out);
87660 } else if (len < 1024) {
87661 res = bigMulTo(this, num, out);
87662 } else {
87663 res = jumboMulTo(this, num, out);
87664 }
87665
87666 return res;
87667 };
87668
87669 // Cooley-Tukey algorithm for FFT
87670 // slightly revisited to rely on looping instead of recursion
87671
87672 function FFTM (x, y) {
87673 this.x = x;
87674 this.y = y;
87675 }
87676
87677 FFTM.prototype.makeRBT = function makeRBT (N) {
87678 var t = new Array(N);
87679 var l = BN.prototype._countBits(N) - 1;
87680 for (var i = 0; i < N; i++) {
87681 t[i] = this.revBin(i, l, N);
87682 }
87683
87684 return t;
87685 };
87686
87687 // Returns binary-reversed representation of `x`
87688 FFTM.prototype.revBin = function revBin (x, l, N) {
87689 if (x === 0 || x === N - 1) return x;
87690
87691 var rb = 0;
87692 for (var i = 0; i < l; i++) {
87693 rb |= (x & 1) << (l - i - 1);
87694 x >>= 1;
87695 }
87696
87697 return rb;
87698 };
87699
87700 // Performs "tweedling" phase, therefore 'emulating'
87701 // behaviour of the recursive algorithm
87702 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
87703 for (var i = 0; i < N; i++) {
87704 rtws[i] = rws[rbt[i]];
87705 itws[i] = iws[rbt[i]];
87706 }
87707 };
87708
87709 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
87710 this.permute(rbt, rws, iws, rtws, itws, N);
87711
87712 for (var s = 1; s < N; s <<= 1) {
87713 var l = s << 1;
87714
87715 var rtwdf = Math.cos(2 * Math.PI / l);
87716 var itwdf = Math.sin(2 * Math.PI / l);
87717
87718 for (var p = 0; p < N; p += l) {
87719 var rtwdf_ = rtwdf;
87720 var itwdf_ = itwdf;
87721
87722 for (var j = 0; j < s; j++) {
87723 var re = rtws[p + j];
87724 var ie = itws[p + j];
87725
87726 var ro = rtws[p + j + s];
87727 var io = itws[p + j + s];
87728
87729 var rx = rtwdf_ * ro - itwdf_ * io;
87730
87731 io = rtwdf_ * io + itwdf_ * ro;
87732 ro = rx;
87733
87734 rtws[p + j] = re + ro;
87735 itws[p + j] = ie + io;
87736
87737 rtws[p + j + s] = re - ro;
87738 itws[p + j + s] = ie - io;
87739
87740 /* jshint maxdepth : false */
87741 if (j !== l) {
87742 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
87743
87744 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
87745 rtwdf_ = rx;
87746 }
87747 }
87748 }
87749 }
87750 };
87751
87752 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
87753 var N = Math.max(m, n) | 1;
87754 var odd = N & 1;
87755 var i = 0;
87756 for (N = N / 2 | 0; N; N = N >>> 1) {
87757 i++;
87758 }
87759
87760 return 1 << i + 1 + odd;
87761 };
87762
87763 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
87764 if (N <= 1) return;
87765
87766 for (var i = 0; i < N / 2; i++) {
87767 var t = rws[i];
87768
87769 rws[i] = rws[N - i - 1];
87770 rws[N - i - 1] = t;
87771
87772 t = iws[i];
87773
87774 iws[i] = -iws[N - i - 1];
87775 iws[N - i - 1] = -t;
87776 }
87777 };
87778
87779 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
87780 var carry = 0;
87781 for (var i = 0; i < N / 2; i++) {
87782 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
87783 Math.round(ws[2 * i] / N) +
87784 carry;
87785
87786 ws[i] = w & 0x3ffffff;
87787
87788 if (w < 0x4000000) {
87789 carry = 0;
87790 } else {
87791 carry = w / 0x4000000 | 0;
87792 }
87793 }
87794
87795 return ws;
87796 };
87797
87798 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
87799 var carry = 0;
87800 for (var i = 0; i < len; i++) {
87801 carry = carry + (ws[i] | 0);
87802
87803 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
87804 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
87805 }
87806
87807 // Pad with zeroes
87808 for (i = 2 * len; i < N; ++i) {
87809 rws[i] = 0;
87810 }
87811
87812 assert(carry === 0);
87813 assert((carry & ~0x1fff) === 0);
87814 };
87815
87816 FFTM.prototype.stub = function stub (N) {
87817 var ph = new Array(N);
87818 for (var i = 0; i < N; i++) {
87819 ph[i] = 0;
87820 }
87821
87822 return ph;
87823 };
87824
87825 FFTM.prototype.mulp = function mulp (x, y, out) {
87826 var N = 2 * this.guessLen13b(x.length, y.length);
87827
87828 var rbt = this.makeRBT(N);
87829
87830 var _ = this.stub(N);
87831
87832 var rws = new Array(N);
87833 var rwst = new Array(N);
87834 var iwst = new Array(N);
87835
87836 var nrws = new Array(N);
87837 var nrwst = new Array(N);
87838 var niwst = new Array(N);
87839
87840 var rmws = out.words;
87841 rmws.length = N;
87842
87843 this.convert13b(x.words, x.length, rws, N);
87844 this.convert13b(y.words, y.length, nrws, N);
87845
87846 this.transform(rws, _, rwst, iwst, N, rbt);
87847 this.transform(nrws, _, nrwst, niwst, N, rbt);
87848
87849 for (var i = 0; i < N; i++) {
87850 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
87851 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
87852 rwst[i] = rx;
87853 }
87854
87855 this.conjugate(rwst, iwst, N);
87856 this.transform(rwst, iwst, rmws, _, N, rbt);
87857 this.conjugate(rmws, _, N);
87858 this.normalize13b(rmws, N);
87859
87860 out.negative = x.negative ^ y.negative;
87861 out.length = x.length + y.length;
87862 return out.strip();
87863 };
87864
87865 // Multiply `this` by `num`
87866 BN.prototype.mul = function mul (num) {
87867 var out = new BN(null);
87868 out.words = new Array(this.length + num.length);
87869 return this.mulTo(num, out);
87870 };
87871
87872 // Multiply employing FFT
87873 BN.prototype.mulf = function mulf (num) {
87874 var out = new BN(null);
87875 out.words = new Array(this.length + num.length);
87876 return jumboMulTo(this, num, out);
87877 };
87878
87879 // In-place Multiplication
87880 BN.prototype.imul = function imul (num) {
87881 return this.clone().mulTo(num, this);
87882 };
87883
87884 BN.prototype.imuln = function imuln (num) {
87885 assert(typeof num === 'number');
87886 assert(num < 0x4000000);
87887
87888 // Carry
87889 var carry = 0;
87890 for (var i = 0; i < this.length; i++) {
87891 var w = (this.words[i] | 0) * num;
87892 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
87893 carry >>= 26;
87894 carry += (w / 0x4000000) | 0;
87895 // NOTE: lo is 27bit maximum
87896 carry += lo >>> 26;
87897 this.words[i] = lo & 0x3ffffff;
87898 }
87899
87900 if (carry !== 0) {
87901 this.words[i] = carry;
87902 this.length++;
87903 }
87904
87905 return this;
87906 };
87907
87908 BN.prototype.muln = function muln (num) {
87909 return this.clone().imuln(num);
87910 };
87911
87912 // `this` * `this`
87913 BN.prototype.sqr = function sqr () {
87914 return this.mul(this);
87915 };
87916
87917 // `this` * `this` in-place
87918 BN.prototype.isqr = function isqr () {
87919 return this.imul(this.clone());
87920 };
87921
87922 // Math.pow(`this`, `num`)
87923 BN.prototype.pow = function pow (num) {
87924 var w = toBitArray(num);
87925 if (w.length === 0) return new BN(1);
87926
87927 // Skip leading zeroes
87928 var res = this;
87929 for (var i = 0; i < w.length; i++, res = res.sqr()) {
87930 if (w[i] !== 0) break;
87931 }
87932
87933 if (++i < w.length) {
87934 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
87935 if (w[i] === 0) continue;
87936
87937 res = res.mul(q);
87938 }
87939 }
87940
87941 return res;
87942 };
87943
87944 // Shift-left in-place
87945 BN.prototype.iushln = function iushln (bits) {
87946 assert(typeof bits === 'number' && bits >= 0);
87947 var r = bits % 26;
87948 var s = (bits - r) / 26;
87949 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
87950 var i;
87951
87952 if (r !== 0) {
87953 var carry = 0;
87954
87955 for (i = 0; i < this.length; i++) {
87956 var newCarry = this.words[i] & carryMask;
87957 var c = ((this.words[i] | 0) - newCarry) << r;
87958 this.words[i] = c | carry;
87959 carry = newCarry >>> (26 - r);
87960 }
87961
87962 if (carry) {
87963 this.words[i] = carry;
87964 this.length++;
87965 }
87966 }
87967
87968 if (s !== 0) {
87969 for (i = this.length - 1; i >= 0; i--) {
87970 this.words[i + s] = this.words[i];
87971 }
87972
87973 for (i = 0; i < s; i++) {
87974 this.words[i] = 0;
87975 }
87976
87977 this.length += s;
87978 }
87979
87980 return this.strip();
87981 };
87982
87983 BN.prototype.ishln = function ishln (bits) {
87984 // TODO(indutny): implement me
87985 assert(this.negative === 0);
87986 return this.iushln(bits);
87987 };
87988
87989 // Shift-right in-place
87990 // NOTE: `hint` is a lowest bit before trailing zeroes
87991 // NOTE: if `extended` is present - it will be filled with destroyed bits
87992 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
87993 assert(typeof bits === 'number' && bits >= 0);
87994 var h;
87995 if (hint) {
87996 h = (hint - (hint % 26)) / 26;
87997 } else {
87998 h = 0;
87999 }
88000
88001 var r = bits % 26;
88002 var s = Math.min((bits - r) / 26, this.length);
88003 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
88004 var maskedWords = extended;
88005
88006 h -= s;
88007 h = Math.max(0, h);
88008
88009 // Extended mode, copy masked part
88010 if (maskedWords) {
88011 for (var i = 0; i < s; i++) {
88012 maskedWords.words[i] = this.words[i];
88013 }
88014 maskedWords.length = s;
88015 }
88016
88017 if (s === 0) {
88018 // No-op, we should not move anything at all
88019 } else if (this.length > s) {
88020 this.length -= s;
88021 for (i = 0; i < this.length; i++) {
88022 this.words[i] = this.words[i + s];
88023 }
88024 } else {
88025 this.words[0] = 0;
88026 this.length = 1;
88027 }
88028
88029 var carry = 0;
88030 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
88031 var word = this.words[i] | 0;
88032 this.words[i] = (carry << (26 - r)) | (word >>> r);
88033 carry = word & mask;
88034 }
88035
88036 // Push carried bits as a mask
88037 if (maskedWords && carry !== 0) {
88038 maskedWords.words[maskedWords.length++] = carry;
88039 }
88040
88041 if (this.length === 0) {
88042 this.words[0] = 0;
88043 this.length = 1;
88044 }
88045
88046 return this.strip();
88047 };
88048
88049 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
88050 // TODO(indutny): implement me
88051 assert(this.negative === 0);
88052 return this.iushrn(bits, hint, extended);
88053 };
88054
88055 // Shift-left
88056 BN.prototype.shln = function shln (bits) {
88057 return this.clone().ishln(bits);
88058 };
88059
88060 BN.prototype.ushln = function ushln (bits) {
88061 return this.clone().iushln(bits);
88062 };
88063
88064 // Shift-right
88065 BN.prototype.shrn = function shrn (bits) {
88066 return this.clone().ishrn(bits);
88067 };
88068
88069 BN.prototype.ushrn = function ushrn (bits) {
88070 return this.clone().iushrn(bits);
88071 };
88072
88073 // Test if n bit is set
88074 BN.prototype.testn = function testn (bit) {
88075 assert(typeof bit === 'number' && bit >= 0);
88076 var r = bit % 26;
88077 var s = (bit - r) / 26;
88078 var q = 1 << r;
88079
88080 // Fast case: bit is much higher than all existing words
88081 if (this.length <= s) return false;
88082
88083 // Check bit and return
88084 var w = this.words[s];
88085
88086 return !!(w & q);
88087 };
88088
88089 // Return only lowers bits of number (in-place)
88090 BN.prototype.imaskn = function imaskn (bits) {
88091 assert(typeof bits === 'number' && bits >= 0);
88092 var r = bits % 26;
88093 var s = (bits - r) / 26;
88094
88095 assert(this.negative === 0, 'imaskn works only with positive numbers');
88096
88097 if (this.length <= s) {
88098 return this;
88099 }
88100
88101 if (r !== 0) {
88102 s++;
88103 }
88104 this.length = Math.min(s, this.length);
88105
88106 if (r !== 0) {
88107 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
88108 this.words[this.length - 1] &= mask;
88109 }
88110
88111 return this.strip();
88112 };
88113
88114 // Return only lowers bits of number
88115 BN.prototype.maskn = function maskn (bits) {
88116 return this.clone().imaskn(bits);
88117 };
88118
88119 // Add plain number `num` to `this`
88120 BN.prototype.iaddn = function iaddn (num) {
88121 assert(typeof num === 'number');
88122 assert(num < 0x4000000);
88123 if (num < 0) return this.isubn(-num);
88124
88125 // Possible sign change
88126 if (this.negative !== 0) {
88127 if (this.length === 1 && (this.words[0] | 0) < num) {
88128 this.words[0] = num - (this.words[0] | 0);
88129 this.negative = 0;
88130 return this;
88131 }
88132
88133 this.negative = 0;
88134 this.isubn(num);
88135 this.negative = 1;
88136 return this;
88137 }
88138
88139 // Add without checks
88140 return this._iaddn(num);
88141 };
88142
88143 BN.prototype._iaddn = function _iaddn (num) {
88144 this.words[0] += num;
88145
88146 // Carry
88147 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
88148 this.words[i] -= 0x4000000;
88149 if (i === this.length - 1) {
88150 this.words[i + 1] = 1;
88151 } else {
88152 this.words[i + 1]++;
88153 }
88154 }
88155 this.length = Math.max(this.length, i + 1);
88156
88157 return this;
88158 };
88159
88160 // Subtract plain number `num` from `this`
88161 BN.prototype.isubn = function isubn (num) {
88162 assert(typeof num === 'number');
88163 assert(num < 0x4000000);
88164 if (num < 0) return this.iaddn(-num);
88165
88166 if (this.negative !== 0) {
88167 this.negative = 0;
88168 this.iaddn(num);
88169 this.negative = 1;
88170 return this;
88171 }
88172
88173 this.words[0] -= num;
88174
88175 if (this.length === 1 && this.words[0] < 0) {
88176 this.words[0] = -this.words[0];
88177 this.negative = 1;
88178 } else {
88179 // Carry
88180 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
88181 this.words[i] += 0x4000000;
88182 this.words[i + 1] -= 1;
88183 }
88184 }
88185
88186 return this.strip();
88187 };
88188
88189 BN.prototype.addn = function addn (num) {
88190 return this.clone().iaddn(num);
88191 };
88192
88193 BN.prototype.subn = function subn (num) {
88194 return this.clone().isubn(num);
88195 };
88196
88197 BN.prototype.iabs = function iabs () {
88198 this.negative = 0;
88199
88200 return this;
88201 };
88202
88203 BN.prototype.abs = function abs () {
88204 return this.clone().iabs();
88205 };
88206
88207 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
88208 var len = num.length + shift;
88209 var i;
88210
88211 this._expand(len);
88212
88213 var w;
88214 var carry = 0;
88215 for (i = 0; i < num.length; i++) {
88216 w = (this.words[i + shift] | 0) + carry;
88217 var right = (num.words[i] | 0) * mul;
88218 w -= right & 0x3ffffff;
88219 carry = (w >> 26) - ((right / 0x4000000) | 0);
88220 this.words[i + shift] = w & 0x3ffffff;
88221 }
88222 for (; i < this.length - shift; i++) {
88223 w = (this.words[i + shift] | 0) + carry;
88224 carry = w >> 26;
88225 this.words[i + shift] = w & 0x3ffffff;
88226 }
88227
88228 if (carry === 0) return this.strip();
88229
88230 // Subtraction overflow
88231 assert(carry === -1);
88232 carry = 0;
88233 for (i = 0; i < this.length; i++) {
88234 w = -(this.words[i] | 0) + carry;
88235 carry = w >> 26;
88236 this.words[i] = w & 0x3ffffff;
88237 }
88238 this.negative = 1;
88239
88240 return this.strip();
88241 };
88242
88243 BN.prototype._wordDiv = function _wordDiv (num, mode) {
88244 var shift = this.length - num.length;
88245
88246 var a = this.clone();
88247 var b = num;
88248
88249 // Normalize
88250 var bhi = b.words[b.length - 1] | 0;
88251 var bhiBits = this._countBits(bhi);
88252 shift = 26 - bhiBits;
88253 if (shift !== 0) {
88254 b = b.ushln(shift);
88255 a.iushln(shift);
88256 bhi = b.words[b.length - 1] | 0;
88257 }
88258
88259 // Initialize quotient
88260 var m = a.length - b.length;
88261 var q;
88262
88263 if (mode !== 'mod') {
88264 q = new BN(null);
88265 q.length = m + 1;
88266 q.words = new Array(q.length);
88267 for (var i = 0; i < q.length; i++) {
88268 q.words[i] = 0;
88269 }
88270 }
88271
88272 var diff = a.clone()._ishlnsubmul(b, 1, m);
88273 if (diff.negative === 0) {
88274 a = diff;
88275 if (q) {
88276 q.words[m] = 1;
88277 }
88278 }
88279
88280 for (var j = m - 1; j >= 0; j--) {
88281 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
88282 (a.words[b.length + j - 1] | 0);
88283
88284 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
88285 // (0x7ffffff)
88286 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
88287
88288 a._ishlnsubmul(b, qj, j);
88289 while (a.negative !== 0) {
88290 qj--;
88291 a.negative = 0;
88292 a._ishlnsubmul(b, 1, j);
88293 if (!a.isZero()) {
88294 a.negative ^= 1;
88295 }
88296 }
88297 if (q) {
88298 q.words[j] = qj;
88299 }
88300 }
88301 if (q) {
88302 q.strip();
88303 }
88304 a.strip();
88305
88306 // Denormalize
88307 if (mode !== 'div' && shift !== 0) {
88308 a.iushrn(shift);
88309 }
88310
88311 return {
88312 div: q || null,
88313 mod: a
88314 };
88315 };
88316
88317 // NOTE: 1) `mode` can be set to `mod` to request mod only,
88318 // to `div` to request div only, or be absent to
88319 // request both div & mod
88320 // 2) `positive` is true if unsigned mod is requested
88321 BN.prototype.divmod = function divmod (num, mode, positive) {
88322 assert(!num.isZero());
88323
88324 if (this.isZero()) {
88325 return {
88326 div: new BN(0),
88327 mod: new BN(0)
88328 };
88329 }
88330
88331 var div, mod, res;
88332 if (this.negative !== 0 && num.negative === 0) {
88333 res = this.neg().divmod(num, mode);
88334
88335 if (mode !== 'mod') {
88336 div = res.div.neg();
88337 }
88338
88339 if (mode !== 'div') {
88340 mod = res.mod.neg();
88341 if (positive && mod.negative !== 0) {
88342 mod.iadd(num);
88343 }
88344 }
88345
88346 return {
88347 div: div,
88348 mod: mod
88349 };
88350 }
88351
88352 if (this.negative === 0 && num.negative !== 0) {
88353 res = this.divmod(num.neg(), mode);
88354
88355 if (mode !== 'mod') {
88356 div = res.div.neg();
88357 }
88358
88359 return {
88360 div: div,
88361 mod: res.mod
88362 };
88363 }
88364
88365 if ((this.negative & num.negative) !== 0) {
88366 res = this.neg().divmod(num.neg(), mode);
88367
88368 if (mode !== 'div') {
88369 mod = res.mod.neg();
88370 if (positive && mod.negative !== 0) {
88371 mod.isub(num);
88372 }
88373 }
88374
88375 return {
88376 div: res.div,
88377 mod: mod
88378 };
88379 }
88380
88381 // Both numbers are positive at this point
88382
88383 // Strip both numbers to approximate shift value
88384 if (num.length > this.length || this.cmp(num) < 0) {
88385 return {
88386 div: new BN(0),
88387 mod: this
88388 };
88389 }
88390
88391 // Very short reduction
88392 if (num.length === 1) {
88393 if (mode === 'div') {
88394 return {
88395 div: this.divn(num.words[0]),
88396 mod: null
88397 };
88398 }
88399
88400 if (mode === 'mod') {
88401 return {
88402 div: null,
88403 mod: new BN(this.modn(num.words[0]))
88404 };
88405 }
88406
88407 return {
88408 div: this.divn(num.words[0]),
88409 mod: new BN(this.modn(num.words[0]))
88410 };
88411 }
88412
88413 return this._wordDiv(num, mode);
88414 };
88415
88416 // Find `this` / `num`
88417 BN.prototype.div = function div (num) {
88418 return this.divmod(num, 'div', false).div;
88419 };
88420
88421 // Find `this` % `num`
88422 BN.prototype.mod = function mod (num) {
88423 return this.divmod(num, 'mod', false).mod;
88424 };
88425
88426 BN.prototype.umod = function umod (num) {
88427 return this.divmod(num, 'mod', true).mod;
88428 };
88429
88430 // Find Round(`this` / `num`)
88431 BN.prototype.divRound = function divRound (num) {
88432 var dm = this.divmod(num);
88433
88434 // Fast case - exact division
88435 if (dm.mod.isZero()) return dm.div;
88436
88437 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
88438
88439 var half = num.ushrn(1);
88440 var r2 = num.andln(1);
88441 var cmp = mod.cmp(half);
88442
88443 // Round down
88444 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
88445
88446 // Round up
88447 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
88448 };
88449
88450 BN.prototype.modn = function modn (num) {
88451 assert(num <= 0x3ffffff);
88452 var p = (1 << 26) % num;
88453
88454 var acc = 0;
88455 for (var i = this.length - 1; i >= 0; i--) {
88456 acc = (p * acc + (this.words[i] | 0)) % num;
88457 }
88458
88459 return acc;
88460 };
88461
88462 // In-place division by number
88463 BN.prototype.idivn = function idivn (num) {
88464 assert(num <= 0x3ffffff);
88465
88466 var carry = 0;
88467 for (var i = this.length - 1; i >= 0; i--) {
88468 var w = (this.words[i] | 0) + carry * 0x4000000;
88469 this.words[i] = (w / num) | 0;
88470 carry = w % num;
88471 }
88472
88473 return this.strip();
88474 };
88475
88476 BN.prototype.divn = function divn (num) {
88477 return this.clone().idivn(num);
88478 };
88479
88480 BN.prototype.egcd = function egcd (p) {
88481 assert(p.negative === 0);
88482 assert(!p.isZero());
88483
88484 var x = this;
88485 var y = p.clone();
88486
88487 if (x.negative !== 0) {
88488 x = x.umod(p);
88489 } else {
88490 x = x.clone();
88491 }
88492
88493 // A * x + B * y = x
88494 var A = new BN(1);
88495 var B = new BN(0);
88496
88497 // C * x + D * y = y
88498 var C = new BN(0);
88499 var D = new BN(1);
88500
88501 var g = 0;
88502
88503 while (x.isEven() && y.isEven()) {
88504 x.iushrn(1);
88505 y.iushrn(1);
88506 ++g;
88507 }
88508
88509 var yp = y.clone();
88510 var xp = x.clone();
88511
88512 while (!x.isZero()) {
88513 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
88514 if (i > 0) {
88515 x.iushrn(i);
88516 while (i-- > 0) {
88517 if (A.isOdd() || B.isOdd()) {
88518 A.iadd(yp);
88519 B.isub(xp);
88520 }
88521
88522 A.iushrn(1);
88523 B.iushrn(1);
88524 }
88525 }
88526
88527 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
88528 if (j > 0) {
88529 y.iushrn(j);
88530 while (j-- > 0) {
88531 if (C.isOdd() || D.isOdd()) {
88532 C.iadd(yp);
88533 D.isub(xp);
88534 }
88535
88536 C.iushrn(1);
88537 D.iushrn(1);
88538 }
88539 }
88540
88541 if (x.cmp(y) >= 0) {
88542 x.isub(y);
88543 A.isub(C);
88544 B.isub(D);
88545 } else {
88546 y.isub(x);
88547 C.isub(A);
88548 D.isub(B);
88549 }
88550 }
88551
88552 return {
88553 a: C,
88554 b: D,
88555 gcd: y.iushln(g)
88556 };
88557 };
88558
88559 // This is reduced incarnation of the binary EEA
88560 // above, designated to invert members of the
88561 // _prime_ fields F(p) at a maximal speed
88562 BN.prototype._invmp = function _invmp (p) {
88563 assert(p.negative === 0);
88564 assert(!p.isZero());
88565
88566 var a = this;
88567 var b = p.clone();
88568
88569 if (a.negative !== 0) {
88570 a = a.umod(p);
88571 } else {
88572 a = a.clone();
88573 }
88574
88575 var x1 = new BN(1);
88576 var x2 = new BN(0);
88577
88578 var delta = b.clone();
88579
88580 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
88581 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
88582 if (i > 0) {
88583 a.iushrn(i);
88584 while (i-- > 0) {
88585 if (x1.isOdd()) {
88586 x1.iadd(delta);
88587 }
88588
88589 x1.iushrn(1);
88590 }
88591 }
88592
88593 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
88594 if (j > 0) {
88595 b.iushrn(j);
88596 while (j-- > 0) {
88597 if (x2.isOdd()) {
88598 x2.iadd(delta);
88599 }
88600
88601 x2.iushrn(1);
88602 }
88603 }
88604
88605 if (a.cmp(b) >= 0) {
88606 a.isub(b);
88607 x1.isub(x2);
88608 } else {
88609 b.isub(a);
88610 x2.isub(x1);
88611 }
88612 }
88613
88614 var res;
88615 if (a.cmpn(1) === 0) {
88616 res = x1;
88617 } else {
88618 res = x2;
88619 }
88620
88621 if (res.cmpn(0) < 0) {
88622 res.iadd(p);
88623 }
88624
88625 return res;
88626 };
88627
88628 BN.prototype.gcd = function gcd (num) {
88629 if (this.isZero()) return num.abs();
88630 if (num.isZero()) return this.abs();
88631
88632 var a = this.clone();
88633 var b = num.clone();
88634 a.negative = 0;
88635 b.negative = 0;
88636
88637 // Remove common factor of two
88638 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
88639 a.iushrn(1);
88640 b.iushrn(1);
88641 }
88642
88643 do {
88644 while (a.isEven()) {
88645 a.iushrn(1);
88646 }
88647 while (b.isEven()) {
88648 b.iushrn(1);
88649 }
88650
88651 var r = a.cmp(b);
88652 if (r < 0) {
88653 // Swap `a` and `b` to make `a` always bigger than `b`
88654 var t = a;
88655 a = b;
88656 b = t;
88657 } else if (r === 0 || b.cmpn(1) === 0) {
88658 break;
88659 }
88660
88661 a.isub(b);
88662 } while (true);
88663
88664 return b.iushln(shift);
88665 };
88666
88667 // Invert number in the field F(num)
88668 BN.prototype.invm = function invm (num) {
88669 return this.egcd(num).a.umod(num);
88670 };
88671
88672 BN.prototype.isEven = function isEven () {
88673 return (this.words[0] & 1) === 0;
88674 };
88675
88676 BN.prototype.isOdd = function isOdd () {
88677 return (this.words[0] & 1) === 1;
88678 };
88679
88680 // And first word and num
88681 BN.prototype.andln = function andln (num) {
88682 return this.words[0] & num;
88683 };
88684
88685 // Increment at the bit position in-line
88686 BN.prototype.bincn = function bincn (bit) {
88687 assert(typeof bit === 'number');
88688 var r = bit % 26;
88689 var s = (bit - r) / 26;
88690 var q = 1 << r;
88691
88692 // Fast case: bit is much higher than all existing words
88693 if (this.length <= s) {
88694 this._expand(s + 1);
88695 this.words[s] |= q;
88696 return this;
88697 }
88698
88699 // Add bit and propagate, if needed
88700 var carry = q;
88701 for (var i = s; carry !== 0 && i < this.length; i++) {
88702 var w = this.words[i] | 0;
88703 w += carry;
88704 carry = w >>> 26;
88705 w &= 0x3ffffff;
88706 this.words[i] = w;
88707 }
88708 if (carry !== 0) {
88709 this.words[i] = carry;
88710 this.length++;
88711 }
88712 return this;
88713 };
88714
88715 BN.prototype.isZero = function isZero () {
88716 return this.length === 1 && this.words[0] === 0;
88717 };
88718
88719 BN.prototype.cmpn = function cmpn (num) {
88720 var negative = num < 0;
88721
88722 if (this.negative !== 0 && !negative) return -1;
88723 if (this.negative === 0 && negative) return 1;
88724
88725 this.strip();
88726
88727 var res;
88728 if (this.length > 1) {
88729 res = 1;
88730 } else {
88731 if (negative) {
88732 num = -num;
88733 }
88734
88735 assert(num <= 0x3ffffff, 'Number is too big');
88736
88737 var w = this.words[0] | 0;
88738 res = w === num ? 0 : w < num ? -1 : 1;
88739 }
88740 if (this.negative !== 0) return -res | 0;
88741 return res;
88742 };
88743
88744 // Compare two numbers and return:
88745 // 1 - if `this` > `num`
88746 // 0 - if `this` == `num`
88747 // -1 - if `this` < `num`
88748 BN.prototype.cmp = function cmp (num) {
88749 if (this.negative !== 0 && num.negative === 0) return -1;
88750 if (this.negative === 0 && num.negative !== 0) return 1;
88751
88752 var res = this.ucmp(num);
88753 if (this.negative !== 0) return -res | 0;
88754 return res;
88755 };
88756
88757 // Unsigned comparison
88758 BN.prototype.ucmp = function ucmp (num) {
88759 // At this point both numbers have the same sign
88760 if (this.length > num.length) return 1;
88761 if (this.length < num.length) return -1;
88762
88763 var res = 0;
88764 for (var i = this.length - 1; i >= 0; i--) {
88765 var a = this.words[i] | 0;
88766 var b = num.words[i] | 0;
88767
88768 if (a === b) continue;
88769 if (a < b) {
88770 res = -1;
88771 } else if (a > b) {
88772 res = 1;
88773 }
88774 break;
88775 }
88776 return res;
88777 };
88778
88779 BN.prototype.gtn = function gtn (num) {
88780 return this.cmpn(num) === 1;
88781 };
88782
88783 BN.prototype.gt = function gt (num) {
88784 return this.cmp(num) === 1;
88785 };
88786
88787 BN.prototype.gten = function gten (num) {
88788 return this.cmpn(num) >= 0;
88789 };
88790
88791 BN.prototype.gte = function gte (num) {
88792 return this.cmp(num) >= 0;
88793 };
88794
88795 BN.prototype.ltn = function ltn (num) {
88796 return this.cmpn(num) === -1;
88797 };
88798
88799 BN.prototype.lt = function lt (num) {
88800 return this.cmp(num) === -1;
88801 };
88802
88803 BN.prototype.lten = function lten (num) {
88804 return this.cmpn(num) <= 0;
88805 };
88806
88807 BN.prototype.lte = function lte (num) {
88808 return this.cmp(num) <= 0;
88809 };
88810
88811 BN.prototype.eqn = function eqn (num) {
88812 return this.cmpn(num) === 0;
88813 };
88814
88815 BN.prototype.eq = function eq (num) {
88816 return this.cmp(num) === 0;
88817 };
88818
88819 //
88820 // A reduce context, could be using montgomery or something better, depending
88821 // on the `m` itself.
88822 //
88823 BN.red = function red (num) {
88824 return new Red(num);
88825 };
88826
88827 BN.prototype.toRed = function toRed (ctx) {
88828 assert(!this.red, 'Already a number in reduction context');
88829 assert(this.negative === 0, 'red works only with positives');
88830 return ctx.convertTo(this)._forceRed(ctx);
88831 };
88832
88833 BN.prototype.fromRed = function fromRed () {
88834 assert(this.red, 'fromRed works only with numbers in reduction context');
88835 return this.red.convertFrom(this);
88836 };
88837
88838 BN.prototype._forceRed = function _forceRed (ctx) {
88839 this.red = ctx;
88840 return this;
88841 };
88842
88843 BN.prototype.forceRed = function forceRed (ctx) {
88844 assert(!this.red, 'Already a number in reduction context');
88845 return this._forceRed(ctx);
88846 };
88847
88848 BN.prototype.redAdd = function redAdd (num) {
88849 assert(this.red, 'redAdd works only with red numbers');
88850 return this.red.add(this, num);
88851 };
88852
88853 BN.prototype.redIAdd = function redIAdd (num) {
88854 assert(this.red, 'redIAdd works only with red numbers');
88855 return this.red.iadd(this, num);
88856 };
88857
88858 BN.prototype.redSub = function redSub (num) {
88859 assert(this.red, 'redSub works only with red numbers');
88860 return this.red.sub(this, num);
88861 };
88862
88863 BN.prototype.redISub = function redISub (num) {
88864 assert(this.red, 'redISub works only with red numbers');
88865 return this.red.isub(this, num);
88866 };
88867
88868 BN.prototype.redShl = function redShl (num) {
88869 assert(this.red, 'redShl works only with red numbers');
88870 return this.red.shl(this, num);
88871 };
88872
88873 BN.prototype.redMul = function redMul (num) {
88874 assert(this.red, 'redMul works only with red numbers');
88875 this.red._verify2(this, num);
88876 return this.red.mul(this, num);
88877 };
88878
88879 BN.prototype.redIMul = function redIMul (num) {
88880 assert(this.red, 'redMul works only with red numbers');
88881 this.red._verify2(this, num);
88882 return this.red.imul(this, num);
88883 };
88884
88885 BN.prototype.redSqr = function redSqr () {
88886 assert(this.red, 'redSqr works only with red numbers');
88887 this.red._verify1(this);
88888 return this.red.sqr(this);
88889 };
88890
88891 BN.prototype.redISqr = function redISqr () {
88892 assert(this.red, 'redISqr works only with red numbers');
88893 this.red._verify1(this);
88894 return this.red.isqr(this);
88895 };
88896
88897 // Square root over p
88898 BN.prototype.redSqrt = function redSqrt () {
88899 assert(this.red, 'redSqrt works only with red numbers');
88900 this.red._verify1(this);
88901 return this.red.sqrt(this);
88902 };
88903
88904 BN.prototype.redInvm = function redInvm () {
88905 assert(this.red, 'redInvm works only with red numbers');
88906 this.red._verify1(this);
88907 return this.red.invm(this);
88908 };
88909
88910 // Return negative clone of `this` % `red modulo`
88911 BN.prototype.redNeg = function redNeg () {
88912 assert(this.red, 'redNeg works only with red numbers');
88913 this.red._verify1(this);
88914 return this.red.neg(this);
88915 };
88916
88917 BN.prototype.redPow = function redPow (num) {
88918 assert(this.red && !num.red, 'redPow(normalNum)');
88919 this.red._verify1(this);
88920 return this.red.pow(this, num);
88921 };
88922
88923 // Prime numbers with efficient reduction
88924 var primes = {
88925 k256: null,
88926 p224: null,
88927 p192: null,
88928 p25519: null
88929 };
88930
88931 // Pseudo-Mersenne prime
88932 function MPrime (name, p) {
88933 // P = 2 ^ N - K
88934 this.name = name;
88935 this.p = new BN(p, 16);
88936 this.n = this.p.bitLength();
88937 this.k = new BN(1).iushln(this.n).isub(this.p);
88938
88939 this.tmp = this._tmp();
88940 }
88941
88942 MPrime.prototype._tmp = function _tmp () {
88943 var tmp = new BN(null);
88944 tmp.words = new Array(Math.ceil(this.n / 13));
88945 return tmp;
88946 };
88947
88948 MPrime.prototype.ireduce = function ireduce (num) {
88949 // Assumes that `num` is less than `P^2`
88950 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
88951 var r = num;
88952 var rlen;
88953
88954 do {
88955 this.split(r, this.tmp);
88956 r = this.imulK(r);
88957 r = r.iadd(this.tmp);
88958 rlen = r.bitLength();
88959 } while (rlen > this.n);
88960
88961 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
88962 if (cmp === 0) {
88963 r.words[0] = 0;
88964 r.length = 1;
88965 } else if (cmp > 0) {
88966 r.isub(this.p);
88967 } else {
88968 r.strip();
88969 }
88970
88971 return r;
88972 };
88973
88974 MPrime.prototype.split = function split (input, out) {
88975 input.iushrn(this.n, 0, out);
88976 };
88977
88978 MPrime.prototype.imulK = function imulK (num) {
88979 return num.imul(this.k);
88980 };
88981
88982 function K256 () {
88983 MPrime.call(
88984 this,
88985 'k256',
88986 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
88987 }
88988 inherits(K256, MPrime);
88989
88990 K256.prototype.split = function split (input, output) {
88991 // 256 = 9 * 26 + 22
88992 var mask = 0x3fffff;
88993
88994 var outLen = Math.min(input.length, 9);
88995 for (var i = 0; i < outLen; i++) {
88996 output.words[i] = input.words[i];
88997 }
88998 output.length = outLen;
88999
89000 if (input.length <= 9) {
89001 input.words[0] = 0;
89002 input.length = 1;
89003 return;
89004 }
89005
89006 // Shift by 9 limbs
89007 var prev = input.words[9];
89008 output.words[output.length++] = prev & mask;
89009
89010 for (i = 10; i < input.length; i++) {
89011 var next = input.words[i] | 0;
89012 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
89013 prev = next;
89014 }
89015 prev >>>= 22;
89016 input.words[i - 10] = prev;
89017 if (prev === 0 && input.length > 10) {
89018 input.length -= 10;
89019 } else {
89020 input.length -= 9;
89021 }
89022 };
89023
89024 K256.prototype.imulK = function imulK (num) {
89025 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
89026 num.words[num.length] = 0;
89027 num.words[num.length + 1] = 0;
89028 num.length += 2;
89029
89030 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
89031 var lo = 0;
89032 for (var i = 0; i < num.length; i++) {
89033 var w = num.words[i] | 0;
89034 lo += w * 0x3d1;
89035 num.words[i] = lo & 0x3ffffff;
89036 lo = w * 0x40 + ((lo / 0x4000000) | 0);
89037 }
89038
89039 // Fast length reduction
89040 if (num.words[num.length - 1] === 0) {
89041 num.length--;
89042 if (num.words[num.length - 1] === 0) {
89043 num.length--;
89044 }
89045 }
89046 return num;
89047 };
89048
89049 function P224 () {
89050 MPrime.call(
89051 this,
89052 'p224',
89053 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
89054 }
89055 inherits(P224, MPrime);
89056
89057 function P192 () {
89058 MPrime.call(
89059 this,
89060 'p192',
89061 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
89062 }
89063 inherits(P192, MPrime);
89064
89065 function P25519 () {
89066 // 2 ^ 255 - 19
89067 MPrime.call(
89068 this,
89069 '25519',
89070 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
89071 }
89072 inherits(P25519, MPrime);
89073
89074 P25519.prototype.imulK = function imulK (num) {
89075 // K = 0x13
89076 var carry = 0;
89077 for (var i = 0; i < num.length; i++) {
89078 var hi = (num.words[i] | 0) * 0x13 + carry;
89079 var lo = hi & 0x3ffffff;
89080 hi >>>= 26;
89081
89082 num.words[i] = lo;
89083 carry = hi;
89084 }
89085 if (carry !== 0) {
89086 num.words[num.length++] = carry;
89087 }
89088 return num;
89089 };
89090
89091 // Exported mostly for testing purposes, use plain name instead
89092 BN._prime = function prime (name) {
89093 // Cached version of prime
89094 if (primes[name]) return primes[name];
89095
89096 var prime;
89097 if (name === 'k256') {
89098 prime = new K256();
89099 } else if (name === 'p224') {
89100 prime = new P224();
89101 } else if (name === 'p192') {
89102 prime = new P192();
89103 } else if (name === 'p25519') {
89104 prime = new P25519();
89105 } else {
89106 throw new Error('Unknown prime ' + name);
89107 }
89108 primes[name] = prime;
89109
89110 return prime;
89111 };
89112
89113 //
89114 // Base reduction engine
89115 //
89116 function Red (m) {
89117 if (typeof m === 'string') {
89118 var prime = BN._prime(m);
89119 this.m = prime.p;
89120 this.prime = prime;
89121 } else {
89122 assert(m.gtn(1), 'modulus must be greater than 1');
89123 this.m = m;
89124 this.prime = null;
89125 }
89126 }
89127
89128 Red.prototype._verify1 = function _verify1 (a) {
89129 assert(a.negative === 0, 'red works only with positives');
89130 assert(a.red, 'red works only with red numbers');
89131 };
89132
89133 Red.prototype._verify2 = function _verify2 (a, b) {
89134 assert((a.negative | b.negative) === 0, 'red works only with positives');
89135 assert(a.red && a.red === b.red,
89136 'red works only with red numbers');
89137 };
89138
89139 Red.prototype.imod = function imod (a) {
89140 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
89141 return a.umod(this.m)._forceRed(this);
89142 };
89143
89144 Red.prototype.neg = function neg (a) {
89145 if (a.isZero()) {
89146 return a.clone();
89147 }
89148
89149 return this.m.sub(a)._forceRed(this);
89150 };
89151
89152 Red.prototype.add = function add (a, b) {
89153 this._verify2(a, b);
89154
89155 var res = a.add(b);
89156 if (res.cmp(this.m) >= 0) {
89157 res.isub(this.m);
89158 }
89159 return res._forceRed(this);
89160 };
89161
89162 Red.prototype.iadd = function iadd (a, b) {
89163 this._verify2(a, b);
89164
89165 var res = a.iadd(b);
89166 if (res.cmp(this.m) >= 0) {
89167 res.isub(this.m);
89168 }
89169 return res;
89170 };
89171
89172 Red.prototype.sub = function sub (a, b) {
89173 this._verify2(a, b);
89174
89175 var res = a.sub(b);
89176 if (res.cmpn(0) < 0) {
89177 res.iadd(this.m);
89178 }
89179 return res._forceRed(this);
89180 };
89181
89182 Red.prototype.isub = function isub (a, b) {
89183 this._verify2(a, b);
89184
89185 var res = a.isub(b);
89186 if (res.cmpn(0) < 0) {
89187 res.iadd(this.m);
89188 }
89189 return res;
89190 };
89191
89192 Red.prototype.shl = function shl (a, num) {
89193 this._verify1(a);
89194 return this.imod(a.ushln(num));
89195 };
89196
89197 Red.prototype.imul = function imul (a, b) {
89198 this._verify2(a, b);
89199 return this.imod(a.imul(b));
89200 };
89201
89202 Red.prototype.mul = function mul (a, b) {
89203 this._verify2(a, b);
89204 return this.imod(a.mul(b));
89205 };
89206
89207 Red.prototype.isqr = function isqr (a) {
89208 return this.imul(a, a.clone());
89209 };
89210
89211 Red.prototype.sqr = function sqr (a) {
89212 return this.mul(a, a);
89213 };
89214
89215 Red.prototype.sqrt = function sqrt (a) {
89216 if (a.isZero()) return a.clone();
89217
89218 var mod3 = this.m.andln(3);
89219 assert(mod3 % 2 === 1);
89220
89221 // Fast case
89222 if (mod3 === 3) {
89223 var pow = this.m.add(new BN(1)).iushrn(2);
89224 return this.pow(a, pow);
89225 }
89226
89227 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
89228 //
89229 // Find Q and S, that Q * 2 ^ S = (P - 1)
89230 var q = this.m.subn(1);
89231 var s = 0;
89232 while (!q.isZero() && q.andln(1) === 0) {
89233 s++;
89234 q.iushrn(1);
89235 }
89236 assert(!q.isZero());
89237
89238 var one = new BN(1).toRed(this);
89239 var nOne = one.redNeg();
89240
89241 // Find quadratic non-residue
89242 // NOTE: Max is such because of generalized Riemann hypothesis.
89243 var lpow = this.m.subn(1).iushrn(1);
89244 var z = this.m.bitLength();
89245 z = new BN(2 * z * z).toRed(this);
89246
89247 while (this.pow(z, lpow).cmp(nOne) !== 0) {
89248 z.redIAdd(nOne);
89249 }
89250
89251 var c = this.pow(z, q);
89252 var r = this.pow(a, q.addn(1).iushrn(1));
89253 var t = this.pow(a, q);
89254 var m = s;
89255 while (t.cmp(one) !== 0) {
89256 var tmp = t;
89257 for (var i = 0; tmp.cmp(one) !== 0; i++) {
89258 tmp = tmp.redSqr();
89259 }
89260 assert(i < m);
89261 var b = this.pow(c, new BN(1).iushln(m - i - 1));
89262
89263 r = r.redMul(b);
89264 c = b.redSqr();
89265 t = t.redMul(c);
89266 m = i;
89267 }
89268
89269 return r;
89270 };
89271
89272 Red.prototype.invm = function invm (a) {
89273 var inv = a._invmp(this.m);
89274 if (inv.negative !== 0) {
89275 inv.negative = 0;
89276 return this.imod(inv).redNeg();
89277 } else {
89278 return this.imod(inv);
89279 }
89280 };
89281
89282 Red.prototype.pow = function pow (a, num) {
89283 if (num.isZero()) return new BN(1);
89284 if (num.cmpn(1) === 0) return a.clone();
89285
89286 var windowSize = 4;
89287 var wnd = new Array(1 << windowSize);
89288 wnd[0] = new BN(1).toRed(this);
89289 wnd[1] = a;
89290 for (var i = 2; i < wnd.length; i++) {
89291 wnd[i] = this.mul(wnd[i - 1], a);
89292 }
89293
89294 var res = wnd[0];
89295 var current = 0;
89296 var currentLen = 0;
89297 var start = num.bitLength() % 26;
89298 if (start === 0) {
89299 start = 26;
89300 }
89301
89302 for (i = num.length - 1; i >= 0; i--) {
89303 var word = num.words[i];
89304 for (var j = start - 1; j >= 0; j--) {
89305 var bit = (word >> j) & 1;
89306 if (res !== wnd[0]) {
89307 res = this.sqr(res);
89308 }
89309
89310 if (bit === 0 && current === 0) {
89311 currentLen = 0;
89312 continue;
89313 }
89314
89315 current <<= 1;
89316 current |= bit;
89317 currentLen++;
89318 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
89319
89320 res = this.mul(res, wnd[current]);
89321 currentLen = 0;
89322 current = 0;
89323 }
89324 start = 26;
89325 }
89326
89327 return res;
89328 };
89329
89330 Red.prototype.convertTo = function convertTo (num) {
89331 var r = num.umod(this.m);
89332
89333 return r === num ? r.clone() : r;
89334 };
89335
89336 Red.prototype.convertFrom = function convertFrom (num) {
89337 var res = num.clone();
89338 res.red = null;
89339 return res;
89340 };
89341
89342 //
89343 // Montgomery method engine
89344 //
89345
89346 BN.mont = function mont (num) {
89347 return new Mont(num);
89348 };
89349
89350 function Mont (m) {
89351 Red.call(this, m);
89352
89353 this.shift = this.m.bitLength();
89354 if (this.shift % 26 !== 0) {
89355 this.shift += 26 - (this.shift % 26);
89356 }
89357
89358 this.r = new BN(1).iushln(this.shift);
89359 this.r2 = this.imod(this.r.sqr());
89360 this.rinv = this.r._invmp(this.m);
89361
89362 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
89363 this.minv = this.minv.umod(this.r);
89364 this.minv = this.r.sub(this.minv);
89365 }
89366 inherits(Mont, Red);
89367
89368 Mont.prototype.convertTo = function convertTo (num) {
89369 return this.imod(num.ushln(this.shift));
89370 };
89371
89372 Mont.prototype.convertFrom = function convertFrom (num) {
89373 var r = this.imod(num.mul(this.rinv));
89374 r.red = null;
89375 return r;
89376 };
89377
89378 Mont.prototype.imul = function imul (a, b) {
89379 if (a.isZero() || b.isZero()) {
89380 a.words[0] = 0;
89381 a.length = 1;
89382 return a;
89383 }
89384
89385 var t = a.imul(b);
89386 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
89387 var u = t.isub(c).iushrn(this.shift);
89388 var res = u;
89389
89390 if (u.cmp(this.m) >= 0) {
89391 res = u.isub(this.m);
89392 } else if (u.cmpn(0) < 0) {
89393 res = u.iadd(this.m);
89394 }
89395
89396 return res._forceRed(this);
89397 };
89398
89399 Mont.prototype.mul = function mul (a, b) {
89400 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
89401
89402 var t = a.mul(b);
89403 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
89404 var u = t.isub(c).iushrn(this.shift);
89405 var res = u;
89406 if (u.cmp(this.m) >= 0) {
89407 res = u.isub(this.m);
89408 } else if (u.cmpn(0) < 0) {
89409 res = u.iadd(this.m);
89410 }
89411
89412 return res._forceRed(this);
89413 };
89414
89415 Mont.prototype.invm = function invm (a) {
89416 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
89417 var res = this.imod(a._invmp(this.m).mul(this.r2));
89418 return res._forceRed(this);
89419 };
89420 })(typeof module === 'undefined' || module, this);
89421
89422 },{}],34:[function(require,module,exports){
89423 var r;
89424
89425 module.exports = function rand(len) {
89426 if (!r)
89427 r = new Rand(null);
89428
89429 return r.generate(len);
89430 };
89431
89432 function Rand(rand) {
89433 this.rand = rand;
89434 }
89435 module.exports.Rand = Rand;
89436
89437 Rand.prototype.generate = function generate(len) {
89438 return this._rand(len);
89439 };
89440
89441 if (typeof self === 'object') {
89442 if (self.crypto && self.crypto.getRandomValues) {
89443 // Modern browsers
89444 Rand.prototype._rand = function _rand(n) {
89445 var arr = new Uint8Array(n);
89446 self.crypto.getRandomValues(arr);
89447 return arr;
89448 };
89449 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
89450 // IE
89451 Rand.prototype._rand = function _rand(n) {
89452 var arr = new Uint8Array(n);
89453 self.msCrypto.getRandomValues(arr);
89454 return arr;
89455 };
89456 } else {
89457 // Old junk
89458 Rand.prototype._rand = function() {
89459 throw new Error('Not implemented yet');
89460 };
89461 }
89462 } else {
89463 // Node.js or Web worker with no crypto support
89464 try {
89465 var crypto = require('crypto');
89466
89467 Rand.prototype._rand = function _rand(n) {
89468 return crypto.randomBytes(n);
89469 };
89470 } catch (e) {
89471 // Emulate crypto API using randy
89472 Rand.prototype._rand = function _rand(n) {
89473 var res = new Uint8Array(n);
89474 for (var i = 0; i < res.length; i++)
89475 res[i] = this.rand.getByte();
89476 return res;
89477 };
89478 }
89479 }
89480
89481 },{"crypto":3}],35:[function(require,module,exports){
89482 (function (Buffer){
89483 var Transform = require('stream').Transform
89484 var inherits = require('inherits')
89485 var StringDecoder = require('string_decoder').StringDecoder
89486 module.exports = CipherBase
89487 inherits(CipherBase, Transform)
89488 function CipherBase (hashMode) {
89489 Transform.call(this)
89490 this.hashMode = typeof hashMode === 'string'
89491 if (this.hashMode) {
89492 this[hashMode] = this._finalOrDigest
89493 } else {
89494 this.final = this._finalOrDigest
89495 }
89496 this._decoder = null
89497 this._encoding = null
89498 }
89499 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
89500 if (typeof data === 'string') {
89501 data = new Buffer(data, inputEnc)
89502 }
89503 var outData = this._update(data)
89504 if (this.hashMode) {
89505 return this
89506 }
89507 if (outputEnc) {
89508 outData = this._toString(outData, outputEnc)
89509 }
89510 return outData
89511 }
89512
89513 CipherBase.prototype.setAutoPadding = function () {}
89514
89515 CipherBase.prototype.getAuthTag = function () {
89516 throw new Error('trying to get auth tag in unsupported state')
89517 }
89518
89519 CipherBase.prototype.setAuthTag = function () {
89520 throw new Error('trying to set auth tag in unsupported state')
89521 }
89522
89523 CipherBase.prototype.setAAD = function () {
89524 throw new Error('trying to set aad in unsupported state')
89525 }
89526
89527 CipherBase.prototype._transform = function (data, _, next) {
89528 var err
89529 try {
89530 if (this.hashMode) {
89531 this._update(data)
89532 } else {
89533 this.push(this._update(data))
89534 }
89535 } catch (e) {
89536 err = e
89537 } finally {
89538 next(err)
89539 }
89540 }
89541 CipherBase.prototype._flush = function (done) {
89542 var err
89543 try {
89544 this.push(this._final())
89545 } catch (e) {
89546 err = e
89547 } finally {
89548 done(err)
89549 }
89550 }
89551 CipherBase.prototype._finalOrDigest = function (outputEnc) {
89552 var outData = this._final() || new Buffer('')
89553 if (outputEnc) {
89554 outData = this._toString(outData, outputEnc, true)
89555 }
89556 return outData
89557 }
89558
89559 CipherBase.prototype._toString = function (value, enc, fin) {
89560 if (!this._decoder) {
89561 this._decoder = new StringDecoder(enc)
89562 this._encoding = enc
89563 }
89564 if (this._encoding !== enc) {
89565 throw new Error('can\'t switch encodings')
89566 }
89567 var out = this._decoder.write(value)
89568 if (fin) {
89569 out += this._decoder.end()
89570 }
89571 return out
89572 }
89573
89574 }).call(this,require("buffer").Buffer)
89575 },{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
89576 (function (Buffer){
89577 'use strict';
89578 var inherits = require('inherits')
89579 var md5 = require('./md5')
89580 var rmd160 = require('ripemd160')
89581 var sha = require('sha.js')
89582
89583 var Base = require('cipher-base')
89584
89585 function HashNoConstructor(hash) {
89586 Base.call(this, 'digest')
89587
89588 this._hash = hash
89589 this.buffers = []
89590 }
89591
89592 inherits(HashNoConstructor, Base)
89593
89594 HashNoConstructor.prototype._update = function (data) {
89595 this.buffers.push(data)
89596 }
89597
89598 HashNoConstructor.prototype._final = function () {
89599 var buf = Buffer.concat(this.buffers)
89600 var r = this._hash(buf)
89601 this.buffers = null
89602
89603 return r
89604 }
89605
89606 function Hash(hash) {
89607 Base.call(this, 'digest')
89608
89609 this._hash = hash
89610 }
89611
89612 inherits(Hash, Base)
89613
89614 Hash.prototype._update = function (data) {
89615 this._hash.update(data)
89616 }
89617
89618 Hash.prototype._final = function () {
89619 return this._hash.digest()
89620 }
89621
89622 module.exports = function createHash (alg) {
89623 alg = alg.toLowerCase()
89624 if ('md5' === alg) return new HashNoConstructor(md5)
89625 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
89626
89627 return new Hash(sha(alg))
89628 }
89629
89630 }).call(this,require("buffer").Buffer)
89631 },{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
89632 (function (Buffer){
89633 'use strict';
89634 var intSize = 4;
89635 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
89636 var chrsz = 8;
89637
89638 function toArray(buf, bigEndian) {
89639 if ((buf.length % intSize) !== 0) {
89640 var len = buf.length + (intSize - (buf.length % intSize));
89641 buf = Buffer.concat([buf, zeroBuffer], len);
89642 }
89643
89644 var arr = [];
89645 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
89646 for (var i = 0; i < buf.length; i += intSize) {
89647 arr.push(fn.call(buf, i));
89648 }
89649 return arr;
89650 }
89651
89652 function toBuffer(arr, size, bigEndian) {
89653 var buf = new Buffer(size);
89654 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
89655 for (var i = 0; i < arr.length; i++) {
89656 fn.call(buf, arr[i], i * 4, true);
89657 }
89658 return buf;
89659 }
89660
89661 function hash(buf, fn, hashSize, bigEndian) {
89662 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
89663 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
89664 return toBuffer(arr, hashSize, bigEndian);
89665 }
89666 exports.hash = hash;
89667 }).call(this,require("buffer").Buffer)
89668 },{"buffer":5}],38:[function(require,module,exports){
89669 'use strict';
89670 /*
89671 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
89672 * Digest Algorithm, as defined in RFC 1321.
89673 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
89674 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
89675 * Distributed under the BSD License
89676 * See http://pajhome.org.uk/crypt/md5 for more info.
89677 */
89678
89679 var helpers = require('./helpers');
89680
89681 /*
89682 * Calculate the MD5 of an array of little-endian words, and a bit length
89683 */
89684 function core_md5(x, len)
89685 {
89686 /* append padding */
89687 x[len >> 5] |= 0x80 << ((len) % 32);
89688 x[(((len + 64) >>> 9) << 4) + 14] = len;
89689
89690 var a = 1732584193;
89691 var b = -271733879;
89692 var c = -1732584194;
89693 var d = 271733878;
89694
89695 for(var i = 0; i < x.length; i += 16)
89696 {
89697 var olda = a;
89698 var oldb = b;
89699 var oldc = c;
89700 var oldd = d;
89701
89702 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
89703 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
89704 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
89705 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
89706 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
89707 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
89708 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
89709 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
89710 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
89711 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
89712 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
89713 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
89714 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
89715 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
89716 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
89717 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
89718
89719 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
89720 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
89721 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
89722 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
89723 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
89724 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
89725 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
89726 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
89727 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
89728 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
89729 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
89730 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
89731 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
89732 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
89733 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
89734 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
89735
89736 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
89737 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
89738 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
89739 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
89740 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
89741 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
89742 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
89743 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
89744 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
89745 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
89746 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
89747 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
89748 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
89749 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
89750 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
89751 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
89752
89753 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
89754 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
89755 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
89756 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
89757 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
89758 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
89759 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
89760 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
89761 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
89762 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
89763 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
89764 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
89765 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
89766 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
89767 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
89768 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
89769
89770 a = safe_add(a, olda);
89771 b = safe_add(b, oldb);
89772 c = safe_add(c, oldc);
89773 d = safe_add(d, oldd);
89774 }
89775 return Array(a, b, c, d);
89776
89777 }
89778
89779 /*
89780 * These functions implement the four basic operations the algorithm uses.
89781 */
89782 function md5_cmn(q, a, b, x, s, t)
89783 {
89784 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
89785 }
89786 function md5_ff(a, b, c, d, x, s, t)
89787 {
89788 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
89789 }
89790 function md5_gg(a, b, c, d, x, s, t)
89791 {
89792 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
89793 }
89794 function md5_hh(a, b, c, d, x, s, t)
89795 {
89796 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
89797 }
89798 function md5_ii(a, b, c, d, x, s, t)
89799 {
89800 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
89801 }
89802
89803 /*
89804 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
89805 * to work around bugs in some JS interpreters.
89806 */
89807 function safe_add(x, y)
89808 {
89809 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
89810 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
89811 return (msw << 16) | (lsw & 0xFFFF);
89812 }
89813
89814 /*
89815 * Bitwise rotate a 32-bit number to the left.
89816 */
89817 function bit_rol(num, cnt)
89818 {
89819 return (num << cnt) | (num >>> (32 - cnt));
89820 }
89821
89822 module.exports = function md5(buf) {
89823 return helpers.hash(buf, core_md5, 16);
89824 };
89825 },{"./helpers":37}],39:[function(require,module,exports){
89826 'use strict';
89827
89828 var elliptic = exports;
89829
89830 elliptic.version = require('../package.json').version;
89831 elliptic.utils = require('./elliptic/utils');
89832 elliptic.rand = require('brorand');
89833 elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
89834 elliptic.curve = require('./elliptic/curve');
89835 elliptic.curves = require('./elliptic/curves');
89836
89837 // Protocols
89838 elliptic.ec = require('./elliptic/ec');
89839 elliptic.eddsa = require('./elliptic/eddsa');
89840
89841 },{"../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){
89842 'use strict';
89843
89844 var BN = require('bn.js');
89845 var elliptic = require('../../elliptic');
89846 var utils = elliptic.utils;
89847 var getNAF = utils.getNAF;
89848 var getJSF = utils.getJSF;
89849 var assert = utils.assert;
89850
89851 function BaseCurve(type, conf) {
89852 this.type = type;
89853 this.p = new BN(conf.p, 16);
89854
89855 // Use Montgomery, when there is no fast reduction for the prime
89856 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
89857
89858 // Useful for many curves
89859 this.zero = new BN(0).toRed(this.red);
89860 this.one = new BN(1).toRed(this.red);
89861 this.two = new BN(2).toRed(this.red);
89862
89863 // Curve configuration, optional
89864 this.n = conf.n && new BN(conf.n, 16);
89865 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
89866
89867 // Temporary arrays
89868 this._wnafT1 = new Array(4);
89869 this._wnafT2 = new Array(4);
89870 this._wnafT3 = new Array(4);
89871 this._wnafT4 = new Array(4);
89872
89873 // Generalized Greg Maxwell's trick
89874 var adjustCount = this.n && this.p.div(this.n);
89875 if (!adjustCount || adjustCount.cmpn(100) > 0) {
89876 this.redN = null;
89877 } else {
89878 this._maxwellTrick = true;
89879 this.redN = this.n.toRed(this.red);
89880 }
89881 }
89882 module.exports = BaseCurve;
89883
89884 BaseCurve.prototype.point = function point() {
89885 throw new Error('Not implemented');
89886 };
89887
89888 BaseCurve.prototype.validate = function validate() {
89889 throw new Error('Not implemented');
89890 };
89891
89892 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
89893 assert(p.precomputed);
89894 var doubles = p._getDoubles();
89895
89896 var naf = getNAF(k, 1);
89897 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
89898 I /= 3;
89899
89900 // Translate into more windowed form
89901 var repr = [];
89902 for (var j = 0; j < naf.length; j += doubles.step) {
89903 var nafW = 0;
89904 for (var k = j + doubles.step - 1; k >= j; k--)
89905 nafW = (nafW << 1) + naf[k];
89906 repr.push(nafW);
89907 }
89908
89909 var a = this.jpoint(null, null, null);
89910 var b = this.jpoint(null, null, null);
89911 for (var i = I; i > 0; i--) {
89912 for (var j = 0; j < repr.length; j++) {
89913 var nafW = repr[j];
89914 if (nafW === i)
89915 b = b.mixedAdd(doubles.points[j]);
89916 else if (nafW === -i)
89917 b = b.mixedAdd(doubles.points[j].neg());
89918 }
89919 a = a.add(b);
89920 }
89921 return a.toP();
89922 };
89923
89924 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
89925 var w = 4;
89926
89927 // Precompute window
89928 var nafPoints = p._getNAFPoints(w);
89929 w = nafPoints.wnd;
89930 var wnd = nafPoints.points;
89931
89932 // Get NAF form
89933 var naf = getNAF(k, w);
89934
89935 // Add `this`*(N+1) for every w-NAF index
89936 var acc = this.jpoint(null, null, null);
89937 for (var i = naf.length - 1; i >= 0; i--) {
89938 // Count zeroes
89939 for (var k = 0; i >= 0 && naf[i] === 0; i--)
89940 k++;
89941 if (i >= 0)
89942 k++;
89943 acc = acc.dblp(k);
89944
89945 if (i < 0)
89946 break;
89947 var z = naf[i];
89948 assert(z !== 0);
89949 if (p.type === 'affine') {
89950 // J +- P
89951 if (z > 0)
89952 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
89953 else
89954 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
89955 } else {
89956 // J +- J
89957 if (z > 0)
89958 acc = acc.add(wnd[(z - 1) >> 1]);
89959 else
89960 acc = acc.add(wnd[(-z - 1) >> 1].neg());
89961 }
89962 }
89963 return p.type === 'affine' ? acc.toP() : acc;
89964 };
89965
89966 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
89967 points,
89968 coeffs,
89969 len,
89970 jacobianResult) {
89971 var wndWidth = this._wnafT1;
89972 var wnd = this._wnafT2;
89973 var naf = this._wnafT3;
89974
89975 // Fill all arrays
89976 var max = 0;
89977 for (var i = 0; i < len; i++) {
89978 var p = points[i];
89979 var nafPoints = p._getNAFPoints(defW);
89980 wndWidth[i] = nafPoints.wnd;
89981 wnd[i] = nafPoints.points;
89982 }
89983
89984 // Comb small window NAFs
89985 for (var i = len - 1; i >= 1; i -= 2) {
89986 var a = i - 1;
89987 var b = i;
89988 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
89989 naf[a] = getNAF(coeffs[a], wndWidth[a]);
89990 naf[b] = getNAF(coeffs[b], wndWidth[b]);
89991 max = Math.max(naf[a].length, max);
89992 max = Math.max(naf[b].length, max);
89993 continue;
89994 }
89995
89996 var comb = [
89997 points[a], /* 1 */
89998 null, /* 3 */
89999 null, /* 5 */
90000 points[b] /* 7 */
90001 ];
90002
90003 // Try to avoid Projective points, if possible
90004 if (points[a].y.cmp(points[b].y) === 0) {
90005 comb[1] = points[a].add(points[b]);
90006 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
90007 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
90008 comb[1] = points[a].toJ().mixedAdd(points[b]);
90009 comb[2] = points[a].add(points[b].neg());
90010 } else {
90011 comb[1] = points[a].toJ().mixedAdd(points[b]);
90012 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
90013 }
90014
90015 var index = [
90016 -3, /* -1 -1 */
90017 -1, /* -1 0 */
90018 -5, /* -1 1 */
90019 -7, /* 0 -1 */
90020 0, /* 0 0 */
90021 7, /* 0 1 */
90022 5, /* 1 -1 */
90023 1, /* 1 0 */
90024 3 /* 1 1 */
90025 ];
90026
90027 var jsf = getJSF(coeffs[a], coeffs[b]);
90028 max = Math.max(jsf[0].length, max);
90029 naf[a] = new Array(max);
90030 naf[b] = new Array(max);
90031 for (var j = 0; j < max; j++) {
90032 var ja = jsf[0][j] | 0;
90033 var jb = jsf[1][j] | 0;
90034
90035 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
90036 naf[b][j] = 0;
90037 wnd[a] = comb;
90038 }
90039 }
90040
90041 var acc = this.jpoint(null, null, null);
90042 var tmp = this._wnafT4;
90043 for (var i = max; i >= 0; i--) {
90044 var k = 0;
90045
90046 while (i >= 0) {
90047 var zero = true;
90048 for (var j = 0; j < len; j++) {
90049 tmp[j] = naf[j][i] | 0;
90050 if (tmp[j] !== 0)
90051 zero = false;
90052 }
90053 if (!zero)
90054 break;
90055 k++;
90056 i--;
90057 }
90058 if (i >= 0)
90059 k++;
90060 acc = acc.dblp(k);
90061 if (i < 0)
90062 break;
90063
90064 for (var j = 0; j < len; j++) {
90065 var z = tmp[j];
90066 var p;
90067 if (z === 0)
90068 continue;
90069 else if (z > 0)
90070 p = wnd[j][(z - 1) >> 1];
90071 else if (z < 0)
90072 p = wnd[j][(-z - 1) >> 1].neg();
90073
90074 if (p.type === 'affine')
90075 acc = acc.mixedAdd(p);
90076 else
90077 acc = acc.add(p);
90078 }
90079 }
90080 // Zeroify references
90081 for (var i = 0; i < len; i++)
90082 wnd[i] = null;
90083
90084 if (jacobianResult)
90085 return acc;
90086 else
90087 return acc.toP();
90088 };
90089
90090 function BasePoint(curve, type) {
90091 this.curve = curve;
90092 this.type = type;
90093 this.precomputed = null;
90094 }
90095 BaseCurve.BasePoint = BasePoint;
90096
90097 BasePoint.prototype.eq = function eq(/*other*/) {
90098 throw new Error('Not implemented');
90099 };
90100
90101 BasePoint.prototype.validate = function validate() {
90102 return this.curve.validate(this);
90103 };
90104
90105 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
90106 bytes = utils.toArray(bytes, enc);
90107
90108 var len = this.p.byteLength();
90109
90110 // uncompressed, hybrid-odd, hybrid-even
90111 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
90112 bytes.length - 1 === 2 * len) {
90113 if (bytes[0] === 0x06)
90114 assert(bytes[bytes.length - 1] % 2 === 0);
90115 else if (bytes[0] === 0x07)
90116 assert(bytes[bytes.length - 1] % 2 === 1);
90117
90118 var res = this.point(bytes.slice(1, 1 + len),
90119 bytes.slice(1 + len, 1 + 2 * len));
90120
90121 return res;
90122 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
90123 bytes.length - 1 === len) {
90124 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
90125 }
90126 throw new Error('Unknown point format');
90127 };
90128
90129 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
90130 return this.encode(enc, true);
90131 };
90132
90133 BasePoint.prototype._encode = function _encode(compact) {
90134 var len = this.curve.p.byteLength();
90135 var x = this.getX().toArray('be', len);
90136
90137 if (compact)
90138 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
90139
90140 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
90141 };
90142
90143 BasePoint.prototype.encode = function encode(enc, compact) {
90144 return utils.encode(this._encode(compact), enc);
90145 };
90146
90147 BasePoint.prototype.precompute = function precompute(power) {
90148 if (this.precomputed)
90149 return this;
90150
90151 var precomputed = {
90152 doubles: null,
90153 naf: null,
90154 beta: null
90155 };
90156 precomputed.naf = this._getNAFPoints(8);
90157 precomputed.doubles = this._getDoubles(4, power);
90158 precomputed.beta = this._getBeta();
90159 this.precomputed = precomputed;
90160
90161 return this;
90162 };
90163
90164 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
90165 if (!this.precomputed)
90166 return false;
90167
90168 var doubles = this.precomputed.doubles;
90169 if (!doubles)
90170 return false;
90171
90172 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
90173 };
90174
90175 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
90176 if (this.precomputed && this.precomputed.doubles)
90177 return this.precomputed.doubles;
90178
90179 var doubles = [ this ];
90180 var acc = this;
90181 for (var i = 0; i < power; i += step) {
90182 for (var j = 0; j < step; j++)
90183 acc = acc.dbl();
90184 doubles.push(acc);
90185 }
90186 return {
90187 step: step,
90188 points: doubles
90189 };
90190 };
90191
90192 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
90193 if (this.precomputed && this.precomputed.naf)
90194 return this.precomputed.naf;
90195
90196 var res = [ this ];
90197 var max = (1 << wnd) - 1;
90198 var dbl = max === 1 ? null : this.dbl();
90199 for (var i = 1; i < max; i++)
90200 res[i] = res[i - 1].add(dbl);
90201 return {
90202 wnd: wnd,
90203 points: res
90204 };
90205 };
90206
90207 BasePoint.prototype._getBeta = function _getBeta() {
90208 return null;
90209 };
90210
90211 BasePoint.prototype.dblp = function dblp(k) {
90212 var r = this;
90213 for (var i = 0; i < k; i++)
90214 r = r.dbl();
90215 return r;
90216 };
90217
90218 },{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
90219 'use strict';
90220
90221 var curve = require('../curve');
90222 var elliptic = require('../../elliptic');
90223 var BN = require('bn.js');
90224 var inherits = require('inherits');
90225 var Base = curve.base;
90226
90227 var assert = elliptic.utils.assert;
90228
90229 function EdwardsCurve(conf) {
90230 // NOTE: Important as we are creating point in Base.call()
90231 this.twisted = (conf.a | 0) !== 1;
90232 this.mOneA = this.twisted && (conf.a | 0) === -1;
90233 this.extended = this.mOneA;
90234
90235 Base.call(this, 'edwards', conf);
90236
90237 this.a = new BN(conf.a, 16).umod(this.red.m);
90238 this.a = this.a.toRed(this.red);
90239 this.c = new BN(conf.c, 16).toRed(this.red);
90240 this.c2 = this.c.redSqr();
90241 this.d = new BN(conf.d, 16).toRed(this.red);
90242 this.dd = this.d.redAdd(this.d);
90243
90244 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
90245 this.oneC = (conf.c | 0) === 1;
90246 }
90247 inherits(EdwardsCurve, Base);
90248 module.exports = EdwardsCurve;
90249
90250 EdwardsCurve.prototype._mulA = function _mulA(num) {
90251 if (this.mOneA)
90252 return num.redNeg();
90253 else
90254 return this.a.redMul(num);
90255 };
90256
90257 EdwardsCurve.prototype._mulC = function _mulC(num) {
90258 if (this.oneC)
90259 return num;
90260 else
90261 return this.c.redMul(num);
90262 };
90263
90264 // Just for compatibility with Short curve
90265 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
90266 return this.point(x, y, z, t);
90267 };
90268
90269 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
90270 x = new BN(x, 16);
90271 if (!x.red)
90272 x = x.toRed(this.red);
90273
90274 var x2 = x.redSqr();
90275 var rhs = this.c2.redSub(this.a.redMul(x2));
90276 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
90277
90278 var y2 = rhs.redMul(lhs.redInvm());
90279 var y = y2.redSqrt();
90280 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
90281 throw new Error('invalid point');
90282
90283 var isOdd = y.fromRed().isOdd();
90284 if (odd && !isOdd || !odd && isOdd)
90285 y = y.redNeg();
90286
90287 return this.point(x, y);
90288 };
90289
90290 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
90291 y = new BN(y, 16);
90292 if (!y.red)
90293 y = y.toRed(this.red);
90294
90295 // x^2 = (y^2 - 1) / (d y^2 + 1)
90296 var y2 = y.redSqr();
90297 var lhs = y2.redSub(this.one);
90298 var rhs = y2.redMul(this.d).redAdd(this.one);
90299 var x2 = lhs.redMul(rhs.redInvm());
90300
90301 if (x2.cmp(this.zero) === 0) {
90302 if (odd)
90303 throw new Error('invalid point');
90304 else
90305 return this.point(this.zero, y);
90306 }
90307
90308 var x = x2.redSqrt();
90309 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
90310 throw new Error('invalid point');
90311
90312 if (x.isOdd() !== odd)
90313 x = x.redNeg();
90314
90315 return this.point(x, y);
90316 };
90317
90318 EdwardsCurve.prototype.validate = function validate(point) {
90319 if (point.isInfinity())
90320 return true;
90321
90322 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
90323 point.normalize();
90324
90325 var x2 = point.x.redSqr();
90326 var y2 = point.y.redSqr();
90327 var lhs = x2.redMul(this.a).redAdd(y2);
90328 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
90329
90330 return lhs.cmp(rhs) === 0;
90331 };
90332
90333 function Point(curve, x, y, z, t) {
90334 Base.BasePoint.call(this, curve, 'projective');
90335 if (x === null && y === null && z === null) {
90336 this.x = this.curve.zero;
90337 this.y = this.curve.one;
90338 this.z = this.curve.one;
90339 this.t = this.curve.zero;
90340 this.zOne = true;
90341 } else {
90342 this.x = new BN(x, 16);
90343 this.y = new BN(y, 16);
90344 this.z = z ? new BN(z, 16) : this.curve.one;
90345 this.t = t && new BN(t, 16);
90346 if (!this.x.red)
90347 this.x = this.x.toRed(this.curve.red);
90348 if (!this.y.red)
90349 this.y = this.y.toRed(this.curve.red);
90350 if (!this.z.red)
90351 this.z = this.z.toRed(this.curve.red);
90352 if (this.t && !this.t.red)
90353 this.t = this.t.toRed(this.curve.red);
90354 this.zOne = this.z === this.curve.one;
90355
90356 // Use extended coordinates
90357 if (this.curve.extended && !this.t) {
90358 this.t = this.x.redMul(this.y);
90359 if (!this.zOne)
90360 this.t = this.t.redMul(this.z.redInvm());
90361 }
90362 }
90363 }
90364 inherits(Point, Base.BasePoint);
90365
90366 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
90367 return Point.fromJSON(this, obj);
90368 };
90369
90370 EdwardsCurve.prototype.point = function point(x, y, z, t) {
90371 return new Point(this, x, y, z, t);
90372 };
90373
90374 Point.fromJSON = function fromJSON(curve, obj) {
90375 return new Point(curve, obj[0], obj[1], obj[2]);
90376 };
90377
90378 Point.prototype.inspect = function inspect() {
90379 if (this.isInfinity())
90380 return '<EC Point Infinity>';
90381 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
90382 ' y: ' + this.y.fromRed().toString(16, 2) +
90383 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
90384 };
90385
90386 Point.prototype.isInfinity = function isInfinity() {
90387 // XXX This code assumes that zero is always zero in red
90388 return this.x.cmpn(0) === 0 &&
90389 this.y.cmp(this.z) === 0;
90390 };
90391
90392 Point.prototype._extDbl = function _extDbl() {
90393 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
90394 // #doubling-dbl-2008-hwcd
90395 // 4M + 4S
90396
90397 // A = X1^2
90398 var a = this.x.redSqr();
90399 // B = Y1^2
90400 var b = this.y.redSqr();
90401 // C = 2 * Z1^2
90402 var c = this.z.redSqr();
90403 c = c.redIAdd(c);
90404 // D = a * A
90405 var d = this.curve._mulA(a);
90406 // E = (X1 + Y1)^2 - A - B
90407 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
90408 // G = D + B
90409 var g = d.redAdd(b);
90410 // F = G - C
90411 var f = g.redSub(c);
90412 // H = D - B
90413 var h = d.redSub(b);
90414 // X3 = E * F
90415 var nx = e.redMul(f);
90416 // Y3 = G * H
90417 var ny = g.redMul(h);
90418 // T3 = E * H
90419 var nt = e.redMul(h);
90420 // Z3 = F * G
90421 var nz = f.redMul(g);
90422 return this.curve.point(nx, ny, nz, nt);
90423 };
90424
90425 Point.prototype._projDbl = function _projDbl() {
90426 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
90427 // #doubling-dbl-2008-bbjlp
90428 // #doubling-dbl-2007-bl
90429 // and others
90430 // Generally 3M + 4S or 2M + 4S
90431
90432 // B = (X1 + Y1)^2
90433 var b = this.x.redAdd(this.y).redSqr();
90434 // C = X1^2
90435 var c = this.x.redSqr();
90436 // D = Y1^2
90437 var d = this.y.redSqr();
90438
90439 var nx;
90440 var ny;
90441 var nz;
90442 if (this.curve.twisted) {
90443 // E = a * C
90444 var e = this.curve._mulA(c);
90445 // F = E + D
90446 var f = e.redAdd(d);
90447 if (this.zOne) {
90448 // X3 = (B - C - D) * (F - 2)
90449 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
90450 // Y3 = F * (E - D)
90451 ny = f.redMul(e.redSub(d));
90452 // Z3 = F^2 - 2 * F
90453 nz = f.redSqr().redSub(f).redSub(f);
90454 } else {
90455 // H = Z1^2
90456 var h = this.z.redSqr();
90457 // J = F - 2 * H
90458 var j = f.redSub(h).redISub(h);
90459 // X3 = (B-C-D)*J
90460 nx = b.redSub(c).redISub(d).redMul(j);
90461 // Y3 = F * (E - D)
90462 ny = f.redMul(e.redSub(d));
90463 // Z3 = F * J
90464 nz = f.redMul(j);
90465 }
90466 } else {
90467 // E = C + D
90468 var e = c.redAdd(d);
90469 // H = (c * Z1)^2
90470 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
90471 // J = E - 2 * H
90472 var j = e.redSub(h).redSub(h);
90473 // X3 = c * (B - E) * J
90474 nx = this.curve._mulC(b.redISub(e)).redMul(j);
90475 // Y3 = c * E * (C - D)
90476 ny = this.curve._mulC(e).redMul(c.redISub(d));
90477 // Z3 = E * J
90478 nz = e.redMul(j);
90479 }
90480 return this.curve.point(nx, ny, nz);
90481 };
90482
90483 Point.prototype.dbl = function dbl() {
90484 if (this.isInfinity())
90485 return this;
90486
90487 // Double in extended coordinates
90488 if (this.curve.extended)
90489 return this._extDbl();
90490 else
90491 return this._projDbl();
90492 };
90493
90494 Point.prototype._extAdd = function _extAdd(p) {
90495 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
90496 // #addition-add-2008-hwcd-3
90497 // 8M
90498
90499 // A = (Y1 - X1) * (Y2 - X2)
90500 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
90501 // B = (Y1 + X1) * (Y2 + X2)
90502 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
90503 // C = T1 * k * T2
90504 var c = this.t.redMul(this.curve.dd).redMul(p.t);
90505 // D = Z1 * 2 * Z2
90506 var d = this.z.redMul(p.z.redAdd(p.z));
90507 // E = B - A
90508 var e = b.redSub(a);
90509 // F = D - C
90510 var f = d.redSub(c);
90511 // G = D + C
90512 var g = d.redAdd(c);
90513 // H = B + A
90514 var h = b.redAdd(a);
90515 // X3 = E * F
90516 var nx = e.redMul(f);
90517 // Y3 = G * H
90518 var ny = g.redMul(h);
90519 // T3 = E * H
90520 var nt = e.redMul(h);
90521 // Z3 = F * G
90522 var nz = f.redMul(g);
90523 return this.curve.point(nx, ny, nz, nt);
90524 };
90525
90526 Point.prototype._projAdd = function _projAdd(p) {
90527 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
90528 // #addition-add-2008-bbjlp
90529 // #addition-add-2007-bl
90530 // 10M + 1S
90531
90532 // A = Z1 * Z2
90533 var a = this.z.redMul(p.z);
90534 // B = A^2
90535 var b = a.redSqr();
90536 // C = X1 * X2
90537 var c = this.x.redMul(p.x);
90538 // D = Y1 * Y2
90539 var d = this.y.redMul(p.y);
90540 // E = d * C * D
90541 var e = this.curve.d.redMul(c).redMul(d);
90542 // F = B - E
90543 var f = b.redSub(e);
90544 // G = B + E
90545 var g = b.redAdd(e);
90546 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
90547 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
90548 var nx = a.redMul(f).redMul(tmp);
90549 var ny;
90550 var nz;
90551 if (this.curve.twisted) {
90552 // Y3 = A * G * (D - a * C)
90553 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
90554 // Z3 = F * G
90555 nz = f.redMul(g);
90556 } else {
90557 // Y3 = A * G * (D - C)
90558 ny = a.redMul(g).redMul(d.redSub(c));
90559 // Z3 = c * F * G
90560 nz = this.curve._mulC(f).redMul(g);
90561 }
90562 return this.curve.point(nx, ny, nz);
90563 };
90564
90565 Point.prototype.add = function add(p) {
90566 if (this.isInfinity())
90567 return p;
90568 if (p.isInfinity())
90569 return this;
90570
90571 if (this.curve.extended)
90572 return this._extAdd(p);
90573 else
90574 return this._projAdd(p);
90575 };
90576
90577 Point.prototype.mul = function mul(k) {
90578 if (this._hasDoubles(k))
90579 return this.curve._fixedNafMul(this, k);
90580 else
90581 return this.curve._wnafMul(this, k);
90582 };
90583
90584 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
90585 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
90586 };
90587
90588 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
90589 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
90590 };
90591
90592 Point.prototype.normalize = function normalize() {
90593 if (this.zOne)
90594 return this;
90595
90596 // Normalize coordinates
90597 var zi = this.z.redInvm();
90598 this.x = this.x.redMul(zi);
90599 this.y = this.y.redMul(zi);
90600 if (this.t)
90601 this.t = this.t.redMul(zi);
90602 this.z = this.curve.one;
90603 this.zOne = true;
90604 return this;
90605 };
90606
90607 Point.prototype.neg = function neg() {
90608 return this.curve.point(this.x.redNeg(),
90609 this.y,
90610 this.z,
90611 this.t && this.t.redNeg());
90612 };
90613
90614 Point.prototype.getX = function getX() {
90615 this.normalize();
90616 return this.x.fromRed();
90617 };
90618
90619 Point.prototype.getY = function getY() {
90620 this.normalize();
90621 return this.y.fromRed();
90622 };
90623
90624 Point.prototype.eq = function eq(other) {
90625 return this === other ||
90626 this.getX().cmp(other.getX()) === 0 &&
90627 this.getY().cmp(other.getY()) === 0;
90628 };
90629
90630 Point.prototype.eqXToP = function eqXToP(x) {
90631 var rx = x.toRed(this.curve.red).redMul(this.z);
90632 if (this.x.cmp(rx) === 0)
90633 return true;
90634
90635 var xc = x.clone();
90636 var t = this.curve.redN.redMul(this.z);
90637 for (;;) {
90638 xc.iadd(this.curve.n);
90639 if (xc.cmp(this.curve.p) >= 0)
90640 return false;
90641
90642 rx.redIAdd(t);
90643 if (this.x.cmp(rx) === 0)
90644 return true;
90645 }
90646 return false;
90647 };
90648
90649 // Compatibility with BaseCurve
90650 Point.prototype.toP = Point.prototype.normalize;
90651 Point.prototype.mixedAdd = Point.prototype.add;
90652
90653 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
90654 'use strict';
90655
90656 var curve = exports;
90657
90658 curve.base = require('./base');
90659 curve.short = require('./short');
90660 curve.mont = require('./mont');
90661 curve.edwards = require('./edwards');
90662
90663 },{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
90664 'use strict';
90665
90666 var curve = require('../curve');
90667 var BN = require('bn.js');
90668 var inherits = require('inherits');
90669 var Base = curve.base;
90670
90671 var elliptic = require('../../elliptic');
90672 var utils = elliptic.utils;
90673
90674 function MontCurve(conf) {
90675 Base.call(this, 'mont', conf);
90676
90677 this.a = new BN(conf.a, 16).toRed(this.red);
90678 this.b = new BN(conf.b, 16).toRed(this.red);
90679 this.i4 = new BN(4).toRed(this.red).redInvm();
90680 this.two = new BN(2).toRed(this.red);
90681 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
90682 }
90683 inherits(MontCurve, Base);
90684 module.exports = MontCurve;
90685
90686 MontCurve.prototype.validate = function validate(point) {
90687 var x = point.normalize().x;
90688 var x2 = x.redSqr();
90689 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
90690 var y = rhs.redSqrt();
90691
90692 return y.redSqr().cmp(rhs) === 0;
90693 };
90694
90695 function Point(curve, x, z) {
90696 Base.BasePoint.call(this, curve, 'projective');
90697 if (x === null && z === null) {
90698 this.x = this.curve.one;
90699 this.z = this.curve.zero;
90700 } else {
90701 this.x = new BN(x, 16);
90702 this.z = new BN(z, 16);
90703 if (!this.x.red)
90704 this.x = this.x.toRed(this.curve.red);
90705 if (!this.z.red)
90706 this.z = this.z.toRed(this.curve.red);
90707 }
90708 }
90709 inherits(Point, Base.BasePoint);
90710
90711 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
90712 return this.point(utils.toArray(bytes, enc), 1);
90713 };
90714
90715 MontCurve.prototype.point = function point(x, z) {
90716 return new Point(this, x, z);
90717 };
90718
90719 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
90720 return Point.fromJSON(this, obj);
90721 };
90722
90723 Point.prototype.precompute = function precompute() {
90724 // No-op
90725 };
90726
90727 Point.prototype._encode = function _encode() {
90728 return this.getX().toArray('be', this.curve.p.byteLength());
90729 };
90730
90731 Point.fromJSON = function fromJSON(curve, obj) {
90732 return new Point(curve, obj[0], obj[1] || curve.one);
90733 };
90734
90735 Point.prototype.inspect = function inspect() {
90736 if (this.isInfinity())
90737 return '<EC Point Infinity>';
90738 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
90739 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
90740 };
90741
90742 Point.prototype.isInfinity = function isInfinity() {
90743 // XXX This code assumes that zero is always zero in red
90744 return this.z.cmpn(0) === 0;
90745 };
90746
90747 Point.prototype.dbl = function dbl() {
90748 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
90749 // 2M + 2S + 4A
90750
90751 // A = X1 + Z1
90752 var a = this.x.redAdd(this.z);
90753 // AA = A^2
90754 var aa = a.redSqr();
90755 // B = X1 - Z1
90756 var b = this.x.redSub(this.z);
90757 // BB = B^2
90758 var bb = b.redSqr();
90759 // C = AA - BB
90760 var c = aa.redSub(bb);
90761 // X3 = AA * BB
90762 var nx = aa.redMul(bb);
90763 // Z3 = C * (BB + A24 * C)
90764 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
90765 return this.curve.point(nx, nz);
90766 };
90767
90768 Point.prototype.add = function add() {
90769 throw new Error('Not supported on Montgomery curve');
90770 };
90771
90772 Point.prototype.diffAdd = function diffAdd(p, diff) {
90773 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
90774 // 4M + 2S + 6A
90775
90776 // A = X2 + Z2
90777 var a = this.x.redAdd(this.z);
90778 // B = X2 - Z2
90779 var b = this.x.redSub(this.z);
90780 // C = X3 + Z3
90781 var c = p.x.redAdd(p.z);
90782 // D = X3 - Z3
90783 var d = p.x.redSub(p.z);
90784 // DA = D * A
90785 var da = d.redMul(a);
90786 // CB = C * B
90787 var cb = c.redMul(b);
90788 // X5 = Z1 * (DA + CB)^2
90789 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
90790 // Z5 = X1 * (DA - CB)^2
90791 var nz = diff.x.redMul(da.redISub(cb).redSqr());
90792 return this.curve.point(nx, nz);
90793 };
90794
90795 Point.prototype.mul = function mul(k) {
90796 var t = k.clone();
90797 var a = this; // (N / 2) * Q + Q
90798 var b = this.curve.point(null, null); // (N / 2) * Q
90799 var c = this; // Q
90800
90801 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
90802 bits.push(t.andln(1));
90803
90804 for (var i = bits.length - 1; i >= 0; i--) {
90805 if (bits[i] === 0) {
90806 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
90807 a = a.diffAdd(b, c);
90808 // N * Q = 2 * ((N / 2) * Q + Q))
90809 b = b.dbl();
90810 } else {
90811 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
90812 b = a.diffAdd(b, c);
90813 // N * Q + Q = 2 * ((N / 2) * Q + Q)
90814 a = a.dbl();
90815 }
90816 }
90817 return b;
90818 };
90819
90820 Point.prototype.mulAdd = function mulAdd() {
90821 throw new Error('Not supported on Montgomery curve');
90822 };
90823
90824 Point.prototype.jumlAdd = function jumlAdd() {
90825 throw new Error('Not supported on Montgomery curve');
90826 };
90827
90828 Point.prototype.eq = function eq(other) {
90829 return this.getX().cmp(other.getX()) === 0;
90830 };
90831
90832 Point.prototype.normalize = function normalize() {
90833 this.x = this.x.redMul(this.z.redInvm());
90834 this.z = this.curve.one;
90835 return this;
90836 };
90837
90838 Point.prototype.getX = function getX() {
90839 // Normalize coordinates
90840 this.normalize();
90841
90842 return this.x.fromRed();
90843 };
90844
90845 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
90846 'use strict';
90847
90848 var curve = require('../curve');
90849 var elliptic = require('../../elliptic');
90850 var BN = require('bn.js');
90851 var inherits = require('inherits');
90852 var Base = curve.base;
90853
90854 var assert = elliptic.utils.assert;
90855
90856 function ShortCurve(conf) {
90857 Base.call(this, 'short', conf);
90858
90859 this.a = new BN(conf.a, 16).toRed(this.red);
90860 this.b = new BN(conf.b, 16).toRed(this.red);
90861 this.tinv = this.two.redInvm();
90862
90863 this.zeroA = this.a.fromRed().cmpn(0) === 0;
90864 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
90865
90866 // If the curve is endomorphic, precalculate beta and lambda
90867 this.endo = this._getEndomorphism(conf);
90868 this._endoWnafT1 = new Array(4);
90869 this._endoWnafT2 = new Array(4);
90870 }
90871 inherits(ShortCurve, Base);
90872 module.exports = ShortCurve;
90873
90874 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
90875 // No efficient endomorphism
90876 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
90877 return;
90878
90879 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
90880 var beta;
90881 var lambda;
90882 if (conf.beta) {
90883 beta = new BN(conf.beta, 16).toRed(this.red);
90884 } else {
90885 var betas = this._getEndoRoots(this.p);
90886 // Choose the smallest beta
90887 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
90888 beta = beta.toRed(this.red);
90889 }
90890 if (conf.lambda) {
90891 lambda = new BN(conf.lambda, 16);
90892 } else {
90893 // Choose the lambda that is matching selected beta
90894 var lambdas = this._getEndoRoots(this.n);
90895 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
90896 lambda = lambdas[0];
90897 } else {
90898 lambda = lambdas[1];
90899 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
90900 }
90901 }
90902
90903 // Get basis vectors, used for balanced length-two representation
90904 var basis;
90905 if (conf.basis) {
90906 basis = conf.basis.map(function(vec) {
90907 return {
90908 a: new BN(vec.a, 16),
90909 b: new BN(vec.b, 16)
90910 };
90911 });
90912 } else {
90913 basis = this._getEndoBasis(lambda);
90914 }
90915
90916 return {
90917 beta: beta,
90918 lambda: lambda,
90919 basis: basis
90920 };
90921 };
90922
90923 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
90924 // Find roots of for x^2 + x + 1 in F
90925 // Root = (-1 +- Sqrt(-3)) / 2
90926 //
90927 var red = num === this.p ? this.red : BN.mont(num);
90928 var tinv = new BN(2).toRed(red).redInvm();
90929 var ntinv = tinv.redNeg();
90930
90931 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
90932
90933 var l1 = ntinv.redAdd(s).fromRed();
90934 var l2 = ntinv.redSub(s).fromRed();
90935 return [ l1, l2 ];
90936 };
90937
90938 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
90939 // aprxSqrt >= sqrt(this.n)
90940 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
90941
90942 // 3.74
90943 // Run EGCD, until r(L + 1) < aprxSqrt
90944 var u = lambda;
90945 var v = this.n.clone();
90946 var x1 = new BN(1);
90947 var y1 = new BN(0);
90948 var x2 = new BN(0);
90949 var y2 = new BN(1);
90950
90951 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
90952 var a0;
90953 var b0;
90954 // First vector
90955 var a1;
90956 var b1;
90957 // Second vector
90958 var a2;
90959 var b2;
90960
90961 var prevR;
90962 var i = 0;
90963 var r;
90964 var x;
90965 while (u.cmpn(0) !== 0) {
90966 var q = v.div(u);
90967 r = v.sub(q.mul(u));
90968 x = x2.sub(q.mul(x1));
90969 var y = y2.sub(q.mul(y1));
90970
90971 if (!a1 && r.cmp(aprxSqrt) < 0) {
90972 a0 = prevR.neg();
90973 b0 = x1;
90974 a1 = r.neg();
90975 b1 = x;
90976 } else if (a1 && ++i === 2) {
90977 break;
90978 }
90979 prevR = r;
90980
90981 v = u;
90982 u = r;
90983 x2 = x1;
90984 x1 = x;
90985 y2 = y1;
90986 y1 = y;
90987 }
90988 a2 = r.neg();
90989 b2 = x;
90990
90991 var len1 = a1.sqr().add(b1.sqr());
90992 var len2 = a2.sqr().add(b2.sqr());
90993 if (len2.cmp(len1) >= 0) {
90994 a2 = a0;
90995 b2 = b0;
90996 }
90997
90998 // Normalize signs
90999 if (a1.negative) {
91000 a1 = a1.neg();
91001 b1 = b1.neg();
91002 }
91003 if (a2.negative) {
91004 a2 = a2.neg();
91005 b2 = b2.neg();
91006 }
91007
91008 return [
91009 { a: a1, b: b1 },
91010 { a: a2, b: b2 }
91011 ];
91012 };
91013
91014 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
91015 var basis = this.endo.basis;
91016 var v1 = basis[0];
91017 var v2 = basis[1];
91018
91019 var c1 = v2.b.mul(k).divRound(this.n);
91020 var c2 = v1.b.neg().mul(k).divRound(this.n);
91021
91022 var p1 = c1.mul(v1.a);
91023 var p2 = c2.mul(v2.a);
91024 var q1 = c1.mul(v1.b);
91025 var q2 = c2.mul(v2.b);
91026
91027 // Calculate answer
91028 var k1 = k.sub(p1).sub(p2);
91029 var k2 = q1.add(q2).neg();
91030 return { k1: k1, k2: k2 };
91031 };
91032
91033 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
91034 x = new BN(x, 16);
91035 if (!x.red)
91036 x = x.toRed(this.red);
91037
91038 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
91039 var y = y2.redSqrt();
91040 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
91041 throw new Error('invalid point');
91042
91043 // XXX Is there any way to tell if the number is odd without converting it
91044 // to non-red form?
91045 var isOdd = y.fromRed().isOdd();
91046 if (odd && !isOdd || !odd && isOdd)
91047 y = y.redNeg();
91048
91049 return this.point(x, y);
91050 };
91051
91052 ShortCurve.prototype.validate = function validate(point) {
91053 if (point.inf)
91054 return true;
91055
91056 var x = point.x;
91057 var y = point.y;
91058
91059 var ax = this.a.redMul(x);
91060 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
91061 return y.redSqr().redISub(rhs).cmpn(0) === 0;
91062 };
91063
91064 ShortCurve.prototype._endoWnafMulAdd =
91065 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
91066 var npoints = this._endoWnafT1;
91067 var ncoeffs = this._endoWnafT2;
91068 for (var i = 0; i < points.length; i++) {
91069 var split = this._endoSplit(coeffs[i]);
91070 var p = points[i];
91071 var beta = p._getBeta();
91072
91073 if (split.k1.negative) {
91074 split.k1.ineg();
91075 p = p.neg(true);
91076 }
91077 if (split.k2.negative) {
91078 split.k2.ineg();
91079 beta = beta.neg(true);
91080 }
91081
91082 npoints[i * 2] = p;
91083 npoints[i * 2 + 1] = beta;
91084 ncoeffs[i * 2] = split.k1;
91085 ncoeffs[i * 2 + 1] = split.k2;
91086 }
91087 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
91088
91089 // Clean-up references to points and coefficients
91090 for (var j = 0; j < i * 2; j++) {
91091 npoints[j] = null;
91092 ncoeffs[j] = null;
91093 }
91094 return res;
91095 };
91096
91097 function Point(curve, x, y, isRed) {
91098 Base.BasePoint.call(this, curve, 'affine');
91099 if (x === null && y === null) {
91100 this.x = null;
91101 this.y = null;
91102 this.inf = true;
91103 } else {
91104 this.x = new BN(x, 16);
91105 this.y = new BN(y, 16);
91106 // Force redgomery representation when loading from JSON
91107 if (isRed) {
91108 this.x.forceRed(this.curve.red);
91109 this.y.forceRed(this.curve.red);
91110 }
91111 if (!this.x.red)
91112 this.x = this.x.toRed(this.curve.red);
91113 if (!this.y.red)
91114 this.y = this.y.toRed(this.curve.red);
91115 this.inf = false;
91116 }
91117 }
91118 inherits(Point, Base.BasePoint);
91119
91120 ShortCurve.prototype.point = function point(x, y, isRed) {
91121 return new Point(this, x, y, isRed);
91122 };
91123
91124 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
91125 return Point.fromJSON(this, obj, red);
91126 };
91127
91128 Point.prototype._getBeta = function _getBeta() {
91129 if (!this.curve.endo)
91130 return;
91131
91132 var pre = this.precomputed;
91133 if (pre && pre.beta)
91134 return pre.beta;
91135
91136 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
91137 if (pre) {
91138 var curve = this.curve;
91139 var endoMul = function(p) {
91140 return curve.point(p.x.redMul(curve.endo.beta), p.y);
91141 };
91142 pre.beta = beta;
91143 beta.precomputed = {
91144 beta: null,
91145 naf: pre.naf && {
91146 wnd: pre.naf.wnd,
91147 points: pre.naf.points.map(endoMul)
91148 },
91149 doubles: pre.doubles && {
91150 step: pre.doubles.step,
91151 points: pre.doubles.points.map(endoMul)
91152 }
91153 };
91154 }
91155 return beta;
91156 };
91157
91158 Point.prototype.toJSON = function toJSON() {
91159 if (!this.precomputed)
91160 return [ this.x, this.y ];
91161
91162 return [ this.x, this.y, this.precomputed && {
91163 doubles: this.precomputed.doubles && {
91164 step: this.precomputed.doubles.step,
91165 points: this.precomputed.doubles.points.slice(1)
91166 },
91167 naf: this.precomputed.naf && {
91168 wnd: this.precomputed.naf.wnd,
91169 points: this.precomputed.naf.points.slice(1)
91170 }
91171 } ];
91172 };
91173
91174 Point.fromJSON = function fromJSON(curve, obj, red) {
91175 if (typeof obj === 'string')
91176 obj = JSON.parse(obj);
91177 var res = curve.point(obj[0], obj[1], red);
91178 if (!obj[2])
91179 return res;
91180
91181 function obj2point(obj) {
91182 return curve.point(obj[0], obj[1], red);
91183 }
91184
91185 var pre = obj[2];
91186 res.precomputed = {
91187 beta: null,
91188 doubles: pre.doubles && {
91189 step: pre.doubles.step,
91190 points: [ res ].concat(pre.doubles.points.map(obj2point))
91191 },
91192 naf: pre.naf && {
91193 wnd: pre.naf.wnd,
91194 points: [ res ].concat(pre.naf.points.map(obj2point))
91195 }
91196 };
91197 return res;
91198 };
91199
91200 Point.prototype.inspect = function inspect() {
91201 if (this.isInfinity())
91202 return '<EC Point Infinity>';
91203 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
91204 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
91205 };
91206
91207 Point.prototype.isInfinity = function isInfinity() {
91208 return this.inf;
91209 };
91210
91211 Point.prototype.add = function add(p) {
91212 // O + P = P
91213 if (this.inf)
91214 return p;
91215
91216 // P + O = P
91217 if (p.inf)
91218 return this;
91219
91220 // P + P = 2P
91221 if (this.eq(p))
91222 return this.dbl();
91223
91224 // P + (-P) = O
91225 if (this.neg().eq(p))
91226 return this.curve.point(null, null);
91227
91228 // P + Q = O
91229 if (this.x.cmp(p.x) === 0)
91230 return this.curve.point(null, null);
91231
91232 var c = this.y.redSub(p.y);
91233 if (c.cmpn(0) !== 0)
91234 c = c.redMul(this.x.redSub(p.x).redInvm());
91235 var nx = c.redSqr().redISub(this.x).redISub(p.x);
91236 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
91237 return this.curve.point(nx, ny);
91238 };
91239
91240 Point.prototype.dbl = function dbl() {
91241 if (this.inf)
91242 return this;
91243
91244 // 2P = O
91245 var ys1 = this.y.redAdd(this.y);
91246 if (ys1.cmpn(0) === 0)
91247 return this.curve.point(null, null);
91248
91249 var a = this.curve.a;
91250
91251 var x2 = this.x.redSqr();
91252 var dyinv = ys1.redInvm();
91253 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
91254
91255 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
91256 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
91257 return this.curve.point(nx, ny);
91258 };
91259
91260 Point.prototype.getX = function getX() {
91261 return this.x.fromRed();
91262 };
91263
91264 Point.prototype.getY = function getY() {
91265 return this.y.fromRed();
91266 };
91267
91268 Point.prototype.mul = function mul(k) {
91269 k = new BN(k, 16);
91270
91271 if (this._hasDoubles(k))
91272 return this.curve._fixedNafMul(this, k);
91273 else if (this.curve.endo)
91274 return this.curve._endoWnafMulAdd([ this ], [ k ]);
91275 else
91276 return this.curve._wnafMul(this, k);
91277 };
91278
91279 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
91280 var points = [ this, p2 ];
91281 var coeffs = [ k1, k2 ];
91282 if (this.curve.endo)
91283 return this.curve._endoWnafMulAdd(points, coeffs);
91284 else
91285 return this.curve._wnafMulAdd(1, points, coeffs, 2);
91286 };
91287
91288 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
91289 var points = [ this, p2 ];
91290 var coeffs = [ k1, k2 ];
91291 if (this.curve.endo)
91292 return this.curve._endoWnafMulAdd(points, coeffs, true);
91293 else
91294 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
91295 };
91296
91297 Point.prototype.eq = function eq(p) {
91298 return this === p ||
91299 this.inf === p.inf &&
91300 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
91301 };
91302
91303 Point.prototype.neg = function neg(_precompute) {
91304 if (this.inf)
91305 return this;
91306
91307 var res = this.curve.point(this.x, this.y.redNeg());
91308 if (_precompute && this.precomputed) {
91309 var pre = this.precomputed;
91310 var negate = function(p) {
91311 return p.neg();
91312 };
91313 res.precomputed = {
91314 naf: pre.naf && {
91315 wnd: pre.naf.wnd,
91316 points: pre.naf.points.map(negate)
91317 },
91318 doubles: pre.doubles && {
91319 step: pre.doubles.step,
91320 points: pre.doubles.points.map(negate)
91321 }
91322 };
91323 }
91324 return res;
91325 };
91326
91327 Point.prototype.toJ = function toJ() {
91328 if (this.inf)
91329 return this.curve.jpoint(null, null, null);
91330
91331 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
91332 return res;
91333 };
91334
91335 function JPoint(curve, x, y, z) {
91336 Base.BasePoint.call(this, curve, 'jacobian');
91337 if (x === null && y === null && z === null) {
91338 this.x = this.curve.one;
91339 this.y = this.curve.one;
91340 this.z = new BN(0);
91341 } else {
91342 this.x = new BN(x, 16);
91343 this.y = new BN(y, 16);
91344 this.z = new BN(z, 16);
91345 }
91346 if (!this.x.red)
91347 this.x = this.x.toRed(this.curve.red);
91348 if (!this.y.red)
91349 this.y = this.y.toRed(this.curve.red);
91350 if (!this.z.red)
91351 this.z = this.z.toRed(this.curve.red);
91352
91353 this.zOne = this.z === this.curve.one;
91354 }
91355 inherits(JPoint, Base.BasePoint);
91356
91357 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
91358 return new JPoint(this, x, y, z);
91359 };
91360
91361 JPoint.prototype.toP = function toP() {
91362 if (this.isInfinity())
91363 return this.curve.point(null, null);
91364
91365 var zinv = this.z.redInvm();
91366 var zinv2 = zinv.redSqr();
91367 var ax = this.x.redMul(zinv2);
91368 var ay = this.y.redMul(zinv2).redMul(zinv);
91369
91370 return this.curve.point(ax, ay);
91371 };
91372
91373 JPoint.prototype.neg = function neg() {
91374 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
91375 };
91376
91377 JPoint.prototype.add = function add(p) {
91378 // O + P = P
91379 if (this.isInfinity())
91380 return p;
91381
91382 // P + O = P
91383 if (p.isInfinity())
91384 return this;
91385
91386 // 12M + 4S + 7A
91387 var pz2 = p.z.redSqr();
91388 var z2 = this.z.redSqr();
91389 var u1 = this.x.redMul(pz2);
91390 var u2 = p.x.redMul(z2);
91391 var s1 = this.y.redMul(pz2.redMul(p.z));
91392 var s2 = p.y.redMul(z2.redMul(this.z));
91393
91394 var h = u1.redSub(u2);
91395 var r = s1.redSub(s2);
91396 if (h.cmpn(0) === 0) {
91397 if (r.cmpn(0) !== 0)
91398 return this.curve.jpoint(null, null, null);
91399 else
91400 return this.dbl();
91401 }
91402
91403 var h2 = h.redSqr();
91404 var h3 = h2.redMul(h);
91405 var v = u1.redMul(h2);
91406
91407 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
91408 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
91409 var nz = this.z.redMul(p.z).redMul(h);
91410
91411 return this.curve.jpoint(nx, ny, nz);
91412 };
91413
91414 JPoint.prototype.mixedAdd = function mixedAdd(p) {
91415 // O + P = P
91416 if (this.isInfinity())
91417 return p.toJ();
91418
91419 // P + O = P
91420 if (p.isInfinity())
91421 return this;
91422
91423 // 8M + 3S + 7A
91424 var z2 = this.z.redSqr();
91425 var u1 = this.x;
91426 var u2 = p.x.redMul(z2);
91427 var s1 = this.y;
91428 var s2 = p.y.redMul(z2).redMul(this.z);
91429
91430 var h = u1.redSub(u2);
91431 var r = s1.redSub(s2);
91432 if (h.cmpn(0) === 0) {
91433 if (r.cmpn(0) !== 0)
91434 return this.curve.jpoint(null, null, null);
91435 else
91436 return this.dbl();
91437 }
91438
91439 var h2 = h.redSqr();
91440 var h3 = h2.redMul(h);
91441 var v = u1.redMul(h2);
91442
91443 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
91444 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
91445 var nz = this.z.redMul(h);
91446
91447 return this.curve.jpoint(nx, ny, nz);
91448 };
91449
91450 JPoint.prototype.dblp = function dblp(pow) {
91451 if (pow === 0)
91452 return this;
91453 if (this.isInfinity())
91454 return this;
91455 if (!pow)
91456 return this.dbl();
91457
91458 if (this.curve.zeroA || this.curve.threeA) {
91459 var r = this;
91460 for (var i = 0; i < pow; i++)
91461 r = r.dbl();
91462 return r;
91463 }
91464
91465 // 1M + 2S + 1A + N * (4S + 5M + 8A)
91466 // N = 1 => 6M + 6S + 9A
91467 var a = this.curve.a;
91468 var tinv = this.curve.tinv;
91469
91470 var jx = this.x;
91471 var jy = this.y;
91472 var jz = this.z;
91473 var jz4 = jz.redSqr().redSqr();
91474
91475 // Reuse results
91476 var jyd = jy.redAdd(jy);
91477 for (var i = 0; i < pow; i++) {
91478 var jx2 = jx.redSqr();
91479 var jyd2 = jyd.redSqr();
91480 var jyd4 = jyd2.redSqr();
91481 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
91482
91483 var t1 = jx.redMul(jyd2);
91484 var nx = c.redSqr().redISub(t1.redAdd(t1));
91485 var t2 = t1.redISub(nx);
91486 var dny = c.redMul(t2);
91487 dny = dny.redIAdd(dny).redISub(jyd4);
91488 var nz = jyd.redMul(jz);
91489 if (i + 1 < pow)
91490 jz4 = jz4.redMul(jyd4);
91491
91492 jx = nx;
91493 jz = nz;
91494 jyd = dny;
91495 }
91496
91497 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
91498 };
91499
91500 JPoint.prototype.dbl = function dbl() {
91501 if (this.isInfinity())
91502 return this;
91503
91504 if (this.curve.zeroA)
91505 return this._zeroDbl();
91506 else if (this.curve.threeA)
91507 return this._threeDbl();
91508 else
91509 return this._dbl();
91510 };
91511
91512 JPoint.prototype._zeroDbl = function _zeroDbl() {
91513 var nx;
91514 var ny;
91515 var nz;
91516 // Z = 1
91517 if (this.zOne) {
91518 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
91519 // #doubling-mdbl-2007-bl
91520 // 1M + 5S + 14A
91521
91522 // XX = X1^2
91523 var xx = this.x.redSqr();
91524 // YY = Y1^2
91525 var yy = this.y.redSqr();
91526 // YYYY = YY^2
91527 var yyyy = yy.redSqr();
91528 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
91529 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
91530 s = s.redIAdd(s);
91531 // M = 3 * XX + a; a = 0
91532 var m = xx.redAdd(xx).redIAdd(xx);
91533 // T = M ^ 2 - 2*S
91534 var t = m.redSqr().redISub(s).redISub(s);
91535
91536 // 8 * YYYY
91537 var yyyy8 = yyyy.redIAdd(yyyy);
91538 yyyy8 = yyyy8.redIAdd(yyyy8);
91539 yyyy8 = yyyy8.redIAdd(yyyy8);
91540
91541 // X3 = T
91542 nx = t;
91543 // Y3 = M * (S - T) - 8 * YYYY
91544 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
91545 // Z3 = 2*Y1
91546 nz = this.y.redAdd(this.y);
91547 } else {
91548 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
91549 // #doubling-dbl-2009-l
91550 // 2M + 5S + 13A
91551
91552 // A = X1^2
91553 var a = this.x.redSqr();
91554 // B = Y1^2
91555 var b = this.y.redSqr();
91556 // C = B^2
91557 var c = b.redSqr();
91558 // D = 2 * ((X1 + B)^2 - A - C)
91559 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
91560 d = d.redIAdd(d);
91561 // E = 3 * A
91562 var e = a.redAdd(a).redIAdd(a);
91563 // F = E^2
91564 var f = e.redSqr();
91565
91566 // 8 * C
91567 var c8 = c.redIAdd(c);
91568 c8 = c8.redIAdd(c8);
91569 c8 = c8.redIAdd(c8);
91570
91571 // X3 = F - 2 * D
91572 nx = f.redISub(d).redISub(d);
91573 // Y3 = E * (D - X3) - 8 * C
91574 ny = e.redMul(d.redISub(nx)).redISub(c8);
91575 // Z3 = 2 * Y1 * Z1
91576 nz = this.y.redMul(this.z);
91577 nz = nz.redIAdd(nz);
91578 }
91579
91580 return this.curve.jpoint(nx, ny, nz);
91581 };
91582
91583 JPoint.prototype._threeDbl = function _threeDbl() {
91584 var nx;
91585 var ny;
91586 var nz;
91587 // Z = 1
91588 if (this.zOne) {
91589 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
91590 // #doubling-mdbl-2007-bl
91591 // 1M + 5S + 15A
91592
91593 // XX = X1^2
91594 var xx = this.x.redSqr();
91595 // YY = Y1^2
91596 var yy = this.y.redSqr();
91597 // YYYY = YY^2
91598 var yyyy = yy.redSqr();
91599 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
91600 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
91601 s = s.redIAdd(s);
91602 // M = 3 * XX + a
91603 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
91604 // T = M^2 - 2 * S
91605 var t = m.redSqr().redISub(s).redISub(s);
91606 // X3 = T
91607 nx = t;
91608 // Y3 = M * (S - T) - 8 * YYYY
91609 var yyyy8 = yyyy.redIAdd(yyyy);
91610 yyyy8 = yyyy8.redIAdd(yyyy8);
91611 yyyy8 = yyyy8.redIAdd(yyyy8);
91612 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
91613 // Z3 = 2 * Y1
91614 nz = this.y.redAdd(this.y);
91615 } else {
91616 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
91617 // 3M + 5S
91618
91619 // delta = Z1^2
91620 var delta = this.z.redSqr();
91621 // gamma = Y1^2
91622 var gamma = this.y.redSqr();
91623 // beta = X1 * gamma
91624 var beta = this.x.redMul(gamma);
91625 // alpha = 3 * (X1 - delta) * (X1 + delta)
91626 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
91627 alpha = alpha.redAdd(alpha).redIAdd(alpha);
91628 // X3 = alpha^2 - 8 * beta
91629 var beta4 = beta.redIAdd(beta);
91630 beta4 = beta4.redIAdd(beta4);
91631 var beta8 = beta4.redAdd(beta4);
91632 nx = alpha.redSqr().redISub(beta8);
91633 // Z3 = (Y1 + Z1)^2 - gamma - delta
91634 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
91635 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
91636 var ggamma8 = gamma.redSqr();
91637 ggamma8 = ggamma8.redIAdd(ggamma8);
91638 ggamma8 = ggamma8.redIAdd(ggamma8);
91639 ggamma8 = ggamma8.redIAdd(ggamma8);
91640 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
91641 }
91642
91643 return this.curve.jpoint(nx, ny, nz);
91644 };
91645
91646 JPoint.prototype._dbl = function _dbl() {
91647 var a = this.curve.a;
91648
91649 // 4M + 6S + 10A
91650 var jx = this.x;
91651 var jy = this.y;
91652 var jz = this.z;
91653 var jz4 = jz.redSqr().redSqr();
91654
91655 var jx2 = jx.redSqr();
91656 var jy2 = jy.redSqr();
91657
91658 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
91659
91660 var jxd4 = jx.redAdd(jx);
91661 jxd4 = jxd4.redIAdd(jxd4);
91662 var t1 = jxd4.redMul(jy2);
91663 var nx = c.redSqr().redISub(t1.redAdd(t1));
91664 var t2 = t1.redISub(nx);
91665
91666 var jyd8 = jy2.redSqr();
91667 jyd8 = jyd8.redIAdd(jyd8);
91668 jyd8 = jyd8.redIAdd(jyd8);
91669 jyd8 = jyd8.redIAdd(jyd8);
91670 var ny = c.redMul(t2).redISub(jyd8);
91671 var nz = jy.redAdd(jy).redMul(jz);
91672
91673 return this.curve.jpoint(nx, ny, nz);
91674 };
91675
91676 JPoint.prototype.trpl = function trpl() {
91677 if (!this.curve.zeroA)
91678 return this.dbl().add(this);
91679
91680 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
91681 // 5M + 10S + ...
91682
91683 // XX = X1^2
91684 var xx = this.x.redSqr();
91685 // YY = Y1^2
91686 var yy = this.y.redSqr();
91687 // ZZ = Z1^2
91688 var zz = this.z.redSqr();
91689 // YYYY = YY^2
91690 var yyyy = yy.redSqr();
91691 // M = 3 * XX + a * ZZ2; a = 0
91692 var m = xx.redAdd(xx).redIAdd(xx);
91693 // MM = M^2
91694 var mm = m.redSqr();
91695 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
91696 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
91697 e = e.redIAdd(e);
91698 e = e.redAdd(e).redIAdd(e);
91699 e = e.redISub(mm);
91700 // EE = E^2
91701 var ee = e.redSqr();
91702 // T = 16*YYYY
91703 var t = yyyy.redIAdd(yyyy);
91704 t = t.redIAdd(t);
91705 t = t.redIAdd(t);
91706 t = t.redIAdd(t);
91707 // U = (M + E)^2 - MM - EE - T
91708 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
91709 // X3 = 4 * (X1 * EE - 4 * YY * U)
91710 var yyu4 = yy.redMul(u);
91711 yyu4 = yyu4.redIAdd(yyu4);
91712 yyu4 = yyu4.redIAdd(yyu4);
91713 var nx = this.x.redMul(ee).redISub(yyu4);
91714 nx = nx.redIAdd(nx);
91715 nx = nx.redIAdd(nx);
91716 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
91717 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
91718 ny = ny.redIAdd(ny);
91719 ny = ny.redIAdd(ny);
91720 ny = ny.redIAdd(ny);
91721 // Z3 = (Z1 + E)^2 - ZZ - EE
91722 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
91723
91724 return this.curve.jpoint(nx, ny, nz);
91725 };
91726
91727 JPoint.prototype.mul = function mul(k, kbase) {
91728 k = new BN(k, kbase);
91729
91730 return this.curve._wnafMul(this, k);
91731 };
91732
91733 JPoint.prototype.eq = function eq(p) {
91734 if (p.type === 'affine')
91735 return this.eq(p.toJ());
91736
91737 if (this === p)
91738 return true;
91739
91740 // x1 * z2^2 == x2 * z1^2
91741 var z2 = this.z.redSqr();
91742 var pz2 = p.z.redSqr();
91743 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
91744 return false;
91745
91746 // y1 * z2^3 == y2 * z1^3
91747 var z3 = z2.redMul(this.z);
91748 var pz3 = pz2.redMul(p.z);
91749 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
91750 };
91751
91752 JPoint.prototype.eqXToP = function eqXToP(x) {
91753 var zs = this.z.redSqr();
91754 var rx = x.toRed(this.curve.red).redMul(zs);
91755 if (this.x.cmp(rx) === 0)
91756 return true;
91757
91758 var xc = x.clone();
91759 var t = this.curve.redN.redMul(zs);
91760 for (;;) {
91761 xc.iadd(this.curve.n);
91762 if (xc.cmp(this.curve.p) >= 0)
91763 return false;
91764
91765 rx.redIAdd(t);
91766 if (this.x.cmp(rx) === 0)
91767 return true;
91768 }
91769 return false;
91770 };
91771
91772 JPoint.prototype.inspect = function inspect() {
91773 if (this.isInfinity())
91774 return '<EC JPoint Infinity>';
91775 return '<EC JPoint x: ' + this.x.toString(16, 2) +
91776 ' y: ' + this.y.toString(16, 2) +
91777 ' z: ' + this.z.toString(16, 2) + '>';
91778 };
91779
91780 JPoint.prototype.isInfinity = function isInfinity() {
91781 // XXX This code assumes that zero is always zero in red
91782 return this.z.cmpn(0) === 0;
91783 };
91784
91785 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
91786 'use strict';
91787
91788 var curves = exports;
91789
91790 var hash = require('hash.js');
91791 var elliptic = require('../elliptic');
91792
91793 var assert = elliptic.utils.assert;
91794
91795 function PresetCurve(options) {
91796 if (options.type === 'short')
91797 this.curve = new elliptic.curve.short(options);
91798 else if (options.type === 'edwards')
91799 this.curve = new elliptic.curve.edwards(options);
91800 else
91801 this.curve = new elliptic.curve.mont(options);
91802 this.g = this.curve.g;
91803 this.n = this.curve.n;
91804 this.hash = options.hash;
91805
91806 assert(this.g.validate(), 'Invalid curve');
91807 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
91808 }
91809 curves.PresetCurve = PresetCurve;
91810
91811 function defineCurve(name, options) {
91812 Object.defineProperty(curves, name, {
91813 configurable: true,
91814 enumerable: true,
91815 get: function() {
91816 var curve = new PresetCurve(options);
91817 Object.defineProperty(curves, name, {
91818 configurable: true,
91819 enumerable: true,
91820 value: curve
91821 });
91822 return curve;
91823 }
91824 });
91825 }
91826
91827 defineCurve('p192', {
91828 type: 'short',
91829 prime: 'p192',
91830 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
91831 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
91832 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
91833 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
91834 hash: hash.sha256,
91835 gRed: false,
91836 g: [
91837 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
91838 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
91839 ]
91840 });
91841
91842 defineCurve('p224', {
91843 type: 'short',
91844 prime: 'p224',
91845 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
91846 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
91847 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
91848 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
91849 hash: hash.sha256,
91850 gRed: false,
91851 g: [
91852 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
91853 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
91854 ]
91855 });
91856
91857 defineCurve('p256', {
91858 type: 'short',
91859 prime: null,
91860 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
91861 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
91862 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
91863 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
91864 hash: hash.sha256,
91865 gRed: false,
91866 g: [
91867 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
91868 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
91869 ]
91870 });
91871
91872 defineCurve('p384', {
91873 type: 'short',
91874 prime: null,
91875 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91876 'fffffffe ffffffff 00000000 00000000 ffffffff',
91877 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91878 'fffffffe ffffffff 00000000 00000000 fffffffc',
91879 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
91880 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
91881 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
91882 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
91883 hash: hash.sha384,
91884 gRed: false,
91885 g: [
91886 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
91887 '5502f25d bf55296c 3a545e38 72760ab7',
91888 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
91889 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
91890 ]
91891 });
91892
91893 defineCurve('p521', {
91894 type: 'short',
91895 prime: null,
91896 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91897 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91898 'ffffffff ffffffff ffffffff ffffffff ffffffff',
91899 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91900 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91901 'ffffffff ffffffff ffffffff ffffffff fffffffc',
91902 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
91903 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
91904 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
91905 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
91906 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
91907 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
91908 hash: hash.sha512,
91909 gRed: false,
91910 g: [
91911 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
91912 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
91913 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
91914 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
91915 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
91916 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
91917 ]
91918 });
91919
91920 defineCurve('curve25519', {
91921 type: 'mont',
91922 prime: 'p25519',
91923 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
91924 a: '76d06',
91925 b: '1',
91926 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
91927 hash: hash.sha256,
91928 gRed: false,
91929 g: [
91930 '9'
91931 ]
91932 });
91933
91934 defineCurve('ed25519', {
91935 type: 'edwards',
91936 prime: 'p25519',
91937 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
91938 a: '-1',
91939 c: '1',
91940 // -121665 * (121666^(-1)) (mod P)
91941 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
91942 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
91943 hash: hash.sha256,
91944 gRed: false,
91945 g: [
91946 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
91947
91948 // 4/5
91949 '6666666666666666666666666666666666666666666666666666666666666658'
91950 ]
91951 });
91952
91953 var pre;
91954 try {
91955 pre = require('./precomputed/secp256k1');
91956 } catch (e) {
91957 pre = undefined;
91958 }
91959
91960 defineCurve('secp256k1', {
91961 type: 'short',
91962 prime: 'k256',
91963 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
91964 a: '0',
91965 b: '7',
91966 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
91967 h: '1',
91968 hash: hash.sha256,
91969
91970 // Precomputed endomorphism
91971 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
91972 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
91973 basis: [
91974 {
91975 a: '3086d221a7d46bcde86c90e49284eb15',
91976 b: '-e4437ed6010e88286f547fa90abfe4c3'
91977 },
91978 {
91979 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
91980 b: '3086d221a7d46bcde86c90e49284eb15'
91981 }
91982 ],
91983
91984 gRed: false,
91985 g: [
91986 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
91987 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
91988 pre
91989 ]
91990 });
91991
91992 },{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
91993 'use strict';
91994
91995 var BN = require('bn.js');
91996 var elliptic = require('../../elliptic');
91997 var utils = elliptic.utils;
91998 var assert = utils.assert;
91999
92000 var KeyPair = require('./key');
92001 var Signature = require('./signature');
92002
92003 function EC(options) {
92004 if (!(this instanceof EC))
92005 return new EC(options);
92006
92007 // Shortcut `elliptic.ec(curve-name)`
92008 if (typeof options === 'string') {
92009 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
92010
92011 options = elliptic.curves[options];
92012 }
92013
92014 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
92015 if (options instanceof elliptic.curves.PresetCurve)
92016 options = { curve: options };
92017
92018 this.curve = options.curve.curve;
92019 this.n = this.curve.n;
92020 this.nh = this.n.ushrn(1);
92021 this.g = this.curve.g;
92022
92023 // Point on curve
92024 this.g = options.curve.g;
92025 this.g.precompute(options.curve.n.bitLength() + 1);
92026
92027 // Hash for function for DRBG
92028 this.hash = options.hash || options.curve.hash;
92029 }
92030 module.exports = EC;
92031
92032 EC.prototype.keyPair = function keyPair(options) {
92033 return new KeyPair(this, options);
92034 };
92035
92036 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
92037 return KeyPair.fromPrivate(this, priv, enc);
92038 };
92039
92040 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
92041 return KeyPair.fromPublic(this, pub, enc);
92042 };
92043
92044 EC.prototype.genKeyPair = function genKeyPair(options) {
92045 if (!options)
92046 options = {};
92047
92048 // Instantiate Hmac_DRBG
92049 var drbg = new elliptic.hmacDRBG({
92050 hash: this.hash,
92051 pers: options.pers,
92052 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
92053 nonce: this.n.toArray()
92054 });
92055
92056 var bytes = this.n.byteLength();
92057 var ns2 = this.n.sub(new BN(2));
92058 do {
92059 var priv = new BN(drbg.generate(bytes));
92060 if (priv.cmp(ns2) > 0)
92061 continue;
92062
92063 priv.iaddn(1);
92064 return this.keyFromPrivate(priv);
92065 } while (true);
92066 };
92067
92068 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
92069 var delta = msg.byteLength() * 8 - this.n.bitLength();
92070 if (delta > 0)
92071 msg = msg.ushrn(delta);
92072 if (!truncOnly && msg.cmp(this.n) >= 0)
92073 return msg.sub(this.n);
92074 else
92075 return msg;
92076 };
92077
92078 EC.prototype.sign = function sign(msg, key, enc, options) {
92079 if (typeof enc === 'object') {
92080 options = enc;
92081 enc = null;
92082 }
92083 if (!options)
92084 options = {};
92085
92086 key = this.keyFromPrivate(key, enc);
92087 msg = this._truncateToN(new BN(msg, 16));
92088
92089 // Zero-extend key to provide enough entropy
92090 var bytes = this.n.byteLength();
92091 var bkey = key.getPrivate().toArray('be', bytes);
92092
92093 // Zero-extend nonce to have the same byte size as N
92094 var nonce = msg.toArray('be', bytes);
92095
92096 // Instantiate Hmac_DRBG
92097 var drbg = new elliptic.hmacDRBG({
92098 hash: this.hash,
92099 entropy: bkey,
92100 nonce: nonce,
92101 pers: options.pers,
92102 persEnc: options.persEnc
92103 });
92104
92105 // Number of bytes to generate
92106 var ns1 = this.n.sub(new BN(1));
92107
92108 for (var iter = 0; true; iter++) {
92109 var k = options.k ?
92110 options.k(iter) :
92111 new BN(drbg.generate(this.n.byteLength()));
92112 k = this._truncateToN(k, true);
92113 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
92114 continue;
92115
92116 var kp = this.g.mul(k);
92117 if (kp.isInfinity())
92118 continue;
92119
92120 var kpX = kp.getX();
92121 var r = kpX.umod(this.n);
92122 if (r.cmpn(0) === 0)
92123 continue;
92124
92125 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
92126 s = s.umod(this.n);
92127 if (s.cmpn(0) === 0)
92128 continue;
92129
92130 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
92131 (kpX.cmp(r) !== 0 ? 2 : 0);
92132
92133 // Use complement of `s`, if it is > `n / 2`
92134 if (options.canonical && s.cmp(this.nh) > 0) {
92135 s = this.n.sub(s);
92136 recoveryParam ^= 1;
92137 }
92138
92139 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
92140 }
92141 };
92142
92143 EC.prototype.verify = function verify(msg, signature, key, enc) {
92144 msg = this._truncateToN(new BN(msg, 16));
92145 key = this.keyFromPublic(key, enc);
92146 signature = new Signature(signature, 'hex');
92147
92148 // Perform primitive values validation
92149 var r = signature.r;
92150 var s = signature.s;
92151 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
92152 return false;
92153 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
92154 return false;
92155
92156 // Validate signature
92157 var sinv = s.invm(this.n);
92158 var u1 = sinv.mul(msg).umod(this.n);
92159 var u2 = sinv.mul(r).umod(this.n);
92160
92161 if (!this.curve._maxwellTrick) {
92162 var p = this.g.mulAdd(u1, key.getPublic(), u2);
92163 if (p.isInfinity())
92164 return false;
92165
92166 return p.getX().umod(this.n).cmp(r) === 0;
92167 }
92168
92169 // NOTE: Greg Maxwell's trick, inspired by:
92170 // https://git.io/vad3K
92171
92172 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
92173 if (p.isInfinity())
92174 return false;
92175
92176 // Compare `p.x` of Jacobian point with `r`,
92177 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
92178 // inverse of `p.z^2`
92179 return p.eqXToP(r);
92180 };
92181
92182 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
92183 assert((3 & j) === j, 'The recovery param is more than two bits');
92184 signature = new Signature(signature, enc);
92185
92186 var n = this.n;
92187 var e = new BN(msg);
92188 var r = signature.r;
92189 var s = signature.s;
92190
92191 // A set LSB signifies that the y-coordinate is odd
92192 var isYOdd = j & 1;
92193 var isSecondKey = j >> 1;
92194 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
92195 throw new Error('Unable to find sencond key candinate');
92196
92197 // 1.1. Let x = r + jn.
92198 if (isSecondKey)
92199 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
92200 else
92201 r = this.curve.pointFromX(r, isYOdd);
92202
92203 var rInv = signature.r.invm(n);
92204 var s1 = n.sub(e).mul(rInv).umod(n);
92205 var s2 = s.mul(rInv).umod(n);
92206
92207 // 1.6.1 Compute Q = r^-1 (sR - eG)
92208 // Q = r^-1 (sR + -eG)
92209 return this.g.mulAdd(s1, r, s2);
92210 };
92211
92212 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
92213 signature = new Signature(signature, enc);
92214 if (signature.recoveryParam !== null)
92215 return signature.recoveryParam;
92216
92217 for (var i = 0; i < 4; i++) {
92218 var Qprime;
92219 try {
92220 Qprime = this.recoverPubKey(e, signature, i);
92221 } catch (e) {
92222 continue;
92223 }
92224
92225 if (Qprime.eq(Q))
92226 return i;
92227 }
92228 throw new Error('Unable to find valid recovery factor');
92229 };
92230
92231 },{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
92232 'use strict';
92233
92234 var BN = require('bn.js');
92235 var elliptic = require('../../elliptic');
92236 var utils = elliptic.utils;
92237 var assert = utils.assert;
92238
92239 function KeyPair(ec, options) {
92240 this.ec = ec;
92241 this.priv = null;
92242 this.pub = null;
92243
92244 // KeyPair(ec, { priv: ..., pub: ... })
92245 if (options.priv)
92246 this._importPrivate(options.priv, options.privEnc);
92247 if (options.pub)
92248 this._importPublic(options.pub, options.pubEnc);
92249 }
92250 module.exports = KeyPair;
92251
92252 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
92253 if (pub instanceof KeyPair)
92254 return pub;
92255
92256 return new KeyPair(ec, {
92257 pub: pub,
92258 pubEnc: enc
92259 });
92260 };
92261
92262 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
92263 if (priv instanceof KeyPair)
92264 return priv;
92265
92266 return new KeyPair(ec, {
92267 priv: priv,
92268 privEnc: enc
92269 });
92270 };
92271
92272 KeyPair.prototype.validate = function validate() {
92273 var pub = this.getPublic();
92274
92275 if (pub.isInfinity())
92276 return { result: false, reason: 'Invalid public key' };
92277 if (!pub.validate())
92278 return { result: false, reason: 'Public key is not a point' };
92279 if (!pub.mul(this.ec.curve.n).isInfinity())
92280 return { result: false, reason: 'Public key * N != O' };
92281
92282 return { result: true, reason: null };
92283 };
92284
92285 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
92286 // compact is optional argument
92287 if (typeof compact === 'string') {
92288 enc = compact;
92289 compact = null;
92290 }
92291
92292 if (!this.pub)
92293 this.pub = this.ec.g.mul(this.priv);
92294
92295 if (!enc)
92296 return this.pub;
92297
92298 return this.pub.encode(enc, compact);
92299 };
92300
92301 KeyPair.prototype.getPrivate = function getPrivate(enc) {
92302 if (enc === 'hex')
92303 return this.priv.toString(16, 2);
92304 else
92305 return this.priv;
92306 };
92307
92308 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
92309 this.priv = new BN(key, enc || 16);
92310
92311 // Ensure that the priv won't be bigger than n, otherwise we may fail
92312 // in fixed multiplication method
92313 this.priv = this.priv.umod(this.ec.curve.n);
92314 };
92315
92316 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
92317 if (key.x || key.y) {
92318 // Montgomery points only have an `x` coordinate.
92319 // Weierstrass/Edwards points on the other hand have both `x` and
92320 // `y` coordinates.
92321 if (this.ec.curve.type === 'mont') {
92322 assert(key.x, 'Need x coordinate');
92323 } else if (this.ec.curve.type === 'short' ||
92324 this.ec.curve.type === 'edwards') {
92325 assert(key.x && key.y, 'Need both x and y coordinate');
92326 }
92327 this.pub = this.ec.curve.point(key.x, key.y);
92328 return;
92329 }
92330 this.pub = this.ec.curve.decodePoint(key, enc);
92331 };
92332
92333 // ECDH
92334 KeyPair.prototype.derive = function derive(pub) {
92335 return pub.mul(this.priv).getX();
92336 };
92337
92338 // ECDSA
92339 KeyPair.prototype.sign = function sign(msg, enc, options) {
92340 return this.ec.sign(msg, this, enc, options);
92341 };
92342
92343 KeyPair.prototype.verify = function verify(msg, signature) {
92344 return this.ec.verify(msg, signature, this);
92345 };
92346
92347 KeyPair.prototype.inspect = function inspect() {
92348 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
92349 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
92350 };
92351
92352 },{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
92353 'use strict';
92354
92355 var BN = require('bn.js');
92356
92357 var elliptic = require('../../elliptic');
92358 var utils = elliptic.utils;
92359 var assert = utils.assert;
92360
92361 function Signature(options, enc) {
92362 if (options instanceof Signature)
92363 return options;
92364
92365 if (this._importDER(options, enc))
92366 return;
92367
92368 assert(options.r && options.s, 'Signature without r or s');
92369 this.r = new BN(options.r, 16);
92370 this.s = new BN(options.s, 16);
92371 if (options.recoveryParam === undefined)
92372 this.recoveryParam = null;
92373 else
92374 this.recoveryParam = options.recoveryParam;
92375 }
92376 module.exports = Signature;
92377
92378 function Position() {
92379 this.place = 0;
92380 }
92381
92382 function getLength(buf, p) {
92383 var initial = buf[p.place++];
92384 if (!(initial & 0x80)) {
92385 return initial;
92386 }
92387 var octetLen = initial & 0xf;
92388 var val = 0;
92389 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
92390 val <<= 8;
92391 val |= buf[off];
92392 }
92393 p.place = off;
92394 return val;
92395 }
92396
92397 function rmPadding(buf) {
92398 var i = 0;
92399 var len = buf.length - 1;
92400 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
92401 i++;
92402 }
92403 if (i === 0) {
92404 return buf;
92405 }
92406 return buf.slice(i);
92407 }
92408
92409 Signature.prototype._importDER = function _importDER(data, enc) {
92410 data = utils.toArray(data, enc);
92411 var p = new Position();
92412 if (data[p.place++] !== 0x30) {
92413 return false;
92414 }
92415 var len = getLength(data, p);
92416 if ((len + p.place) !== data.length) {
92417 return false;
92418 }
92419 if (data[p.place++] !== 0x02) {
92420 return false;
92421 }
92422 var rlen = getLength(data, p);
92423 var r = data.slice(p.place, rlen + p.place);
92424 p.place += rlen;
92425 if (data[p.place++] !== 0x02) {
92426 return false;
92427 }
92428 var slen = getLength(data, p);
92429 if (data.length !== slen + p.place) {
92430 return false;
92431 }
92432 var s = data.slice(p.place, slen + p.place);
92433 if (r[0] === 0 && (r[1] & 0x80)) {
92434 r = r.slice(1);
92435 }
92436 if (s[0] === 0 && (s[1] & 0x80)) {
92437 s = s.slice(1);
92438 }
92439
92440 this.r = new BN(r);
92441 this.s = new BN(s);
92442 this.recoveryParam = null;
92443
92444 return true;
92445 };
92446
92447 function constructLength(arr, len) {
92448 if (len < 0x80) {
92449 arr.push(len);
92450 return;
92451 }
92452 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
92453 arr.push(octets | 0x80);
92454 while (--octets) {
92455 arr.push((len >>> (octets << 3)) & 0xff);
92456 }
92457 arr.push(len);
92458 }
92459
92460 Signature.prototype.toDER = function toDER(enc) {
92461 var r = this.r.toArray();
92462 var s = this.s.toArray();
92463
92464 // Pad values
92465 if (r[0] & 0x80)
92466 r = [ 0 ].concat(r);
92467 // Pad values
92468 if (s[0] & 0x80)
92469 s = [ 0 ].concat(s);
92470
92471 r = rmPadding(r);
92472 s = rmPadding(s);
92473
92474 while (!s[0] && !(s[1] & 0x80)) {
92475 s = s.slice(1);
92476 }
92477 var arr = [ 0x02 ];
92478 constructLength(arr, r.length);
92479 arr = arr.concat(r);
92480 arr.push(0x02);
92481 constructLength(arr, s.length);
92482 var backHalf = arr.concat(s);
92483 var res = [ 0x30 ];
92484 constructLength(res, backHalf.length);
92485 res = res.concat(backHalf);
92486 return utils.encode(res, enc);
92487 };
92488
92489 },{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
92490 'use strict';
92491
92492 var hash = require('hash.js');
92493 var elliptic = require('../../elliptic');
92494 var utils = elliptic.utils;
92495 var assert = utils.assert;
92496 var parseBytes = utils.parseBytes;
92497 var KeyPair = require('./key');
92498 var Signature = require('./signature');
92499
92500 function EDDSA(curve) {
92501 assert(curve === 'ed25519', 'only tested with ed25519 so far');
92502
92503 if (!(this instanceof EDDSA))
92504 return new EDDSA(curve);
92505
92506 var curve = elliptic.curves[curve].curve;
92507 this.curve = curve;
92508 this.g = curve.g;
92509 this.g.precompute(curve.n.bitLength() + 1);
92510
92511 this.pointClass = curve.point().constructor;
92512 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
92513 this.hash = hash.sha512;
92514 }
92515
92516 module.exports = EDDSA;
92517
92518 /**
92519 * @param {Array|String} message - message bytes
92520 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
92521 * @returns {Signature} - signature
92522 */
92523 EDDSA.prototype.sign = function sign(message, secret) {
92524 message = parseBytes(message);
92525 var key = this.keyFromSecret(secret);
92526 var r = this.hashInt(key.messagePrefix(), message);
92527 var R = this.g.mul(r);
92528 var Rencoded = this.encodePoint(R);
92529 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
92530 .mul(key.priv());
92531 var S = r.add(s_).umod(this.curve.n);
92532 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
92533 };
92534
92535 /**
92536 * @param {Array} message - message bytes
92537 * @param {Array|String|Signature} sig - sig bytes
92538 * @param {Array|String|Point|KeyPair} pub - public key
92539 * @returns {Boolean} - true if public key matches sig of message
92540 */
92541 EDDSA.prototype.verify = function verify(message, sig, pub) {
92542 message = parseBytes(message);
92543 sig = this.makeSignature(sig);
92544 var key = this.keyFromPublic(pub);
92545 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
92546 var SG = this.g.mul(sig.S());
92547 var RplusAh = sig.R().add(key.pub().mul(h));
92548 return RplusAh.eq(SG);
92549 };
92550
92551 EDDSA.prototype.hashInt = function hashInt() {
92552 var hash = this.hash();
92553 for (var i = 0; i < arguments.length; i++)
92554 hash.update(arguments[i]);
92555 return utils.intFromLE(hash.digest()).umod(this.curve.n);
92556 };
92557
92558 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
92559 return KeyPair.fromPublic(this, pub);
92560 };
92561
92562 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
92563 return KeyPair.fromSecret(this, secret);
92564 };
92565
92566 EDDSA.prototype.makeSignature = function makeSignature(sig) {
92567 if (sig instanceof Signature)
92568 return sig;
92569 return new Signature(this, sig);
92570 };
92571
92572 /**
92573 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
92574 *
92575 * EDDSA defines methods for encoding and decoding points and integers. These are
92576 * helper convenience methods, that pass along to utility functions implied
92577 * parameters.
92578 *
92579 */
92580 EDDSA.prototype.encodePoint = function encodePoint(point) {
92581 var enc = point.getY().toArray('le', this.encodingLength);
92582 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
92583 return enc;
92584 };
92585
92586 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
92587 bytes = utils.parseBytes(bytes);
92588
92589 var lastIx = bytes.length - 1;
92590 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
92591 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
92592
92593 var y = utils.intFromLE(normed);
92594 return this.curve.pointFromY(y, xIsOdd);
92595 };
92596
92597 EDDSA.prototype.encodeInt = function encodeInt(num) {
92598 return num.toArray('le', this.encodingLength);
92599 };
92600
92601 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
92602 return utils.intFromLE(bytes);
92603 };
92604
92605 EDDSA.prototype.isPoint = function isPoint(val) {
92606 return val instanceof this.pointClass;
92607 };
92608
92609 },{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
92610 'use strict';
92611
92612 var elliptic = require('../../elliptic');
92613 var utils = elliptic.utils;
92614 var assert = utils.assert;
92615 var parseBytes = utils.parseBytes;
92616 var cachedProperty = utils.cachedProperty;
92617
92618 /**
92619 * @param {EDDSA} eddsa - instance
92620 * @param {Object} params - public/private key parameters
92621 *
92622 * @param {Array<Byte>} [params.secret] - secret seed bytes
92623 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
92624 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
92625 *
92626 */
92627 function KeyPair(eddsa, params) {
92628 this.eddsa = eddsa;
92629 this._secret = parseBytes(params.secret);
92630 if (eddsa.isPoint(params.pub))
92631 this._pub = params.pub;
92632 else
92633 this._pubBytes = parseBytes(params.pub);
92634 }
92635
92636 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
92637 if (pub instanceof KeyPair)
92638 return pub;
92639 return new KeyPair(eddsa, { pub: pub });
92640 };
92641
92642 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
92643 if (secret instanceof KeyPair)
92644 return secret;
92645 return new KeyPair(eddsa, { secret: secret });
92646 };
92647
92648 KeyPair.prototype.secret = function secret() {
92649 return this._secret;
92650 };
92651
92652 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
92653 return this.eddsa.encodePoint(this.pub());
92654 });
92655
92656 cachedProperty(KeyPair, 'pub', function pub() {
92657 if (this._pubBytes)
92658 return this.eddsa.decodePoint(this._pubBytes);
92659 return this.eddsa.g.mul(this.priv());
92660 });
92661
92662 cachedProperty(KeyPair, 'privBytes', function privBytes() {
92663 var eddsa = this.eddsa;
92664 var hash = this.hash();
92665 var lastIx = eddsa.encodingLength - 1;
92666
92667 var a = hash.slice(0, eddsa.encodingLength);
92668 a[0] &= 248;
92669 a[lastIx] &= 127;
92670 a[lastIx] |= 64;
92671
92672 return a;
92673 });
92674
92675 cachedProperty(KeyPair, 'priv', function priv() {
92676 return this.eddsa.decodeInt(this.privBytes());
92677 });
92678
92679 cachedProperty(KeyPair, 'hash', function hash() {
92680 return this.eddsa.hash().update(this.secret()).digest();
92681 });
92682
92683 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
92684 return this.hash().slice(this.eddsa.encodingLength);
92685 });
92686
92687 KeyPair.prototype.sign = function sign(message) {
92688 assert(this._secret, 'KeyPair can only verify');
92689 return this.eddsa.sign(message, this);
92690 };
92691
92692 KeyPair.prototype.verify = function verify(message, sig) {
92693 return this.eddsa.verify(message, sig, this);
92694 };
92695
92696 KeyPair.prototype.getSecret = function getSecret(enc) {
92697 assert(this._secret, 'KeyPair is public only');
92698 return utils.encode(this.secret(), enc);
92699 };
92700
92701 KeyPair.prototype.getPublic = function getPublic(enc) {
92702 return utils.encode(this.pubBytes(), enc);
92703 };
92704
92705 module.exports = KeyPair;
92706
92707 },{"../../elliptic":39}],51:[function(require,module,exports){
92708 'use strict';
92709
92710 var BN = require('bn.js');
92711 var elliptic = require('../../elliptic');
92712 var utils = elliptic.utils;
92713 var assert = utils.assert;
92714 var cachedProperty = utils.cachedProperty;
92715 var parseBytes = utils.parseBytes;
92716
92717 /**
92718 * @param {EDDSA} eddsa - eddsa instance
92719 * @param {Array<Bytes>|Object} sig -
92720 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
92721 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
92722 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
92723 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
92724 */
92725 function Signature(eddsa, sig) {
92726 this.eddsa = eddsa;
92727
92728 if (typeof sig !== 'object')
92729 sig = parseBytes(sig);
92730
92731 if (Array.isArray(sig)) {
92732 sig = {
92733 R: sig.slice(0, eddsa.encodingLength),
92734 S: sig.slice(eddsa.encodingLength)
92735 };
92736 }
92737
92738 assert(sig.R && sig.S, 'Signature without R or S');
92739
92740 if (eddsa.isPoint(sig.R))
92741 this._R = sig.R;
92742 if (sig.S instanceof BN)
92743 this._S = sig.S;
92744
92745 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
92746 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
92747 }
92748
92749 cachedProperty(Signature, 'S', function S() {
92750 return this.eddsa.decodeInt(this.Sencoded());
92751 });
92752
92753 cachedProperty(Signature, 'R', function R() {
92754 return this.eddsa.decodePoint(this.Rencoded());
92755 });
92756
92757 cachedProperty(Signature, 'Rencoded', function Rencoded() {
92758 return this.eddsa.encodePoint(this.R());
92759 });
92760
92761 cachedProperty(Signature, 'Sencoded', function Sencoded() {
92762 return this.eddsa.encodeInt(this.S());
92763 });
92764
92765 Signature.prototype.toBytes = function toBytes() {
92766 return this.Rencoded().concat(this.Sencoded());
92767 };
92768
92769 Signature.prototype.toHex = function toHex() {
92770 return utils.encode(this.toBytes(), 'hex').toUpperCase();
92771 };
92772
92773 module.exports = Signature;
92774
92775 },{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
92776 'use strict';
92777
92778 var hash = require('hash.js');
92779 var elliptic = require('../elliptic');
92780 var utils = elliptic.utils;
92781 var assert = utils.assert;
92782
92783 function HmacDRBG(options) {
92784 if (!(this instanceof HmacDRBG))
92785 return new HmacDRBG(options);
92786 this.hash = options.hash;
92787 this.predResist = !!options.predResist;
92788
92789 this.outLen = this.hash.outSize;
92790 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
92791
92792 this.reseed = null;
92793 this.reseedInterval = null;
92794 this.K = null;
92795 this.V = null;
92796
92797 var entropy = utils.toArray(options.entropy, options.entropyEnc);
92798 var nonce = utils.toArray(options.nonce, options.nonceEnc);
92799 var pers = utils.toArray(options.pers, options.persEnc);
92800 assert(entropy.length >= (this.minEntropy / 8),
92801 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
92802 this._init(entropy, nonce, pers);
92803 }
92804 module.exports = HmacDRBG;
92805
92806 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
92807 var seed = entropy.concat(nonce).concat(pers);
92808
92809 this.K = new Array(this.outLen / 8);
92810 this.V = new Array(this.outLen / 8);
92811 for (var i = 0; i < this.V.length; i++) {
92812 this.K[i] = 0x00;
92813 this.V[i] = 0x01;
92814 }
92815
92816 this._update(seed);
92817 this.reseed = 1;
92818 this.reseedInterval = 0x1000000000000; // 2^48
92819 };
92820
92821 HmacDRBG.prototype._hmac = function hmac() {
92822 return new hash.hmac(this.hash, this.K);
92823 };
92824
92825 HmacDRBG.prototype._update = function update(seed) {
92826 var kmac = this._hmac()
92827 .update(this.V)
92828 .update([ 0x00 ]);
92829 if (seed)
92830 kmac = kmac.update(seed);
92831 this.K = kmac.digest();
92832 this.V = this._hmac().update(this.V).digest();
92833 if (!seed)
92834 return;
92835
92836 this.K = this._hmac()
92837 .update(this.V)
92838 .update([ 0x01 ])
92839 .update(seed)
92840 .digest();
92841 this.V = this._hmac().update(this.V).digest();
92842 };
92843
92844 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
92845 // Optional entropy enc
92846 if (typeof entropyEnc !== 'string') {
92847 addEnc = add;
92848 add = entropyEnc;
92849 entropyEnc = null;
92850 }
92851
92852 entropy = utils.toBuffer(entropy, entropyEnc);
92853 add = utils.toBuffer(add, addEnc);
92854
92855 assert(entropy.length >= (this.minEntropy / 8),
92856 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
92857
92858 this._update(entropy.concat(add || []));
92859 this.reseed = 1;
92860 };
92861
92862 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
92863 if (this.reseed > this.reseedInterval)
92864 throw new Error('Reseed is required');
92865
92866 // Optional encoding
92867 if (typeof enc !== 'string') {
92868 addEnc = add;
92869 add = enc;
92870 enc = null;
92871 }
92872
92873 // Optional additional data
92874 if (add) {
92875 add = utils.toArray(add, addEnc);
92876 this._update(add);
92877 }
92878
92879 var temp = [];
92880 while (temp.length < len) {
92881 this.V = this._hmac().update(this.V).digest();
92882 temp = temp.concat(this.V);
92883 }
92884
92885 var res = temp.slice(0, len);
92886 this._update(add);
92887 this.reseed++;
92888 return utils.encode(res, enc);
92889 };
92890
92891 },{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
92892 module.exports = {
92893 doubles: {
92894 step: 4,
92895 points: [
92896 [
92897 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
92898 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
92899 ],
92900 [
92901 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
92902 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
92903 ],
92904 [
92905 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
92906 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
92907 ],
92908 [
92909 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
92910 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
92911 ],
92912 [
92913 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
92914 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
92915 ],
92916 [
92917 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
92918 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
92919 ],
92920 [
92921 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
92922 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
92923 ],
92924 [
92925 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
92926 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
92927 ],
92928 [
92929 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
92930 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
92931 ],
92932 [
92933 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
92934 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
92935 ],
92936 [
92937 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
92938 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
92939 ],
92940 [
92941 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
92942 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
92943 ],
92944 [
92945 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
92946 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
92947 ],
92948 [
92949 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
92950 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
92951 ],
92952 [
92953 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
92954 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
92955 ],
92956 [
92957 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
92958 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
92959 ],
92960 [
92961 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
92962 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
92963 ],
92964 [
92965 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
92966 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
92967 ],
92968 [
92969 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
92970 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
92971 ],
92972 [
92973 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
92974 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
92975 ],
92976 [
92977 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
92978 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
92979 ],
92980 [
92981 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
92982 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
92983 ],
92984 [
92985 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
92986 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
92987 ],
92988 [
92989 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
92990 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
92991 ],
92992 [
92993 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
92994 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
92995 ],
92996 [
92997 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
92998 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
92999 ],
93000 [
93001 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
93002 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
93003 ],
93004 [
93005 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
93006 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
93007 ],
93008 [
93009 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
93010 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
93011 ],
93012 [
93013 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
93014 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
93015 ],
93016 [
93017 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
93018 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
93019 ],
93020 [
93021 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
93022 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
93023 ],
93024 [
93025 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
93026 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
93027 ],
93028 [
93029 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
93030 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
93031 ],
93032 [
93033 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
93034 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
93035 ],
93036 [
93037 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
93038 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
93039 ],
93040 [
93041 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
93042 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
93043 ],
93044 [
93045 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
93046 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
93047 ],
93048 [
93049 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
93050 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
93051 ],
93052 [
93053 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
93054 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
93055 ],
93056 [
93057 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
93058 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
93059 ],
93060 [
93061 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
93062 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
93063 ],
93064 [
93065 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
93066 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
93067 ],
93068 [
93069 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
93070 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
93071 ],
93072 [
93073 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
93074 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
93075 ],
93076 [
93077 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
93078 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
93079 ],
93080 [
93081 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
93082 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
93083 ],
93084 [
93085 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
93086 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
93087 ],
93088 [
93089 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
93090 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
93091 ],
93092 [
93093 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
93094 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
93095 ],
93096 [
93097 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
93098 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
93099 ],
93100 [
93101 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
93102 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
93103 ],
93104 [
93105 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
93106 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
93107 ],
93108 [
93109 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
93110 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
93111 ],
93112 [
93113 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
93114 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
93115 ],
93116 [
93117 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
93118 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
93119 ],
93120 [
93121 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
93122 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
93123 ],
93124 [
93125 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
93126 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
93127 ],
93128 [
93129 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
93130 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
93131 ],
93132 [
93133 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
93134 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
93135 ],
93136 [
93137 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
93138 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
93139 ],
93140 [
93141 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
93142 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
93143 ],
93144 [
93145 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
93146 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
93147 ],
93148 [
93149 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
93150 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
93151 ],
93152 [
93153 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
93154 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
93155 ]
93156 ]
93157 },
93158 naf: {
93159 wnd: 7,
93160 points: [
93161 [
93162 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
93163 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
93164 ],
93165 [
93166 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
93167 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
93168 ],
93169 [
93170 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
93171 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
93172 ],
93173 [
93174 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
93175 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
93176 ],
93177 [
93178 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
93179 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
93180 ],
93181 [
93182 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
93183 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
93184 ],
93185 [
93186 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
93187 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
93188 ],
93189 [
93190 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
93191 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
93192 ],
93193 [
93194 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
93195 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
93196 ],
93197 [
93198 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
93199 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
93200 ],
93201 [
93202 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
93203 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
93204 ],
93205 [
93206 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
93207 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
93208 ],
93209 [
93210 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
93211 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
93212 ],
93213 [
93214 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
93215 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
93216 ],
93217 [
93218 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
93219 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
93220 ],
93221 [
93222 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
93223 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
93224 ],
93225 [
93226 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
93227 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
93228 ],
93229 [
93230 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
93231 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
93232 ],
93233 [
93234 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
93235 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
93236 ],
93237 [
93238 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
93239 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
93240 ],
93241 [
93242 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
93243 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
93244 ],
93245 [
93246 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
93247 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
93248 ],
93249 [
93250 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
93251 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
93252 ],
93253 [
93254 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
93255 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
93256 ],
93257 [
93258 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
93259 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
93260 ],
93261 [
93262 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
93263 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
93264 ],
93265 [
93266 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
93267 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
93268 ],
93269 [
93270 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
93271 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
93272 ],
93273 [
93274 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
93275 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
93276 ],
93277 [
93278 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
93279 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
93280 ],
93281 [
93282 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
93283 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
93284 ],
93285 [
93286 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
93287 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
93288 ],
93289 [
93290 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
93291 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
93292 ],
93293 [
93294 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
93295 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
93296 ],
93297 [
93298 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
93299 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
93300 ],
93301 [
93302 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
93303 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
93304 ],
93305 [
93306 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
93307 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
93308 ],
93309 [
93310 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
93311 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
93312 ],
93313 [
93314 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
93315 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
93316 ],
93317 [
93318 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
93319 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
93320 ],
93321 [
93322 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
93323 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
93324 ],
93325 [
93326 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
93327 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
93328 ],
93329 [
93330 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
93331 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
93332 ],
93333 [
93334 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
93335 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
93336 ],
93337 [
93338 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
93339 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
93340 ],
93341 [
93342 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
93343 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
93344 ],
93345 [
93346 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
93347 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
93348 ],
93349 [
93350 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
93351 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
93352 ],
93353 [
93354 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
93355 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
93356 ],
93357 [
93358 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
93359 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
93360 ],
93361 [
93362 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
93363 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
93364 ],
93365 [
93366 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
93367 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
93368 ],
93369 [
93370 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
93371 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
93372 ],
93373 [
93374 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
93375 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
93376 ],
93377 [
93378 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
93379 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
93380 ],
93381 [
93382 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
93383 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
93384 ],
93385 [
93386 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
93387 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
93388 ],
93389 [
93390 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
93391 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
93392 ],
93393 [
93394 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
93395 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
93396 ],
93397 [
93398 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
93399 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
93400 ],
93401 [
93402 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
93403 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
93404 ],
93405 [
93406 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
93407 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
93408 ],
93409 [
93410 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
93411 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
93412 ],
93413 [
93414 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
93415 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
93416 ],
93417 [
93418 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
93419 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
93420 ],
93421 [
93422 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
93423 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
93424 ],
93425 [
93426 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
93427 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
93428 ],
93429 [
93430 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
93431 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
93432 ],
93433 [
93434 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
93435 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
93436 ],
93437 [
93438 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
93439 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
93440 ],
93441 [
93442 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
93443 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
93444 ],
93445 [
93446 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
93447 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
93448 ],
93449 [
93450 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
93451 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
93452 ],
93453 [
93454 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
93455 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
93456 ],
93457 [
93458 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
93459 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
93460 ],
93461 [
93462 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
93463 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
93464 ],
93465 [
93466 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
93467 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
93468 ],
93469 [
93470 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
93471 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
93472 ],
93473 [
93474 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
93475 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
93476 ],
93477 [
93478 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
93479 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
93480 ],
93481 [
93482 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
93483 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
93484 ],
93485 [
93486 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
93487 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
93488 ],
93489 [
93490 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
93491 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
93492 ],
93493 [
93494 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
93495 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
93496 ],
93497 [
93498 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
93499 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
93500 ],
93501 [
93502 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
93503 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
93504 ],
93505 [
93506 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
93507 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
93508 ],
93509 [
93510 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
93511 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
93512 ],
93513 [
93514 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
93515 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
93516 ],
93517 [
93518 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
93519 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
93520 ],
93521 [
93522 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
93523 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
93524 ],
93525 [
93526 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
93527 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
93528 ],
93529 [
93530 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
93531 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
93532 ],
93533 [
93534 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
93535 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
93536 ],
93537 [
93538 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
93539 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
93540 ],
93541 [
93542 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
93543 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
93544 ],
93545 [
93546 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
93547 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
93548 ],
93549 [
93550 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
93551 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
93552 ],
93553 [
93554 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
93555 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
93556 ],
93557 [
93558 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
93559 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
93560 ],
93561 [
93562 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
93563 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
93564 ],
93565 [
93566 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
93567 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
93568 ],
93569 [
93570 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
93571 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
93572 ],
93573 [
93574 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
93575 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
93576 ],
93577 [
93578 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
93579 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
93580 ],
93581 [
93582 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
93583 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
93584 ],
93585 [
93586 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
93587 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
93588 ],
93589 [
93590 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
93591 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
93592 ],
93593 [
93594 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
93595 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
93596 ],
93597 [
93598 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
93599 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
93600 ],
93601 [
93602 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
93603 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
93604 ],
93605 [
93606 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
93607 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
93608 ],
93609 [
93610 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
93611 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
93612 ],
93613 [
93614 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
93615 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
93616 ],
93617 [
93618 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
93619 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
93620 ],
93621 [
93622 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
93623 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
93624 ],
93625 [
93626 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
93627 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
93628 ],
93629 [
93630 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
93631 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
93632 ],
93633 [
93634 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
93635 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
93636 ],
93637 [
93638 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
93639 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
93640 ],
93641 [
93642 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
93643 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
93644 ],
93645 [
93646 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
93647 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
93648 ],
93649 [
93650 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
93651 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
93652 ],
93653 [
93654 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
93655 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
93656 ],
93657 [
93658 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
93659 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
93660 ],
93661 [
93662 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
93663 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
93664 ],
93665 [
93666 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
93667 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
93668 ]
93669 ]
93670 }
93671 };
93672
93673 },{}],54:[function(require,module,exports){
93674 'use strict';
93675
93676 var utils = exports;
93677 var BN = require('bn.js');
93678
93679 utils.assert = function assert(val, msg) {
93680 if (!val)
93681 throw new Error(msg || 'Assertion failed');
93682 };
93683
93684 function toArray(msg, enc) {
93685 if (Array.isArray(msg))
93686 return msg.slice();
93687 if (!msg)
93688 return [];
93689 var res = [];
93690 if (typeof msg !== 'string') {
93691 for (var i = 0; i < msg.length; i++)
93692 res[i] = msg[i] | 0;
93693 return res;
93694 }
93695 if (!enc) {
93696 for (var i = 0; i < msg.length; i++) {
93697 var c = msg.charCodeAt(i);
93698 var hi = c >> 8;
93699 var lo = c & 0xff;
93700 if (hi)
93701 res.push(hi, lo);
93702 else
93703 res.push(lo);
93704 }
93705 } else if (enc === 'hex') {
93706 msg = msg.replace(/[^a-z0-9]+/ig, '');
93707 if (msg.length % 2 !== 0)
93708 msg = '0' + msg;
93709 for (var i = 0; i < msg.length; i += 2)
93710 res.push(parseInt(msg[i] + msg[i + 1], 16));
93711 }
93712 return res;
93713 }
93714 utils.toArray = toArray;
93715
93716 function zero2(word) {
93717 if (word.length === 1)
93718 return '0' + word;
93719 else
93720 return word;
93721 }
93722 utils.zero2 = zero2;
93723
93724 function toHex(msg) {
93725 var res = '';
93726 for (var i = 0; i < msg.length; i++)
93727 res += zero2(msg[i].toString(16));
93728 return res;
93729 }
93730 utils.toHex = toHex;
93731
93732 utils.encode = function encode(arr, enc) {
93733 if (enc === 'hex')
93734 return toHex(arr);
93735 else
93736 return arr;
93737 };
93738
93739 // Represent num in a w-NAF form
93740 function getNAF(num, w) {
93741 var naf = [];
93742 var ws = 1 << (w + 1);
93743 var k = num.clone();
93744 while (k.cmpn(1) >= 0) {
93745 var z;
93746 if (k.isOdd()) {
93747 var mod = k.andln(ws - 1);
93748 if (mod > (ws >> 1) - 1)
93749 z = (ws >> 1) - mod;
93750 else
93751 z = mod;
93752 k.isubn(z);
93753 } else {
93754 z = 0;
93755 }
93756 naf.push(z);
93757
93758 // Optimization, shift by word if possible
93759 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
93760 for (var i = 1; i < shift; i++)
93761 naf.push(0);
93762 k.iushrn(shift);
93763 }
93764
93765 return naf;
93766 }
93767 utils.getNAF = getNAF;
93768
93769 // Represent k1, k2 in a Joint Sparse Form
93770 function getJSF(k1, k2) {
93771 var jsf = [
93772 [],
93773 []
93774 ];
93775
93776 k1 = k1.clone();
93777 k2 = k2.clone();
93778 var d1 = 0;
93779 var d2 = 0;
93780 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
93781
93782 // First phase
93783 var m14 = (k1.andln(3) + d1) & 3;
93784 var m24 = (k2.andln(3) + d2) & 3;
93785 if (m14 === 3)
93786 m14 = -1;
93787 if (m24 === 3)
93788 m24 = -1;
93789 var u1;
93790 if ((m14 & 1) === 0) {
93791 u1 = 0;
93792 } else {
93793 var m8 = (k1.andln(7) + d1) & 7;
93794 if ((m8 === 3 || m8 === 5) && m24 === 2)
93795 u1 = -m14;
93796 else
93797 u1 = m14;
93798 }
93799 jsf[0].push(u1);
93800
93801 var u2;
93802 if ((m24 & 1) === 0) {
93803 u2 = 0;
93804 } else {
93805 var m8 = (k2.andln(7) + d2) & 7;
93806 if ((m8 === 3 || m8 === 5) && m14 === 2)
93807 u2 = -m24;
93808 else
93809 u2 = m24;
93810 }
93811 jsf[1].push(u2);
93812
93813 // Second phase
93814 if (2 * d1 === u1 + 1)
93815 d1 = 1 - d1;
93816 if (2 * d2 === u2 + 1)
93817 d2 = 1 - d2;
93818 k1.iushrn(1);
93819 k2.iushrn(1);
93820 }
93821
93822 return jsf;
93823 }
93824 utils.getJSF = getJSF;
93825
93826 function cachedProperty(obj, name, computer) {
93827 var key = '_' + name;
93828 obj.prototype[name] = function cachedProperty() {
93829 return this[key] !== undefined ? this[key] :
93830 this[key] = computer.call(this);
93831 };
93832 }
93833 utils.cachedProperty = cachedProperty;
93834
93835 function parseBytes(bytes) {
93836 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
93837 bytes;
93838 }
93839 utils.parseBytes = parseBytes;
93840
93841 function intFromLE(bytes) {
93842 return new BN(bytes, 'hex', 'le');
93843 }
93844 utils.intFromLE = intFromLE;
93845
93846
93847 },{"bn.js":33}],55:[function(require,module,exports){
93848 module.exports={
93849 "_args": [
93850 [
93851 {
93852 "raw": "elliptic@^6.2.3",
93853 "scope": null,
93854 "escapedName": "elliptic",
93855 "name": "elliptic",
93856 "rawSpec": "^6.2.3",
93857 "spec": ">=6.2.3 <7.0.0",
93858 "type": "range"
93859 },
93860 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
93861 ]
93862 ],
93863 "_from": "elliptic@>=6.2.3 <7.0.0",
93864 "_id": "elliptic@6.3.3",
93865 "_inCache": true,
93866 "_location": "/elliptic",
93867 "_nodeVersion": "7.0.0",
93868 "_npmOperationalInternal": {
93869 "host": "packages-18-east.internal.npmjs.com",
93870 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
93871 },
93872 "_npmUser": {
93873 "name": "indutny",
93874 "email": "fedor@indutny.com"
93875 },
93876 "_npmVersion": "3.10.8",
93877 "_phantomChildren": {},
93878 "_requested": {
93879 "raw": "elliptic@^6.2.3",
93880 "scope": null,
93881 "escapedName": "elliptic",
93882 "name": "elliptic",
93883 "rawSpec": "^6.2.3",
93884 "spec": ">=6.2.3 <7.0.0",
93885 "type": "range"
93886 },
93887 "_requiredBy": [
93888 "/browserify-sign",
93889 "/create-ecdh",
93890 "/secp256k1"
93891 ],
93892 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
93893 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
93894 "_shrinkwrap": null,
93895 "_spec": "elliptic@^6.2.3",
93896 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
93897 "author": {
93898 "name": "Fedor Indutny",
93899 "email": "fedor@indutny.com"
93900 },
93901 "bugs": {
93902 "url": "https://github.com/indutny/elliptic/issues"
93903 },
93904 "dependencies": {
93905 "bn.js": "^4.4.0",
93906 "brorand": "^1.0.1",
93907 "hash.js": "^1.0.0",
93908 "inherits": "^2.0.1"
93909 },
93910 "description": "EC cryptography",
93911 "devDependencies": {
93912 "brfs": "^1.4.3",
93913 "coveralls": "^2.11.3",
93914 "grunt": "^0.4.5",
93915 "grunt-browserify": "^5.0.0",
93916 "grunt-cli": "^1.2.0",
93917 "grunt-contrib-connect": "^1.0.0",
93918 "grunt-contrib-copy": "^1.0.0",
93919 "grunt-contrib-uglify": "^1.0.1",
93920 "grunt-mocha-istanbul": "^3.0.1",
93921 "grunt-saucelabs": "^8.6.2",
93922 "istanbul": "^0.4.2",
93923 "jscs": "^2.9.0",
93924 "jshint": "^2.6.0",
93925 "mocha": "^2.1.0"
93926 },
93927 "directories": {},
93928 "dist": {
93929 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
93930 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
93931 },
93932 "files": [
93933 "lib"
93934 ],
93935 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
93936 "homepage": "https://github.com/indutny/elliptic",
93937 "keywords": [
93938 "EC",
93939 "Elliptic",
93940 "curve",
93941 "Cryptography"
93942 ],
93943 "license": "MIT",
93944 "main": "lib/elliptic.js",
93945 "maintainers": [
93946 {
93947 "name": "indutny",
93948 "email": "fedor@indutny.com"
93949 }
93950 ],
93951 "name": "elliptic",
93952 "optionalDependencies": {},
93953 "readme": "ERROR: No README data found!",
93954 "repository": {
93955 "type": "git",
93956 "url": "git+ssh://git@github.com/indutny/elliptic.git"
93957 },
93958 "scripts": {
93959 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
93960 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
93961 "lint": "npm run jscs && npm run jshint",
93962 "test": "npm run lint && npm run unit",
93963 "unit": "istanbul test _mocha --reporter=spec test/index.js",
93964 "version": "grunt dist && git add dist/"
93965 },
93966 "version": "6.3.3"
93967 }
93968
93969 },{}],56:[function(require,module,exports){
93970 (function (Buffer){
93971 'use strict';
93972
93973 var isHexPrefixed = require('is-hex-prefixed');
93974 var stripHexPrefix = require('strip-hex-prefix');
93975
93976 /**
93977 * Pads a `String` to have an even length
93978 * @param {String} value
93979 * @return {String} output
93980 */
93981 function padToEven(value) {
93982 var a = value; // eslint-disable-line
93983
93984 if (typeof a !== 'string') {
93985 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
93986 }
93987
93988 if (a.length % 2) {
93989 a = '0' + a;
93990 }
93991
93992 return a;
93993 }
93994
93995 /**
93996 * Converts a `Number` into a hex `String`
93997 * @param {Number} i
93998 * @return {String}
93999 */
94000 function intToHex(i) {
94001 var hex = i.toString(16); // eslint-disable-line
94002
94003 return '0x' + padToEven(hex);
94004 }
94005
94006 /**
94007 * Converts an `Number` to a `Buffer`
94008 * @param {Number} i
94009 * @return {Buffer}
94010 */
94011 function intToBuffer(i) {
94012 var hex = intToHex(i);
94013
94014 return new Buffer(hex.slice(2), 'hex');
94015 }
94016
94017 /**
94018 * Get the binary size of a string
94019 * @param {String} str
94020 * @return {Number}
94021 */
94022 function getBinarySize(str) {
94023 if (typeof str !== 'string') {
94024 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
94025 }
94026
94027 return Buffer.byteLength(str, 'utf8');
94028 }
94029
94030 /**
94031 * Returns TRUE if the first specified array contains all elements
94032 * from the second one. FALSE otherwise.
94033 *
94034 * @param {array} superset
94035 * @param {array} subset
94036 *
94037 * @returns {boolean}
94038 */
94039 function arrayContainsArray(superset, subset, some) {
94040 if (Array.isArray(superset) !== true) {
94041 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
94042 }
94043 if (Array.isArray(subset) !== true) {
94044 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
94045 }
94046
94047 return subset[Boolean(some) && 'some' || 'every'](function (value) {
94048 return superset.indexOf(value) >= 0;
94049 });
94050 }
94051
94052 /**
94053 * Should be called to get utf8 from it's hex representation
94054 *
94055 * @method toUtf8
94056 * @param {String} string in hex
94057 * @returns {String} ascii string representation of hex value
94058 */
94059 function toUtf8(hex) {
94060 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
94061
94062 return bufferValue.toString('utf8');
94063 }
94064
94065 /**
94066 * Should be called to get ascii from it's hex representation
94067 *
94068 * @method toAscii
94069 * @param {String} string in hex
94070 * @returns {String} ascii string representation of hex value
94071 */
94072 function toAscii(hex) {
94073 var str = ''; // eslint-disable-line
94074 var i = 0,
94075 l = hex.length; // eslint-disable-line
94076
94077 if (hex.substring(0, 2) === '0x') {
94078 i = 2;
94079 }
94080
94081 for (; i < l; i += 2) {
94082 var code = parseInt(hex.substr(i, 2), 16);
94083 str += String.fromCharCode(code);
94084 }
94085
94086 return str;
94087 }
94088
94089 /**
94090 * Should be called to get hex representation (prefixed by 0x) of utf8 string
94091 *
94092 * @method fromUtf8
94093 * @param {String} string
94094 * @param {Number} optional padding
94095 * @returns {String} hex representation of input string
94096 */
94097 function fromUtf8(stringValue) {
94098 var str = new Buffer(stringValue, 'utf8');
94099
94100 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
94101 }
94102
94103 /**
94104 * Should be called to get hex representation (prefixed by 0x) of ascii string
94105 *
94106 * @method fromAscii
94107 * @param {String} string
94108 * @param {Number} optional padding
94109 * @returns {String} hex representation of input string
94110 */
94111 function fromAscii(stringValue) {
94112 var hex = ''; // eslint-disable-line
94113 for (var i = 0; i < stringValue.length; i++) {
94114 // eslint-disable-line
94115 var code = stringValue.charCodeAt(i);
94116 var n = code.toString(16);
94117 hex += n.length < 2 ? '0' + n : n;
94118 }
94119
94120 return '0x' + hex;
94121 }
94122
94123 /**
94124 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
94125 *
94126 * @method getKeys get specific key from inner object array of objects
94127 * @param {String} params
94128 * @param {String} key
94129 * @param {Boolean} allowEmpty
94130 * @returns {Array} output just a simple array of output keys
94131 */
94132 function getKeys(params, key, allowEmpty) {
94133 if (!Array.isArray(params)) {
94134 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
94135 }
94136 if (typeof key !== 'string') {
94137 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
94138 }
94139
94140 var result = []; // eslint-disable-line
94141
94142 for (var i = 0; i < params.length; i++) {
94143 // eslint-disable-line
94144 var value = params[i][key]; // eslint-disable-line
94145 if (allowEmpty && !value) {
94146 value = '';
94147 } else if (typeof value !== 'string') {
94148 throw new Error('invalid abi');
94149 }
94150 result.push(value);
94151 }
94152
94153 return result;
94154 }
94155
94156 /**
94157 * Is the string a hex string.
94158 *
94159 * @method check if string is hex string of specific length
94160 * @param {String} value
94161 * @param {Number} length
94162 * @returns {Boolean} output the string is a hex string
94163 */
94164 function isHexString(value, length) {
94165 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
94166 return false;
94167 }
94168
94169 if (length && value.length !== 2 + 2 * length) {
94170 return false;
94171 }
94172
94173 return true;
94174 }
94175
94176 module.exports = {
94177 arrayContainsArray: arrayContainsArray,
94178 intToBuffer: intToBuffer,
94179 getBinarySize: getBinarySize,
94180 isHexPrefixed: isHexPrefixed,
94181 stripHexPrefix: stripHexPrefix,
94182 padToEven: padToEven,
94183 intToHex: intToHex,
94184 fromAscii: fromAscii,
94185 fromUtf8: fromUtf8,
94186 toAscii: toAscii,
94187 toUtf8: toUtf8,
94188 getKeys: getKeys,
94189 isHexString: isHexString
94190 };
94191 }).call(this,require("buffer").Buffer)
94192 },{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
94193 var hash = exports;
94194
94195 hash.utils = require('./hash/utils');
94196 hash.common = require('./hash/common');
94197 hash.sha = require('./hash/sha');
94198 hash.ripemd = require('./hash/ripemd');
94199 hash.hmac = require('./hash/hmac');
94200
94201 // Proxy hash functions to the main object
94202 hash.sha1 = hash.sha.sha1;
94203 hash.sha256 = hash.sha.sha256;
94204 hash.sha224 = hash.sha.sha224;
94205 hash.sha384 = hash.sha.sha384;
94206 hash.sha512 = hash.sha.sha512;
94207 hash.ripemd160 = hash.ripemd.ripemd160;
94208
94209 },{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
94210 var hash = require('../hash');
94211 var utils = hash.utils;
94212 var assert = utils.assert;
94213
94214 function BlockHash() {
94215 this.pending = null;
94216 this.pendingTotal = 0;
94217 this.blockSize = this.constructor.blockSize;
94218 this.outSize = this.constructor.outSize;
94219 this.hmacStrength = this.constructor.hmacStrength;
94220 this.padLength = this.constructor.padLength / 8;
94221 this.endian = 'big';
94222
94223 this._delta8 = this.blockSize / 8;
94224 this._delta32 = this.blockSize / 32;
94225 }
94226 exports.BlockHash = BlockHash;
94227
94228 BlockHash.prototype.update = function update(msg, enc) {
94229 // Convert message to array, pad it, and join into 32bit blocks
94230 msg = utils.toArray(msg, enc);
94231 if (!this.pending)
94232 this.pending = msg;
94233 else
94234 this.pending = this.pending.concat(msg);
94235 this.pendingTotal += msg.length;
94236
94237 // Enough data, try updating
94238 if (this.pending.length >= this._delta8) {
94239 msg = this.pending;
94240
94241 // Process pending data in blocks
94242 var r = msg.length % this._delta8;
94243 this.pending = msg.slice(msg.length - r, msg.length);
94244 if (this.pending.length === 0)
94245 this.pending = null;
94246
94247 msg = utils.join32(msg, 0, msg.length - r, this.endian);
94248 for (var i = 0; i < msg.length; i += this._delta32)
94249 this._update(msg, i, i + this._delta32);
94250 }
94251
94252 return this;
94253 };
94254
94255 BlockHash.prototype.digest = function digest(enc) {
94256 this.update(this._pad());
94257 assert(this.pending === null);
94258
94259 return this._digest(enc);
94260 };
94261
94262 BlockHash.prototype._pad = function pad() {
94263 var len = this.pendingTotal;
94264 var bytes = this._delta8;
94265 var k = bytes - ((len + this.padLength) % bytes);
94266 var res = new Array(k + this.padLength);
94267 res[0] = 0x80;
94268 for (var i = 1; i < k; i++)
94269 res[i] = 0;
94270
94271 // Append length
94272 len <<= 3;
94273 if (this.endian === 'big') {
94274 for (var t = 8; t < this.padLength; t++)
94275 res[i++] = 0;
94276
94277 res[i++] = 0;
94278 res[i++] = 0;
94279 res[i++] = 0;
94280 res[i++] = 0;
94281 res[i++] = (len >>> 24) & 0xff;
94282 res[i++] = (len >>> 16) & 0xff;
94283 res[i++] = (len >>> 8) & 0xff;
94284 res[i++] = len & 0xff;
94285 } else {
94286 res[i++] = len & 0xff;
94287 res[i++] = (len >>> 8) & 0xff;
94288 res[i++] = (len >>> 16) & 0xff;
94289 res[i++] = (len >>> 24) & 0xff;
94290 res[i++] = 0;
94291 res[i++] = 0;
94292 res[i++] = 0;
94293 res[i++] = 0;
94294
94295 for (var t = 8; t < this.padLength; t++)
94296 res[i++] = 0;
94297 }
94298
94299 return res;
94300 };
94301
94302 },{"../hash":57}],59:[function(require,module,exports){
94303 var hmac = exports;
94304
94305 var hash = require('../hash');
94306 var utils = hash.utils;
94307 var assert = utils.assert;
94308
94309 function Hmac(hash, key, enc) {
94310 if (!(this instanceof Hmac))
94311 return new Hmac(hash, key, enc);
94312 this.Hash = hash;
94313 this.blockSize = hash.blockSize / 8;
94314 this.outSize = hash.outSize / 8;
94315 this.inner = null;
94316 this.outer = null;
94317
94318 this._init(utils.toArray(key, enc));
94319 }
94320 module.exports = Hmac;
94321
94322 Hmac.prototype._init = function init(key) {
94323 // Shorten key, if needed
94324 if (key.length > this.blockSize)
94325 key = new this.Hash().update(key).digest();
94326 assert(key.length <= this.blockSize);
94327
94328 // Add padding to key
94329 for (var i = key.length; i < this.blockSize; i++)
94330 key.push(0);
94331
94332 for (var i = 0; i < key.length; i++)
94333 key[i] ^= 0x36;
94334 this.inner = new this.Hash().update(key);
94335
94336 // 0x36 ^ 0x5c = 0x6a
94337 for (var i = 0; i < key.length; i++)
94338 key[i] ^= 0x6a;
94339 this.outer = new this.Hash().update(key);
94340 };
94341
94342 Hmac.prototype.update = function update(msg, enc) {
94343 this.inner.update(msg, enc);
94344 return this;
94345 };
94346
94347 Hmac.prototype.digest = function digest(enc) {
94348 this.outer.update(this.inner.digest());
94349 return this.outer.digest(enc);
94350 };
94351
94352 },{"../hash":57}],60:[function(require,module,exports){
94353 var hash = require('../hash');
94354 var utils = hash.utils;
94355
94356 var rotl32 = utils.rotl32;
94357 var sum32 = utils.sum32;
94358 var sum32_3 = utils.sum32_3;
94359 var sum32_4 = utils.sum32_4;
94360 var BlockHash = hash.common.BlockHash;
94361
94362 function RIPEMD160() {
94363 if (!(this instanceof RIPEMD160))
94364 return new RIPEMD160();
94365
94366 BlockHash.call(this);
94367
94368 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
94369 this.endian = 'little';
94370 }
94371 utils.inherits(RIPEMD160, BlockHash);
94372 exports.ripemd160 = RIPEMD160;
94373
94374 RIPEMD160.blockSize = 512;
94375 RIPEMD160.outSize = 160;
94376 RIPEMD160.hmacStrength = 192;
94377 RIPEMD160.padLength = 64;
94378
94379 RIPEMD160.prototype._update = function update(msg, start) {
94380 var A = this.h[0];
94381 var B = this.h[1];
94382 var C = this.h[2];
94383 var D = this.h[3];
94384 var E = this.h[4];
94385 var Ah = A;
94386 var Bh = B;
94387 var Ch = C;
94388 var Dh = D;
94389 var Eh = E;
94390 for (var j = 0; j < 80; j++) {
94391 var T = sum32(
94392 rotl32(
94393 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
94394 s[j]),
94395 E);
94396 A = E;
94397 E = D;
94398 D = rotl32(C, 10);
94399 C = B;
94400 B = T;
94401 T = sum32(
94402 rotl32(
94403 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
94404 sh[j]),
94405 Eh);
94406 Ah = Eh;
94407 Eh = Dh;
94408 Dh = rotl32(Ch, 10);
94409 Ch = Bh;
94410 Bh = T;
94411 }
94412 T = sum32_3(this.h[1], C, Dh);
94413 this.h[1] = sum32_3(this.h[2], D, Eh);
94414 this.h[2] = sum32_3(this.h[3], E, Ah);
94415 this.h[3] = sum32_3(this.h[4], A, Bh);
94416 this.h[4] = sum32_3(this.h[0], B, Ch);
94417 this.h[0] = T;
94418 };
94419
94420 RIPEMD160.prototype._digest = function digest(enc) {
94421 if (enc === 'hex')
94422 return utils.toHex32(this.h, 'little');
94423 else
94424 return utils.split32(this.h, 'little');
94425 };
94426
94427 function f(j, x, y, z) {
94428 if (j <= 15)
94429 return x ^ y ^ z;
94430 else if (j <= 31)
94431 return (x & y) | ((~x) & z);
94432 else if (j <= 47)
94433 return (x | (~y)) ^ z;
94434 else if (j <= 63)
94435 return (x & z) | (y & (~z));
94436 else
94437 return x ^ (y | (~z));
94438 }
94439
94440 function K(j) {
94441 if (j <= 15)
94442 return 0x00000000;
94443 else if (j <= 31)
94444 return 0x5a827999;
94445 else if (j <= 47)
94446 return 0x6ed9eba1;
94447 else if (j <= 63)
94448 return 0x8f1bbcdc;
94449 else
94450 return 0xa953fd4e;
94451 }
94452
94453 function Kh(j) {
94454 if (j <= 15)
94455 return 0x50a28be6;
94456 else if (j <= 31)
94457 return 0x5c4dd124;
94458 else if (j <= 47)
94459 return 0x6d703ef3;
94460 else if (j <= 63)
94461 return 0x7a6d76e9;
94462 else
94463 return 0x00000000;
94464 }
94465
94466 var r = [
94467 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
94468 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
94469 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
94470 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
94471 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
94472 ];
94473
94474 var rh = [
94475 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
94476 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
94477 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
94478 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
94479 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
94480 ];
94481
94482 var s = [
94483 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
94484 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
94485 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
94486 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
94487 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
94488 ];
94489
94490 var sh = [
94491 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
94492 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
94493 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
94494 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
94495 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
94496 ];
94497
94498 },{"../hash":57}],61:[function(require,module,exports){
94499 var hash = require('../hash');
94500 var utils = hash.utils;
94501 var assert = utils.assert;
94502
94503 var rotr32 = utils.rotr32;
94504 var rotl32 = utils.rotl32;
94505 var sum32 = utils.sum32;
94506 var sum32_4 = utils.sum32_4;
94507 var sum32_5 = utils.sum32_5;
94508 var rotr64_hi = utils.rotr64_hi;
94509 var rotr64_lo = utils.rotr64_lo;
94510 var shr64_hi = utils.shr64_hi;
94511 var shr64_lo = utils.shr64_lo;
94512 var sum64 = utils.sum64;
94513 var sum64_hi = utils.sum64_hi;
94514 var sum64_lo = utils.sum64_lo;
94515 var sum64_4_hi = utils.sum64_4_hi;
94516 var sum64_4_lo = utils.sum64_4_lo;
94517 var sum64_5_hi = utils.sum64_5_hi;
94518 var sum64_5_lo = utils.sum64_5_lo;
94519 var BlockHash = hash.common.BlockHash;
94520
94521 var sha256_K = [
94522 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
94523 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
94524 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
94525 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
94526 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
94527 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
94528 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
94529 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
94530 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
94531 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
94532 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
94533 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
94534 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
94535 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
94536 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
94537 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
94538 ];
94539
94540 var sha512_K = [
94541 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
94542 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
94543 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
94544 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
94545 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
94546 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
94547 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
94548 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
94549 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
94550 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
94551 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
94552 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
94553 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
94554 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
94555 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
94556 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
94557 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
94558 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
94559 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
94560 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
94561 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
94562 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
94563 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
94564 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
94565 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
94566 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
94567 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
94568 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
94569 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
94570 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
94571 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
94572 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
94573 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
94574 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
94575 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
94576 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
94577 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
94578 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
94579 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
94580 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
94581 ];
94582
94583 var sha1_K = [
94584 0x5A827999, 0x6ED9EBA1,
94585 0x8F1BBCDC, 0xCA62C1D6
94586 ];
94587
94588 function SHA256() {
94589 if (!(this instanceof SHA256))
94590 return new SHA256();
94591
94592 BlockHash.call(this);
94593 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
94594 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
94595 this.k = sha256_K;
94596 this.W = new Array(64);
94597 }
94598 utils.inherits(SHA256, BlockHash);
94599 exports.sha256 = SHA256;
94600
94601 SHA256.blockSize = 512;
94602 SHA256.outSize = 256;
94603 SHA256.hmacStrength = 192;
94604 SHA256.padLength = 64;
94605
94606 SHA256.prototype._update = function _update(msg, start) {
94607 var W = this.W;
94608
94609 for (var i = 0; i < 16; i++)
94610 W[i] = msg[start + i];
94611 for (; i < W.length; i++)
94612 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
94613
94614 var a = this.h[0];
94615 var b = this.h[1];
94616 var c = this.h[2];
94617 var d = this.h[3];
94618 var e = this.h[4];
94619 var f = this.h[5];
94620 var g = this.h[6];
94621 var h = this.h[7];
94622
94623 assert(this.k.length === W.length);
94624 for (var i = 0; i < W.length; i++) {
94625 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
94626 var T2 = sum32(s0_256(a), maj32(a, b, c));
94627 h = g;
94628 g = f;
94629 f = e;
94630 e = sum32(d, T1);
94631 d = c;
94632 c = b;
94633 b = a;
94634 a = sum32(T1, T2);
94635 }
94636
94637 this.h[0] = sum32(this.h[0], a);
94638 this.h[1] = sum32(this.h[1], b);
94639 this.h[2] = sum32(this.h[2], c);
94640 this.h[3] = sum32(this.h[3], d);
94641 this.h[4] = sum32(this.h[4], e);
94642 this.h[5] = sum32(this.h[5], f);
94643 this.h[6] = sum32(this.h[6], g);
94644 this.h[7] = sum32(this.h[7], h);
94645 };
94646
94647 SHA256.prototype._digest = function digest(enc) {
94648 if (enc === 'hex')
94649 return utils.toHex32(this.h, 'big');
94650 else
94651 return utils.split32(this.h, 'big');
94652 };
94653
94654 function SHA224() {
94655 if (!(this instanceof SHA224))
94656 return new SHA224();
94657
94658 SHA256.call(this);
94659 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
94660 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
94661 }
94662 utils.inherits(SHA224, SHA256);
94663 exports.sha224 = SHA224;
94664
94665 SHA224.blockSize = 512;
94666 SHA224.outSize = 224;
94667 SHA224.hmacStrength = 192;
94668 SHA224.padLength = 64;
94669
94670 SHA224.prototype._digest = function digest(enc) {
94671 // Just truncate output
94672 if (enc === 'hex')
94673 return utils.toHex32(this.h.slice(0, 7), 'big');
94674 else
94675 return utils.split32(this.h.slice(0, 7), 'big');
94676 };
94677
94678 function SHA512() {
94679 if (!(this instanceof SHA512))
94680 return new SHA512();
94681
94682 BlockHash.call(this);
94683 this.h = [ 0x6a09e667, 0xf3bcc908,
94684 0xbb67ae85, 0x84caa73b,
94685 0x3c6ef372, 0xfe94f82b,
94686 0xa54ff53a, 0x5f1d36f1,
94687 0x510e527f, 0xade682d1,
94688 0x9b05688c, 0x2b3e6c1f,
94689 0x1f83d9ab, 0xfb41bd6b,
94690 0x5be0cd19, 0x137e2179 ];
94691 this.k = sha512_K;
94692 this.W = new Array(160);
94693 }
94694 utils.inherits(SHA512, BlockHash);
94695 exports.sha512 = SHA512;
94696
94697 SHA512.blockSize = 1024;
94698 SHA512.outSize = 512;
94699 SHA512.hmacStrength = 192;
94700 SHA512.padLength = 128;
94701
94702 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
94703 var W = this.W;
94704
94705 // 32 x 32bit words
94706 for (var i = 0; i < 32; i++)
94707 W[i] = msg[start + i];
94708 for (; i < W.length; i += 2) {
94709 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
94710 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
94711 var c1_hi = W[i - 14]; // i - 7
94712 var c1_lo = W[i - 13];
94713 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
94714 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
94715 var c3_hi = W[i - 32]; // i - 16
94716 var c3_lo = W[i - 31];
94717
94718 W[i] = sum64_4_hi(c0_hi, c0_lo,
94719 c1_hi, c1_lo,
94720 c2_hi, c2_lo,
94721 c3_hi, c3_lo);
94722 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
94723 c1_hi, c1_lo,
94724 c2_hi, c2_lo,
94725 c3_hi, c3_lo);
94726 }
94727 };
94728
94729 SHA512.prototype._update = function _update(msg, start) {
94730 this._prepareBlock(msg, start);
94731
94732 var W = this.W;
94733
94734 var ah = this.h[0];
94735 var al = this.h[1];
94736 var bh = this.h[2];
94737 var bl = this.h[3];
94738 var ch = this.h[4];
94739 var cl = this.h[5];
94740 var dh = this.h[6];
94741 var dl = this.h[7];
94742 var eh = this.h[8];
94743 var el = this.h[9];
94744 var fh = this.h[10];
94745 var fl = this.h[11];
94746 var gh = this.h[12];
94747 var gl = this.h[13];
94748 var hh = this.h[14];
94749 var hl = this.h[15];
94750
94751 assert(this.k.length === W.length);
94752 for (var i = 0; i < W.length; i += 2) {
94753 var c0_hi = hh;
94754 var c0_lo = hl;
94755 var c1_hi = s1_512_hi(eh, el);
94756 var c1_lo = s1_512_lo(eh, el);
94757 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
94758 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
94759 var c3_hi = this.k[i];
94760 var c3_lo = this.k[i + 1];
94761 var c4_hi = W[i];
94762 var c4_lo = W[i + 1];
94763
94764 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
94765 c1_hi, c1_lo,
94766 c2_hi, c2_lo,
94767 c3_hi, c3_lo,
94768 c4_hi, c4_lo);
94769 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
94770 c1_hi, c1_lo,
94771 c2_hi, c2_lo,
94772 c3_hi, c3_lo,
94773 c4_hi, c4_lo);
94774
94775 var c0_hi = s0_512_hi(ah, al);
94776 var c0_lo = s0_512_lo(ah, al);
94777 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
94778 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
94779
94780 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
94781 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
94782
94783 hh = gh;
94784 hl = gl;
94785
94786 gh = fh;
94787 gl = fl;
94788
94789 fh = eh;
94790 fl = el;
94791
94792 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
94793 el = sum64_lo(dl, dl, T1_hi, T1_lo);
94794
94795 dh = ch;
94796 dl = cl;
94797
94798 ch = bh;
94799 cl = bl;
94800
94801 bh = ah;
94802 bl = al;
94803
94804 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
94805 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
94806 }
94807
94808 sum64(this.h, 0, ah, al);
94809 sum64(this.h, 2, bh, bl);
94810 sum64(this.h, 4, ch, cl);
94811 sum64(this.h, 6, dh, dl);
94812 sum64(this.h, 8, eh, el);
94813 sum64(this.h, 10, fh, fl);
94814 sum64(this.h, 12, gh, gl);
94815 sum64(this.h, 14, hh, hl);
94816 };
94817
94818 SHA512.prototype._digest = function digest(enc) {
94819 if (enc === 'hex')
94820 return utils.toHex32(this.h, 'big');
94821 else
94822 return utils.split32(this.h, 'big');
94823 };
94824
94825 function SHA384() {
94826 if (!(this instanceof SHA384))
94827 return new SHA384();
94828
94829 SHA512.call(this);
94830 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
94831 0x629a292a, 0x367cd507,
94832 0x9159015a, 0x3070dd17,
94833 0x152fecd8, 0xf70e5939,
94834 0x67332667, 0xffc00b31,
94835 0x8eb44a87, 0x68581511,
94836 0xdb0c2e0d, 0x64f98fa7,
94837 0x47b5481d, 0xbefa4fa4 ];
94838 }
94839 utils.inherits(SHA384, SHA512);
94840 exports.sha384 = SHA384;
94841
94842 SHA384.blockSize = 1024;
94843 SHA384.outSize = 384;
94844 SHA384.hmacStrength = 192;
94845 SHA384.padLength = 128;
94846
94847 SHA384.prototype._digest = function digest(enc) {
94848 if (enc === 'hex')
94849 return utils.toHex32(this.h.slice(0, 12), 'big');
94850 else
94851 return utils.split32(this.h.slice(0, 12), 'big');
94852 };
94853
94854 function SHA1() {
94855 if (!(this instanceof SHA1))
94856 return new SHA1();
94857
94858 BlockHash.call(this);
94859 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
94860 0x10325476, 0xc3d2e1f0 ];
94861 this.W = new Array(80);
94862 }
94863
94864 utils.inherits(SHA1, BlockHash);
94865 exports.sha1 = SHA1;
94866
94867 SHA1.blockSize = 512;
94868 SHA1.outSize = 160;
94869 SHA1.hmacStrength = 80;
94870 SHA1.padLength = 64;
94871
94872 SHA1.prototype._update = function _update(msg, start) {
94873 var W = this.W;
94874
94875 for (var i = 0; i < 16; i++)
94876 W[i] = msg[start + i];
94877
94878 for(; i < W.length; i++)
94879 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
94880
94881 var a = this.h[0];
94882 var b = this.h[1];
94883 var c = this.h[2];
94884 var d = this.h[3];
94885 var e = this.h[4];
94886
94887 for (var i = 0; i < W.length; i++) {
94888 var s = ~~(i / 20);
94889 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
94890 e = d;
94891 d = c;
94892 c = rotl32(b, 30);
94893 b = a;
94894 a = t;
94895 }
94896
94897 this.h[0] = sum32(this.h[0], a);
94898 this.h[1] = sum32(this.h[1], b);
94899 this.h[2] = sum32(this.h[2], c);
94900 this.h[3] = sum32(this.h[3], d);
94901 this.h[4] = sum32(this.h[4], e);
94902 };
94903
94904 SHA1.prototype._digest = function digest(enc) {
94905 if (enc === 'hex')
94906 return utils.toHex32(this.h, 'big');
94907 else
94908 return utils.split32(this.h, 'big');
94909 };
94910
94911 function ch32(x, y, z) {
94912 return (x & y) ^ ((~x) & z);
94913 }
94914
94915 function maj32(x, y, z) {
94916 return (x & y) ^ (x & z) ^ (y & z);
94917 }
94918
94919 function p32(x, y, z) {
94920 return x ^ y ^ z;
94921 }
94922
94923 function s0_256(x) {
94924 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
94925 }
94926
94927 function s1_256(x) {
94928 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
94929 }
94930
94931 function g0_256(x) {
94932 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
94933 }
94934
94935 function g1_256(x) {
94936 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
94937 }
94938
94939 function ft_1(s, x, y, z) {
94940 if (s === 0)
94941 return ch32(x, y, z);
94942 if (s === 1 || s === 3)
94943 return p32(x, y, z);
94944 if (s === 2)
94945 return maj32(x, y, z);
94946 }
94947
94948 function ch64_hi(xh, xl, yh, yl, zh, zl) {
94949 var r = (xh & yh) ^ ((~xh) & zh);
94950 if (r < 0)
94951 r += 0x100000000;
94952 return r;
94953 }
94954
94955 function ch64_lo(xh, xl, yh, yl, zh, zl) {
94956 var r = (xl & yl) ^ ((~xl) & zl);
94957 if (r < 0)
94958 r += 0x100000000;
94959 return r;
94960 }
94961
94962 function maj64_hi(xh, xl, yh, yl, zh, zl) {
94963 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
94964 if (r < 0)
94965 r += 0x100000000;
94966 return r;
94967 }
94968
94969 function maj64_lo(xh, xl, yh, yl, zh, zl) {
94970 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
94971 if (r < 0)
94972 r += 0x100000000;
94973 return r;
94974 }
94975
94976 function s0_512_hi(xh, xl) {
94977 var c0_hi = rotr64_hi(xh, xl, 28);
94978 var c1_hi = rotr64_hi(xl, xh, 2); // 34
94979 var c2_hi = rotr64_hi(xl, xh, 7); // 39
94980
94981 var r = c0_hi ^ c1_hi ^ c2_hi;
94982 if (r < 0)
94983 r += 0x100000000;
94984 return r;
94985 }
94986
94987 function s0_512_lo(xh, xl) {
94988 var c0_lo = rotr64_lo(xh, xl, 28);
94989 var c1_lo = rotr64_lo(xl, xh, 2); // 34
94990 var c2_lo = rotr64_lo(xl, xh, 7); // 39
94991
94992 var r = c0_lo ^ c1_lo ^ c2_lo;
94993 if (r < 0)
94994 r += 0x100000000;
94995 return r;
94996 }
94997
94998 function s1_512_hi(xh, xl) {
94999 var c0_hi = rotr64_hi(xh, xl, 14);
95000 var c1_hi = rotr64_hi(xh, xl, 18);
95001 var c2_hi = rotr64_hi(xl, xh, 9); // 41
95002
95003 var r = c0_hi ^ c1_hi ^ c2_hi;
95004 if (r < 0)
95005 r += 0x100000000;
95006 return r;
95007 }
95008
95009 function s1_512_lo(xh, xl) {
95010 var c0_lo = rotr64_lo(xh, xl, 14);
95011 var c1_lo = rotr64_lo(xh, xl, 18);
95012 var c2_lo = rotr64_lo(xl, xh, 9); // 41
95013
95014 var r = c0_lo ^ c1_lo ^ c2_lo;
95015 if (r < 0)
95016 r += 0x100000000;
95017 return r;
95018 }
95019
95020 function g0_512_hi(xh, xl) {
95021 var c0_hi = rotr64_hi(xh, xl, 1);
95022 var c1_hi = rotr64_hi(xh, xl, 8);
95023 var c2_hi = shr64_hi(xh, xl, 7);
95024
95025 var r = c0_hi ^ c1_hi ^ c2_hi;
95026 if (r < 0)
95027 r += 0x100000000;
95028 return r;
95029 }
95030
95031 function g0_512_lo(xh, xl) {
95032 var c0_lo = rotr64_lo(xh, xl, 1);
95033 var c1_lo = rotr64_lo(xh, xl, 8);
95034 var c2_lo = shr64_lo(xh, xl, 7);
95035
95036 var r = c0_lo ^ c1_lo ^ c2_lo;
95037 if (r < 0)
95038 r += 0x100000000;
95039 return r;
95040 }
95041
95042 function g1_512_hi(xh, xl) {
95043 var c0_hi = rotr64_hi(xh, xl, 19);
95044 var c1_hi = rotr64_hi(xl, xh, 29); // 61
95045 var c2_hi = shr64_hi(xh, xl, 6);
95046
95047 var r = c0_hi ^ c1_hi ^ c2_hi;
95048 if (r < 0)
95049 r += 0x100000000;
95050 return r;
95051 }
95052
95053 function g1_512_lo(xh, xl) {
95054 var c0_lo = rotr64_lo(xh, xl, 19);
95055 var c1_lo = rotr64_lo(xl, xh, 29); // 61
95056 var c2_lo = shr64_lo(xh, xl, 6);
95057
95058 var r = c0_lo ^ c1_lo ^ c2_lo;
95059 if (r < 0)
95060 r += 0x100000000;
95061 return r;
95062 }
95063
95064 },{"../hash":57}],62:[function(require,module,exports){
95065 var utils = exports;
95066 var inherits = require('inherits');
95067
95068 function toArray(msg, enc) {
95069 if (Array.isArray(msg))
95070 return msg.slice();
95071 if (!msg)
95072 return [];
95073 var res = [];
95074 if (typeof msg === 'string') {
95075 if (!enc) {
95076 for (var i = 0; i < msg.length; i++) {
95077 var c = msg.charCodeAt(i);
95078 var hi = c >> 8;
95079 var lo = c & 0xff;
95080 if (hi)
95081 res.push(hi, lo);
95082 else
95083 res.push(lo);
95084 }
95085 } else if (enc === 'hex') {
95086 msg = msg.replace(/[^a-z0-9]+/ig, '');
95087 if (msg.length % 2 !== 0)
95088 msg = '0' + msg;
95089 for (var i = 0; i < msg.length; i += 2)
95090 res.push(parseInt(msg[i] + msg[i + 1], 16));
95091 }
95092 } else {
95093 for (var i = 0; i < msg.length; i++)
95094 res[i] = msg[i] | 0;
95095 }
95096 return res;
95097 }
95098 utils.toArray = toArray;
95099
95100 function toHex(msg) {
95101 var res = '';
95102 for (var i = 0; i < msg.length; i++)
95103 res += zero2(msg[i].toString(16));
95104 return res;
95105 }
95106 utils.toHex = toHex;
95107
95108 function htonl(w) {
95109 var res = (w >>> 24) |
95110 ((w >>> 8) & 0xff00) |
95111 ((w << 8) & 0xff0000) |
95112 ((w & 0xff) << 24);
95113 return res >>> 0;
95114 }
95115 utils.htonl = htonl;
95116
95117 function toHex32(msg, endian) {
95118 var res = '';
95119 for (var i = 0; i < msg.length; i++) {
95120 var w = msg[i];
95121 if (endian === 'little')
95122 w = htonl(w);
95123 res += zero8(w.toString(16));
95124 }
95125 return res;
95126 }
95127 utils.toHex32 = toHex32;
95128
95129 function zero2(word) {
95130 if (word.length === 1)
95131 return '0' + word;
95132 else
95133 return word;
95134 }
95135 utils.zero2 = zero2;
95136
95137 function zero8(word) {
95138 if (word.length === 7)
95139 return '0' + word;
95140 else if (word.length === 6)
95141 return '00' + word;
95142 else if (word.length === 5)
95143 return '000' + word;
95144 else if (word.length === 4)
95145 return '0000' + word;
95146 else if (word.length === 3)
95147 return '00000' + word;
95148 else if (word.length === 2)
95149 return '000000' + word;
95150 else if (word.length === 1)
95151 return '0000000' + word;
95152 else
95153 return word;
95154 }
95155 utils.zero8 = zero8;
95156
95157 function join32(msg, start, end, endian) {
95158 var len = end - start;
95159 assert(len % 4 === 0);
95160 var res = new Array(len / 4);
95161 for (var i = 0, k = start; i < res.length; i++, k += 4) {
95162 var w;
95163 if (endian === 'big')
95164 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
95165 else
95166 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
95167 res[i] = w >>> 0;
95168 }
95169 return res;
95170 }
95171 utils.join32 = join32;
95172
95173 function split32(msg, endian) {
95174 var res = new Array(msg.length * 4);
95175 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
95176 var m = msg[i];
95177 if (endian === 'big') {
95178 res[k] = m >>> 24;
95179 res[k + 1] = (m >>> 16) & 0xff;
95180 res[k + 2] = (m >>> 8) & 0xff;
95181 res[k + 3] = m & 0xff;
95182 } else {
95183 res[k + 3] = m >>> 24;
95184 res[k + 2] = (m >>> 16) & 0xff;
95185 res[k + 1] = (m >>> 8) & 0xff;
95186 res[k] = m & 0xff;
95187 }
95188 }
95189 return res;
95190 }
95191 utils.split32 = split32;
95192
95193 function rotr32(w, b) {
95194 return (w >>> b) | (w << (32 - b));
95195 }
95196 utils.rotr32 = rotr32;
95197
95198 function rotl32(w, b) {
95199 return (w << b) | (w >>> (32 - b));
95200 }
95201 utils.rotl32 = rotl32;
95202
95203 function sum32(a, b) {
95204 return (a + b) >>> 0;
95205 }
95206 utils.sum32 = sum32;
95207
95208 function sum32_3(a, b, c) {
95209 return (a + b + c) >>> 0;
95210 }
95211 utils.sum32_3 = sum32_3;
95212
95213 function sum32_4(a, b, c, d) {
95214 return (a + b + c + d) >>> 0;
95215 }
95216 utils.sum32_4 = sum32_4;
95217
95218 function sum32_5(a, b, c, d, e) {
95219 return (a + b + c + d + e) >>> 0;
95220 }
95221 utils.sum32_5 = sum32_5;
95222
95223 function assert(cond, msg) {
95224 if (!cond)
95225 throw new Error(msg || 'Assertion failed');
95226 }
95227 utils.assert = assert;
95228
95229 utils.inherits = inherits;
95230
95231 function sum64(buf, pos, ah, al) {
95232 var bh = buf[pos];
95233 var bl = buf[pos + 1];
95234
95235 var lo = (al + bl) >>> 0;
95236 var hi = (lo < al ? 1 : 0) + ah + bh;
95237 buf[pos] = hi >>> 0;
95238 buf[pos + 1] = lo;
95239 }
95240 exports.sum64 = sum64;
95241
95242 function sum64_hi(ah, al, bh, bl) {
95243 var lo = (al + bl) >>> 0;
95244 var hi = (lo < al ? 1 : 0) + ah + bh;
95245 return hi >>> 0;
95246 };
95247 exports.sum64_hi = sum64_hi;
95248
95249 function sum64_lo(ah, al, bh, bl) {
95250 var lo = al + bl;
95251 return lo >>> 0;
95252 };
95253 exports.sum64_lo = sum64_lo;
95254
95255 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
95256 var carry = 0;
95257 var lo = al;
95258 lo = (lo + bl) >>> 0;
95259 carry += lo < al ? 1 : 0;
95260 lo = (lo + cl) >>> 0;
95261 carry += lo < cl ? 1 : 0;
95262 lo = (lo + dl) >>> 0;
95263 carry += lo < dl ? 1 : 0;
95264
95265 var hi = ah + bh + ch + dh + carry;
95266 return hi >>> 0;
95267 };
95268 exports.sum64_4_hi = sum64_4_hi;
95269
95270 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
95271 var lo = al + bl + cl + dl;
95272 return lo >>> 0;
95273 };
95274 exports.sum64_4_lo = sum64_4_lo;
95275
95276 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
95277 var carry = 0;
95278 var lo = al;
95279 lo = (lo + bl) >>> 0;
95280 carry += lo < al ? 1 : 0;
95281 lo = (lo + cl) >>> 0;
95282 carry += lo < cl ? 1 : 0;
95283 lo = (lo + dl) >>> 0;
95284 carry += lo < dl ? 1 : 0;
95285 lo = (lo + el) >>> 0;
95286 carry += lo < el ? 1 : 0;
95287
95288 var hi = ah + bh + ch + dh + eh + carry;
95289 return hi >>> 0;
95290 };
95291 exports.sum64_5_hi = sum64_5_hi;
95292
95293 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
95294 var lo = al + bl + cl + dl + el;
95295
95296 return lo >>> 0;
95297 };
95298 exports.sum64_5_lo = sum64_5_lo;
95299
95300 function rotr64_hi(ah, al, num) {
95301 var r = (al << (32 - num)) | (ah >>> num);
95302 return r >>> 0;
95303 };
95304 exports.rotr64_hi = rotr64_hi;
95305
95306 function rotr64_lo(ah, al, num) {
95307 var r = (ah << (32 - num)) | (al >>> num);
95308 return r >>> 0;
95309 };
95310 exports.rotr64_lo = rotr64_lo;
95311
95312 function shr64_hi(ah, al, num) {
95313 return ah >>> num;
95314 };
95315 exports.shr64_hi = shr64_hi;
95316
95317 function shr64_lo(ah, al, num) {
95318 var r = (ah << (32 - num)) | (al >>> num);
95319 return r >>> 0;
95320 };
95321 exports.shr64_lo = shr64_lo;
95322
95323 },{"inherits":63}],63:[function(require,module,exports){
95324 arguments[4][9][0].apply(exports,arguments)
95325 },{"dup":9}],64:[function(require,module,exports){
95326 /**
95327 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
95328 * @param {String} str the string input value
95329 * @return {Boolean} a boolean if it is or is not hex prefixed
95330 * @throws if the str input is not a string
95331 */
95332 module.exports = function isHexPrefixed(str) {
95333 if (typeof str !== 'string') {
95334 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
95335 }
95336
95337 return str.slice(0, 2) === '0x';
95338 }
95339
95340 },{}],65:[function(require,module,exports){
95341 'use strict'
95342 module.exports = require('./lib/api')(require('./lib/keccak'))
95343
95344 },{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
95345 'use strict'
95346 var createKeccak = require('./keccak')
95347 var createShake = require('./shake')
95348
95349 module.exports = function (KeccakState) {
95350 var Keccak = createKeccak(KeccakState)
95351 var Shake = createShake(KeccakState)
95352
95353 return function (algorithm, options) {
95354 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
95355 switch (hash) {
95356 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
95357 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
95358 case 'keccak384': return new Keccak(832, 768, null, 384, options)
95359 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
95360
95361 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
95362 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
95363 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
95364 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
95365
95366 case 'shake128': return new Shake(1344, 256, 0x1f, options)
95367 case 'shake256': return new Shake(1088, 512, 0x1f, options)
95368
95369 default: throw new Error('Invald algorithm: ' + algorithm)
95370 }
95371 }
95372 }
95373
95374 },{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
95375 (function (Buffer){
95376 'use strict'
95377 var Transform = require('stream').Transform
95378 var inherits = require('inherits')
95379
95380 module.exports = function (KeccakState) {
95381 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
95382 Transform.call(this, options)
95383
95384 this._rate = rate
95385 this._capacity = capacity
95386 this._delimitedSuffix = delimitedSuffix
95387 this._hashBitLength = hashBitLength
95388 this._options = options
95389
95390 this._state = new KeccakState()
95391 this._state.initialize(rate, capacity)
95392 this._finalized = false
95393 }
95394
95395 inherits(Keccak, Transform)
95396
95397 Keccak.prototype._transform = function (chunk, encoding, callback) {
95398 var error = null
95399 try {
95400 this.update(chunk, encoding)
95401 } catch (err) {
95402 error = err
95403 }
95404
95405 callback(error)
95406 }
95407
95408 Keccak.prototype._flush = function (callback) {
95409 var error = null
95410 try {
95411 this.push(this.digest())
95412 } catch (err) {
95413 error = err
95414 }
95415
95416 callback(error)
95417 }
95418
95419 Keccak.prototype.update = function (data, encoding) {
95420 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
95421 if (this._finalized) throw new Error('Digest already called')
95422 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
95423
95424 this._state.absorb(data)
95425
95426 return this
95427 }
95428
95429 Keccak.prototype.digest = function (encoding) {
95430 if (this._finalized) throw new Error('Digest already called')
95431 this._finalized = true
95432
95433 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
95434 var digest = this._state.squeeze(this._hashBitLength / 8)
95435 if (encoding !== undefined) digest = digest.toString(encoding)
95436
95437 this._resetState()
95438
95439 return digest
95440 }
95441
95442 // remove result from memory
95443 Keccak.prototype._resetState = function () {
95444 this._state.initialize(this._rate, this._capacity)
95445 return this
95446 }
95447
95448 // because sometimes we need hash right now and little later
95449 Keccak.prototype._clone = function () {
95450 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
95451 this._state.copy(clone._state)
95452 clone._finalized = this._finalized
95453
95454 return clone
95455 }
95456
95457 return Keccak
95458 }
95459
95460 }).call(this,require("buffer").Buffer)
95461 },{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
95462 (function (Buffer){
95463 'use strict'
95464 var Transform = require('stream').Transform
95465 var inherits = require('inherits')
95466
95467 module.exports = function (KeccakState) {
95468 function Shake (rate, capacity, delimitedSuffix, options) {
95469 Transform.call(this, options)
95470
95471 this._rate = rate
95472 this._capacity = capacity
95473 this._delimitedSuffix = delimitedSuffix
95474 this._options = options
95475
95476 this._state = new KeccakState()
95477 this._state.initialize(rate, capacity)
95478 this._finalized = false
95479 }
95480
95481 inherits(Shake, Transform)
95482
95483 Shake.prototype._transform = function (chunk, encoding, callback) {
95484 var error = null
95485 try {
95486 this.update(chunk, encoding)
95487 } catch (err) {
95488 error = err
95489 }
95490
95491 callback(error)
95492 }
95493
95494 Shake.prototype._flush = function () {}
95495
95496 Shake.prototype._read = function (size) {
95497 this.push(this.squeeze(size))
95498 }
95499
95500 Shake.prototype.update = function (data, encoding) {
95501 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
95502 if (this._finalized) throw new Error('Squeeze already called')
95503 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
95504
95505 this._state.absorb(data)
95506
95507 return this
95508 }
95509
95510 Shake.prototype.squeeze = function (dataByteLength, encoding) {
95511 if (!this._finalized) {
95512 this._finalized = true
95513 this._state.absorbLastFewBits(this._delimitedSuffix)
95514 }
95515
95516 var data = this._state.squeeze(dataByteLength)
95517 if (encoding !== undefined) data = data.toString(encoding)
95518
95519 return data
95520 }
95521
95522 Shake.prototype._resetState = function () {
95523 this._state.initialize(this._rate, this._capacity)
95524 return this
95525 }
95526
95527 Shake.prototype._clone = function () {
95528 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
95529 this._state.copy(clone._state)
95530 clone._finalized = this._finalized
95531
95532 return clone
95533 }
95534
95535 return Shake
95536 }
95537
95538 }).call(this,require("buffer").Buffer)
95539 },{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
95540 'use strict'
95541 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]
95542
95543 exports.p1600 = function (s) {
95544 for (var round = 0; round < 24; ++round) {
95545 // theta
95546 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
95547 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
95548 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
95549 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
95550 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
95551 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
95552 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
95553 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
95554 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
95555 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
95556
95557 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
95558 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
95559 var t1slo0 = s[0] ^ lo
95560 var t1shi0 = s[1] ^ hi
95561 var t1slo5 = s[10] ^ lo
95562 var t1shi5 = s[11] ^ hi
95563 var t1slo10 = s[20] ^ lo
95564 var t1shi10 = s[21] ^ hi
95565 var t1slo15 = s[30] ^ lo
95566 var t1shi15 = s[31] ^ hi
95567 var t1slo20 = s[40] ^ lo
95568 var t1shi20 = s[41] ^ hi
95569 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
95570 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
95571 var t1slo1 = s[2] ^ lo
95572 var t1shi1 = s[3] ^ hi
95573 var t1slo6 = s[12] ^ lo
95574 var t1shi6 = s[13] ^ hi
95575 var t1slo11 = s[22] ^ lo
95576 var t1shi11 = s[23] ^ hi
95577 var t1slo16 = s[32] ^ lo
95578 var t1shi16 = s[33] ^ hi
95579 var t1slo21 = s[42] ^ lo
95580 var t1shi21 = s[43] ^ hi
95581 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
95582 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
95583 var t1slo2 = s[4] ^ lo
95584 var t1shi2 = s[5] ^ hi
95585 var t1slo7 = s[14] ^ lo
95586 var t1shi7 = s[15] ^ hi
95587 var t1slo12 = s[24] ^ lo
95588 var t1shi12 = s[25] ^ hi
95589 var t1slo17 = s[34] ^ lo
95590 var t1shi17 = s[35] ^ hi
95591 var t1slo22 = s[44] ^ lo
95592 var t1shi22 = s[45] ^ hi
95593 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
95594 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
95595 var t1slo3 = s[6] ^ lo
95596 var t1shi3 = s[7] ^ hi
95597 var t1slo8 = s[16] ^ lo
95598 var t1shi8 = s[17] ^ hi
95599 var t1slo13 = s[26] ^ lo
95600 var t1shi13 = s[27] ^ hi
95601 var t1slo18 = s[36] ^ lo
95602 var t1shi18 = s[37] ^ hi
95603 var t1slo23 = s[46] ^ lo
95604 var t1shi23 = s[47] ^ hi
95605 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
95606 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
95607 var t1slo4 = s[8] ^ lo
95608 var t1shi4 = s[9] ^ hi
95609 var t1slo9 = s[18] ^ lo
95610 var t1shi9 = s[19] ^ hi
95611 var t1slo14 = s[28] ^ lo
95612 var t1shi14 = s[29] ^ hi
95613 var t1slo19 = s[38] ^ lo
95614 var t1shi19 = s[39] ^ hi
95615 var t1slo24 = s[48] ^ lo
95616 var t1shi24 = s[49] ^ hi
95617
95618 // rho & pi
95619 var t2slo0 = t1slo0
95620 var t2shi0 = t1shi0
95621 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
95622 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
95623 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
95624 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
95625 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
95626 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
95627 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
95628 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
95629 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
95630 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
95631 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
95632 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
95633 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
95634 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
95635 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
95636 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
95637 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
95638 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
95639 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
95640 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
95641 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
95642 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
95643 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
95644 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
95645 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
95646 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
95647 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
95648 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
95649 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
95650 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
95651 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
95652 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
95653 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
95654 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
95655 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
95656 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
95657 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
95658 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
95659 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
95660 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
95661 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
95662 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
95663 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
95664 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
95665 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
95666 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
95667 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
95668 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
95669
95670 // chi
95671 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
95672 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
95673 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
95674 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
95675 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
95676 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
95677 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
95678 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
95679 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
95680 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
95681 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
95682 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
95683 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
95684 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
95685 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
95686 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
95687 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
95688 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
95689 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
95690 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
95691 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
95692 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
95693 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
95694 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
95695 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
95696 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
95697 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
95698 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
95699 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
95700 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
95701 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
95702 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
95703 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
95704 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
95705 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
95706 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
95707 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
95708 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
95709 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
95710 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
95711 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
95712 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
95713 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
95714 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
95715 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
95716 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
95717 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
95718 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
95719 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
95720 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
95721
95722 // iota
95723 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
95724 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
95725 }
95726 }
95727
95728 },{}],70:[function(require,module,exports){
95729 (function (Buffer){
95730 'use strict'
95731 var keccakState = require('./keccak-state-unroll')
95732
95733 function Keccak () {
95734 // much faster than `new Array(50)`
95735 this.state = [
95736 0, 0, 0, 0, 0,
95737 0, 0, 0, 0, 0,
95738 0, 0, 0, 0, 0,
95739 0, 0, 0, 0, 0,
95740 0, 0, 0, 0, 0
95741 ]
95742
95743 this.blockSize = null
95744 this.count = 0
95745 this.squeezing = false
95746 }
95747
95748 Keccak.prototype.initialize = function (rate, capacity) {
95749 for (var i = 0; i < 50; ++i) this.state[i] = 0
95750 this.blockSize = rate / 8
95751 this.count = 0
95752 this.squeezing = false
95753 }
95754
95755 Keccak.prototype.absorb = function (data) {
95756 for (var i = 0; i < data.length; ++i) {
95757 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
95758 this.count += 1
95759 if (this.count === this.blockSize) {
95760 keccakState.p1600(this.state)
95761 this.count = 0
95762 }
95763 }
95764 }
95765
95766 Keccak.prototype.absorbLastFewBits = function (bits) {
95767 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
95768 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
95769 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
95770 keccakState.p1600(this.state)
95771 this.count = 0
95772 this.squeezing = true
95773 }
95774
95775 Keccak.prototype.squeeze = function (length) {
95776 if (!this.squeezing) this.absorbLastFewBits(0x01)
95777
95778 var output = Buffer.allocUnsafe(length)
95779 for (var i = 0; i < length; ++i) {
95780 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
95781 this.count += 1
95782 if (this.count === this.blockSize) {
95783 keccakState.p1600(this.state)
95784 this.count = 0
95785 }
95786 }
95787
95788 return output
95789 }
95790
95791 Keccak.prototype.copy = function (dest) {
95792 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
95793 dest.blockSize = this.blockSize
95794 dest.count = this.count
95795 dest.squeezing = this.squeezing
95796 }
95797
95798 module.exports = Keccak
95799
95800 }).call(this,require("buffer").Buffer)
95801 },{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
95802 (function (Buffer){
95803 /*
95804 CryptoJS v3.1.2
95805 code.google.com/p/crypto-js
95806 (c) 2009-2013 by Jeff Mott. All rights reserved.
95807 code.google.com/p/crypto-js/wiki/License
95808 */
95809 /** @preserve
95810 (c) 2012 by Cédric Mesnil. All rights reserved.
95811
95812 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
95813
95814 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
95815 - 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.
95816
95817 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.
95818 */
95819
95820 // constants table
95821 var zl = [
95822 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
95823 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
95824 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
95825 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
95826 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
95827 ]
95828
95829 var zr = [
95830 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
95831 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
95832 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
95833 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
95834 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
95835 ]
95836
95837 var sl = [
95838 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
95839 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
95840 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
95841 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
95842 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
95843 ]
95844
95845 var sr = [
95846 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
95847 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
95848 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
95849 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
95850 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
95851 ]
95852
95853 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
95854 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
95855
95856 function bytesToWords (bytes) {
95857 var words = []
95858 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
95859 words[b >>> 5] |= bytes[i] << (24 - b % 32)
95860 }
95861 return words
95862 }
95863
95864 function wordsToBytes (words) {
95865 var bytes = []
95866 for (var b = 0; b < words.length * 32; b += 8) {
95867 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
95868 }
95869 return bytes
95870 }
95871
95872 function processBlock (H, M, offset) {
95873 // swap endian
95874 for (var i = 0; i < 16; i++) {
95875 var offset_i = offset + i
95876 var M_offset_i = M[offset_i]
95877
95878 // Swap
95879 M[offset_i] = (
95880 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
95881 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
95882 )
95883 }
95884
95885 // Working variables
95886 var al, bl, cl, dl, el
95887 var ar, br, cr, dr, er
95888
95889 ar = al = H[0]
95890 br = bl = H[1]
95891 cr = cl = H[2]
95892 dr = dl = H[3]
95893 er = el = H[4]
95894
95895 // computation
95896 var t
95897 for (i = 0; i < 80; i += 1) {
95898 t = (al + M[offset + zl[i]]) | 0
95899 if (i < 16) {
95900 t += f1(bl, cl, dl) + hl[0]
95901 } else if (i < 32) {
95902 t += f2(bl, cl, dl) + hl[1]
95903 } else if (i < 48) {
95904 t += f3(bl, cl, dl) + hl[2]
95905 } else if (i < 64) {
95906 t += f4(bl, cl, dl) + hl[3]
95907 } else {// if (i<80) {
95908 t += f5(bl, cl, dl) + hl[4]
95909 }
95910 t = t | 0
95911 t = rotl(t, sl[i])
95912 t = (t + el) | 0
95913 al = el
95914 el = dl
95915 dl = rotl(cl, 10)
95916 cl = bl
95917 bl = t
95918
95919 t = (ar + M[offset + zr[i]]) | 0
95920 if (i < 16) {
95921 t += f5(br, cr, dr) + hr[0]
95922 } else if (i < 32) {
95923 t += f4(br, cr, dr) + hr[1]
95924 } else if (i < 48) {
95925 t += f3(br, cr, dr) + hr[2]
95926 } else if (i < 64) {
95927 t += f2(br, cr, dr) + hr[3]
95928 } else {// if (i<80) {
95929 t += f1(br, cr, dr) + hr[4]
95930 }
95931
95932 t = t | 0
95933 t = rotl(t, sr[i])
95934 t = (t + er) | 0
95935 ar = er
95936 er = dr
95937 dr = rotl(cr, 10)
95938 cr = br
95939 br = t
95940 }
95941
95942 // intermediate hash value
95943 t = (H[1] + cl + dr) | 0
95944 H[1] = (H[2] + dl + er) | 0
95945 H[2] = (H[3] + el + ar) | 0
95946 H[3] = (H[4] + al + br) | 0
95947 H[4] = (H[0] + bl + cr) | 0
95948 H[0] = t
95949 }
95950
95951 function f1 (x, y, z) {
95952 return ((x) ^ (y) ^ (z))
95953 }
95954
95955 function f2 (x, y, z) {
95956 return (((x) & (y)) | ((~x) & (z)))
95957 }
95958
95959 function f3 (x, y, z) {
95960 return (((x) | (~(y))) ^ (z))
95961 }
95962
95963 function f4 (x, y, z) {
95964 return (((x) & (z)) | ((y) & (~(z))))
95965 }
95966
95967 function f5 (x, y, z) {
95968 return ((x) ^ ((y) | (~(z))))
95969 }
95970
95971 function rotl (x, n) {
95972 return (x << n) | (x >>> (32 - n))
95973 }
95974
95975 function ripemd160 (message) {
95976 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
95977
95978 if (typeof message === 'string') {
95979 message = new Buffer(message, 'utf8')
95980 }
95981
95982 var m = bytesToWords(message)
95983
95984 var nBitsLeft = message.length * 8
95985 var nBitsTotal = message.length * 8
95986
95987 // Add padding
95988 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
95989 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
95990 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
95991 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
95992 )
95993
95994 for (var i = 0; i < m.length; i += 16) {
95995 processBlock(H, m, i)
95996 }
95997
95998 // swap endian
95999 for (i = 0; i < 5; i++) {
96000 // shortcut
96001 var H_i = H[i]
96002
96003 // Swap
96004 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
96005 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
96006 }
96007
96008 var digestbytes = wordsToBytes(H)
96009 return new Buffer(digestbytes)
96010 }
96011
96012 module.exports = ripemd160
96013
96014 }).call(this,require("buffer").Buffer)
96015 },{"buffer":5}],72:[function(require,module,exports){
96016 (function (Buffer){
96017 const assert = require('assert')
96018 /**
96019 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
96020 * This function takes in a data, convert it to buffer if not, and a length for recursion
96021 *
96022 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
96023 * @returns {Buffer} - returns buffer of encoded data
96024 **/
96025 exports.encode = function (input) {
96026 if (input instanceof Array) {
96027 var output = []
96028 for (var i = 0; i < input.length; i++) {
96029 output.push(exports.encode(input[i]))
96030 }
96031 var buf = Buffer.concat(output)
96032 return Buffer.concat([encodeLength(buf.length, 192), buf])
96033 } else {
96034 input = toBuffer(input)
96035 if (input.length === 1 && input[0] < 128) {
96036 return input
96037 } else {
96038 return Buffer.concat([encodeLength(input.length, 128), input])
96039 }
96040 }
96041 }
96042
96043 function safeParseInt (v, base) {
96044 if (v.slice(0, 2) === '00') {
96045 throw (new Error('invalid RLP: extra zeros'))
96046 }
96047
96048 return parseInt(v, base)
96049 }
96050
96051 function encodeLength (len, offset) {
96052 if (len < 56) {
96053 return new Buffer([len + offset])
96054 } else {
96055 var hexLength = intToHex(len)
96056 var lLength = hexLength.length / 2
96057 var firstByte = intToHex(offset + 55 + lLength)
96058 return new Buffer(firstByte + hexLength, 'hex')
96059 }
96060 }
96061
96062 /**
96063 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
96064 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
96065 * @returns {Array} - returns decode Array of Buffers containg the original message
96066 **/
96067 exports.decode = function (input, stream) {
96068 if (!input || input.length === 0) {
96069 return new Buffer([])
96070 }
96071
96072 input = toBuffer(input)
96073 var decoded = _decode(input)
96074
96075 if (stream) {
96076 return decoded
96077 }
96078
96079 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
96080 return decoded.data
96081 }
96082
96083 exports.getLength = function (input) {
96084 if (!input || input.length === 0) {
96085 return new Buffer([])
96086 }
96087
96088 input = toBuffer(input)
96089 var firstByte = input[0]
96090 if (firstByte <= 0x7f) {
96091 return input.length
96092 } else if (firstByte <= 0xb7) {
96093 return firstByte - 0x7f
96094 } else if (firstByte <= 0xbf) {
96095 return firstByte - 0xb6
96096 } else if (firstByte <= 0xf7) {
96097 // a list between 0-55 bytes long
96098 return firstByte - 0xbf
96099 } else {
96100 // a list over 55 bytes long
96101 var llength = firstByte - 0xf6
96102 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
96103 return llength + length
96104 }
96105 }
96106
96107 function _decode (input) {
96108 var length, llength, data, innerRemainder, d
96109 var decoded = []
96110 var firstByte = input[0]
96111
96112 if (firstByte <= 0x7f) {
96113 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
96114 return {
96115 data: input.slice(0, 1),
96116 remainder: input.slice(1)
96117 }
96118 } else if (firstByte <= 0xb7) {
96119 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
96120 // The range of the first byte is [0x80, 0xb7]
96121 length = firstByte - 0x7f
96122
96123 // set 0x80 null to 0
96124 if (firstByte === 0x80) {
96125 data = new Buffer([])
96126 } else {
96127 data = input.slice(1, length)
96128 }
96129
96130 if (length === 2 && data[0] < 0x80) {
96131 throw new Error('invalid rlp encoding: byte must be less 0x80')
96132 }
96133
96134 return {
96135 data: data,
96136 remainder: input.slice(length)
96137 }
96138 } else if (firstByte <= 0xbf) {
96139 llength = firstByte - 0xb6
96140 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
96141 data = input.slice(llength, length + llength)
96142 if (data.length < length) {
96143 throw (new Error('invalid RLP'))
96144 }
96145
96146 return {
96147 data: data,
96148 remainder: input.slice(length + llength)
96149 }
96150 } else if (firstByte <= 0xf7) {
96151 // a list between 0-55 bytes long
96152 length = firstByte - 0xbf
96153 innerRemainder = input.slice(1, length)
96154 while (innerRemainder.length) {
96155 d = _decode(innerRemainder)
96156 decoded.push(d.data)
96157 innerRemainder = d.remainder
96158 }
96159
96160 return {
96161 data: decoded,
96162 remainder: input.slice(length)
96163 }
96164 } else {
96165 // a list over 55 bytes long
96166 llength = firstByte - 0xf6
96167 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
96168 var totalLength = llength + length
96169 if (totalLength > input.length) {
96170 throw new Error('invalid rlp: total length is larger than the data')
96171 }
96172
96173 innerRemainder = input.slice(llength, totalLength)
96174 if (innerRemainder.length === 0) {
96175 throw new Error('invalid rlp, List has a invalid length')
96176 }
96177
96178 while (innerRemainder.length) {
96179 d = _decode(innerRemainder)
96180 decoded.push(d.data)
96181 innerRemainder = d.remainder
96182 }
96183 return {
96184 data: decoded,
96185 remainder: input.slice(totalLength)
96186 }
96187 }
96188 }
96189
96190 function isHexPrefixed (str) {
96191 return str.slice(0, 2) === '0x'
96192 }
96193
96194 // Removes 0x from a given String
96195 function stripHexPrefix (str) {
96196 if (typeof str !== 'string') {
96197 return str
96198 }
96199 return isHexPrefixed(str) ? str.slice(2) : str
96200 }
96201
96202 function intToHex (i) {
96203 var hex = i.toString(16)
96204 if (hex.length % 2) {
96205 hex = '0' + hex
96206 }
96207
96208 return hex
96209 }
96210
96211 function padToEven (a) {
96212 if (a.length % 2) a = '0' + a
96213 return a
96214 }
96215
96216 function intToBuffer (i) {
96217 var hex = intToHex(i)
96218 return new Buffer(hex, 'hex')
96219 }
96220
96221 function toBuffer (v) {
96222 if (!Buffer.isBuffer(v)) {
96223 if (typeof v === 'string') {
96224 if (isHexPrefixed(v)) {
96225 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
96226 } else {
96227 v = new Buffer(v)
96228 }
96229 } else if (typeof v === 'number') {
96230 if (!v) {
96231 v = new Buffer([])
96232 } else {
96233 v = intToBuffer(v)
96234 }
96235 } else if (v === null || v === undefined) {
96236 v = new Buffer([])
96237 } else if (v.toArray) {
96238 // converts a BN to a Buffer
96239 v = new Buffer(v.toArray())
96240 } else {
96241 throw new Error('invalid type')
96242 }
96243 }
96244 return v
96245 }
96246
96247 }).call(this,require("buffer").Buffer)
96248 },{"assert":1,"buffer":5}],73:[function(require,module,exports){
96249 'use strict'
96250 module.exports = require('./lib')(require('./lib/elliptic'))
96251
96252 },{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
96253 (function (Buffer){
96254 'use strict'
96255 var toString = Object.prototype.toString
96256
96257 // TypeError
96258 exports.isArray = function (value, message) {
96259 if (!Array.isArray(value)) throw TypeError(message)
96260 }
96261
96262 exports.isBoolean = function (value, message) {
96263 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
96264 }
96265
96266 exports.isBuffer = function (value, message) {
96267 if (!Buffer.isBuffer(value)) throw TypeError(message)
96268 }
96269
96270 exports.isFunction = function (value, message) {
96271 if (toString.call(value) !== '[object Function]') throw TypeError(message)
96272 }
96273
96274 exports.isNumber = function (value, message) {
96275 if (toString.call(value) !== '[object Number]') throw TypeError(message)
96276 }
96277
96278 exports.isObject = function (value, message) {
96279 if (toString.call(value) !== '[object Object]') throw TypeError(message)
96280 }
96281
96282 // RangeError
96283 exports.isBufferLength = function (buffer, length, message) {
96284 if (buffer.length !== length) throw RangeError(message)
96285 }
96286
96287 exports.isBufferLength2 = function (buffer, length1, length2, message) {
96288 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
96289 }
96290
96291 exports.isLengthGTZero = function (value, message) {
96292 if (value.length === 0) throw RangeError(message)
96293 }
96294
96295 exports.isNumberInInterval = function (number, x, y, message) {
96296 if (number <= x || number >= y) throw RangeError(message)
96297 }
96298
96299 }).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
96300 },{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
96301 (function (Buffer){
96302 'use strict'
96303 var bip66 = require('bip66')
96304
96305 var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
96306 // begin
96307 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
96308 // private key
96309 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96310 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96311 // middle
96312 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
96313 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
96314 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
96315 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
96316 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
96317 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
96318 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
96319 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
96320 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
96321 // public key
96322 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96323 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96324 0x00
96325 ])
96326
96327 var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
96328 // begin
96329 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
96330 // private key
96331 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96332 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96333 // middle
96334 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
96335 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
96336 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
96337 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
96338 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
96339 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
96340 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
96341 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
96342 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
96343 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
96344 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
96345 // public key
96346 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96347 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96348 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96349 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96350 0x00
96351 ])
96352
96353 var ZERO_BUFFER_32 = new Buffer([
96354 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
96355 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
96356 ])
96357
96358 exports.privateKeyExport = function (privateKey, publicKey, compressed) {
96359 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
96360 privateKey.copy(result, compressed ? 8 : 9)
96361 publicKey.copy(result, compressed ? 181 : 214)
96362 return result
96363 }
96364
96365 exports.privateKeyImport = function (privateKey) {
96366 var length = privateKey.length
96367
96368 // sequence header
96369 var index = 0
96370 if (length < index + 1 || privateKey[index] !== 0x30) return
96371 index += 1
96372
96373 // sequence length constructor
96374 if (length < index + 1 || !(privateKey[index] & 0x80)) return
96375
96376 var lenb = privateKey[index] & 0x7f
96377 index += 1
96378 if (lenb < 1 || lenb > 2) return
96379 if (length < index + lenb) return
96380
96381 // sequence length
96382 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
96383 index += lenb
96384 if (length < index + len) return
96385
96386 // sequence element 0: version number (=1)
96387 if (length < index + 3 ||
96388 privateKey[index] !== 0x02 ||
96389 privateKey[index + 1] !== 0x01 ||
96390 privateKey[index + 2] !== 0x01) {
96391 return
96392 }
96393 index += 3
96394
96395 // sequence element 1: octet string, up to 32 bytes
96396 if (length < index + 2 ||
96397 privateKey[index] !== 0x04 ||
96398 privateKey[index + 1] > 0x20 ||
96399 length < index + 2 + privateKey[index + 1]) {
96400 return
96401 }
96402
96403 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
96404 }
96405
96406 exports.signatureExport = function (sigObj) {
96407 var r = Buffer.concat([new Buffer([0]), sigObj.r])
96408 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
96409
96410 var s = Buffer.concat([new Buffer([0]), sigObj.s])
96411 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
96412
96413 return bip66.encode(r.slice(posR), s.slice(posS))
96414 }
96415
96416 exports.signatureImport = function (sig) {
96417 var r = new Buffer(ZERO_BUFFER_32)
96418 var s = new Buffer(ZERO_BUFFER_32)
96419
96420 try {
96421 var sigObj = bip66.decode(sig)
96422 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
96423 if (sigObj.r.length > 32) throw new Error('R length is too long')
96424 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
96425 if (sigObj.s.length > 32) throw new Error('S length is too long')
96426 } catch (err) {
96427 return
96428 }
96429
96430 sigObj.r.copy(r, 32 - sigObj.r.length)
96431 sigObj.s.copy(s, 32 - sigObj.s.length)
96432
96433 return { r: r, s: s }
96434 }
96435
96436 exports.signatureImportLax = function (sig) {
96437 var r = new Buffer(ZERO_BUFFER_32)
96438 var s = new Buffer(ZERO_BUFFER_32)
96439
96440 var length = sig.length
96441 var index = 0
96442
96443 // sequence tag byte
96444 if (sig[index++] !== 0x30) return
96445
96446 // sequence length byte
96447 var lenbyte = sig[index++]
96448 if (lenbyte & 0x80) {
96449 index += lenbyte - 0x80
96450 if (index > length) return
96451 }
96452
96453 // sequence tag byte for r
96454 if (sig[index++] !== 0x02) return
96455
96456 // length for r
96457 var rlen = sig[index++]
96458 if (rlen & 0x80) {
96459 lenbyte = rlen - 0x80
96460 if (index + lenbyte > length) return
96461 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
96462 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
96463 }
96464 if (rlen > length - index) return
96465 var rindex = index
96466 index += rlen
96467
96468 // sequence tag byte for s
96469 if (sig[index++] !== 0x02) return
96470
96471 // length for s
96472 var slen = sig[index++]
96473 if (slen & 0x80) {
96474 lenbyte = slen - 0x80
96475 if (index + lenbyte > length) return
96476 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
96477 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
96478 }
96479 if (slen > length - index) return
96480 var sindex = index
96481 index += slen
96482
96483 // ignore leading zeros in r
96484 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
96485 // copy r value
96486 if (rlen > 32) return
96487 var rvalue = sig.slice(rindex, rindex + rlen)
96488 rvalue.copy(r, 32 - rvalue.length)
96489
96490 // ignore leading zeros in s
96491 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
96492 // copy s value
96493 if (slen > 32) return
96494 var svalue = sig.slice(sindex, sindex + slen)
96495 svalue.copy(s, 32 - svalue.length)
96496
96497 return { r: r, s: s }
96498 }
96499
96500 }).call(this,require("buffer").Buffer)
96501 },{"bip66":32,"buffer":5}],76:[function(require,module,exports){
96502 (function (Buffer){
96503 'use strict'
96504 var createHash = require('create-hash')
96505 var BN = require('bn.js')
96506 var EC = require('elliptic').ec
96507
96508 var messages = require('../messages.json')
96509
96510 var ec = new EC('secp256k1')
96511 var ecparams = ec.curve
96512
96513 function loadCompressedPublicKey (first, xBuffer) {
96514 var x = new BN(xBuffer)
96515
96516 // overflow
96517 if (x.cmp(ecparams.p) >= 0) return null
96518 x = x.toRed(ecparams.red)
96519
96520 // compute corresponding Y
96521 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
96522 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
96523
96524 return ec.keyPair({ pub: { x: x, y: y } })
96525 }
96526
96527 function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
96528 var x = new BN(xBuffer)
96529 var y = new BN(yBuffer)
96530
96531 // overflow
96532 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
96533
96534 x = x.toRed(ecparams.red)
96535 y = y.toRed(ecparams.red)
96536
96537 // is odd flag
96538 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
96539
96540 // x*x*x + b = y*y
96541 var x3 = x.redSqr().redIMul(x)
96542 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
96543
96544 return ec.keyPair({ pub: { x: x, y: y } })
96545 }
96546
96547 function loadPublicKey (publicKey) {
96548 var first = publicKey[0]
96549 switch (first) {
96550 case 0x02:
96551 case 0x03:
96552 if (publicKey.length !== 33) return null
96553 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
96554 case 0x04:
96555 case 0x06:
96556 case 0x07:
96557 if (publicKey.length !== 65) return null
96558 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
96559 default:
96560 return null
96561 }
96562 }
96563
96564 exports.privateKeyVerify = function (privateKey) {
96565 var bn = new BN(privateKey)
96566 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
96567 }
96568
96569 exports.privateKeyExport = function (privateKey, compressed) {
96570 var d = new BN(privateKey)
96571 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
96572
96573 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
96574 }
96575
96576 exports.privateKeyTweakAdd = function (privateKey, tweak) {
96577 var bn = new BN(tweak)
96578 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
96579
96580 bn.iadd(new BN(privateKey))
96581 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
96582 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
96583
96584 return bn.toArrayLike(Buffer, 'be', 32)
96585 }
96586
96587 exports.privateKeyTweakMul = function (privateKey, tweak) {
96588 var bn = new BN(tweak)
96589 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
96590
96591 bn.imul(new BN(privateKey))
96592 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
96593
96594 return bn.toArrayLike(Buffer, 'be', 32)
96595 }
96596
96597 exports.publicKeyCreate = function (privateKey, compressed) {
96598 var d = new BN(privateKey)
96599 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
96600
96601 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
96602 }
96603
96604 exports.publicKeyConvert = function (publicKey, compressed) {
96605 var pair = loadPublicKey(publicKey)
96606 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
96607
96608 return new Buffer(pair.getPublic(compressed, true))
96609 }
96610
96611 exports.publicKeyVerify = function (publicKey) {
96612 return loadPublicKey(publicKey) !== null
96613 }
96614
96615 exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
96616 var pair = loadPublicKey(publicKey)
96617 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
96618
96619 tweak = new BN(tweak)
96620 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
96621
96622 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
96623 }
96624
96625 exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
96626 var pair = loadPublicKey(publicKey)
96627 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
96628
96629 tweak = new BN(tweak)
96630 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
96631
96632 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
96633 }
96634
96635 exports.publicKeyCombine = function (publicKeys, compressed) {
96636 var pairs = new Array(publicKeys.length)
96637 for (var i = 0; i < publicKeys.length; ++i) {
96638 pairs[i] = loadPublicKey(publicKeys[i])
96639 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
96640 }
96641
96642 var point = pairs[0].pub
96643 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
96644 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
96645
96646 return new Buffer(point.encode(true, compressed))
96647 }
96648
96649 exports.signatureNormalize = function (signature) {
96650 var r = new BN(signature.slice(0, 32))
96651 var s = new BN(signature.slice(32, 64))
96652 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
96653
96654 var result = new Buffer(signature)
96655 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
96656
96657 return result
96658 }
96659
96660 exports.signatureExport = function (signature) {
96661 var r = signature.slice(0, 32)
96662 var s = signature.slice(32, 64)
96663 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
96664
96665 return { r: r, s: s }
96666 }
96667
96668 exports.signatureImport = function (sigObj) {
96669 var r = new BN(sigObj.r)
96670 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
96671
96672 var s = new BN(sigObj.s)
96673 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
96674
96675 return Buffer.concat([
96676 r.toArrayLike(Buffer, 'be', 32),
96677 s.toArrayLike(Buffer, 'be', 32)
96678 ])
96679 }
96680
96681 exports.sign = function (message, privateKey, noncefn, data) {
96682 if (typeof noncefn === 'function') {
96683 var getNonce = noncefn
96684 noncefn = function (counter) {
96685 var nonce = getNonce(message, privateKey, null, data, counter)
96686 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
96687
96688 return new BN(nonce)
96689 }
96690 }
96691
96692 var d = new BN(privateKey)
96693 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
96694
96695 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
96696 return {
96697 signature: Buffer.concat([
96698 result.r.toArrayLike(Buffer, 'be', 32),
96699 result.s.toArrayLike(Buffer, 'be', 32)
96700 ]),
96701 recovery: result.recoveryParam
96702 }
96703 }
96704
96705 exports.verify = function (message, signature, publicKey) {
96706 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
96707
96708 var sigr = new BN(sigObj.r)
96709 var sigs = new BN(sigObj.s)
96710 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
96711 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
96712
96713 var pair = loadPublicKey(publicKey)
96714 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
96715
96716 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
96717 }
96718
96719 exports.recover = function (message, signature, recovery, compressed) {
96720 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
96721
96722 var sigr = new BN(sigObj.r)
96723 var sigs = new BN(sigObj.s)
96724 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
96725
96726 try {
96727 if (sigr.isZero() || sigs.isZero()) throw new Error()
96728
96729 var point = ec.recoverPubKey(message, sigObj, recovery)
96730 return new Buffer(point.encode(true, compressed))
96731 } catch (err) {
96732 throw new Error(messages.ECDSA_RECOVER_FAIL)
96733 }
96734 }
96735
96736 exports.ecdh = function (publicKey, privateKey) {
96737 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
96738 return createHash('sha256').update(shared).digest()
96739 }
96740
96741 exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
96742 var pair = loadPublicKey(publicKey)
96743 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
96744
96745 var scalar = new BN(privateKey)
96746 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
96747
96748 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
96749 }
96750
96751 }).call(this,require("buffer").Buffer)
96752 },{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
96753 'use strict'
96754 var assert = require('./assert')
96755 var der = require('./der')
96756 var messages = require('./messages.json')
96757
96758 function initCompressedValue (value, defaultValue) {
96759 if (value === undefined) return defaultValue
96760
96761 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
96762 return value
96763 }
96764
96765 module.exports = function (secp256k1) {
96766 return {
96767 privateKeyVerify: function (privateKey) {
96768 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96769 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
96770 },
96771
96772 privateKeyExport: function (privateKey, compressed) {
96773 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96774 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96775
96776 compressed = initCompressedValue(compressed, true)
96777 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
96778
96779 return der.privateKeyExport(privateKey, publicKey, compressed)
96780 },
96781
96782 privateKeyImport: function (privateKey) {
96783 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96784
96785 privateKey = der.privateKeyImport(privateKey)
96786 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
96787
96788 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
96789 },
96790
96791 privateKeyTweakAdd: function (privateKey, tweak) {
96792 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96793 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96794
96795 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
96796 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
96797
96798 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
96799 },
96800
96801 privateKeyTweakMul: function (privateKey, tweak) {
96802 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96803 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96804
96805 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
96806 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
96807
96808 return secp256k1.privateKeyTweakMul(privateKey, tweak)
96809 },
96810
96811 publicKeyCreate: function (privateKey, compressed) {
96812 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96813 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96814
96815 compressed = initCompressedValue(compressed, true)
96816
96817 return secp256k1.publicKeyCreate(privateKey, compressed)
96818 },
96819
96820 publicKeyConvert: function (publicKey, compressed) {
96821 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96822 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96823
96824 compressed = initCompressedValue(compressed, true)
96825
96826 return secp256k1.publicKeyConvert(publicKey, compressed)
96827 },
96828
96829 publicKeyVerify: function (publicKey) {
96830 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96831 return secp256k1.publicKeyVerify(publicKey)
96832 },
96833
96834 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
96835 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96836 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96837
96838 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
96839 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
96840
96841 compressed = initCompressedValue(compressed, true)
96842
96843 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
96844 },
96845
96846 publicKeyTweakMul: function (publicKey, tweak, compressed) {
96847 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96848 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96849
96850 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
96851 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
96852
96853 compressed = initCompressedValue(compressed, true)
96854
96855 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
96856 },
96857
96858 publicKeyCombine: function (publicKeys, compressed) {
96859 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
96860 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
96861 for (var i = 0; i < publicKeys.length; ++i) {
96862 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
96863 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96864 }
96865
96866 compressed = initCompressedValue(compressed, true)
96867
96868 return secp256k1.publicKeyCombine(publicKeys, compressed)
96869 },
96870
96871 signatureNormalize: function (signature) {
96872 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
96873 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
96874
96875 return secp256k1.signatureNormalize(signature)
96876 },
96877
96878 signatureExport: function (signature) {
96879 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
96880 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
96881
96882 var sigObj = secp256k1.signatureExport(signature)
96883 return der.signatureExport(sigObj)
96884 },
96885
96886 signatureImport: function (sig) {
96887 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
96888 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
96889
96890 var sigObj = der.signatureImport(sig)
96891 if (sigObj) return secp256k1.signatureImport(sigObj)
96892
96893 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
96894 },
96895
96896 signatureImportLax: function (sig) {
96897 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
96898 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
96899
96900 var sigObj = der.signatureImportLax(sig)
96901 if (sigObj) return secp256k1.signatureImport(sigObj)
96902
96903 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
96904 },
96905
96906 sign: function (message, privateKey, options) {
96907 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
96908 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
96909
96910 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96911 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96912
96913 var data = null
96914 var noncefn = null
96915 if (options !== undefined) {
96916 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
96917
96918 if (options.data !== undefined) {
96919 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
96920 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
96921 data = options.data
96922 }
96923
96924 if (options.noncefn !== undefined) {
96925 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
96926 noncefn = options.noncefn
96927 }
96928 }
96929
96930 return secp256k1.sign(message, privateKey, noncefn, data)
96931 },
96932
96933 verify: function (message, signature, publicKey) {
96934 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
96935 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
96936
96937 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
96938 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
96939
96940 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96941 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96942
96943 return secp256k1.verify(message, signature, publicKey)
96944 },
96945
96946 recover: function (message, signature, recovery, compressed) {
96947 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
96948 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
96949
96950 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
96951 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
96952
96953 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
96954 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
96955
96956 compressed = initCompressedValue(compressed, true)
96957
96958 return secp256k1.recover(message, signature, recovery, compressed)
96959 },
96960
96961 ecdh: function (publicKey, privateKey) {
96962 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96963 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96964
96965 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96966 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96967
96968 return secp256k1.ecdh(publicKey, privateKey)
96969 },
96970
96971 ecdhUnsafe: function (publicKey, privateKey, compressed) {
96972 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
96973 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
96974
96975 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
96976 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
96977
96978 compressed = initCompressedValue(compressed, true)
96979
96980 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
96981 }
96982 }
96983 }
96984
96985 },{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
96986 module.exports={
96987 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
96988 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
96989 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
96990 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
96991 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
96992 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
96993 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
96994 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
96995 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
96996 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
96997 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
96998 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
96999 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
97000 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
97001 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
97002 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
97003 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
97004 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
97005 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
97006 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
97007 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
97008 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
97009 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
97010 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
97011 "MSG32_TYPE_INVALID": "message should be a Buffer",
97012 "MSG32_LENGTH_INVALID": "message length is invalid",
97013 "OPTIONS_TYPE_INVALID": "options should be an Object",
97014 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
97015 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
97016 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
97017 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
97018 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
97019 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
97020 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
97021 }
97022
97023 },{}],79:[function(require,module,exports){
97024 (function (Buffer){
97025 // prototype class for hash functions
97026 function Hash (blockSize, finalSize) {
97027 this._block = new Buffer(blockSize)
97028 this._finalSize = finalSize
97029 this._blockSize = blockSize
97030 this._len = 0
97031 this._s = 0
97032 }
97033
97034 Hash.prototype.update = function (data, enc) {
97035 if (typeof data === 'string') {
97036 enc = enc || 'utf8'
97037 data = new Buffer(data, enc)
97038 }
97039
97040 var l = this._len += data.length
97041 var s = this._s || 0
97042 var f = 0
97043 var buffer = this._block
97044
97045 while (s < l) {
97046 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
97047 var ch = (t - f)
97048
97049 for (var i = 0; i < ch; i++) {
97050 buffer[(s % this._blockSize) + i] = data[i + f]
97051 }
97052
97053 s += ch
97054 f += ch
97055
97056 if ((s % this._blockSize) === 0) {
97057 this._update(buffer)
97058 }
97059 }
97060 this._s = s
97061
97062 return this
97063 }
97064
97065 Hash.prototype.digest = function (enc) {
97066 // Suppose the length of the message M, in bits, is l
97067 var l = this._len * 8
97068
97069 // Append the bit 1 to the end of the message
97070 this._block[this._len % this._blockSize] = 0x80
97071
97072 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
97073 this._block.fill(0, this._len % this._blockSize + 1)
97074
97075 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
97076 this._update(this._block)
97077 this._block.fill(0)
97078 }
97079
97080 // to this append the block which is equal to the number l written in binary
97081 // TODO: handle case where l is > Math.pow(2, 29)
97082 this._block.writeInt32BE(l, this._blockSize - 4)
97083
97084 var hash = this._update(this._block) || this._hash()
97085
97086 return enc ? hash.toString(enc) : hash
97087 }
97088
97089 Hash.prototype._update = function () {
97090 throw new Error('_update must be implemented by subclass')
97091 }
97092
97093 module.exports = Hash
97094
97095 }).call(this,require("buffer").Buffer)
97096 },{"buffer":5}],80:[function(require,module,exports){
97097 var exports = module.exports = function SHA (algorithm) {
97098 algorithm = algorithm.toLowerCase()
97099
97100 var Algorithm = exports[algorithm]
97101 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
97102
97103 return new Algorithm()
97104 }
97105
97106 exports.sha = require('./sha')
97107 exports.sha1 = require('./sha1')
97108 exports.sha224 = require('./sha224')
97109 exports.sha256 = require('./sha256')
97110 exports.sha384 = require('./sha384')
97111 exports.sha512 = require('./sha512')
97112
97113 },{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
97114 (function (Buffer){
97115 /*
97116 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
97117 * in FIPS PUB 180-1
97118 * This source code is derived from sha1.js of the same repository.
97119 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
97120 * operation was added.
97121 */
97122
97123 var inherits = require('inherits')
97124 var Hash = require('./hash')
97125
97126 var K = [
97127 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
97128 ]
97129
97130 var W = new Array(80)
97131
97132 function Sha () {
97133 this.init()
97134 this._w = W
97135
97136 Hash.call(this, 64, 56)
97137 }
97138
97139 inherits(Sha, Hash)
97140
97141 Sha.prototype.init = function () {
97142 this._a = 0x67452301
97143 this._b = 0xefcdab89
97144 this._c = 0x98badcfe
97145 this._d = 0x10325476
97146 this._e = 0xc3d2e1f0
97147
97148 return this
97149 }
97150
97151 function rotl5 (num) {
97152 return (num << 5) | (num >>> 27)
97153 }
97154
97155 function rotl30 (num) {
97156 return (num << 30) | (num >>> 2)
97157 }
97158
97159 function ft (s, b, c, d) {
97160 if (s === 0) return (b & c) | ((~b) & d)
97161 if (s === 2) return (b & c) | (b & d) | (c & d)
97162 return b ^ c ^ d
97163 }
97164
97165 Sha.prototype._update = function (M) {
97166 var W = this._w
97167
97168 var a = this._a | 0
97169 var b = this._b | 0
97170 var c = this._c | 0
97171 var d = this._d | 0
97172 var e = this._e | 0
97173
97174 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
97175 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
97176
97177 for (var j = 0; j < 80; ++j) {
97178 var s = ~~(j / 20)
97179 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
97180
97181 e = d
97182 d = c
97183 c = rotl30(b)
97184 b = a
97185 a = t
97186 }
97187
97188 this._a = (a + this._a) | 0
97189 this._b = (b + this._b) | 0
97190 this._c = (c + this._c) | 0
97191 this._d = (d + this._d) | 0
97192 this._e = (e + this._e) | 0
97193 }
97194
97195 Sha.prototype._hash = function () {
97196 var H = new Buffer(20)
97197
97198 H.writeInt32BE(this._a | 0, 0)
97199 H.writeInt32BE(this._b | 0, 4)
97200 H.writeInt32BE(this._c | 0, 8)
97201 H.writeInt32BE(this._d | 0, 12)
97202 H.writeInt32BE(this._e | 0, 16)
97203
97204 return H
97205 }
97206
97207 module.exports = Sha
97208
97209 }).call(this,require("buffer").Buffer)
97210 },{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
97211 (function (Buffer){
97212 /*
97213 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
97214 * in FIPS PUB 180-1
97215 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
97216 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
97217 * Distributed under the BSD License
97218 * See http://pajhome.org.uk/crypt/md5 for details.
97219 */
97220
97221 var inherits = require('inherits')
97222 var Hash = require('./hash')
97223
97224 var K = [
97225 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
97226 ]
97227
97228 var W = new Array(80)
97229
97230 function Sha1 () {
97231 this.init()
97232 this._w = W
97233
97234 Hash.call(this, 64, 56)
97235 }
97236
97237 inherits(Sha1, Hash)
97238
97239 Sha1.prototype.init = function () {
97240 this._a = 0x67452301
97241 this._b = 0xefcdab89
97242 this._c = 0x98badcfe
97243 this._d = 0x10325476
97244 this._e = 0xc3d2e1f0
97245
97246 return this
97247 }
97248
97249 function rotl1 (num) {
97250 return (num << 1) | (num >>> 31)
97251 }
97252
97253 function rotl5 (num) {
97254 return (num << 5) | (num >>> 27)
97255 }
97256
97257 function rotl30 (num) {
97258 return (num << 30) | (num >>> 2)
97259 }
97260
97261 function ft (s, b, c, d) {
97262 if (s === 0) return (b & c) | ((~b) & d)
97263 if (s === 2) return (b & c) | (b & d) | (c & d)
97264 return b ^ c ^ d
97265 }
97266
97267 Sha1.prototype._update = function (M) {
97268 var W = this._w
97269
97270 var a = this._a | 0
97271 var b = this._b | 0
97272 var c = this._c | 0
97273 var d = this._d | 0
97274 var e = this._e | 0
97275
97276 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
97277 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
97278
97279 for (var j = 0; j < 80; ++j) {
97280 var s = ~~(j / 20)
97281 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
97282
97283 e = d
97284 d = c
97285 c = rotl30(b)
97286 b = a
97287 a = t
97288 }
97289
97290 this._a = (a + this._a) | 0
97291 this._b = (b + this._b) | 0
97292 this._c = (c + this._c) | 0
97293 this._d = (d + this._d) | 0
97294 this._e = (e + this._e) | 0
97295 }
97296
97297 Sha1.prototype._hash = function () {
97298 var H = new Buffer(20)
97299
97300 H.writeInt32BE(this._a | 0, 0)
97301 H.writeInt32BE(this._b | 0, 4)
97302 H.writeInt32BE(this._c | 0, 8)
97303 H.writeInt32BE(this._d | 0, 12)
97304 H.writeInt32BE(this._e | 0, 16)
97305
97306 return H
97307 }
97308
97309 module.exports = Sha1
97310
97311 }).call(this,require("buffer").Buffer)
97312 },{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
97313 (function (Buffer){
97314 /**
97315 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
97316 * in FIPS 180-2
97317 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
97318 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
97319 *
97320 */
97321
97322 var inherits = require('inherits')
97323 var Sha256 = require('./sha256')
97324 var Hash = require('./hash')
97325
97326 var W = new Array(64)
97327
97328 function Sha224 () {
97329 this.init()
97330
97331 this._w = W // new Array(64)
97332
97333 Hash.call(this, 64, 56)
97334 }
97335
97336 inherits(Sha224, Sha256)
97337
97338 Sha224.prototype.init = function () {
97339 this._a = 0xc1059ed8
97340 this._b = 0x367cd507
97341 this._c = 0x3070dd17
97342 this._d = 0xf70e5939
97343 this._e = 0xffc00b31
97344 this._f = 0x68581511
97345 this._g = 0x64f98fa7
97346 this._h = 0xbefa4fa4
97347
97348 return this
97349 }
97350
97351 Sha224.prototype._hash = function () {
97352 var H = new Buffer(28)
97353
97354 H.writeInt32BE(this._a, 0)
97355 H.writeInt32BE(this._b, 4)
97356 H.writeInt32BE(this._c, 8)
97357 H.writeInt32BE(this._d, 12)
97358 H.writeInt32BE(this._e, 16)
97359 H.writeInt32BE(this._f, 20)
97360 H.writeInt32BE(this._g, 24)
97361
97362 return H
97363 }
97364
97365 module.exports = Sha224
97366
97367 }).call(this,require("buffer").Buffer)
97368 },{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
97369 (function (Buffer){
97370 /**
97371 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
97372 * in FIPS 180-2
97373 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
97374 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
97375 *
97376 */
97377
97378 var inherits = require('inherits')
97379 var Hash = require('./hash')
97380
97381 var K = [
97382 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
97383 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
97384 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
97385 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
97386 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
97387 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
97388 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
97389 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
97390 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
97391 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
97392 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
97393 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
97394 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
97395 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
97396 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
97397 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
97398 ]
97399
97400 var W = new Array(64)
97401
97402 function Sha256 () {
97403 this.init()
97404
97405 this._w = W // new Array(64)
97406
97407 Hash.call(this, 64, 56)
97408 }
97409
97410 inherits(Sha256, Hash)
97411
97412 Sha256.prototype.init = function () {
97413 this._a = 0x6a09e667
97414 this._b = 0xbb67ae85
97415 this._c = 0x3c6ef372
97416 this._d = 0xa54ff53a
97417 this._e = 0x510e527f
97418 this._f = 0x9b05688c
97419 this._g = 0x1f83d9ab
97420 this._h = 0x5be0cd19
97421
97422 return this
97423 }
97424
97425 function ch (x, y, z) {
97426 return z ^ (x & (y ^ z))
97427 }
97428
97429 function maj (x, y, z) {
97430 return (x & y) | (z & (x | y))
97431 }
97432
97433 function sigma0 (x) {
97434 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
97435 }
97436
97437 function sigma1 (x) {
97438 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
97439 }
97440
97441 function gamma0 (x) {
97442 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
97443 }
97444
97445 function gamma1 (x) {
97446 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
97447 }
97448
97449 Sha256.prototype._update = function (M) {
97450 var W = this._w
97451
97452 var a = this._a | 0
97453 var b = this._b | 0
97454 var c = this._c | 0
97455 var d = this._d | 0
97456 var e = this._e | 0
97457 var f = this._f | 0
97458 var g = this._g | 0
97459 var h = this._h | 0
97460
97461 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
97462 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
97463
97464 for (var j = 0; j < 64; ++j) {
97465 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
97466 var T2 = (sigma0(a) + maj(a, b, c)) | 0
97467
97468 h = g
97469 g = f
97470 f = e
97471 e = (d + T1) | 0
97472 d = c
97473 c = b
97474 b = a
97475 a = (T1 + T2) | 0
97476 }
97477
97478 this._a = (a + this._a) | 0
97479 this._b = (b + this._b) | 0
97480 this._c = (c + this._c) | 0
97481 this._d = (d + this._d) | 0
97482 this._e = (e + this._e) | 0
97483 this._f = (f + this._f) | 0
97484 this._g = (g + this._g) | 0
97485 this._h = (h + this._h) | 0
97486 }
97487
97488 Sha256.prototype._hash = function () {
97489 var H = new Buffer(32)
97490
97491 H.writeInt32BE(this._a, 0)
97492 H.writeInt32BE(this._b, 4)
97493 H.writeInt32BE(this._c, 8)
97494 H.writeInt32BE(this._d, 12)
97495 H.writeInt32BE(this._e, 16)
97496 H.writeInt32BE(this._f, 20)
97497 H.writeInt32BE(this._g, 24)
97498 H.writeInt32BE(this._h, 28)
97499
97500 return H
97501 }
97502
97503 module.exports = Sha256
97504
97505 }).call(this,require("buffer").Buffer)
97506 },{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
97507 (function (Buffer){
97508 var inherits = require('inherits')
97509 var SHA512 = require('./sha512')
97510 var Hash = require('./hash')
97511
97512 var W = new Array(160)
97513
97514 function Sha384 () {
97515 this.init()
97516 this._w = W
97517
97518 Hash.call(this, 128, 112)
97519 }
97520
97521 inherits(Sha384, SHA512)
97522
97523 Sha384.prototype.init = function () {
97524 this._ah = 0xcbbb9d5d
97525 this._bh = 0x629a292a
97526 this._ch = 0x9159015a
97527 this._dh = 0x152fecd8
97528 this._eh = 0x67332667
97529 this._fh = 0x8eb44a87
97530 this._gh = 0xdb0c2e0d
97531 this._hh = 0x47b5481d
97532
97533 this._al = 0xc1059ed8
97534 this._bl = 0x367cd507
97535 this._cl = 0x3070dd17
97536 this._dl = 0xf70e5939
97537 this._el = 0xffc00b31
97538 this._fl = 0x68581511
97539 this._gl = 0x64f98fa7
97540 this._hl = 0xbefa4fa4
97541
97542 return this
97543 }
97544
97545 Sha384.prototype._hash = function () {
97546 var H = new Buffer(48)
97547
97548 function writeInt64BE (h, l, offset) {
97549 H.writeInt32BE(h, offset)
97550 H.writeInt32BE(l, offset + 4)
97551 }
97552
97553 writeInt64BE(this._ah, this._al, 0)
97554 writeInt64BE(this._bh, this._bl, 8)
97555 writeInt64BE(this._ch, this._cl, 16)
97556 writeInt64BE(this._dh, this._dl, 24)
97557 writeInt64BE(this._eh, this._el, 32)
97558 writeInt64BE(this._fh, this._fl, 40)
97559
97560 return H
97561 }
97562
97563 module.exports = Sha384
97564
97565 }).call(this,require("buffer").Buffer)
97566 },{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
97567 (function (Buffer){
97568 var inherits = require('inherits')
97569 var Hash = require('./hash')
97570
97571 var K = [
97572 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
97573 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
97574 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
97575 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
97576 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
97577 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
97578 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
97579 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
97580 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
97581 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
97582 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
97583 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
97584 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
97585 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
97586 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
97587 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
97588 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
97589 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
97590 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
97591 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
97592 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
97593 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
97594 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
97595 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
97596 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
97597 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
97598 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
97599 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
97600 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
97601 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
97602 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
97603 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
97604 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
97605 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
97606 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
97607 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
97608 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
97609 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
97610 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
97611 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
97612 ]
97613
97614 var W = new Array(160)
97615
97616 function Sha512 () {
97617 this.init()
97618 this._w = W
97619
97620 Hash.call(this, 128, 112)
97621 }
97622
97623 inherits(Sha512, Hash)
97624
97625 Sha512.prototype.init = function () {
97626 this._ah = 0x6a09e667
97627 this._bh = 0xbb67ae85
97628 this._ch = 0x3c6ef372
97629 this._dh = 0xa54ff53a
97630 this._eh = 0x510e527f
97631 this._fh = 0x9b05688c
97632 this._gh = 0x1f83d9ab
97633 this._hh = 0x5be0cd19
97634
97635 this._al = 0xf3bcc908
97636 this._bl = 0x84caa73b
97637 this._cl = 0xfe94f82b
97638 this._dl = 0x5f1d36f1
97639 this._el = 0xade682d1
97640 this._fl = 0x2b3e6c1f
97641 this._gl = 0xfb41bd6b
97642 this._hl = 0x137e2179
97643
97644 return this
97645 }
97646
97647 function Ch (x, y, z) {
97648 return z ^ (x & (y ^ z))
97649 }
97650
97651 function maj (x, y, z) {
97652 return (x & y) | (z & (x | y))
97653 }
97654
97655 function sigma0 (x, xl) {
97656 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
97657 }
97658
97659 function sigma1 (x, xl) {
97660 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
97661 }
97662
97663 function Gamma0 (x, xl) {
97664 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
97665 }
97666
97667 function Gamma0l (x, xl) {
97668 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
97669 }
97670
97671 function Gamma1 (x, xl) {
97672 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
97673 }
97674
97675 function Gamma1l (x, xl) {
97676 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
97677 }
97678
97679 function getCarry (a, b) {
97680 return (a >>> 0) < (b >>> 0) ? 1 : 0
97681 }
97682
97683 Sha512.prototype._update = function (M) {
97684 var W = this._w
97685
97686 var ah = this._ah | 0
97687 var bh = this._bh | 0
97688 var ch = this._ch | 0
97689 var dh = this._dh | 0
97690 var eh = this._eh | 0
97691 var fh = this._fh | 0
97692 var gh = this._gh | 0
97693 var hh = this._hh | 0
97694
97695 var al = this._al | 0
97696 var bl = this._bl | 0
97697 var cl = this._cl | 0
97698 var dl = this._dl | 0
97699 var el = this._el | 0
97700 var fl = this._fl | 0
97701 var gl = this._gl | 0
97702 var hl = this._hl | 0
97703
97704 for (var i = 0; i < 32; i += 2) {
97705 W[i] = M.readInt32BE(i * 4)
97706 W[i + 1] = M.readInt32BE(i * 4 + 4)
97707 }
97708 for (; i < 160; i += 2) {
97709 var xh = W[i - 15 * 2]
97710 var xl = W[i - 15 * 2 + 1]
97711 var gamma0 = Gamma0(xh, xl)
97712 var gamma0l = Gamma0l(xl, xh)
97713
97714 xh = W[i - 2 * 2]
97715 xl = W[i - 2 * 2 + 1]
97716 var gamma1 = Gamma1(xh, xl)
97717 var gamma1l = Gamma1l(xl, xh)
97718
97719 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
97720 var Wi7h = W[i - 7 * 2]
97721 var Wi7l = W[i - 7 * 2 + 1]
97722
97723 var Wi16h = W[i - 16 * 2]
97724 var Wi16l = W[i - 16 * 2 + 1]
97725
97726 var Wil = (gamma0l + Wi7l) | 0
97727 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
97728 Wil = (Wil + gamma1l) | 0
97729 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
97730 Wil = (Wil + Wi16l) | 0
97731 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
97732
97733 W[i] = Wih
97734 W[i + 1] = Wil
97735 }
97736
97737 for (var j = 0; j < 160; j += 2) {
97738 Wih = W[j]
97739 Wil = W[j + 1]
97740
97741 var majh = maj(ah, bh, ch)
97742 var majl = maj(al, bl, cl)
97743
97744 var sigma0h = sigma0(ah, al)
97745 var sigma0l = sigma0(al, ah)
97746 var sigma1h = sigma1(eh, el)
97747 var sigma1l = sigma1(el, eh)
97748
97749 // t1 = h + sigma1 + ch + K[j] + W[j]
97750 var Kih = K[j]
97751 var Kil = K[j + 1]
97752
97753 var chh = Ch(eh, fh, gh)
97754 var chl = Ch(el, fl, gl)
97755
97756 var t1l = (hl + sigma1l) | 0
97757 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
97758 t1l = (t1l + chl) | 0
97759 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
97760 t1l = (t1l + Kil) | 0
97761 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
97762 t1l = (t1l + Wil) | 0
97763 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
97764
97765 // t2 = sigma0 + maj
97766 var t2l = (sigma0l + majl) | 0
97767 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
97768
97769 hh = gh
97770 hl = gl
97771 gh = fh
97772 gl = fl
97773 fh = eh
97774 fl = el
97775 el = (dl + t1l) | 0
97776 eh = (dh + t1h + getCarry(el, dl)) | 0
97777 dh = ch
97778 dl = cl
97779 ch = bh
97780 cl = bl
97781 bh = ah
97782 bl = al
97783 al = (t1l + t2l) | 0
97784 ah = (t1h + t2h + getCarry(al, t1l)) | 0
97785 }
97786
97787 this._al = (this._al + al) | 0
97788 this._bl = (this._bl + bl) | 0
97789 this._cl = (this._cl + cl) | 0
97790 this._dl = (this._dl + dl) | 0
97791 this._el = (this._el + el) | 0
97792 this._fl = (this._fl + fl) | 0
97793 this._gl = (this._gl + gl) | 0
97794 this._hl = (this._hl + hl) | 0
97795
97796 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
97797 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
97798 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
97799 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
97800 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
97801 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
97802 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
97803 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
97804 }
97805
97806 Sha512.prototype._hash = function () {
97807 var H = new Buffer(64)
97808
97809 function writeInt64BE (h, l, offset) {
97810 H.writeInt32BE(h, offset)
97811 H.writeInt32BE(l, offset + 4)
97812 }
97813
97814 writeInt64BE(this._ah, this._al, 0)
97815 writeInt64BE(this._bh, this._bl, 8)
97816 writeInt64BE(this._ch, this._cl, 16)
97817 writeInt64BE(this._dh, this._dl, 24)
97818 writeInt64BE(this._eh, this._el, 32)
97819 writeInt64BE(this._fh, this._fl, 40)
97820 writeInt64BE(this._gh, this._gl, 48)
97821 writeInt64BE(this._hh, this._hl, 56)
97822
97823 return H
97824 }
97825
97826 module.exports = Sha512
97827
97828 }).call(this,require("buffer").Buffer)
97829 },{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
97830 var isHexPrefixed = require('is-hex-prefixed');
97831
97832 /**
97833 * Removes '0x' from a given `String` is present
97834 * @param {String} str the string value
97835 * @return {String|Optional} a string by pass if necessary
97836 */
97837 module.exports = function stripHexPrefix(str) {
97838 if (typeof str !== 'string') {
97839 return str;
97840 }
97841
97842 return isHexPrefixed(str) ? str.slice(2) : str;
97843 }
97844
97845 },{"is-hex-prefixed":64}]},{},[31])(31)
97846 });</script>
97847 <script>function convertRippleAdrr(address) {
97848 return window.basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(
97849 window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(address)
97850 )
97851 }
97852
97853 function convertRipplePriv(priv) {
97854 return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2,66)
97855 }
97856
97857 </script>
97858 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
97859
97860 //// base.js
97861
97862 /** @fileOverview Javascript cryptography implementation.
97863 *
97864 * Crush to remove comments, shorten variable names and
97865 * generally reduce transmission size.
97866 *
97867 * @author Emily Stark
97868 * @author Mike Hamburg
97869 * @author Dan Boneh
97870 */
97871
97872 "use strict";
97873 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
97874 /*global document, window, escape, unescape, module, require, Uint32Array */
97875
97876 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
97877 var sjcl = {
97878 /** @namespace Symmetric ciphers. */
97879 cipher: {},
97880
97881 /** @namespace Hash functions. Right now only SHA256 is implemented. */
97882 hash: {},
97883
97884 /** @namespace Key exchange functions. Right now only SRP is implemented. */
97885 keyexchange: {},
97886
97887 /** @namespace Block cipher modes of operation. */
97888 mode: {},
97889
97890 /** @namespace Miscellaneous. HMAC and PBKDF2. */
97891 misc: {},
97892
97893 /**
97894 * @namespace Bit array encoders and decoders.
97895 *
97896 * @description
97897 * The members of this namespace are functions which translate between
97898 * SJCL's bitArrays and other objects (usually strings). Because it
97899 * isn't always clear which direction is encoding and which is decoding,
97900 * the method names are "fromBits" and "toBits".
97901 */
97902 codec: {},
97903
97904 /** @namespace Exceptions. */
97905 exception: {
97906 /** @constructor Ciphertext is corrupt. */
97907 corrupt: function(message) {
97908 this.toString = function() { return "CORRUPT: "+this.message; };
97909 this.message = message;
97910 },
97911
97912 /** @constructor Invalid parameter. */
97913 invalid: function(message) {
97914 this.toString = function() { return "INVALID: "+this.message; };
97915 this.message = message;
97916 },
97917
97918 /** @constructor Bug or missing feature in SJCL. @constructor */
97919 bug: function(message) {
97920 this.toString = function() { return "BUG: "+this.message; };
97921 this.message = message;
97922 },
97923
97924 /** @constructor Something isn't ready. */
97925 notReady: function(message) {
97926 this.toString = function() { return "NOT READY: "+this.message; };
97927 this.message = message;
97928 }
97929 }
97930 };
97931
97932 if(typeof module !== 'undefined' && module.exports){
97933 module.exports = sjcl;
97934 }
97935 if (typeof define === "function") {
97936 define([], function () {
97937 return sjcl;
97938 });
97939 }
97940
97941
97942 //// bitArray.js
97943
97944 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
97945 *
97946 * @author Emily Stark
97947 * @author Mike Hamburg
97948 * @author Dan Boneh
97949 */
97950
97951 /** @namespace Arrays of bits, encoded as arrays of Numbers.
97952 *
97953 * @description
97954 * <p>
97955 * These objects are the currency accepted by SJCL's crypto functions.
97956 * </p>
97957 *
97958 * <p>
97959 * Most of our crypto primitives operate on arrays of 4-byte words internally,
97960 * but many of them can take arguments that are not a multiple of 4 bytes.
97961 * This library encodes arrays of bits (whose size need not be a multiple of 8
97962 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
97963 * array of words, 32 bits at a time. Since the words are double-precision
97964 * floating point numbers, they fit some extra data. We use this (in a private,
97965 * possibly-changing manner) to encode the number of bits actually present
97966 * in the last word of the array.
97967 * </p>
97968 *
97969 * <p>
97970 * Because bitwise ops clear this out-of-band data, these arrays can be passed
97971 * to ciphers like AES which want arrays of words.
97972 * </p>
97973 */
97974 sjcl.bitArray = {
97975 /**
97976 * Array slices in units of bits.
97977 * @param {bitArray} a The array to slice.
97978 * @param {Number} bstart The offset to the start of the slice, in bits.
97979 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
97980 * slice until the end of the array.
97981 * @return {bitArray} The requested slice.
97982 */
97983 bitSlice: function (a, bstart, bend) {
97984 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
97985 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
97986 },
97987
97988 /**
97989 * Extract a number packed into a bit array.
97990 * @param {bitArray} a The array to slice.
97991 * @param {Number} bstart The offset to the start of the slice, in bits.
97992 * @param {Number} length The length of the number to extract.
97993 * @return {Number} The requested slice.
97994 */
97995 extract: function(a, bstart, blength) {
97996 // FIXME: this Math.floor is not necessary at all, but for some reason
97997 // seems to suppress a bug in the Chromium JIT.
97998 var x, sh = Math.floor((-bstart-blength) & 31);
97999 if ((bstart + blength - 1 ^ bstart) & -32) {
98000 // it crosses a boundary
98001 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
98002 } else {
98003 // within a single word
98004 x = a[bstart/32|0] >>> sh;
98005 }
98006 return x & ((1<<blength) - 1);
98007 },
98008
98009 /**
98010 * Concatenate two bit arrays.
98011 * @param {bitArray} a1 The first array.
98012 * @param {bitArray} a2 The second array.
98013 * @return {bitArray} The concatenation of a1 and a2.
98014 */
98015 concat: function (a1, a2) {
98016 if (a1.length === 0 || a2.length === 0) {
98017 return a1.concat(a2);
98018 }
98019
98020 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
98021 if (shift === 32) {
98022 return a1.concat(a2);
98023 } else {
98024 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
98025 }
98026 },
98027
98028 /**
98029 * Find the length of an array of bits.
98030 * @param {bitArray} a The array.
98031 * @return {Number} The length of a, in bits.
98032 */
98033 bitLength: function (a) {
98034 var l = a.length, x;
98035 if (l === 0) { return 0; }
98036 x = a[l - 1];
98037 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
98038 },
98039
98040 /**
98041 * Truncate an array.
98042 * @param {bitArray} a The array.
98043 * @param {Number} len The length to truncate to, in bits.
98044 * @return {bitArray} A new array, truncated to len bits.
98045 */
98046 clamp: function (a, len) {
98047 if (a.length * 32 < len) { return a; }
98048 a = a.slice(0, Math.ceil(len / 32));
98049 var l = a.length;
98050 len = len & 31;
98051 if (l > 0 && len) {
98052 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
98053 }
98054 return a;
98055 },
98056
98057 /**
98058 * Make a partial word for a bit array.
98059 * @param {Number} len The number of bits in the word.
98060 * @param {Number} x The bits.
98061 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
98062 * @return {Number} The partial word.
98063 */
98064 partial: function (len, x, _end) {
98065 if (len === 32) { return x; }
98066 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
98067 },
98068
98069 /**
98070 * Get the number of bits used by a partial word.
98071 * @param {Number} x The partial word.
98072 * @return {Number} The number of bits used by the partial word.
98073 */
98074 getPartial: function (x) {
98075 return Math.round(x/0x10000000000) || 32;
98076 },
98077
98078 /**
98079 * Compare two arrays for equality in a predictable amount of time.
98080 * @param {bitArray} a The first array.
98081 * @param {bitArray} b The second array.
98082 * @return {boolean} true if a == b; false otherwise.
98083 */
98084 equal: function (a, b) {
98085 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
98086 return false;
98087 }
98088 var x = 0, i;
98089 for (i=0; i<a.length; i++) {
98090 x |= a[i]^b[i];
98091 }
98092 return (x === 0);
98093 },
98094
98095 /** Shift an array right.
98096 * @param {bitArray} a The array to shift.
98097 * @param {Number} shift The number of bits to shift.
98098 * @param {Number} [carry=0] A byte to carry in
98099 * @param {bitArray} [out=[]] An array to prepend to the output.
98100 * @private
98101 */
98102 _shiftRight: function (a, shift, carry, out) {
98103 var i, last2=0, shift2;
98104 if (out === undefined) { out = []; }
98105
98106 for (; shift >= 32; shift -= 32) {
98107 out.push(carry);
98108 carry = 0;
98109 }
98110 if (shift === 0) {
98111 return out.concat(a);
98112 }
98113
98114 for (i=0; i<a.length; i++) {
98115 out.push(carry | a[i]>>>shift);
98116 carry = a[i] << (32-shift);
98117 }
98118 last2 = a.length ? a[a.length-1] : 0;
98119 shift2 = sjcl.bitArray.getPartial(last2);
98120 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
98121 return out;
98122 },
98123
98124 /** xor a block of 4 words together.
98125 * @private
98126 */
98127 _xor4: function(x,y) {
98128 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
98129 },
98130
98131 /** byteswap a word array inplace.
98132 * (does not handle partial words)
98133 * @param {sjcl.bitArray} a word array
98134 * @return {sjcl.bitArray} byteswapped array
98135 */
98136 byteswapM: function(a) {
98137 var i, v, m = 0xff00;
98138 for (i = 0; i < a.length; ++i) {
98139 v = a[i];
98140 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
98141 }
98142 return a;
98143 }
98144 };
98145
98146
98147 //// codecString.js
98148
98149 /** @fileOverview Bit array codec implementations.
98150 *
98151 * @author Emily Stark
98152 * @author Mike Hamburg
98153 * @author Dan Boneh
98154 */
98155
98156 /** @namespace UTF-8 strings */
98157 sjcl.codec.utf8String = {
98158 /** Convert from a bitArray to a UTF-8 string. */
98159 fromBits: function (arr) {
98160 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
98161 for (i=0; i<bl/8; i++) {
98162 if ((i&3) === 0) {
98163 tmp = arr[i/4];
98164 }
98165 out += String.fromCharCode(tmp >>> 24);
98166 tmp <<= 8;
98167 }
98168 return decodeURIComponent(escape(out));
98169 },
98170
98171 /** Convert from a UTF-8 string to a bitArray. */
98172 toBits: function (str) {
98173 str = unescape(encodeURIComponent(str));
98174 var out = [], i, tmp=0;
98175 for (i=0; i<str.length; i++) {
98176 tmp = tmp << 8 | str.charCodeAt(i);
98177 if ((i&3) === 3) {
98178 out.push(tmp);
98179 tmp = 0;
98180 }
98181 }
98182 if (i&3) {
98183 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
98184 }
98185 return out;
98186 }
98187 };
98188
98189
98190 //// codecHex.js
98191
98192 /** @fileOverview Bit array codec implementations.
98193 *
98194 * @author Emily Stark
98195 * @author Mike Hamburg
98196 * @author Dan Boneh
98197 */
98198
98199 /** @namespace Hexadecimal */
98200 sjcl.codec.hex = {
98201 /** Convert from a bitArray to a hex string. */
98202 fromBits: function (arr) {
98203 var out = "", i;
98204 for (i=0; i<arr.length; i++) {
98205 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
98206 }
98207 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
98208 },
98209 /** Convert from a hex string to a bitArray. */
98210 toBits: function (str) {
98211 var i, out=[], len;
98212 str = str.replace(/\s|0x/g, "");
98213 len = str.length;
98214 str = str + "00000000";
98215 for (i=0; i<str.length; i+=8) {
98216 out.push(parseInt(str.substr(i,8),16)^0);
98217 }
98218 return sjcl.bitArray.clamp(out, len*4);
98219 }
98220 };
98221
98222
98223 //// sha512.js
98224
98225 /** @fileOverview Javascript SHA-512 implementation.
98226 *
98227 * This implementation was written for CryptoJS by Jeff Mott and adapted for
98228 * SJCL by Stefan Thomas.
98229 *
98230 * CryptoJS (c) 20092012 by Jeff Mott. All rights reserved.
98231 * Released with New BSD License
98232 *
98233 * @author Emily Stark
98234 * @author Mike Hamburg
98235 * @author Dan Boneh
98236 * @author Jeff Mott
98237 * @author Stefan Thomas
98238 */
98239
98240 /**
98241 * Context for a SHA-512 operation in progress.
98242 * @constructor
98243 * @class Secure Hash Algorithm, 512 bits.
98244 */
98245 sjcl.hash.sha512 = function (hash) {
98246 if (!this._key[0]) { this._precompute(); }
98247 if (hash) {
98248 this._h = hash._h.slice(0);
98249 this._buffer = hash._buffer.slice(0);
98250 this._length = hash._length;
98251 } else {
98252 this.reset();
98253 }
98254 };
98255
98256 /**
98257 * Hash a string or an array of words.
98258 * @static
98259 * @param {bitArray|String} data the data to hash.
98260 * @return {bitArray} The hash value, an array of 16 big-endian words.
98261 */
98262 sjcl.hash.sha512.hash = function (data) {
98263 return (new sjcl.hash.sha512()).update(data).finalize();
98264 };
98265
98266 sjcl.hash.sha512.prototype = {
98267 /**
98268 * The hash's block size, in bits.
98269 * @constant
98270 */
98271 blockSize: 1024,
98272
98273 /**
98274 * Reset the hash state.
98275 * @return this
98276 */
98277 reset:function () {
98278 this._h = this._init.slice(0);
98279 this._buffer = [];
98280 this._length = 0;
98281 return this;
98282 },
98283
98284 /**
98285 * Input several words to the hash.
98286 * @param {bitArray|String} data the data to hash.
98287 * @return this
98288 */
98289 update: function (data) {
98290 if (typeof data === "string") {
98291 data = sjcl.codec.utf8String.toBits(data);
98292 }
98293 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
98294 ol = this._length,
98295 nl = this._length = ol + sjcl.bitArray.bitLength(data);
98296 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
98297 this._block(b.splice(0,32));
98298 }
98299 return this;
98300 },
98301
98302 /**
98303 * Complete hashing and output the hash value.
98304 * @return {bitArray} The hash value, an array of 16 big-endian words.
98305 */
98306 finalize:function () {
98307 var i, b = this._buffer, h = this._h;
98308
98309 // Round out and push the buffer
98310 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
98311
98312 // Round out the buffer to a multiple of 32 words, less the 4 length words.
98313 for (i = b.length + 4; i & 31; i++) {
98314 b.push(0);
98315 }
98316
98317 // append the length
98318 b.push(0);
98319 b.push(0);
98320 b.push(Math.floor(this._length / 0x100000000));
98321 b.push(this._length | 0);
98322
98323 while (b.length) {
98324 this._block(b.splice(0,32));
98325 }
98326
98327 this.reset();
98328 return h;
98329 },
98330
98331 /**
98332 * The SHA-512 initialization vector, to be precomputed.
98333 * @private
98334 */
98335 _init:[],
98336
98337 /**
98338 * Least significant 24 bits of SHA512 initialization values.
98339 *
98340 * Javascript only has 53 bits of precision, so we compute the 40 most
98341 * significant bits and add the remaining 24 bits as constants.
98342 *
98343 * @private
98344 */
98345 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
98346
98347 /*
98348 _init:
98349 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
98350 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
98351 */
98352
98353 /**
98354 * The SHA-512 hash key, to be precomputed.
98355 * @private
98356 */
98357 _key:[],
98358
98359 /**
98360 * Least significant 24 bits of SHA512 key values.
98361 * @private
98362 */
98363 _keyr:
98364 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
98365 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
98366 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
98367 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
98368 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
98369 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
98370 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
98371 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
98372 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
98373 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
98374
98375 /*
98376 _key:
98377 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
98378 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
98379 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
98380 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
98381 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
98382 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
98383 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
98384 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
98385 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
98386 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
98387 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
98388 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
98389 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
98390 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
98391 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
98392 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
98393 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
98394 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
98395 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
98396 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
98397 */
98398
98399 /**
98400 * Function to precompute _init and _key.
98401 * @private
98402 */
98403 _precompute: function () {
98404 // XXX: This code is for precomputing the SHA256 constants, change for
98405 // SHA512 and re-enable.
98406 var i = 0, prime = 2, factor;
98407
98408 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
98409 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
98410
98411 outer: for (; i<80; prime++) {
98412 for (factor=2; factor*factor <= prime; factor++) {
98413 if (prime % factor === 0) {
98414 // not a prime
98415 continue outer;
98416 }
98417 }
98418
98419 if (i<8) {
98420 this._init[i*2] = frac(Math.pow(prime, 1/2));
98421 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
98422 }
98423 this._key[i*2] = frac(Math.pow(prime, 1/3));
98424 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
98425 i++;
98426 }
98427 },
98428
98429 /**
98430 * Perform one cycle of SHA-512.
98431 * @param {bitArray} words one block of words.
98432 * @private
98433 */
98434 _block:function (words) {
98435 var i, wrh, wrl,
98436 w = words.slice(0),
98437 h = this._h,
98438 k = this._key,
98439 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
98440 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
98441 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
98442 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
98443
98444 // Working variables
98445 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
98446 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
98447 eh = h4h, el = h4l, fh = h5h, fl = h5l,
98448 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
98449
98450 for (i=0; i<80; i++) {
98451 // load up the input word for this round
98452 if (i<16) {
98453 wrh = w[i * 2];
98454 wrl = w[i * 2 + 1];
98455 } else {
98456 // Gamma0
98457 var gamma0xh = w[(i-15) * 2];
98458 var gamma0xl = w[(i-15) * 2 + 1];
98459 var gamma0h =
98460 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
98461 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
98462 (gamma0xh >>> 7);
98463 var gamma0l =
98464 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
98465 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
98466 ((gamma0xh << 25) | (gamma0xl >>> 7));
98467
98468 // Gamma1
98469 var gamma1xh = w[(i-2) * 2];
98470 var gamma1xl = w[(i-2) * 2 + 1];
98471 var gamma1h =
98472 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
98473 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
98474 (gamma1xh >>> 6);
98475 var gamma1l =
98476 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
98477 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
98478 ((gamma1xh << 26) | (gamma1xl >>> 6));
98479
98480 // Shortcuts
98481 var wr7h = w[(i-7) * 2];
98482 var wr7l = w[(i-7) * 2 + 1];
98483
98484 var wr16h = w[(i-16) * 2];
98485 var wr16l = w[(i-16) * 2 + 1];
98486
98487 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
98488 wrl = gamma0l + wr7l;
98489 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
98490 wrl += gamma1l;
98491 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
98492 wrl += wr16l;
98493 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
98494 }
98495
98496 w[i*2] = wrh |= 0;
98497 w[i*2 + 1] = wrl |= 0;
98498
98499 // Ch
98500 var chh = (eh & fh) ^ (~eh & gh);
98501 var chl = (el & fl) ^ (~el & gl);
98502
98503 // Maj
98504 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
98505 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
98506
98507 // Sigma0
98508 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
98509 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
98510
98511 // Sigma1
98512 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
98513 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
98514
98515 // K(round)
98516 var krh = k[i*2];
98517 var krl = k[i*2+1];
98518
98519 // t1 = h + sigma1 + ch + K(round) + W(round)
98520 var t1l = hl + sigma1l;
98521 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
98522 t1l += chl;
98523 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
98524 t1l += krl;
98525 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
98526 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
98527 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
98528
98529 // t2 = sigma0 + maj
98530 var t2l = sigma0l + majl;
98531 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
98532
98533 // Update working variables
98534 hh = gh;
98535 hl = gl;
98536 gh = fh;
98537 gl = fl;
98538 fh = eh;
98539 fl = el;
98540 el = (dl + t1l) | 0;
98541 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
98542 dh = ch;
98543 dl = cl;
98544 ch = bh;
98545 cl = bl;
98546 bh = ah;
98547 bl = al;
98548 al = (t1l + t2l) | 0;
98549 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
98550 }
98551
98552 // Intermediate hash
98553 h0l = h[1] = (h0l + al) | 0;
98554 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
98555 h1l = h[3] = (h1l + bl) | 0;
98556 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
98557 h2l = h[5] = (h2l + cl) | 0;
98558 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
98559 h3l = h[7] = (h3l + dl) | 0;
98560 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
98561 h4l = h[9] = (h4l + el) | 0;
98562 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
98563 h5l = h[11] = (h5l + fl) | 0;
98564 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
98565 h6l = h[13] = (h6l + gl) | 0;
98566 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
98567 h7l = h[15] = (h7l + hl) | 0;
98568 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
98569 }
98570 };
98571
98572
98573 //// hmac.js
98574
98575 /** @fileOverview HMAC implementation.
98576 *
98577 * @author Emily Stark
98578 * @author Mike Hamburg
98579 * @author Dan Boneh
98580 */
98581
98582 /** HMAC with the specified hash function.
98583 * @constructor
98584 * @param {bitArray} key the key for HMAC.
98585 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
98586 */
98587 sjcl.misc.hmac = function (key, Hash) {
98588 this._hash = Hash = Hash || sjcl.hash.sha256;
98589 var exKey = [[],[]], i,
98590 bs = Hash.prototype.blockSize / 32;
98591 this._baseHash = [new Hash(), new Hash()];
98592
98593 if (key.length > bs) {
98594 key = Hash.hash(key);
98595 }
98596
98597 for (i=0; i<bs; i++) {
98598 exKey[0][i] = key[i]^0x36363636;
98599 exKey[1][i] = key[i]^0x5C5C5C5C;
98600 }
98601
98602 this._baseHash[0].update(exKey[0]);
98603 this._baseHash[1].update(exKey[1]);
98604 this._resultHash = new Hash(this._baseHash[0]);
98605 };
98606
98607 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
98608 * @param {bitArray|String} data The data to mac.
98609 */
98610 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
98611 if (!this._updated) {
98612 this.update(data);
98613 return this.digest(data);
98614 } else {
98615 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
98616 }
98617 };
98618
98619 sjcl.misc.hmac.prototype.reset = function () {
98620 this._resultHash = new this._hash(this._baseHash[0]);
98621 this._updated = false;
98622 };
98623
98624 sjcl.misc.hmac.prototype.update = function (data) {
98625 this._updated = true;
98626 this._resultHash.update(data);
98627 };
98628
98629 sjcl.misc.hmac.prototype.digest = function () {
98630 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
98631
98632 this.reset();
98633
98634 return result;
98635 };
98636
98637
98638 //// pbkdf2.js
98639
98640
98641 /** @fileOverview Password-based key-derivation function, version 2.0.
98642 *
98643 * @author Emily Stark
98644 * @author Mike Hamburg
98645 * @author Dan Boneh
98646 */
98647
98648 /** Password-Based Key-Derivation Function, version 2.0.
98649 *
98650 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
98651 *
98652 * This is the method specified by RSA's PKCS #5 standard.
98653 *
98654 * @param {bitArray|String} password The password.
98655 * @param {bitArray|String} salt The salt. Should have lots of entropy.
98656 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
98657 * @param {Number} [length] The length of the derived key. Defaults to the
98658 output size of the hash function.
98659 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
98660 * @return {bitArray} the derived key.
98661 */
98662 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
98663 count = count || 1000;
98664
98665 if (length < 0 || count < 0) {
98666 throw sjcl.exception.invalid("invalid params to pbkdf2");
98667 }
98668
98669 if (typeof password === "string") {
98670 password = sjcl.codec.utf8String.toBits(password);
98671 }
98672
98673 if (typeof salt === "string") {
98674 salt = sjcl.codec.utf8String.toBits(salt);
98675 }
98676
98677 Prff = Prff || sjcl.misc.hmac;
98678
98679 var prf = new Prff(password),
98680 u, ui, i, j, k, out = [], b = sjcl.bitArray;
98681
98682 for (k = 1; 32 * out.length < (length || 1); k++) {
98683 u = ui = prf.encrypt(b.concat(salt,[k]));
98684
98685 for (i=1; i<count; i++) {
98686 ui = prf.encrypt(ui);
98687 for (j=0; j<ui.length; j++) {
98688 u[j] ^= ui[j];
98689 }
98690 }
98691
98692 out = out.concat(u);
98693 }
98694
98695 if (length) { out = b.clamp(out, length); }
98696
98697 return out;
98698 };
98699
98700
98701 //// sha256.js
98702
98703 /** @fileOverview Javascript SHA-256 implementation.
98704 *
98705 * An older version of this implementation is available in the public
98706 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
98707 * Stanford University 2008-2010 and BSD-licensed for liability
98708 * reasons.
98709 *
98710 * Special thanks to Aldo Cortesi for pointing out several bugs in
98711 * this code.
98712 *
98713 * @author Emily Stark
98714 * @author Mike Hamburg
98715 * @author Dan Boneh
98716 */
98717
98718 /**
98719 * Context for a SHA-256 operation in progress.
98720 * @constructor
98721 * @class Secure Hash Algorithm, 256 bits.
98722 */
98723 sjcl.hash.sha256 = function (hash) {
98724 if (!this._key[0]) { this._precompute(); }
98725 if (hash) {
98726 this._h = hash._h.slice(0);
98727 this._buffer = hash._buffer.slice(0);
98728 this._length = hash._length;
98729 } else {
98730 this.reset();
98731 }
98732 };
98733
98734 /**
98735 * Hash a string or an array of words.
98736 * @static
98737 * @param {bitArray|String} data the data to hash.
98738 * @return {bitArray} The hash value, an array of 16 big-endian words.
98739 */
98740 sjcl.hash.sha256.hash = function (data) {
98741 return (new sjcl.hash.sha256()).update(data).finalize();
98742 };
98743
98744 sjcl.hash.sha256.prototype = {
98745 /**
98746 * The hash's block size, in bits.
98747 * @constant
98748 */
98749 blockSize: 512,
98750
98751 /**
98752 * Reset the hash state.
98753 * @return this
98754 */
98755 reset:function () {
98756 this._h = this._init.slice(0);
98757 this._buffer = [];
98758 this._length = 0;
98759 return this;
98760 },
98761
98762 /**
98763 * Input several words to the hash.
98764 * @param {bitArray|String} data the data to hash.
98765 * @return this
98766 */
98767 update: function (data) {
98768 if (typeof data === "string") {
98769 data = sjcl.codec.utf8String.toBits(data);
98770 }
98771 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
98772 ol = this._length,
98773 nl = this._length = ol + sjcl.bitArray.bitLength(data);
98774 for (i = 512+ol & -512; i <= nl; i+= 512) {
98775 this._block(b.splice(0,16));
98776 }
98777 return this;
98778 },
98779
98780 /**
98781 * Complete hashing and output the hash value.
98782 * @return {bitArray} The hash value, an array of 8 big-endian words.
98783 */
98784 finalize:function () {
98785 var i, b = this._buffer, h = this._h;
98786
98787 // Round out and push the buffer
98788 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
98789
98790 // Round out the buffer to a multiple of 16 words, less the 2 length words.
98791 for (i = b.length + 2; i & 15; i++) {
98792 b.push(0);
98793 }
98794
98795 // append the length
98796 b.push(Math.floor(this._length / 0x100000000));
98797 b.push(this._length | 0);
98798
98799 while (b.length) {
98800 this._block(b.splice(0,16));
98801 }
98802
98803 this.reset();
98804 return h;
98805 },
98806
98807 /**
98808 * The SHA-256 initialization vector, to be precomputed.
98809 * @private
98810 */
98811 _init:[],
98812 /*
98813 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
98814 */
98815
98816 /**
98817 * The SHA-256 hash key, to be precomputed.
98818 * @private
98819 */
98820 _key:[],
98821 /*
98822 _key:
98823 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
98824 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
98825 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
98826 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
98827 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
98828 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
98829 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
98830 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
98831 */
98832
98833
98834 /**
98835 * Function to precompute _init and _key.
98836 * @private
98837 */
98838 _precompute: function () {
98839 var i = 0, prime = 2, factor;
98840
98841 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
98842
98843 outer: for (; i<64; prime++) {
98844 for (factor=2; factor*factor <= prime; factor++) {
98845 if (prime % factor === 0) {
98846 // not a prime
98847 continue outer;
98848 }
98849 }
98850
98851 if (i<8) {
98852 this._init[i] = frac(Math.pow(prime, 1/2));
98853 }
98854 this._key[i] = frac(Math.pow(prime, 1/3));
98855 i++;
98856 }
98857 },
98858
98859 /**
98860 * Perform one cycle of SHA-256.
98861 * @param {bitArray} words one block of words.
98862 * @private
98863 */
98864 _block:function (words) {
98865 var i, tmp, a, b,
98866 w = words.slice(0),
98867 h = this._h,
98868 k = this._key,
98869 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
98870 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
98871
98872 /* Rationale for placement of |0 :
98873 * If a value can overflow is original 32 bits by a factor of more than a few
98874 * million (2^23 ish), there is a possibility that it might overflow the
98875 * 53-bit mantissa and lose precision.
98876 *
98877 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
98878 * propagates around the loop, and on the hash state h[]. I don't believe
98879 * that the clamps on h4 and on h0 are strictly necessary, but it's close
98880 * (for h4 anyway), and better safe than sorry.
98881 *
98882 * The clamps on h[] are necessary for the output to be correct even in the
98883 * common case and for short inputs.
98884 */
98885 for (i=0; i<64; i++) {
98886 // load up the input word for this round
98887 if (i<16) {
98888 tmp = w[i];
98889 } else {
98890 a = w[(i+1 ) & 15];
98891 b = w[(i+14) & 15];
98892 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
98893 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
98894 w[i&15] + w[(i+9) & 15]) | 0;
98895 }
98896
98897 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
98898
98899 // shift register
98900 h7 = h6; h6 = h5; h5 = h4;
98901 h4 = h3 + tmp | 0;
98902 h3 = h2; h2 = h1; h1 = h0;
98903
98904 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
98905 }
98906
98907 h[0] = h[0]+h0 | 0;
98908 h[1] = h[1]+h1 | 0;
98909 h[2] = h[2]+h2 | 0;
98910 h[3] = h[3]+h3 | 0;
98911 h[4] = h[4]+h4 | 0;
98912 h[5] = h[5]+h5 | 0;
98913 h[6] = h[6]+h6 | 0;
98914 h[7] = h[7]+h7 | 0;
98915 }
98916 };
98917 </script>
98918 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
98919 WORDLISTS["english"] = [
98920 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
98921 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
98922 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
98923 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
98924 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
98925 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
98926 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
98927 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
98928 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
98929 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
98930 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
98931 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
98932 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
98933 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
98934 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
98935 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
98936 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
98937 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
98938 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
98939 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
98940 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
98941 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
98942 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
98943 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
98944 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
98945 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
98946 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
98947 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
98948 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
98949 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
98950 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
98951 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
98952 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
98953 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
98954 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
98955 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
98956 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
98957 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
98958 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
98959 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
98960 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
98961 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
98962 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
98963 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
98964 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
98965 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
98966 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
98967 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
98968 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
98969 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
98970 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
98971 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
98972 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
98973 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
98974 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
98975 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
98976 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
98977 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
98978 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
98979 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
98980 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
98981 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
98982 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
98983 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
98984 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
98985 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
98986 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
98987 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
98988 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
98989 "film","filter","final","find","fine","finger","finish","fire","firm","first",
98990 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
98991 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
98992 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
98993 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
98994 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
98995 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
98996 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
98997 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
98998 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
98999 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
99000 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
99001 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
99002 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
99003 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
99004 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
99005 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
99006 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
99007 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
99008 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
99009 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
99010 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
99011 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
99012 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
99013 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
99014 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
99015 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
99016 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
99017 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
99018 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
99019 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
99020 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
99021 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
99022 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
99023 "liar","liberty","library","license","life","lift","light","like","limb","limit",
99024 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
99025 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
99026 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
99027 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
99028 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
99029 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
99030 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
99031 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
99032 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
99033 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
99034 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
99035 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
99036 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
99037 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
99038 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
99039 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
99040 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
99041 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
99042 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
99043 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
99044 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
99045 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
99046 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
99047 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
99048 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
99049 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
99050 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
99051 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
99052 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
99053 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
99054 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
99055 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
99056 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
99057 "prize","problem","process","produce","profit","program","project","promote","proof","property",
99058 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
99059 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
99060 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
99061 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
99062 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
99063 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
99064 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
99065 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
99066 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
99067 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
99068 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
99069 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
99070 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
99071 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
99072 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
99073 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
99074 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
99075 "scrub","sea","search","season","seat","second","secret","section","security","seed",
99076 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
99077 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
99078 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
99079 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
99080 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
99081 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
99082 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
99083 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
99084 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
99085 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
99086 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
99087 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
99088 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
99089 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
99090 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
99091 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
99092 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
99093 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
99094 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
99095 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
99096 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
99097 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
99098 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
99099 "thank","that","theme","then","theory","there","they","thing","this","thought",
99100 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
99101 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
99102 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
99103 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
99104 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
99105 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
99106 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
99107 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
99108 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
99109 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
99110 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
99111 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
99112 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
99113 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
99114 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
99115 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
99116 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
99117 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
99118 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
99119 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
99120 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
99121 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
99122 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
99123 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
99124 "yellow","you","young","youth","zebra","zero","zone","zoo"]
99125 </script>
99126 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
99127 WORDLISTS["japanese"] = [
99128 "あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
99129 "あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
99130 "あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
99131 "あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
99132 "あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
99133 "あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
99134 "いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
99135 "いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
99136 "いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
99137 "いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
99138 "いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
99139 "いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
99140 "いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
99141 "いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
99142 "いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
99143 "うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
99144 "うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
99145 "うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
99146 "うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
99147 "うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
99148 "うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
99149 "えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
99150 "えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
99151 "えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
99152 "えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
99153 "おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
99154 "おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
99155 "おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
99156 "おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
99157 "おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
99158 "おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
99159 "おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
99160 "かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
99161 "かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
99162 "かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
99163 "がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
99164 "かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
99165 "かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
99166 "きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
99167 "きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
99168 "ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
99169 "きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
99170 "きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
99171 "きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
99172 "きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
99173 "きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
99174 "くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
99175 "くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
99176 "くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
99177 "ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
99178 "くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
99179 "ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
99180 "けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
99181 "げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
99182 "けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
99183 "けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
99184 "けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
99185 "けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
99186 "けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
99187 "けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
99188 "ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
99189 "ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
99190 "ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
99191 "こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
99192 "こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
99193 "こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
99194 "こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
99195 "こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
99196 "こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
99197 "こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
99198 "こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
99199 "さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
99200 "さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
99201 "さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
99202 "さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
99203 "さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
99204 "さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
99205 "ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
99206 "しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
99207 "しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
99208 "しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
99209 "しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
99210 "しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
99211 "しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
99212 "しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
99213 "しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
99214 "しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
99215 "しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
99216 "すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
99217 "すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
99218 "すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
99219 "ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
99220 "すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
99221 "せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
99222 "せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
99223 "せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
99224 "せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
99225 "ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
99226 "せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
99227 "せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
99228 "そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
99229 "そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
99230 "そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
99231 "そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
99232 "そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
99233 "ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
99234 "たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
99235 "だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
99236 "たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
99237 "たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
99238 "たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
99239 "たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
99240 "たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
99241 "ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
99242 "たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
99243 "たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
99244 "たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
99245 "ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
99246 "ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
99247 "ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
99248 "ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
99249 "ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
99250 "つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
99251 "つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
99252 "つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
99253 "てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
99254 "ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
99255 "てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
99256 "でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
99257 "てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
99258 "でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
99259 "でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
99260 "どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
99261 "とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
99262 "とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
99263 "とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
99264 "どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
99265 "ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
99266 "なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
99267 "なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
99268 "ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
99269 "にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
99270 "にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
99271 "にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
99272 "にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
99273 "にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
99274 "ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
99275 "ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
99276 "ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
99277 "ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
99278 "ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
99279 "のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
99280 "のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
99281 "ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
99282 "はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
99283 "はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
99284 "はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
99285 "はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
99286 "はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
99287 "はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
99288 "はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
99289 "ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
99290 "ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
99291 "ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
99292 "ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
99293 "ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
99294 "ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
99295 "ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
99296 "ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
99297 "ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
99298 "ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
99299 "ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
99300 "ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
99301 "へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
99302 "へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
99303 "へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
99304 "ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
99305 "ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
99306 "ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
99307 "ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
99308 "まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
99309 "まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
99310 "みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
99311 "みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
99312 "みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
99313 "むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
99314 "むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
99315 "むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
99316 "めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
99317 "めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
99318 "もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
99319 "やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
99320 "やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
99321 "ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
99322 "ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
99323 "よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
99324 "よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
99325 "らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
99326 "りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
99327 "りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
99328 "りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
99329 "れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
99330 "れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
99331 "ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
99332 "わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
99333 </script>
99334 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
99335 WORDLISTS["spanish"] = [
99336 "ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
99337 "abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
99338 "aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
99339 "acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
99340 "afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
99341 "agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
99342 "alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
99343 "aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
99344 "altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
99345 "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
99346 "ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
99347 "anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
99348 "apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
99349 "apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
99350 "arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
99351 "arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
99352 "asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
99353 "astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
99354 "atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
99355 "ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
99356 "aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
99357 "baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
99358 "banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
99359 "batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
99360 "beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
99361 "bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
99362 "bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
99363 "bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
99364 "bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
99365 "bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
99366 "caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
99367 "caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
99368 "calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
99369 "canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
99370 "captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
99371 "carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
99372 "causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
99373 "ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
99374 "chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
99375 "choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
99376 "cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
99377 "clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
99378 "cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
99379 "cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
99380 "comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
99381 "copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
99382 "cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
99383 "cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
99384 "cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
99385 "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
99386 "curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
99387 "decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
99388 "dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
99389 "detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
99390 "dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
99391 "dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
99392 "don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
99393 "duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
99394 "ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
99395 "eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
99396 "elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
99397 "encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
99398 "enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
99399 "erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
99400 "espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
99401 "eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
99402 "excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
99403 "fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
99404 "faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
99405 "fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
99406 "fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
99407 "fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
99408 "fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
99409 "fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
99410 "forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
99411 "fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
99412 "fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
99413 "gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
99414 "ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
99415 "género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
99416 "giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
99417 "gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
99418 "grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
99419 "grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
99420 "gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
99421 "harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
99422 "hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
99423 "hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
99424 "horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
99425 "humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
99426 "ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
99427 "imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
99428 "inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
99429 "ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
99430 "jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
99431 "juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
99432 "juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
99433 "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
99434 "lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
99435 "latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
99436 "legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
99437 "leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
99438 "lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
99439 "líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
99440 "llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
99441 "lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
99442 "luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
99443 "maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
99444 "mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
99445 "manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
99446 "marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
99447 "matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
99448 "mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
99449 "mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
99450 "miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
99451 "minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
99452 "moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
99453 "monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
99454 "morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
99455 "mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
99456 "muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
99457 "nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
99458 "naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
99459 "neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
99460 "nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
99461 "novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
99462 "nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
99463 "observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
99464 "octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
99465 "oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
99466 "olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
99467 "ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
99468 "orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
99469 "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
99470 "óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
99471 "país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
99472 "panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
99473 "pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
99474 "paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
99475 "pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
99476 "peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
99477 "pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
99478 "persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
99479 "pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
99480 "pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
99481 "pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
99482 "pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
99483 "policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
99484 "posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
99485 "premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
99486 "proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
99487 "prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
99488 "pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
99489 "queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
99490 "rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
99491 "rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
99492 "rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
99493 "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
99494 "reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
99495 "remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
99496 "resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
99497 "rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
99498 "riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
99499 "rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
99500 "ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
99501 "rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
99502 "rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
99503 "salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
99504 "sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
99505 "sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
99506 "seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
99507 "sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
99508 "severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
99509 "silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
99510 "sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
99511 "sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
99512 "sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
99513 "sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
99514 "surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
99515 "talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
99516 "tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
99517 "tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
99518 "tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
99519 "tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
99520 "testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
99521 "tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
99522 "tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
99523 "todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
99524 "torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
99525 "toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
99526 "trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
99527 "trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
99528 "truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
99529 "turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
99530 "uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
99531 "utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
99532 "válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
99533 "vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
99534 "veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
99535 "verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
99536 "vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
99537 "viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
99538 "vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
99539 "vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
99540 "zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
99541 </script>
99542 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
99543 WORDLISTS["chinese_simplified"] = [
99544 "的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
99545 "中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
99546 "时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
99547 "就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
99548 "同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
99549 "面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
99550 "民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
99551 "度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
99552 "二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
99553 "两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
99554 "去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
99555 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
99556 "那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
99557 "样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
99558 "心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
99559 "或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
99560 "条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
99561 "无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
99562 "已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
99563 "果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
99564 "次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
99565 "求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
99566 "图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
99567 "别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
99568 "几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
99569 "必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
99570 "南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
99571 "百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
99572 "压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
99573 "术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
99574 "收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
99575 "风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
99576 "身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
99577 "达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
99578 "八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
99579 "节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
99580 "传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
99581 "研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
99582 "织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
99583 "复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
99584 "深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
99585 "半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
99586 "史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
99587 "何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
99588 "号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
99589 "毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
99590 "王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
99591 "却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
99592 "包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
99593 "细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
99594 "官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
99595 "女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
99596 "含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
99597 "英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
99598 "破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
99599 "河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
99600 "案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
99601 "仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
99602 "轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
99603 "足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
99604 "负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
99605 "修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
99606 "财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
99607 "跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
99608 "初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
99609 "未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
99610 "钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
99611 "限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
99612 "州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
99613 "础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
99614 "袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
99615 "诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
99616 "夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
99617 "终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
99618 "烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
99619 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
99620 "侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
99621 "货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
99622 "息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
99623 "医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
99624 "训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
99625 "脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
99626 "械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
99627 "粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
99628 "钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
99629 "培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
99630 "答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
99631 "脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
99632 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
99633 "评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
99634 "伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
99635 "亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
99636 "诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
99637 "绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
99638 "屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
99639 "束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
99640 "胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
99641 "宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
99642 "露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
99643 "库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
99644 "鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
99645 "借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
99646 "润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
99647 "欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
99648 "纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
99649 "塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
99650 "刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
99651 "洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
99652 "献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
99653 "阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
99654 "楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
99655 "馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
99656 "塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
99657 "楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
99658 "监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
99659 "壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
99660 "桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
99661 "您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
99662 "纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
99663 "湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
99664 "齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
99665 "净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
99666 "庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
99667 "伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
99668 "璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
99669 "纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
99670 "津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
99671 "肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
99672 "贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
99673 "峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
99674 "浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
99675 "睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
99676 "炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
99677 "呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
99678 "授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
99679 "幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
99680 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
99681 "夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
99682 "绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
99683 "礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
99684 "勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
99685 "饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
99686 "扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
99687 "奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
99688 "寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
99689 "贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
99690 "渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
99691 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
99692 "锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
99693 "缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
99694 "碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
99695 "票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
99696 "荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
99697 "撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
99698 "陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
99699 "虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
99700 "乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
99701 "瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
99702 "秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
99703 "洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
99704 "籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
99705 "醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
99706 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
99707 "趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
99708 "滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
99709 "泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
99710 "胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
99711 "串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
99712 "辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
99713 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
99714 "侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
99715 "豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
99716 "掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
99717 "雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
99718 "蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
99719 "番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
99720 "扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
99721 "悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
99722 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
99723 "霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
99724 "甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
99725 "伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
99726 "弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
99727 "逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
99728 "冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
99729 "欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
99730 "搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
99731 "忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
99732 "杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
99733 "烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
99734 "姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
99735 "董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
99736 "拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
99737 "览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
99738 "凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
99739 "丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
99740 "铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
99741 "窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
99742 "胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
99743 "疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
99744 "嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
99745 "莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
99746 "皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
99747 "巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
99748 "卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
99749 </script>
99750 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
99751 WORDLISTS["chinese_traditional"] = [
99752 "的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
99753 "中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
99754 "時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
99755 "就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
99756 "同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
99757 "面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
99758 "民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
99759 "度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
99760 "二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
99761 "兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
99762 "去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
99763 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
99764 "那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
99765 "樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
99766 "心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
99767 "或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
99768 "條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
99769 "無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
99770 "已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
99771 "果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
99772 "次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
99773 "求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
99774 "圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
99775 "別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
99776 "幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
99777 "必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
99778 "南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
99779 "百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
99780 "壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
99781 "術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
99782 "收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
99783 "風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
99784 "身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
99785 "達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
99786 "八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
99787 "節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
99788 "傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
99789 "研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
99790 "織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
99791 "复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
99792 "深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
99793 "半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
99794 "史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
99795 "何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
99796 "號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
99797 "毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
99798 "王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
99799 "卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
99800 "包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
99801 "細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
99802 "官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
99803 "女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
99804 "含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
99805 "英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
99806 "破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
99807 "河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
99808 "案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
99809 "僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
99810 "輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
99811 "足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
99812 "負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
99813 "修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
99814 "財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
99815 "跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
99816 "初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
99817 "未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
99818 "錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
99819 "限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
99820 "州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
99821 "礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
99822 "袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
99823 "訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
99824 "夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
99825 "終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
99826 "烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
99827 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
99828 "侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
99829 "貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
99830 "息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
99831 "醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
99832 "訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
99833 "脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
99834 "械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
99835 "粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
99836 "鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
99837 "培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
99838 "答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
99839 "腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
99840 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
99841 "評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
99842 "傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
99843 "亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
99844 "詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
99845 "綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
99846 "屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
99847 "束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
99848 "胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
99849 "宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
99850 "露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
99851 "庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
99852 "鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
99853 "借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
99854 "潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
99855 "歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
99856 "納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
99857 "塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
99858 "刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
99859 "洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
99860 "獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
99861 "陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
99862 "樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
99863 "館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
99864 "塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
99865 "楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
99866 "監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
99867 "壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
99868 "橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
99869 "您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
99870 "紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
99871 "灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
99872 "齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
99873 "淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
99874 "莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
99875 "夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
99876 "璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
99877 "縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
99878 "津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
99879 "肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
99880 "貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
99881 "峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
99882 "浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
99883 "睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
99884 "炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
99885 "呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
99886 "授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
99887 "幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
99888 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
99889 "夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
99890 "繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
99891 "禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
99892 "勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
99893 "飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
99894 "掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
99895 "奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
99896 "寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
99897 "貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
99898 "漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
99899 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
99900 "銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
99901 "缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
99902 "碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
99903 "票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
99904 "荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
99905 "撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
99906 "陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
99907 "蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
99908 "乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
99909 "瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
99910 "秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
99911 "洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
99912 "籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
99913 "醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
99914 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
99915 "趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
99916 "灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
99917 "泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
99918 "脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
99919 "串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
99920 "輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
99921 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
99922 "僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
99923 "豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
99924 "掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
99925 "霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
99926 "蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
99927 "番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
99928 "扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
99929 "悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
99930 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
99931 "黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
99932 "甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
99933 "偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
99934 "弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
99935 "逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
99936 "冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
99937 "欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
99938 "搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
99939 "憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
99940 "杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
99941 "烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
99942 "姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
99943 "董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
99944 "拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
99945 "覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
99946 "兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
99947 "叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
99948 "鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
99949 "窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
99950 "胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
99951 "瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
99952 "嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
99953 "蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
99954 "皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
99955 "巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
99956 "卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
99957 </script>
99958 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
99959 WORDLISTS["french"] = [
99960 "abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
99961 "abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
99962 "acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
99963 "aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
99964 "adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
99965 "adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
99966 "agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
99967 "aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
99968 "alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
99969 "ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
99970 "amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
99971 "animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
99972 "anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
99973 "aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
99974 "armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
99975 "aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
99976 "atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
99977 "audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
99978 "aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
99979 "badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
99980 "bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
99981 "bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
99982 "bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
99983 "bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
99984 "biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
99985 "blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
99986 "bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
99987 "bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
99988 "breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
99989 "broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
99990 "bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
99991 "caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
99992 "caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
99993 "caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
99994 "carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
99995 "caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
99996 "cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
99997 "charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
99998 "chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
99999 "chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
100000 "citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
100001 "cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
100002 "coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
100003 "colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
100004 "connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
100005 "corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
100006 "couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
100007 "crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
100008 "crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
100009 "curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
100010 "dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
100011 "déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
100012 "dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
100013 "dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
100014 "dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
100015 "détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
100016 "différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
100017 "discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
100018 "domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
100019 "doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
100020 "dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
100021 "écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
100022 "écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
100023 "effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
100024 "élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
100025 "embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
100026 "émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
100027 "enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
100028 "ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
100029 "énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
100030 "épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
100031 "épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
100032 "espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
100033 "estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
100034 "ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
100035 "évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
100036 "exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
100037 "exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
100038 "exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
100039 "farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
100040 "favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
100041 "féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
100042 "figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
100043 "fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
100044 "fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
100045 "fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
100046 "fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
100047 "frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
100048 "fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
100049 "galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
100050 "gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
100051 "gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
100052 "gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
100053 "goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
100054 "grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
100055 "gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
100056 "hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
100057 "hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
100058 "histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
100059 "horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
100060 "humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
100061 "illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
100062 "imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
100063 "inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
100064 "inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
100065 "inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
100066 "inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
100067 "jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
100068 "jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
100069 "joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
100070 "kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
100071 "laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
100072 "laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
100073 "lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
100074 "ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
100075 "lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
100076 "loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
100077 "lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
100078 "magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
100079 "malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
100080 "marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
100081 "matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
100082 "méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
100083 "mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
100084 "métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
100085 "mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
100086 "moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
100087 "morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
100088 "mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
100089 "muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
100090 "natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
100091 "négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
100092 "nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
100093 "normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
100094 "nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
100095 "obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
100096 "octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
100097 "olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
100098 "opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
100099 "oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
100100 "otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
100101 "paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
100102 "panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
100103 "parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
100104 "patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
100105 "pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
100106 "perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
100107 "pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
100108 "pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
100109 "pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
100110 "pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
100111 "pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
100112 "ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
100113 "pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
100114 "préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
100115 "problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
100116 "prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
100117 "pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
100118 "question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
100119 "ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
100120 "réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
100121 "rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
100122 "régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
100123 "remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
100124 "reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
100125 "rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
100126 "révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
100127 "rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
100128 "rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
100129 "ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
100130 "sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
100131 "sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
100132 "savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
100133 "scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
100134 "séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
100135 "séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
100136 "sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
100137 "sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
100138 "soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
100139 "sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
100140 "soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
100141 "station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
100142 "subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
100143 "surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
100144 "synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
100145 "tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
100146 "tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
100147 "tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
100148 "tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
100149 "tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
100150 "torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
100151 "trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
100152 "tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
100153 "tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
100154 "typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
100155 "univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
100156 "vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
100157 "valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
100158 "végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
100159 "vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
100160 "viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
100161 "violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
100162 "vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
100163 "voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
100164 "voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
100165 </script>
100166 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
100167 WORDLISTS["italian"] = [
100168 "abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
100169 "accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
100170 "addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
100171 "affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
100172 "agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
100173 "alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
100174 "allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
100175 "altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
100176 "america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
100177 "amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
100178 "andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
100179 "anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
100180 "appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
100181 "archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
100182 "arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
100183 "asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
100184 "astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
100185 "attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
100186 "avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
100187 "badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
100188 "bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
100189 "battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
100190 "benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
100191 "bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
100192 "bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
100193 "botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
100194 "brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
100195 "buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
100196 "cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
100197 "camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
100198 "capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
100199 "carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
100200 "casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
100201 "cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
100202 "cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
100203 "ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
100204 "ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
100205 "cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
100206 "comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
100207 "consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
100208 "cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
100209 "cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
100210 "critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
100211 "cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
100212 "daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
100213 "decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
100214 "demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
100215 "desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
100216 "diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
100217 "disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
100218 "dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
100219 "dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
100220 "dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
100221 "economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
100222 "elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
100223 "eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
100224 "enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
100225 "eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
100226 "erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
100227 "esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
100228 "esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
100229 "europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
100230 "famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
100231 "fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
100232 "feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
100233 "feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
100234 "fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
100235 "fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
100236 "fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
100237 "fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
100238 "frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
100239 "fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
100240 "gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
100241 "garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
100242 "gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
100243 "ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
100244 "gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
100245 "gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
100246 "gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
100247 "guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
100248 "idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
100249 "imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
100250 "importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
100251 "incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
100252 "ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
100253 "insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
100254 "invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
100255 "irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
100256 "lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
100257 "larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
100258 "lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
100259 "levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
100260 "liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
100261 "lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
100262 "luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
100263 "macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
100264 "malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
100265 "mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
100266 "massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
100267 "medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
100268 "merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
100269 "mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
100270 "minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
100271 "mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
100272 "molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
100273 "mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
100274 "mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
100275 "muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
100276 "narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
100277 "negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
100278 "nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
100279 "normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
100280 "nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
100281 "obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
100282 "offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
100283 "ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
100284 "onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
100285 "orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
100286 "orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
100287 "ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
100288 "ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
100289 "padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
100290 "pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
100291 "parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
100292 "pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
100293 "penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
100294 "periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
100295 "pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
100296 "piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
100297 "pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
100298 "pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
100299 "poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
100300 "pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
100301 "positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
100302 "prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
100303 "principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
100304 "proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
100305 "pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
100306 "qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
100307 "ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
100308 "rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
100309 "recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
100310 "remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
100311 "rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
100312 "ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
100313 "rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
100314 "rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
100315 "ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
100316 "rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
100317 "riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
100318 "rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
100319 "rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
100320 "rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
100321 "salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
100322 "sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
100323 "sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
100324 "sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
100325 "scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
100326 "scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
100327 "scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
100328 "sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
100329 "selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
100330 "sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
100331 "setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
100332 "sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
100333 "sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
100334 "sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
100335 "sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
100336 "smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
100337 "snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
100338 "solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
100339 "sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
100340 "sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
100341 "spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
100342 "spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
100343 "sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
100344 "statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
100345 "storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
100346 "succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
100347 "sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
100348 "svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
100349 "tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
100350 "tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
100351 "tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
100352 "tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
100353 "titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
100354 "tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
100355 "tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
100356 "trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
100357 "trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
100358 "trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
100359 "tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
100360 "ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
100361 "unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
100362 "usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
100363 "valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
100364 "vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
100365 "vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
100366 "verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
100367 "vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
100368 "vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
100369 "viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
100370 "viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
100371 "zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
100372 "zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
100373 </script>
100374 <script>/*
100375 * Copyright (c) 2013 Pavol Rusnak
100376 *
100377 * Permission is hereby granted, free of charge, to any person obtaining a copy of
100378 * this software and associated documentation files (the "Software"), to deal in
100379 * the Software without restriction, including without limitation the rights to
100380 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
100381 * of the Software, and to permit persons to whom the Software is furnished to do
100382 * so, subject to the following conditions:
100383 *
100384 * The above copyright notice and this permission notice shall be included in all
100385 * copies or substantial portions of the Software.
100386 *
100387 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
100388 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
100389 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
100390 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
100391 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
100392 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
100393 */
100394
100395 /*
100396 * Javascript port from python by Ian Coleman
100397 *
100398 * Requires code from sjcl
100399 * https://github.com/bitwiseshiftleft/sjcl
100400 */
100401
100402 var Mnemonic = function(language) {
100403
100404 var PBKDF2_ROUNDS = 2048;
100405 var RADIX = 2048;
100406
100407 var self = this;
100408 var wordlist = [];
100409
100410 var hmacSHA512 = function(key) {
100411 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
100412 this.encrypt = function() {
100413 return hasher.encrypt.apply(hasher, arguments);
100414 };
100415 };
100416
100417 function init() {
100418 wordlist = WORDLISTS[language];
100419 if (wordlist.length != RADIX) {
100420 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
100421 throw err;
100422 }
100423 }
100424
100425 self.generate = function(strength) {
100426 strength = strength || 128;
100427 var r = strength % 32;
100428 if (r > 0) {
100429 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
100430 }
100431 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
100432 if (!hasStrongCrypto) {
100433 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
100434 }
100435 var buffer = new Uint8Array(strength / 8);
100436 var data = crypto.getRandomValues(buffer);
100437 return self.toMnemonic(data);
100438 }
100439
100440 self.toMnemonic = function(byteArray) {
100441 if (byteArray.length % 4 > 0) {
100442 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
100443 }
100444
100445 //h = hashlib.sha256(data).hexdigest()
100446 var data = byteArrayToWordArray(byteArray);
100447 var hash = sjcl.hash.sha256.hash(data);
100448 var h = sjcl.codec.hex.fromBits(hash);
100449
100450 // b is a binary string, eg '00111010101100...'
100451 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
100452 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
100453 //
100454 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
100455 // c = bin(int(h, 16))[2:].zfill(256)
100456 // d = c[:len(data) * 8 / 32]
100457 var a = byteArrayToBinaryString(byteArray);
100458 var c = zfill(hexStringToBinaryString(h), 256);
100459 var d = c.substring(0, byteArray.length * 8 / 32);
100460 // b = line1 + line2
100461 var b = a + d;
100462
100463 var result = [];
100464 var blen = b.length / 11;
100465 for (var i=0; i<blen; i++) {
100466 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
100467 result.push(wordlist[idx]);
100468 }
100469 return self.joinWords(result);
100470 }
100471
100472 self.check = function(mnemonic) {
100473 var mnemonic = self.splitWords(mnemonic);
100474 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
100475 return false
100476 }
100477 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
100478 var idx = [];
100479 for (var i=0; i<mnemonic.length; i++) {
100480 var word = mnemonic[i];
100481 var wordIndex = wordlist.indexOf(word);
100482 if (wordIndex == -1) {
100483 return false;
100484 }
100485 var binaryIndex = zfill(wordIndex.toString(2), 11);
100486 idx.push(binaryIndex);
100487 }
100488 var b = idx.join('');
100489 var l = b.length;
100490 //d = b[:l / 33 * 32]
100491 //h = b[-l / 33:]
100492 var d = b.substring(0, l / 33 * 32);
100493 var h = b.substring(l - l / 33, l);
100494 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
100495 var nd = binaryStringToWordArray(d);
100496 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
100497 var ndHash = sjcl.hash.sha256.hash(nd);
100498 var ndHex = sjcl.codec.hex.fromBits(ndHash);
100499 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
100500 var nh = ndBstr.substring(0,l/33);
100501 return h == nh;
100502 }
100503
100504 self.toSeed = function(mnemonic, passphrase) {
100505 passphrase = passphrase || '';
100506 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
100507 var mnemonicNormalized = self.normalizeString(mnemonic);
100508 passphrase = self.normalizeString(passphrase)
100509 passphrase = "mnemonic" + passphrase;
100510 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
100511 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
100512 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
100513 var hashHex = sjcl.codec.hex.fromBits(result);
100514 return hashHex;
100515 }
100516
100517 self.splitWords = function(mnemonic) {
100518 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
100519 }
100520
100521 self.joinWords = function(words) {
100522 // Set space correctly depending on the language
100523 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
100524 var space = " ";
100525 if (language == "japanese") {
100526 space = "\u3000"; // ideographic space
100527 }
100528 return words.join(space);
100529 }
100530
100531 self.normalizeString = function(str) {
100532 if (typeof str.normalize == "function") {
100533 return str.normalize("NFKD");
100534 }
100535 else {
100536 // TODO decide how to handle this in the future.
100537 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
100538 return str;
100539 }
100540 }
100541
100542 function byteArrayToWordArray(data) {
100543 var a = [];
100544 for (var i=0; i<data.length/4; i++) {
100545 v = 0;
100546 v += data[i*4 + 0] << 8 * 3;
100547 v += data[i*4 + 1] << 8 * 2;
100548 v += data[i*4 + 2] << 8 * 1;
100549 v += data[i*4 + 3] << 8 * 0;
100550 a.push(v);
100551 }
100552 return a;
100553 }
100554
100555 function byteArrayToBinaryString(data) {
100556 var bin = "";
100557 for (var i=0; i<data.length; i++) {
100558 bin += zfill(data[i].toString(2), 8);
100559 }
100560 return bin;
100561 }
100562
100563 function hexStringToBinaryString(hexString) {
100564 binaryString = "";
100565 for (var i=0; i<hexString.length; i++) {
100566 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
100567 }
100568 return binaryString;
100569 }
100570
100571 function binaryStringToWordArray(binary) {
100572 var aLen = binary.length / 32;
100573 var a = [];
100574 for (var i=0; i<aLen; i++) {
100575 var valueStr = binary.substring(0,32);
100576 var value = parseInt(valueStr, 2);
100577 a.push(value);
100578 binary = binary.slice(32);
100579 }
100580 return a;
100581 }
100582
100583 // Pad a numeric string on the left with zero digits until the given width
100584 // is reached.
100585 // Note this differs to the python implementation because it does not
100586 // handle numbers starting with a sign.
100587 function zfill(source, length) {
100588 source = source.toString();
100589 while (source.length < length) {
100590 source = '0' + source;
100591 }
100592 return source;
100593 }
100594
100595 init();
100596
100597 }
100598 </script>
100599 <script>/*
100600 JavaScript BigInteger library version 0.9.1
100601 http://silentmatt.com/biginteger/
100602
100603 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
100604 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
100605 Licensed under the MIT license.
100606
100607 Support for arbitrary internal representation base was added by
100608 Vitaly Magerya.
100609 */
100610
100611 /*
100612 File: biginteger.js
100613
100614 Exports:
100615
100616 <BigInteger>
100617 */
100618 (function(exports) {
100619 "use strict";
100620 /*
100621 Class: BigInteger
100622 An arbitrarily-large integer.
100623
100624 <BigInteger> objects should be considered immutable. None of the "built-in"
100625 methods modify *this* or their arguments. All properties should be
100626 considered private.
100627
100628 All the methods of <BigInteger> instances can be called "statically". The
100629 static versions are convenient if you don't already have a <BigInteger>
100630 object.
100631
100632 As an example, these calls are equivalent.
100633
100634 > BigInteger(4).multiply(5); // returns BigInteger(20);
100635 > BigInteger.multiply(4, 5); // returns BigInteger(20);
100636
100637 > var a = 42;
100638 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
100639 */
100640
100641 var CONSTRUCT = {}; // Unique token to call "private" version of constructor
100642
100643 /*
100644 Constructor: BigInteger()
100645 Convert a value to a <BigInteger>.
100646
100647 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
100648 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
100649 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
100650 without a radix argument.
100651
100652 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
100653 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
100654 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
100655 > var n3 = BigInteger(n2); // Return n2, unchanged
100656
100657 The constructor form only takes an array and a sign. *n* must be an
100658 array of numbers in little-endian order, where each digit is between 0
100659 and BigInteger.base. The second parameter sets the sign: -1 for
100660 negative, +1 for positive, or 0 for zero. The array is *not copied and
100661 may be modified*. If the array contains only zeros, the sign parameter
100662 is ignored and is forced to zero.
100663
100664 > new BigInteger([5], -1): create a new BigInteger with value -5
100665
100666 Parameters:
100667
100668 n - Value to convert to a <BigInteger>.
100669
100670 Returns:
100671
100672 A <BigInteger> value.
100673
100674 See Also:
100675
100676 <parse>, <BigInteger>
100677 */
100678 function BigInteger(n, s, token) {
100679 if (token !== CONSTRUCT) {
100680 if (n instanceof BigInteger) {
100681 return n;
100682 }
100683 else if (typeof n === "undefined") {
100684 return ZERO;
100685 }
100686 return BigInteger.parse(n);
100687 }
100688
100689 n = n || []; // Provide the nullary constructor for subclasses.
100690 while (n.length && !n[n.length - 1]) {
100691 --n.length;
100692 }
100693 this._d = n;
100694 this._s = n.length ? (s || 1) : 0;
100695 }
100696
100697 BigInteger._construct = function(n, s) {
100698 return new BigInteger(n, s, CONSTRUCT);
100699 };
100700
100701 // Base-10 speedup hacks in parse, toString, exp10 and log functions
100702 // require base to be a power of 10. 10^7 is the largest such power
100703 // that won't cause a precision loss when digits are multiplied.
100704 var BigInteger_base = 10000000;
100705 var BigInteger_base_log10 = 7;
100706
100707 BigInteger.base = BigInteger_base;
100708 BigInteger.base_log10 = BigInteger_base_log10;
100709
100710 var ZERO = new BigInteger([], 0, CONSTRUCT);
100711 // Constant: ZERO
100712 // <BigInteger> 0.
100713 BigInteger.ZERO = ZERO;
100714
100715 var ONE = new BigInteger([1], 1, CONSTRUCT);
100716 // Constant: ONE
100717 // <BigInteger> 1.
100718 BigInteger.ONE = ONE;
100719
100720 var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
100721 // Constant: M_ONE
100722 // <BigInteger> -1.
100723 BigInteger.M_ONE = M_ONE;
100724
100725 // Constant: _0
100726 // Shortcut for <ZERO>.
100727 BigInteger._0 = ZERO;
100728
100729 // Constant: _1
100730 // Shortcut for <ONE>.
100731 BigInteger._1 = ONE;
100732
100733 /*
100734 Constant: small
100735 Array of <BigIntegers> from 0 to 36.
100736
100737 These are used internally for parsing, but useful when you need a "small"
100738 <BigInteger>.
100739
100740 See Also:
100741
100742 <ZERO>, <ONE>, <_0>, <_1>
100743 */
100744 BigInteger.small = [
100745 ZERO,
100746 ONE,
100747 /* Assuming BigInteger_base > 36 */
100748 new BigInteger( [2], 1, CONSTRUCT),
100749 new BigInteger( [3], 1, CONSTRUCT),
100750 new BigInteger( [4], 1, CONSTRUCT),
100751 new BigInteger( [5], 1, CONSTRUCT),
100752 new BigInteger( [6], 1, CONSTRUCT),
100753 new BigInteger( [7], 1, CONSTRUCT),
100754 new BigInteger( [8], 1, CONSTRUCT),
100755 new BigInteger( [9], 1, CONSTRUCT),
100756 new BigInteger([10], 1, CONSTRUCT),
100757 new BigInteger([11], 1, CONSTRUCT),
100758 new BigInteger([12], 1, CONSTRUCT),
100759 new BigInteger([13], 1, CONSTRUCT),
100760 new BigInteger([14], 1, CONSTRUCT),
100761 new BigInteger([15], 1, CONSTRUCT),
100762 new BigInteger([16], 1, CONSTRUCT),
100763 new BigInteger([17], 1, CONSTRUCT),
100764 new BigInteger([18], 1, CONSTRUCT),
100765 new BigInteger([19], 1, CONSTRUCT),
100766 new BigInteger([20], 1, CONSTRUCT),
100767 new BigInteger([21], 1, CONSTRUCT),
100768 new BigInteger([22], 1, CONSTRUCT),
100769 new BigInteger([23], 1, CONSTRUCT),
100770 new BigInteger([24], 1, CONSTRUCT),
100771 new BigInteger([25], 1, CONSTRUCT),
100772 new BigInteger([26], 1, CONSTRUCT),
100773 new BigInteger([27], 1, CONSTRUCT),
100774 new BigInteger([28], 1, CONSTRUCT),
100775 new BigInteger([29], 1, CONSTRUCT),
100776 new BigInteger([30], 1, CONSTRUCT),
100777 new BigInteger([31], 1, CONSTRUCT),
100778 new BigInteger([32], 1, CONSTRUCT),
100779 new BigInteger([33], 1, CONSTRUCT),
100780 new BigInteger([34], 1, CONSTRUCT),
100781 new BigInteger([35], 1, CONSTRUCT),
100782 new BigInteger([36], 1, CONSTRUCT)
100783 ];
100784
100785 // Used for parsing/radix conversion
100786 BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
100787
100788 /*
100789 Method: toString
100790 Convert a <BigInteger> to a string.
100791
100792 When *base* is greater than 10, letters are upper case.
100793
100794 Parameters:
100795
100796 base - Optional base to represent the number in (default is base 10).
100797 Must be between 2 and 36 inclusive, or an Error will be thrown.
100798
100799 Returns:
100800
100801 The string representation of the <BigInteger>.
100802 */
100803 BigInteger.prototype.toString = function(base) {
100804 base = +base || 10;
100805 if (base < 2 || base > 36) {
100806 throw new Error("illegal radix " + base + ".");
100807 }
100808 if (this._s === 0) {
100809 return "0";
100810 }
100811 if (base === 10) {
100812 var str = this._s < 0 ? "-" : "";
100813 str += this._d[this._d.length - 1].toString();
100814 for (var i = this._d.length - 2; i >= 0; i--) {
100815 var group = this._d[i].toString();
100816 while (group.length < BigInteger_base_log10) group = '0' + group;
100817 str += group;
100818 }
100819 return str;
100820 }
100821 else {
100822 var numerals = BigInteger.digits;
100823 base = BigInteger.small[base];
100824 var sign = this._s;
100825
100826 var n = this.abs();
100827 var digits = [];
100828 var digit;
100829
100830 while (n._s !== 0) {
100831 var divmod = n.divRem(base);
100832 n = divmod[0];
100833 digit = divmod[1];
100834 // TODO: This could be changed to unshift instead of reversing at the end.
100835 // Benchmark both to compare speeds.
100836 digits.push(numerals[digit.valueOf()]);
100837 }
100838 return (sign < 0 ? "-" : "") + digits.reverse().join("");
100839 }
100840 };
100841
100842 // Verify strings for parsing
100843 BigInteger.radixRegex = [
100844 /^$/,
100845 /^$/,
100846 /^[01]*$/,
100847 /^[012]*$/,
100848 /^[0-3]*$/,
100849 /^[0-4]*$/,
100850 /^[0-5]*$/,
100851 /^[0-6]*$/,
100852 /^[0-7]*$/,
100853 /^[0-8]*$/,
100854 /^[0-9]*$/,
100855 /^[0-9aA]*$/,
100856 /^[0-9abAB]*$/,
100857 /^[0-9abcABC]*$/,
100858 /^[0-9a-dA-D]*$/,
100859 /^[0-9a-eA-E]*$/,
100860 /^[0-9a-fA-F]*$/,
100861 /^[0-9a-gA-G]*$/,
100862 /^[0-9a-hA-H]*$/,
100863 /^[0-9a-iA-I]*$/,
100864 /^[0-9a-jA-J]*$/,
100865 /^[0-9a-kA-K]*$/,
100866 /^[0-9a-lA-L]*$/,
100867 /^[0-9a-mA-M]*$/,
100868 /^[0-9a-nA-N]*$/,
100869 /^[0-9a-oA-O]*$/,
100870 /^[0-9a-pA-P]*$/,
100871 /^[0-9a-qA-Q]*$/,
100872 /^[0-9a-rA-R]*$/,
100873 /^[0-9a-sA-S]*$/,
100874 /^[0-9a-tA-T]*$/,
100875 /^[0-9a-uA-U]*$/,
100876 /^[0-9a-vA-V]*$/,
100877 /^[0-9a-wA-W]*$/,
100878 /^[0-9a-xA-X]*$/,
100879 /^[0-9a-yA-Y]*$/,
100880 /^[0-9a-zA-Z]*$/
100881 ];
100882
100883 /*
100884 Function: parse
100885 Parse a string into a <BigInteger>.
100886
100887 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
100888 *base* is not provided, it will be guessed based on the leading characters
100889 of *s* as follows:
100890
100891 - "0x" or "0X": *base* = 16
100892 - "0c" or "0C": *base* = 8
100893 - "0b" or "0B": *base* = 2
100894 - else: *base* = 10
100895
100896 If no base is provided, or *base* is 10, the number can be in exponential
100897 form. For example, these are all valid:
100898
100899 > BigInteger.parse("1e9"); // Same as "1000000000"
100900 > BigInteger.parse("1.234*10^3"); // Same as 1234
100901 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
100902
100903 If any characters fall outside the range defined by the radix, an exception
100904 will be thrown.
100905
100906 Parameters:
100907
100908 s - The string to parse.
100909 base - Optional radix (default is to guess based on *s*).
100910
100911 Returns:
100912
100913 a <BigInteger> instance.
100914 */
100915 BigInteger.parse = function(s, base) {
100916 // Expands a number in exponential form to decimal form.
100917 // expandExponential("-13.441*10^5") === "1344100";
100918 // expandExponential("1.12300e-1") === "0.112300";
100919 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
100920 function expandExponential(str) {
100921 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
100922
100923 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
100924 c = +c;
100925 var l = c < 0;
100926 var i = n.length + c;
100927 x = (l ? n : f).length;
100928 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
100929 var z = (new Array(c + 1)).join("0");
100930 var r = n + f;
100931 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
100932 });
100933 }
100934
100935 s = s.toString();
100936 if (typeof base === "undefined" || +base === 10) {
100937 s = expandExponential(s);
100938 }
100939
100940 var prefixRE;
100941 if (typeof base === "undefined") {
100942 prefixRE = '0[xcb]';
100943 }
100944 else if (base == 16) {
100945 prefixRE = '0x';
100946 }
100947 else if (base == 8) {
100948 prefixRE = '0c';
100949 }
100950 else if (base == 2) {
100951 prefixRE = '0b';
100952 }
100953 else {
100954 prefixRE = '';
100955 }
100956 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
100957 if (parts) {
100958 var sign = parts[1] || "+";
100959 var baseSection = parts[2] || "";
100960 var digits = parts[3] || "";
100961
100962 if (typeof base === "undefined") {
100963 // Guess base
100964 if (baseSection === "0x" || baseSection === "0X") { // Hex
100965 base = 16;
100966 }
100967 else if (baseSection === "0c" || baseSection === "0C") { // Octal
100968 base = 8;
100969 }
100970 else if (baseSection === "0b" || baseSection === "0B") { // Binary
100971 base = 2;
100972 }
100973 else {
100974 base = 10;
100975 }
100976 }
100977 else if (base < 2 || base > 36) {
100978 throw new Error("Illegal radix " + base + ".");
100979 }
100980
100981 base = +base;
100982
100983 // Check for digits outside the range
100984 if (!(BigInteger.radixRegex[base].test(digits))) {
100985 throw new Error("Bad digit for radix " + base);
100986 }
100987
100988 // Strip leading zeros, and convert to array
100989 digits = digits.replace(/^0+/, "").split("");
100990 if (digits.length === 0) {
100991 return ZERO;
100992 }
100993
100994 // Get the sign (we know it's not zero)
100995 sign = (sign === "-") ? -1 : 1;
100996
100997 // Optimize 10
100998 if (base == 10) {
100999 var d = [];
101000 while (digits.length >= BigInteger_base_log10) {
101001 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
101002 }
101003 d.push(parseInt(digits.join(''), 10));
101004 return new BigInteger(d, sign, CONSTRUCT);
101005 }
101006
101007 // Do the conversion
101008 var d = ZERO;
101009 base = BigInteger.small[base];
101010 var small = BigInteger.small;
101011 for (var i = 0; i < digits.length; i++) {
101012 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
101013 }
101014 return new BigInteger(d._d, sign, CONSTRUCT);
101015 }
101016 else {
101017 throw new Error("Invalid BigInteger format: " + s);
101018 }
101019 };
101020
101021 /*
101022 Function: add
101023 Add two <BigIntegers>.
101024
101025 Parameters:
101026
101027 n - The number to add to *this*. Will be converted to a <BigInteger>.
101028
101029 Returns:
101030
101031 The numbers added together.
101032
101033 See Also:
101034
101035 <subtract>, <multiply>, <quotient>, <next>
101036 */
101037 BigInteger.prototype.add = function(n) {
101038 if (this._s === 0) {
101039 return BigInteger(n);
101040 }
101041
101042 n = BigInteger(n);
101043 if (n._s === 0) {
101044 return this;
101045 }
101046 if (this._s !== n._s) {
101047 n = n.negate();
101048 return this.subtract(n);
101049 }
101050
101051 var a = this._d;
101052 var b = n._d;
101053 var al = a.length;
101054 var bl = b.length;
101055 var sum = new Array(Math.max(al, bl) + 1);
101056 var size = Math.min(al, bl);
101057 var carry = 0;
101058 var digit;
101059
101060 for (var i = 0; i < size; i++) {
101061 digit = a[i] + b[i] + carry;
101062 sum[i] = digit % BigInteger_base;
101063 carry = (digit / BigInteger_base) | 0;
101064 }
101065 if (bl > al) {
101066 a = b;
101067 al = bl;
101068 }
101069 for (i = size; carry && i < al; i++) {
101070 digit = a[i] + carry;
101071 sum[i] = digit % BigInteger_base;
101072 carry = (digit / BigInteger_base) | 0;
101073 }
101074 if (carry) {
101075 sum[i] = carry;
101076 }
101077
101078 for ( ; i < al; i++) {
101079 sum[i] = a[i];
101080 }
101081
101082 return new BigInteger(sum, this._s, CONSTRUCT);
101083 };
101084
101085 /*
101086 Function: negate
101087 Get the additive inverse of a <BigInteger>.
101088
101089 Returns:
101090
101091 A <BigInteger> with the same magnatude, but with the opposite sign.
101092
101093 See Also:
101094
101095 <abs>
101096 */
101097 BigInteger.prototype.negate = function() {
101098 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
101099 };
101100
101101 /*
101102 Function: abs
101103 Get the absolute value of a <BigInteger>.
101104
101105 Returns:
101106
101107 A <BigInteger> with the same magnatude, but always positive (or zero).
101108
101109 See Also:
101110
101111 <negate>
101112 */
101113 BigInteger.prototype.abs = function() {
101114 return (this._s < 0) ? this.negate() : this;
101115 };
101116
101117 /*
101118 Function: subtract
101119 Subtract two <BigIntegers>.
101120
101121 Parameters:
101122
101123 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
101124
101125 Returns:
101126
101127 The *n* subtracted from *this*.
101128
101129 See Also:
101130
101131 <add>, <multiply>, <quotient>, <prev>
101132 */
101133 BigInteger.prototype.subtract = function(n) {
101134 if (this._s === 0) {
101135 return BigInteger(n).negate();
101136 }
101137
101138 n = BigInteger(n);
101139 if (n._s === 0) {
101140 return this;
101141 }
101142 if (this._s !== n._s) {
101143 n = n.negate();
101144 return this.add(n);
101145 }
101146
101147 var m = this;
101148 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
101149 if (this._s < 0) {
101150 m = new BigInteger(n._d, 1, CONSTRUCT);
101151 n = new BigInteger(this._d, 1, CONSTRUCT);
101152 }
101153
101154 // Both are positive => a - b
101155 var sign = m.compareAbs(n);
101156 if (sign === 0) {
101157 return ZERO;
101158 }
101159 else if (sign < 0) {
101160 // swap m and n
101161 var t = n;
101162 n = m;
101163 m = t;
101164 }
101165
101166 // a > b
101167 var a = m._d;
101168 var b = n._d;
101169 var al = a.length;
101170 var bl = b.length;
101171 var diff = new Array(al); // al >= bl since a > b
101172 var borrow = 0;
101173 var i;
101174 var digit;
101175
101176 for (i = 0; i < bl; i++) {
101177 digit = a[i] - borrow - b[i];
101178 if (digit < 0) {
101179 digit += BigInteger_base;
101180 borrow = 1;
101181 }
101182 else {
101183 borrow = 0;
101184 }
101185 diff[i] = digit;
101186 }
101187 for (i = bl; i < al; i++) {
101188 digit = a[i] - borrow;
101189 if (digit < 0) {
101190 digit += BigInteger_base;
101191 }
101192 else {
101193 diff[i++] = digit;
101194 break;
101195 }
101196 diff[i] = digit;
101197 }
101198 for ( ; i < al; i++) {
101199 diff[i] = a[i];
101200 }
101201
101202 return new BigInteger(diff, sign, CONSTRUCT);
101203 };
101204
101205 (function() {
101206 function addOne(n, sign) {
101207 var a = n._d;
101208 var sum = a.slice();
101209 var carry = true;
101210 var i = 0;
101211
101212 while (true) {
101213 var digit = (a[i] || 0) + 1;
101214 sum[i] = digit % BigInteger_base;
101215 if (digit <= BigInteger_base - 1) {
101216 break;
101217 }
101218 ++i;
101219 }
101220
101221 return new BigInteger(sum, sign, CONSTRUCT);
101222 }
101223
101224 function subtractOne(n, sign) {
101225 var a = n._d;
101226 var sum = a.slice();
101227 var borrow = true;
101228 var i = 0;
101229
101230 while (true) {
101231 var digit = (a[i] || 0) - 1;
101232 if (digit < 0) {
101233 sum[i] = digit + BigInteger_base;
101234 }
101235 else {
101236 sum[i] = digit;
101237 break;
101238 }
101239 ++i;
101240 }
101241
101242 return new BigInteger(sum, sign, CONSTRUCT);
101243 }
101244
101245 /*
101246 Function: next
101247 Get the next <BigInteger> (add one).
101248
101249 Returns:
101250
101251 *this* + 1.
101252
101253 See Also:
101254
101255 <add>, <prev>
101256 */
101257 BigInteger.prototype.next = function() {
101258 switch (this._s) {
101259 case 0:
101260 return ONE;
101261 case -1:
101262 return subtractOne(this, -1);
101263 // case 1:
101264 default:
101265 return addOne(this, 1);
101266 }
101267 };
101268
101269 /*
101270 Function: prev
101271 Get the previous <BigInteger> (subtract one).
101272
101273 Returns:
101274
101275 *this* - 1.
101276
101277 See Also:
101278
101279 <next>, <subtract>
101280 */
101281 BigInteger.prototype.prev = function() {
101282 switch (this._s) {
101283 case 0:
101284 return M_ONE;
101285 case -1:
101286 return addOne(this, -1);
101287 // case 1:
101288 default:
101289 return subtractOne(this, 1);
101290 }
101291 };
101292 })();
101293
101294 /*
101295 Function: compareAbs
101296 Compare the absolute value of two <BigIntegers>.
101297
101298 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
101299
101300 Parameters:
101301
101302 n - The number to compare to *this*. Will be converted to a <BigInteger>.
101303
101304 Returns:
101305
101306 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
101307
101308 See Also:
101309
101310 <compare>, <abs>
101311 */
101312 BigInteger.prototype.compareAbs = function(n) {
101313 if (this === n) {
101314 return 0;
101315 }
101316
101317 if (!(n instanceof BigInteger)) {
101318 if (!isFinite(n)) {
101319 return(isNaN(n) ? n : -1);
101320 }
101321 n = BigInteger(n);
101322 }
101323
101324 if (this._s === 0) {
101325 return (n._s !== 0) ? -1 : 0;
101326 }
101327 if (n._s === 0) {
101328 return 1;
101329 }
101330
101331 var l = this._d.length;
101332 var nl = n._d.length;
101333 if (l < nl) {
101334 return -1;
101335 }
101336 else if (l > nl) {
101337 return 1;
101338 }
101339
101340 var a = this._d;
101341 var b = n._d;
101342 for (var i = l-1; i >= 0; i--) {
101343 if (a[i] !== b[i]) {
101344 return a[i] < b[i] ? -1 : 1;
101345 }
101346 }
101347
101348 return 0;
101349 };
101350
101351 /*
101352 Function: compare
101353 Compare two <BigIntegers>.
101354
101355 Parameters:
101356
101357 n - The number to compare to *this*. Will be converted to a <BigInteger>.
101358
101359 Returns:
101360
101361 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
101362
101363 See Also:
101364
101365 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
101366 */
101367 BigInteger.prototype.compare = function(n) {
101368 if (this === n) {
101369 return 0;
101370 }
101371
101372 n = BigInteger(n);
101373
101374 if (this._s === 0) {
101375 return -n._s;
101376 }
101377
101378 if (this._s === n._s) { // both positive or both negative
101379 var cmp = this.compareAbs(n);
101380 return cmp * this._s;
101381 }
101382 else {
101383 return this._s;
101384 }
101385 };
101386
101387 /*
101388 Function: isUnit
101389 Return true iff *this* is either 1 or -1.
101390
101391 Returns:
101392
101393 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
101394
101395 See Also:
101396
101397 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
101398 <BigInteger.ONE>, <BigInteger.M_ONE>
101399 */
101400 BigInteger.prototype.isUnit = function() {
101401 return this === ONE ||
101402 this === M_ONE ||
101403 (this._d.length === 1 && this._d[0] === 1);
101404 };
101405
101406 /*
101407 Function: multiply
101408 Multiply two <BigIntegers>.
101409
101410 Parameters:
101411
101412 n - The number to multiply *this* by. Will be converted to a
101413 <BigInteger>.
101414
101415 Returns:
101416
101417 The numbers multiplied together.
101418
101419 See Also:
101420
101421 <add>, <subtract>, <quotient>, <square>
101422 */
101423 BigInteger.prototype.multiply = function(n) {
101424 // TODO: Consider adding Karatsuba multiplication for large numbers
101425 if (this._s === 0) {
101426 return ZERO;
101427 }
101428
101429 n = BigInteger(n);
101430 if (n._s === 0) {
101431 return ZERO;
101432 }
101433 if (this.isUnit()) {
101434 if (this._s < 0) {
101435 return n.negate();
101436 }
101437 return n;
101438 }
101439 if (n.isUnit()) {
101440 if (n._s < 0) {
101441 return this.negate();
101442 }
101443 return this;
101444 }
101445 if (this === n) {
101446 return this.square();
101447 }
101448
101449 var r = (this._d.length >= n._d.length);
101450 var a = (r ? this : n)._d; // a will be longer than b
101451 var b = (r ? n : this)._d;
101452 var al = a.length;
101453 var bl = b.length;
101454
101455 var pl = al + bl;
101456 var partial = new Array(pl);
101457 var i;
101458 for (i = 0; i < pl; i++) {
101459 partial[i] = 0;
101460 }
101461
101462 for (i = 0; i < bl; i++) {
101463 var carry = 0;
101464 var bi = b[i];
101465 var jlimit = al + i;
101466 var digit;
101467 for (var j = i; j < jlimit; j++) {
101468 digit = partial[j] + bi * a[j - i] + carry;
101469 carry = (digit / BigInteger_base) | 0;
101470 partial[j] = (digit % BigInteger_base) | 0;
101471 }
101472 if (carry) {
101473 digit = partial[j] + carry;
101474 carry = (digit / BigInteger_base) | 0;
101475 partial[j] = digit % BigInteger_base;
101476 }
101477 }
101478 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
101479 };
101480
101481 // Multiply a BigInteger by a single-digit native number
101482 // Assumes that this and n are >= 0
101483 // This is not really intended to be used outside the library itself
101484 BigInteger.prototype.multiplySingleDigit = function(n) {
101485 if (n === 0 || this._s === 0) {
101486 return ZERO;
101487 }
101488 if (n === 1) {
101489 return this;
101490 }
101491
101492 var digit;
101493 if (this._d.length === 1) {
101494 digit = this._d[0] * n;
101495 if (digit >= BigInteger_base) {
101496 return new BigInteger([(digit % BigInteger_base)|0,
101497 (digit / BigInteger_base)|0], 1, CONSTRUCT);
101498 }
101499 return new BigInteger([digit], 1, CONSTRUCT);
101500 }
101501
101502 if (n === 2) {
101503 return this.add(this);
101504 }
101505 if (this.isUnit()) {
101506 return new BigInteger([n], 1, CONSTRUCT);
101507 }
101508
101509 var a = this._d;
101510 var al = a.length;
101511
101512 var pl = al + 1;
101513 var partial = new Array(pl);
101514 for (var i = 0; i < pl; i++) {
101515 partial[i] = 0;
101516 }
101517
101518 var carry = 0;
101519 for (var j = 0; j < al; j++) {
101520 digit = n * a[j] + carry;
101521 carry = (digit / BigInteger_base) | 0;
101522 partial[j] = (digit % BigInteger_base) | 0;
101523 }
101524 if (carry) {
101525 partial[j] = carry;
101526 }
101527
101528 return new BigInteger(partial, 1, CONSTRUCT);
101529 };
101530
101531 /*
101532 Function: square
101533 Multiply a <BigInteger> by itself.
101534
101535 This is slightly faster than regular multiplication, since it removes the
101536 duplicated multiplcations.
101537
101538 Returns:
101539
101540 > this.multiply(this)
101541
101542 See Also:
101543 <multiply>
101544 */
101545 BigInteger.prototype.square = function() {
101546 // Normally, squaring a 10-digit number would take 100 multiplications.
101547 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
101548 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
101549 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
101550
101551 if (this._s === 0) {
101552 return ZERO;
101553 }
101554 if (this.isUnit()) {
101555 return ONE;
101556 }
101557
101558 var digits = this._d;
101559 var length = digits.length;
101560 var imult1 = new Array(length + length + 1);
101561 var product, carry, k;
101562 var i;
101563
101564 // Calculate diagonal
101565 for (i = 0; i < length; i++) {
101566 k = i * 2;
101567 product = digits[i] * digits[i];
101568 carry = (product / BigInteger_base) | 0;
101569 imult1[k] = product % BigInteger_base;
101570 imult1[k + 1] = carry;
101571 }
101572
101573 // Calculate repeating part
101574 for (i = 0; i < length; i++) {
101575 carry = 0;
101576 k = i * 2 + 1;
101577 for (var j = i + 1; j < length; j++, k++) {
101578 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
101579 carry = (product / BigInteger_base) | 0;
101580 imult1[k] = product % BigInteger_base;
101581 }
101582 k = length + i;
101583 var digit = carry + imult1[k];
101584 carry = (digit / BigInteger_base) | 0;
101585 imult1[k] = digit % BigInteger_base;
101586 imult1[k + 1] += carry;
101587 }
101588
101589 return new BigInteger(imult1, 1, CONSTRUCT);
101590 };
101591
101592 /*
101593 Function: quotient
101594 Divide two <BigIntegers> and truncate towards zero.
101595
101596 <quotient> throws an exception if *n* is zero.
101597
101598 Parameters:
101599
101600 n - The number to divide *this* by. Will be converted to a <BigInteger>.
101601
101602 Returns:
101603
101604 The *this* / *n*, truncated to an integer.
101605
101606 See Also:
101607
101608 <add>, <subtract>, <multiply>, <divRem>, <remainder>
101609 */
101610 BigInteger.prototype.quotient = function(n) {
101611 return this.divRem(n)[0];
101612 };
101613
101614 /*
101615 Function: divide
101616 Deprecated synonym for <quotient>.
101617 */
101618 BigInteger.prototype.divide = BigInteger.prototype.quotient;
101619
101620 /*
101621 Function: remainder
101622 Calculate the remainder of two <BigIntegers>.
101623
101624 <remainder> throws an exception if *n* is zero.
101625
101626 Parameters:
101627
101628 n - The remainder after *this* is divided *this* by *n*. Will be
101629 converted to a <BigInteger>.
101630
101631 Returns:
101632
101633 *this* % *n*.
101634
101635 See Also:
101636
101637 <divRem>, <quotient>
101638 */
101639 BigInteger.prototype.remainder = function(n) {
101640 return this.divRem(n)[1];
101641 };
101642
101643 /*
101644 Function: divRem
101645 Calculate the integer quotient and remainder of two <BigIntegers>.
101646
101647 <divRem> throws an exception if *n* is zero.
101648
101649 Parameters:
101650
101651 n - The number to divide *this* by. Will be converted to a <BigInteger>.
101652
101653 Returns:
101654
101655 A two-element array containing the quotient and the remainder.
101656
101657 > a.divRem(b)
101658
101659 is exactly equivalent to
101660
101661 > [a.quotient(b), a.remainder(b)]
101662
101663 except it is faster, because they are calculated at the same time.
101664
101665 See Also:
101666
101667 <quotient>, <remainder>
101668 */
101669 BigInteger.prototype.divRem = function(n) {
101670 n = BigInteger(n);
101671 if (n._s === 0) {
101672 throw new Error("Divide by zero");
101673 }
101674 if (this._s === 0) {
101675 return [ZERO, ZERO];
101676 }
101677 if (n._d.length === 1) {
101678 return this.divRemSmall(n._s * n._d[0]);
101679 }
101680
101681 // Test for easy cases -- |n1| <= |n2|
101682 switch (this.compareAbs(n)) {
101683 case 0: // n1 == n2
101684 return [this._s === n._s ? ONE : M_ONE, ZERO];
101685 case -1: // |n1| < |n2|
101686 return [ZERO, this];
101687 }
101688
101689 var sign = this._s * n._s;
101690 var a = n.abs();
101691 var b_digits = this._d;
101692 var b_index = b_digits.length;
101693 var digits = n._d.length;
101694 var quot = [];
101695 var guess;
101696
101697 var part = new BigInteger([], 0, CONSTRUCT);
101698
101699 while (b_index) {
101700 part._d.unshift(b_digits[--b_index]);
101701 part = new BigInteger(part._d, 1, CONSTRUCT);
101702
101703 if (part.compareAbs(n) < 0) {
101704 quot.push(0);
101705 continue;
101706 }
101707 if (part._s === 0) {
101708 guess = 0;
101709 }
101710 else {
101711 var xlen = part._d.length, ylen = a._d.length;
101712 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
101713 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
101714 if (part._d.length > a._d.length) {
101715 // The length of part._d can either match a._d length,
101716 // or exceed it by one.
101717 highx = (highx+1)*BigInteger_base;
101718 }
101719 guess = Math.ceil(highx/highy);
101720 }
101721 do {
101722 var check = a.multiplySingleDigit(guess);
101723 if (check.compareAbs(part) <= 0) {
101724 break;
101725 }
101726 guess--;
101727 } while (guess);
101728
101729 quot.push(guess);
101730 if (!guess) {
101731 continue;
101732 }
101733 var diff = part.subtract(check);
101734 part._d = diff._d.slice();
101735 }
101736
101737 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
101738 new BigInteger(part._d, this._s, CONSTRUCT)];
101739 };
101740
101741 // Throws an exception if n is outside of (-BigInteger.base, -1] or
101742 // [1, BigInteger.base). It's not necessary to call this, since the
101743 // other division functions will call it if they are able to.
101744 BigInteger.prototype.divRemSmall = function(n) {
101745 var r;
101746 n = +n;
101747 if (n === 0) {
101748 throw new Error("Divide by zero");
101749 }
101750
101751 var n_s = n < 0 ? -1 : 1;
101752 var sign = this._s * n_s;
101753 n = Math.abs(n);
101754
101755 if (n < 1 || n >= BigInteger_base) {
101756 throw new Error("Argument out of range");
101757 }
101758
101759 if (this._s === 0) {
101760 return [ZERO, ZERO];
101761 }
101762
101763 if (n === 1 || n === -1) {
101764 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
101765 }
101766
101767 // 2 <= n < BigInteger_base
101768
101769 // divide a single digit by a single digit
101770 if (this._d.length === 1) {
101771 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
101772 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
101773 if (sign < 0) {
101774 q = q.negate();
101775 }
101776 if (this._s < 0) {
101777 r = r.negate();
101778 }
101779 return [q, r];
101780 }
101781
101782 var digits = this._d.slice();
101783 var quot = new Array(digits.length);
101784 var part = 0;
101785 var diff = 0;
101786 var i = 0;
101787 var guess;
101788
101789 while (digits.length) {
101790 part = part * BigInteger_base + digits[digits.length - 1];
101791 if (part < n) {
101792 quot[i++] = 0;
101793 digits.pop();
101794 diff = BigInteger_base * diff + part;
101795 continue;
101796 }
101797 if (part === 0) {
101798 guess = 0;
101799 }
101800 else {
101801 guess = (part / n) | 0;
101802 }
101803
101804 var check = n * guess;
101805 diff = part - check;
101806 quot[i++] = guess;
101807 if (!guess) {
101808 digits.pop();
101809 continue;
101810 }
101811
101812 digits.pop();
101813 part = diff;
101814 }
101815
101816 r = new BigInteger([diff], 1, CONSTRUCT);
101817 if (this._s < 0) {
101818 r = r.negate();
101819 }
101820 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
101821 };
101822
101823 /*
101824 Function: isEven
101825 Return true iff *this* is divisible by two.
101826
101827 Note that <BigInteger.ZERO> is even.
101828
101829 Returns:
101830
101831 true if *this* is even, false otherwise.
101832
101833 See Also:
101834
101835 <isOdd>
101836 */
101837 BigInteger.prototype.isEven = function() {
101838 var digits = this._d;
101839 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
101840 };
101841
101842 /*
101843 Function: isOdd
101844 Return true iff *this* is not divisible by two.
101845
101846 Returns:
101847
101848 true if *this* is odd, false otherwise.
101849
101850 See Also:
101851
101852 <isEven>
101853 */
101854 BigInteger.prototype.isOdd = function() {
101855 return !this.isEven();
101856 };
101857
101858 /*
101859 Function: sign
101860 Get the sign of a <BigInteger>.
101861
101862 Returns:
101863
101864 * -1 if *this* < 0
101865 * 0 if *this* == 0
101866 * +1 if *this* > 0
101867
101868 See Also:
101869
101870 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
101871 */
101872 BigInteger.prototype.sign = function() {
101873 return this._s;
101874 };
101875
101876 /*
101877 Function: isPositive
101878 Return true iff *this* > 0.
101879
101880 Returns:
101881
101882 true if *this*.compare(<BigInteger.ZERO>) == 1.
101883
101884 See Also:
101885
101886 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
101887 */
101888 BigInteger.prototype.isPositive = function() {
101889 return this._s > 0;
101890 };
101891
101892 /*
101893 Function: isNegative
101894 Return true iff *this* < 0.
101895
101896 Returns:
101897
101898 true if *this*.compare(<BigInteger.ZERO>) == -1.
101899
101900 See Also:
101901
101902 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
101903 */
101904 BigInteger.prototype.isNegative = function() {
101905 return this._s < 0;
101906 };
101907
101908 /*
101909 Function: isZero
101910 Return true iff *this* == 0.
101911
101912 Returns:
101913
101914 true if *this*.compare(<BigInteger.ZERO>) == 0.
101915
101916 See Also:
101917
101918 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
101919 */
101920 BigInteger.prototype.isZero = function() {
101921 return this._s === 0;
101922 };
101923
101924 /*
101925 Function: exp10
101926 Multiply a <BigInteger> by a power of 10.
101927
101928 This is equivalent to, but faster than
101929
101930 > if (n >= 0) {
101931 > return this.multiply(BigInteger("1e" + n));
101932 > }
101933 > else { // n <= 0
101934 > return this.quotient(BigInteger("1e" + -n));
101935 > }
101936
101937 Parameters:
101938
101939 n - The power of 10 to multiply *this* by. *n* is converted to a
101940 javascipt number and must be no greater than <BigInteger.MAX_EXP>
101941 (0x7FFFFFFF), or an exception will be thrown.
101942
101943 Returns:
101944
101945 *this* * (10 ** *n*), truncated to an integer if necessary.
101946
101947 See Also:
101948
101949 <pow>, <multiply>
101950 */
101951 BigInteger.prototype.exp10 = function(n) {
101952 n = +n;
101953 if (n === 0) {
101954 return this;
101955 }
101956 if (Math.abs(n) > Number(MAX_EXP)) {
101957 throw new Error("exponent too large in BigInteger.exp10");
101958 }
101959 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
101960 if (this._s === 0) {
101961 return ZERO;
101962 }
101963 if (n > 0) {
101964 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
101965
101966 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
101967 k._d.unshift(0);
101968 }
101969 if (n == 0)
101970 return k;
101971 k._s = 1;
101972 k = k.multiplySingleDigit(Math.pow(10, n));
101973 return (this._s < 0 ? k.negate() : k);
101974 } else if (-n >= this._d.length*BigInteger_base_log10) {
101975 return ZERO;
101976 } else {
101977 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
101978
101979 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
101980 k._d.shift();
101981 }
101982 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
101983 }
101984 };
101985
101986 /*
101987 Function: pow
101988 Raise a <BigInteger> to a power.
101989
101990 In this implementation, 0**0 is 1.
101991
101992 Parameters:
101993
101994 n - The exponent to raise *this* by. *n* must be no greater than
101995 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
101996
101997 Returns:
101998
101999 *this* raised to the *nth* power.
102000
102001 See Also:
102002
102003 <modPow>
102004 */
102005 BigInteger.prototype.pow = function(n) {
102006 if (this.isUnit()) {
102007 if (this._s > 0) {
102008 return this;
102009 }
102010 else {
102011 return BigInteger(n).isOdd() ? this : this.negate();
102012 }
102013 }
102014
102015 n = BigInteger(n);
102016 if (n._s === 0) {
102017 return ONE;
102018 }
102019 else if (n._s < 0) {
102020 if (this._s === 0) {
102021 throw new Error("Divide by zero");
102022 }
102023 else {
102024 return ZERO;
102025 }
102026 }
102027 if (this._s === 0) {
102028 return ZERO;
102029 }
102030 if (n.isUnit()) {
102031 return this;
102032 }
102033
102034 if (n.compareAbs(MAX_EXP) > 0) {
102035 throw new Error("exponent too large in BigInteger.pow");
102036 }
102037 var x = this;
102038 var aux = ONE;
102039 var two = BigInteger.small[2];
102040
102041 while (n.isPositive()) {
102042 if (n.isOdd()) {
102043 aux = aux.multiply(x);
102044 if (n.isUnit()) {
102045 return aux;
102046 }
102047 }
102048 x = x.square();
102049 n = n.quotient(two);
102050 }
102051
102052 return aux;
102053 };
102054
102055 /*
102056 Function: modPow
102057 Raise a <BigInteger> to a power (mod m).
102058
102059 Because it is reduced by a modulus, <modPow> is not limited by
102060 <BigInteger.MAX_EXP> like <pow>.
102061
102062 Parameters:
102063
102064 exponent - The exponent to raise *this* by. Must be positive.
102065 modulus - The modulus.
102066
102067 Returns:
102068
102069 *this* ^ *exponent* (mod *modulus*).
102070
102071 See Also:
102072
102073 <pow>, <mod>
102074 */
102075 BigInteger.prototype.modPow = function(exponent, modulus) {
102076 var result = ONE;
102077 var base = this;
102078
102079 while (exponent.isPositive()) {
102080 if (exponent.isOdd()) {
102081 result = result.multiply(base).remainder(modulus);
102082 }
102083
102084 exponent = exponent.quotient(BigInteger.small[2]);
102085 if (exponent.isPositive()) {
102086 base = base.square().remainder(modulus);
102087 }
102088 }
102089
102090 return result;
102091 };
102092
102093 /*
102094 Function: log
102095 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
102096
102097 This is equivalent to
102098
102099 > Math.log(this.toJSValue())
102100
102101 but handles values outside of the native number range.
102102
102103 Returns:
102104
102105 log( *this* )
102106
102107 See Also:
102108
102109 <toJSValue>
102110 */
102111 BigInteger.prototype.log = function() {
102112 switch (this._s) {
102113 case 0: return -Infinity;
102114 case -1: return NaN;
102115 default: // Fall through.
102116 }
102117
102118 var l = this._d.length;
102119
102120 if (l*BigInteger_base_log10 < 30) {
102121 return Math.log(this.valueOf());
102122 }
102123
102124 var N = Math.ceil(30/BigInteger_base_log10);
102125 var firstNdigits = this._d.slice(l - N);
102126 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
102127 };
102128
102129 /*
102130 Function: valueOf
102131 Convert a <BigInteger> to a native JavaScript integer.
102132
102133 This is called automatically by JavaScipt to convert a <BigInteger> to a
102134 native value.
102135
102136 Returns:
102137
102138 > parseInt(this.toString(), 10)
102139
102140 See Also:
102141
102142 <toString>, <toJSValue>
102143 */
102144 BigInteger.prototype.valueOf = function() {
102145 return parseInt(this.toString(), 10);
102146 };
102147
102148 /*
102149 Function: toJSValue
102150 Convert a <BigInteger> to a native JavaScript integer.
102151
102152 This is the same as valueOf, but more explicitly named.
102153
102154 Returns:
102155
102156 > parseInt(this.toString(), 10)
102157
102158 See Also:
102159
102160 <toString>, <valueOf>
102161 */
102162 BigInteger.prototype.toJSValue = function() {
102163 return parseInt(this.toString(), 10);
102164 };
102165
102166 var MAX_EXP = BigInteger(0x7FFFFFFF);
102167 // Constant: MAX_EXP
102168 // The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
102169 BigInteger.MAX_EXP = MAX_EXP;
102170
102171 (function() {
102172 function makeUnary(fn) {
102173 return function(a) {
102174 return fn.call(BigInteger(a));
102175 };
102176 }
102177
102178 function makeBinary(fn) {
102179 return function(a, b) {
102180 return fn.call(BigInteger(a), BigInteger(b));
102181 };
102182 }
102183
102184 function makeTrinary(fn) {
102185 return function(a, b, c) {
102186 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
102187 };
102188 }
102189
102190 (function() {
102191 var i, fn;
102192 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
102193 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
102194 var trinary = ["modPow"];
102195
102196 for (i = 0; i < unary.length; i++) {
102197 fn = unary[i];
102198 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
102199 }
102200
102201 for (i = 0; i < binary.length; i++) {
102202 fn = binary[i];
102203 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
102204 }
102205
102206 for (i = 0; i < trinary.length; i++) {
102207 fn = trinary[i];
102208 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
102209 }
102210
102211 BigInteger.exp10 = function(x, n) {
102212 return BigInteger(x).exp10(n);
102213 };
102214 })();
102215 })();
102216
102217 exports.BigInteger = BigInteger;
102218 })(typeof exports !== 'undefined' ? exports : this);
102219 </script>
102220 <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){
102221 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;
102222
102223 },{}],2:[function(require,module,exports){
102224 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;
102225
102226 },{"./scoring":6}],3:[function(require,module,exports){
102227 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(","),
102228 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(","),
102229 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(","),
102230 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(","),
102231 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;
102232
102233 },{}],4:[function(require,module,exports){
102234 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;
102235
102236 },{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
102237 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;
102238
102239 },{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
102240 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;
102241
102242 },{"./adjacency_graphs":1}],7:[function(require,module,exports){
102243 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;
102244
102245 },{}]},{},[4])(4)
102246 });
102247
102248 </script>
102249 <script>/*
102250 * Detects entropy from a string.
102251 *
102252 * Formats include:
102253 * binary [0-1]
102254 * base 6 [0-5]
102255 * dice 6 [1-6]
102256 * decimal [0-9]
102257 * hexadecimal [0-9A-F]
102258 * card [A2-9TJQK][CDHS]
102259 *
102260 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
102261 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
102262 * entropy.
102263 */
102264
102265 window.Entropy = new (function() {
102266
102267 var TWO = new BigInteger(2);
102268
102269 // matchers returns an array of the matched events for each type of entropy.
102270 // eg
102271 // matchers.binary("010") returns ["0", "1", "0"]
102272 // matchers.binary("a10") returns ["1", "0"]
102273 // matchers.hex("a10") returns ["a", "1", "0"]
102274 var matchers = {
102275 binary: function(str) {
102276 return str.match(/[0-1]/gi) || [];
102277 },
102278 base6: function(str) {
102279 return str.match(/[0-5]/gi) || [];
102280 },
102281 dice: function(str) {
102282 return str.match(/[1-6]/gi) || []; // ie dice numbers
102283 },
102284 base10: function(str) {
102285 return str.match(/[0-9]/gi) || [];
102286 },
102287 hex: function(str) {
102288 return str.match(/[0-9A-F]/gi) || [];
102289 },
102290 card: function(str) {
102291 // Format is NumberSuit, eg
102292 // AH ace of hearts
102293 // 8C eight of clubs
102294 // TD ten of diamonds
102295 // JS jack of spades
102296 // QH queen of hearts
102297 // KC king of clubs
102298 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
102299 }
102300 }
102301
102302 // Convert array of cards from ["ac", "4d", "ks"]
102303 // to numbers between 0 and 51 [0, 16, 51]
102304 function convertCardsToInts(cards) {
102305 var ints = [];
102306 var values = "a23456789tjqk";
102307 var suits = "cdhs";
102308 for (var i=0; i<cards.length; i++) {
102309 var card = cards[i].toLowerCase();
102310 var value = card[0];
102311 var suit = card[1];
102312 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
102313 ints.push(asInt);
102314 }
102315 return ints;
102316 }
102317
102318 this.fromString = function(rawEntropyStr) {
102319 // Find type of entropy being used (binary, hex, dice etc)
102320 var base = getBase(rawEntropyStr);
102321 // Convert dice to base6 entropy (ie 1-6 to 0-5)
102322 // This is done by changing all 6s to 0s
102323 if (base.str == "dice") {
102324 var newParts = [];
102325 var newInts = [];
102326 for (var i=0; i<base.parts.length; i++) {
102327 var c = base.parts[i];
102328 if ("12345".indexOf(c) > -1) {
102329 newParts[i] = base.parts[i];
102330 newInts[i] = base.ints[i];
102331 }
102332 else {
102333 newParts[i] = "0";
102334 newInts[i] = 0;
102335 }
102336 }
102337 base.str = "base 6 (dice)";
102338 base.ints = newInts;
102339 base.parts = newParts;
102340 base.matcher = matchers.base6;
102341 }
102342 // Detect empty entropy
102343 if (base.parts.length == 0) {
102344 return {
102345 binaryStr: "",
102346 cleanStr: "",
102347 cleanHtml: "",
102348 base: base,
102349 };
102350 }
102351 // Convert base.ints to BigInteger.
102352 // Due to using unusual bases, eg cards of base52, this is not as simple as
102353 // using BigInteger.parse()
102354 var entropyInt = BigInteger.ZERO;
102355 for (var i=base.ints.length-1; i>=0; i--) {
102356 var thisInt = BigInteger.parse(base.ints[i]);
102357 var power = (base.ints.length - 1) - i;
102358 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
102359 entropyInt = entropyInt.add(additionalEntropy);
102360 }
102361 // Convert entropy to binary
102362 var entropyBin = entropyInt.toString(2);
102363 // If the first integer is small, it must be padded with zeros.
102364 // Otherwise the chance of the first bit being 1 is 100%, which is
102365 // obviously incorrect.
102366 // This is not perfect for non-2^n bases.
102367 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
102368 while (entropyBin.length < expectedBits) {
102369 entropyBin = "0" + entropyBin;
102370 }
102371 // Calculate the number of bits per event
102372 var bitsPerEvent = Math.log2(base.asInt);
102373 // Cards binary must be handled differently, since they're not replaced
102374 if (base.asInt == 52) {
102375 var cardEntropy = processCardEntropy(base.parts);
102376 entropyBin = cardEntropy.binaryStr;
102377 bitsPerEvent = cardEntropy.bitsPerEvent;
102378 }
102379 // Supply a 'filtered' entropy string for display purposes
102380 var entropyClean = base.parts.join("");
102381 var entropyHtml = base.parts.join("");
102382 if (base.asInt == 52) {
102383 entropyClean = base.parts.join(" ").toUpperCase();
102384 entropyClean = entropyClean.replace(/C/g, "\u2663");
102385 entropyClean = entropyClean.replace(/D/g, "\u2666");
102386 entropyClean = entropyClean.replace(/H/g, "\u2665");
102387 entropyClean = entropyClean.replace(/S/g, "\u2660");
102388 entropyHtml = base.parts.join(" ").toUpperCase();
102389 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
102390 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
102391 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
102392 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
102393 }
102394 // Return the result
102395 var e = {
102396 binaryStr: entropyBin,
102397 cleanStr: entropyClean,
102398 cleanHtml: entropyHtml,
102399 bitsPerEvent: bitsPerEvent,
102400 base: base,
102401 }
102402 return e;
102403 }
102404
102405 function getSortedDeck() {
102406 var s = [];
102407 var suits = "CDHS";
102408 var values = "A23456789TJQK";
102409 for (var i=0; i<suits.length; i++) {
102410 for (var j=0; j<values.length; j++) {
102411 s.push(values[j]+suits[i]);
102412 }
102413 }
102414 return s;
102415 }
102416
102417 function getBase(str) {
102418 // Need to get the lowest base for the supplied entropy.
102419 // This prevents interpreting, say, dice rolls as hexadecimal.
102420 var binaryMatches = matchers.binary(str);
102421 var hexMatches = matchers.hex(str);
102422 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
102423 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
102424 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
102425 return {
102426 ints: ints,
102427 parts: binaryMatches,
102428 matcher: matchers.binary,
102429 asInt: 2,
102430 str: "binary",
102431 }
102432 }
102433 var cardMatches = matchers.card(str);
102434 if (cardMatches.length >= hexMatches.length / 2) {
102435 var ints = convertCardsToInts(cardMatches);
102436 return {
102437 ints: ints,
102438 parts: cardMatches,
102439 matcher: matchers.card,
102440 asInt: 52,
102441 str: "card",
102442 }
102443 }
102444 var diceMatches = matchers.dice(str);
102445 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
102446 var ints = diceMatches.map(function(i) { return parseInt(i) });
102447 return {
102448 ints: ints,
102449 parts: diceMatches,
102450 matcher: matchers.dice,
102451 asInt: 6,
102452 str: "dice",
102453 }
102454 }
102455 var base6Matches = matchers.base6(str);
102456 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
102457 var ints = base6Matches.map(function(i) { return parseInt(i) });
102458 return {
102459 ints: ints,
102460 parts: base6Matches,
102461 matcher: matchers.base6,
102462 asInt: 6,
102463 str: "base 6",
102464 }
102465 }
102466 var base10Matches = matchers.base10(str);
102467 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
102468 var ints = base10Matches.map(function(i) { return parseInt(i) });
102469 return {
102470 ints: ints,
102471 parts: base10Matches,
102472 matcher: matchers.base10,
102473 asInt: 10,
102474 str: "base 10",
102475 }
102476 }
102477 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
102478 return {
102479 ints: ints,
102480 parts: hexMatches,
102481 matcher: matchers.hex,
102482 asInt: 16,
102483 str: "hexadecimal",
102484 }
102485 }
102486
102487 // Assume cards are NOT replaced.
102488 // Additional entropy decreases as more cards are used. This means
102489 // total possible entropy is measured using n!, not base^n.
102490 // eg the second last card can be only one of two, not one of fifty two
102491 // so the added entropy for that card is only one bit at most
102492 function processCardEntropy(cards) {
102493 // Track how many instances of each card have been used, and thus
102494 // how many decks are in use.
102495 var cardCounts = {};
102496 var numberOfDecks = 0;
102497 // Work out number of decks by max(duplicates)
102498 for (var i=0; i<cards.length; i++) {
102499 // Get the card that was drawn
102500 var cardLower = cards[i];
102501 var card = cardLower.toUpperCase();
102502 // Initialize the count for this card if needed
102503 if (!(card in cardCounts)) {
102504 cardCounts[card] = 0;
102505 }
102506 cardCounts[card] += 1;
102507 // See if this is max(duplicates)
102508 if (cardCounts[card] > numberOfDecks) {
102509 numberOfDecks = cardCounts[card];
102510 }
102511 }
102512 // Work out the total number of bits for this many decks
102513 // See http://crypto.stackexchange.com/q/41886
102514 var gainedBits = 0;
102515 // Equivalent of Math.log2(factorial(52*numberOfDecks))
102516 // which becomes infinity for numberOfDecks > 4
102517 for (var i=1; i<=52*numberOfDecks; i++) {
102518 gainedBits = gainedBits + Math.log2(i);
102519 }
102520 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
102521 var maxBits = gainedBits - lostBits;
102522 // Convert the drawn cards to a binary representation.
102523 // The exact technique for doing this is unclear.
102524 // See
102525 // http://crypto.stackexchange.com/a/41896
102526 // "I even doubt that this is well defined (only the average entropy
102527 // is, I believe)."
102528 // See
102529 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
102530 // "The binary representation can be the first log(permutations,2) bits
102531 // of the sha-2 hash of the normalized deck string."
102532 //
102533 // In this specific implementation, the first N bits of the hash of the
102534 // normalized cards string is being used. Uppercase, no spaces; eg
102535 // sha256("AH8DQSTC2H")
102536 var totalCards = numberOfDecks * 52;
102537 var percentUsed = cards.length / totalCards;
102538 // Calculate the average number of bits of entropy for the number of
102539 // cards drawn.
102540 var numberOfBits = Math.floor(maxBits * percentUsed);
102541 // Create a normalized string of the selected cards
102542 var normalizedCards = cards.join("").toUpperCase();
102543 // Convert to binary using the SHA256 hash of the normalized cards.
102544 // If the number of bits is more than 256, multiple hashes
102545 // are used until the required number of bits is reached.
102546 var entropyBin = "";
102547 var iterations = 0;
102548 while (entropyBin.length < numberOfBits) {
102549 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
102550 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
102551 for (var i=0; i<hashHex.length; i++) {
102552 var decimal = parseInt(hashHex[i], 16);
102553 var binary = decimal.toString(2);
102554 while (binary.length < 4) {
102555 binary = "0" + binary;
102556 }
102557 entropyBin = entropyBin + binary;
102558 }
102559 iterations = iterations + 1;
102560 }
102561 // Truncate to the appropriate number of bits.
102562 entropyBin = entropyBin.substring(0, numberOfBits);
102563 // Get the number of bits per event
102564 bitsPerEvent = maxBits / totalCards;
102565 return {
102566 binaryStr: entropyBin,
102567 bitsPerEvent: bitsPerEvent,
102568 }
102569 }
102570
102571 // Polyfill for Math.log2
102572 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
102573 Math.log2 = Math.log2 || function(x) {
102574 // The polyfill isn't good enough because of the poor accuracy of
102575 // Math.LOG2E
102576 // log2(8) gave 2.9999999999999996 which when floored causes issues.
102577 // So instead use the BigInteger library to get it right.
102578 return BigInteger.log(x) / BigInteger.log(2);
102579 };
102580
102581 // Depends on BigInteger
102582 function factorial(n) {
102583 if (n == 0) {
102584 return 1;
102585 }
102586 f = BigInteger.ONE;
102587 for (var i=1; i<=n; i++) {
102588 f = f.multiply(new BigInteger(i));
102589 }
102590 return f;
102591 }
102592
102593 })();
102594 </script>
102595 <script>(function() {
102596
102597 // mnemonics is populated as required by getLanguage
102598 var mnemonics = { "english": new Mnemonic("english") };
102599 var mnemonic = mnemonics["english"];
102600 var seed = null;
102601 var bip32RootKey = null;
102602 var bip32ExtendedKey = null;
102603 var network = bitcoinjs.bitcoin.networks.bitcoin;
102604 var addressRowTemplate = $("#address-row-template");
102605
102606 var showIndex = true;
102607 var showAddress = true;
102608 var showPubKey = true;
102609 var showPrivKey = true;
102610 var showQr = false;
102611 var litecoinUseLtub = true;
102612
102613 var entropyChangeTimeoutEvent = null;
102614 var phraseChangeTimeoutEvent = null;
102615 var rootKeyChangedTimeoutEvent = null;
102616
102617 var generationProcesses = [];
102618
102619 var DOM = {};
102620 DOM.network = $(".network");
102621 DOM.bip32Client = $("#bip32-client");
102622 DOM.phraseNetwork = $("#network-phrase");
102623 DOM.useEntropy = $(".use-entropy");
102624 DOM.entropyContainer = $(".entropy-container");
102625 DOM.entropy = $(".entropy");
102626 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
102627 DOM.entropyType = DOM.entropyContainer.find(".type");
102628 DOM.entropyCrackTime = DOM.entropyContainer.find(".crack-time");
102629 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
102630 DOM.entropyBits = DOM.entropyContainer.find(".bits");
102631 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
102632 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
102633 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
102634 DOM.entropyWordIndexes = DOM.entropyContainer.find(".word-indexes");
102635 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
102636 DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning");
102637 DOM.phrase = $(".phrase");
102638 DOM.passphrase = $(".passphrase");
102639 DOM.generateContainer = $(".generate-container");
102640 DOM.generate = $(".generate");
102641 DOM.seed = $(".seed");
102642 DOM.rootKey = $(".root-key");
102643 DOM.litecoinLtubContainer = $(".litecoin-ltub-container");
102644 DOM.litecoinUseLtub = $(".litecoin-use-ltub");
102645 DOM.extendedPrivKey = $(".extended-priv-key");
102646 DOM.extendedPubKey = $(".extended-pub-key");
102647 DOM.bip32tab = $("#bip32-tab");
102648 DOM.bip44tab = $("#bip44-tab");
102649 DOM.bip49tab = $("#bip49-tab");
102650 DOM.bip84tab = $("#bip84-tab");
102651 DOM.bip141tab = $("#bip141-tab");
102652 DOM.bip32panel = $("#bip32");
102653 DOM.bip44panel = $("#bip44");
102654 DOM.bip49panel = $("#bip49");
102655 DOM.bip32path = $("#bip32-path");
102656 DOM.bip44path = $("#bip44-path");
102657 DOM.bip44purpose = $("#bip44 .purpose");
102658 DOM.bip44coin = $("#bip44 .coin");
102659 DOM.bip44account = $("#bip44 .account");
102660 DOM.bip44accountXprv = $("#bip44 .account-xprv");
102661 DOM.bip44accountXpub = $("#bip44 .account-xpub");
102662 DOM.bip44change = $("#bip44 .change");
102663 DOM.bip49unavailable = $("#bip49 .unavailable");
102664 DOM.bip49available = $("#bip49 .available");
102665 DOM.bip49path = $("#bip49-path");
102666 DOM.bip49purpose = $("#bip49 .purpose");
102667 DOM.bip49coin = $("#bip49 .coin");
102668 DOM.bip49account = $("#bip49 .account");
102669 DOM.bip49accountXprv = $("#bip49 .account-xprv");
102670 DOM.bip49accountXpub = $("#bip49 .account-xpub");
102671 DOM.bip49change = $("#bip49 .change");
102672 DOM.bip84path = $("#bip84-path");
102673 DOM.bip84purpose = $("#bip84 .purpose");
102674 DOM.bip84coin = $("#bip84 .coin");
102675 DOM.bip84account = $("#bip84 .account");
102676 DOM.bip84accountXprv = $("#bip84 .account-xprv");
102677 DOM.bip84accountXpub = $("#bip84 .account-xpub");
102678 DOM.bip84change = $("#bip84 .change");
102679 DOM.bip141unavailable = $("#bip141 .unavailable");
102680 DOM.bip141available = $("#bip141 .available");
102681 DOM.bip141path = $("#bip141-path");
102682 DOM.bip141semantics = $(".bip141-semantics");
102683 DOM.generatedStrength = $(".generate-container .strength");
102684 DOM.hardenedAddresses = $(".hardened-addresses");
102685 DOM.useBitpayAddressesContainer = $(".use-bitpay-addresses-container");
102686 DOM.useBitpayAddresses = $(".use-bitpay-addresses");
102687 DOM.useBip38 = $(".use-bip38");
102688 DOM.bip38Password = $(".bip38-password");
102689 DOM.addresses = $(".addresses");
102690 DOM.csvTab = $("#csv-tab a");
102691 DOM.csv = $(".csv");
102692 DOM.rowsToAdd = $(".rows-to-add");
102693 DOM.more = $(".more");
102694 DOM.moreRowsStartIndex = $(".more-rows-start-index");
102695 DOM.feedback = $(".feedback");
102696 DOM.tab = $(".derivation-type a");
102697 DOM.indexToggle = $(".index-toggle");
102698 DOM.addressToggle = $(".address-toggle");
102699 DOM.publicKeyToggle = $(".public-key-toggle");
102700 DOM.privateKeyToggle = $(".private-key-toggle");
102701 DOM.languages = $(".languages a");
102702 DOM.qrContainer = $(".qr-container");
102703 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
102704 DOM.qrImage = DOM.qrContainer.find(".qr-image");
102705 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
102706 DOM.showQrEls = $("[data-show-qr]");
102707
102708 function init() {
102709 // Events
102710 DOM.network.on("change", networkChanged);
102711 DOM.bip32Client.on("change", bip32ClientChanged);
102712 DOM.useEntropy.on("change", setEntropyVisibility);
102713 DOM.entropy.on("input", delayedEntropyChanged);
102714 DOM.entropyMnemonicLength.on("change", entropyChanged);
102715 DOM.phrase.on("input", delayedPhraseChanged);
102716 DOM.passphrase.on("input", delayedPhraseChanged);
102717 DOM.generate.on("click", generateClicked);
102718 DOM.more.on("click", showMore);
102719 DOM.rootKey.on("input", delayedRootKeyChanged);
102720 DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged);
102721 DOM.bip32path.on("input", calcForDerivationPath);
102722 DOM.bip44account.on("input", calcForDerivationPath);
102723 DOM.bip44change.on("input", calcForDerivationPath);
102724 DOM.bip49account.on("input", calcForDerivationPath);
102725 DOM.bip49change.on("input", calcForDerivationPath);
102726 DOM.bip84account.on("input", calcForDerivationPath);
102727 DOM.bip84change.on("input", calcForDerivationPath);
102728 DOM.bip141path.on("input", calcForDerivationPath);
102729 DOM.bip141semantics.on("change", tabChanged);
102730 DOM.tab.on("shown.bs.tab", tabChanged);
102731 DOM.hardenedAddresses.on("change", calcForDerivationPath);
102732 DOM.useBip38.on("change", calcForDerivationPath);
102733 DOM.bip38Password.on("change", calcForDerivationPath);
102734 DOM.indexToggle.on("click", toggleIndexes);
102735 DOM.addressToggle.on("click", toggleAddresses);
102736 DOM.publicKeyToggle.on("click", togglePublicKeys);
102737 DOM.privateKeyToggle.on("click", togglePrivateKeys);
102738 DOM.csvTab.on("click", updateCsv);
102739 DOM.languages.on("click", languageChanged);
102740 DOM.useBitpayAddresses.on("change", useBitpayAddressesChange);
102741 setQrEvents(DOM.showQrEls);
102742 disableForms();
102743 hidePending();
102744 hideValidationError();
102745 populateNetworkSelect();
102746 populateClientSelect();
102747 }
102748
102749 // Event handlers
102750
102751 function networkChanged(e) {
102752 clearDerivedKeys();
102753 clearAddressesList();
102754 DOM.litecoinLtubContainer.addClass("hidden");
102755 DOM.useBitpayAddressesContainer.addClass("hidden");
102756 var networkIndex = e.target.value;
102757 var network = networks[networkIndex];
102758 network.onSelect();
102759 if (network.segwitAvailable) {
102760 adjustNetworkForSegwit();
102761 showSegwitAvailable();
102762 }
102763 else {
102764 showSegwitUnavailable();
102765 }
102766 if (seed != null) {
102767 phraseChanged();
102768 }
102769 else {
102770 rootKeyChanged();
102771 }
102772 }
102773
102774 function bip32ClientChanged(e) {
102775 var clientIndex = DOM.bip32Client.val();
102776 if (clientIndex == "custom") {
102777 DOM.bip32path.prop("readonly", false);
102778 }
102779 else {
102780 DOM.bip32path.prop("readonly", true);
102781 clients[clientIndex].onSelect();
102782 if (seed != null) {
102783 phraseChanged();
102784 }
102785 else {
102786 rootKeyChanged();
102787 }
102788 }
102789 }
102790
102791 function setEntropyVisibility() {
102792 if (isUsingOwnEntropy()) {
102793 DOM.entropyContainer.removeClass("hidden");
102794 DOM.generateContainer.addClass("hidden");
102795 DOM.phrase.prop("readonly", true);
102796 DOM.entropy.focus();
102797 entropyChanged();
102798 }
102799 else {
102800 DOM.entropyContainer.addClass("hidden");
102801 DOM.generateContainer.removeClass("hidden");
102802 DOM.phrase.prop("readonly", false);
102803 hidePending();
102804 }
102805 }
102806
102807 function delayedPhraseChanged() {
102808 hideValidationError();
102809 seed = null;
102810 bip32RootKey = null;
102811 bip32ExtendedKey = null;
102812 clearAddressesList();
102813 showPending();
102814 if (phraseChangeTimeoutEvent != null) {
102815 clearTimeout(phraseChangeTimeoutEvent);
102816 }
102817 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
102818 }
102819
102820 function phraseChanged() {
102821 showPending();
102822 setMnemonicLanguage();
102823 // Get the mnemonic phrase
102824 var phrase = DOM.phrase.val();
102825 var errorText = findPhraseErrors(phrase);
102826 if (errorText) {
102827 showValidationError(errorText);
102828 return;
102829 }
102830 // Calculate and display
102831 var passphrase = DOM.passphrase.val();
102832 calcBip32RootKeyFromSeed(phrase, passphrase);
102833 calcForDerivationPath();
102834 // Show the word indexes
102835 showWordIndexes();
102836 }
102837
102838 function tabChanged() {
102839 showPending();
102840 adjustNetworkForSegwit();
102841 var phrase = DOM.phrase.val();
102842 if (phrase != "") {
102843 // Calculate and display for mnemonic
102844 var errorText = findPhraseErrors(phrase);
102845 if (errorText) {
102846 showValidationError(errorText);
102847 return;
102848 }
102849 // Calculate and display
102850 var passphrase = DOM.passphrase.val();
102851 calcBip32RootKeyFromSeed(phrase, passphrase);
102852 }
102853 else {
102854 // Calculate and display for root key
102855 var rootKeyBase58 = DOM.rootKey.val();
102856 var errorText = validateRootKey(rootKeyBase58);
102857 if (errorText) {
102858 showValidationError(errorText);
102859 return;
102860 }
102861 // Calculate and display
102862 calcBip32RootKeyFromBase58(rootKeyBase58);
102863 }
102864 calcForDerivationPath();
102865 }
102866
102867 function delayedEntropyChanged() {
102868 hideValidationError();
102869 showPending();
102870 if (entropyChangeTimeoutEvent != null) {
102871 clearTimeout(entropyChangeTimeoutEvent);
102872 }
102873 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
102874 }
102875
102876 function entropyChanged() {
102877 // If blank entropy, clear mnemonic, addresses, errors
102878 if (DOM.entropy.val().trim().length == 0) {
102879 clearDisplay();
102880 clearEntropyFeedback();
102881 DOM.phrase.val("");
102882 showValidationError("Blank entropy");
102883 return;
102884 }
102885 // Get the current phrase to detect changes
102886 var phrase = DOM.phrase.val();
102887 // Set the phrase from the entropy
102888 setMnemonicFromEntropy();
102889 // Recalc addresses if the phrase has changed
102890 var newPhrase = DOM.phrase.val();
102891 if (newPhrase != phrase) {
102892 if (newPhrase.length == 0) {
102893 clearDisplay();
102894 }
102895 else {
102896 phraseChanged();
102897 }
102898 }
102899 else {
102900 hidePending();
102901 }
102902 }
102903
102904 function delayedRootKeyChanged() {
102905 // Warn if there is an existing mnemonic or passphrase.
102906 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
102907 if (!confirm("This will clear existing mnemonic and passphrase")) {
102908 DOM.rootKey.val(bip32RootKey);
102909 return
102910 }
102911 }
102912 hideValidationError();
102913 showPending();
102914 // Clear existing mnemonic and passphrase
102915 DOM.phrase.val("");
102916 DOM.passphrase.val("");
102917 seed = null;
102918 if (rootKeyChangedTimeoutEvent != null) {
102919 clearTimeout(rootKeyChangedTimeoutEvent);
102920 }
102921 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
102922 }
102923
102924 function rootKeyChanged() {
102925 showPending();
102926 hideValidationError();
102927 var rootKeyBase58 = DOM.rootKey.val();
102928 var errorText = validateRootKey(rootKeyBase58);
102929 if (errorText) {
102930 showValidationError(errorText);
102931 return;
102932 }
102933 // Calculate and display
102934 calcBip32RootKeyFromBase58(rootKeyBase58);
102935 calcForDerivationPath();
102936 }
102937
102938 function litecoinUseLtubChanged() {
102939 litecoinUseLtub = DOM.litecoinUseLtub.prop("checked");
102940 if (litecoinUseLtub) {
102941 network = bitcoinjs.bitcoin.networks.litecoin;
102942 }
102943 else {
102944 network = bitcoinjs.bitcoin.networks.litecoinXprv;
102945 }
102946 phraseChanged();
102947 }
102948
102949 function calcForDerivationPath() {
102950 clearDerivedKeys();
102951 clearAddressesList();
102952 showPending();
102953 // Don't show segwit if it's selected but network doesn't support it
102954 if (segwitSelected() && !networkHasSegwit()) {
102955 return;
102956 }
102957 // Get the derivation path
102958 var derivationPath = getDerivationPath();
102959 var errorText = findDerivationPathErrors(derivationPath);
102960 if (errorText) {
102961 showValidationError(errorText);
102962 return;
102963 }
102964 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
102965 if (bip44TabSelected()) {
102966 displayBip44Info();
102967 }
102968 else if (bip49TabSelected()) {
102969 displayBip49Info();
102970 }
102971 else if (bip84TabSelected()) {
102972 displayBip84Info();
102973 }
102974 displayBip32Info();
102975 }
102976
102977 function generateClicked() {
102978 if (isUsingOwnEntropy()) {
102979 return;
102980 }
102981 clearDisplay();
102982 showPending();
102983 setTimeout(function() {
102984 setMnemonicLanguage();
102985 var phrase = generateRandomPhrase();
102986 if (!phrase) {
102987 return;
102988 }
102989 phraseChanged();
102990 }, 50);
102991 }
102992
102993 function languageChanged() {
102994 setTimeout(function() {
102995 setMnemonicLanguage();
102996 if (DOM.phrase.val().length > 0) {
102997 var newPhrase = convertPhraseToNewLanguage();
102998 DOM.phrase.val(newPhrase);
102999 phraseChanged();
103000 }
103001 else {
103002 DOM.generate.trigger("click");
103003 }
103004 }, 50);
103005 }
103006
103007 function useBitpayAddressesChange() {
103008 setBitcoinCashNetworkValues();
103009 phraseChanged();
103010 }
103011
103012 function toggleIndexes() {
103013 showIndex = !showIndex;
103014 $("td.index span").toggleClass("invisible");
103015 }
103016
103017 function toggleAddresses() {
103018 showAddress = !showAddress;
103019 $("td.address span").toggleClass("invisible");
103020 }
103021
103022 function togglePublicKeys() {
103023 showPubKey = !showPubKey;
103024 $("td.pubkey span").toggleClass("invisible");
103025 }
103026
103027 function togglePrivateKeys() {
103028 showPrivKey = !showPrivKey;
103029 $("td.privkey span").toggleClass("invisible");
103030 }
103031
103032 // Private methods
103033
103034 function generateRandomPhrase() {
103035 if (!hasStrongRandom()) {
103036 var errorText = "This browser does not support strong randomness";
103037 showValidationError(errorText);
103038 return;
103039 }
103040 // get the amount of entropy to use
103041 var numWords = parseInt(DOM.generatedStrength.val());
103042 var strength = numWords / 3 * 32;
103043 var buffer = new Uint8Array(strength / 8);
103044 // create secure entropy
103045 var data = crypto.getRandomValues(buffer);
103046 // show the words
103047 var words = mnemonic.toMnemonic(data);
103048 DOM.phrase.val(words);
103049 // show the entropy
103050 var entropyHex = uint8ArrayToHex(data);
103051 DOM.entropy.val(entropyHex);
103052 // ensure entropy fields are consistent with what is being displayed
103053 DOM.entropyMnemonicLength.val("raw");
103054 return words;
103055 }
103056
103057 function calcBip32RootKeyFromSeed(phrase, passphrase) {
103058 seed = mnemonic.toSeed(phrase, passphrase);
103059 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network);
103060 }
103061
103062 function calcBip32RootKeyFromBase58(rootKeyBase58) {
103063 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
103064 }
103065
103066 function calcBip32ExtendedKey(path) {
103067 // Check there's a root key to derive from
103068 if (!bip32RootKey) {
103069 return bip32RootKey;
103070 }
103071 var extendedKey = bip32RootKey;
103072 // Derive the key from the path
103073 var pathBits = path.split("/");
103074 for (var i=0; i<pathBits.length; i++) {
103075 var bit = pathBits[i];
103076 var index = parseInt(bit);
103077 if (isNaN(index)) {
103078 continue;
103079 }
103080 var hardened = bit[bit.length-1] == "'";
103081 var isPriv = !(extendedKey.isNeutered());
103082 var invalidDerivationPath = hardened && !isPriv;
103083 if (invalidDerivationPath) {
103084 extendedKey = null;
103085 }
103086 else if (hardened) {
103087 extendedKey = extendedKey.deriveHardened(index);
103088 }
103089 else {
103090 extendedKey = extendedKey.derive(index);
103091 }
103092 }
103093 return extendedKey
103094 }
103095
103096 function showValidationError(errorText) {
103097 DOM.feedback
103098 .text(errorText)
103099 .show();
103100 }
103101
103102 function hideValidationError() {
103103 DOM.feedback
103104 .text("")
103105 .hide();
103106 }
103107
103108 function findPhraseErrors(phrase) {
103109 // Preprocess the words
103110 phrase = mnemonic.normalizeString(phrase);
103111 var words = phraseToWordArray(phrase);
103112 // Detect blank phrase
103113 if (words.length == 0) {
103114 return "Blank mnemonic";
103115 }
103116 // Check each word
103117 for (var i=0; i<words.length; i++) {
103118 var word = words[i];
103119 var language = getLanguage();
103120 if (WORDLISTS[language].indexOf(word) == -1) {
103121 console.log("Finding closest match to " + word);
103122 var nearestWord = findNearestWord(word);
103123 return word + " not in wordlist, did you mean " + nearestWord + "?";
103124 }
103125 }
103126 // Check the words are valid
103127 var properPhrase = wordArrayToPhrase(words);
103128 var isValid = mnemonic.check(properPhrase);
103129 if (!isValid) {
103130 return "Invalid mnemonic";
103131 }
103132 return false;
103133 }
103134
103135 function validateRootKey(rootKeyBase58) {
103136 try {
103137 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
103138 }
103139 catch (e) {
103140 return "Invalid root key";
103141 }
103142 return "";
103143 }
103144
103145 function getDerivationPath() {
103146 if (bip44TabSelected()) {
103147 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
103148 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
103149 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
103150 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
103151 var path = "m/";
103152 path += purpose + "'/";
103153 path += coin + "'/";
103154 path += account + "'/";
103155 path += change;
103156 DOM.bip44path.val(path);
103157 var derivationPath = DOM.bip44path.val();
103158 console.log("Using derivation path from BIP44 tab: " + derivationPath);
103159 return derivationPath;
103160 }
103161 else if (bip49TabSelected()) {
103162 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
103163 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
103164 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
103165 var change = parseIntNoNaN(DOM.bip49change.val(), 0);
103166 var path = "m/";
103167 path += purpose + "'/";
103168 path += coin + "'/";
103169 path += account + "'/";
103170 path += change;
103171 DOM.bip49path.val(path);
103172 var derivationPath = DOM.bip49path.val();
103173 console.log("Using derivation path from BIP49 tab: " + derivationPath);
103174 return derivationPath;
103175 }
103176 else if (bip84TabSelected()) {
103177 var purpose = parseIntNoNaN(DOM.bip84purpose.val(), 84);
103178 var coin = parseIntNoNaN(DOM.bip84coin.val(), 0);
103179 var account = parseIntNoNaN(DOM.bip84account.val(), 0);
103180 var change = parseIntNoNaN(DOM.bip84change.val(), 0);
103181 var path = "m/";
103182 path += purpose + "'/";
103183 path += coin + "'/";
103184 path += account + "'/";
103185 path += change;
103186 DOM.bip84path.val(path);
103187 var derivationPath = DOM.bip84path.val();
103188 console.log("Using derivation path from BIP84 tab: " + derivationPath);
103189 return derivationPath;
103190 }
103191 else if (bip32TabSelected()) {
103192 var derivationPath = DOM.bip32path.val();
103193 console.log("Using derivation path from BIP32 tab: " + derivationPath);
103194 return derivationPath;
103195 }
103196 else if (bip141TabSelected()) {
103197 var derivationPath = DOM.bip141path.val();
103198 console.log("Using derivation path from BIP141 tab: " + derivationPath);
103199 return derivationPath;
103200 }
103201 else {
103202 console.log("Unknown derivation path");
103203 }
103204 }
103205
103206 function findDerivationPathErrors(path) {
103207 // TODO is not perfect but is better than nothing
103208 // Inspired by
103209 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
103210 // and
103211 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
103212 var maxDepth = 255; // TODO verify this!!
103213 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
103214 if (path[0] != "m") {
103215 return "First character must be 'm'";
103216 }
103217 if (path.length > 1) {
103218 if (path[1] != "/") {
103219 return "Separator must be '/'";
103220 }
103221 var indexes = path.split("/");
103222 if (indexes.length > maxDepth) {
103223 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
103224 }
103225 for (var depth = 1; depth<indexes.length; depth++) {
103226 var index = indexes[depth];
103227 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
103228 if (invalidChars.length > 0) {
103229 return "Invalid characters " + invalidChars + " found at depth " + depth;
103230 }
103231 var indexValue = parseInt(index.replace("'", ""));
103232 if (isNaN(depth)) {
103233 return "Invalid number at depth " + depth;
103234 }
103235 if (indexValue > maxIndexValue) {
103236 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
103237 }
103238 }
103239 }
103240 // Check root key exists or else derivation path is useless!
103241 if (!bip32RootKey) {
103242 return "No root key";
103243 }
103244 // Check no hardened derivation path when using xpub keys
103245 var hardenedPath = path.indexOf("'") > -1;
103246 var hardenedAddresses = bip32TabSelected() && DOM.hardenedAddresses.prop("checked");
103247 var hardened = hardenedPath || hardenedAddresses;
103248 var isXpubkey = bip32RootKey.isNeutered();
103249 if (hardened && isXpubkey) {
103250 return "Hardened derivation path is invalid with xpub key";
103251 }
103252 return false;
103253 }
103254
103255 function displayBip44Info() {
103256 // Get the derivation path for the account
103257 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
103258 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
103259 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
103260 var path = "m/";
103261 path += purpose + "'/";
103262 path += coin + "'/";
103263 path += account + "'/";
103264 // Calculate the account extended keys
103265 var accountExtendedKey = calcBip32ExtendedKey(path);
103266 var accountXprv = accountExtendedKey.toBase58();
103267 var accountXpub = accountExtendedKey.neutered().toBase58();
103268 // Display the extended keys
103269 DOM.bip44accountXprv.val(accountXprv);
103270 DOM.bip44accountXpub.val(accountXpub);
103271 }
103272
103273 function displayBip49Info() {
103274 // Get the derivation path for the account
103275 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
103276 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
103277 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
103278 var path = "m/";
103279 path += purpose + "'/";
103280 path += coin + "'/";
103281 path += account + "'/";
103282 // Calculate the account extended keys
103283 var accountExtendedKey = calcBip32ExtendedKey(path);
103284 var accountXprv = accountExtendedKey.toBase58();
103285 var accountXpub = accountExtendedKey.neutered().toBase58();
103286 // Display the extended keys
103287 DOM.bip49accountXprv.val(accountXprv);
103288 DOM.bip49accountXpub.val(accountXpub);
103289 }
103290
103291 function displayBip84Info() {
103292 // Get the derivation path for the account
103293 var purpose = parseIntNoNaN(DOM.bip84purpose.val(), 84);
103294 var coin = parseIntNoNaN(DOM.bip84coin.val(), 0);
103295 var account = parseIntNoNaN(DOM.bip84account.val(), 0);
103296 var path = "m/";
103297 path += purpose + "'/";
103298 path += coin + "'/";
103299 path += account + "'/";
103300 // Calculate the account extended keys
103301 var accountExtendedKey = calcBip32ExtendedKey(path);
103302 var accountXprv = accountExtendedKey.toBase58();
103303 var accountXpub = accountExtendedKey.neutered().toBase58();
103304 // Display the extended keys
103305 DOM.bip84accountXprv.val(accountXprv);
103306 DOM.bip84accountXpub.val(accountXpub);
103307 }
103308
103309 function displayBip32Info() {
103310 // Display the key
103311 DOM.seed.val(seed);
103312 var rootKey = bip32RootKey.toBase58();
103313 DOM.rootKey.val(rootKey);
103314 var xprvkeyB58 = "NA";
103315 if (!bip32ExtendedKey.isNeutered()) {
103316 xprvkeyB58 = bip32ExtendedKey.toBase58();
103317 }
103318 var extendedPrivKey = xprvkeyB58;
103319 DOM.extendedPrivKey.val(extendedPrivKey);
103320 var extendedPubKey = bip32ExtendedKey.neutered().toBase58();
103321 DOM.extendedPubKey.val(extendedPubKey);
103322 // Display the addresses and privkeys
103323 clearAddressesList();
103324 var initialAddressCount = parseInt(DOM.rowsToAdd.val());
103325 displayAddresses(0, initialAddressCount);
103326 }
103327
103328 function displayAddresses(start, total) {
103329 generationProcesses.push(new (function() {
103330
103331 var rows = [];
103332
103333 this.stop = function() {
103334 for (var i=0; i<rows.length; i++) {
103335 rows[i].shouldGenerate = false;
103336 }
103337 hidePending();
103338 }
103339
103340 for (var i=0; i<total; i++) {
103341 var index = i + start;
103342 var isLast = i == total - 1;
103343 rows.push(new TableRow(index, isLast));
103344 }
103345
103346 })());
103347 }
103348
103349 function segwitSelected() {
103350 return bip49TabSelected() || bip84TabSelected() || bip141TabSelected();
103351 }
103352
103353 function p2wpkhSelected() {
103354 return bip84TabSelected() ||
103355 bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh";
103356 }
103357
103358 function p2wpkhInP2shSelected() {
103359 return bip49TabSelected() ||
103360 (bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh-p2sh");
103361 }
103362
103363 function TableRow(index, isLast) {
103364
103365 var self = this;
103366 this.shouldGenerate = true;
103367 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
103368 var useBip38 = DOM.useBip38.prop("checked");
103369 var bip38password = DOM.bip38Password.val();
103370 var isSegwit = segwitSelected();
103371 var segwitAvailable = networkHasSegwit();
103372 var isP2wpkh = p2wpkhSelected();
103373 var isP2wpkhInP2sh = p2wpkhInP2shSelected();
103374
103375 function init() {
103376 calculateValues();
103377 }
103378
103379 function calculateValues() {
103380 setTimeout(function() {
103381 if (!self.shouldGenerate) {
103382 return;
103383 }
103384 // derive HDkey for this row of the table
103385 var key = "NA";
103386 if (useHardenedAddresses) {
103387 key = bip32ExtendedKey.deriveHardened(index);
103388 }
103389 else {
103390 key = bip32ExtendedKey.derive(index);
103391 }
103392 // bip38 requires uncompressed keys
103393 // see https://github.com/iancoleman/bip39/issues/140#issuecomment-352164035
103394 var keyPair = key.keyPair;
103395 var useUncompressed = useBip38;
103396 if (useUncompressed) {
103397 keyPair = new bitcoinjs.bitcoin.ECPair(keyPair.d, null, { compressed: false });
103398 }
103399 // get address
103400 var address = keyPair.getAddress().toString();
103401 // get privkey
103402 var hasPrivkey = !key.isNeutered();
103403 var privkey = "NA";
103404 if (hasPrivkey) {
103405 privkey = keyPair.toWIF(network);
103406 // BIP38 encode private key if required
103407 if (useBip38) {
103408 privkey = bitcoinjsBip38.encrypt(keyPair.d.toBuffer(), false, bip38password, function(p) {
103409 console.log("Progressed " + p.percent.toFixed(1) + "% for index " + index);
103410 });
103411 }
103412 }
103413 // get pubkey
103414 var pubkey = keyPair.getPublicKeyBuffer().toString('hex');
103415 var indexText = getDerivationPath() + "/" + index;
103416 if (useHardenedAddresses) {
103417 indexText = indexText + "'";
103418 }
103419 // Ethereum values are different
103420 if (networks[DOM.network.val()].name == "ETH - Ethereum") {
103421 var privKeyBuffer = keyPair.d.toBuffer(32);
103422 privkey = privKeyBuffer.toString('hex');
103423 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
103424 var hexAddress = addressBuffer.toString('hex');
103425 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
103426 address = ethUtil.addHexPrefix(checksumAddress);
103427 privkey = ethUtil.addHexPrefix(privkey);
103428 pubkey = ethUtil.addHexPrefix(pubkey);
103429 }
103430 // Ripple values are different
103431 if (networks[DOM.network.val()].name == "XRP - Ripple") {
103432 privkey = convertRipplePriv(privkey);
103433 address = convertRippleAdrr(address);
103434 }
103435 // Segwit addresses are different
103436 if (isSegwit) {
103437 if (!segwitAvailable) {
103438 return;
103439 }
103440 if (isP2wpkh) {
103441 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
103442 var scriptpubkey = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
103443 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
103444 }
103445 else if (isP2wpkhInP2sh) {
103446 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
103447 var scriptsig = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
103448 var addressbytes = bitcoinjs.bitcoin.crypto.hash160(scriptsig);
103449 var scriptpubkey = bitcoinjs.bitcoin.script.scriptHash.output.encode(addressbytes);
103450 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
103451 }
103452 }
103453 addAddressToList(indexText, address, pubkey, privkey);
103454 if (isLast) {
103455 hidePending();
103456 updateCsv();
103457 }
103458 }, 50)
103459 }
103460
103461 init();
103462
103463 }
103464
103465 function showMore() {
103466 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
103467 if (isNaN(rowsToAdd)) {
103468 rowsToAdd = 20;
103469 DOM.rowsToAdd.val("20");
103470 }
103471 var start = parseInt(DOM.moreRowsStartIndex.val())
103472 if (isNaN(start)) {
103473 start = lastIndexInTable() + 1;
103474 }
103475 else {
103476 var newStart = start + rowsToAdd;
103477 DOM.moreRowsStartIndex.val(newStart);
103478 }
103479 if (rowsToAdd > 200) {
103480 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
103481 msg += "Do you want to continue?";
103482 if (!confirm(msg)) {
103483 return;
103484 }
103485 }
103486 displayAddresses(start, rowsToAdd);
103487 }
103488
103489 function clearDisplay() {
103490 clearAddressesList();
103491 clearKeys();
103492 hideValidationError();
103493 }
103494
103495 function clearAddressesList() {
103496 DOM.addresses.empty();
103497 DOM.csv.val("");
103498 stopGenerating();
103499 }
103500
103501 function stopGenerating() {
103502 while (generationProcesses.length > 0) {
103503 var generation = generationProcesses.shift();
103504 generation.stop();
103505 }
103506 }
103507
103508 function clearKeys() {
103509 clearRootKey();
103510 clearDerivedKeys();
103511 }
103512
103513 function clearRootKey() {
103514 DOM.rootKey.val("");
103515 }
103516
103517 function clearDerivedKeys() {
103518 DOM.extendedPrivKey.val("");
103519 DOM.extendedPubKey.val("");
103520 DOM.bip44accountXprv.val("");
103521 DOM.bip44accountXpub.val("");
103522 }
103523
103524 function addAddressToList(indexText, address, pubkey, privkey) {
103525 var row = $(addressRowTemplate.html());
103526 // Elements
103527 var indexCell = row.find(".index span");
103528 var addressCell = row.find(".address span");
103529 var pubkeyCell = row.find(".pubkey span");
103530 var privkeyCell = row.find(".privkey span");
103531 // Content
103532 indexCell.text(indexText);
103533 addressCell.text(address);
103534 pubkeyCell.text(pubkey);
103535 privkeyCell.text(privkey);
103536 // Visibility
103537 if (!showIndex) {
103538 indexCell.addClass("invisible");
103539 }
103540 if (!showAddress) {
103541 addressCell.addClass("invisible");
103542 }
103543 if (!showPubKey) {
103544 pubkeyCell.addClass("invisible");
103545 }
103546 if (!showPrivKey) {
103547 privkeyCell.addClass("invisible");
103548 }
103549 DOM.addresses.append(row);
103550 var rowShowQrEls = row.find("[data-show-qr]");
103551 setQrEvents(rowShowQrEls);
103552 }
103553
103554 function hasStrongRandom() {
103555 return 'crypto' in window && window['crypto'] !== null;
103556 }
103557
103558 function disableForms() {
103559 $("form").on("submit", function(e) {
103560 e.preventDefault();
103561 });
103562 }
103563
103564 function parseIntNoNaN(val, defaultVal) {
103565 var v = parseInt(val);
103566 if (isNaN(v)) {
103567 return defaultVal;
103568 }
103569 return v;
103570 }
103571
103572 function showPending() {
103573 DOM.feedback
103574 .text("Calculating...")
103575 .show();
103576 }
103577
103578 function findNearestWord(word) {
103579 var language = getLanguage();
103580 var words = WORDLISTS[language];
103581 var minDistance = 99;
103582 var closestWord = words[0];
103583 for (var i=0; i<words.length; i++) {
103584 var comparedTo = words[i];
103585 if (comparedTo.indexOf(word) == 0) {
103586 return comparedTo;
103587 }
103588 var distance = Levenshtein.get(word, comparedTo);
103589 if (distance < minDistance) {
103590 closestWord = comparedTo;
103591 minDistance = distance;
103592 }
103593 }
103594 return closestWord;
103595 }
103596
103597 function hidePending() {
103598 DOM.feedback
103599 .text("")
103600 .hide();
103601 }
103602
103603 function populateNetworkSelect() {
103604 for (var i=0; i<networks.length; i++) {
103605 var network = networks[i];
103606 var option = $("<option>");
103607 option.attr("value", i);
103608 option.text(network.name);
103609 if (network.name == "BTC - Bitcoin") {
103610 option.prop("selected", true);
103611 }
103612 DOM.phraseNetwork.append(option);
103613 }
103614 }
103615
103616 function populateClientSelect() {
103617 for (var i=0; i<clients.length; i++) {
103618 var client = clients[i];
103619 var option = $("<option>");
103620 option.attr("value", i);
103621 option.text(client.name);
103622 DOM.bip32Client.append(option);
103623 }
103624 }
103625
103626 function getLanguage() {
103627 var defaultLanguage = "english";
103628 // Try to get from existing phrase
103629 var language = getLanguageFromPhrase();
103630 // Try to get from url if not from phrase
103631 if (language.length == 0) {
103632 language = getLanguageFromUrl();
103633 }
103634 // Default to English if no other option
103635 if (language.length == 0) {
103636 language = defaultLanguage;
103637 }
103638 return language;
103639 }
103640
103641 function getLanguageFromPhrase(phrase) {
103642 // Check if how many words from existing phrase match a language.
103643 var language = "";
103644 if (!phrase) {
103645 phrase = DOM.phrase.val();
103646 }
103647 if (phrase.length > 0) {
103648 var words = phraseToWordArray(phrase);
103649 var languageMatches = {};
103650 for (l in WORDLISTS) {
103651 // Track how many words match in this language
103652 languageMatches[l] = 0;
103653 for (var i=0; i<words.length; i++) {
103654 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
103655 if (wordInLanguage) {
103656 languageMatches[l]++;
103657 }
103658 }
103659 // Find languages with most word matches.
103660 // This is made difficult due to commonalities between Chinese
103661 // simplified vs traditional.
103662 var mostMatches = 0;
103663 var mostMatchedLanguages = [];
103664 for (var l in languageMatches) {
103665 var numMatches = languageMatches[l];
103666 if (numMatches > mostMatches) {
103667 mostMatches = numMatches;
103668 mostMatchedLanguages = [l];
103669 }
103670 else if (numMatches == mostMatches) {
103671 mostMatchedLanguages.push(l);
103672 }
103673 }
103674 }
103675 if (mostMatchedLanguages.length > 0) {
103676 // Use first language and warn if multiple detected
103677 language = mostMatchedLanguages[0];
103678 if (mostMatchedLanguages.length > 1) {
103679 console.warn("Multiple possible languages");
103680 console.warn(mostMatchedLanguages);
103681 }
103682 }
103683 }
103684 return language;
103685 }
103686
103687 function getLanguageFromUrl() {
103688 for (var language in WORDLISTS) {
103689 if (window.location.hash.indexOf(language) > -1) {
103690 return language;
103691 }
103692 }
103693 return "";
103694 }
103695
103696 function setMnemonicLanguage() {
103697 var language = getLanguage();
103698 // Load the bip39 mnemonic generator for this language if required
103699 if (!(language in mnemonics)) {
103700 mnemonics[language] = new Mnemonic(language);
103701 }
103702 mnemonic = mnemonics[language];
103703 }
103704
103705 function convertPhraseToNewLanguage() {
103706 var oldLanguage = getLanguageFromPhrase();
103707 var newLanguage = getLanguageFromUrl();
103708 var oldPhrase = DOM.phrase.val();
103709 var oldWords = phraseToWordArray(oldPhrase);
103710 var newWords = [];
103711 for (var i=0; i<oldWords.length; i++) {
103712 var oldWord = oldWords[i];
103713 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
103714 var newWord = WORDLISTS[newLanguage][index];
103715 newWords.push(newWord);
103716 }
103717 newPhrase = wordArrayToPhrase(newWords);
103718 return newPhrase;
103719 }
103720
103721 // TODO look at jsbip39 - mnemonic.splitWords
103722 function phraseToWordArray(phrase) {
103723 var words = phrase.split(/\s/g);
103724 var noBlanks = [];
103725 for (var i=0; i<words.length; i++) {
103726 var word = words[i];
103727 if (word.length > 0) {
103728 noBlanks.push(word);
103729 }
103730 }
103731 return noBlanks;
103732 }
103733
103734 // TODO look at jsbip39 - mnemonic.joinWords
103735 function wordArrayToPhrase(words) {
103736 var phrase = words.join(" ");
103737 var language = getLanguageFromPhrase(phrase);
103738 if (language == "japanese") {
103739 phrase = words.join("\u3000");
103740 }
103741 return phrase;
103742 }
103743
103744 function isUsingOwnEntropy() {
103745 return DOM.useEntropy.prop("checked");
103746 }
103747
103748 function setMnemonicFromEntropy() {
103749 clearEntropyFeedback();
103750 // Get entropy value
103751 var entropyStr = DOM.entropy.val();
103752 // Work out minimum base for entropy
103753 var entropy = Entropy.fromString(entropyStr);
103754 if (entropy.binaryStr.length == 0) {
103755 return;
103756 }
103757 // Show entropy details
103758 showEntropyFeedback(entropy);
103759 // Use entropy hash if not using raw entropy
103760 var bits = entropy.binaryStr;
103761 var mnemonicLength = DOM.entropyMnemonicLength.val();
103762 if (mnemonicLength != "raw") {
103763 // Get bits by hashing entropy with SHA256
103764 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
103765 var hex = sjcl.codec.hex.fromBits(hash);
103766 bits = BigInteger.parse(hex, 16).toString(2);
103767 while (bits.length % 256 != 0) {
103768 bits = "0" + bits;
103769 }
103770 // Truncate hash to suit number of words
103771 mnemonicLength = parseInt(mnemonicLength);
103772 var numberOfBits = 32 * mnemonicLength / 3;
103773 bits = bits.substring(0, numberOfBits);
103774 }
103775 // Discard trailing entropy
103776 var bitsToUse = Math.floor(bits.length / 32) * 32;
103777 var start = bits.length - bitsToUse;
103778 var binaryStr = bits.substring(start);
103779 // Convert entropy string to numeric array
103780 var entropyArr = [];
103781 for (var i=0; i<binaryStr.length / 8; i++) {
103782 var byteAsBits = binaryStr.substring(i*8, i*8+8);
103783 var entropyByte = parseInt(byteAsBits, 2);
103784 entropyArr.push(entropyByte)
103785 }
103786 // Convert entropy array to mnemonic
103787 var phrase = mnemonic.toMnemonic(entropyArr);
103788 // Set the mnemonic in the UI
103789 DOM.phrase.val(phrase);
103790 // Show the word indexes
103791 showWordIndexes();
103792 }
103793
103794 function clearEntropyFeedback() {
103795 DOM.entropyCrackTime.text("...");
103796 DOM.entropyType.text("");
103797 DOM.entropyWordCount.text("0");
103798 DOM.entropyEventCount.text("0");
103799 DOM.entropyBitsPerEvent.text("0");
103800 DOM.entropyBits.text("0");
103801 DOM.entropyFiltered.html("&nbsp;");
103802 DOM.entropyBinary.html("&nbsp;");
103803 }
103804
103805 function showEntropyFeedback(entropy) {
103806 var numberOfBits = entropy.binaryStr.length;
103807 var timeToCrack = "unknown";
103808 try {
103809 var z = zxcvbn(entropy.base.parts.join(""));
103810 timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second;
103811 if (z.feedback.warning != "") {
103812 timeToCrack = timeToCrack + " - " + z.feedback.warning;
103813 };
103814 }
103815 catch (e) {
103816 console.log("Error detecting entropy strength with zxcvbn:");
103817 console.log(e);
103818 }
103819 var entropyTypeStr = getEntropyTypeStr(entropy);
103820 var wordCount = Math.floor(numberOfBits / 32) * 3;
103821 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
103822 DOM.entropyFiltered.html(entropy.cleanHtml);
103823 DOM.entropyType.text(entropyTypeStr);
103824 DOM.entropyCrackTime.text(timeToCrack);
103825 DOM.entropyEventCount.text(entropy.base.ints.length);
103826 DOM.entropyBits.text(numberOfBits);
103827 DOM.entropyWordCount.text(wordCount);
103828 DOM.entropyBinary.text(entropy.binaryStr);
103829 DOM.entropyBitsPerEvent.text(bitsPerEvent);
103830 // detect and warn of filtering
103831 var rawNoSpaces = DOM.entropy.val().replace(/\s/g, "");
103832 var cleanNoSpaces = entropy.cleanStr.replace(/\s/g, "");
103833 var isFiltered = rawNoSpaces.length != cleanNoSpaces.length;
103834 if (isFiltered) {
103835 DOM.entropyFilterWarning.removeClass('hidden');
103836 }
103837 else {
103838 DOM.entropyFilterWarning.addClass('hidden');
103839 }
103840 }
103841
103842 function getEntropyTypeStr(entropy) {
103843 var typeStr = entropy.base.str;
103844 // Add some detail if these are cards
103845 if (entropy.base.asInt == 52) {
103846 var cardDetail = []; // array of message strings
103847 // Detect duplicates
103848 var dupes = [];
103849 var dupeTracker = {};
103850 for (var i=0; i<entropy.base.parts.length; i++) {
103851 var card = entropy.base.parts[i];
103852 var cardUpper = card.toUpperCase();
103853 if (cardUpper in dupeTracker) {
103854 dupes.push(card);
103855 }
103856 dupeTracker[cardUpper] = true;
103857 }
103858 if (dupes.length > 0) {
103859 var dupeWord = "duplicates";
103860 if (dupes.length == 1) {
103861 dupeWord = "duplicate";
103862 }
103863 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
103864 if (dupes.length > 3) {
103865 msg += "...";
103866 }
103867 cardDetail.push(msg);
103868 }
103869 // Detect full deck
103870 var uniqueCards = [];
103871 for (var uniqueCard in dupeTracker) {
103872 uniqueCards.push(uniqueCard);
103873 }
103874 if (uniqueCards.length == 52) {
103875 cardDetail.unshift("full deck");
103876 }
103877 // Detect missing cards
103878 var values = "A23456789TJQK";
103879 var suits = "CDHS";
103880 var missingCards = [];
103881 for (var i=0; i<suits.length; i++) {
103882 for (var j=0; j<values.length; j++) {
103883 var card = values[j] + suits[i];
103884 if (!(card in dupeTracker)) {
103885 missingCards.push(card);
103886 }
103887 }
103888 }
103889 // Display missing cards if six or less, ie clearly going for full deck
103890 if (missingCards.length > 0 && missingCards.length <= 6) {
103891 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
103892 if (missingCards.length > 3) {
103893 msg += "...";
103894 }
103895 cardDetail.push(msg);
103896 }
103897 // Add card details to typeStr
103898 if (cardDetail.length > 0) {
103899 typeStr += " (" + cardDetail.join(", ") + ")";
103900 }
103901 }
103902 return typeStr;
103903 }
103904
103905 function setQrEvents(els) {
103906 els.on("mouseenter", createQr);
103907 els.on("mouseleave", destroyQr);
103908 els.on("click", toggleQr);
103909 }
103910
103911 function createQr(e) {
103912 var content = e.target.textContent || e.target.value;
103913 if (content) {
103914 var qrEl = kjua({
103915 text: content,
103916 render: "canvas",
103917 size: 310,
103918 ecLevel: 'H',
103919 });
103920 DOM.qrImage.append(qrEl);
103921 if (!showQr) {
103922 DOM.qrHider.addClass("hidden");
103923 }
103924 else {
103925 DOM.qrHider.removeClass("hidden");
103926 }
103927 DOM.qrContainer.removeClass("hidden");
103928 }
103929 }
103930
103931 function destroyQr() {
103932 DOM.qrImage.text("");
103933 DOM.qrContainer.addClass("hidden");
103934 }
103935
103936 function toggleQr() {
103937 showQr = !showQr;
103938 DOM.qrHider.toggleClass("hidden");
103939 DOM.qrHint.toggleClass("hidden");
103940 }
103941
103942 function bip44TabSelected() {
103943 return DOM.bip44tab.hasClass("active");
103944 }
103945
103946 function bip32TabSelected() {
103947 return DOM.bip32tab.hasClass("active");
103948 }
103949
103950 function networkHasSegwit() {
103951 return networks[DOM.network.val()].segwitAvailable;
103952 }
103953
103954 function bip49TabSelected() {
103955 return DOM.bip49tab.hasClass("active");
103956 }
103957
103958 function bip84TabSelected() {
103959 return DOM.bip84tab.hasClass("active");
103960 }
103961
103962 function bip141TabSelected() {
103963 return DOM.bip141tab.hasClass("active");
103964 }
103965
103966 function setHdCoin(coinValue) {
103967 DOM.bip44coin.val(coinValue);
103968 DOM.bip49coin.val(coinValue);
103969 DOM.bip84coin.val(coinValue);
103970 }
103971
103972 function showSegwitAvailable() {
103973 DOM.bip49unavailable.addClass("hidden");
103974 DOM.bip49available.removeClass("hidden");
103975 DOM.bip141unavailable.addClass("hidden");
103976 DOM.bip141available.removeClass("hidden");
103977 }
103978
103979 function showSegwitUnavailable() {
103980 DOM.bip49available.addClass("hidden");
103981 DOM.bip49unavailable.removeClass("hidden");
103982 DOM.bip141available.addClass("hidden");
103983 DOM.bip141unavailable.removeClass("hidden");
103984 }
103985
103986 function useBitpayAddresses() {
103987 return !(DOM.useBitpayAddresses.prop("checked"));
103988 }
103989
103990 function setBitcoinCashNetworkValues() {
103991 if (useBitpayAddresses()) {
103992 network = bitcoinjs.bitcoin.networks.bitcoin;
103993 }
103994 else {
103995 network = bitcoinjs.bitcoin.networks.bitcoinCashBitbpay;
103996 }
103997 }
103998
103999 function adjustNetworkForSegwit() {
104000 // If segwit is selected the xpub/xprv prefixes need to be adjusted
104001 // to avoid accidentally importing BIP49 xpub to BIP44 watch only
104002 // wallet.
104003 // See https://github.com/iancoleman/bip39/issues/125
104004 var segwitNetworks = null;
104005 // if a segwit network is alread selected, need to use base network to
104006 // look up new parameters
104007 if ("baseNetwork" in network) {
104008 network = bitcoinjs.bitcoin.networks[network.baseNetwork];
104009 }
104010 // choose the right segwit params
104011 if (p2wpkhSelected() && "p2wpkh" in network) {
104012 network = network.p2wpkh;
104013 }
104014 else if (p2wpkhInP2shSelected() && "p2wpkhInP2sh" in network) {
104015 network = network.p2wpkhInP2sh;
104016 }
104017 }
104018
104019 function lastIndexInTable() {
104020 var pathText = DOM.addresses.find(".index").last().text();
104021 var pathBits = pathText.split("/");
104022 var lastBit = pathBits[pathBits.length-1];
104023 var lastBitClean = lastBit.replace("'", "");
104024 return parseInt(lastBitClean);
104025 }
104026
104027 function uint8ArrayToHex(a) {
104028 var s = ""
104029 for (var i=0; i<a.length; i++) {
104030 var h = a[i].toString(16);
104031 while (h.length < 2) {
104032 h = "0" + h;
104033 }
104034 s = s + h;
104035 }
104036 return s;
104037 }
104038
104039 function showWordIndexes() {
104040 var phrase = DOM.phrase.val();
104041 var words = phraseToWordArray(phrase);
104042 var wordIndexes = [];
104043 var language = getLanguage();
104044 for (var i=0; i<words.length; i++) {
104045 var word = words[i];
104046 var wordIndex = WORDLISTS[language].indexOf(word);
104047 wordIndexes.push(wordIndex);
104048 }
104049 var wordIndexesStr = wordIndexes.join(", ");
104050 DOM.entropyWordIndexes.text(wordIndexesStr);
104051 }
104052
104053 function updateCsv() {
104054 var tableCsv = "path,address,public key,private key\n";
104055 var rows = DOM.addresses.find("tr");
104056 for (var i=0; i<rows.length; i++) {
104057 var row = $(rows[i]);
104058 var cells = row.find("td");
104059 for (var j=0; j<cells.length; j++) {
104060 var cell = $(cells[j]);
104061 if (!cell.children().hasClass("invisible")) {
104062 tableCsv = tableCsv + cell.text();
104063 }
104064 if (j != cells.length - 1) {
104065 tableCsv = tableCsv + ",";
104066 }
104067 }
104068 tableCsv = tableCsv + "\n";
104069 }
104070 DOM.csv.val(tableCsv);
104071 }
104072
104073 var networks = [
104074 {
104075 name: "AXE - Axe",
104076 segwitAvailable: false,
104077 onSelect: function() {
104078 network = bitcoinjs.bitcoin.networks.axe;
104079 setHdCoin(0);
104080 },
104081 },
104082 {
104083 name: "BCH - Bitcoin Cash",
104084 segwitAvailable: false,
104085 onSelect: function() {
104086 DOM.useBitpayAddressesContainer.removeClass("hidden");
104087 setBitcoinCashNetworkValues();
104088 setHdCoin(145);
104089 },
104090 },
104091 {
104092 name: "BTC - Bitcoin",
104093 segwitAvailable: true,
104094 onSelect: function() {
104095 network = bitcoinjs.bitcoin.networks.bitcoin;
104096 setHdCoin(0);
104097 },
104098 },
104099 {
104100 name: "BTC - Bitcoin Testnet",
104101 segwitAvailable: true,
104102 onSelect: function() {
104103 network = bitcoinjs.bitcoin.networks.testnet;
104104 setHdCoin(1);
104105 },
104106 },
104107 {
104108 name: "BTG - Bitcoin Gold",
104109 segwitAvailable: true,
104110 onSelect: function() {
104111 network = bitcoinjs.bitcoin.networks.bgold;
104112 setHdCoin(0);
104113 },
104114 },
104115 {
104116 name: "CLAM - Clams",
104117 segwitAvailable: false,
104118 onSelect: function() {
104119 network = bitcoinjs.bitcoin.networks.clam;
104120 setHdCoin(23);
104121 },
104122 },
104123 {
104124 name: "CRW - Crown",
104125 segwitAvailable: false,
104126 onSelect: function() {
104127 network = bitcoinjs.bitcoin.networks.crown;
104128 setHdCoin(72);
104129 },
104130 },
104131 {
104132 name: "DASH - Dash",
104133 segwitAvailable: false,
104134 onSelect: function() {
104135 network = bitcoinjs.bitcoin.networks.dash;
104136 setHdCoin(5);
104137 },
104138 },
104139 {
104140 name: "DASH - Dash Testnet",
104141 segwitAvailable: false,
104142 onSelect: function() {
104143 network = bitcoinjs.bitcoin.networks.dashtn;
104144 setHdCoin(1);
104145 },
104146 },
104147 {
104148 name: "DNR - Denarius",
104149 segwitAvailable: false,
104150 onSelect: function() {
104151 network = bitcoinjs.bitcoin.networks.denarius;
104152 setHdCoin(0);
104153 },
104154 },
104155 {
104156 name: "DOGE - Dogecoin",
104157 segwitAvailable: false,
104158 onSelect: function() {
104159 network = bitcoinjs.bitcoin.networks.dogecoin;
104160 setHdCoin(3);
104161 },
104162 },
104163 {
104164 name: "ETH - Ethereum",
104165 segwitAvailable: false,
104166 onSelect: function() {
104167 network = bitcoinjs.bitcoin.networks.bitcoin;
104168 setHdCoin(60);
104169 },
104170 },
104171 {
104172 name: "FJC - Fujicoin",
104173 segwitAvailable: false,
104174 onSelect: function() {
104175 network = bitcoinjs.bitcoin.networks.fujicoin;
104176 setHdCoin(75);
104177 },
104178 },
104179 {
104180 name: "GAME - GameCredits",
104181 segwitAvailable: false,
104182 onSelect: function() {
104183 network = bitcoinjs.bitcoin.networks.game;
104184 setHdCoin(101);
104185 },
104186 },
104187 {
104188 name: "JBS - Jumbucks",
104189 segwitAvailable: false,
104190 onSelect: function() {
104191 network = bitcoinjs.bitcoin.networks.jumbucks;
104192 setHdCoin(26);
104193 },
104194 },
104195 {
104196 name: "KMD - Komodo",
104197 bip49available: false,
104198 onSelect: function() {
104199 network = bitcoinjs.bitcoin.networks.komodo;
104200 setHdCoin(141);
104201 },
104202 },
104203 {
104204 name: "LTC - Litecoin",
104205 segwitAvailable: true,
104206 onSelect: function() {
104207 network = bitcoinjs.bitcoin.networks.litecoin;
104208 setHdCoin(2);
104209 DOM.litecoinLtubContainer.removeClass("hidden");
104210 },
104211 },
104212 {
104213 name: "MAZA - Maza",
104214 segwitAvailable: false,
104215 onSelect: function() {
104216 network = bitcoinjs.bitcoin.networks.maza;
104217 setHdCoin(13);
104218 },
104219 },
104220 {
104221 name: "MONA - Monacoin",
104222 segwitAvailable: true,
104223 onSelect: function() {
104224 network = bitcoinjs.bitcoin.networks.monacoin,
104225 setHdCoin(22);
104226 },
104227 },
104228 {
104229 name: "NMC - Namecoin",
104230 segwitAvailable: false,
104231 onSelect: function() {
104232 network = bitcoinjs.bitcoin.networks.namecoin;
104233 setHdCoin(7);
104234 },
104235 },
104236 {
104237 name: "ONX - Onixcoin",
104238 segwitAvailable: false,
104239 onSelect: function() {
104240 network = bitcoinjs.bitcoin.networks.onixcoin;
104241 setHdCoin(174);
104242 },
104243 },
104244 {
104245 name: "PIVX - PIVX",
104246 segwitAvailable: false,
104247 onSelect: function() {
104248 network = bitcoinjs.bitcoin.networks.pivx;
104249 setHdCoin(119);
104250 },
104251 },
104252 {
104253 name: "PIVX - PIVX Testnet",
104254 segwitAvailable: false,
104255 onSelect: function() {
104256 network = bitcoinjs.bitcoin.networks.pivxtestnet;
104257 setHdCoin(1);
104258 },
104259 },
104260 {
104261 name: "PPC - Peercoin",
104262 segwitAvailable: false,
104263 onSelect: function() {
104264 network = bitcoinjs.bitcoin.networks.peercoin;
104265 setHdCoin(6);
104266 },
104267 },
104268 {
104269 name: "SDC - ShadowCash",
104270 segwitAvailable: false,
104271 onSelect: function() {
104272 network = bitcoinjs.bitcoin.networks.shadow;
104273 setHdCoin(35);
104274 },
104275 },
104276 {
104277 name: "SDC - ShadowCash Testnet",
104278 segwitAvailable: false,
104279 onSelect: function() {
104280 network = bitcoinjs.bitcoin.networks.shadowtn;
104281 setHdCoin(1);
104282 },
104283 },
104284 {
104285 name: "SLM - Slimcoin",
104286 segwitAvailable: false,
104287 onSelect: function() {
104288 network = bitcoinjs.bitcoin.networks.slimcoin;
104289 setHdCoin(63);
104290 },
104291 },
104292 {
104293 name: "SLM - Slimcoin Testnet",
104294 segwitAvailable: false,
104295 onSelect: function() {
104296 network = bitcoinjs.bitcoin.networks.slimcointn;
104297 setHdCoin(111);
104298 },
104299 },
104300 {
104301 name: "USNBT - NuBits",
104302 segwitAvailable: false,
104303 onSelect: function() {
104304 network = bitcoinjs.bitcoin.networks.nubits;
104305 setHdCoin(12);
104306 },
104307 },
104308 {
104309 name: "VIA - Viacoin",
104310 segwitAvailable: false,
104311 onSelect: function() {
104312 network = bitcoinjs.bitcoin.networks.viacoin;
104313 setHdCoin(14);
104314 },
104315 },
104316 {
104317 name: "VIA - Viacoin Testnet",
104318 segwitAvailable: false,
104319 onSelect: function() {
104320 network = bitcoinjs.bitcoin.networks.viacointestnet;
104321 setHdCoin(1);
104322 },
104323 },
104324 {
104325 name: "XMY - Myriadcoin",
104326 segwitAvailable: false,
104327 onSelect: function() {
104328 network = bitcoinjs.bitcoin.networks.myriadcoin;
104329 setHdCoin(90);
104330 },
104331 },
104332 {
104333 name: "XRP - Ripple",
104334 segwitAvailable: false,
104335 onSelect: function() {
104336 network = bitcoinjs.bitcoin.networks.bitcoin;
104337 setHdCoin(144);
104338 },
104339 }
104340 ]
104341
104342 var clients = [
104343 {
104344 name: "Bitcoin Core",
104345 onSelect: function() {
104346 DOM.bip32path.val("m/0'/0'");
104347 DOM.hardenedAddresses.prop('checked', true);
104348 },
104349 },
104350 {
104351 name: "blockchain.info",
104352 onSelect: function() {
104353 DOM.bip32path.val("m/44'/0'/0'");
104354 DOM.hardenedAddresses.prop('checked', false);
104355 },
104356 },
104357 {
104358 name: "MultiBit HD",
104359 onSelect: function() {
104360 DOM.bip32path.val("m/0'/0");
104361 DOM.hardenedAddresses.prop('checked', false);
104362 },
104363 }
104364 ]
104365
104366 init();
104367
104368 })();
104369 </script>
104370 </body>
104371 </html>