]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
FIX OnixCoin Correct BIP44 Code 174
[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 </style>
6862 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
6863 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
6864 <meta content="bitcoin mnemonic converter" name="description" />
6865 <meta content="Ian Coleman" name="author" />
6866 <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
6867 </head>
6868 <body>
6869 <div class="container">
6870
6871 <h1 class="text-center">Mnemonic Code Converter</h1>
6872 <p class="version">v0.3.1</p>
6873 <hr>
6874 <div class="row">
6875 <div class="col-md-12">
6876 <h2>Mnemonic</h2>
6877 <form class="form-horizontal" role="form">
6878 <div class="form-group">
6879 <div class="col-sm-2"></div>
6880 <div class="col-sm-10">
6881 <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>
6882 <p>
6883 For more info see the
6884 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a>.
6885 </p>
6886 </div>
6887 </div>
6888 <div class="form-group generate-container">
6889 <label class="col-sm-2 control-label"></label>
6890 <div class="col-sm-10">
6891 <div class="form-inline">
6892 <div class="input-group-inline">
6893 <span>Generate a random mnemonic, or enter your own below</span>:
6894 <button class="btn generate">Generate</button>
6895 <select id="strength" class="strength form-control">
6896 <option value="3">3</option>
6897 <option value="6">6</option>
6898 <option value="9">9</option>
6899 <option value="12">12</option>
6900 <option value="15" selected>15</option>
6901 <option value="18">18</option>
6902 <option value="21">21</option>
6903 <option value="24">24</option>
6904 </select>
6905 <span>words</span>
6906 </div>
6907 </div>
6908 </div>
6909 </div>
6910 <div class="entropy-container hidden">
6911 <div class="form-group text-danger">
6912 <label class="col-sm-2 control-label">Warning</label>
6913 <div class="col-sm-10 form-control-static">
6914 <span>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
6915 <a href="#entropy-notes">Read more</a>
6916 </div>
6917 </div>
6918 <div class="form-group">
6919 <label for="entropy" class="col-sm-2 control-label">Entropy</label>
6920 <div class="col-sm-7">
6921 <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts either binary, base 6, 6-sided dice, base 10, hexadecimal or cards"></textarea>
6922 <div class="row filter-warning text-danger hidden">
6923 <p class="col-sm-12">
6924 <strong>
6925 Some characters have been discarded
6926 </strong>
6927 </p>
6928 </div>
6929 <div class="row">
6930 <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>
6931 <div class="crack-time col-sm-3 form-control-static"></div>
6932 <label class="col-sm-3 control-label">Event Count</label>
6933 <div class="event-count col-sm-3 form-control-static"></div>
6934 </div>
6935 <div class="row">
6936 <label class="col-sm-3 control-label">Entropy Type</label>
6937 <div class="type col-sm-3 form-control-static"></div>
6938 <label class="col-sm-3 control-label">Bits Per Event</label>
6939 <div class="bits-per-event col-sm-3 form-control-static"></div>
6940 </div>
6941 <div class="row">
6942 <label class="col-sm-3 control-label">Raw Entropy Words</label>
6943 <div class="word-count col-sm-3 form-control-static"></div>
6944 <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>
6945 <div class="bits col-sm-3 form-control-static"></div>
6946 </div>
6947 <label class="col-sm-3 control-label">Filtered Entropy</label>
6948 <div class="filtered col-sm-9 form-control-static"></div>
6949 <label class="col-sm-3 control-label">Raw Binary</label>
6950 <div class="binary col-sm-9 form-control-static"></div>
6951 <label class="col-sm-3 control-label">Word Indexes</label>
6952 <div class="word-indexes col-sm-9 form-control-static">&nbsp;</div>
6953 <label class="col-sm-3 control-label">Mnemonic Length</label>
6954 <div class="col-sm-9">
6955 <select class="mnemonic-length form-control">
6956 <option value="raw" selected>Use Raw Entropy (3 words per 32 bits)</option>
6957 <option value="12">12 <span>Words</span></option>
6958 <option value="15">15 <span>Words</option>
6959 <option value="18">18 <span>Words</span></option>
6960 <option value="21">21 <span>Words</span></option>
6961 <option value="24">24 <span>Words</span></option>
6962 </select>
6963 </div>
6964 </div>
6965 <div class="col-sm-3">
6966 <p>Valid entropy values include:</p>
6967 <ul>
6968 <li><strong>Binary</strong> [0-1]<br>101010011</li>
6969 <li><strong>Base 6</strong> [0-5]<br>123434014</li>
6970 <li><strong>Dice</strong> [1-6]<br>62535634</li>
6971 <li><strong>Base 10</strong> [0-9]<br>90834528</li>
6972 <li><strong>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
6973 <li><strong>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
6974 </ul>
6975 </div>
6976 </div>
6977 </div>
6978 <div class="form-group">
6979 <div class="col-sm-2"></div>
6980 <div class="col-sm-10 checkbox">
6981 <label>
6982 <input type="checkbox" class="use-entropy">
6983 <span>Show entropy details</span>
6984 </label>
6985 </div>
6986 </div>
6987 <div class="form-group">
6988 <label class="col-sm-2 control-label">Mnemonic Language</label>
6989 <div class="col-sm-10 languages">
6990 <div class="form-control no-border">
6991 <a href="#english">English</a>
6992 <a href="#japanese" title="Japanese">日本語</a>
6993 <a href="#spanish" title="Spanish">Español</a>
6994 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
6995 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
6996 <a href="#french" title="French">Français</a>
6997 <a href="#italian" title="Italian">Italiano</a>
6998 </div>
6999 </div>
7000 </div>
7001 <div class="form-group">
7002 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
7003 <div class="col-sm-10">
7004 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
7005 </div>
7006 </div>
7007 <div class="form-group">
7008 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
7009 <div class="col-sm-10">
7010 <textarea id="passphrase" class="passphrase form-control"></textarea>
7011 </div>
7012 </div>
7013 <div class="form-group">
7014 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
7015 <div class="col-sm-10">
7016 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
7017 </div>
7018 </div>
7019 <div class="form-group">
7020 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
7021 <div class="col-sm-10">
7022 <select id="network-phrase" class="network form-control">
7023 <!-- populated by javascript -->
7024 </select>
7025 </div>
7026 </div>
7027 <div class="form-group">
7028 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
7029 <div class="col-sm-10">
7030 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
7031 </div>
7032 </div>
7033 <div class="form-group litecoin-ltub-container hidden">
7034 <label for="litecoin-use-ltub" class="col-sm-2 control-label">Prefixes</label>
7035 <div class="col-sm-10 checkbox">
7036 <label>
7037 <input type="checkbox" id="litecoin-use-ltub" class="litecoin-use-ltub" checked="checked">
7038 Use <code>Ltpv / Ltub</code> instead of <code>xprv / xpub</code>
7039 </label>
7040 </div>
7041 </div>
7042 </form>
7043 </div>
7044 </div>
7045
7046 <hr>
7047
7048 <div class="row">
7049 <div class="col-md-12">
7050 <h2>Derivation Path</h2>
7051 <ul class="derivation-type nav nav-tabs" role="tablist">
7052 <li id="bip32-tab">
7053 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
7054 </li>
7055 <li id="bip44-tab" class="active">
7056 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
7057 </li>
7058 <li id="bip49-tab">
7059 <a href="#bip49" role="tab" data-toggle="tab">BIP49</a>
7060 </li>
7061 <li id="bip141-tab">
7062 <a href="#bip141" role="tab" data-toggle="tab">BIP141</a>
7063 </li>
7064 </ul>
7065 <div class="derivation-type tab-content">
7066 <div id="bip44" class="tab-pane active">
7067 <form class="form-horizontal" role="form">
7068 <br>
7069 <div class="col-sm-2"></div>
7070 <div class="col-sm-10">
7071 <p>
7072 For more info see the
7073 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
7074 </p>
7075 </div>
7076 <div class="form-group">
7077 <label for="purpose" class="col-sm-2 control-label">
7078 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
7079 </label>
7080 <div class="col-sm-10">
7081 <input id="purpose" type="text" class="purpose form-control" value="44" readonly>
7082 </div>
7083 </div>
7084 <div class="form-group">
7085 <label for="coin" class="col-sm-2 control-label">
7086 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
7087 </label>
7088 <div class="col-sm-10">
7089 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7090 </div>
7091 </div>
7092 <div class="form-group">
7093 <label for="account" class="col-sm-2 control-label">
7094 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
7095 </label>
7096 <div class="col-sm-10">
7097 <input id="account" type="text" class="account form-control" value="0">
7098 </div>
7099 </div>
7100 <div class="form-group">
7101 <label for="change" class="col-sm-2 control-label">
7102 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
7103 </label>
7104 <div class="col-sm-10">
7105 <input id="change" type="text" class="change form-control" value="0">
7106 </div>
7107 </div>
7108 <div class="form-group">
7109 <label class="col-sm-2 control-label">
7110 </label>
7111 <div class="col-sm-10">
7112 <p>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
7113 </div>
7114 </div>
7115 <div class="form-group">
7116 <label for="account-xprv" class="col-sm-2 control-label">
7117 <span>Account Extended Private Key</span>
7118 </label>
7119 <div class="col-sm-10">
7120 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7121 </div>
7122 </div>
7123 <div class="form-group">
7124 <label for="account-xpub" class="col-sm-2 control-label">
7125 <span>Account Extended Public Key</span>
7126 </label>
7127 <div class="col-sm-10">
7128 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7129 </div>
7130 </div>
7131 <div class="form-group">
7132 <label class="col-sm-2 control-label">
7133 </label>
7134 <div class="col-sm-10">
7135 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7136 </div>
7137 </div>
7138 <div class="form-group">
7139 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7140 <div class="col-sm-10">
7141 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
7142 </div>
7143 </div>
7144 </form>
7145 </div>
7146 <div id="bip32" class="tab-pane">
7147 <form class="form-horizontal" role="form">
7148 <br>
7149 <div class="col-sm-2"></div>
7150 <div class="col-sm-10">
7151 <p>
7152 For more info see the
7153 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
7154 </p>
7155 </div>
7156 <div class="form-group">
7157 <label for="bip32-client" class="col-sm-2 control-label">Client</label>
7158 <div class="col-sm-10">
7159 <select id="bip32-client" class="client form-control">
7160 <option value="custom">Custom derivation path</option>
7161 <!-- populated by javascript -->
7162 </select>
7163 </div>
7164 </div>
7165 <div class="form-group">
7166 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7167 <div class="col-sm-10">
7168 <input id="bip32-path" type="text" class="path form-control" value="m/0">
7169 </div>
7170 </div>
7171 <div class="form-group">
7172 <div class="col-sm-2"></div>
7173 <label class="col-sm-10">
7174 <input class="hardened-addresses" type="checkbox">
7175 <span>Use hardened addresses</span>
7176 </label>
7177 </div>
7178 <div class="form-group">
7179 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
7180 <div class="col-sm-10">
7181 <p class="form-control no-border">
7182 Use path <code>m/0'/0'</code> with hardened addresses.
7183 </p>
7184 <p class="form-control no-border">
7185 For more info see the
7186 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
7187 </p>
7188 </div>
7189 </div>
7190 <div class="form-group">
7191 <label for="core-path" class="col-sm-2 control-label">Multibit</label>
7192 <div class="col-sm-10">
7193 <p class="form-control no-border">
7194 <span>Use path <code>m/0'/0</code>.</span>
7195 </p>
7196 <p class="form-control no-border">
7197 <span>For more info see</span>
7198 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
7199 </p>
7200 </div>
7201 </div>
7202 <div class="form-group">
7203 <label class="col-sm-2 control-label">Block Explorers</label>
7204 <div class="col-sm-10">
7205 <p class="form-control no-border">
7206 <span>Use path <code>m/44'/0'/0'</code>.</span>
7207 <span>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
7208 </p>
7209 <p class="form-control no-border">
7210 <span>Can be used with</span>:
7211 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
7212 </p>
7213 </div>
7214 </div>
7215 </form>
7216 </div>
7217 <div id="bip49" class="tab-pane">
7218 <form class="form-horizontal" role="form">
7219 <br>
7220 <div class="unavailable hidden">
7221 <div class="form-group">
7222 <div class="col-sm-2"></div>
7223 <div class="col-sm-10">
7224 <p>BIP49 is unavailable for this coin.</p>
7225 </div>
7226 </div>
7227 </div>
7228 <div class="available">
7229 <div class="col-sm-2"></div>
7230 <div class="col-sm-10">
7231 <p>
7232 For more info see the
7233 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">BIP49 spec</a>.
7234 </p>
7235 </div>
7236 <div class="form-group">
7237 <label for="purpose" class="col-sm-2 control-label">
7238 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
7239 </label>
7240 <div class="col-sm-10">
7241 <input id="purpose" type="text" class="purpose form-control" value="49" readonly>
7242 </div>
7243 </div>
7244 <div class="form-group">
7245 <label for="coin" class="col-sm-2 control-label">
7246 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
7247 </label>
7248 <div class="col-sm-10">
7249 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7250 </div>
7251 </div>
7252 <div class="form-group">
7253 <label for="account" class="col-sm-2 control-label">
7254 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
7255 </label>
7256 <div class="col-sm-10">
7257 <input id="account" type="text" class="account form-control" value="0">
7258 </div>
7259 </div>
7260 <div class="form-group">
7261 <label for="change" class="col-sm-2 control-label">
7262 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
7263 </label>
7264 <div class="col-sm-10">
7265 <input id="change" type="text" class="change form-control" value="0">
7266 </div>
7267 </div>
7268 <div class="form-group">
7269 <label class="col-sm-2 control-label">
7270 </label>
7271 <div class="col-sm-10">
7272 <p>The account extended keys can be used for importing to most BIP49 compatible wallets.</p>
7273 </div>
7274 </div>
7275 <div class="form-group">
7276 <label for="account-xprv" class="col-sm-2 control-label">
7277 <span>Account Extended Private Key</span>
7278 </label>
7279 <div class="col-sm-10">
7280 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
7281 </div>
7282 </div>
7283 <div class="form-group">
7284 <label for="account-xpub" class="col-sm-2 control-label">
7285 <span>Account Extended Public Key</span>
7286 </label>
7287 <div class="col-sm-10">
7288 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7289 </div>
7290 </div>
7291 <div class="form-group">
7292 <label class="col-sm-2 control-label">
7293 </label>
7294 <div class="col-sm-10">
7295 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7296 </div>
7297 </div>
7298 <div class="form-group">
7299 <label for="bip49-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7300 <div class="col-sm-10">
7301 <input id="bip49-path" type="text" class="path form-control" value="m/49'/0'/0'/0" readonly="readonly">
7302 </div>
7303 </div>
7304 </div>
7305 </form>
7306 </div>
7307 <div id="bip141" class="tab-pane">
7308 <form class="form-horizontal" role="form">
7309 <br>
7310 <div class="unavailable hidden">
7311 <div class="form-group">
7312 <div class="col-sm-2"></div>
7313 <div class="col-sm-10">
7314 <p>BIP141 is unavailable for this coin.</p>
7315 </div>
7316 </div>
7317 </div>
7318 <div class="available">
7319 <div class="col-sm-2"></div>
7320 <div class="col-sm-10">
7321 <p>
7322 For more info see the
7323 <a href="https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki" target="_blank">BIP141 spec</a>
7324 </p>
7325 </div>
7326 <div class="form-group">
7327 <label for="bip141-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7328 <div class="col-sm-10">
7329 <input id="bip141-path" type="text" class="bip141-path form-control" value="m/0">
7330 </div>
7331 </div>
7332 <div class="form-group">
7333 <label class="col-sm-2 control-label">Script Semantics</label>
7334 <div class="col-sm-10">
7335 <select class="form-control bip141-semantics">
7336 <option value="p2wpkh">P2WPKH</option>
7337 <option value="p2wpkh-p2sh" selected>P2WPKH nested in P2SH</option>
7338 </select>
7339 </div>
7340 </div>
7341 </div>
7342 </form>
7343 </div>
7344 </div>
7345 <form class="form-horizontal" role="form">
7346 <div class="form-group">
7347 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Private Key</label>
7348 <div class="col-sm-10">
7349 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
7350 </div>
7351 </div>
7352 <div class="form-group">
7353 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Public Key</label>
7354 <div class="col-sm-10">
7355 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
7356 </div>
7357 </div>
7358 </form>
7359 </div>
7360 </div>
7361
7362 <hr>
7363
7364 <div class="row">
7365 <div class="col-md-12">
7366 <h2>Derived Addresses</h2>
7367 <p>Note these addresses are derived from the BIP32 Extended Key</p>
7368 </div>
7369 <div class="col-md-12 use-bitpay-addresses-container hidden">
7370 <div class="checkbox">
7371 <label>
7372 <input type="checkbox" class="use-bitpay-addresses">
7373 <span>Use BitPay-style addresses for Bitcoin Cash (ie starting with 'C' instead of '1')</span>
7374 </label>
7375 </div>
7376 </div>
7377 <div class="col-md-12">
7378 <table class="table table-striped">
7379 <thead>
7380 <th>
7381 <div class="input-group">
7382 <span>Path</span>&nbsp;&nbsp;
7383 <button class="index-toggle">Toggle</button>
7384 </div>
7385 </th>
7386 <th>
7387 <div class="input-group">
7388 <span>Address</span>&nbsp;&nbsp;
7389 <button class="address-toggle">Toggle</button>
7390 </div>
7391 </th>
7392 <th>
7393 <div class="input-group">
7394 <span>Public Key</span>&nbsp;&nbsp;
7395 <button class="public-key-toggle">Toggle</button>
7396 </div>
7397 </th>
7398 <th>
7399 <div class="input-group">
7400 <span>Private Key</span>&nbsp;&nbsp;
7401 <button class="private-key-toggle">Toggle</button>
7402 </div>
7403 </th>
7404 </thead>
7405 <tbody class="addresses monospace">
7406 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7407 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7408 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7409 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7410 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7411 </tbody>
7412 </table>
7413 </div>
7414 </div>
7415 <span>Show</span>
7416 <input type="number" class="rows-to-add" value="20">
7417 <button class="more">more rows</button>
7418 <span>starting from index</span>
7419 <input type="number" class="more-rows-start-index">
7420 <span>(leave blank to generate from next index)</span>
7421
7422 <hr>
7423
7424 <div class="row">
7425 <div class="col-md-12">
7426 <h2>More info</h2>
7427 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
7428 <p>
7429 Read more at the
7430 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
7431 </p>
7432 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
7433 <p>
7434 Read more at the
7435 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
7436 </p>
7437 <p>
7438 See the demo at
7439 <a href="http://bip32.org/" target="_blank">bip32.org</a>
7440 </p>
7441 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
7442 <p>
7443 Read more at the
7444 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
7445 </p>
7446 <h3>BIP49 <span class="small">Derivation scheme for P2WPKH-nested-in-P2SH based accounts</span></h3>
7447 <p>
7448 Read more at the
7449 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">official BIP49 spec</a>
7450 </p>
7451 <h3>Private Keys</h3>
7452 <p>
7453 <span>
7454 Use private keys at
7455 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
7456 </span>
7457 <span>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
7458 </p>
7459 <h3 id="entropy-notes">Entropy</h3>
7460 <p>
7461 <span>
7462 Entropy values must be sourced from a
7463 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
7464 </span>
7465 <span>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
7466 <span>
7467 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or street address,
7468 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
7469 random enough for the needs of this tool.
7470 </span>
7471 </p>
7472 <p>
7473 <strong><span>Do not store entropy.</span></strong>
7474 </p>
7475 <p>
7476 <span>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
7477 <span>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
7478 <span><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
7479 </p>
7480 <p>
7481 <span>
7482 The random mnemonic generator on this page uses a
7483 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
7484 </span>
7485 <span>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
7486 <span>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
7487 <span>In that case you might choose to use your own source of entropy.</span>
7488 </p>
7489 <p>
7490 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank">You are not a good source of entropy.</a>
7491 </p>
7492 <h3>License</h3>
7493 <p>
7494 <span>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
7495 </span>
7496 </p>
7497 <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>
7498 </div>
7499 </div>
7500
7501 <hr>
7502
7503 <div class="row">
7504 <div class="col-md-12">
7505 <h2>Alternative Tools</h2>
7506 <p>This tool is interoperable with any BIP39 wallet.</p>
7507 <p>Some similar tools to this one (ie not consumer wallets) are</p>
7508 <p>
7509 <a href="https://bip32jp.github.io/english/">
7510 https://bip32jp.github.io/english/
7511 </a>
7512 </p>
7513 </div>
7514 </div>
7515
7516 <hr>
7517
7518 <div class="row">
7519 <div class="col-md-12">
7520
7521 <h2>Offline Usage</h2>
7522
7523 <p>
7524 You can use this tool without having to be online.
7525 </p>
7526 <p>
7527 In your browser, select file save-as, and save this page
7528 as a file.
7529 </p>
7530 <p>
7531 Double-click that file to open it in a browser
7532 on any offline computer.
7533 </p>
7534 <p>
7535 <span>Alternatively, download the file from the repository</span>
7536 -
7537 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
7538 </p>
7539
7540 </div>
7541 </div>
7542
7543 <hr>
7544
7545 <div class="row">
7546 <div class="col-md-12">
7547
7548 <h2>This project is 100% open-source code</h2>
7549
7550 <p>
7551 <span>Get the source code from the repository</span>
7552 -
7553 <a href="https://github.com/iancoleman/bip39" target="_blank">
7554 https://github.com/iancoleman/bip39
7555 </a>
7556 </p>
7557
7558 <h3>Libraries</h3>
7559
7560 <p>
7561 <span>BitcoinJS - </span>
7562 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
7563 https://github.com/bitcoinjs/bitcoinjs-lib
7564 </a>
7565 </p>
7566
7567 <p>
7568 <span>jsBIP39 - </span>
7569 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
7570 https://github.com/iancoleman/jsbip39
7571 </a>
7572 </p>
7573
7574 <p>
7575 <span>sjcl - </span>
7576 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
7577 https://github.com/bitwiseshiftleft/sjcl
7578 </a>
7579 </p>
7580
7581 <p>
7582 <span>jQuery - </span>
7583 <a href="https://jquery.com/" target="_blank">
7584 https://jquery.com/
7585 </a>
7586 </p>
7587
7588 <p>
7589 <span>Twitter Bootstrap - </span>
7590 <a href="http://getbootstrap.com/" target="_blank">
7591 http://getbootstrap.com/
7592 </a>
7593 </p>
7594
7595 </div>
7596 </div>
7597
7598 </div>
7599
7600 <div class="qr-container hidden">
7601 <div class="qr-hint bg-primary hidden">Click field to hide QR</div>
7602 <div class="qr-hint bg-primary">Click field to show QR</div>
7603 <div class="qr-hider hidden">
7604 <div class="qr-image"></div>
7605 <div class="qr-warning bg-primary">Caution: Scanner may keep history</div>
7606 </div>
7607 </div>
7608
7609 <div class="feedback-container">
7610 <div class="feedback">Loading...</div>
7611 </div>
7612
7613 <script type="text/template" id="address-row-template">
7614 <tr>
7615 <td class="index"><span></span></td>
7616 <td class="address"><span data-show-qr></span></td>
7617 <td class="pubkey"><span data-show-qr></span></td>
7618 <td class="privkey"><span data-show-qr></span></td>
7619 </tr>
7620 </script>
7621 <script>// From
7622 // https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
7623 // Required for ethereumjs-utils.js when run in phantomjs-2.1.1
7624 // but is not required in any modern browsers.
7625 // For more information, see
7626 // https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
7627
7628 //----------------------------------------------------------------------
7629 //
7630 // ECMAScript 2015 Polyfills
7631 //
7632 //----------------------------------------------------------------------
7633
7634 (function (global) {
7635 "use strict";
7636
7637 // Set this to always override native implementations, for testing
7638 // the polyfill in browsers with partial/full ES2015 support.
7639 var OVERRIDE_NATIVE_FOR_TESTING = false;
7640
7641 var undefined = (void 0); // Paranoia
7642
7643 // Helpers
7644
7645 function strict(o) {
7646 return o === global ? undefined : o;
7647 }
7648
7649 function hook(o, p, f) {
7650 var op = o[p];
7651 console.assert(typeof op === 'function', 'Hooking a non-function');
7652 o[p] = function() {
7653 var o = strict(this);
7654 var r = f.apply(o, arguments);
7655 return r !== undefined ? r : op.apply(o, arguments);
7656 };
7657 }
7658
7659 function isSymbol(s) {
7660 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
7661 }
7662
7663 function getPropertyDescriptor(target, name) {
7664 var desc = Object.getOwnPropertyDescriptor(target, name);
7665 var proto = Object.getPrototypeOf(target);
7666 while (!desc && proto) {
7667 desc = Object.getOwnPropertyDescriptor(proto, name);
7668 proto = Object.getPrototypeOf(proto);
7669 }
7670 return desc;
7671 }
7672
7673 var enqueue = (function(nativePromise, nativeSetImmediate) {
7674 if (nativePromise)
7675 return function(job) { nativePromise.resolve().then(function() { job(); }); };
7676 if (nativeSetImmediate)
7677 return function(job) { nativeSetImmediate(job); };
7678 return function(job) { setTimeout(job, 0); };
7679 }(global['Promise'], global['setImmediate']));
7680
7681 function define(o, p, v, override) {
7682 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
7683 return;
7684
7685 if (typeof v === 'function') {
7686 // Sanity check that functions are appropriately named (where possible)
7687 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
7688 Object.defineProperty(o, p, {
7689 value: v,
7690 configurable: true,
7691 enumerable: false,
7692 writable: true
7693 });
7694 } else {
7695 Object.defineProperty(o, p, {
7696 value: v,
7697 configurable: false,
7698 enumerable: false,
7699 writable: false
7700 });
7701 }
7702 }
7703
7704 function set_internal(o, p, v) {
7705 Object.defineProperty(o, p, {
7706 value: v,
7707 configurable: false,
7708 enumerable: false,
7709 writable: true
7710 });
7711 }
7712
7713 // Snapshot intrinsic functions
7714 var $isNaN = global.isNaN,
7715 $parseInt = global.parseInt,
7716 $parseFloat = global.parseFloat;
7717
7718 var E = Math.E,
7719 LOG10E = Math.LOG10E,
7720 LOG2E = Math.LOG2E,
7721 abs = Math.abs,
7722 ceil = Math.ceil,
7723 exp = Math.exp,
7724 floor = Math.floor,
7725 log = Math.log,
7726 max = Math.max,
7727 min = Math.min,
7728 pow = Math.pow,
7729 random = Math.random,
7730 sqrt = Math.sqrt;
7731
7732 var orig_match = String.prototype.match,
7733 orig_replace = String.prototype.replace,
7734 orig_search = String.prototype.search,
7735 orig_split = String.prototype.split;
7736
7737 // These are used for implementing the polyfills, but not exported.
7738
7739 // Inspired by https://gist.github.com/1638059
7740 /** @constructor */
7741 function EphemeronTable() {
7742 var secretKey = ObjectCreate(null);
7743
7744 function conceal(o) {
7745 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
7746 Object.defineProperty(o, 'valueOf', {
7747 value: (function(secretKey) {
7748 return function (k) {
7749 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
7750 };
7751 }(secretKey)),
7752 configurable: true,
7753 writeable: true,
7754 enumerable: false
7755 });
7756 return secrets;
7757 }
7758
7759 function reveal(o) {
7760 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
7761 return v === o ? null : v;
7762 }
7763
7764 return {
7765 clear: function() {
7766 secretKey = ObjectCreate(null);
7767 },
7768 remove: function(key) {
7769 var secrets = reveal(key);
7770 if (secrets && HasOwnProperty(secrets, 'value')) {
7771 delete secrets.value;
7772 return true;
7773 }
7774 return false;
7775 },
7776 get: function(key, defaultValue) {
7777 var secrets = reveal(key);
7778 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
7779 },
7780 has: function(key) {
7781 var secrets = reveal(key);
7782 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
7783 },
7784 set: function(key, value) {
7785 var secrets = reveal(key) || conceal(key);
7786 secrets.value = value;
7787 }
7788 };
7789 }
7790
7791 var empty = Object.create(null);
7792
7793 //----------------------------------------------------------------------
7794 //
7795 // ECMAScript 2015
7796 // http://www.ecma-international.org/ecma-262/6.0/
7797 //
7798 //----------------------------------------------------------------------
7799
7800 // ---------------------------------------
7801 // 19.4 Symbol Objects
7802 // ---------------------------------------
7803
7804 // NOTE: Symbols are defined here - out of spec order - since we need the
7805 // properties and prototype to be populated for other polyfills.
7806
7807 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
7808
7809 var symbolForKey;
7810 (function() {
7811 var secret = Object.create(null);
7812 var symbolMap = {};
7813 symbolForKey = function(k) {
7814 return symbolMap[k];
7815 };
7816
7817 var GlobalSymbolRegistry = [];
7818
7819 function unique(bits) {
7820 return Array(bits + 1).join('x').replace(/x/g, function() {
7821 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
7822 });
7823 }
7824
7825 // 19.4.1 The Symbol Constructor
7826 // 19.4.1.1 Symbol ( description=undefined )
7827 function Symbol(description) {
7828 if (!(this instanceof Symbol)) return new Symbol(description, secret);
7829 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
7830
7831 var descString = description === undefined ? undefined : String(description);
7832
7833 set_internal(this, '[[SymbolData]]', unique(128));
7834 set_internal(this, '[[Description]]', descString);
7835
7836 symbolMap[this] = this;
7837 return this;
7838 }
7839
7840 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
7841 global.Symbol = Symbol;
7842
7843 // 19.4.2 Properties of the Symbol Constructor
7844
7845 // 19.4.2.1 Symbol.for (key)
7846 define(Symbol, 'for', function for_(key) {
7847 var stringKey = String(key);
7848 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
7849 var e = GlobalSymbolRegistry[i];
7850 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
7851 }
7852 var newSymbol = Symbol(key);
7853 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
7854 return newSymbol;
7855 });
7856
7857 // 19.4.2.2 Symbol.hasInstance
7858 // 19.4.2.3 Symbol.isConcatSpreadable
7859
7860 // 19.4.2.4 Symbol.iterator
7861 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
7862
7863 // 19.4.2.5 Symbol.keyFor (sym)
7864 define(Symbol, 'keyFor', function keyFor(sym) {
7865 if (!(sym instanceof Symbol)) throw TypeError();
7866 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
7867 var e = GlobalSymbolRegistry[i];
7868 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
7869 }
7870 return undefined;
7871 });
7872
7873 // 19.4.2.6 Symbol.match
7874 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
7875
7876 // 19.4.2.7 Symbol.prototype
7877
7878 // 19.4.2.8 Symbol.replace
7879 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
7880
7881 // 19.4.2.9 Symbol.search
7882 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
7883
7884 // 19.4.2.10 Symbol.species
7885
7886 // 19.4.2.11 Symbol.search
7887 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
7888
7889 // 19.4.2.12 Symbol.toPrimitive
7890
7891 // 19.4.2.13 Symbol.toStringTag
7892 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
7893
7894 // 19.4.2.14 Symbol.unscopables
7895
7896 // 19.4.3 Properties of the Symbol Prototype Object
7897 // 19.4.3.1 Symbol.prototype.constructor
7898
7899 // 19.4.3.2 Symbol.prototype.toString ( )
7900 Object.defineProperty(Symbol.prototype, 'toString', {
7901 value: function toString() {
7902 var s = strict(this);
7903 var desc = s['[[Description]]'];
7904 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
7905 },
7906 configurable: true, writeable: true, enumerable: false });
7907
7908 // 19.4.3.3 Symbol.prototype.valueOf ( )
7909 Object.defineProperty(Symbol.prototype, 'valueOf', {
7910 value: function valueOf() {
7911 // To prevent automatic string conversion:
7912 throw TypeError();
7913
7914 // Spec has approximately the following:
7915 //var s = strict(this);
7916 //if (Type(s) === 'symbol') return s;
7917 //if (Type(s) !== 'object') throw TypeError();
7918 //if (!('[[SymbolData]]' in s)) throw TypeError();
7919 //return s['[[SymbolData]]'];
7920 },
7921 configurable: true, writeable: true, enumerable: false });
7922
7923 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
7924 // (Done later to polyfill partial implementations)
7925
7926 // 19.4.4 Properties of Symbol Instances
7927 }());
7928
7929 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
7930
7931 // Defined here so that other prototypes can reference it
7932 // 25.1.2 The %IteratorPrototype% Object
7933 var $IteratorPrototype$ = {};
7934
7935 //----------------------------------------
7936 // 6 ECMAScript Data Types and Values
7937 //----------------------------------------
7938
7939 // 6.1 ECMAScript Language Types
7940
7941 // "Type(x)" is used as shorthand for "the type of x"...
7942 function Type(v) {
7943 switch (typeof v) {
7944 case 'undefined': return 'undefined';
7945 case 'boolean': return 'boolean';
7946 case 'number': return 'number';
7947 case 'string': return 'string';
7948 case 'symbol': return 'symbol';
7949 default:
7950 if (v === null) return 'null';
7951 if (v instanceof global.Symbol) return 'symbol';
7952 return 'object';
7953 }
7954 }
7955
7956 // 6.1.5.1 Well-Known Symbols
7957 var $$iterator = global.Symbol.iterator,
7958 $$match = global.Symbol.match,
7959 $$replace = global.Symbol.replace,
7960 $$search = global.Symbol.search,
7961 $$split = global.Symbol.split,
7962 $$toStringTag = global.Symbol.toStringTag;
7963
7964 //----------------------------------------
7965 // 7 Abstract Operations
7966 //----------------------------------------
7967
7968 //----------------------------------------
7969 // 7.1 Type Conversion
7970 //----------------------------------------
7971
7972 // 7.1.1 ToPrimitive ( input [, PreferredType] )
7973 // just use valueOf()
7974
7975 // 7.1.2 ToBoolean ( argument )
7976 // just use Boolean()
7977
7978 // 7.1.3 ToNumber ( argument )
7979 // just use Number()
7980
7981 // 7.1.4 ToInteger ( argument )
7982 function ToInteger(n) {
7983 n = Number(n);
7984 if ($isNaN(n)) return 0;
7985 if (n === 0 || n === Infinity || n === -Infinity) return n;
7986 return ((n < 0) ? -1 : 1) * floor(abs(n));
7987 }
7988
7989 // 7.1.5 ToInt32 ( argument )
7990 function ToInt32(v) { return v >> 0; }
7991
7992 // 7.1.6 ToUint32 ( argument )
7993 function ToUint32(v) { return v >>> 0; }
7994
7995 // 7.1.7 ToInt16 ( argument )
7996 function ToInt16(v) { return (v << 16) >> 16; }
7997
7998 // 7.1.8 ToUint16 ( argument )
7999 function ToUint16(v) { return v & 0xFFFF; }
8000
8001 // 7.1.9 ToInt8 ( argument )
8002 function ToInt8(v) { return (v << 24) >> 24; }
8003
8004 // 7.1.10 ToUint8 ( argument )
8005 function ToUint8(v) { return v & 0xFF; }
8006
8007 // 7.1.11 ToUint8Clamp ( argument )
8008 function ToUint8Clamp(argument) {
8009 var number = Number(argument);
8010 if ($isNaN(number)) return 0;
8011 if (number <= 0) return 0;
8012 if (number >= 255) return 255;
8013 var f = floor(number);
8014 if ((f + 0.5) < number) return f + 1;
8015 if (number < (f + 0.5)) return f;
8016 if (f % 2) return f + 1;
8017 return f;
8018 }
8019
8020 // 7.1.12 ToString ( argument )
8021 // just use String()
8022
8023 // 7.1.13 ToObject ( argument )
8024 function ToObject(v) {
8025 if (v === null || v === undefined) throw TypeError();
8026 return Object(v);
8027 }
8028
8029 // 7.1.14 ToPropertyKey ( argument )
8030 function ToPropertyKey(v) {
8031 return String(v);
8032 }
8033
8034 // 7.1.15 ToLength ( argument )
8035 function ToLength(v) {
8036 var len = ToInteger(v);
8037 if (len <= 0) return 0;
8038 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
8039 return min(len, 0x20000000000000 - 1); // 2^53-1
8040 }
8041
8042 // 7.1.16 CanonicalNumericIndexString ( argument )
8043
8044 //----------------------------------------
8045 // 7.2 Testing and Comparison Operations
8046 //----------------------------------------
8047
8048 // 7.2.1 RequireObjectCoercible ( argument )
8049 // 7.2.2 IsArray ( argument )
8050
8051 // 7.2.3 IsCallable ( argument )
8052 function IsCallable(o) { return typeof o === 'function'; }
8053
8054 // 7.2.4 IsConstructor ( argument )
8055 function IsConstructor(o) {
8056 // Hacks for Safari 7 TypedArray XXXConstructor objects
8057 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
8058 if (/Function/.test(Object.prototype.toString.call(o))) return true;
8059 // TODO: Can this be improved on?
8060 return typeof o === 'function';
8061 }
8062
8063 // 7.2.5 IsExtensible (O)
8064 // 7.2.6 IsInteger ( argument )
8065
8066 // 7.2.7 IsPropertyKey ( argument )
8067 function IsPropertyKey(argument) {
8068 if (Type(argument) === 'string') return true;
8069 if (Type(argument) === 'symbol') return true;
8070 return false;
8071 }
8072
8073 // 7.2.8 IsRegExp ( argument )
8074 // 7.2.5 IsConstructor ( argument )
8075
8076 // 7.2.9 SameValue(x, y)
8077 function SameValue(x, y) {
8078 if (typeof x !== typeof y) return false;
8079 switch (typeof x) {
8080 case 'undefined':
8081 return true;
8082 case 'number':
8083 if (x !== x && y !== y) return true;
8084 if (x === 0 && y === 0) return 1/x === 1/y;
8085 return x === y;
8086 case 'boolean':
8087 case 'string':
8088 case 'object':
8089 default:
8090 return x === y;
8091 }
8092 }
8093
8094 // 7.2.10 SameValueZero(x, y)
8095 function SameValueZero(x, y) {
8096 if (typeof x !== typeof y) return false;
8097 switch (typeof x) {
8098 case 'undefined':
8099 return true;
8100 case 'number':
8101 if (x !== x && y !== y) return true;
8102 return x === y;
8103 case 'boolean':
8104 case 'string':
8105 case 'object':
8106 default:
8107 return x === y;
8108 }
8109 }
8110
8111 //----------------------------------------
8112 // 7.3 Operations on Objects
8113 //----------------------------------------
8114
8115 // 7.3.1 Get (O, P)
8116 // - just use o.p or o[p]
8117
8118 // 7.3.2 GetV (V, P)
8119 function GetV(v, p) {
8120 var o = ToObject(v);
8121 return o[p];
8122 }
8123
8124 // 7.3.3 Set (O, P, V, Throw)
8125 // - just use o.p = v or o[p] = v
8126
8127
8128
8129
8130 // 7.3.9 GetMethod (O, P)
8131 function GetMethod(o, p) {
8132 var func = GetV(o, p);
8133 if (func === undefined || func === null) return undefined;
8134 if (!IsCallable(func)) throw TypeError();
8135 return func;
8136 }
8137
8138 // 7.3.10 HasProperty (O, P)
8139 function HasProperty(o, p) {
8140 while (o) {
8141 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
8142 if (Type(o) !== 'object') return false;
8143 o = Object.getPrototypeOf(o);
8144 }
8145 return false;
8146 }
8147
8148 // 7.3.11 HasOwnProperty (O, P)
8149 function HasOwnProperty(o, p) {
8150 return Object.prototype.hasOwnProperty.call(o, p);
8151 }
8152
8153 //----------------------------------------
8154 // 7.4 Operations on Iterator Objects
8155 //----------------------------------------
8156
8157 // 7.4.1 GetIterator ( obj, method )
8158 function GetIterator(obj, method) {
8159 if (arguments.length < 2)
8160 method = GetMethod(obj, $$iterator);
8161 var iterator = method.call(obj);
8162 if (Type(iterator) !== 'object') throw TypeError();
8163 return iterator;
8164 }
8165
8166 // 7.4.2 IteratorNext ( iterator, value )
8167 function IteratorNext(iterator, value) {
8168 if (arguments.length < 2)
8169 var result = iterator.next();
8170 else
8171 result = iterator.next(value);
8172 if (Type(result) !== 'object') throw TypeError();
8173 return result;
8174 }
8175
8176 // 7.4.3 IteratorComplete ( iterResult )
8177 function IteratorComplete(iterResult) {
8178 console.assert(Type(iterResult) === 'object');
8179 return Boolean(iterResult.done);
8180 }
8181
8182 // 7.4.4 IteratorValue ( iterResult )
8183 function IteratorValue(iterResult) {
8184 console.assert(Type(iterResult) === 'object');
8185 return iterResult.value;
8186 }
8187
8188 // 7.4.5 IteratorStep ( iterator )
8189 function IteratorStep( iterator, value ) {
8190 var result = IteratorNext(iterator, value);
8191 var done = result['done'];
8192 if (Boolean(done) === true) return false;
8193 return result;
8194 }
8195
8196 // 7.4.6 IteratorClose( iterator, completion )
8197 function IteratorClose( iterator, completion ) {
8198 console.assert(Type(iterator) === 'object');
8199 var _return = GetMethod(iterator, 'return');
8200 if (_return === undefined) return completion;
8201 try {
8202 var innerResult = _return[iterator]();
8203 } catch (result) {
8204 // TODO: If completion.[[type]] is throw, return completion
8205 return result;
8206 }
8207 if (Type(innerResult) !== 'object') throw TypeError();
8208 return completion;
8209 }
8210
8211 // 7.4.7 CreateIterResultObject (value, done)
8212 function CreateIterResultObject(value, done) {
8213 console.assert(Type(done) === 'boolean');
8214 var obj = {};
8215 obj["value"] = value;
8216 obj["done"] = done;
8217 return obj;
8218 }
8219
8220 // 7.4.8 CreateListIterator (list)
8221 // 7.4.8.1 ListIterator next( )
8222 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
8223 // 7.4.9.1 CompoundIterator next( )
8224
8225 //----------------------------------------
8226 // 8 Executable Code and Execution Contexts
8227 //----------------------------------------
8228
8229 //----------------------------------------
8230 // 8.4 Jobs and Job Queues
8231 //----------------------------------------
8232
8233 // 8.4.1 EnqueueJob ( queueName, job, arguments)
8234 function EnqueueJob(queueName, job, args) {
8235 var fn = function() { job.apply(undefined, args); };
8236 enqueue(fn);
8237 }
8238
8239 // 8.4.2 NextJob result
8240 function NextJob(result) {
8241 // no-op
8242 }
8243
8244 //----------------------------------------
8245 // 9 Ordinary and Exotic Objects Behaviors
8246 //----------------------------------------
8247
8248 // 9.1.11 [[Enumerate]] ()
8249 function Enumerate(obj) {
8250 var e = [];
8251 if (Object(obj) !== obj) return e;
8252 var visited = new Set;
8253 while (obj !== null) {
8254 Object.getOwnPropertyNames(obj).forEach(function(name) {
8255 if (!visited.has(name)) {
8256 var desc = Object.getOwnPropertyDescriptor(obj, name);
8257 if (desc) {
8258 visited.add(name);
8259 if (desc.enumerable) e.push(name);
8260 }
8261 }
8262 });
8263 obj = Object.getPrototypeOf(obj);
8264 }
8265 return e[$$iterator]();
8266 }
8267
8268 // 9.1.12 [[OwnPropertyKeys]] ( )
8269 function OwnPropertyKeys(o) {
8270 return Object.getOwnPropertyNames(o);
8271 }
8272
8273 // 9.1.13 ObjectCreate(proto, internalSlotsList)
8274 function ObjectCreate(proto, internalSlotsList) {
8275 return Object.create(proto, internalSlotsList);
8276 }
8277
8278 // ---------------------------------------
8279 // 19 Fundamental Objects
8280 // ---------------------------------------
8281
8282 // ---------------------------------------
8283 // 19.1 Object Objects
8284 // ---------------------------------------
8285
8286 // 19.1.1 The Object Constructor
8287 // 19.1.1.1 Object ( [ value ] )
8288 // 19.1.2 Properties of the Object Constructor
8289 // 19.1.2.1 Object.assign ( target, ...sources )
8290 define(
8291 Object, 'assign',
8292 function assign(target, /*...*/sources) {
8293 var to = ToObject(target);
8294 if (arguments.length < 2) return to;
8295
8296 var sourcesIndex = 1;
8297 while (sourcesIndex < arguments.length) {
8298 var nextSource = arguments[sourcesIndex++];
8299 if (nextSource === undefined || nextSource === null) {
8300 var keys = [];
8301 } else {
8302 var from = ToObject(nextSource);
8303 keys = OwnPropertyKeys(from);
8304 }
8305 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
8306 var nextKey = keys[keysIndex];
8307 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
8308 if (desc !== undefined && desc.enumerable) {
8309 var propValue = from[nextKey];
8310 to[nextKey] = propValue;
8311 }
8312 }
8313 }
8314 return to;
8315 });
8316
8317 // 19.1.2.2 Object.create ( O [ , Properties ] )
8318 // 19.1.2.3 Object.defineProperties ( O, Properties )
8319 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
8320 // 19.1.2.5 Object.freeze ( O )
8321 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
8322
8323 (function() {
8324 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
8325 $getOwnPropertyNames = Object.getOwnPropertyNames,
8326 $keys = Object.keys,
8327 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
8328
8329 function isStringKey(k) { return !symbolForKey(k); }
8330
8331 // 19.1.2.7 Object.getOwnPropertyNames ( O )
8332 define(
8333 Object, 'getOwnPropertyNames',
8334 function getOwnPropertyNames(o) {
8335 if (Object.prototype.toString.call(o) === '[object Window]') {
8336 // Workaround for cross-realm calling by IE itself.
8337 // https://github.com/inexorabletash/polyfill/issues/96
8338 try {
8339 return $getOwnPropertyNames(o).filter(isStringKey);
8340 } catch (_) {
8341 return $window_names.slice();
8342 }
8343 }
8344 return $getOwnPropertyNames(o).filter(isStringKey);
8345 }, !nativeSymbols);
8346
8347 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
8348 define(
8349 Object, 'getOwnPropertySymbols',
8350 function getOwnPropertySymbols(o) {
8351 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
8352 }, !nativeSymbols);
8353
8354 // 19.1.2.14 Object.keys ( O )
8355 define(
8356 Object, 'keys',
8357 function keys(o) {
8358 return $keys(o).filter(isStringKey);
8359 }, !nativeSymbols);
8360 }());
8361
8362 // 19.1.2.9 Object.getPrototypeOf ( O )
8363 // 19.1.2.10 Object.is ( value1, value2 )
8364 define(
8365 Object, 'is',
8366 function is(value1, value2) {
8367 return SameValue(value1, value2);
8368 });
8369
8370 // 19.1.2.11 Object.isExtensible ( O )
8371 // 19.1.2.12 Object.isFrozen ( O )
8372 // 19.1.2.13 Object.isSealed ( O )
8373
8374 // 19.1.2.14 Object.keys ( O )
8375 // see above
8376
8377 // 19.1.2.15 Object.preventExtensions ( O )
8378 // 19.1.2.16 Object.prototype
8379 // 19.1.2.17 Object.seal ( O )
8380
8381 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
8382 define(
8383 Object, 'setPrototypeOf',
8384 function setPrototypeOf(o, proto) {
8385 if (Type(o) !== 'object') throw TypeError();
8386 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
8387 o.__proto__ = proto;
8388 return o;
8389 }
8390 );
8391
8392 // 19.1.3 Properties of the Object Prototype Object
8393 // 19.1.3.1 Object.prototype.constructor
8394 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
8395 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
8396 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
8397 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
8398 // 19.1.3.6 Object.prototype.toString ( )
8399 hook(Object.prototype, 'toString',
8400 function() {
8401 var o = strict(this);
8402 if (o === Object(o) && $$toStringTag in o) {
8403 return '[object ' + o[$$toStringTag] + ']';
8404 }
8405 return undefined;
8406 });
8407
8408 // 19.1.3.7 Object.prototype.valueOf ( )
8409 // 19.1.4 Properties of Object Instances
8410
8411 // ---------------------------------------
8412 // 19.2 Function Objects
8413 // ---------------------------------------
8414
8415 // 19.2.1 The Function Constructor
8416 // 19.2.1.1 Function ( p1, p2, … , pn, body )
8417 // 19.2.2 Properties of the Function Constructor
8418 // 19.2.2.1 Function.length
8419 // 19.2.2.2 Function.prototype
8420 // 19.2.3 Properties of the Function Prototype Object
8421 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
8422 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
8423 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
8424 // 19.2.3.4 Function.prototype.constructor
8425 // 19.2.3.5 Function.prototype.toString ( )
8426 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
8427 // 19.2.4 Function Instances
8428 // 19.2.4.1 length
8429 // 19.2.4.2 name
8430 // 19.2.4.3 prototype
8431
8432 // (No polyfillable changes from ES5)
8433
8434 // ---------------------------------------
8435 // 19.3 Boolean Objects
8436 // ---------------------------------------
8437
8438 // 19.3.1 The Boolean Constructor
8439 // 19.3.1.1 Boolean ( value )
8440 // 19.3.2 Properties of the Boolean Constructor
8441 // 19.3.2.1 Boolean.prototype
8442 // 19.3.3 Properties of the Boolean Prototype Object
8443 // 19.3.3.1 Boolean.prototype.constructor
8444 // 19.3.3.2 Boolean.prototype.toString ( )
8445 // 19.3.3.3 Boolean.prototype.valueOf ( )
8446 // 19.3.4 Properties of Boolean Instances
8447
8448 // (No polyfillable changes from ES5)
8449
8450 // ---------------------------------------
8451 // 19.4 Symbol Objects
8452 // ---------------------------------------
8453
8454 // Moved earlier in this script, so that other polyfills can depend on them.
8455
8456 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
8457 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
8458
8459 // ---------------------------------------
8460 // 19.5 Error Objects
8461 // ---------------------------------------
8462
8463 // 19.5.1 The Error Constructor
8464 // 19.5.1.1 Error ( message )
8465 // 19.5.1.2 new Error( ...argumentsList )
8466 // 19.5.2 Properties of the Error Constructor
8467 // 19.5.2.1 Error.prototype
8468 // 19.5.3 Properties of the Error Prototype Object
8469 // 19.5.3.1 Error.prototype.constructor
8470 // 19.5.3.2 Error.prototype.message
8471 // 19.5.3.3 Error.prototype.name
8472 // 19.5.3.4 Error.prototype.toString ( )
8473 // 19.5.4 Properties of Error Instances
8474 // 19.5.5 Native Error Types Used in This Standard
8475 // 19.5.5.1 EvalError
8476 // 19.5.5.2 RangeError
8477 // 19.5.5.3 ReferenceError
8478 // 19.5.5.4 SyntaxError
8479 // 19.5.5.5 TypeError
8480 // 19.5.5.6 URIError
8481 // 19.5.6 NativeError Object Structure
8482 // 19.5.6.1 NativeError Constructors
8483 // 19.5.6.1.1 NativeError ( message )
8484 // 19.5.6.1.2 new NativeError ( ...argumentsList )
8485 // 19.5.6.2 Properties of the NativeError Constructors
8486 // 19.5.6.2.1 NativeError.prototype
8487 // 19.5.6.3 Properties of the NativeError Prototype Objects
8488 // 19.5.6.4 Properties of NativeError Instances
8489
8490 // (No polyfillable changes from ES5)
8491
8492 // ---------------------------------------
8493 // 20 Numbers and Dates
8494 // ---------------------------------------
8495
8496 // ---------------------------------------
8497 // 20.1 Number Objects
8498 // ---------------------------------------
8499
8500 // 20.1.1 The Number Constructor
8501 // 20.1.1.1 Number ( [ value ] )
8502 // 20.1.1.2 new Number ( ...argumentsList )
8503 // 20.1.2 Properties of the Number Constructor
8504
8505 // 20.1.2.1 Number.EPSILON
8506 define(
8507 Number, 'EPSILON',
8508 (function () {
8509 var next, result;
8510 for (next = 1; 1 + next !== 1; next = next / 2)
8511 result = next;
8512 return result;
8513 }()));
8514
8515 // 20.1.2.2 Number.isFinite ( number )
8516 define(
8517 Number, 'isFinite',
8518 function isFinite(number) {
8519 if (Type(number) !== 'number') return false;
8520 if (number !== number || number === +Infinity || number === -Infinity) return false;
8521 return true;
8522 });
8523
8524 // 20.1.2.3 Number.isInteger ( number )
8525 define(
8526 Number, 'isInteger',
8527 function isInteger(number) {
8528 if (Type(number) !== 'number') return false;
8529 if (number !== number || number === +Infinity || number === -Infinity) return false;
8530 var integer = ToInteger(number);
8531 if (integer !== number) return false;
8532 return true;
8533 });
8534
8535 // 20.1.2.4 Number.isNaN ( number )
8536 define(
8537 Number, 'isNaN',
8538 function isNaN(number) {
8539 if (Type(number) !== 'number') return false;
8540 if (number !== number) return true;
8541 return false;
8542 });
8543
8544 // 20.1.2.5 Number.isSafeInteger ( number )
8545 define(
8546 Number, 'isSafeInteger',
8547 function isSafeInteger(number) {
8548 if (Type(number) !== 'number') return false;
8549 if (number !== number || number === +Infinity || number === -Infinity) return false;
8550 var integer = ToInteger(number);
8551 if (integer !== number) return false;
8552 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
8553 return true;
8554 return false;
8555 });
8556
8557 // 20.1.2.6 Number.MAX_SAFE_INTEGER
8558 define(
8559 Number, 'MAX_SAFE_INTEGER',
8560 9007199254740991); // 2^53-1
8561
8562 // 20.1.2.7 Number.MAX_VALUE
8563
8564 // 20.1.2.8 Number.MIN_SAFE_INTEGER
8565 define(
8566 Number, 'MIN_SAFE_INTEGER',
8567 -9007199254740991); // -2^53+1
8568
8569 // 20.1.2.9 Number.MIN_VALUE
8570 // 20.1.2.10 Number.NaN
8571 // 20.1.2.11 Number.NEGATIVE_INFINITY
8572
8573 // 20.1.2.12 Number.parseFloat ( string )
8574 define(Number, 'parseFloat', $parseFloat);
8575
8576 // 20.1.2.13 Number.parseInt ( string, radix )
8577 define(Number, 'parseInt', $parseInt);
8578
8579 // 20.1.2.14 Number.POSITIVE_INFINITY
8580 // 20.1.2.15 Number.prototype
8581
8582 // 20.1.3 Properties of the Number Prototype Object
8583 // 20.1.3.1 Number.prototype.constructor
8584 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
8585 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
8586 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
8587 // 20.1.3.5 Number.prototype.toPrecision ( precision )
8588 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
8589 // 20.1.3.7 Number.prototype.valueOf ( )
8590 // 20.1.4 Properties of Number Instances
8591
8592 // ---------------------------------------
8593 // 20.2 The Math Object
8594 // ---------------------------------------
8595
8596 // 20.2.1 Value Properties of the Math Object
8597 // 20.2.1.1 Math.E
8598 // 20.2.1.2 Math.LN10
8599 // 20.2.1.3 Math.LN2
8600 // 20.2.1.4 Math.LOG10E
8601 // 20.2.1.5 Math.LOG2E
8602 // 20.2.1.6 Math.PI
8603 // 20.2.1.7 Math.SQRT1_2
8604 // 20.2.1.8 Math.SQRT2
8605
8606 // 20.2.1.9 Math [ @@toStringTag ]
8607 define(Math, $$toStringTag, 'Math');
8608
8609 // 20.2.2 Function Properties of the Math Object
8610 // 20.2.2.1 Math.abs ( x )
8611 // 20.2.2.2 Math.acos ( x )
8612
8613 // 20.2.2.3 Math.acosh(x)
8614 define(
8615 Math, 'acosh',
8616 function acosh(x) {
8617 x = Number(x);
8618 return log(x + sqrt(x * x - 1));
8619 });
8620
8621 // 20.2.2.4 Math.asin ( x )
8622
8623 // 20.2.2.5 Math.asinh( x )
8624 define(
8625 Math, 'asinh',
8626 function asinh(x) {
8627 x = Number(x);
8628 if (SameValue(x, -0)) {
8629 return x;
8630 }
8631 var s = sqrt(x * x + 1);
8632 return (s === -x) ? log(0) : log(x + s);
8633 });
8634
8635 // 20.2.2.6 Math.atan ( x )
8636
8637 // 20.2.2.7 Math.atanh( x )
8638 define(
8639 Math, 'atanh',
8640 function atanh(x) {
8641 x = Number(x);
8642 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
8643 });
8644
8645 // 20.2.2.8 Math.atan2 ( y, x )
8646
8647 // 20.2.2.9 Math.cbrt ( x )
8648 define(
8649 Math, 'cbrt',
8650 function cbrt(x) {
8651 x = Number(x);
8652 if ($isNaN(x/x)) {
8653 return x;
8654 }
8655 var r = pow(abs(x), 1/3);
8656 var t = x/r/r;
8657 return r + (r * (t-r) / (2*r + t));
8658 });
8659
8660 // 20.2.2.10 Math.ceil ( x )
8661
8662 // 20.2.2.11 Math.clz32 ( x )
8663 define(
8664 Math, 'clz32',
8665 function clz32(x) {
8666 function clz8(x) {
8667 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
8668 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
8669 }
8670 x = ToUint32(x);
8671 return x & 0xff000000 ? clz8(x >> 24) :
8672 x & 0xff0000 ? clz8(x >> 16) + 8 :
8673 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
8674 });
8675
8676
8677
8678 // 20.2.2.12 Math.cos ( x )
8679
8680 // 20.2.2.13 Math.cosh ( x )
8681 define(
8682 Math, 'cosh',
8683 function cosh(x) {
8684 x = Number(x);
8685 return (pow(E, x) + pow(E, -x)) / 2;
8686 });
8687
8688 // 20.2.2.14 Math.exp ( x )
8689
8690 // 20.2.2.15 Math.expm1 ( x )
8691 define(
8692 Math, 'expm1',
8693 function expm1(x) {
8694 x = Number(x);
8695 // from: http://www.johndcook.com/cpp_log1p.html
8696 if (SameValue(x, -0)) {
8697 return -0;
8698 } else if (abs(x) < 1e-5) {
8699 return x + 0.5 * x * x; // two terms of Taylor expansion
8700 } else {
8701 return exp(x) - 1;
8702 }
8703 });
8704
8705 // 20.2.2.16 Math.floor ( x )
8706
8707 // 20.2.2.17 Math.fround ( x )
8708 define(
8709 Math, 'fround',
8710 function fround(x) {
8711 if ($isNaN(x)) {
8712 return NaN;
8713 }
8714 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
8715 return x;
8716 }
8717 return (new Float32Array([x]))[0];
8718 });
8719
8720 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
8721 define(
8722 Math, 'hypot',
8723 function hypot() {
8724 var values = [];
8725 var m = 0, sawNaN = false;
8726 for (var i = 0; i < arguments.length; ++i) {
8727 var n = abs(Number(arguments[i]));
8728 if (n === Infinity) return n;
8729 if (n !== n) sawNaN = true;
8730 if (n > m) m = n;
8731 values[i] = n;
8732 }
8733 if (sawNaN) return NaN;
8734 if (m === 0) return +0;
8735 var sum = +0;
8736 for (i = 0; i < values.length; ++i) {
8737 var r = values[i] / m;
8738 sum = sum + r * r;
8739 }
8740 return m * sqrt(sum);
8741 });
8742
8743 // 20.2.2.19 Math.imul ( x, y )
8744 define(
8745 Math, 'imul',
8746 function imul(x, y) {
8747 var a = ToUint32(x);
8748 var b = ToUint32(y);
8749 // (slow but accurate)
8750 var ah = (a >>> 16) & 0xffff;
8751 var al = a & 0xffff;
8752 var bh = (b >>> 16) & 0xffff;
8753 var bl = b & 0xffff;
8754 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
8755 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
8756 );
8757
8758 // 20.2.2.20 Math.log ( x )
8759
8760 // 20.2.2.21 Math.log1p ( x )
8761 define(
8762 Math, 'log1p',
8763 function log1p(x) {
8764 x = Number(x);
8765 // from: http://www.johndcook.com/cpp_expm1.html
8766 if (x < -1) {
8767 return NaN;
8768 } else if (SameValue(x, -0)) {
8769 return -0;
8770 } else if (abs(x) > 1e-4) {
8771 return log(1 + x);
8772 } else {
8773 return (-0.5 * x + 1) * x;
8774 }
8775 });
8776
8777 // 20.2.2.22 Math.log10 ( x )
8778 define(
8779 Math, 'log10',
8780 function log10(x) {
8781 x = Number(x);
8782 return log(x) * LOG10E;
8783 });
8784
8785 // 20.2.2.23 Math.log2 ( x )
8786 define(
8787 Math, 'log2',
8788 function log2(x) {
8789 x = Number(x);
8790 return log(x) * LOG2E;
8791 });
8792
8793 // 20.2.2.24 Math.max ( value1, value2 , ...values )
8794 // 20.2.2.25 Math.min ( value1, value2 , ...values )
8795 // 20.2.2.26 Math.pow ( x, y )
8796 // 20.2.2.27 Math.random ( )
8797 // 20.2.2.28 Math.round ( x )
8798
8799 // 20.2.2.29 Math.sign(x)
8800 define(
8801 Math, 'sign',
8802 function sign(x) {
8803 x = Number(x);
8804 return x < 0 ? -1 : x > 0 ? 1 : x;
8805 });
8806
8807 // 20.2.2.30 Math.sin ( x )
8808
8809 // 20.2.2.31 Math.sinh( x )
8810 define(
8811 Math, 'sinh',
8812 function sinh(x) {
8813 x = Number(x);
8814 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
8815 });
8816
8817 // 20.2.2.32 Math.sqrt ( x )
8818 // 20.2.2.33 Math.tan ( x )
8819
8820 // 20.2.2.34 Math.tanh ( x )
8821 define(
8822 Math, 'tanh',
8823 function tanh(x) {
8824 x = Number(x);
8825 var n = pow(E, 2 * x) - 1,
8826 d = pow(E, 2 * x) + 1;
8827 if (SameValue(x, -0))
8828 return x;
8829 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
8830 });
8831
8832 // 20.2.2.35 Math.trunc ( x )
8833 define(
8834 Math, 'trunc',
8835 function trunc(x) {
8836 x = Number(x);
8837 return $isNaN(x) ? NaN :
8838 x < 0 ? ceil(x) : floor(x);
8839 });
8840
8841 // ---------------------------------------
8842 // 20.3 Date Objects
8843 // ---------------------------------------
8844
8845 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
8846 // 20.3.1.1 Time Values and Time Range
8847 // 20.3.1.2 Day Number and Time within Day
8848 // 20.3.1.3 Year Number
8849 // 20.3.1.4 Month Number
8850 // 20.3.1.5 Date Number
8851 // 20.3.1.6 Week Day
8852 // 20.3.1.7 Local Time Zone Adjustment
8853 // 20.3.1.8 Daylight Saving Time Adjustment
8854 // 20.3.1.9 Local Time
8855 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
8856 // 20.3.1.11 MakeTime (hour, min, sec, ms)
8857 // 20.3.1.12 MakeDay (year, month, date)
8858 // 20.3.1.13 MakeDate (day, time)
8859 // 20.3.1.14 TimeClip (time)
8860 // 20.3.1.15 Date Time String Format
8861 // 20.3.1.15.1 Extended years
8862 // 20.3.2 The Date Constructor
8863 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
8864 // 20.3.2.2 Date ( value )
8865 // 20.3.2.3 Date ( )
8866 // 20.3.3 Properties of the Date Constructor
8867 // 20.3.3.1 Date.now ( )
8868 // 20.3.3.2 Date.parse (string)
8869 // 20.3.3.3 Date.prototype
8870 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
8871 // 20.3.4 Properties of the Date Prototype Object
8872 // 20.3.4.1 Date.prototype.constructor
8873 // 20.3.4.2 Date.prototype.getDate ( )
8874 // 20.3.4.3 Date.prototype.getDay ( )
8875 // 20.3.4.4 Date.prototype.getFullYear ( )
8876 // 20.3.4.5 Date.prototype.getHours ( )
8877 // 20.3.4.6 Date.prototype.getMilliseconds ( )
8878 // 20.3.4.7 Date.prototype.getMinutes ( )
8879 // 20.3.4.8 Date.prototype.getMonth ( )
8880 // 20.3.4.9 Date.prototype.getSeconds ( )
8881 // 20.3.4.10 Date.prototype.getTime ( )
8882 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
8883 // 20.3.4.12 Date.prototype.getUTCDate ( )
8884 // 20.3.4.13 Date.prototype.getUTCDay ( )
8885 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
8886 // 20.3.4.15 Date.prototype.getUTCHours ( )
8887 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
8888 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
8889 // 20.3.4.18 Date.prototype.getUTCMonth ( )
8890 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
8891 // 20.3.4.20 Date.prototype.setDate ( date )
8892 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
8893 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
8894 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
8895 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
8896 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
8897 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
8898 // 20.3.4.27 Date.prototype.setTime ( time )
8899 // 20.3.4.28 Date.prototype.setUTCDate ( date )
8900 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
8901 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
8902 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
8903 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
8904 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
8905 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
8906 // 20.3.4.35 Date.prototype.toDateString ( )
8907 // 20.3.4.36 Date.prototype.toISOString ( )
8908 // 20.3.4.37 Date.prototype.toJSON ( key )
8909 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
8910 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
8911 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
8912 // 20.3.4.41 Date.prototype.toString ( )
8913 // 20.3.4.42 Date.prototype.toTimeString ( )
8914 // 20.3.4.43 Date.prototype.toUTCString ( )
8915 // 20.3.4.44 Date.prototype.valueOf ( )
8916 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
8917 // 20.3.5 Properties of Date Instances
8918
8919 // (No polyfillable changes from ES5)
8920
8921 // ---------------------------------------
8922 // 21 Text Processing
8923 // ---------------------------------------
8924
8925 var string_regexp_dispatch = (function() {
8926 var faux = {}, secret = Symbol();
8927 faux[Symbol.match] = function() { return secret; };
8928 return ("").match(faux) === secret;
8929 }());
8930
8931 // 21.1 String Objects
8932 // 21.1.1 The String Constructor
8933 // 21.1.1.1 String ( value )
8934 // 21.1.2 Properties of the String Constructor
8935 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
8936
8937 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
8938 define(
8939 String, 'fromCodePoint',
8940 function fromCodePoint(/*...codePoints*/) {
8941 var codePoints = arguments,
8942 length = codePoints.length,
8943 elements = [],
8944 nextIndex = 0;
8945 while (nextIndex < length) {
8946 var next = codePoints[nextIndex];
8947 var nextCP = Number(next);
8948 if (!SameValue(nextCP, ToInteger(nextCP)) ||
8949 nextCP < 0 || nextCP > 0x10FFFF) {
8950 throw RangeError('Invalid code point ' + nextCP);
8951 }
8952 if (nextCP < 0x10000) {
8953 elements.push(String.fromCharCode(nextCP));
8954 } else {
8955 nextCP -= 0x10000;
8956 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
8957 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
8958 }
8959 nextIndex += 1;
8960 }
8961 return elements.join('');
8962 });
8963
8964 // 21.1.2.3 String.prototype
8965
8966 // 21.1.2.4 String.raw ( template , ...substitutions )
8967 define(
8968 String, 'raw',
8969 function raw(template /*, ...substitutions*/) {
8970 var substitutions = [].slice.call(arguments, 1);
8971
8972 var cooked = Object(template);
8973 var rawValue = cooked['raw'];
8974 var raw = Object(rawValue);
8975 var len = raw['length'];
8976 var literalSegments = ToLength(len);
8977 if (literalSegments <= 0) return '';
8978 var stringElements = [];
8979 var nextIndex = 0;
8980 while (true) {
8981 var next = raw[nextIndex];
8982 var nextSeg = String(next);
8983 stringElements.push(nextSeg);
8984 if (nextIndex + 1 === literalSegments)
8985 return stringElements.join('');
8986 next = substitutions[nextIndex];
8987 var nextSub = String(next);
8988 stringElements.push(nextSub);
8989 nextIndex = nextIndex + 1;
8990 }
8991 });
8992
8993 // See https://githib.com/inexorabletash/uate for a more useful version.
8994
8995 // 21.1.3 Properties of the String Prototype Object
8996 // 21.1.3.1 String.prototype.charAt ( pos )
8997 // 21.1.3.2 String.prototype.charCodeAt ( pos )
8998
8999 // 21.1.3.3 String.prototype.codePointAt ( pos )
9000 define(
9001 String.prototype, 'codePointAt',
9002 function codePointAt(pos) {
9003 var o = strict(this);
9004 var s = String(o);
9005 var position = ToInteger(pos);
9006 var size = s.length;
9007 if (position < 0 || position >= size) return undefined;
9008 var first = s.charCodeAt(position);
9009 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
9010 var second = s.charCodeAt(position + 1);
9011 if (second < 0xDC00 || second > 0xDFFF) return first;
9012 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
9013 });
9014
9015 // 21.1.3.4 String.prototype.concat ( ...args )
9016 // 21.1.3.5 String.prototype.constructor
9017
9018 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
9019 define(
9020 String.prototype, 'endsWith',
9021 function endsWith(searchString) {
9022 var endPosition = arguments[1];
9023
9024 var o = strict(this);
9025 var s = String(o);
9026 var searchStr = String(searchString);
9027 var len = s.length;
9028 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
9029 var end = min(max(pos, 0), len);
9030 var searchLength = searchStr.length;
9031 var start = end - searchLength;
9032 if (start < 0) return false;
9033 if (s.substring(start, start + searchLength) === searchStr) return true;
9034 return false;
9035 });
9036
9037 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
9038 define(
9039 String.prototype, 'includes',
9040 function includes(searchString) {
9041 var position = arguments[1];
9042
9043 var o = strict(this);
9044 var s = String(o);
9045 var searchStr = String(searchString);
9046 var pos = ToInteger(position);
9047 var len = s.length;
9048 var start = min(max(pos, 0), len);
9049 return s.indexOf(searchStr, start) !== -1;
9050 });
9051
9052 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
9053 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
9054 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
9055 // 21.1.3.11 String.prototype.match ( regexp )
9056 define(
9057 String.prototype, 'match',
9058 function match(regexp) {
9059 var o = strict(this);
9060 var s = String(o);
9061 if (HasProperty(regexp, $$match)) var rx = regexp;
9062 else rx = new RegExp(regexp);
9063 return rx[$$match](s);
9064 }, !string_regexp_dispatch);
9065
9066 // 21.1.3.12 String.prototype.normalize ( [ form ] )
9067
9068 // Not practical due to table sizes; if needed, pull in:
9069 // https://github.com/walling/unorm/
9070
9071 // 21.1.3.13 String.prototype.repeat ( count )
9072 define(
9073 String.prototype, 'repeat',
9074 function repeat(count) {
9075 var o = strict(this);
9076 var s = String(o);
9077 var n = ToInteger(count);
9078 if (n < 0) throw RangeError();
9079 if (n === Infinity) throw RangeError();
9080 var t = new Array(n + 1).join(s);
9081 return t;
9082 });
9083
9084 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
9085 define(
9086 String.prototype, 'replace',
9087 function replace(searchValue, replaceValue) {
9088 var o = strict(this);
9089 if (HasProperty(searchValue, $$replace))
9090 return searchValue[$$replace](o, replaceValue);
9091 return orig_replace.call(o, searchValue, replaceValue);
9092 }, !string_regexp_dispatch);
9093
9094 // 21.1.3.15 String.prototype.search ( regexp )
9095 define(
9096 String.prototype, 'search',
9097 function search(regexp) {
9098 var o = strict(this);
9099 var string = String(o);
9100 if (HasProperty(regexp, $$search)) var rx = regexp;
9101 else rx = new RegExp(regexp);
9102 return rx[$$search](string);
9103 }, !string_regexp_dispatch);
9104
9105 // 21.1.3.16 String.prototype.slice ( start, end )
9106 // 21.1.3.17 String.prototype.split ( separator, limit )
9107 define(
9108 String.prototype, 'split',
9109 function split(separator, limit) {
9110 var o = strict(this);
9111 if (HasProperty(separator, $$split))
9112 return separator[$$split](o, limit);
9113 return orig_split.call(o, separator, limit);
9114 }, !string_regexp_dispatch);
9115
9116 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
9117 define(
9118 String.prototype, 'startsWith',
9119 function startsWith(searchString) {
9120 var position = arguments[1];
9121
9122 var o = strict(this);
9123 var s = String(o);
9124 var searchStr = String(searchString);
9125 var pos = ToInteger(position);
9126 var len = s.length;
9127 var start = min(max(pos, 0), len);
9128 var searchLength = searchStr.length;
9129 if (searchLength + start > len) return false;
9130 if (s.substring(start, start + searchLength) === searchStr) return true;
9131 return false;
9132 });
9133
9134 // 21.1.3.19 String.prototype.substring ( start, end )
9135 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
9136 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
9137 // 21.1.3.22 String.prototype.toLowerCase ( )
9138 // 21.1.3.23 String.prototype.toString ( )
9139 // 21.1.3.24 String.prototype.toUpperCase ( )
9140 // 21.1.3.25 String.prototype.trim ( )
9141 // 21.1.3.26 String.prototype.valueOf ( )
9142
9143 // 21.1.3.27 String.prototype [ @@iterator ]( )
9144 define(
9145 String.prototype, $$iterator,
9146 function entries() {
9147 return CreateStringIterator(this, 'value');
9148 });
9149
9150 // 21.1.4 Properties of String Instances
9151 // 21.1.4.1 length
9152
9153 // 21.1.5 String Iterator Objects
9154 /** @constructor */
9155 function StringIterator() {}
9156
9157 // 21.1.5.1 CreateStringIterator Abstract Operation
9158 function CreateStringIterator(string, kind) {
9159 var s = String(string);
9160 var iterator = new StringIterator;
9161 set_internal(iterator, '[[IteratedString]]', s);
9162 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
9163 set_internal(iterator, '[[StringIterationKind]]', kind);
9164 return iterator;
9165 }
9166
9167 // 21.1.5.2 The %StringIteratorPrototype% Object
9168 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
9169 StringIterator.prototype = $StringIteratorPrototype$;
9170
9171 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
9172 define(
9173 $StringIteratorPrototype$, 'next',
9174 function next() {
9175 var o = ToObject(this);
9176 var s = String(o['[[IteratedString]]']),
9177 index = o['[[StringIteratorNextIndex]]'],
9178 len = s.length;
9179 if (index >= len) {
9180 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
9181 return CreateIterResultObject(undefined, true);
9182 }
9183 var cp = s.codePointAt(index);
9184 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
9185 return CreateIterResultObject(String.fromCodePoint(cp), false);
9186 });
9187
9188 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
9189 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
9190
9191 // 21.1.5.3 Properties of String Iterator Instances
9192
9193 // ---------------------------------------
9194 // 21.2 RegExp (Regular Expression) Objects
9195 // ---------------------------------------
9196
9197 // 21.2.1 Patterns
9198 // 21.2.2 Pattern Semantics
9199 // 21.2.2.1 Notation
9200 // 21.2.2.2 Pattern
9201 // 21.2.2.3 Disjunction
9202 // 21.2.2.4 Alternative
9203 // 21.2.2.5 Term
9204 // 21.2.2.6 Assertion
9205 // 21.2.2.7 Quantifier
9206 // 21.2.2.8 Atom
9207 // 21.2.2.9 AtomEscape
9208 // 21.2.2.10 CharacterEscape
9209 // 21.2.2.11 DecimalEscape
9210 // 21.2.2.12 CharacterClassEscape
9211 // 21.2.2.13 CharacterClass
9212 // 21.2.2.14 ClassRanges
9213 // 21.2.2.15 NonemptyClassRanges
9214 // 21.2.2.16 NonemptyClassRangesNoDash
9215 // 21.2.2.17 ClassAtom
9216 // 21.2.2.18 ClassAtomNoDash
9217 // 21.2.2.19 ClassEscape
9218 // 21.2.3 The RegExp Constructor
9219 // 21.2.3.1 RegExp ( pattern, flags )
9220 // 21.2.3.2 new RegExp( ...argumentsList )
9221 // 21.2.3.3 Abstract Operations for the RegExp Constructor
9222 // 21.2.4 Properties of the RegExp Constructor
9223 // 21.2.4.1 RegExp.prototype
9224 // 21.2.5 Properties of the RegExp Prototype Object
9225 // 21.2.5.1 RegExp.prototype.constructor
9226 // 21.2.5.2 RegExp.prototype.exec ( string )
9227
9228 // 21.2.5.3 get RegExp.prototype.flags
9229 if (!('flags' in RegExp.prototype)) {
9230 Object.defineProperty(
9231 RegExp.prototype, 'flags', {
9232 get: function() {
9233 var s = String(this);
9234 return s.substring(s.lastIndexOf('/') + 1);
9235 }
9236 });
9237 }
9238
9239 // 21.2.5.4 get RegExp.prototype.global
9240 // 21.2.5.5 get RegExp.prototype.ignoreCase
9241
9242 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
9243 define(RegExp.prototype, $$match, function(string) {
9244 var o = strict(this);
9245 return orig_match.call(string, o);
9246 });
9247
9248 // 21.2.5.7 get RegExp.prototype.multiline
9249
9250 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
9251 define(RegExp.prototype, $$replace, function(string, replaceValue) {
9252 var o = strict(this);
9253 return orig_replace.call(string, o, replaceValue);
9254 });
9255
9256 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
9257 define(RegExp.prototype, $$search, function(string) {
9258 var o = strict(this);
9259 return orig_search.call(string, o);
9260 });
9261
9262 // 21.2.5.10 get RegExp.prototype.source
9263
9264 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
9265 define(RegExp.prototype, $$split, function(string, limit) {
9266 var o = strict(this);
9267 return orig_split.call(string, o, limit);
9268 });
9269
9270 // 21.2.5.12 get RegExp.prototype.sticky
9271 // 21.2.5.13 RegExp.prototype.test( S )
9272 // 21.2.5.14 RegExp.prototype.toString ( )
9273 // 21.2.5.15 get RegExp.prototype.unicode
9274
9275 // 21.2.6 Properties of RegExp Instances
9276 // 21.2.6.1 lastIndex
9277
9278 // (No polyfillable changes from ES5)
9279
9280 // ---------------------------------------
9281 // 22 Indexed Collections
9282 // ---------------------------------------
9283
9284 // ---------------------------------------
9285 // 22.1 Array Objects
9286 // ---------------------------------------
9287
9288 // 22.1.1 The Array Constructor
9289 // 22.1.1.1 Array ( )
9290 // 22.1.1.2 Array (len)
9291 // 22.1.1.3 Array (...items )
9292
9293 // 22.1.2 Properties of the Array Constructor
9294
9295 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
9296 define(
9297 Array, 'from',
9298 function from(items) {
9299 var mapfn = arguments[1];
9300 var thisArg = arguments[2];
9301
9302 var c = strict(this);
9303 if (mapfn === undefined) {
9304 var mapping = false;
9305 } else {
9306 if (!IsCallable(mapfn)) throw TypeError();
9307 var t = thisArg;
9308 mapping = true;
9309 }
9310 var usingIterator = GetMethod(items, $$iterator);
9311 if (usingIterator !== undefined) {
9312 if (IsConstructor(c)) {
9313 var a = new c();
9314 } else {
9315 a = new Array(0);
9316 }
9317 var iterator = GetIterator(items, usingIterator);
9318 var k = 0;
9319 while (true) {
9320 var next = IteratorStep(iterator);
9321 if (next === false) {
9322 a.length = k;
9323 return a;
9324 }
9325 var nextValue = IteratorValue(next);
9326 if (mapping)
9327 var mappedValue = mapfn.call(t, nextValue);
9328 else
9329 mappedValue = nextValue;
9330 a[k] = mappedValue;
9331 k += 1;
9332 }
9333 }
9334 var arrayLike = ToObject(items);
9335 var lenValue = arrayLike.length;
9336 var len = ToLength(lenValue);
9337 if (IsConstructor(c)) {
9338 a = new c(len);
9339 } else {
9340 a = new Array(len);
9341 }
9342 k = 0;
9343 while (k < len) {
9344 var kValue = arrayLike[k];
9345 if (mapping)
9346 mappedValue = mapfn.call(t, kValue, k);
9347 else
9348 mappedValue = kValue;
9349 a[k] = mappedValue;
9350 k += 1;
9351 }
9352 a.length = len;
9353 return a;
9354 });
9355
9356 // 22.1.2.2 Array.isArray ( arg )
9357
9358 // 22.1.2.3 Array.of ( ...items )
9359 define(
9360 Array, 'of',
9361 function of() {
9362 var items = arguments;
9363
9364 var lenValue = items.length;
9365 var len = ToUint32(lenValue);
9366 var c = strict(this), a;
9367 if (IsConstructor(c)) {
9368 a = new c(len);
9369 a = ToObject(a);
9370 } else {
9371 a = new Array(len);
9372 }
9373 var k = 0;
9374 while (k < len) {
9375 a[k] = items[k];
9376 k += 1;
9377 }
9378 a.length = len;
9379 return a;
9380 });
9381
9382 // 22.1.2.4 Array.prototype
9383 // 22.1.2.5 get Array [ @@species ]
9384 // 22.1.3 Properties of the Array Prototype Object
9385 // 22.1.3.1 Array.prototype.concat ( ...arguments )
9386 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
9387 // 22.1.3.2 Array.prototype.constructor
9388 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
9389 define(
9390 Array.prototype, 'copyWithin',
9391 function copyWithin(target, start/*, end*/) {
9392 var end = arguments[2];
9393
9394 var o = ToObject(this);
9395 var lenVal = o.length;
9396 var len = ToLength(lenVal);
9397 len = max(len, 0);
9398 var relativeTarget = ToInteger(target);
9399 var to;
9400 if (relativeTarget < 0)
9401 to = max(len + relativeTarget, 0);
9402 else
9403 to = min(relativeTarget, len);
9404 var relativeStart = ToInteger(start);
9405 var from;
9406 if (relativeStart < 0)
9407 from = max(len + relativeStart, 0);
9408 else
9409 from = min(relativeStart, len);
9410 var relativeEnd;
9411 if (end === undefined)
9412 relativeEnd = len;
9413 else
9414 relativeEnd = ToInteger(end);
9415 var final;
9416 if (relativeEnd < 0)
9417 final = max(len + relativeEnd, 0);
9418 else
9419 final = min(relativeEnd, len);
9420 var count = min(final - from, len - to);
9421 var direction;
9422 if (from < to && to < from + count) {
9423 direction = -1;
9424 from = from + count - 1;
9425 to = to + count - 1;
9426 } else {
9427 direction = 1;
9428 }
9429 while (count > 0) {
9430 var fromKey = String(from);
9431 var toKey = String(to);
9432 var fromPresent = HasProperty(o, fromKey);
9433 if (fromPresent) {
9434 var fromVal = o[fromKey];
9435 o[toKey] = fromVal;
9436 } else {
9437 delete o[toKey];
9438 }
9439 from = from + direction;
9440 to = to + direction;
9441 count = count - 1;
9442 }
9443 return o;
9444 });
9445
9446 // 22.1.3.4 Array.prototype.entries ( )
9447 var nativeArrayIteratorMethods =
9448 ('entries' in Array.prototype && 'next' in [].entries());
9449
9450 define(
9451 Array.prototype, 'entries',
9452 function entries() {
9453 return CreateArrayIterator(this, 'key+value');
9454 }, !nativeArrayIteratorMethods);
9455
9456 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
9457
9458 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
9459 define(
9460 Array.prototype, 'fill',
9461 function fill(value/*, start, end*/) {
9462 var start = arguments[1],
9463 end = arguments[2];
9464
9465 var o = ToObject(this);
9466 var lenVal = o.length;
9467 var len = ToLength(lenVal);
9468 len = max(len, 0);
9469 var relativeStart = ToInteger(start);
9470 var k;
9471 if (relativeStart < 0)
9472 k = max((len + relativeStart), 0);
9473 else
9474 k = min(relativeStart, len);
9475 var relativeEnd;
9476 if (end === undefined)
9477 relativeEnd = len;
9478 else
9479 relativeEnd = ToInteger(end);
9480 var final;
9481 if (relativeEnd < 0)
9482 final = max((len + relativeEnd), 0);
9483 else
9484 final = min(relativeEnd, len);
9485 while (k < final) {
9486 var pk = String(k);
9487 o[pk] = value;
9488 k += 1;
9489 }
9490 return o;
9491 });
9492
9493 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
9494
9495 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
9496 define(
9497 Array.prototype, 'find',
9498 function find(predicate) {
9499 var o = ToObject(this);
9500 var lenValue = o.length;
9501 var len = ToInteger(lenValue);
9502 if (!IsCallable(predicate)) throw TypeError();
9503 var t = arguments.length > 1 ? arguments[1] : undefined;
9504 var k = 0;
9505 while (k < len) {
9506 var pk = String(k);
9507 var kPresent = HasProperty(o, pk);
9508 if (kPresent) {
9509 var kValue = o[pk];
9510 var testResult = predicate.call(t, kValue, k, o);
9511 if (Boolean(testResult)) {
9512 return kValue;
9513 }
9514 }
9515 ++k;
9516 }
9517 return undefined;
9518 });
9519
9520 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
9521 define(
9522 Array.prototype, 'findIndex',
9523 function findIndex(predicate) {
9524 var o = ToObject(this);
9525 var lenValue = o.length;
9526 var len = ToLength(lenValue);
9527 if (!IsCallable(predicate)) throw TypeError();
9528 var t = arguments.length > 1 ? arguments[1] : undefined;
9529 var k = 0;
9530 while (k < len) {
9531 var pk = String(k);
9532 var kPresent = HasProperty(o, pk);
9533 if (kPresent) {
9534 var kValue = o[pk];
9535 var testResult = predicate.call(t, kValue, k, o);
9536 if (Boolean(testResult)) {
9537 return k;
9538 }
9539 }
9540 ++k;
9541 }
9542 return -1;
9543 });
9544
9545 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
9546 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
9547 // 22.1.3.12 Array.prototype.join (separator)
9548
9549 // 22.1.3.13 Array.prototype.keys ( )
9550 define(
9551 Array.prototype, 'keys',
9552 function keys() {
9553 return CreateArrayIterator(this, 'key');
9554 }, !nativeArrayIteratorMethods);
9555
9556 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
9557 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
9558 // 22.1.3.16 Array.prototype.pop ( )
9559 // 22.1.3.17 Array.prototype.push ( ...items )
9560 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
9561 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
9562 // 22.1.3.20 Array.prototype.reverse ( )
9563 // 22.1.3.21 Array.prototype.shift ( )
9564 // 22.1.3.22 Array.prototype.slice (start, end)
9565 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
9566 // 22.1.3.24 Array.prototype.sort (comparefn)
9567 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
9568 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
9569 // 22.1.3.27 Array.prototype.toString ( )
9570 // 22.1.3.28 Array.prototype.unshift ( ...items )
9571
9572 // 22.1.3.29 Array.prototype.values ( )
9573 define(
9574 Array.prototype, 'values',
9575 function values() {
9576 return CreateArrayIterator(this, 'value');
9577 }, !nativeArrayIteratorMethods);
9578
9579 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
9580 define(
9581 Array.prototype, $$iterator,
9582 Array.prototype.values
9583 );
9584
9585 // 22.1.3.31 Array.prototype [ @@unscopables ]
9586 // 22.1.4 Properties of Array Instances
9587 // 22.1.4.1 length
9588
9589 // 22.1.5 Array Iterator Objects
9590 function ArrayIterator() {}
9591
9592 // 22.1.5.1 CreateArrayIterator Abstract Operation
9593 function CreateArrayIterator(array, kind) {
9594 var o = ToObject(array);
9595 var iterator = new ArrayIterator;
9596 set_internal(iterator, '[[IteratedObject]]', o);
9597 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
9598 set_internal(iterator, '[[ArrayIterationKind]]', kind);
9599 return iterator;
9600 }
9601
9602 // 22.1.5.2 The %ArrayIteratorPrototype% Object
9603 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
9604 ArrayIterator.prototype = $ArrayIteratorPrototype$;
9605
9606 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
9607 define(
9608 $ArrayIteratorPrototype$, 'next',
9609 function next() {
9610 var o = strict(this);
9611 if (Type(o) !== 'object') throw TypeError();
9612 var a = o['[[IteratedObject]]'],
9613 index = o['[[ArrayIteratorNextIndex]]'],
9614 itemKind = o['[[ArrayIterationKind]]'],
9615 lenValue = a.length,
9616 len = ToUint32(lenValue),
9617 elementKey,
9618 elementValue;
9619 if (itemKind.indexOf('sparse') !== -1) {
9620 var found = false;
9621 while (!found && index < len) {
9622 elementKey = String(index);
9623 found = HasProperty(a, elementKey);
9624 if (!found) {
9625 index += 1;
9626 }
9627 }
9628 }
9629 if (index >= len) {
9630 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
9631 return CreateIterResultObject(undefined, true);
9632 }
9633 elementKey = index;
9634 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
9635 if (itemKind.indexOf('value') !== -1)
9636 elementValue = a[elementKey];
9637 if (itemKind.indexOf('key+value') !== -1)
9638 return CreateIterResultObject([elementKey, elementValue], false);
9639 if (itemKind.indexOf('key') !== -1)
9640 return CreateIterResultObject(elementKey, false);
9641 if (itemKind === 'value')
9642 return CreateIterResultObject(elementValue, false);
9643 throw Error('Internal error');
9644 });
9645
9646 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
9647 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
9648
9649 // 22.1.5.3 Properties of Array Iterator Instances
9650
9651
9652 // ---------------------------------------
9653 // 22.2 TypedArray Objects
9654 // ---------------------------------------
9655
9656 // See typedarray.js for TypedArray polyfill
9657
9658 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
9659 'Int16Array', 'Uint16Array',
9660 'Int32Array', 'Uint32Array',
9661 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
9662 if (!($TypedArrayName$ in global))
9663 return;
9664 var $TypedArray$ = global[$TypedArrayName$];
9665
9666 // 22.2.1 The %TypedArray% Intrinsic Object
9667 // 22.2.1.1 %TypedArray% ( length )
9668 // 22.2.1.2 %TypedArray% ( typedArray )
9669 // 22.2.1.3 %TypedArray% ( object )
9670 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
9671 // 22.2.1.5 %TypedArray% ( all other argument combinations )
9672 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
9673
9674 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
9675 define(
9676 $TypedArray$, 'from',
9677 function from(source) {
9678 var mapfn = arguments[1];
9679 var thisArg = arguments[2];
9680
9681 var c = strict(this);
9682 if (!IsConstructor(c)) throw TypeError();
9683 if (mapfn === undefined) {
9684 var mapping = false;
9685 } else {
9686 if (IsCallable(mapfn)) throw TypeError();
9687 var t = thisArg;
9688 mapping = true;
9689 }
9690 var usingIterator = GetMethod(source, $$iterator);
9691 if (usingIterator !== undefined) {
9692 var iterator = GetIterator(source, usingIterator);
9693 var values = [];
9694 var next = true;
9695 while (next !== false) {
9696 next = IteratorStep(iterator);
9697 if (next !== false) {
9698 var nextValue = IteratorValue(next);
9699 values.push(nextValue);
9700 }
9701 }
9702 var len = values.length;
9703 var newObj = new c(len);
9704 var k = 0;
9705 while (k < len) {
9706 var kValue = values.shift();
9707 if (mapping) {
9708 var mappedValue = mapfn.call(t, kValue);
9709 } else {
9710 mappedValue = kValue;
9711 }
9712 newObj[k] = mappedValue;
9713 ++k;
9714 }
9715 console.assert(values.length === 0);
9716 return newObj;
9717 }
9718 var arrayLike = ToObject(source);
9719 var lenValue = arrayLike.length;
9720 len = ToLength(lenValue);
9721 newObj = new c(len);
9722 k = 0;
9723 while (k < len) {
9724 kValue = arrayLike[k];
9725 if (mapping) {
9726 mappedValue = mapfn.call(t, kValue, k);
9727 } else {
9728 mappedValue = kValue;
9729 }
9730 newObj[k] = mappedValue;
9731 ++k;
9732 }
9733 return newObj;
9734 });
9735
9736 // 22.2.2.2 %TypedArray%.of ( ...items )
9737 define(
9738 $TypedArray$, 'of',
9739 function of() {
9740 var items = arguments;
9741
9742 var len = items.length;
9743 var c = strict(this);
9744 var newObj = new c(len);
9745 var k = 0;
9746 while (k < len) {
9747 newObj[k] = items[k];
9748 ++k;
9749 }
9750 return newObj;
9751 });
9752
9753 // 22.2.2.3 %TypedArray%.prototype
9754 // 22.2.2.4 get %TypedArray% [ @@species ]
9755 // 22.2.3 Properties of the %TypedArrayPrototype% Object
9756 // 22.2.3.1 get %TypedArray%.prototype.buffer
9757 // 22.2.3.2 get %TypedArray%.prototype.byteLength
9758 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
9759 // 22.2.3.4 %TypedArray%.prototype.constructor
9760
9761 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
9762 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
9763
9764 // 22.2.3.6 %TypedArray%.prototype.entries ( )
9765 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
9766
9767 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
9768 define($TypedArray$.prototype, 'every', Array.prototype.every);
9769
9770 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
9771 define(
9772 $TypedArray$.prototype, 'fill',
9773 //Array.prototype.fill // Doesn't work in Safari 7
9774 function fill(value/*, start, end*/) {
9775 var start = arguments[1],
9776 end = arguments[2];
9777
9778 var o = ToObject(this);
9779 var lenVal = o.length;
9780 var len = ToLength(lenVal);
9781 len = max(len, 0);
9782 var relativeStart = ToInteger(start);
9783 var k;
9784 if (relativeStart < 0) k = max((len + relativeStart), 0);
9785 else k = min(relativeStart, len);
9786 var relativeEnd;
9787 if (end === undefined) relativeEnd = len;
9788 else relativeEnd = ToInteger(end);
9789 var final;
9790 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
9791 else final = min(relativeEnd, len);
9792 while (k < final) {
9793 var pk = String(k);
9794 o[pk] = value;
9795 k += 1;
9796 }
9797 return o;
9798 });
9799
9800 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
9801 define(
9802 $TypedArray$.prototype, 'filter',
9803 function filter(callbackfn) {
9804 var thisArg = arguments[1];
9805
9806 var o = ToObject(this);
9807 var lenVal = o.length;
9808 var len = ToLength(lenVal);
9809 if (!IsCallable(callbackfn)) throw TypeError();
9810 var t = thisArg;
9811 var c = o.constructor;
9812 var kept = [];
9813 var k = 0;
9814 var captured = 0;
9815 while (k < len) {
9816 var kValue = o[k];
9817 var selected = callbackfn.call(t, kValue, k, o);
9818 if (selected) {
9819 kept.push(kValue);
9820 ++captured;
9821 }
9822 ++k;
9823 }
9824 var a = new c(captured);
9825 var n = 0;
9826 for (var i = 0; i < kept.length; ++i) {
9827 var e = kept[i];
9828 a[n] = e;
9829 ++n;
9830 }
9831 return a;
9832 });
9833
9834 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
9835 define($TypedArray$.prototype, 'find', Array.prototype.find);
9836
9837 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
9838 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
9839
9840 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
9841 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
9842
9843 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
9844 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
9845
9846 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
9847 define($TypedArray$.prototype, 'join', Array.prototype.join);
9848
9849 // 22.2.3.15 %TypedArray%.prototype.keys ( )
9850 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
9851
9852 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
9853 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
9854
9855 // 22.2.3.17 get %TypedArray%.prototype.length
9856
9857 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
9858 define(
9859 $TypedArray$.prototype, 'map',
9860 function map(callbackfn) {
9861 var thisArg = arguments[1];
9862
9863 var o = ToObject(this);
9864 var lenValue = o.length;
9865 var len = ToLength(lenValue);
9866 if (!IsCallable(callbackfn)) throw TypeError();
9867 var t = thisArg;
9868 var a = undefined;
9869 var c = o.constructor;
9870 if (IsConstructor(c))
9871 a = new c(len);
9872 if (a === undefined)
9873 a = new Array(len);
9874 var k = 0;
9875 while (k < len) {
9876 var kPresent = HasProperty(o, k);
9877 if (kPresent) {
9878 var kValue = o[k];
9879 var mappedValue = callbackfn.call(t, kValue, k, o);
9880 a[k] = mappedValue;
9881 }
9882 ++k;
9883 }
9884 return a;
9885 });
9886
9887 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
9888 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
9889
9890 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
9891 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
9892
9893 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
9894 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
9895
9896 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
9897 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
9898 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
9899
9900 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
9901 define(
9902 $TypedArray$.prototype, 'slice',
9903 function slice(start, end) {
9904 var o = ToObject(this);
9905 var lenVal = o.length;
9906 var len = ToLength(lenVal);
9907 var relativeStart = ToInteger(start);
9908 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
9909 var relativeEnd = (end === undefined) ? len : ToInteger(end);
9910 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
9911 var count = final - k;
9912 var c = o.constructor;
9913 if (IsConstructor(c)) {
9914 var a = new c(count);
9915 } else {
9916 throw TypeError();
9917 }
9918 var n = 0;
9919 while (k < final) {
9920 var kValue = o[k];
9921 a[n] = kValue;
9922 ++k;
9923 ++n;
9924 }
9925 return a;
9926 });
9927
9928 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
9929 define($TypedArray$.prototype, 'some', Array.prototype.some);
9930
9931 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
9932 define(
9933 $TypedArray$.prototype, 'sort',
9934 function sort() {
9935 var comparefn = arguments[0];
9936
9937 function sortCompare(x, y) {
9938 console.assert(Type(x) === 'number' && Type(y) === 'number');
9939 if (x !== x && y !== y) return +0;
9940 if (x !== x) return 1;
9941 if (y !== y) return -1;
9942 if (comparefn !== undefined) {
9943 return comparefn(x, y);
9944 }
9945 if (x < y) return -1;
9946 if (x > y) return 1;
9947 return +0;
9948 }
9949 return Array.prototype.sort.call(this, sortCompare);
9950 });
9951
9952 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
9953 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
9954 // 22.2.3.28 %TypedArray%.prototype.toString ( )
9955
9956 // 22.2.3.29 %TypedArray%.prototype.values ( )
9957 define($TypedArray$.prototype, 'values', Array.prototype.values);
9958
9959 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
9960 define(
9961 $TypedArray$.prototype, $$iterator,
9962 $TypedArray$.prototype.values
9963 );
9964
9965 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
9966 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
9967
9968 // 22.2.4 The TypedArray Constructors
9969 // 22.2.4.1TypedArray( ... argumentsList)
9970 // 22.2.5 Properties of the TypedArray Constructors
9971 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
9972 // 22.2.5.2 TypedArray.prototype
9973 // 22.2.6 Properties of TypedArray Prototype Objects
9974 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
9975 // 22.2.6.2 TypedArray.prototype.constructor
9976 // 22.2.7 Properties of TypedArray Instances
9977 });
9978
9979 // ---------------------------------------
9980 // 23 Keyed Collection
9981 // ---------------------------------------
9982
9983 // ---------------------------------------
9984 // 23.1 Map Objects
9985 // ---------------------------------------
9986
9987 (function() {
9988 // 23.1.1 The Map Constructor
9989
9990 // 23.1.1.1 Map ( [ iterable ] )
9991 /** @constructor */
9992 function Map(/*iterable*/) {
9993 var map = strict(this);
9994 var iterable = arguments[0];
9995
9996 if (Type(map) !== 'object') throw TypeError();
9997 if ('[[MapData]]' in map) throw TypeError();
9998
9999 if (iterable !== undefined) {
10000 var adder = map['set'];
10001 if (!IsCallable(adder)) throw TypeError();
10002 var iter = GetIterator(ToObject(iterable));
10003 }
10004 set_internal(map, '[[MapData]]', { keys: [], values: [] });
10005 if (iter === undefined) return map;
10006 while (true) {
10007 var next = IteratorStep(iter);
10008 if (next === false)
10009 return map;
10010 var nextItem = IteratorValue(next);
10011 if (Type(nextItem) !== 'object') throw TypeError();
10012 var k = nextItem[0];
10013 var v = nextItem[1];
10014 adder.call(map, k, v);
10015 }
10016
10017 return map;
10018 }
10019
10020 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
10021 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
10022 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
10023 (new global.Map([['a', 1]]).size !== 1))
10024 global.Map = Map;
10025
10026
10027 function MapDataIndexOf(mapData, key) {
10028 var i;
10029 if (key === key) return mapData.keys.indexOf(key);
10030 // Slow case for NaN
10031 for (i = 0; i < mapData.keys.length; i += 1)
10032 if (SameValueZero(mapData.keys[i], key)) return i;
10033 return -1;
10034 }
10035
10036 // 23.1.1.2 new Map ( ... argumentsList )
10037 // 23.1.2 Properties of the Map Constructor
10038 // 23.1.2.1 Map.prototype
10039 var $MapPrototype$ = {};
10040 Map.prototype = $MapPrototype$;
10041
10042 // 23.1.2.2 get Map [ @@species ]
10043
10044 // 23.1.3 Properties of the Map Prototype Object
10045 // 23.1.3.1 Map.prototype.clear ()
10046 define(
10047 Map.prototype, 'clear',
10048 function clear() {
10049 var m = strict(this);
10050 if (Type(m) !== 'object') throw TypeError();
10051 if (!('[[MapData]]' in m)) throw TypeError();
10052 if (m['[[MapData]]'] === undefined) throw TypeError();
10053 var entries = m['[[MapData]]'];
10054 entries.keys.length = 0;
10055 entries.values.length = 0;
10056 return undefined;
10057 });
10058
10059 // 23.1.3.2 Map.prototype.constructor
10060
10061 // 23.1.3.3 Map.prototype.delete ( key )
10062 define(
10063 Map.prototype, 'delete',
10064 function delete_(key) {
10065 var m = strict(this);
10066 if (Type(m) !== 'object') throw TypeError();
10067 if (!('[[MapData]]' in m)) throw TypeError();
10068 if (m['[[MapData]]'] === undefined) throw TypeError();
10069 var entries = m['[[MapData]]'];
10070 var i = MapDataIndexOf(entries, key);
10071 if (i < 0) return false;
10072 entries.keys[i] = empty;
10073 entries.values[i] = empty;
10074 return true;
10075 });
10076
10077 // 23.1.3.4 Map.prototype.entries ( )
10078 define(
10079 Map.prototype, 'entries',
10080 function entries() {
10081 var m = strict(this);
10082 if (Type(m) !== 'object') throw TypeError();
10083 return CreateMapIterator(m, 'key+value');
10084 });
10085
10086 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
10087 define(
10088 Map.prototype, 'forEach',
10089 function forEach(callbackfn /*, thisArg*/) {
10090 var thisArg = arguments[1];
10091
10092 var m = strict(this);
10093 if (Type(m) !== 'object') throw TypeError();
10094 if (!('[[MapData]]' in m)) throw TypeError();
10095 if (m['[[MapData]]'] === undefined) throw TypeError();
10096 var entries = m['[[MapData]]'];
10097
10098 if (!IsCallable(callbackfn)) {
10099 throw TypeError('First argument to forEach is not callable.');
10100 }
10101 for (var i = 0; i < entries.keys.length; ++i) {
10102 if (entries.keys[i] !== empty) {
10103 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
10104 }
10105 }
10106 return undefined;
10107 });
10108
10109 // 23.1.3.6 Map.prototype.get ( key )
10110 define(
10111 Map.prototype, 'get',
10112 function get(key) {
10113 var m = strict(this);
10114 if (Type(m) !== 'object') throw TypeError();
10115 if (!('[[MapData]]' in m)) throw TypeError();
10116 if (m['[[MapData]]'] === undefined) throw TypeError();
10117 var entries = m['[[MapData]]'];
10118 var i = MapDataIndexOf(entries, key);
10119 if (i >= 0) return entries.values[i];
10120 return undefined;
10121 });
10122
10123 // 23.1.3.7 Map.prototype.has ( key )
10124 define(
10125 Map.prototype, 'has',
10126 function has(key) {
10127 var m = strict(this);
10128 if (Type(m) !== 'object') throw TypeError();
10129 if (!('[[MapData]]' in m)) throw TypeError();
10130 if (m['[[MapData]]'] === undefined) throw TypeError();
10131 var entries = m['[[MapData]]'];
10132 if (MapDataIndexOf(entries, key) >= 0) return true;
10133 return false;
10134 });
10135
10136 // 23.1.3.8 Map.prototype.keys ( )
10137 define(
10138 Map.prototype, 'keys',
10139 function keys() {
10140 var m = strict(this);
10141 if (Type(m) !== 'object') throw TypeError();
10142 return CreateMapIterator(m, 'key');
10143 });
10144
10145 // 23.1.3.9 Map.prototype.set ( key , value )
10146 define(
10147 Map.prototype, 'set',
10148 function set(key, value) {
10149 var m = strict(this);
10150 if (Type(m) !== 'object') throw TypeError();
10151 if (!('[[MapData]]' in m)) throw TypeError();
10152 if (m['[[MapData]]'] === undefined) throw TypeError();
10153 var entries = m['[[MapData]]'];
10154 var i = MapDataIndexOf(entries, key);
10155 if (i < 0) i = entries.keys.length;
10156 if (SameValue(key, -0)) key = 0;
10157 entries.keys[i] = key;
10158 entries.values[i] = value;
10159 return m;
10160 });
10161
10162 // 23.1.3.10 get Map.prototype.size
10163 Object.defineProperty(
10164 Map.prototype, 'size', {
10165 get: function() {
10166 var m = strict(this);
10167 if (Type(m) !== 'object') throw TypeError();
10168 if (!('[[MapData]]' in m)) throw TypeError();
10169 if (m['[[MapData]]'] === undefined) throw TypeError();
10170 var entries = m['[[MapData]]'];
10171 var count = 0;
10172 for (var i = 0; i < entries.keys.length; ++i) {
10173 if (entries.keys[i] !== empty)
10174 count = count + 1;
10175 }
10176 return count;
10177 }
10178 });
10179
10180 // 23.1.3.11 Map.prototype.values ( )
10181 define(
10182 Map.prototype, 'values',
10183 function values() {
10184 var m = strict(this);
10185 if (Type(m) !== 'object') throw TypeError();
10186 return CreateMapIterator(m, 'value');
10187 });
10188
10189 // 23.1.3.12 Map.prototype [ @@iterator ]( )
10190 define(
10191 Map.prototype, $$iterator,
10192 function() {
10193 var m = strict(this);
10194 if (Type(m) !== 'object') throw TypeError();
10195 return CreateMapIterator(m, 'key+value');
10196 });
10197
10198 // 23.1.3.13 Map.prototype [ @@toStringTag ]
10199 define(global.Map.prototype, $$toStringTag, 'Map');
10200
10201 // 23.1.4 Properties of Map Instances
10202 // 23.1.5 Map Iterator Objects
10203
10204 /** @constructor */
10205 function MapIterator() {}
10206
10207 // 23.1.5.1 CreateMapIterator Abstract Operation
10208 function CreateMapIterator(map, kind) {
10209 if (Type(map) !== 'object') throw TypeError();
10210 if (!('[[MapData]]' in map)) throw TypeError();
10211 if (map['[[MapData]]'] === undefined) throw TypeError();
10212 var iterator = new MapIterator;
10213 set_internal(iterator, '[[Map]]', map);
10214 set_internal(iterator, '[[MapNextIndex]]', 0);
10215 set_internal(iterator, '[[MapIterationKind]]', kind);
10216 return iterator;
10217 }
10218
10219 // 23.1.5.2 The %MapIteratorPrototype% Object
10220 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
10221 MapIterator.prototype = $MapIteratorPrototype$;
10222
10223 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
10224 define(
10225 $MapIteratorPrototype$, 'next',
10226 function next() {
10227 var o = strict(this);
10228 if (Type(o) !== 'object') throw TypeError();
10229 var m = o['[[Map]]'],
10230 index = o['[[MapNextIndex]]'],
10231 itemKind = o['[[MapIterationKind]]'],
10232 entries = m['[[MapData]]'];
10233 while (index < entries.keys.length) {
10234 var e = {key: entries.keys[index], value: entries.values[index]};
10235 index = index += 1;
10236 set_internal(o, '[[MapNextIndex]]', index);
10237 if (e.key !== empty) {
10238 if (itemKind === 'key') {
10239 return CreateIterResultObject(e.key, false);
10240 } else if (itemKind === 'value') {
10241 return CreateIterResultObject(e.value, false);
10242 } else {
10243 return CreateIterResultObject([e.key, e.value], false);
10244 }
10245 }
10246 }
10247 return CreateIterResultObject(undefined, true);
10248 });
10249
10250 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
10251 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
10252
10253 // 23.1.5.3 Properties of Map Iterator Instances
10254 }());
10255
10256 // ---------------------------------------
10257 // 23.2 Set Objects
10258 // ---------------------------------------
10259
10260 (function() {
10261 // 23.2.1 The Set Constructor
10262 // 23.2.1.1 Set ( [ iterable ] )
10263
10264 /** @constructor */
10265 function Set(/*iterable*/) {
10266 var set = strict(this);
10267 var iterable = arguments[0];
10268
10269 if (Type(set) !== 'object') throw TypeError();
10270 if ('[[SetData]]' in set) throw TypeError();
10271
10272 if (iterable !== undefined) {
10273 var adder = set['add'];
10274 if (!IsCallable(adder)) throw TypeError();
10275 var iter = GetIterator(ToObject(iterable));
10276 }
10277 set_internal(set, '[[SetData]]', []);
10278 if (iter === undefined) return set;
10279 while (true) {
10280 var next = IteratorStep(iter);
10281 if (next === false)
10282 return set;
10283 var nextValue = IteratorValue(next);
10284 adder.call(set, nextValue);
10285 }
10286
10287 return set;
10288 }
10289
10290 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
10291 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
10292 (new global.Set([1]).size !== 1))
10293 global.Set = Set;
10294
10295 function SetDataIndexOf(setData, key) {
10296 var i;
10297 if (key === key)
10298 return setData.indexOf(key);
10299 // Slow case for NaN
10300 for (i = 0; i < setData.length; i += 1)
10301 if (SameValueZero(setData[i], key)) return i;
10302 return -1;
10303 }
10304
10305 // 23.2.1.2 new Set ( ...argumentsList )
10306 // 23.2.2 Properties of the Set Constructor
10307
10308 // 23.2.2.1 Set.prototype
10309 var $SetPrototype$ = {};
10310 Set.prototype = $SetPrototype$;
10311
10312 // 23.2.2.2 get Set [ @@species ]
10313 // 23.2.3 Properties of the Set Prototype Object
10314
10315 // 23.2.3.1 Set.prototype.add (value )
10316 define(
10317 Set.prototype, 'add',
10318 function add(value) {
10319 var s = strict(this);
10320 if (Type(s) !== 'object') throw TypeError();
10321 if (!('[[SetData]]' in s)) throw TypeError();
10322 if (s['[[SetData]]'] === undefined) throw TypeError();
10323 if (SameValue(value, -0)) value = 0;
10324 var entries = s['[[SetData]]'];
10325 var i = SetDataIndexOf(entries, value);
10326 if (i < 0) i = s['[[SetData]]'].length;
10327 s['[[SetData]]'][i] = value;
10328
10329 return s;
10330 });
10331
10332 // 23.2.3.2 Set.prototype.clear ()
10333 define(
10334 Set.prototype, 'clear',
10335 function clear() {
10336 var s = strict(this);
10337 if (Type(s) !== 'object') throw TypeError();
10338 if (!('[[SetData]]' in s)) throw TypeError();
10339 if (s['[[SetData]]'] === undefined) throw TypeError();
10340 var entries = s['[[SetData]]'];
10341 entries.length = 0;
10342 return undefined;
10343 });
10344
10345 // 23.2.3.3 Set.prototype.constructor
10346 // 23.2.3.4 Set.prototype.delete ( value )
10347 define(
10348 Set.prototype, 'delete',
10349 function delete_(value) {
10350 var s = strict(this);
10351 if (Type(s) !== 'object') throw TypeError();
10352 if (!('[[SetData]]' in s)) throw TypeError();
10353 if (s['[[SetData]]'] === undefined) throw TypeError();
10354 var entries = s['[[SetData]]'];
10355 var i = SetDataIndexOf(entries, value);
10356 if (i < 0) return false;
10357 entries[i] = empty;
10358 return true;
10359 });
10360
10361 // 23.2.3.5 Set.prototype.entries ( )
10362 define(
10363 Set.prototype, 'entries',
10364 function entries() {
10365 var s = strict(this);
10366 if (Type(s) !== 'object') throw TypeError();
10367 return CreateSetIterator(s, 'key+value');
10368 });
10369
10370 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
10371 define(
10372 Set.prototype, 'forEach',
10373 function forEach(callbackfn/*, thisArg*/) {
10374 var thisArg = arguments[1];
10375
10376 var s = strict(this);
10377 if (Type(s) !== 'object') throw TypeError();
10378 if (!('[[SetData]]' in s)) throw TypeError();
10379 if (s['[[SetData]]'] === undefined) throw TypeError();
10380 var entries = s['[[SetData]]'];
10381
10382 if (!IsCallable(callbackfn)) {
10383 throw TypeError('First argument to forEach is not callable.');
10384 }
10385 for (var i = 0; i < entries.length; ++i) {
10386 if (entries[i] !== empty) {
10387 callbackfn.call(thisArg, entries[i], entries[i], s);
10388 }
10389 }
10390 });
10391
10392 // 23.2.3.7 Set.prototype.has ( value )
10393 define(
10394 Set.prototype, 'has',
10395 function has(key) {
10396 var s = strict(this);
10397 if (Type(s) !== 'object') throw TypeError();
10398 if (!('[[SetData]]' in s)) throw TypeError();
10399 if (s['[[SetData]]'] === undefined) throw TypeError();
10400 var entries = s['[[SetData]]'];
10401 return SetDataIndexOf(entries, key) !== -1;
10402 });
10403
10404 // 23.2.3.8 Set.prototype.keys ( )
10405 // See Set.prototype.values
10406
10407 // 23.2.3.9 get Set.prototype.size
10408 Object.defineProperty(
10409 Set.prototype, 'size', {
10410 get: function() {
10411 var s = strict(this);
10412 if (Type(s) !== 'object') throw TypeError();
10413 if (!('[[SetData]]' in s)) throw TypeError();
10414 if (s['[[SetData]]'] === undefined) throw TypeError();
10415 var entries = s['[[SetData]]'];
10416 var count = 0;
10417 for (var i = 0; i < entries.length; ++i) {
10418 if (entries[i] !== empty)
10419 count = count + 1;
10420 }
10421 return count;
10422 }
10423 });
10424
10425 // 23.2.3.10 Set.prototype.values ( )
10426 define(
10427 Set.prototype, 'values',
10428 function values() {
10429 var s = strict(this);
10430 if (Type(s) !== 'object') throw TypeError();
10431 return CreateSetIterator(s, 'value');
10432 });
10433 // NOTE: function name is still 'values':
10434 Set.prototype.keys = Set.prototype.values;
10435
10436 // 23.2.3.11 Set.prototype [@@iterator ] ( )
10437 define(
10438 Set.prototype, $$iterator,
10439 function() {
10440 var s = strict(this);
10441 if (Type(s) !== 'object') throw TypeError();
10442 return CreateSetIterator(s);
10443 });
10444
10445 // 23.2.3.12 Set.prototype [ @@toStringTag ]
10446 define(global.Set.prototype, $$toStringTag, 'Set');
10447
10448 // 23.2.4 Properties of Set Instances
10449 // 23.2.5 Set Iterator Objects
10450 /** @constructor */
10451 function SetIterator() {}
10452
10453 // 23.2.5.1 CreateSetIterator Abstract Operation
10454 function CreateSetIterator(set, kind) {
10455 if (Type(set) !== 'object') throw TypeError();
10456 if (!('[[SetData]]' in set)) throw TypeError();
10457 if (set['[[SetData]]'] === undefined) throw TypeError();
10458 var iterator = new SetIterator;
10459 set_internal(iterator, '[[IteratedSet]]', set);
10460 set_internal(iterator, '[[SetNextIndex]]', 0);
10461 set_internal(iterator, '[[SetIterationKind]]', kind);
10462 return iterator;
10463 }
10464
10465 // 23.2.5.2 The %SetIteratorPrototype% Object
10466 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
10467 SetIterator.prototype = $SetIteratorPrototype$;
10468
10469 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
10470 define(
10471 $SetIteratorPrototype$, 'next',
10472 function next() {
10473 var o = strict(this);
10474 if (Type(o) !== 'object') throw TypeError();
10475 var s = o['[[IteratedSet]]'],
10476 index = o['[[SetNextIndex]]'],
10477 itemKind = o['[[SetIterationKind]]'],
10478 entries = s['[[SetData]]'];
10479 while (index < entries.length) {
10480 var e = entries[index];
10481 index = index += 1;
10482 set_internal(o, '[[SetNextIndex]]', index);
10483 if (e !== empty) {
10484 if (itemKind === 'key+value')
10485 return CreateIterResultObject([e, e], false);
10486 return CreateIterResultObject(e, false);
10487 }
10488 }
10489 return CreateIterResultObject(undefined, true);
10490 });
10491
10492 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
10493 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
10494
10495 // 23.2.5.3 Properties of Set Iterator Instances
10496
10497 }());
10498
10499 // ---------------------------------------
10500 // 23.3 WeakMap Objects
10501 // ---------------------------------------
10502
10503 (function() {
10504 // 23.3.1 The WeakMap Constructor
10505 // 23.3.1.1 WeakMap ( [ iterable ] )
10506 /** @constructor */
10507 function WeakMap(/*iterable*/) {
10508 var map = strict(this);
10509 var iterable = arguments[0];
10510
10511 if (Type(map) !== 'object') throw TypeError();
10512 if ('[[WeakMapData]]' in map) throw TypeError();
10513
10514 if (iterable !== undefined) {
10515 var adder = map['set'];
10516 if (!IsCallable(adder)) throw TypeError();
10517 var iter = GetIterator(ToObject(iterable));
10518 }
10519 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
10520 if (iter === undefined) return map;
10521 while (true) {
10522 var next = IteratorStep(iter);
10523 if (next === false)
10524 return map;
10525 var nextValue = IteratorValue(next);
10526 if (Type(nextValue) !== 'object') throw TypeError();
10527 var k = nextValue[0];
10528 var v = nextValue[1];
10529 adder.call(map, k, v);
10530 }
10531
10532 return map;
10533 }
10534
10535 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
10536 global.WeakMap = WeakMap;
10537
10538 // 23.3.2 Properties of the WeakMap Constructor
10539 // 23.3.2.1 WeakMap.prototype
10540 var $WeakMapPrototype$ = {};
10541 WeakMap.prototype = $WeakMapPrototype$;
10542
10543
10544
10545 // 23.3.2.2 WeakMap[ @@create ] ( )
10546 // 23.3.3 Properties of the WeakMap Prototype Object
10547
10548 // 23.3.3.1 WeakMap.prototype.constructor
10549
10550 // 23.3.3.2 WeakMap.prototype.delete ( key )
10551 define(
10552 WeakMap.prototype, 'delete',
10553 function delete_(key) {
10554 var M = strict(this);
10555 if (Type(M) !== 'object') throw TypeError();
10556 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10557 if (Type(key) !== 'object') throw TypeError('Expected object');
10558 return M['[[WeakMapData]]'].remove(key);
10559 });
10560
10561 // 23.3.3.3 WeakMap.prototype.get ( key )
10562 define(
10563 WeakMap.prototype, 'get',
10564 function get(key, defaultValue) {
10565 var M = strict(this);
10566 if (Type(M) !== 'object') throw TypeError();
10567 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10568 if (Type(key) !== 'object') throw TypeError('Expected object');
10569 return M['[[WeakMapData]]'].get(key, defaultValue);
10570 });
10571
10572 // 23.3.3.4 WeakMap.prototype.has ( key )
10573 define(
10574 WeakMap.prototype, 'has',
10575 function has(key) {
10576 var M = strict(this);
10577 if (Type(M) !== 'object') throw TypeError();
10578 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10579 if (Type(key) !== 'object') throw TypeError('Expected object');
10580 return M['[[WeakMapData]]'].has(key);
10581 });
10582
10583 // 23.3.3.5 WeakMap.prototype.set ( key , value )
10584 define(
10585 WeakMap.prototype, 'set',
10586 function set(key, value) {
10587 var M = strict(this);
10588 if (Type(M) !== 'object') throw TypeError();
10589 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10590 if (Type(key) !== 'object') throw TypeError('Expected object');
10591 M['[[WeakMapData]]'].set(key, value);
10592 return M;
10593 });
10594
10595 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
10596 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
10597
10598 // 23.3.4 Properties of WeakMap Instances
10599
10600 // Polyfills for incomplete native implementations:
10601 (function() {
10602 var wm = new global.WeakMap();
10603 var orig = global.WeakMap.prototype.set;
10604 define(global.WeakMap.prototype, 'set', function set() {
10605 orig.apply(this, arguments);
10606 return this;
10607 }, wm.set({}, 0) !== wm);
10608 }());
10609 }());
10610
10611 // ---------------------------------------
10612 // 23.4 WeakSet Objects
10613 // ---------------------------------------
10614
10615 (function() {
10616 // 23.4.1 The WeakSet Constructor
10617 // 23.4.1.1 WeakSet ( [ iterable ] )
10618 /** @constructor */
10619 function WeakSet(/*iterable*/) {
10620 var set = strict(this);
10621 var iterable = arguments[0];
10622
10623 if (Type(set) !== 'object') throw TypeError();
10624 if ('[[WeakSetData]]' in set) throw TypeError();
10625
10626 if (iterable !== undefined) {
10627 var adder = set['add'];
10628 if (!IsCallable(adder)) throw TypeError();
10629 var iter = GetIterator(ToObject(iterable));
10630 }
10631 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
10632 if (iter === undefined) return set;
10633 while (true) {
10634 var next = IteratorStep(iter);
10635 if (next === false)
10636 return set;
10637 var nextValue = IteratorValue(next);
10638 adder.call(set, nextValue);
10639 }
10640
10641 return set;
10642 }
10643
10644 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
10645 global.WeakSet = WeakSet;
10646
10647 // 23.4.2 Properties of the WeakSet Constructor
10648 // 23.4.2.1 WeakSet.prototype
10649 var $WeakSetPrototype$ = {};
10650 WeakSet.prototype = $WeakSetPrototype$;
10651
10652 // 23.4.3 Properties of the WeakSet Prototype Object
10653 // 23.4.3.1 WeakSet.prototype.add (value )
10654 define(
10655 WeakSet.prototype, 'add',
10656 function add(value) {
10657 var S = strict(this);
10658 if (Type(S) !== 'object') throw TypeError();
10659 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10660 if (Type(value) !== 'object') throw TypeError('Expected object');
10661 S['[[WeakSetData]]'].set(value, true);
10662 return S;
10663 });
10664
10665 // 23.4.3.2 WeakSet.prototype.constructor
10666 // 23.4.3.3 WeakSet.prototype.delete ( value )
10667 define(
10668 WeakSet.prototype, 'delete',
10669 function delete_(value) {
10670 var S = strict(this);
10671 if (Type(S) !== 'object') throw TypeError();
10672 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10673 if (Type(value) !== 'object') throw TypeError('Expected object');
10674 return S['[[WeakSetData]]'].remove(value);
10675 });
10676
10677 // 23.4.3.4 WeakSet.prototype.has ( value )
10678 define(
10679 WeakSet.prototype, 'has',
10680 function has(key) {
10681 var S = strict(this);
10682 if (Type(S) !== 'object') throw TypeError();
10683 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10684 if (Type(key) !== 'object') throw TypeError('Expected object');
10685 return S['[[WeakSetData]]'].has(key);
10686 });
10687
10688 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
10689 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
10690
10691 // 23.4.4 Properties of WeakSet Instances
10692
10693 // Polyfills for incomplete native implementations:
10694 (function() {
10695 var ws = new global.WeakSet();
10696 var orig = global.WeakSet.prototype.add;
10697 define(global.WeakSet.prototype, 'add', function add() {
10698 orig.apply(this, arguments);
10699 return this;
10700 }, ws.add({}) !== ws);
10701 }());
10702 }());
10703
10704 // ---------------------------------------
10705 // 24 Structured Data
10706 // ---------------------------------------
10707
10708 // ---------------------------------------
10709 // 24.1 ArrayBuffer Objects
10710 // ---------------------------------------
10711
10712 // See typedarray.js for TypedArray polyfill
10713
10714 (function() {
10715 if (!('ArrayBuffer' in global))
10716 return;
10717
10718 // 24.1.1 Abstract Operations For ArrayBuffer Objects
10719 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
10720 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
10721 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
10722 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
10723 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
10724 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
10725 // 24.1.2 The ArrayBuffer Constructor
10726 // 24.1.2.1 ArrayBuffer( length )
10727 // 24.1.3 Properties of the ArrayBuffer Constructor
10728
10729 // 24.1.3.1 ArrayBuffer.isView ( arg )
10730 define(
10731 ArrayBuffer, 'isView',
10732 function isView(arg) {
10733 if (Type(arg) !== 'object') return false;
10734 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
10735 return false;
10736 });
10737
10738 // 24.1.3.2 ArrayBuffer.prototype
10739 // 24.1.3.3 get ArrayBuffer [ @@species ]
10740 // 24.1.4 Properties of the ArrayBuffer Prototype Object
10741 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
10742 // 24.1.4.2 ArrayBuffer.prototype.constructor
10743 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
10744
10745 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
10746 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
10747
10748 // 24.1.5 Properties of the ArrayBuffer Instances
10749 }());
10750
10751 // ---------------------------------------
10752 // 24.2 DataView Objects
10753 // ---------------------------------------
10754
10755 // See typedarray.js for TypedArray polyfill
10756
10757 (function() {
10758 if (!('DataView' in global))
10759 return;
10760
10761 // 24.2.1 Abstract Operations For DataView Objects
10762 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
10763 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
10764 // 24.2.2 The DataView Constructor
10765 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
10766 // 24.2.3 Properties of the DataView Constructor
10767 // 24.2.3.1 DataView.prototype
10768 // 24.2.4 Properties of the DataView Prototype Object
10769 // 24.2.4.1 get DataView.prototype.buffer
10770 // 24.2.4.2 get DataView.prototype.byteLength
10771 // 24.2.4.3 get DataView.prototype.byteOffset
10772 // 24.2.4.4 DataView.prototype.constructor
10773 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
10774 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
10775 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
10776 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
10777 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
10778 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
10779 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
10780 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
10781 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
10782 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
10783 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
10784 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
10785 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
10786 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
10787 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
10788 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
10789
10790 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
10791 define(DataView.prototype, $$toStringTag, 'DataView');
10792
10793 // 24.2.5 Properties of DataView Instances
10794 }());
10795
10796 // ---------------------------------------
10797 // 24.3 The JSON Object
10798 // ---------------------------------------
10799
10800 // 24.3.1 JSON.parse ( text [ , reviver ] )
10801 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
10802 // 24.3.3 JSON [ @@toStringTag ]
10803 define(JSON, $$toStringTag, 'JSON');
10804
10805 // ---------------------------------------
10806 // 25.1 Iteration
10807 // ---------------------------------------
10808
10809 // 25.1.1 Common Iteration Interfaces
10810 // 25.1.1.1 The Iterable Interface
10811 // 25.1.1.2 The Iterator Interface
10812 // 25.1.1.3 The IteratorResult Interface
10813
10814 // 25.1.2 The %IteratorPrototype% Object
10815 // Defined earlier, so other prototypes can reference it.
10816 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
10817 define($IteratorPrototype$, $$iterator, function() {
10818 return this;
10819 });
10820
10821
10822 // ---------------------------------------
10823 // 25.4 Promise Objects
10824 // ---------------------------------------
10825
10826 (function() {
10827 // 25.4 Promise Objects
10828
10829 // 25.4.1 Promise Abstract Operations
10830
10831 // 25.4.1.1 PromiseCapability Records
10832 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
10833
10834 function IfAbruptRejectPromise(value, capability) {
10835 var rejectResult = capability['[[Reject]]'].call(undefined, value);
10836 return capability['[[Promise]]'];
10837 }
10838
10839 // 25.4.1.2 PromiseReaction Records
10840
10841 // 25.4.1.3 CreateResolvingFunctions ( promise )
10842
10843 function CreateResolvingFunctions(promise) {
10844 var alreadyResolved = {'[[value]]': false};
10845 var resolve = PromiseResolveFunction();
10846 set_internal(resolve, '[[Promise]]', promise);
10847 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
10848 var reject = PromiseRejectFunction();
10849 set_internal(reject, '[[Promise]]', promise);
10850 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
10851 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
10852 }
10853
10854 // 25.4.1.3.1 Promise Reject Functions
10855
10856 function PromiseRejectFunction() {
10857 var F = function(reason) {
10858 console.assert(Type(F['[[Promise]]']) === 'object');
10859 var promise = F['[[Promise]]'];
10860 var alreadyResolved = F['[[AlreadyResolved]]'];
10861 if (alreadyResolved['[[value]]']) return undefined;
10862 set_internal(alreadyResolved, '[[value]]', true);
10863 return RejectPromise(promise, reason);
10864 };
10865 return F;
10866 }
10867
10868 // 25.4.1.3.2 Promise Resolve Functions
10869
10870 function PromiseResolveFunction() {
10871 var F = function(resolution) {
10872 console.assert(Type(F['[[Promise]]']) === 'object');
10873 var promise = F['[[Promise]]'];
10874 var alreadyResolved = F['[[AlreadyResolved]]'];
10875 if (alreadyResolved['[[value]]']) return undefined;
10876 set_internal(alreadyResolved, '[[value]]', true);
10877
10878 if (SameValue(resolution, promise)) {
10879 var selfResolutionError = TypeError();
10880 return RejectPromise(promise, selfResolutionError);
10881 }
10882 if (Type(resolution) !== 'object')
10883 return FulfillPromise(promise, resolution);
10884 try {
10885 var then = resolution['then'];
10886 } catch(then) {
10887 return RejectPromise(promise, then);
10888 }
10889 if (!IsCallable(then))
10890 return FulfillPromise(promise, resolution);
10891 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
10892 return undefined;
10893 };
10894 return F;
10895 }
10896
10897 // 25.4.1.4 FulfillPromise ( promise, value )
10898
10899 function FulfillPromise(promise, value) {
10900 console.assert(promise['[[PromiseState]]'] === 'pending');
10901 var reactions = promise['[[PromiseFulfillReactions]]'];
10902 set_internal(promise, '[[PromiseResult]]', value);
10903 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
10904 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
10905 set_internal(promise, '[[PromiseState]]', 'fulfilled');
10906 return TriggerPromiseReactions(reactions, value);
10907 }
10908
10909 // 25.4.1.5 NewPromiseCapability ( C )
10910
10911 function NewPromiseCapability(c) {
10912 // To keep Promise hermetic, this doesn't look much like the spec.
10913 return CreatePromiseCapabilityRecord(undefined, c);
10914 }
10915
10916 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
10917
10918 function CreatePromiseCapabilityRecord(promise, constructor) {
10919 // To keep Promise hermetic, this doesn't look much like the spec.
10920 console.assert(IsConstructor(constructor));
10921 var promiseCapability = {};
10922 set_internal(promiseCapability, '[[Promise]]', promise);
10923 set_internal(promiseCapability, '[[Resolve]]', undefined);
10924 set_internal(promiseCapability, '[[Reject]]', undefined);
10925 var executor = GetCapabilitiesExecutor();
10926 set_internal(executor, '[[Capability]]', promiseCapability);
10927
10928 // NOTE: Differs from spec; object is constructed here
10929 var constructorResult = promise = new constructor(executor);
10930 set_internal(promiseCapability, '[[Promise]]', promise);
10931
10932 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
10933 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
10934 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
10935 return promiseCapability;
10936 }
10937
10938 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
10939
10940 function GetCapabilitiesExecutor() {
10941 var F = function(resolve, reject) {
10942 console.assert(F['[[Capability]]']);
10943 var promiseCapability = F['[[Capability]]'];
10944 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
10945 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
10946 set_internal(promiseCapability, '[[Resolve]]', resolve);
10947 set_internal(promiseCapability, '[[Reject]]', reject);
10948 return undefined;
10949 };
10950 return F;
10951 }
10952
10953 // 25.4.1.6 IsPromise ( x )
10954
10955 function IsPromise(x) {
10956 if (Type(x) !== 'object') return false;
10957 if (!('[[PromiseState]]' in x)) return false;
10958 if (x['[[PromiseState]]'] === undefined) return false;
10959 return true;
10960 }
10961
10962 // 25.4.1.7 RejectPromise ( promise, reason )
10963
10964 function RejectPromise(promise, reason) {
10965 console.assert(promise['[[PromiseState]]'] === 'pending');
10966 var reactions = promise['[[PromiseRejectReactions]]'];
10967 set_internal(promise, '[[PromiseResult]]', reason);
10968 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
10969 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
10970 set_internal(promise, '[[PromiseState]]', 'rejected');
10971 return TriggerPromiseReactions(reactions, reason);
10972 }
10973
10974 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
10975
10976 function TriggerPromiseReactions(reactions, argument) {
10977 for (var i = 0, len = reactions.length; i < len; ++i)
10978 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
10979 return undefined;
10980 }
10981
10982 // 25.4.2 Promise Jobs
10983
10984 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
10985
10986 function PromiseReactionJob(reaction, argument) {
10987 var promiseCapability = reaction['[[Capabilities]]'];
10988 var handler = reaction['[[Handler]]'];
10989 var handlerResult, status;
10990 try {
10991 if (handler === 'Identity') handlerResult = argument;
10992 else if (handler === 'Thrower') throw argument;
10993 else handlerResult = handler.call(undefined, argument);
10994 } catch (handlerResult) {
10995 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
10996 NextJob(status); return;
10997 }
10998 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
10999 NextJob(status);
11000 }
11001
11002 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
11003
11004 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
11005 // SPEC BUG: promise vs. promiseToResolve
11006 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
11007 try {
11008 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
11009 resolvingFunctions['[[Reject]]']);
11010 } catch (thenCallResult) {
11011 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
11012 NextJob(status); return;
11013 }
11014 NextJob(thenCallResult);
11015 }
11016
11017 // 25.4.3 The Promise Constructor
11018
11019 // 25.4.3.1 Promise ( executor )
11020
11021 function Promise(executor) {
11022 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
11023 Object.defineProperty(this, '[[PromiseState]]', config);
11024 Object.defineProperty(this, '[[PromiseConstructor]]', config);
11025 Object.defineProperty(this, '[[PromiseResult]]', config);
11026 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
11027 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
11028
11029 var promise = this;
11030 if (Type(promise) !== 'object') throw new TypeError();
11031 if (!('[[PromiseState]]' in promise)) throw TypeError();
11032 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
11033 if (!IsCallable(executor)) throw TypeError();
11034
11035 set_internal(promise, '[[PromiseConstructor]]', Promise);
11036
11037 return InitializePromise(promise, executor);
11038 }
11039
11040 // 25.4.3.1.1 InitializePromise ( promise, executor )
11041
11042 function InitializePromise(promise, executor) {
11043 console.assert('[[PromiseState]]' in promise);
11044 console.assert(IsCallable(executor));
11045 set_internal(promise, '[[PromiseState]]', 'pending');
11046 set_internal(promise, '[[PromiseFulfillReactions]]', []);
11047 set_internal(promise, '[[PromiseRejectReactions]]', []);
11048 var resolvingFunctions = CreateResolvingFunctions(promise);
11049 try {
11050 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
11051 resolvingFunctions['[[Reject]]']);
11052 } catch (completion) {
11053 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
11054 }
11055 return promise;
11056 }
11057
11058 // 25.4.4 Properties of the Promise Constructor
11059 // 25.4.4.1 Promise.all ( iterable )
11060
11061 define(Promise, 'all', function all(iterable) {
11062 var c = strict(this);
11063 var promiseCapability = NewPromiseCapability(c);
11064 try {
11065 var iterator = GetIterator(iterable);
11066 } catch (value) {
11067 promiseCapability['[[Reject]]'].call(undefined, value);
11068 return promiseCapability['[[Promise]]'];
11069 }
11070 var values = [];
11071 var remainingElementsCount = { value: 1 };
11072 var index = 0;
11073 while (true) {
11074 try {
11075 var next = IteratorStep(iterator);
11076 } catch (value) {
11077 promiseCapability['[[Reject]]'].call(undefined, value);
11078 return promiseCapability['[[Promise]]'];
11079 }
11080 if (!next) {
11081 remainingElementsCount.value -= 1;
11082 if (remainingElementsCount.value === 0) {
11083 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
11084
11085
11086 }
11087 return promiseCapability['[[Promise]]'];
11088 }
11089 try {
11090 var nextValue = IteratorValue(next);
11091 } catch (value) {
11092 promiseCapability['[[Reject]]'].call(undefined, value);
11093 return promiseCapability['[[Promise]]'];
11094 }
11095 try {
11096 var nextPromise = c.resolve(nextValue);
11097 } catch (value) {
11098 promiseCapability['[[Reject]]'].call(undefined, value);
11099 return promiseCapability['[[Promise]]'];
11100 }
11101 var resolveElement = PromiseAllResolveElementFunction();
11102 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
11103 set_internal(resolveElement, '[[Index]]', index);
11104 set_internal(resolveElement, '[[Values]]', values);
11105 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
11106 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
11107 remainingElementsCount.value += 1;
11108 try {
11109 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
11110 } catch (value) {
11111 promiseCapability['[[Reject]]'].call(undefined, value);
11112 return promiseCapability['[[Promise]]'];
11113 }
11114 index += 1;
11115 }
11116 });
11117
11118 // 25.4.4.1.1 Promise.all Resolve Element Functions
11119
11120 function PromiseAllResolveElementFunction() {
11121 var F = function(x) {
11122 var alreadyCalled = F['[[AlreadyCalled]]'];
11123 if (alreadyCalled.value) return undefined;
11124 alreadyCalled.value = true;
11125 var index = F['[[Index]]'];
11126 var values = F['[[Values]]'];
11127 var promiseCapability = F['[[Capabilities]]'];
11128 var remainingElementsCount = F['[[RemainingElements]]'];
11129 try {
11130 values[index] = x;
11131 } catch (result) {
11132 promiseCapability['[[Reject]]'].call(undefined, result);
11133 return promiseCapability['[[Promise]]'];
11134 }
11135 remainingElementsCount.value -= 1;
11136 if (remainingElementsCount.value === 0)
11137 return promiseCapability['[[Resolve]]'].call(undefined, values);
11138 return undefined;
11139 };
11140 return F;
11141 }
11142
11143 // 25.4.4.2 Promise.prototype
11144
11145 Promise.prototype = {};
11146
11147 // 25.4.4.3 Promise.race ( iterable )
11148
11149 define(Promise, 'race', function race(iterable) {
11150 var c = strict(this);
11151 var promiseCapability = NewPromiseCapability(c);
11152 try {
11153 var iterator = GetIterator(iterable);
11154 } catch (value) {
11155 promiseCapability['[[Reject]]'].call(undefined, value);
11156 return promiseCapability['[[Promise]]'];
11157 }
11158 while (true) {
11159 try {
11160 var next = IteratorStep(iterator);
11161 } catch (value) {
11162 promiseCapability['[[Reject]]'].call(undefined, value);
11163 return promiseCapability['[[Promise]]'];
11164 }
11165 if (!next) return promiseCapability['[[Promise]]'];
11166 try {
11167 var nextValue = IteratorValue(next);
11168 } catch (value) {
11169 promiseCapability['[[Reject]]'].call(undefined, value);
11170 return promiseCapability['[[Promise]]'];
11171 }
11172 try {
11173 var nextPromise = c.resolve(nextValue);
11174 } catch (value) {
11175 promiseCapability['[[Reject]]'].call(undefined, value);
11176 return promiseCapability['[[Promise]]'];
11177 }
11178 try {
11179 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
11180 } catch (value) {
11181 promiseCapability['[[Reject]]'].call(undefined, value);
11182 return promiseCapability['[[Promise]]'];
11183 }
11184 }
11185 });
11186
11187 // 25.4.4.4 Promise.reject ( r )
11188
11189 define(Promise, 'reject', function reject(r) {
11190 var c = strict(this);
11191 var promiseCapability = NewPromiseCapability(c);
11192 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
11193 return promiseCapability['[[Promise]]'];
11194 });
11195
11196 // 25.4.4.5 Promise.resolve ( x )
11197
11198 define(Promise, 'resolve', function resolve(x) {
11199 var c = strict(this);
11200 if (IsPromise(x)) {
11201 var constructor = x['[[PromiseConstructor]]'];
11202 if (SameValue(constructor, c)) return x;
11203 }
11204 var promiseCapability = NewPromiseCapability(c);
11205 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
11206 return promiseCapability['[[Promise]]'];
11207 });
11208
11209 // 25.4.4.6 Promise [ @@create ] ( )
11210 // 25.4.4.6.1 AllocatePromise ( constructor )
11211 // 25.4.5 Properties of the Promise Prototype Object
11212 // 25.4.5.1 Promise.prototype.catch ( onRejected )
11213
11214 define(Promise.prototype, 'catch', function catch_(onRejected) {
11215 var promise = this;
11216 return promise.then(undefined, onRejected);
11217 });
11218
11219 // 25.4.5.2 Promise.prototype.constructor
11220
11221 Promise.prototype.constructor = Promise;
11222
11223 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
11224
11225 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
11226 var promise = this;
11227 if (!IsPromise(promise)) throw TypeError();
11228 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
11229 if (!IsCallable(onRejected)) onRejected = 'Thrower';
11230 var c = promise.constructor;
11231 var promiseCapability = NewPromiseCapability(c);
11232 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
11233 '[[Handler]]': onFulfilled };
11234 var rejectReaction = { '[[Capabilities]]': promiseCapability,
11235 '[[Handler]]': onRejected };
11236 if (promise['[[PromiseState]]'] === 'pending') {
11237 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
11238 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
11239 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
11240 var value = promise['[[PromiseResult]]'];
11241 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
11242 } else if (promise['[[PromiseState]]'] === 'rejected') {
11243 var reason = promise['[[PromiseResult]]'];
11244 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
11245 }
11246 return promiseCapability['[[Promise]]'];
11247 });
11248
11249 // 25.4.6 Properties of Promise Instances
11250
11251 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
11252 global.Promise = Promise;
11253
11254 // Patch early Promise.cast vs. Promise.resolve implementations
11255 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
11256 }());
11257
11258 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
11259 define(Promise.prototype, $$toStringTag, 'Promise');
11260
11261 // ---------------------------------------
11262 // 26 Reflection
11263 // ---------------------------------------
11264
11265 (function() {
11266 // 26.1 The Reflect Object
11267 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
11268 global.Reflect = {};
11269
11270 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
11271 define(
11272 Reflect, 'apply',
11273 function apply(target, thisArgument, argumentsList) {
11274 if (!IsCallable(target)) throw TypeError();
11275 return Function.prototype.apply.call(target, thisArgument, argumentsList);
11276 });
11277
11278 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
11279 define(
11280 Reflect, 'construct',
11281 function construct(target, argumentsList) {
11282 return __cons(target, argumentsList);
11283 });
11284
11285 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
11286 define(
11287 Reflect, 'defineProperty',
11288 function defineProperty(target, propertyKey, attributes) {
11289 try {
11290 Object.defineProperty(target, propertyKey, attributes);
11291 return true;
11292 } catch (_) {
11293 return false;
11294 }
11295 });
11296
11297 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
11298 define(
11299 Reflect, 'deleteProperty',
11300 function deleteProperty(target,name) {
11301 try {
11302 delete target[name];
11303 return !HasOwnProperty(target, name);
11304 } catch (_) {
11305 return false;
11306 }
11307 });
11308
11309 // 26.1.5 Reflect.enumerate ( target )
11310 define(
11311 Reflect, 'enumerate',
11312 function enumerate(target) {
11313 target = ToObject(target);
11314 var iterator = Enumerate(target);
11315 return iterator;
11316 });
11317
11318 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
11319 define(
11320 Reflect, 'get',
11321 function get(target, name, receiver) {
11322 target = ToObject(target);
11323 name = String(name);
11324 receiver = (receiver === undefined) ? target : ToObject(receiver);
11325 var desc = getPropertyDescriptor(target, name);
11326 if (desc && 'get' in desc)
11327 return Function.prototype.call.call(desc['get'], receiver);
11328 return target[name];
11329 });
11330
11331 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
11332 define(
11333 Reflect, 'getOwnPropertyDescriptor',
11334 Object.getOwnPropertyDescriptor);
11335
11336 // 26.1.8 Reflect.getPrototypeOf ( target )
11337 define(
11338 Reflect, 'getPrototypeOf',
11339 Object.getPrototypeOf);
11340
11341 // 26.1.9 Reflect.has ( target, propertyKey )
11342 define(
11343 Reflect, 'has',
11344 function has(target,name) {
11345 return String(name) in ToObject(target);
11346 });
11347
11348 // 26.1.10 Reflect.isExtensible (target)
11349 define(
11350 Reflect, 'isExtensible',
11351 Object.isExtensible);
11352
11353 // 26.1.11 Reflect.ownKeys ( target )
11354 define(
11355 Reflect, 'ownKeys',
11356 function ownKeys(target) {
11357 var obj = ToObject(target);
11358 return Object.getOwnPropertyNames(obj);
11359 });
11360
11361 // 26.1.12 Reflect.preventExtensions ( target )
11362 define(
11363 Reflect, 'preventExtensions',
11364 function preventExtensions(target) {
11365 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
11366 });
11367
11368 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
11369 define(
11370 Reflect, 'set',
11371 function set(target, name, value, receiver) {
11372 target = ToObject(target);
11373 name = String(name);
11374 receiver = (receiver === undefined) ? target : ToObject(receiver);
11375 var desc = getPropertyDescriptor(target, name);
11376 try {
11377 if (desc && 'set' in desc)
11378 Function.prototype.call.call(desc['set'], receiver, value);
11379 else
11380 target[name] = value;
11381 return true;
11382 } catch (_) {
11383 return false;
11384 }
11385 });
11386
11387 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
11388 define(
11389 Reflect, 'setPrototypeOf',
11390 function setPrototypeOf(target, proto) {
11391 try {
11392 target.__proto__ = proto;
11393 return Reflect.getPrototypeOf(target) === proto;
11394 } catch(_) {
11395 return false;
11396 }
11397 });
11398
11399 }());
11400
11401 // ---------------------------------------
11402 // 26.2 Proxy Objects
11403 // ---------------------------------------
11404
11405 // Not polyfillable.
11406
11407 }(self));
11408
11409 // This helper is defined outside the main scope so that the use of
11410 // 'eval' does not taint the scope for minifiers.
11411 function __cons(t, a) {
11412 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
11413 }
11414 </script>
11415 <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){
11416 'use strict'
11417
11418 exports.byteLength = byteLength
11419 exports.toByteArray = toByteArray
11420 exports.fromByteArray = fromByteArray
11421
11422 var lookup = []
11423 var revLookup = []
11424 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
11425
11426 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
11427 for (var i = 0, len = code.length; i < len; ++i) {
11428 lookup[i] = code[i]
11429 revLookup[code.charCodeAt(i)] = i
11430 }
11431
11432 revLookup['-'.charCodeAt(0)] = 62
11433 revLookup['_'.charCodeAt(0)] = 63
11434
11435 function placeHoldersCount (b64) {
11436 var len = b64.length
11437 if (len % 4 > 0) {
11438 throw new Error('Invalid string. Length must be a multiple of 4')
11439 }
11440
11441 // the number of equal signs (place holders)
11442 // if there are two placeholders, than the two characters before it
11443 // represent one byte
11444 // if there is only one, then the three characters before it represent 2 bytes
11445 // this is just a cheap hack to not do indexOf twice
11446 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
11447 }
11448
11449 function byteLength (b64) {
11450 // base64 is 4/3 + up to two characters of the original data
11451 return b64.length * 3 / 4 - placeHoldersCount(b64)
11452 }
11453
11454 function toByteArray (b64) {
11455 var i, j, l, tmp, placeHolders, arr
11456 var len = b64.length
11457 placeHolders = placeHoldersCount(b64)
11458
11459 arr = new Arr(len * 3 / 4 - placeHolders)
11460
11461 // if there are placeholders, only get up to the last complete 4 chars
11462 l = placeHolders > 0 ? len - 4 : len
11463
11464 var L = 0
11465
11466 for (i = 0, j = 0; i < l; i += 4, j += 3) {
11467 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
11468 arr[L++] = (tmp >> 16) & 0xFF
11469 arr[L++] = (tmp >> 8) & 0xFF
11470 arr[L++] = tmp & 0xFF
11471 }
11472
11473 if (placeHolders === 2) {
11474 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
11475 arr[L++] = tmp & 0xFF
11476 } else if (placeHolders === 1) {
11477 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
11478 arr[L++] = (tmp >> 8) & 0xFF
11479 arr[L++] = tmp & 0xFF
11480 }
11481
11482 return arr
11483 }
11484
11485 function tripletToBase64 (num) {
11486 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
11487 }
11488
11489 function encodeChunk (uint8, start, end) {
11490 var tmp
11491 var output = []
11492 for (var i = start; i < end; i += 3) {
11493 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
11494 output.push(tripletToBase64(tmp))
11495 }
11496 return output.join('')
11497 }
11498
11499 function fromByteArray (uint8) {
11500 var tmp
11501 var len = uint8.length
11502 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
11503 var output = ''
11504 var parts = []
11505 var maxChunkLength = 16383 // must be multiple of 3
11506
11507 // go through the array every three bytes, we'll deal with trailing stuff later
11508 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
11509 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
11510 }
11511
11512 // pad the end with zeros, but make sure to not forget the extra bytes
11513 if (extraBytes === 1) {
11514 tmp = uint8[len - 1]
11515 output += lookup[tmp >> 2]
11516 output += lookup[(tmp << 4) & 0x3F]
11517 output += '=='
11518 } else if (extraBytes === 2) {
11519 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
11520 output += lookup[tmp >> 10]
11521 output += lookup[(tmp >> 4) & 0x3F]
11522 output += lookup[(tmp << 2) & 0x3F]
11523 output += '='
11524 }
11525
11526 parts.push(output)
11527
11528 return parts.join('')
11529 }
11530
11531 },{}],2:[function(require,module,exports){
11532 /*!
11533 * The buffer module from node.js, for the browser.
11534 *
11535 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
11536 * @license MIT
11537 */
11538 /* eslint-disable no-proto */
11539
11540 'use strict'
11541
11542 var base64 = require('base64-js')
11543 var ieee754 = require('ieee754')
11544
11545 exports.Buffer = Buffer
11546 exports.SlowBuffer = SlowBuffer
11547 exports.INSPECT_MAX_BYTES = 50
11548
11549 var K_MAX_LENGTH = 0x7fffffff
11550 exports.kMaxLength = K_MAX_LENGTH
11551
11552 /**
11553 * If `Buffer.TYPED_ARRAY_SUPPORT`:
11554 * === true Use Uint8Array implementation (fastest)
11555 * === false Print warning and recommend using `buffer` v4.x which has an Object
11556 * implementation (most compatible, even IE6)
11557 *
11558 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
11559 * Opera 11.6+, iOS 4.2+.
11560 *
11561 * We report that the browser does not support typed arrays if the are not subclassable
11562 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
11563 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
11564 * for __proto__ and has a buggy typed array implementation.
11565 */
11566 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
11567
11568 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
11569 typeof console.error === 'function') {
11570 console.error(
11571 'This browser lacks typed array (Uint8Array) support which is required by ' +
11572 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
11573 )
11574 }
11575
11576 function typedArraySupport () {
11577 // Can typed array instances can be augmented?
11578 try {
11579 var arr = new Uint8Array(1)
11580 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
11581 return arr.foo() === 42
11582 } catch (e) {
11583 return false
11584 }
11585 }
11586
11587 function createBuffer (length) {
11588 if (length > K_MAX_LENGTH) {
11589 throw new RangeError('Invalid typed array length')
11590 }
11591 // Return an augmented `Uint8Array` instance
11592 var buf = new Uint8Array(length)
11593 buf.__proto__ = Buffer.prototype
11594 return buf
11595 }
11596
11597 /**
11598 * The Buffer constructor returns instances of `Uint8Array` that have their
11599 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
11600 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
11601 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
11602 * returns a single octet.
11603 *
11604 * The `Uint8Array` prototype remains unmodified.
11605 */
11606
11607 function Buffer (arg, encodingOrOffset, length) {
11608 // Common case.
11609 if (typeof arg === 'number') {
11610 if (typeof encodingOrOffset === 'string') {
11611 throw new Error(
11612 'If encoding is specified then the first argument must be a string'
11613 )
11614 }
11615 return allocUnsafe(arg)
11616 }
11617 return from(arg, encodingOrOffset, length)
11618 }
11619
11620 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
11621 if (typeof Symbol !== 'undefined' && Symbol.species &&
11622 Buffer[Symbol.species] === Buffer) {
11623 Object.defineProperty(Buffer, Symbol.species, {
11624 value: null,
11625 configurable: true,
11626 enumerable: false,
11627 writable: false
11628 })
11629 }
11630
11631 Buffer.poolSize = 8192 // not used by this implementation
11632
11633 function from (value, encodingOrOffset, length) {
11634 if (typeof value === 'number') {
11635 throw new TypeError('"value" argument must not be a number')
11636 }
11637
11638 if (value instanceof ArrayBuffer) {
11639 return fromArrayBuffer(value, encodingOrOffset, length)
11640 }
11641
11642 if (typeof value === 'string') {
11643 return fromString(value, encodingOrOffset)
11644 }
11645
11646 return fromObject(value)
11647 }
11648
11649 /**
11650 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
11651 * if value is a number.
11652 * Buffer.from(str[, encoding])
11653 * Buffer.from(array)
11654 * Buffer.from(buffer)
11655 * Buffer.from(arrayBuffer[, byteOffset[, length]])
11656 **/
11657 Buffer.from = function (value, encodingOrOffset, length) {
11658 return from(value, encodingOrOffset, length)
11659 }
11660
11661 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
11662 // https://github.com/feross/buffer/pull/148
11663 Buffer.prototype.__proto__ = Uint8Array.prototype
11664 Buffer.__proto__ = Uint8Array
11665
11666 function assertSize (size) {
11667 if (typeof size !== 'number') {
11668 throw new TypeError('"size" argument must be a number')
11669 } else if (size < 0) {
11670 throw new RangeError('"size" argument must not be negative')
11671 }
11672 }
11673
11674 function alloc (size, fill, encoding) {
11675 assertSize(size)
11676 if (size <= 0) {
11677 return createBuffer(size)
11678 }
11679 if (fill !== undefined) {
11680 // Only pay attention to encoding if it's a string. This
11681 // prevents accidentally sending in a number that would
11682 // be interpretted as a start offset.
11683 return typeof encoding === 'string'
11684 ? createBuffer(size).fill(fill, encoding)
11685 : createBuffer(size).fill(fill)
11686 }
11687 return createBuffer(size)
11688 }
11689
11690 /**
11691 * Creates a new filled Buffer instance.
11692 * alloc(size[, fill[, encoding]])
11693 **/
11694 Buffer.alloc = function (size, fill, encoding) {
11695 return alloc(size, fill, encoding)
11696 }
11697
11698 function allocUnsafe (size) {
11699 assertSize(size)
11700 return createBuffer(size < 0 ? 0 : checked(size) | 0)
11701 }
11702
11703 /**
11704 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
11705 * */
11706 Buffer.allocUnsafe = function (size) {
11707 return allocUnsafe(size)
11708 }
11709 /**
11710 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
11711 */
11712 Buffer.allocUnsafeSlow = function (size) {
11713 return allocUnsafe(size)
11714 }
11715
11716 function fromString (string, encoding) {
11717 if (typeof encoding !== 'string' || encoding === '') {
11718 encoding = 'utf8'
11719 }
11720
11721 if (!Buffer.isEncoding(encoding)) {
11722 throw new TypeError('"encoding" must be a valid string encoding')
11723 }
11724
11725 var length = byteLength(string, encoding) | 0
11726 var buf = createBuffer(length)
11727
11728 var actual = buf.write(string, encoding)
11729
11730 if (actual !== length) {
11731 // Writing a hex string, for example, that contains invalid characters will
11732 // cause everything after the first invalid character to be ignored. (e.g.
11733 // 'abxxcd' will be treated as 'ab')
11734 buf = buf.slice(0, actual)
11735 }
11736
11737 return buf
11738 }
11739
11740 function fromArrayLike (array) {
11741 var length = array.length < 0 ? 0 : checked(array.length) | 0
11742 var buf = createBuffer(length)
11743 for (var i = 0; i < length; i += 1) {
11744 buf[i] = array[i] & 255
11745 }
11746 return buf
11747 }
11748
11749 function fromArrayBuffer (array, byteOffset, length) {
11750 if (byteOffset < 0 || array.byteLength < byteOffset) {
11751 throw new RangeError('\'offset\' is out of bounds')
11752 }
11753
11754 if (array.byteLength < byteOffset + (length || 0)) {
11755 throw new RangeError('\'length\' is out of bounds')
11756 }
11757
11758 var buf
11759 if (byteOffset === undefined && length === undefined) {
11760 buf = new Uint8Array(array)
11761 } else if (length === undefined) {
11762 buf = new Uint8Array(array, byteOffset)
11763 } else {
11764 buf = new Uint8Array(array, byteOffset, length)
11765 }
11766
11767 // Return an augmented `Uint8Array` instance
11768 buf.__proto__ = Buffer.prototype
11769 return buf
11770 }
11771
11772 function fromObject (obj) {
11773 if (Buffer.isBuffer(obj)) {
11774 var len = checked(obj.length) | 0
11775 var buf = createBuffer(len)
11776
11777 if (buf.length === 0) {
11778 return buf
11779 }
11780
11781 obj.copy(buf, 0, 0, len)
11782 return buf
11783 }
11784
11785 if (obj) {
11786 if (isArrayBufferView(obj) || 'length' in obj) {
11787 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
11788 return createBuffer(0)
11789 }
11790 return fromArrayLike(obj)
11791 }
11792
11793 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
11794 return fromArrayLike(obj.data)
11795 }
11796 }
11797
11798 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
11799 }
11800
11801 function checked (length) {
11802 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
11803 // length is NaN (which is otherwise coerced to zero.)
11804 if (length >= K_MAX_LENGTH) {
11805 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
11806 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
11807 }
11808 return length | 0
11809 }
11810
11811 function SlowBuffer (length) {
11812 if (+length != length) { // eslint-disable-line eqeqeq
11813 length = 0
11814 }
11815 return Buffer.alloc(+length)
11816 }
11817
11818 Buffer.isBuffer = function isBuffer (b) {
11819 return b != null && b._isBuffer === true
11820 }
11821
11822 Buffer.compare = function compare (a, b) {
11823 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
11824 throw new TypeError('Arguments must be Buffers')
11825 }
11826
11827 if (a === b) return 0
11828
11829 var x = a.length
11830 var y = b.length
11831
11832 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
11833 if (a[i] !== b[i]) {
11834 x = a[i]
11835 y = b[i]
11836 break
11837 }
11838 }
11839
11840 if (x < y) return -1
11841 if (y < x) return 1
11842 return 0
11843 }
11844
11845 Buffer.isEncoding = function isEncoding (encoding) {
11846 switch (String(encoding).toLowerCase()) {
11847 case 'hex':
11848 case 'utf8':
11849 case 'utf-8':
11850 case 'ascii':
11851 case 'latin1':
11852 case 'binary':
11853 case 'base64':
11854 case 'ucs2':
11855 case 'ucs-2':
11856 case 'utf16le':
11857 case 'utf-16le':
11858 return true
11859 default:
11860 return false
11861 }
11862 }
11863
11864 Buffer.concat = function concat (list, length) {
11865 if (!Array.isArray(list)) {
11866 throw new TypeError('"list" argument must be an Array of Buffers')
11867 }
11868
11869 if (list.length === 0) {
11870 return Buffer.alloc(0)
11871 }
11872
11873 var i
11874 if (length === undefined) {
11875 length = 0
11876 for (i = 0; i < list.length; ++i) {
11877 length += list[i].length
11878 }
11879 }
11880
11881 var buffer = Buffer.allocUnsafe(length)
11882 var pos = 0
11883 for (i = 0; i < list.length; ++i) {
11884 var buf = list[i]
11885 if (!Buffer.isBuffer(buf)) {
11886 throw new TypeError('"list" argument must be an Array of Buffers')
11887 }
11888 buf.copy(buffer, pos)
11889 pos += buf.length
11890 }
11891 return buffer
11892 }
11893
11894 function byteLength (string, encoding) {
11895 if (Buffer.isBuffer(string)) {
11896 return string.length
11897 }
11898 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
11899 return string.byteLength
11900 }
11901 if (typeof string !== 'string') {
11902 string = '' + string
11903 }
11904
11905 var len = string.length
11906 if (len === 0) return 0
11907
11908 // Use a for loop to avoid recursion
11909 var loweredCase = false
11910 for (;;) {
11911 switch (encoding) {
11912 case 'ascii':
11913 case 'latin1':
11914 case 'binary':
11915 return len
11916 case 'utf8':
11917 case 'utf-8':
11918 case undefined:
11919 return utf8ToBytes(string).length
11920 case 'ucs2':
11921 case 'ucs-2':
11922 case 'utf16le':
11923 case 'utf-16le':
11924 return len * 2
11925 case 'hex':
11926 return len >>> 1
11927 case 'base64':
11928 return base64ToBytes(string).length
11929 default:
11930 if (loweredCase) return utf8ToBytes(string).length // assume utf8
11931 encoding = ('' + encoding).toLowerCase()
11932 loweredCase = true
11933 }
11934 }
11935 }
11936 Buffer.byteLength = byteLength
11937
11938 function slowToString (encoding, start, end) {
11939 var loweredCase = false
11940
11941 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
11942 // property of a typed array.
11943
11944 // This behaves neither like String nor Uint8Array in that we set start/end
11945 // to their upper/lower bounds if the value passed is out of range.
11946 // undefined is handled specially as per ECMA-262 6th Edition,
11947 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
11948 if (start === undefined || start < 0) {
11949 start = 0
11950 }
11951 // Return early if start > this.length. Done here to prevent potential uint32
11952 // coercion fail below.
11953 if (start > this.length) {
11954 return ''
11955 }
11956
11957 if (end === undefined || end > this.length) {
11958 end = this.length
11959 }
11960
11961 if (end <= 0) {
11962 return ''
11963 }
11964
11965 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
11966 end >>>= 0
11967 start >>>= 0
11968
11969 if (end <= start) {
11970 return ''
11971 }
11972
11973 if (!encoding) encoding = 'utf8'
11974
11975 while (true) {
11976 switch (encoding) {
11977 case 'hex':
11978 return hexSlice(this, start, end)
11979
11980 case 'utf8':
11981 case 'utf-8':
11982 return utf8Slice(this, start, end)
11983
11984 case 'ascii':
11985 return asciiSlice(this, start, end)
11986
11987 case 'latin1':
11988 case 'binary':
11989 return latin1Slice(this, start, end)
11990
11991 case 'base64':
11992 return base64Slice(this, start, end)
11993
11994 case 'ucs2':
11995 case 'ucs-2':
11996 case 'utf16le':
11997 case 'utf-16le':
11998 return utf16leSlice(this, start, end)
11999
12000 default:
12001 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
12002 encoding = (encoding + '').toLowerCase()
12003 loweredCase = true
12004 }
12005 }
12006 }
12007
12008 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
12009 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
12010 // reliably in a browserify context because there could be multiple different
12011 // copies of the 'buffer' package in use. This method works even for Buffer
12012 // instances that were created from another copy of the `buffer` package.
12013 // See: https://github.com/feross/buffer/issues/154
12014 Buffer.prototype._isBuffer = true
12015
12016 function swap (b, n, m) {
12017 var i = b[n]
12018 b[n] = b[m]
12019 b[m] = i
12020 }
12021
12022 Buffer.prototype.swap16 = function swap16 () {
12023 var len = this.length
12024 if (len % 2 !== 0) {
12025 throw new RangeError('Buffer size must be a multiple of 16-bits')
12026 }
12027 for (var i = 0; i < len; i += 2) {
12028 swap(this, i, i + 1)
12029 }
12030 return this
12031 }
12032
12033 Buffer.prototype.swap32 = function swap32 () {
12034 var len = this.length
12035 if (len % 4 !== 0) {
12036 throw new RangeError('Buffer size must be a multiple of 32-bits')
12037 }
12038 for (var i = 0; i < len; i += 4) {
12039 swap(this, i, i + 3)
12040 swap(this, i + 1, i + 2)
12041 }
12042 return this
12043 }
12044
12045 Buffer.prototype.swap64 = function swap64 () {
12046 var len = this.length
12047 if (len % 8 !== 0) {
12048 throw new RangeError('Buffer size must be a multiple of 64-bits')
12049 }
12050 for (var i = 0; i < len; i += 8) {
12051 swap(this, i, i + 7)
12052 swap(this, i + 1, i + 6)
12053 swap(this, i + 2, i + 5)
12054 swap(this, i + 3, i + 4)
12055 }
12056 return this
12057 }
12058
12059 Buffer.prototype.toString = function toString () {
12060 var length = this.length
12061 if (length === 0) return ''
12062 if (arguments.length === 0) return utf8Slice(this, 0, length)
12063 return slowToString.apply(this, arguments)
12064 }
12065
12066 Buffer.prototype.equals = function equals (b) {
12067 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
12068 if (this === b) return true
12069 return Buffer.compare(this, b) === 0
12070 }
12071
12072 Buffer.prototype.inspect = function inspect () {
12073 var str = ''
12074 var max = exports.INSPECT_MAX_BYTES
12075 if (this.length > 0) {
12076 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
12077 if (this.length > max) str += ' ... '
12078 }
12079 return '<Buffer ' + str + '>'
12080 }
12081
12082 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
12083 if (!Buffer.isBuffer(target)) {
12084 throw new TypeError('Argument must be a Buffer')
12085 }
12086
12087 if (start === undefined) {
12088 start = 0
12089 }
12090 if (end === undefined) {
12091 end = target ? target.length : 0
12092 }
12093 if (thisStart === undefined) {
12094 thisStart = 0
12095 }
12096 if (thisEnd === undefined) {
12097 thisEnd = this.length
12098 }
12099
12100 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
12101 throw new RangeError('out of range index')
12102 }
12103
12104 if (thisStart >= thisEnd && start >= end) {
12105 return 0
12106 }
12107 if (thisStart >= thisEnd) {
12108 return -1
12109 }
12110 if (start >= end) {
12111 return 1
12112 }
12113
12114 start >>>= 0
12115 end >>>= 0
12116 thisStart >>>= 0
12117 thisEnd >>>= 0
12118
12119 if (this === target) return 0
12120
12121 var x = thisEnd - thisStart
12122 var y = end - start
12123 var len = Math.min(x, y)
12124
12125 var thisCopy = this.slice(thisStart, thisEnd)
12126 var targetCopy = target.slice(start, end)
12127
12128 for (var i = 0; i < len; ++i) {
12129 if (thisCopy[i] !== targetCopy[i]) {
12130 x = thisCopy[i]
12131 y = targetCopy[i]
12132 break
12133 }
12134 }
12135
12136 if (x < y) return -1
12137 if (y < x) return 1
12138 return 0
12139 }
12140
12141 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
12142 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
12143 //
12144 // Arguments:
12145 // - buffer - a Buffer to search
12146 // - val - a string, Buffer, or number
12147 // - byteOffset - an index into `buffer`; will be clamped to an int32
12148 // - encoding - an optional encoding, relevant is val is a string
12149 // - dir - true for indexOf, false for lastIndexOf
12150 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
12151 // Empty buffer means no match
12152 if (buffer.length === 0) return -1
12153
12154 // Normalize byteOffset
12155 if (typeof byteOffset === 'string') {
12156 encoding = byteOffset
12157 byteOffset = 0
12158 } else if (byteOffset > 0x7fffffff) {
12159 byteOffset = 0x7fffffff
12160 } else if (byteOffset < -0x80000000) {
12161 byteOffset = -0x80000000
12162 }
12163 byteOffset = +byteOffset // Coerce to Number.
12164 if (numberIsNaN(byteOffset)) {
12165 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
12166 byteOffset = dir ? 0 : (buffer.length - 1)
12167 }
12168
12169 // Normalize byteOffset: negative offsets start from the end of the buffer
12170 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
12171 if (byteOffset >= buffer.length) {
12172 if (dir) return -1
12173 else byteOffset = buffer.length - 1
12174 } else if (byteOffset < 0) {
12175 if (dir) byteOffset = 0
12176 else return -1
12177 }
12178
12179 // Normalize val
12180 if (typeof val === 'string') {
12181 val = Buffer.from(val, encoding)
12182 }
12183
12184 // Finally, search either indexOf (if dir is true) or lastIndexOf
12185 if (Buffer.isBuffer(val)) {
12186 // Special case: looking for empty string/buffer always fails
12187 if (val.length === 0) {
12188 return -1
12189 }
12190 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
12191 } else if (typeof val === 'number') {
12192 val = val & 0xFF // Search for a byte value [0-255]
12193 if (typeof Uint8Array.prototype.indexOf === 'function') {
12194 if (dir) {
12195 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
12196 } else {
12197 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
12198 }
12199 }
12200 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
12201 }
12202
12203 throw new TypeError('val must be string, number or Buffer')
12204 }
12205
12206 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
12207 var indexSize = 1
12208 var arrLength = arr.length
12209 var valLength = val.length
12210
12211 if (encoding !== undefined) {
12212 encoding = String(encoding).toLowerCase()
12213 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
12214 encoding === 'utf16le' || encoding === 'utf-16le') {
12215 if (arr.length < 2 || val.length < 2) {
12216 return -1
12217 }
12218 indexSize = 2
12219 arrLength /= 2
12220 valLength /= 2
12221 byteOffset /= 2
12222 }
12223 }
12224
12225 function read (buf, i) {
12226 if (indexSize === 1) {
12227 return buf[i]
12228 } else {
12229 return buf.readUInt16BE(i * indexSize)
12230 }
12231 }
12232
12233 var i
12234 if (dir) {
12235 var foundIndex = -1
12236 for (i = byteOffset; i < arrLength; i++) {
12237 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
12238 if (foundIndex === -1) foundIndex = i
12239 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
12240 } else {
12241 if (foundIndex !== -1) i -= i - foundIndex
12242 foundIndex = -1
12243 }
12244 }
12245 } else {
12246 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
12247 for (i = byteOffset; i >= 0; i--) {
12248 var found = true
12249 for (var j = 0; j < valLength; j++) {
12250 if (read(arr, i + j) !== read(val, j)) {
12251 found = false
12252 break
12253 }
12254 }
12255 if (found) return i
12256 }
12257 }
12258
12259 return -1
12260 }
12261
12262 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
12263 return this.indexOf(val, byteOffset, encoding) !== -1
12264 }
12265
12266 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
12267 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
12268 }
12269
12270 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
12271 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
12272 }
12273
12274 function hexWrite (buf, string, offset, length) {
12275 offset = Number(offset) || 0
12276 var remaining = buf.length - offset
12277 if (!length) {
12278 length = remaining
12279 } else {
12280 length = Number(length)
12281 if (length > remaining) {
12282 length = remaining
12283 }
12284 }
12285
12286 // must be an even number of digits
12287 var strLen = string.length
12288 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
12289
12290 if (length > strLen / 2) {
12291 length = strLen / 2
12292 }
12293 for (var i = 0; i < length; ++i) {
12294 var parsed = parseInt(string.substr(i * 2, 2), 16)
12295 if (numberIsNaN(parsed)) return i
12296 buf[offset + i] = parsed
12297 }
12298 return i
12299 }
12300
12301 function utf8Write (buf, string, offset, length) {
12302 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
12303 }
12304
12305 function asciiWrite (buf, string, offset, length) {
12306 return blitBuffer(asciiToBytes(string), buf, offset, length)
12307 }
12308
12309 function latin1Write (buf, string, offset, length) {
12310 return asciiWrite(buf, string, offset, length)
12311 }
12312
12313 function base64Write (buf, string, offset, length) {
12314 return blitBuffer(base64ToBytes(string), buf, offset, length)
12315 }
12316
12317 function ucs2Write (buf, string, offset, length) {
12318 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
12319 }
12320
12321 Buffer.prototype.write = function write (string, offset, length, encoding) {
12322 // Buffer#write(string)
12323 if (offset === undefined) {
12324 encoding = 'utf8'
12325 length = this.length
12326 offset = 0
12327 // Buffer#write(string, encoding)
12328 } else if (length === undefined && typeof offset === 'string') {
12329 encoding = offset
12330 length = this.length
12331 offset = 0
12332 // Buffer#write(string, offset[, length][, encoding])
12333 } else if (isFinite(offset)) {
12334 offset = offset >>> 0
12335 if (isFinite(length)) {
12336 length = length >>> 0
12337 if (encoding === undefined) encoding = 'utf8'
12338 } else {
12339 encoding = length
12340 length = undefined
12341 }
12342 } else {
12343 throw new Error(
12344 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
12345 )
12346 }
12347
12348 var remaining = this.length - offset
12349 if (length === undefined || length > remaining) length = remaining
12350
12351 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
12352 throw new RangeError('Attempt to write outside buffer bounds')
12353 }
12354
12355 if (!encoding) encoding = 'utf8'
12356
12357 var loweredCase = false
12358 for (;;) {
12359 switch (encoding) {
12360 case 'hex':
12361 return hexWrite(this, string, offset, length)
12362
12363 case 'utf8':
12364 case 'utf-8':
12365 return utf8Write(this, string, offset, length)
12366
12367 case 'ascii':
12368 return asciiWrite(this, string, offset, length)
12369
12370 case 'latin1':
12371 case 'binary':
12372 return latin1Write(this, string, offset, length)
12373
12374 case 'base64':
12375 // Warning: maxLength not taken into account in base64Write
12376 return base64Write(this, string, offset, length)
12377
12378 case 'ucs2':
12379 case 'ucs-2':
12380 case 'utf16le':
12381 case 'utf-16le':
12382 return ucs2Write(this, string, offset, length)
12383
12384 default:
12385 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
12386 encoding = ('' + encoding).toLowerCase()
12387 loweredCase = true
12388 }
12389 }
12390 }
12391
12392 Buffer.prototype.toJSON = function toJSON () {
12393 return {
12394 type: 'Buffer',
12395 data: Array.prototype.slice.call(this._arr || this, 0)
12396 }
12397 }
12398
12399 function base64Slice (buf, start, end) {
12400 if (start === 0 && end === buf.length) {
12401 return base64.fromByteArray(buf)
12402 } else {
12403 return base64.fromByteArray(buf.slice(start, end))
12404 }
12405 }
12406
12407 function utf8Slice (buf, start, end) {
12408 end = Math.min(buf.length, end)
12409 var res = []
12410
12411 var i = start
12412 while (i < end) {
12413 var firstByte = buf[i]
12414 var codePoint = null
12415 var bytesPerSequence = (firstByte > 0xEF) ? 4
12416 : (firstByte > 0xDF) ? 3
12417 : (firstByte > 0xBF) ? 2
12418 : 1
12419
12420 if (i + bytesPerSequence <= end) {
12421 var secondByte, thirdByte, fourthByte, tempCodePoint
12422
12423 switch (bytesPerSequence) {
12424 case 1:
12425 if (firstByte < 0x80) {
12426 codePoint = firstByte
12427 }
12428 break
12429 case 2:
12430 secondByte = buf[i + 1]
12431 if ((secondByte & 0xC0) === 0x80) {
12432 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
12433 if (tempCodePoint > 0x7F) {
12434 codePoint = tempCodePoint
12435 }
12436 }
12437 break
12438 case 3:
12439 secondByte = buf[i + 1]
12440 thirdByte = buf[i + 2]
12441 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
12442 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
12443 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
12444 codePoint = tempCodePoint
12445 }
12446 }
12447 break
12448 case 4:
12449 secondByte = buf[i + 1]
12450 thirdByte = buf[i + 2]
12451 fourthByte = buf[i + 3]
12452 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
12453 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
12454 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
12455 codePoint = tempCodePoint
12456 }
12457 }
12458 }
12459 }
12460
12461 if (codePoint === null) {
12462 // we did not generate a valid codePoint so insert a
12463 // replacement char (U+FFFD) and advance only 1 byte
12464 codePoint = 0xFFFD
12465 bytesPerSequence = 1
12466 } else if (codePoint > 0xFFFF) {
12467 // encode to utf16 (surrogate pair dance)
12468 codePoint -= 0x10000
12469 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
12470 codePoint = 0xDC00 | codePoint & 0x3FF
12471 }
12472
12473 res.push(codePoint)
12474 i += bytesPerSequence
12475 }
12476
12477 return decodeCodePointsArray(res)
12478 }
12479
12480 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
12481 // the lowest limit is Chrome, with 0x10000 args.
12482 // We go 1 magnitude less, for safety
12483 var MAX_ARGUMENTS_LENGTH = 0x1000
12484
12485 function decodeCodePointsArray (codePoints) {
12486 var len = codePoints.length
12487 if (len <= MAX_ARGUMENTS_LENGTH) {
12488 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
12489 }
12490
12491 // Decode in chunks to avoid "call stack size exceeded".
12492 var res = ''
12493 var i = 0
12494 while (i < len) {
12495 res += String.fromCharCode.apply(
12496 String,
12497 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
12498 )
12499 }
12500 return res
12501 }
12502
12503 function asciiSlice (buf, start, end) {
12504 var ret = ''
12505 end = Math.min(buf.length, end)
12506
12507 for (var i = start; i < end; ++i) {
12508 ret += String.fromCharCode(buf[i] & 0x7F)
12509 }
12510 return ret
12511 }
12512
12513 function latin1Slice (buf, start, end) {
12514 var ret = ''
12515 end = Math.min(buf.length, end)
12516
12517 for (var i = start; i < end; ++i) {
12518 ret += String.fromCharCode(buf[i])
12519 }
12520 return ret
12521 }
12522
12523 function hexSlice (buf, start, end) {
12524 var len = buf.length
12525
12526 if (!start || start < 0) start = 0
12527 if (!end || end < 0 || end > len) end = len
12528
12529 var out = ''
12530 for (var i = start; i < end; ++i) {
12531 out += toHex(buf[i])
12532 }
12533 return out
12534 }
12535
12536 function utf16leSlice (buf, start, end) {
12537 var bytes = buf.slice(start, end)
12538 var res = ''
12539 for (var i = 0; i < bytes.length; i += 2) {
12540 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
12541 }
12542 return res
12543 }
12544
12545 Buffer.prototype.slice = function slice (start, end) {
12546 var len = this.length
12547 start = ~~start
12548 end = end === undefined ? len : ~~end
12549
12550 if (start < 0) {
12551 start += len
12552 if (start < 0) start = 0
12553 } else if (start > len) {
12554 start = len
12555 }
12556
12557 if (end < 0) {
12558 end += len
12559 if (end < 0) end = 0
12560 } else if (end > len) {
12561 end = len
12562 }
12563
12564 if (end < start) end = start
12565
12566 var newBuf = this.subarray(start, end)
12567 // Return an augmented `Uint8Array` instance
12568 newBuf.__proto__ = Buffer.prototype
12569 return newBuf
12570 }
12571
12572 /*
12573 * Need to make sure that buffer isn't trying to write out of bounds.
12574 */
12575 function checkOffset (offset, ext, length) {
12576 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
12577 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
12578 }
12579
12580 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
12581 offset = offset >>> 0
12582 byteLength = byteLength >>> 0
12583 if (!noAssert) checkOffset(offset, byteLength, this.length)
12584
12585 var val = this[offset]
12586 var mul = 1
12587 var i = 0
12588 while (++i < byteLength && (mul *= 0x100)) {
12589 val += this[offset + i] * mul
12590 }
12591
12592 return val
12593 }
12594
12595 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
12596 offset = offset >>> 0
12597 byteLength = byteLength >>> 0
12598 if (!noAssert) {
12599 checkOffset(offset, byteLength, this.length)
12600 }
12601
12602 var val = this[offset + --byteLength]
12603 var mul = 1
12604 while (byteLength > 0 && (mul *= 0x100)) {
12605 val += this[offset + --byteLength] * mul
12606 }
12607
12608 return val
12609 }
12610
12611 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
12612 offset = offset >>> 0
12613 if (!noAssert) checkOffset(offset, 1, this.length)
12614 return this[offset]
12615 }
12616
12617 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
12618 offset = offset >>> 0
12619 if (!noAssert) checkOffset(offset, 2, this.length)
12620 return this[offset] | (this[offset + 1] << 8)
12621 }
12622
12623 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
12624 offset = offset >>> 0
12625 if (!noAssert) checkOffset(offset, 2, this.length)
12626 return (this[offset] << 8) | this[offset + 1]
12627 }
12628
12629 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
12630 offset = offset >>> 0
12631 if (!noAssert) checkOffset(offset, 4, this.length)
12632
12633 return ((this[offset]) |
12634 (this[offset + 1] << 8) |
12635 (this[offset + 2] << 16)) +
12636 (this[offset + 3] * 0x1000000)
12637 }
12638
12639 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
12640 offset = offset >>> 0
12641 if (!noAssert) checkOffset(offset, 4, this.length)
12642
12643 return (this[offset] * 0x1000000) +
12644 ((this[offset + 1] << 16) |
12645 (this[offset + 2] << 8) |
12646 this[offset + 3])
12647 }
12648
12649 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
12650 offset = offset >>> 0
12651 byteLength = byteLength >>> 0
12652 if (!noAssert) checkOffset(offset, byteLength, this.length)
12653
12654 var val = this[offset]
12655 var mul = 1
12656 var i = 0
12657 while (++i < byteLength && (mul *= 0x100)) {
12658 val += this[offset + i] * mul
12659 }
12660 mul *= 0x80
12661
12662 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
12663
12664 return val
12665 }
12666
12667 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
12668 offset = offset >>> 0
12669 byteLength = byteLength >>> 0
12670 if (!noAssert) checkOffset(offset, byteLength, this.length)
12671
12672 var i = byteLength
12673 var mul = 1
12674 var val = this[offset + --i]
12675 while (i > 0 && (mul *= 0x100)) {
12676 val += this[offset + --i] * mul
12677 }
12678 mul *= 0x80
12679
12680 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
12681
12682 return val
12683 }
12684
12685 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
12686 offset = offset >>> 0
12687 if (!noAssert) checkOffset(offset, 1, this.length)
12688 if (!(this[offset] & 0x80)) return (this[offset])
12689 return ((0xff - this[offset] + 1) * -1)
12690 }
12691
12692 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
12693 offset = offset >>> 0
12694 if (!noAssert) checkOffset(offset, 2, this.length)
12695 var val = this[offset] | (this[offset + 1] << 8)
12696 return (val & 0x8000) ? val | 0xFFFF0000 : val
12697 }
12698
12699 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
12700 offset = offset >>> 0
12701 if (!noAssert) checkOffset(offset, 2, this.length)
12702 var val = this[offset + 1] | (this[offset] << 8)
12703 return (val & 0x8000) ? val | 0xFFFF0000 : val
12704 }
12705
12706 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
12707 offset = offset >>> 0
12708 if (!noAssert) checkOffset(offset, 4, this.length)
12709
12710 return (this[offset]) |
12711 (this[offset + 1] << 8) |
12712 (this[offset + 2] << 16) |
12713 (this[offset + 3] << 24)
12714 }
12715
12716 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
12717 offset = offset >>> 0
12718 if (!noAssert) checkOffset(offset, 4, this.length)
12719
12720 return (this[offset] << 24) |
12721 (this[offset + 1] << 16) |
12722 (this[offset + 2] << 8) |
12723 (this[offset + 3])
12724 }
12725
12726 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
12727 offset = offset >>> 0
12728 if (!noAssert) checkOffset(offset, 4, this.length)
12729 return ieee754.read(this, offset, true, 23, 4)
12730 }
12731
12732 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
12733 offset = offset >>> 0
12734 if (!noAssert) checkOffset(offset, 4, this.length)
12735 return ieee754.read(this, offset, false, 23, 4)
12736 }
12737
12738 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
12739 offset = offset >>> 0
12740 if (!noAssert) checkOffset(offset, 8, this.length)
12741 return ieee754.read(this, offset, true, 52, 8)
12742 }
12743
12744 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
12745 offset = offset >>> 0
12746 if (!noAssert) checkOffset(offset, 8, this.length)
12747 return ieee754.read(this, offset, false, 52, 8)
12748 }
12749
12750 function checkInt (buf, value, offset, ext, max, min) {
12751 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
12752 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
12753 if (offset + ext > buf.length) throw new RangeError('Index out of range')
12754 }
12755
12756 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
12757 value = +value
12758 offset = offset >>> 0
12759 byteLength = byteLength >>> 0
12760 if (!noAssert) {
12761 var maxBytes = Math.pow(2, 8 * byteLength) - 1
12762 checkInt(this, value, offset, byteLength, maxBytes, 0)
12763 }
12764
12765 var mul = 1
12766 var i = 0
12767 this[offset] = value & 0xFF
12768 while (++i < byteLength && (mul *= 0x100)) {
12769 this[offset + i] = (value / mul) & 0xFF
12770 }
12771
12772 return offset + byteLength
12773 }
12774
12775 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
12776 value = +value
12777 offset = offset >>> 0
12778 byteLength = byteLength >>> 0
12779 if (!noAssert) {
12780 var maxBytes = Math.pow(2, 8 * byteLength) - 1
12781 checkInt(this, value, offset, byteLength, maxBytes, 0)
12782 }
12783
12784 var i = byteLength - 1
12785 var mul = 1
12786 this[offset + i] = value & 0xFF
12787 while (--i >= 0 && (mul *= 0x100)) {
12788 this[offset + i] = (value / mul) & 0xFF
12789 }
12790
12791 return offset + byteLength
12792 }
12793
12794 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
12795 value = +value
12796 offset = offset >>> 0
12797 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
12798 this[offset] = (value & 0xff)
12799 return offset + 1
12800 }
12801
12802 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
12803 value = +value
12804 offset = offset >>> 0
12805 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
12806 this[offset] = (value & 0xff)
12807 this[offset + 1] = (value >>> 8)
12808 return offset + 2
12809 }
12810
12811 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
12812 value = +value
12813 offset = offset >>> 0
12814 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
12815 this[offset] = (value >>> 8)
12816 this[offset + 1] = (value & 0xff)
12817 return offset + 2
12818 }
12819
12820 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
12821 value = +value
12822 offset = offset >>> 0
12823 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
12824 this[offset + 3] = (value >>> 24)
12825 this[offset + 2] = (value >>> 16)
12826 this[offset + 1] = (value >>> 8)
12827 this[offset] = (value & 0xff)
12828 return offset + 4
12829 }
12830
12831 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
12832 value = +value
12833 offset = offset >>> 0
12834 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
12835 this[offset] = (value >>> 24)
12836 this[offset + 1] = (value >>> 16)
12837 this[offset + 2] = (value >>> 8)
12838 this[offset + 3] = (value & 0xff)
12839 return offset + 4
12840 }
12841
12842 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
12843 value = +value
12844 offset = offset >>> 0
12845 if (!noAssert) {
12846 var limit = Math.pow(2, (8 * byteLength) - 1)
12847
12848 checkInt(this, value, offset, byteLength, limit - 1, -limit)
12849 }
12850
12851 var i = 0
12852 var mul = 1
12853 var sub = 0
12854 this[offset] = value & 0xFF
12855 while (++i < byteLength && (mul *= 0x100)) {
12856 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
12857 sub = 1
12858 }
12859 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
12860 }
12861
12862 return offset + byteLength
12863 }
12864
12865 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
12866 value = +value
12867 offset = offset >>> 0
12868 if (!noAssert) {
12869 var limit = Math.pow(2, (8 * byteLength) - 1)
12870
12871 checkInt(this, value, offset, byteLength, limit - 1, -limit)
12872 }
12873
12874 var i = byteLength - 1
12875 var mul = 1
12876 var sub = 0
12877 this[offset + i] = value & 0xFF
12878 while (--i >= 0 && (mul *= 0x100)) {
12879 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
12880 sub = 1
12881 }
12882 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
12883 }
12884
12885 return offset + byteLength
12886 }
12887
12888 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
12889 value = +value
12890 offset = offset >>> 0
12891 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
12892 if (value < 0) value = 0xff + value + 1
12893 this[offset] = (value & 0xff)
12894 return offset + 1
12895 }
12896
12897 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
12898 value = +value
12899 offset = offset >>> 0
12900 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
12901 this[offset] = (value & 0xff)
12902 this[offset + 1] = (value >>> 8)
12903 return offset + 2
12904 }
12905
12906 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
12907 value = +value
12908 offset = offset >>> 0
12909 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
12910 this[offset] = (value >>> 8)
12911 this[offset + 1] = (value & 0xff)
12912 return offset + 2
12913 }
12914
12915 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
12916 value = +value
12917 offset = offset >>> 0
12918 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
12919 this[offset] = (value & 0xff)
12920 this[offset + 1] = (value >>> 8)
12921 this[offset + 2] = (value >>> 16)
12922 this[offset + 3] = (value >>> 24)
12923 return offset + 4
12924 }
12925
12926 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
12927 value = +value
12928 offset = offset >>> 0
12929 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
12930 if (value < 0) value = 0xffffffff + value + 1
12931 this[offset] = (value >>> 24)
12932 this[offset + 1] = (value >>> 16)
12933 this[offset + 2] = (value >>> 8)
12934 this[offset + 3] = (value & 0xff)
12935 return offset + 4
12936 }
12937
12938 function checkIEEE754 (buf, value, offset, ext, max, min) {
12939 if (offset + ext > buf.length) throw new RangeError('Index out of range')
12940 if (offset < 0) throw new RangeError('Index out of range')
12941 }
12942
12943 function writeFloat (buf, value, offset, littleEndian, noAssert) {
12944 value = +value
12945 offset = offset >>> 0
12946 if (!noAssert) {
12947 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
12948 }
12949 ieee754.write(buf, value, offset, littleEndian, 23, 4)
12950 return offset + 4
12951 }
12952
12953 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
12954 return writeFloat(this, value, offset, true, noAssert)
12955 }
12956
12957 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
12958 return writeFloat(this, value, offset, false, noAssert)
12959 }
12960
12961 function writeDouble (buf, value, offset, littleEndian, noAssert) {
12962 value = +value
12963 offset = offset >>> 0
12964 if (!noAssert) {
12965 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
12966 }
12967 ieee754.write(buf, value, offset, littleEndian, 52, 8)
12968 return offset + 8
12969 }
12970
12971 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
12972 return writeDouble(this, value, offset, true, noAssert)
12973 }
12974
12975 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
12976 return writeDouble(this, value, offset, false, noAssert)
12977 }
12978
12979 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
12980 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
12981 if (!start) start = 0
12982 if (!end && end !== 0) end = this.length
12983 if (targetStart >= target.length) targetStart = target.length
12984 if (!targetStart) targetStart = 0
12985 if (end > 0 && end < start) end = start
12986
12987 // Copy 0 bytes; we're done
12988 if (end === start) return 0
12989 if (target.length === 0 || this.length === 0) return 0
12990
12991 // Fatal error conditions
12992 if (targetStart < 0) {
12993 throw new RangeError('targetStart out of bounds')
12994 }
12995 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
12996 if (end < 0) throw new RangeError('sourceEnd out of bounds')
12997
12998 // Are we oob?
12999 if (end > this.length) end = this.length
13000 if (target.length - targetStart < end - start) {
13001 end = target.length - targetStart + start
13002 }
13003
13004 var len = end - start
13005 var i
13006
13007 if (this === target && start < targetStart && targetStart < end) {
13008 // descending copy from end
13009 for (i = len - 1; i >= 0; --i) {
13010 target[i + targetStart] = this[i + start]
13011 }
13012 } else if (len < 1000) {
13013 // ascending copy from start
13014 for (i = 0; i < len; ++i) {
13015 target[i + targetStart] = this[i + start]
13016 }
13017 } else {
13018 Uint8Array.prototype.set.call(
13019 target,
13020 this.subarray(start, start + len),
13021 targetStart
13022 )
13023 }
13024
13025 return len
13026 }
13027
13028 // Usage:
13029 // buffer.fill(number[, offset[, end]])
13030 // buffer.fill(buffer[, offset[, end]])
13031 // buffer.fill(string[, offset[, end]][, encoding])
13032 Buffer.prototype.fill = function fill (val, start, end, encoding) {
13033 // Handle string cases:
13034 if (typeof val === 'string') {
13035 if (typeof start === 'string') {
13036 encoding = start
13037 start = 0
13038 end = this.length
13039 } else if (typeof end === 'string') {
13040 encoding = end
13041 end = this.length
13042 }
13043 if (val.length === 1) {
13044 var code = val.charCodeAt(0)
13045 if (code < 256) {
13046 val = code
13047 }
13048 }
13049 if (encoding !== undefined && typeof encoding !== 'string') {
13050 throw new TypeError('encoding must be a string')
13051 }
13052 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
13053 throw new TypeError('Unknown encoding: ' + encoding)
13054 }
13055 } else if (typeof val === 'number') {
13056 val = val & 255
13057 }
13058
13059 // Invalid ranges are not set to a default, so can range check early.
13060 if (start < 0 || this.length < start || this.length < end) {
13061 throw new RangeError('Out of range index')
13062 }
13063
13064 if (end <= start) {
13065 return this
13066 }
13067
13068 start = start >>> 0
13069 end = end === undefined ? this.length : end >>> 0
13070
13071 if (!val) val = 0
13072
13073 var i
13074 if (typeof val === 'number') {
13075 for (i = start; i < end; ++i) {
13076 this[i] = val
13077 }
13078 } else {
13079 var bytes = Buffer.isBuffer(val)
13080 ? val
13081 : new Buffer(val, encoding)
13082 var len = bytes.length
13083 for (i = 0; i < end - start; ++i) {
13084 this[i + start] = bytes[i % len]
13085 }
13086 }
13087
13088 return this
13089 }
13090
13091 // HELPER FUNCTIONS
13092 // ================
13093
13094 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
13095
13096 function base64clean (str) {
13097 // Node strips out invalid characters like \n and \t from the string, base64-js does not
13098 str = str.trim().replace(INVALID_BASE64_RE, '')
13099 // Node converts strings with length < 2 to ''
13100 if (str.length < 2) return ''
13101 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
13102 while (str.length % 4 !== 0) {
13103 str = str + '='
13104 }
13105 return str
13106 }
13107
13108 function toHex (n) {
13109 if (n < 16) return '0' + n.toString(16)
13110 return n.toString(16)
13111 }
13112
13113 function utf8ToBytes (string, units) {
13114 units = units || Infinity
13115 var codePoint
13116 var length = string.length
13117 var leadSurrogate = null
13118 var bytes = []
13119
13120 for (var i = 0; i < length; ++i) {
13121 codePoint = string.charCodeAt(i)
13122
13123 // is surrogate component
13124 if (codePoint > 0xD7FF && codePoint < 0xE000) {
13125 // last char was a lead
13126 if (!leadSurrogate) {
13127 // no lead yet
13128 if (codePoint > 0xDBFF) {
13129 // unexpected trail
13130 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13131 continue
13132 } else if (i + 1 === length) {
13133 // unpaired lead
13134 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13135 continue
13136 }
13137
13138 // valid lead
13139 leadSurrogate = codePoint
13140
13141 continue
13142 }
13143
13144 // 2 leads in a row
13145 if (codePoint < 0xDC00) {
13146 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13147 leadSurrogate = codePoint
13148 continue
13149 }
13150
13151 // valid surrogate pair
13152 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
13153 } else if (leadSurrogate) {
13154 // valid bmp char, but last char was a lead
13155 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13156 }
13157
13158 leadSurrogate = null
13159
13160 // encode utf8
13161 if (codePoint < 0x80) {
13162 if ((units -= 1) < 0) break
13163 bytes.push(codePoint)
13164 } else if (codePoint < 0x800) {
13165 if ((units -= 2) < 0) break
13166 bytes.push(
13167 codePoint >> 0x6 | 0xC0,
13168 codePoint & 0x3F | 0x80
13169 )
13170 } else if (codePoint < 0x10000) {
13171 if ((units -= 3) < 0) break
13172 bytes.push(
13173 codePoint >> 0xC | 0xE0,
13174 codePoint >> 0x6 & 0x3F | 0x80,
13175 codePoint & 0x3F | 0x80
13176 )
13177 } else if (codePoint < 0x110000) {
13178 if ((units -= 4) < 0) break
13179 bytes.push(
13180 codePoint >> 0x12 | 0xF0,
13181 codePoint >> 0xC & 0x3F | 0x80,
13182 codePoint >> 0x6 & 0x3F | 0x80,
13183 codePoint & 0x3F | 0x80
13184 )
13185 } else {
13186 throw new Error('Invalid code point')
13187 }
13188 }
13189
13190 return bytes
13191 }
13192
13193 function asciiToBytes (str) {
13194 var byteArray = []
13195 for (var i = 0; i < str.length; ++i) {
13196 // Node's code seems to be doing this and not & 0x7F..
13197 byteArray.push(str.charCodeAt(i) & 0xFF)
13198 }
13199 return byteArray
13200 }
13201
13202 function utf16leToBytes (str, units) {
13203 var c, hi, lo
13204 var byteArray = []
13205 for (var i = 0; i < str.length; ++i) {
13206 if ((units -= 2) < 0) break
13207
13208 c = str.charCodeAt(i)
13209 hi = c >> 8
13210 lo = c % 256
13211 byteArray.push(lo)
13212 byteArray.push(hi)
13213 }
13214
13215 return byteArray
13216 }
13217
13218 function base64ToBytes (str) {
13219 return base64.toByteArray(base64clean(str))
13220 }
13221
13222 function blitBuffer (src, dst, offset, length) {
13223 for (var i = 0; i < length; ++i) {
13224 if ((i + offset >= dst.length) || (i >= src.length)) break
13225 dst[i + offset] = src[i]
13226 }
13227 return i
13228 }
13229
13230 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
13231 function isArrayBufferView (obj) {
13232 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
13233 }
13234
13235 function numberIsNaN (obj) {
13236 return obj !== obj // eslint-disable-line no-self-compare
13237 }
13238
13239 },{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){
13240 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
13241 var e, m
13242 var eLen = nBytes * 8 - mLen - 1
13243 var eMax = (1 << eLen) - 1
13244 var eBias = eMax >> 1
13245 var nBits = -7
13246 var i = isLE ? (nBytes - 1) : 0
13247 var d = isLE ? -1 : 1
13248 var s = buffer[offset + i]
13249
13250 i += d
13251
13252 e = s & ((1 << (-nBits)) - 1)
13253 s >>= (-nBits)
13254 nBits += eLen
13255 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
13256
13257 m = e & ((1 << (-nBits)) - 1)
13258 e >>= (-nBits)
13259 nBits += mLen
13260 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
13261
13262 if (e === 0) {
13263 e = 1 - eBias
13264 } else if (e === eMax) {
13265 return m ? NaN : ((s ? -1 : 1) * Infinity)
13266 } else {
13267 m = m + Math.pow(2, mLen)
13268 e = e - eBias
13269 }
13270 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
13271 }
13272
13273 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
13274 var e, m, c
13275 var eLen = nBytes * 8 - mLen - 1
13276 var eMax = (1 << eLen) - 1
13277 var eBias = eMax >> 1
13278 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
13279 var i = isLE ? 0 : (nBytes - 1)
13280 var d = isLE ? 1 : -1
13281 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
13282
13283 value = Math.abs(value)
13284
13285 if (isNaN(value) || value === Infinity) {
13286 m = isNaN(value) ? 1 : 0
13287 e = eMax
13288 } else {
13289 e = Math.floor(Math.log(value) / Math.LN2)
13290 if (value * (c = Math.pow(2, -e)) < 1) {
13291 e--
13292 c *= 2
13293 }
13294 if (e + eBias >= 1) {
13295 value += rt / c
13296 } else {
13297 value += rt * Math.pow(2, 1 - eBias)
13298 }
13299 if (value * c >= 2) {
13300 e++
13301 c /= 2
13302 }
13303
13304 if (e + eBias >= eMax) {
13305 m = 0
13306 e = eMax
13307 } else if (e + eBias >= 1) {
13308 m = (value * c - 1) * Math.pow(2, mLen)
13309 e = e + eBias
13310 } else {
13311 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
13312 e = 0
13313 }
13314 }
13315
13316 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
13317
13318 e = (e << mLen) | m
13319 eLen += mLen
13320 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
13321
13322 buffer[offset + i - d] |= s * 128
13323 }
13324
13325 },{}],4:[function(require,module,exports){
13326 window.basex = require('base-x')
13327 },{"base-x":5}],5:[function(require,module,exports){
13328 // base-x encoding
13329 // Forked from https://github.com/cryptocoinjs/bs58
13330 // Originally written by Mike Hearn for BitcoinJ
13331 // Copyright (c) 2011 Google Inc
13332 // Ported to JavaScript by Stefan Thomas
13333 // Merged Buffer refactorings from base58-native by Stephen Pair
13334 // Copyright (c) 2013 BitPay Inc
13335
13336 var Buffer = require('safe-buffer').Buffer
13337
13338 module.exports = function base (ALPHABET) {
13339 var ALPHABET_MAP = {}
13340 var BASE = ALPHABET.length
13341 var LEADER = ALPHABET.charAt(0)
13342
13343 // pre-compute lookup table
13344 for (var z = 0; z < ALPHABET.length; z++) {
13345 var x = ALPHABET.charAt(z)
13346
13347 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
13348 ALPHABET_MAP[x] = z
13349 }
13350
13351 function encode (source) {
13352 if (source.length === 0) return ''
13353
13354 var digits = [0]
13355 for (var i = 0; i < source.length; ++i) {
13356 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
13357 carry += digits[j] << 8
13358 digits[j] = carry % BASE
13359 carry = (carry / BASE) | 0
13360 }
13361
13362 while (carry > 0) {
13363 digits.push(carry % BASE)
13364 carry = (carry / BASE) | 0
13365 }
13366 }
13367
13368 var string = ''
13369
13370 // deal with leading zeros
13371 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
13372 // convert digits to a string
13373 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
13374
13375 return string
13376 }
13377
13378 function decodeUnsafe (string) {
13379 if (string.length === 0) return Buffer.allocUnsafe(0)
13380
13381 var bytes = [0]
13382 for (var i = 0; i < string.length; i++) {
13383 var value = ALPHABET_MAP[string[i]]
13384 if (value === undefined) return
13385
13386 for (var j = 0, carry = value; j < bytes.length; ++j) {
13387 carry += bytes[j] * BASE
13388 bytes[j] = carry & 0xff
13389 carry >>= 8
13390 }
13391
13392 while (carry > 0) {
13393 bytes.push(carry & 0xff)
13394 carry >>= 8
13395 }
13396 }
13397
13398 // deal with leading zeros
13399 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
13400 bytes.push(0)
13401 }
13402
13403 return Buffer.from(bytes.reverse())
13404 }
13405
13406 function decode (string) {
13407 var buffer = decodeUnsafe(string)
13408 if (buffer) return buffer
13409
13410 throw new Error('Non-base' + BASE + ' character')
13411 }
13412
13413 return {
13414 encode: encode,
13415 decodeUnsafe: decodeUnsafe,
13416 decode: decode
13417 }
13418 }
13419
13420 },{"safe-buffer":6}],6:[function(require,module,exports){
13421 module.exports = require('buffer')
13422
13423 },{"buffer":2}]},{},[4])(4)
13424 });</script>
13425 <script>(function (root) {
13426 "use strict";
13427
13428 /***** unorm.js *****/
13429
13430 /*
13431 * UnicodeNormalizer 1.0.0
13432 * Copyright (c) 2008 Matsuza
13433 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
13434 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
13435 * $Rev: 13309 $
13436 */
13437
13438 var DEFAULT_FEATURE = [null, 0, {}];
13439 var CACHE_THRESHOLD = 10;
13440 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
13441 var NCount = VCount * TCount; // 588
13442 var SCount = LCount * NCount; // 11172
13443
13444 var UChar = function(cp, feature){
13445 this.codepoint = cp;
13446 this.feature = feature;
13447 };
13448
13449 // Strategies
13450 var cache = {};
13451 var cacheCounter = [];
13452 for (var i = 0; i <= 0xFF; ++i){
13453 cacheCounter[i] = 0;
13454 }
13455
13456 function fromCache(next, cp, needFeature){
13457 var ret = cache[cp];
13458 if(!ret){
13459 ret = next(cp, needFeature);
13460 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
13461 cache[cp] = ret;
13462 }
13463 }
13464 return ret;
13465 }
13466
13467 function fromData(next, cp, needFeature){
13468 var hash = cp & 0xFF00;
13469 var dunit = UChar.udata[hash] || {};
13470 var f = dunit[cp];
13471 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
13472 }
13473 function fromCpOnly(next, cp, needFeature){
13474 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
13475 }
13476 function fromRuleBasedJamo(next, cp, needFeature){
13477 var j;
13478 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
13479 return next(cp, needFeature);
13480 }
13481 if(LBase <= cp && cp < LBase + LCount){
13482 var c = {};
13483 var base = (cp - LBase) * VCount;
13484 for (j = 0; j < VCount; ++j){
13485 c[VBase + j] = SBase + TCount * (j + base);
13486 }
13487 return new UChar(cp, [,,c]);
13488 }
13489
13490 var SIndex = cp - SBase;
13491 var TIndex = SIndex % TCount;
13492 var feature = [];
13493 if(TIndex !== 0){
13494 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
13495 } else {
13496 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
13497 feature[2] = {};
13498 for (j = 1; j < TCount; ++j){
13499 feature[2][TBase + j] = cp + j;
13500 }
13501 }
13502 return new UChar(cp, feature);
13503 }
13504 function fromCpFilter(next, cp, needFeature){
13505 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
13506 }
13507
13508 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
13509
13510 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
13511 return function (cp, needFeature) {
13512 return strategy(next, cp, needFeature);
13513 };
13514 }, null);
13515
13516 UChar.isHighSurrogate = function(cp){
13517 return cp >= 0xD800 && cp <= 0xDBFF;
13518 };
13519 UChar.isLowSurrogate = function(cp){
13520 return cp >= 0xDC00 && cp <= 0xDFFF;
13521 };
13522
13523 UChar.prototype.prepFeature = function(){
13524 if(!this.feature){
13525 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
13526 }
13527 };
13528
13529 UChar.prototype.toString = function(){
13530 if(this.codepoint < 0x10000){
13531 return String.fromCharCode(this.codepoint);
13532 } else {
13533 var x = this.codepoint - 0x10000;
13534 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
13535 }
13536 };
13537
13538 UChar.prototype.getDecomp = function(){
13539 this.prepFeature();
13540 return this.feature[0] || null;
13541 };
13542
13543 UChar.prototype.isCompatibility = function(){
13544 this.prepFeature();
13545 return !!this.feature[1] && (this.feature[1] & (1 << 8));
13546 };
13547 UChar.prototype.isExclude = function(){
13548 this.prepFeature();
13549 return !!this.feature[1] && (this.feature[1] & (1 << 9));
13550 };
13551 UChar.prototype.getCanonicalClass = function(){
13552 this.prepFeature();
13553 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
13554 };
13555 UChar.prototype.getComposite = function(following){
13556 this.prepFeature();
13557 if(!this.feature[2]){
13558 return null;
13559 }
13560 var cp = this.feature[2][following.codepoint];
13561 return cp ? UChar.fromCharCode(cp) : null;
13562 };
13563
13564 var UCharIterator = function(str){
13565 this.str = str;
13566 this.cursor = 0;
13567 };
13568 UCharIterator.prototype.next = function(){
13569 if(!!this.str && this.cursor < this.str.length){
13570 var cp = this.str.charCodeAt(this.cursor++);
13571 var d;
13572 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
13573 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
13574 ++this.cursor;
13575 }
13576 return UChar.fromCharCode(cp);
13577 } else {
13578 this.str = null;
13579 return null;
13580 }
13581 };
13582
13583 var RecursDecompIterator = function(it, cano){
13584 this.it = it;
13585 this.canonical = cano;
13586 this.resBuf = [];
13587 };
13588
13589 RecursDecompIterator.prototype.next = function(){
13590 function recursiveDecomp(cano, uchar){
13591 var decomp = uchar.getDecomp();
13592 if(!!decomp && !(cano && uchar.isCompatibility())){
13593 var ret = [];
13594 for(var i = 0; i < decomp.length; ++i){
13595 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
13596 ret = ret.concat(a);
13597 }
13598 return ret;
13599 } else {
13600 return [uchar];
13601 }
13602 }
13603 if(this.resBuf.length === 0){
13604 var uchar = this.it.next();
13605 if(!uchar){
13606 return null;
13607 }
13608 this.resBuf = recursiveDecomp(this.canonical, uchar);
13609 }
13610 return this.resBuf.shift();
13611 };
13612
13613 var DecompIterator = function(it){
13614 this.it = it;
13615 this.resBuf = [];
13616 };
13617
13618 DecompIterator.prototype.next = function(){
13619 var cc;
13620 if(this.resBuf.length === 0){
13621 do{
13622 var uchar = this.it.next();
13623 if(!uchar){
13624 break;
13625 }
13626 cc = uchar.getCanonicalClass();
13627 var inspt = this.resBuf.length;
13628 if(cc !== 0){
13629 for(; inspt > 0; --inspt){
13630 var uchar2 = this.resBuf[inspt - 1];
13631 var cc2 = uchar2.getCanonicalClass();
13632 if(cc2 <= cc){
13633 break;
13634 }
13635 }
13636 }
13637 this.resBuf.splice(inspt, 0, uchar);
13638 } while(cc !== 0);
13639 }
13640 return this.resBuf.shift();
13641 };
13642
13643 var CompIterator = function(it){
13644 this.it = it;
13645 this.procBuf = [];
13646 this.resBuf = [];
13647 this.lastClass = null;
13648 };
13649
13650 CompIterator.prototype.next = function(){
13651 while(this.resBuf.length === 0){
13652 var uchar = this.it.next();
13653 if(!uchar){
13654 this.resBuf = this.procBuf;
13655 this.procBuf = [];
13656 break;
13657 }
13658 if(this.procBuf.length === 0){
13659 this.lastClass = uchar.getCanonicalClass();
13660 this.procBuf.push(uchar);
13661 } else {
13662 var starter = this.procBuf[0];
13663 var composite = starter.getComposite(uchar);
13664 var cc = uchar.getCanonicalClass();
13665 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
13666 this.procBuf[0] = composite;
13667 } else {
13668 if(cc === 0){
13669 this.resBuf = this.procBuf;
13670 this.procBuf = [];
13671 }
13672 this.lastClass = cc;
13673 this.procBuf.push(uchar);
13674 }
13675 }
13676 }
13677 return this.resBuf.shift();
13678 };
13679
13680 var createIterator = function(mode, str){
13681 switch(mode){
13682 case "NFD":
13683 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
13684 case "NFKD":
13685 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
13686 case "NFC":
13687 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
13688 case "NFKC":
13689 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
13690 }
13691 throw mode + " is invalid";
13692 };
13693 var normalize = function(mode, str){
13694 var it = createIterator(mode, str);
13695 var ret = "";
13696 var uchar;
13697 while(!!(uchar = it.next())){
13698 ret += uchar.toString();
13699 }
13700 return ret;
13701 };
13702
13703 /* API functions */
13704 function nfd(str){
13705 return normalize("NFD", str);
13706 }
13707
13708 function nfkd(str){
13709 return normalize("NFKD", str);
13710 }
13711
13712 function nfc(str){
13713 return normalize("NFC", str);
13714 }
13715
13716 function nfkc(str){
13717 return normalize("NFKC", str);
13718 }
13719
13720 /* Unicode data */
13721 UChar.udata={
13722 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]]},
13723 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]},
13724 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]},
13725 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]},
13726 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]]},
13727 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]},
13728 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]},
13729 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]},
13730 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]},
13731 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]},
13732 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]},
13733 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]},
13734 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]},
13735 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]]},
13736 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]},
13737 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]},
13738 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]},
13739 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]},
13740 4608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
13741 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]},
13742 5120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
13743 5376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
13744 5632:{71231:[,9],71350:[,9],71351:[,7]},
13745 5888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
13746 6144:{6313:[,228]},
13747 6400:{6457:[,222],6458:[,230],6459:[,220]},
13748 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]},
13749 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]},
13750 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]},
13751 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]},
13752 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]]},
13753 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}]},
13754 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]},
13755 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}]},
13756 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]]},
13757 8960:{9001:[[12296]],9002:[[12297]]},
13758 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]},
13759 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]},
13760 11264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
13761 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]},
13762 11776:{11935:[[27597],256],12019:[[40863],256]},
13763 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]},
13764 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]},
13765 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]},
13766 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]},
13767 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]},
13768 27136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
13769 27392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
13770 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]},
13771 42752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
13772 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]},
13773 43264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
13774 43520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
13775 43776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
13776 48128:{113822:[,1]},
13777 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]},
13778 53760:{119362:[,230],119363:[,230],119364:[,230]},
13779 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]},
13780 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]},
13781 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]},
13782 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]},
13783 59392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
13784 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]},
13785 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]},
13786 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]},
13787 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]]},
13788 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]]},
13789 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]]},
13790 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]},
13791 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]},
13792 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]},
13793 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]},
13794 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]}
13795
13796 };
13797
13798 /***** Module to export */
13799 var unorm = {
13800 nfc: nfc,
13801 nfd: nfd,
13802 nfkc: nfkc,
13803 nfkd: nfkd
13804 };
13805
13806 /*globals module:true,define:true*/
13807
13808 // CommonJS
13809 if (typeof module === "object") {
13810 module.exports = unorm;
13811
13812 // AMD
13813 } else if (typeof define === "function" && define.amd) {
13814 define("unorm", function () {
13815 return unorm;
13816 });
13817
13818 // Global
13819 } else {
13820 root.unorm = unorm;
13821 }
13822
13823 /***** Export as shim for String::normalize method *****/
13824 /*
13825 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
13826
13827 21.1.3.12 String.prototype.normalize(form="NFC")
13828 When the normalize method is called with one argument form, the following steps are taken:
13829
13830 1. Let O be CheckObjectCoercible(this value).
13831 2. Let S be ToString(O).
13832 3. ReturnIfAbrupt(S).
13833 4. If form is not provided or undefined let form be "NFC".
13834 5. Let f be ToString(form).
13835 6. ReturnIfAbrupt(f).
13836 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
13837 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.
13838 9. Return ns.
13839
13840 The length property of the normalize method is 0.
13841
13842 *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.
13843 */
13844 unorm.shimApplied = false;
13845
13846 if (!String.prototype.normalize) {
13847 String.prototype.normalize = function(form) {
13848 var str = "" + this;
13849 form = form === undefined ? "NFC" : form;
13850
13851 if (form === "NFC") {
13852 return unorm.nfc(str);
13853 } else if (form === "NFD") {
13854 return unorm.nfd(str);
13855 } else if (form === "NFKC") {
13856 return unorm.nfkc(str);
13857 } else if (form === "NFKD") {
13858 return unorm.nfkd(str);
13859 } else {
13860 throw new RangeError("Invalid normalization form: " + form);
13861 }
13862 };
13863
13864 unorm.shimApplied = true;
13865 }
13866 }(this));
13867 </script>
13868 <script>/*!
13869 * jQuery JavaScript Library v3.2.1
13870 * https://jquery.com/
13871 *
13872 * Includes Sizzle.js
13873 * https://sizzlejs.com/
13874 *
13875 * Copyright JS Foundation and other contributors
13876 * Released under the MIT license
13877 * https://jquery.org/license
13878 *
13879 * Date: 2017-03-20T18:59Z
13880 */
13881 ( function( global, factory ) {
13882
13883 "use strict";
13884
13885 if ( typeof module === "object" && typeof module.exports === "object" ) {
13886
13887 // For CommonJS and CommonJS-like environments where a proper `window`
13888 // is present, execute the factory and get jQuery.
13889 // For environments that do not have a `window` with a `document`
13890 // (such as Node.js), expose a factory as module.exports.
13891 // This accentuates the need for the creation of a real `window`.
13892 // e.g. var jQuery = require("jquery")(window);
13893 // See ticket #14549 for more info.
13894 module.exports = global.document ?
13895 factory( global, true ) :
13896 function( w ) {
13897 if ( !w.document ) {
13898 throw new Error( "jQuery requires a window with a document" );
13899 }
13900 return factory( w );
13901 };
13902 } else {
13903 factory( global );
13904 }
13905
13906 // Pass this if window is not defined yet
13907 } )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
13908
13909 // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
13910 // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
13911 // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
13912 // enough that all such attempts are guarded in a try block.
13913 "use strict";
13914
13915 var arr = [];
13916
13917 var document = window.document;
13918
13919 var getProto = Object.getPrototypeOf;
13920
13921 var slice = arr.slice;
13922
13923 var concat = arr.concat;
13924
13925 var push = arr.push;
13926
13927 var indexOf = arr.indexOf;
13928
13929 var class2type = {};
13930
13931 var toString = class2type.toString;
13932
13933 var hasOwn = class2type.hasOwnProperty;
13934
13935 var fnToString = hasOwn.toString;
13936
13937 var ObjectFunctionString = fnToString.call( Object );
13938
13939 var support = {};
13940
13941
13942
13943 function DOMEval( code, doc ) {
13944 doc = doc || document;
13945
13946 var script = doc.createElement( "script" );
13947
13948 script.text = code;
13949 doc.head.appendChild( script ).parentNode.removeChild( script );
13950 }
13951 /* global Symbol */
13952 // Defining this global in .eslintrc.json would create a danger of using the global
13953 // unguarded in another place, it seems safer to define global only for this module
13954
13955
13956
13957 var
13958 version = "3.2.1",
13959
13960 // Define a local copy of jQuery
13961 jQuery = function( selector, context ) {
13962
13963 // The jQuery object is actually just the init constructor 'enhanced'
13964 // Need init if jQuery is called (just allow error to be thrown if not included)
13965 return new jQuery.fn.init( selector, context );
13966 },
13967
13968 // Support: Android <=4.0 only
13969 // Make sure we trim BOM and NBSP
13970 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
13971
13972 // Matches dashed string for camelizing
13973 rmsPrefix = /^-ms-/,
13974 rdashAlpha = /-([a-z])/g,
13975
13976 // Used by jQuery.camelCase as callback to replace()
13977 fcamelCase = function( all, letter ) {
13978 return letter.toUpperCase();
13979 };
13980
13981 jQuery.fn = jQuery.prototype = {
13982
13983 // The current version of jQuery being used
13984 jquery: version,
13985
13986 constructor: jQuery,
13987
13988 // The default length of a jQuery object is 0
13989 length: 0,
13990
13991 toArray: function() {
13992 return slice.call( this );
13993 },
13994
13995 // Get the Nth element in the matched element set OR
13996 // Get the whole matched element set as a clean array
13997 get: function( num ) {
13998
13999 // Return all the elements in a clean array
14000 if ( num == null ) {
14001 return slice.call( this );
14002 }
14003
14004 // Return just the one element from the set
14005 return num < 0 ? this[ num + this.length ] : this[ num ];
14006 },
14007
14008 // Take an array of elements and push it onto the stack
14009 // (returning the new matched element set)
14010 pushStack: function( elems ) {
14011
14012 // Build a new jQuery matched element set
14013 var ret = jQuery.merge( this.constructor(), elems );
14014
14015 // Add the old object onto the stack (as a reference)
14016 ret.prevObject = this;
14017
14018 // Return the newly-formed element set
14019 return ret;
14020 },
14021
14022 // Execute a callback for every element in the matched set.
14023 each: function( callback ) {
14024 return jQuery.each( this, callback );
14025 },
14026
14027 map: function( callback ) {
14028 return this.pushStack( jQuery.map( this, function( elem, i ) {
14029 return callback.call( elem, i, elem );
14030 } ) );
14031 },
14032
14033 slice: function() {
14034 return this.pushStack( slice.apply( this, arguments ) );
14035 },
14036
14037 first: function() {
14038 return this.eq( 0 );
14039 },
14040
14041 last: function() {
14042 return this.eq( -1 );
14043 },
14044
14045 eq: function( i ) {
14046 var len = this.length,
14047 j = +i + ( i < 0 ? len : 0 );
14048 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
14049 },
14050
14051 end: function() {
14052 return this.prevObject || this.constructor();
14053 },
14054
14055 // For internal use only.
14056 // Behaves like an Array's method, not like a jQuery method.
14057 push: push,
14058 sort: arr.sort,
14059 splice: arr.splice
14060 };
14061
14062 jQuery.extend = jQuery.fn.extend = function() {
14063 var options, name, src, copy, copyIsArray, clone,
14064 target = arguments[ 0 ] || {},
14065 i = 1,
14066 length = arguments.length,
14067 deep = false;
14068
14069 // Handle a deep copy situation
14070 if ( typeof target === "boolean" ) {
14071 deep = target;
14072
14073 // Skip the boolean and the target
14074 target = arguments[ i ] || {};
14075 i++;
14076 }
14077
14078 // Handle case when target is a string or something (possible in deep copy)
14079 if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
14080 target = {};
14081 }
14082
14083 // Extend jQuery itself if only one argument is passed
14084 if ( i === length ) {
14085 target = this;
14086 i--;
14087 }
14088
14089 for ( ; i < length; i++ ) {
14090
14091 // Only deal with non-null/undefined values
14092 if ( ( options = arguments[ i ] ) != null ) {
14093
14094 // Extend the base object
14095 for ( name in options ) {
14096 src = target[ name ];
14097 copy = options[ name ];
14098
14099 // Prevent never-ending loop
14100 if ( target === copy ) {
14101 continue;
14102 }
14103
14104 // Recurse if we're merging plain objects or arrays
14105 if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
14106 ( copyIsArray = Array.isArray( copy ) ) ) ) {
14107
14108 if ( copyIsArray ) {
14109 copyIsArray = false;
14110 clone = src && Array.isArray( src ) ? src : [];
14111
14112 } else {
14113 clone = src && jQuery.isPlainObject( src ) ? src : {};
14114 }
14115
14116 // Never move original objects, clone them
14117 target[ name ] = jQuery.extend( deep, clone, copy );
14118
14119 // Don't bring in undefined values
14120 } else if ( copy !== undefined ) {
14121 target[ name ] = copy;
14122 }
14123 }
14124 }
14125 }
14126
14127 // Return the modified object
14128 return target;
14129 };
14130
14131 jQuery.extend( {
14132
14133 // Unique for each copy of jQuery on the page
14134 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
14135
14136 // Assume jQuery is ready without the ready module
14137 isReady: true,
14138
14139 error: function( msg ) {
14140 throw new Error( msg );
14141 },
14142
14143 noop: function() {},
14144
14145 isFunction: function( obj ) {
14146 return jQuery.type( obj ) === "function";
14147 },
14148
14149 isWindow: function( obj ) {
14150 return obj != null && obj === obj.window;
14151 },
14152
14153 isNumeric: function( obj ) {
14154
14155 // As of jQuery 3.0, isNumeric is limited to
14156 // strings and numbers (primitives or objects)
14157 // that can be coerced to finite numbers (gh-2662)
14158 var type = jQuery.type( obj );
14159 return ( type === "number" || type === "string" ) &&
14160
14161 // parseFloat NaNs numeric-cast false positives ("")
14162 // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
14163 // subtraction forces infinities to NaN
14164 !isNaN( obj - parseFloat( obj ) );
14165 },
14166
14167 isPlainObject: function( obj ) {
14168 var proto, Ctor;
14169
14170 // Detect obvious negatives
14171 // Use toString instead of jQuery.type to catch host objects
14172 if ( !obj || toString.call( obj ) !== "[object Object]" ) {
14173 return false;
14174 }
14175
14176 proto = getProto( obj );
14177
14178 // Objects with no prototype (e.g., `Object.create( null )`) are plain
14179 if ( !proto ) {
14180 return true;
14181 }
14182
14183 // Objects with prototype are plain iff they were constructed by a global Object function
14184 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
14185 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
14186 },
14187
14188 isEmptyObject: function( obj ) {
14189
14190 /* eslint-disable no-unused-vars */
14191 // See https://github.com/eslint/eslint/issues/6125
14192 var name;
14193
14194 for ( name in obj ) {
14195 return false;
14196 }
14197 return true;
14198 },
14199
14200 type: function( obj ) {
14201 if ( obj == null ) {
14202 return obj + "";
14203 }
14204
14205 // Support: Android <=2.3 only (functionish RegExp)
14206 return typeof obj === "object" || typeof obj === "function" ?
14207 class2type[ toString.call( obj ) ] || "object" :
14208 typeof obj;
14209 },
14210
14211 // Evaluates a script in a global context
14212 globalEval: function( code ) {
14213 DOMEval( code );
14214 },
14215
14216 // Convert dashed to camelCase; used by the css and data modules
14217 // Support: IE <=9 - 11, Edge 12 - 13
14218 // Microsoft forgot to hump their vendor prefix (#9572)
14219 camelCase: function( string ) {
14220 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
14221 },
14222
14223 each: function( obj, callback ) {
14224 var length, i = 0;
14225
14226 if ( isArrayLike( obj ) ) {
14227 length = obj.length;
14228 for ( ; i < length; i++ ) {
14229 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
14230 break;
14231 }
14232 }
14233 } else {
14234 for ( i in obj ) {
14235 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
14236 break;
14237 }
14238 }
14239 }
14240
14241 return obj;
14242 },
14243
14244 // Support: Android <=4.0 only
14245 trim: function( text ) {
14246 return text == null ?
14247 "" :
14248 ( text + "" ).replace( rtrim, "" );
14249 },
14250
14251 // results is for internal usage only
14252 makeArray: function( arr, results ) {
14253 var ret = results || [];
14254
14255 if ( arr != null ) {
14256 if ( isArrayLike( Object( arr ) ) ) {
14257 jQuery.merge( ret,
14258 typeof arr === "string" ?
14259 [ arr ] : arr
14260 );
14261 } else {
14262 push.call( ret, arr );
14263 }
14264 }
14265
14266 return ret;
14267 },
14268
14269 inArray: function( elem, arr, i ) {
14270 return arr == null ? -1 : indexOf.call( arr, elem, i );
14271 },
14272
14273 // Support: Android <=4.0 only, PhantomJS 1 only
14274 // push.apply(_, arraylike) throws on ancient WebKit
14275 merge: function( first, second ) {
14276 var len = +second.length,
14277 j = 0,
14278 i = first.length;
14279
14280 for ( ; j < len; j++ ) {
14281 first[ i++ ] = second[ j ];
14282 }
14283
14284 first.length = i;
14285
14286 return first;
14287 },
14288
14289 grep: function( elems, callback, invert ) {
14290 var callbackInverse,
14291 matches = [],
14292 i = 0,
14293 length = elems.length,
14294 callbackExpect = !invert;
14295
14296 // Go through the array, only saving the items
14297 // that pass the validator function
14298 for ( ; i < length; i++ ) {
14299 callbackInverse = !callback( elems[ i ], i );
14300 if ( callbackInverse !== callbackExpect ) {
14301 matches.push( elems[ i ] );
14302 }
14303 }
14304
14305 return matches;
14306 },
14307
14308 // arg is for internal usage only
14309 map: function( elems, callback, arg ) {
14310 var length, value,
14311 i = 0,
14312 ret = [];
14313
14314 // Go through the array, translating each of the items to their new values
14315 if ( isArrayLike( elems ) ) {
14316 length = elems.length;
14317 for ( ; i < length; i++ ) {
14318 value = callback( elems[ i ], i, arg );
14319
14320 if ( value != null ) {
14321 ret.push( value );
14322 }
14323 }
14324
14325 // Go through every key on the object,
14326 } else {
14327 for ( i in elems ) {
14328 value = callback( elems[ i ], i, arg );
14329
14330 if ( value != null ) {
14331 ret.push( value );
14332 }
14333 }
14334 }
14335
14336 // Flatten any nested arrays
14337 return concat.apply( [], ret );
14338 },
14339
14340 // A global GUID counter for objects
14341 guid: 1,
14342
14343 // Bind a function to a context, optionally partially applying any
14344 // arguments.
14345 proxy: function( fn, context ) {
14346 var tmp, args, proxy;
14347
14348 if ( typeof context === "string" ) {
14349 tmp = fn[ context ];
14350 context = fn;
14351 fn = tmp;
14352 }
14353
14354 // Quick check to determine if target is callable, in the spec
14355 // this throws a TypeError, but we will just return undefined.
14356 if ( !jQuery.isFunction( fn ) ) {
14357 return undefined;
14358 }
14359
14360 // Simulated bind
14361 args = slice.call( arguments, 2 );
14362 proxy = function() {
14363 return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
14364 };
14365
14366 // Set the guid of unique handler to the same of original handler, so it can be removed
14367 proxy.guid = fn.guid = fn.guid || jQuery.guid++;
14368
14369 return proxy;
14370 },
14371
14372 now: Date.now,
14373
14374 // jQuery.support is not used in Core but other projects attach their
14375 // properties to it so it needs to exist.
14376 support: support
14377 } );
14378
14379 if ( typeof Symbol === "function" ) {
14380 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
14381 }
14382
14383 // Populate the class2type map
14384 jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
14385 function( i, name ) {
14386 class2type[ "[object " + name + "]" ] = name.toLowerCase();
14387 } );
14388
14389 function isArrayLike( obj ) {
14390
14391 // Support: real iOS 8.2 only (not reproducible in simulator)
14392 // `in` check used to prevent JIT error (gh-2145)
14393 // hasOwn isn't used here due to false negatives
14394 // regarding Nodelist length in IE
14395 var length = !!obj && "length" in obj && obj.length,
14396 type = jQuery.type( obj );
14397
14398 if ( type === "function" || jQuery.isWindow( obj ) ) {
14399 return false;
14400 }
14401
14402 return type === "array" || length === 0 ||
14403 typeof length === "number" && length > 0 && ( length - 1 ) in obj;
14404 }
14405 var Sizzle =
14406 /*!
14407 * Sizzle CSS Selector Engine v2.3.3
14408 * https://sizzlejs.com/
14409 *
14410 * Copyright jQuery Foundation and other contributors
14411 * Released under the MIT license
14412 * http://jquery.org/license
14413 *
14414 * Date: 2016-08-08
14415 */
14416 (function( window ) {
14417
14418 var i,
14419 support,
14420 Expr,
14421 getText,
14422 isXML,
14423 tokenize,
14424 compile,
14425 select,
14426 outermostContext,
14427 sortInput,
14428 hasDuplicate,
14429
14430 // Local document vars
14431 setDocument,
14432 document,
14433 docElem,
14434 documentIsHTML,
14435 rbuggyQSA,
14436 rbuggyMatches,
14437 matches,
14438 contains,
14439
14440 // Instance-specific data
14441 expando = "sizzle" + 1 * new Date(),
14442 preferredDoc = window.document,
14443 dirruns = 0,
14444 done = 0,
14445 classCache = createCache(),
14446 tokenCache = createCache(),
14447 compilerCache = createCache(),
14448 sortOrder = function( a, b ) {
14449 if ( a === b ) {
14450 hasDuplicate = true;
14451 }
14452 return 0;
14453 },
14454
14455 // Instance methods
14456 hasOwn = ({}).hasOwnProperty,
14457 arr = [],
14458 pop = arr.pop,
14459 push_native = arr.push,
14460 push = arr.push,
14461 slice = arr.slice,
14462 // Use a stripped-down indexOf as it's faster than native
14463 // https://jsperf.com/thor-indexof-vs-for/5
14464 indexOf = function( list, elem ) {
14465 var i = 0,
14466 len = list.length;
14467 for ( ; i < len; i++ ) {
14468 if ( list[i] === elem ) {
14469 return i;
14470 }
14471 }
14472 return -1;
14473 },
14474
14475 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
14476
14477 // Regular expressions
14478
14479 // http://www.w3.org/TR/css3-selectors/#whitespace
14480 whitespace = "[\\x20\\t\\r\\n\\f]",
14481
14482 // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
14483 identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
14484
14485 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
14486 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
14487 // Operator (capture 2)
14488 "*([*^$|!~]?=)" + whitespace +
14489 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
14490 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
14491 "*\\]",
14492
14493 pseudos = ":(" + identifier + ")(?:\\((" +
14494 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
14495 // 1. quoted (capture 3; capture 4 or capture 5)
14496 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
14497 // 2. simple (capture 6)
14498 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
14499 // 3. anything else (capture 2)
14500 ".*" +
14501 ")\\)|)",
14502
14503 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
14504 rwhitespace = new RegExp( whitespace + "+", "g" ),
14505 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
14506
14507 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
14508 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
14509
14510 rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
14511
14512 rpseudo = new RegExp( pseudos ),
14513 ridentifier = new RegExp( "^" + identifier + "$" ),
14514
14515 matchExpr = {
14516 "ID": new RegExp( "^#(" + identifier + ")" ),
14517 "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
14518 "TAG": new RegExp( "^(" + identifier + "|[*])" ),
14519 "ATTR": new RegExp( "^" + attributes ),
14520 "PSEUDO": new RegExp( "^" + pseudos ),
14521 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
14522 "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
14523 "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
14524 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
14525 // For use in libraries implementing .is()
14526 // We use this for POS matching in `select`
14527 "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
14528 whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
14529 },
14530
14531 rinputs = /^(?:input|select|textarea|button)$/i,
14532 rheader = /^h\d$/i,
14533
14534 rnative = /^[^{]+\{\s*\[native \w/,
14535
14536 // Easily-parseable/retrievable ID or TAG or CLASS selectors
14537 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
14538
14539 rsibling = /[+~]/,
14540
14541 // CSS escapes
14542 // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
14543 runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
14544 funescape = function( _, escaped, escapedWhitespace ) {
14545 var high = "0x" + escaped - 0x10000;
14546 // NaN means non-codepoint
14547 // Support: Firefox<24
14548 // Workaround erroneous numeric interpretation of +"0x"
14549 return high !== high || escapedWhitespace ?
14550 escaped :
14551 high < 0 ?
14552 // BMP codepoint
14553 String.fromCharCode( high + 0x10000 ) :
14554 // Supplemental Plane codepoint (surrogate pair)
14555 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
14556 },
14557
14558 // CSS string/identifier serialization
14559 // https://drafts.csswg.org/cssom/#common-serializing-idioms
14560 rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
14561 fcssescape = function( ch, asCodePoint ) {
14562 if ( asCodePoint ) {
14563
14564 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
14565 if ( ch === "\0" ) {
14566 return "\uFFFD";
14567 }
14568
14569 // Control characters and (dependent upon position) numbers get escaped as code points
14570 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
14571 }
14572
14573 // Other potentially-special ASCII characters get backslash-escaped
14574 return "\\" + ch;
14575 },
14576
14577 // Used for iframes
14578 // See setDocument()
14579 // Removing the function wrapper causes a "Permission Denied"
14580 // error in IE
14581 unloadHandler = function() {
14582 setDocument();
14583 },
14584
14585 disabledAncestor = addCombinator(
14586 function( elem ) {
14587 return elem.disabled === true && ("form" in elem || "label" in elem);
14588 },
14589 { dir: "parentNode", next: "legend" }
14590 );
14591
14592 // Optimize for push.apply( _, NodeList )
14593 try {
14594 push.apply(
14595 (arr = slice.call( preferredDoc.childNodes )),
14596 preferredDoc.childNodes
14597 );
14598 // Support: Android<4.0
14599 // Detect silently failing push.apply
14600 arr[ preferredDoc.childNodes.length ].nodeType;
14601 } catch ( e ) {
14602 push = { apply: arr.length ?
14603
14604 // Leverage slice if possible
14605 function( target, els ) {
14606 push_native.apply( target, slice.call(els) );
14607 } :
14608
14609 // Support: IE<9
14610 // Otherwise append directly
14611 function( target, els ) {
14612 var j = target.length,
14613 i = 0;
14614 // Can't trust NodeList.length
14615 while ( (target[j++] = els[i++]) ) {}
14616 target.length = j - 1;
14617 }
14618 };
14619 }
14620
14621 function Sizzle( selector, context, results, seed ) {
14622 var m, i, elem, nid, match, groups, newSelector,
14623 newContext = context && context.ownerDocument,
14624
14625 // nodeType defaults to 9, since context defaults to document
14626 nodeType = context ? context.nodeType : 9;
14627
14628 results = results || [];
14629
14630 // Return early from calls with invalid selector or context
14631 if ( typeof selector !== "string" || !selector ||
14632 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
14633
14634 return results;
14635 }
14636
14637 // Try to shortcut find operations (as opposed to filters) in HTML documents
14638 if ( !seed ) {
14639
14640 if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
14641 setDocument( context );
14642 }
14643 context = context || document;
14644
14645 if ( documentIsHTML ) {
14646
14647 // If the selector is sufficiently simple, try using a "get*By*" DOM method
14648 // (excepting DocumentFragment context, where the methods don't exist)
14649 if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
14650
14651 // ID selector
14652 if ( (m = match[1]) ) {
14653
14654 // Document context
14655 if ( nodeType === 9 ) {
14656 if ( (elem = context.getElementById( m )) ) {
14657
14658 // Support: IE, Opera, Webkit
14659 // TODO: identify versions
14660 // getElementById can match elements by name instead of ID
14661 if ( elem.id === m ) {
14662 results.push( elem );
14663 return results;
14664 }
14665 } else {
14666 return results;
14667 }
14668
14669 // Element context
14670 } else {
14671
14672 // Support: IE, Opera, Webkit
14673 // TODO: identify versions
14674 // getElementById can match elements by name instead of ID
14675 if ( newContext && (elem = newContext.getElementById( m )) &&
14676 contains( context, elem ) &&
14677 elem.id === m ) {
14678
14679 results.push( elem );
14680 return results;
14681 }
14682 }
14683
14684 // Type selector
14685 } else if ( match[2] ) {
14686 push.apply( results, context.getElementsByTagName( selector ) );
14687 return results;
14688
14689 // Class selector
14690 } else if ( (m = match[3]) && support.getElementsByClassName &&
14691 context.getElementsByClassName ) {
14692
14693 push.apply( results, context.getElementsByClassName( m ) );
14694 return results;
14695 }
14696 }
14697
14698 // Take advantage of querySelectorAll
14699 if ( support.qsa &&
14700 !compilerCache[ selector + " " ] &&
14701 (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
14702
14703 if ( nodeType !== 1 ) {
14704 newContext = context;
14705 newSelector = selector;
14706
14707 // qSA looks outside Element context, which is not what we want
14708 // Thanks to Andrew Dupont for this workaround technique
14709 // Support: IE <=8
14710 // Exclude object elements
14711 } else if ( context.nodeName.toLowerCase() !== "object" ) {
14712
14713 // Capture the context ID, setting it first if necessary
14714 if ( (nid = context.getAttribute( "id" )) ) {
14715 nid = nid.replace( rcssescape, fcssescape );
14716 } else {
14717 context.setAttribute( "id", (nid = expando) );
14718 }
14719
14720 // Prefix every selector in the list
14721 groups = tokenize( selector );
14722 i = groups.length;
14723 while ( i-- ) {
14724 groups[i] = "#" + nid + " " + toSelector( groups[i] );
14725 }
14726 newSelector = groups.join( "," );
14727
14728 // Expand context for sibling selectors
14729 newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
14730 context;
14731 }
14732
14733 if ( newSelector ) {
14734 try {
14735 push.apply( results,
14736 newContext.querySelectorAll( newSelector )
14737 );
14738 return results;
14739 } catch ( qsaError ) {
14740 } finally {
14741 if ( nid === expando ) {
14742 context.removeAttribute( "id" );
14743 }
14744 }
14745 }
14746 }
14747 }
14748 }
14749
14750 // All others
14751 return select( selector.replace( rtrim, "$1" ), context, results, seed );
14752 }
14753
14754 /**
14755 * Create key-value caches of limited size
14756 * @returns {function(string, object)} Returns the Object data after storing it on itself with
14757 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
14758 * deleting the oldest entry
14759 */
14760 function createCache() {
14761 var keys = [];
14762
14763 function cache( key, value ) {
14764 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
14765 if ( keys.push( key + " " ) > Expr.cacheLength ) {
14766 // Only keep the most recent entries
14767 delete cache[ keys.shift() ];
14768 }
14769 return (cache[ key + " " ] = value);
14770 }
14771 return cache;
14772 }
14773
14774 /**
14775 * Mark a function for special use by Sizzle
14776 * @param {Function} fn The function to mark
14777 */
14778 function markFunction( fn ) {
14779 fn[ expando ] = true;
14780 return fn;
14781 }
14782
14783 /**
14784 * Support testing using an element
14785 * @param {Function} fn Passed the created element and returns a boolean result
14786 */
14787 function assert( fn ) {
14788 var el = document.createElement("fieldset");
14789
14790 try {
14791 return !!fn( el );
14792 } catch (e) {
14793 return false;
14794 } finally {
14795 // Remove from its parent by default
14796 if ( el.parentNode ) {
14797 el.parentNode.removeChild( el );
14798 }
14799 // release memory in IE
14800 el = null;
14801 }
14802 }
14803
14804 /**
14805 * Adds the same handler for all of the specified attrs
14806 * @param {String} attrs Pipe-separated list of attributes
14807 * @param {Function} handler The method that will be applied
14808 */
14809 function addHandle( attrs, handler ) {
14810 var arr = attrs.split("|"),
14811 i = arr.length;
14812
14813 while ( i-- ) {
14814 Expr.attrHandle[ arr[i] ] = handler;
14815 }
14816 }
14817
14818 /**
14819 * Checks document order of two siblings
14820 * @param {Element} a
14821 * @param {Element} b
14822 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
14823 */
14824 function siblingCheck( a, b ) {
14825 var cur = b && a,
14826 diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
14827 a.sourceIndex - b.sourceIndex;
14828
14829 // Use IE sourceIndex if available on both nodes
14830 if ( diff ) {
14831 return diff;
14832 }
14833
14834 // Check if b follows a
14835 if ( cur ) {
14836 while ( (cur = cur.nextSibling) ) {
14837 if ( cur === b ) {
14838 return -1;
14839 }
14840 }
14841 }
14842
14843 return a ? 1 : -1;
14844 }
14845
14846 /**
14847 * Returns a function to use in pseudos for input types
14848 * @param {String} type
14849 */
14850 function createInputPseudo( type ) {
14851 return function( elem ) {
14852 var name = elem.nodeName.toLowerCase();
14853 return name === "input" && elem.type === type;
14854 };
14855 }
14856
14857 /**
14858 * Returns a function to use in pseudos for buttons
14859 * @param {String} type
14860 */
14861 function createButtonPseudo( type ) {
14862 return function( elem ) {
14863 var name = elem.nodeName.toLowerCase();
14864 return (name === "input" || name === "button") && elem.type === type;
14865 };
14866 }
14867
14868 /**
14869 * Returns a function to use in pseudos for :enabled/:disabled
14870 * @param {Boolean} disabled true for :disabled; false for :enabled
14871 */
14872 function createDisabledPseudo( disabled ) {
14873
14874 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
14875 return function( elem ) {
14876
14877 // Only certain elements can match :enabled or :disabled
14878 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
14879 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
14880 if ( "form" in elem ) {
14881
14882 // Check for inherited disabledness on relevant non-disabled elements:
14883 // * listed form-associated elements in a disabled fieldset
14884 // https://html.spec.whatwg.org/multipage/forms.html#category-listed
14885 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
14886 // * option elements in a disabled optgroup
14887 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
14888 // All such elements have a "form" property.
14889 if ( elem.parentNode && elem.disabled === false ) {
14890
14891 // Option elements defer to a parent optgroup if present
14892 if ( "label" in elem ) {
14893 if ( "label" in elem.parentNode ) {
14894 return elem.parentNode.disabled === disabled;
14895 } else {
14896 return elem.disabled === disabled;
14897 }
14898 }
14899
14900 // Support: IE 6 - 11
14901 // Use the isDisabled shortcut property to check for disabled fieldset ancestors
14902 return elem.isDisabled === disabled ||
14903
14904 // Where there is no isDisabled, check manually
14905 /* jshint -W018 */
14906 elem.isDisabled !== !disabled &&
14907 disabledAncestor( elem ) === disabled;
14908 }
14909
14910 return elem.disabled === disabled;
14911
14912 // Try to winnow out elements that can't be disabled before trusting the disabled property.
14913 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
14914 // even exist on them, let alone have a boolean value.
14915 } else if ( "label" in elem ) {
14916 return elem.disabled === disabled;
14917 }
14918
14919 // Remaining elements are neither :enabled nor :disabled
14920 return false;
14921 };
14922 }
14923
14924 /**
14925 * Returns a function to use in pseudos for positionals
14926 * @param {Function} fn
14927 */
14928 function createPositionalPseudo( fn ) {
14929 return markFunction(function( argument ) {
14930 argument = +argument;
14931 return markFunction(function( seed, matches ) {
14932 var j,
14933 matchIndexes = fn( [], seed.length, argument ),
14934 i = matchIndexes.length;
14935
14936 // Match elements found at the specified indexes
14937 while ( i-- ) {
14938 if ( seed[ (j = matchIndexes[i]) ] ) {
14939 seed[j] = !(matches[j] = seed[j]);
14940 }
14941 }
14942 });
14943 });
14944 }
14945
14946 /**
14947 * Checks a node for validity as a Sizzle context
14948 * @param {Element|Object=} context
14949 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
14950 */
14951 function testContext( context ) {
14952 return context && typeof context.getElementsByTagName !== "undefined" && context;
14953 }
14954
14955 // Expose support vars for convenience
14956 support = Sizzle.support = {};
14957
14958 /**
14959 * Detects XML nodes
14960 * @param {Element|Object} elem An element or a document
14961 * @returns {Boolean} True iff elem is a non-HTML XML node
14962 */
14963 isXML = Sizzle.isXML = function( elem ) {
14964 // documentElement is verified for cases where it doesn't yet exist
14965 // (such as loading iframes in IE - #4833)
14966 var documentElement = elem && (elem.ownerDocument || elem).documentElement;
14967 return documentElement ? documentElement.nodeName !== "HTML" : false;
14968 };
14969
14970 /**
14971 * Sets document-related variables once based on the current document
14972 * @param {Element|Object} [doc] An element or document object to use to set the document
14973 * @returns {Object} Returns the current document
14974 */
14975 setDocument = Sizzle.setDocument = function( node ) {
14976 var hasCompare, subWindow,
14977 doc = node ? node.ownerDocument || node : preferredDoc;
14978
14979 // Return early if doc is invalid or already selected
14980 if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
14981 return document;
14982 }
14983
14984 // Update global variables
14985 document = doc;
14986 docElem = document.documentElement;
14987 documentIsHTML = !isXML( document );
14988
14989 // Support: IE 9-11, Edge
14990 // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
14991 if ( preferredDoc !== document &&
14992 (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
14993
14994 // Support: IE 11, Edge
14995 if ( subWindow.addEventListener ) {
14996 subWindow.addEventListener( "unload", unloadHandler, false );
14997
14998 // Support: IE 9 - 10 only
14999 } else if ( subWindow.attachEvent ) {
15000 subWindow.attachEvent( "onunload", unloadHandler );
15001 }
15002 }
15003
15004 /* Attributes
15005 ---------------------------------------------------------------------- */
15006
15007 // Support: IE<8
15008 // Verify that getAttribute really returns attributes and not properties
15009 // (excepting IE8 booleans)
15010 support.attributes = assert(function( el ) {
15011 el.className = "i";
15012 return !el.getAttribute("className");
15013 });
15014
15015 /* getElement(s)By*
15016 ---------------------------------------------------------------------- */
15017
15018 // Check if getElementsByTagName("*") returns only elements
15019 support.getElementsByTagName = assert(function( el ) {
15020 el.appendChild( document.createComment("") );
15021 return !el.getElementsByTagName("*").length;
15022 });
15023
15024 // Support: IE<9
15025 support.getElementsByClassName = rnative.test( document.getElementsByClassName );
15026
15027 // Support: IE<10
15028 // Check if getElementById returns elements by name
15029 // The broken getElementById methods don't pick up programmatically-set names,
15030 // so use a roundabout getElementsByName test
15031 support.getById = assert(function( el ) {
15032 docElem.appendChild( el ).id = expando;
15033 return !document.getElementsByName || !document.getElementsByName( expando ).length;
15034 });
15035
15036 // ID filter and find
15037 if ( support.getById ) {
15038 Expr.filter["ID"] = function( id ) {
15039 var attrId = id.replace( runescape, funescape );
15040 return function( elem ) {
15041 return elem.getAttribute("id") === attrId;
15042 };
15043 };
15044 Expr.find["ID"] = function( id, context ) {
15045 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
15046 var elem = context.getElementById( id );
15047 return elem ? [ elem ] : [];
15048 }
15049 };
15050 } else {
15051 Expr.filter["ID"] = function( id ) {
15052 var attrId = id.replace( runescape, funescape );
15053 return function( elem ) {
15054 var node = typeof elem.getAttributeNode !== "undefined" &&
15055 elem.getAttributeNode("id");
15056 return node && node.value === attrId;
15057 };
15058 };
15059
15060 // Support: IE 6 - 7 only
15061 // getElementById is not reliable as a find shortcut
15062 Expr.find["ID"] = function( id, context ) {
15063 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
15064 var node, i, elems,
15065 elem = context.getElementById( id );
15066
15067 if ( elem ) {
15068
15069 // Verify the id attribute
15070 node = elem.getAttributeNode("id");
15071 if ( node && node.value === id ) {
15072 return [ elem ];
15073 }
15074
15075 // Fall back on getElementsByName
15076 elems = context.getElementsByName( id );
15077 i = 0;
15078 while ( (elem = elems[i++]) ) {
15079 node = elem.getAttributeNode("id");
15080 if ( node && node.value === id ) {
15081 return [ elem ];
15082 }
15083 }
15084 }
15085
15086 return [];
15087 }
15088 };
15089 }
15090
15091 // Tag
15092 Expr.find["TAG"] = support.getElementsByTagName ?
15093 function( tag, context ) {
15094 if ( typeof context.getElementsByTagName !== "undefined" ) {
15095 return context.getElementsByTagName( tag );
15096
15097 // DocumentFragment nodes don't have gEBTN
15098 } else if ( support.qsa ) {
15099 return context.querySelectorAll( tag );
15100 }
15101 } :
15102
15103 function( tag, context ) {
15104 var elem,
15105 tmp = [],
15106 i = 0,
15107 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
15108 results = context.getElementsByTagName( tag );
15109
15110 // Filter out possible comments
15111 if ( tag === "*" ) {
15112 while ( (elem = results[i++]) ) {
15113 if ( elem.nodeType === 1 ) {
15114 tmp.push( elem );
15115 }
15116 }
15117
15118 return tmp;
15119 }
15120 return results;
15121 };
15122
15123 // Class
15124 Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
15125 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
15126 return context.getElementsByClassName( className );
15127 }
15128 };
15129
15130 /* QSA/matchesSelector
15131 ---------------------------------------------------------------------- */
15132
15133 // QSA and matchesSelector support
15134
15135 // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
15136 rbuggyMatches = [];
15137
15138 // qSa(:focus) reports false when true (Chrome 21)
15139 // We allow this because of a bug in IE8/9 that throws an error
15140 // whenever `document.activeElement` is accessed on an iframe
15141 // So, we allow :focus to pass through QSA all the time to avoid the IE error
15142 // See https://bugs.jquery.com/ticket/13378
15143 rbuggyQSA = [];
15144
15145 if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
15146 // Build QSA regex
15147 // Regex strategy adopted from Diego Perini
15148 assert(function( el ) {
15149 // Select is set to empty string on purpose
15150 // This is to test IE's treatment of not explicitly
15151 // setting a boolean content attribute,
15152 // since its presence should be enough
15153 // https://bugs.jquery.com/ticket/12359
15154 docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
15155 "<select id='" + expando + "-\r\\' msallowcapture=''>" +
15156 "<option selected=''></option></select>";
15157
15158 // Support: IE8, Opera 11-12.16
15159 // Nothing should be selected when empty strings follow ^= or $= or *=
15160 // The test attribute must be unknown in Opera but "safe" for WinRT
15161 // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
15162 if ( el.querySelectorAll("[msallowcapture^='']").length ) {
15163 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
15164 }
15165
15166 // Support: IE8
15167 // Boolean attributes and "value" are not treated correctly
15168 if ( !el.querySelectorAll("[selected]").length ) {
15169 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
15170 }
15171
15172 // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
15173 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
15174 rbuggyQSA.push("~=");
15175 }
15176
15177 // Webkit/Opera - :checked should return selected option elements
15178 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
15179 // IE8 throws error here and will not see later tests
15180 if ( !el.querySelectorAll(":checked").length ) {
15181 rbuggyQSA.push(":checked");
15182 }
15183
15184 // Support: Safari 8+, iOS 8+
15185 // https://bugs.webkit.org/show_bug.cgi?id=136851
15186 // In-page `selector#id sibling-combinator selector` fails
15187 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
15188 rbuggyQSA.push(".#.+[+~]");
15189 }
15190 });
15191
15192 assert(function( el ) {
15193 el.innerHTML = "<a href='' disabled='disabled'></a>" +
15194 "<select disabled='disabled'><option/></select>";
15195
15196 // Support: Windows 8 Native Apps
15197 // The type and name attributes are restricted during .innerHTML assignment
15198 var input = document.createElement("input");
15199 input.setAttribute( "type", "hidden" );
15200 el.appendChild( input ).setAttribute( "name", "D" );
15201
15202 // Support: IE8
15203 // Enforce case-sensitivity of name attribute
15204 if ( el.querySelectorAll("[name=d]").length ) {
15205 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
15206 }
15207
15208 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
15209 // IE8 throws error here and will not see later tests
15210 if ( el.querySelectorAll(":enabled").length !== 2 ) {
15211 rbuggyQSA.push( ":enabled", ":disabled" );
15212 }
15213
15214 // Support: IE9-11+
15215 // IE's :disabled selector does not pick up the children of disabled fieldsets
15216 docElem.appendChild( el ).disabled = true;
15217 if ( el.querySelectorAll(":disabled").length !== 2 ) {
15218 rbuggyQSA.push( ":enabled", ":disabled" );
15219 }
15220
15221 // Opera 10-11 does not throw on post-comma invalid pseudos
15222 el.querySelectorAll("*,:x");
15223 rbuggyQSA.push(",.*:");
15224 });
15225 }
15226
15227 if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
15228 docElem.webkitMatchesSelector ||
15229 docElem.mozMatchesSelector ||
15230 docElem.oMatchesSelector ||
15231 docElem.msMatchesSelector) )) ) {
15232
15233 assert(function( el ) {
15234 // Check to see if it's possible to do matchesSelector
15235 // on a disconnected node (IE 9)
15236 support.disconnectedMatch = matches.call( el, "*" );
15237
15238 // This should fail with an exception
15239 // Gecko does not error, returns false instead
15240 matches.call( el, "[s!='']:x" );
15241 rbuggyMatches.push( "!=", pseudos );
15242 });
15243 }
15244
15245 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
15246 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
15247
15248 /* Contains
15249 ---------------------------------------------------------------------- */
15250 hasCompare = rnative.test( docElem.compareDocumentPosition );
15251
15252 // Element contains another
15253 // Purposefully self-exclusive
15254 // As in, an element does not contain itself
15255 contains = hasCompare || rnative.test( docElem.contains ) ?
15256 function( a, b ) {
15257 var adown = a.nodeType === 9 ? a.documentElement : a,
15258 bup = b && b.parentNode;
15259 return a === bup || !!( bup && bup.nodeType === 1 && (
15260 adown.contains ?
15261 adown.contains( bup ) :
15262 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
15263 ));
15264 } :
15265 function( a, b ) {
15266 if ( b ) {
15267 while ( (b = b.parentNode) ) {
15268 if ( b === a ) {
15269 return true;
15270 }
15271 }
15272 }
15273 return false;
15274 };
15275
15276 /* Sorting
15277 ---------------------------------------------------------------------- */
15278
15279 // Document order sorting
15280 sortOrder = hasCompare ?
15281 function( a, b ) {
15282
15283 // Flag for duplicate removal
15284 if ( a === b ) {
15285 hasDuplicate = true;
15286 return 0;
15287 }
15288
15289 // Sort on method existence if only one input has compareDocumentPosition
15290 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
15291 if ( compare ) {
15292 return compare;
15293 }
15294
15295 // Calculate position if both inputs belong to the same document
15296 compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
15297 a.compareDocumentPosition( b ) :
15298
15299 // Otherwise we know they are disconnected
15300 1;
15301
15302 // Disconnected nodes
15303 if ( compare & 1 ||
15304 (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
15305
15306 // Choose the first element that is related to our preferred document
15307 if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
15308 return -1;
15309 }
15310 if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
15311 return 1;
15312 }
15313
15314 // Maintain original order
15315 return sortInput ?
15316 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
15317 0;
15318 }
15319
15320 return compare & 4 ? -1 : 1;
15321 } :
15322 function( a, b ) {
15323 // Exit early if the nodes are identical
15324 if ( a === b ) {
15325 hasDuplicate = true;
15326 return 0;
15327 }
15328
15329 var cur,
15330 i = 0,
15331 aup = a.parentNode,
15332 bup = b.parentNode,
15333 ap = [ a ],
15334 bp = [ b ];
15335
15336 // Parentless nodes are either documents or disconnected
15337 if ( !aup || !bup ) {
15338 return a === document ? -1 :
15339 b === document ? 1 :
15340 aup ? -1 :
15341 bup ? 1 :
15342 sortInput ?
15343 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
15344 0;
15345
15346 // If the nodes are siblings, we can do a quick check
15347 } else if ( aup === bup ) {
15348 return siblingCheck( a, b );
15349 }
15350
15351 // Otherwise we need full lists of their ancestors for comparison
15352 cur = a;
15353 while ( (cur = cur.parentNode) ) {
15354 ap.unshift( cur );
15355 }
15356 cur = b;
15357 while ( (cur = cur.parentNode) ) {
15358 bp.unshift( cur );
15359 }
15360
15361 // Walk down the tree looking for a discrepancy
15362 while ( ap[i] === bp[i] ) {
15363 i++;
15364 }
15365
15366 return i ?
15367 // Do a sibling check if the nodes have a common ancestor
15368 siblingCheck( ap[i], bp[i] ) :
15369
15370 // Otherwise nodes in our document sort first
15371 ap[i] === preferredDoc ? -1 :
15372 bp[i] === preferredDoc ? 1 :
15373 0;
15374 };
15375
15376 return document;
15377 };
15378
15379 Sizzle.matches = function( expr, elements ) {
15380 return Sizzle( expr, null, null, elements );
15381 };
15382
15383 Sizzle.matchesSelector = function( elem, expr ) {
15384 // Set document vars if needed
15385 if ( ( elem.ownerDocument || elem ) !== document ) {
15386 setDocument( elem );
15387 }
15388
15389 // Make sure that attribute selectors are quoted
15390 expr = expr.replace( rattributeQuotes, "='$1']" );
15391
15392 if ( support.matchesSelector && documentIsHTML &&
15393 !compilerCache[ expr + " " ] &&
15394 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
15395 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
15396
15397 try {
15398 var ret = matches.call( elem, expr );
15399
15400 // IE 9's matchesSelector returns false on disconnected nodes
15401 if ( ret || support.disconnectedMatch ||
15402 // As well, disconnected nodes are said to be in a document
15403 // fragment in IE 9
15404 elem.document && elem.document.nodeType !== 11 ) {
15405 return ret;
15406 }
15407 } catch (e) {}
15408 }
15409
15410 return Sizzle( expr, document, null, [ elem ] ).length > 0;
15411 };
15412
15413 Sizzle.contains = function( context, elem ) {
15414 // Set document vars if needed
15415 if ( ( context.ownerDocument || context ) !== document ) {
15416 setDocument( context );
15417 }
15418 return contains( context, elem );
15419 };
15420
15421 Sizzle.attr = function( elem, name ) {
15422 // Set document vars if needed
15423 if ( ( elem.ownerDocument || elem ) !== document ) {
15424 setDocument( elem );
15425 }
15426
15427 var fn = Expr.attrHandle[ name.toLowerCase() ],
15428 // Don't get fooled by Object.prototype properties (jQuery #13807)
15429 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
15430 fn( elem, name, !documentIsHTML ) :
15431 undefined;
15432
15433 return val !== undefined ?
15434 val :
15435 support.attributes || !documentIsHTML ?
15436 elem.getAttribute( name ) :
15437 (val = elem.getAttributeNode(name)) && val.specified ?
15438 val.value :
15439 null;
15440 };
15441
15442 Sizzle.escape = function( sel ) {
15443 return (sel + "").replace( rcssescape, fcssescape );
15444 };
15445
15446 Sizzle.error = function( msg ) {
15447 throw new Error( "Syntax error, unrecognized expression: " + msg );
15448 };
15449
15450 /**
15451 * Document sorting and removing duplicates
15452 * @param {ArrayLike} results
15453 */
15454 Sizzle.uniqueSort = function( results ) {
15455 var elem,
15456 duplicates = [],
15457 j = 0,
15458 i = 0;
15459
15460 // Unless we *know* we can detect duplicates, assume their presence
15461 hasDuplicate = !support.detectDuplicates;
15462 sortInput = !support.sortStable && results.slice( 0 );
15463 results.sort( sortOrder );
15464
15465 if ( hasDuplicate ) {
15466 while ( (elem = results[i++]) ) {
15467 if ( elem === results[ i ] ) {
15468 j = duplicates.push( i );
15469 }
15470 }
15471 while ( j-- ) {
15472 results.splice( duplicates[ j ], 1 );
15473 }
15474 }
15475
15476 // Clear input after sorting to release objects
15477 // See https://github.com/jquery/sizzle/pull/225
15478 sortInput = null;
15479
15480 return results;
15481 };
15482
15483 /**
15484 * Utility function for retrieving the text value of an array of DOM nodes
15485 * @param {Array|Element} elem
15486 */
15487 getText = Sizzle.getText = function( elem ) {
15488 var node,
15489 ret = "",
15490 i = 0,
15491 nodeType = elem.nodeType;
15492
15493 if ( !nodeType ) {
15494 // If no nodeType, this is expected to be an array
15495 while ( (node = elem[i++]) ) {
15496 // Do not traverse comment nodes
15497 ret += getText( node );
15498 }
15499 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
15500 // Use textContent for elements
15501 // innerText usage removed for consistency of new lines (jQuery #11153)
15502 if ( typeof elem.textContent === "string" ) {
15503 return elem.textContent;
15504 } else {
15505 // Traverse its children
15506 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
15507 ret += getText( elem );
15508 }
15509 }
15510 } else if ( nodeType === 3 || nodeType === 4 ) {
15511 return elem.nodeValue;
15512 }
15513 // Do not include comment or processing instruction nodes
15514
15515 return ret;
15516 };
15517
15518 Expr = Sizzle.selectors = {
15519
15520 // Can be adjusted by the user
15521 cacheLength: 50,
15522
15523 createPseudo: markFunction,
15524
15525 match: matchExpr,
15526
15527 attrHandle: {},
15528
15529 find: {},
15530
15531 relative: {
15532 ">": { dir: "parentNode", first: true },
15533 " ": { dir: "parentNode" },
15534 "+": { dir: "previousSibling", first: true },
15535 "~": { dir: "previousSibling" }
15536 },
15537
15538 preFilter: {
15539 "ATTR": function( match ) {
15540 match[1] = match[1].replace( runescape, funescape );
15541
15542 // Move the given value to match[3] whether quoted or unquoted
15543 match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
15544
15545 if ( match[2] === "~=" ) {
15546 match[3] = " " + match[3] + " ";
15547 }
15548
15549 return match.slice( 0, 4 );
15550 },
15551
15552 "CHILD": function( match ) {
15553 /* matches from matchExpr["CHILD"]
15554 1 type (only|nth|...)
15555 2 what (child|of-type)
15556 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
15557 4 xn-component of xn+y argument ([+-]?\d*n|)
15558 5 sign of xn-component
15559 6 x of xn-component
15560 7 sign of y-component
15561 8 y of y-component
15562 */
15563 match[1] = match[1].toLowerCase();
15564
15565 if ( match[1].slice( 0, 3 ) === "nth" ) {
15566 // nth-* requires argument
15567 if ( !match[3] ) {
15568 Sizzle.error( match[0] );
15569 }
15570
15571 // numeric x and y parameters for Expr.filter.CHILD
15572 // remember that false/true cast respectively to 0/1
15573 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
15574 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
15575
15576 // other types prohibit arguments
15577 } else if ( match[3] ) {
15578 Sizzle.error( match[0] );
15579 }
15580
15581 return match;
15582 },
15583
15584 "PSEUDO": function( match ) {
15585 var excess,
15586 unquoted = !match[6] && match[2];
15587
15588 if ( matchExpr["CHILD"].test( match[0] ) ) {
15589 return null;
15590 }
15591
15592 // Accept quoted arguments as-is
15593 if ( match[3] ) {
15594 match[2] = match[4] || match[5] || "";
15595
15596 // Strip excess characters from unquoted arguments
15597 } else if ( unquoted && rpseudo.test( unquoted ) &&
15598 // Get excess from tokenize (recursively)
15599 (excess = tokenize( unquoted, true )) &&
15600 // advance to the next closing parenthesis
15601 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
15602
15603 // excess is a negative index
15604 match[0] = match[0].slice( 0, excess );
15605 match[2] = unquoted.slice( 0, excess );
15606 }
15607
15608 // Return only captures needed by the pseudo filter method (type and argument)
15609 return match.slice( 0, 3 );
15610 }
15611 },
15612
15613 filter: {
15614
15615 "TAG": function( nodeNameSelector ) {
15616 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
15617 return nodeNameSelector === "*" ?
15618 function() { return true; } :
15619 function( elem ) {
15620 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
15621 };
15622 },
15623
15624 "CLASS": function( className ) {
15625 var pattern = classCache[ className + " " ];
15626
15627 return pattern ||
15628 (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
15629 classCache( className, function( elem ) {
15630 return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
15631 });
15632 },
15633
15634 "ATTR": function( name, operator, check ) {
15635 return function( elem ) {
15636 var result = Sizzle.attr( elem, name );
15637
15638 if ( result == null ) {
15639 return operator === "!=";
15640 }
15641 if ( !operator ) {
15642 return true;
15643 }
15644
15645 result += "";
15646
15647 return operator === "=" ? result === check :
15648 operator === "!=" ? result !== check :
15649 operator === "^=" ? check && result.indexOf( check ) === 0 :
15650 operator === "*=" ? check && result.indexOf( check ) > -1 :
15651 operator === "$=" ? check && result.slice( -check.length ) === check :
15652 operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
15653 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
15654 false;
15655 };
15656 },
15657
15658 "CHILD": function( type, what, argument, first, last ) {
15659 var simple = type.slice( 0, 3 ) !== "nth",
15660 forward = type.slice( -4 ) !== "last",
15661 ofType = what === "of-type";
15662
15663 return first === 1 && last === 0 ?
15664
15665 // Shortcut for :nth-*(n)
15666 function( elem ) {
15667 return !!elem.parentNode;
15668 } :
15669
15670 function( elem, context, xml ) {
15671 var cache, uniqueCache, outerCache, node, nodeIndex, start,
15672 dir = simple !== forward ? "nextSibling" : "previousSibling",
15673 parent = elem.parentNode,
15674 name = ofType && elem.nodeName.toLowerCase(),
15675 useCache = !xml && !ofType,
15676 diff = false;
15677
15678 if ( parent ) {
15679
15680 // :(first|last|only)-(child|of-type)
15681 if ( simple ) {
15682 while ( dir ) {
15683 node = elem;
15684 while ( (node = node[ dir ]) ) {
15685 if ( ofType ?
15686 node.nodeName.toLowerCase() === name :
15687 node.nodeType === 1 ) {
15688
15689 return false;
15690 }
15691 }
15692 // Reverse direction for :only-* (if we haven't yet done so)
15693 start = dir = type === "only" && !start && "nextSibling";
15694 }
15695 return true;
15696 }
15697
15698 start = [ forward ? parent.firstChild : parent.lastChild ];
15699
15700 // non-xml :nth-child(...) stores cache data on `parent`
15701 if ( forward && useCache ) {
15702
15703 // Seek `elem` from a previously-cached index
15704
15705 // ...in a gzip-friendly way
15706 node = parent;
15707 outerCache = node[ expando ] || (node[ expando ] = {});
15708
15709 // Support: IE <9 only
15710 // Defend against cloned attroperties (jQuery gh-1709)
15711 uniqueCache = outerCache[ node.uniqueID ] ||
15712 (outerCache[ node.uniqueID ] = {});
15713
15714 cache = uniqueCache[ type ] || [];
15715 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
15716 diff = nodeIndex && cache[ 2 ];
15717 node = nodeIndex && parent.childNodes[ nodeIndex ];
15718
15719 while ( (node = ++nodeIndex && node && node[ dir ] ||
15720
15721 // Fallback to seeking `elem` from the start
15722 (diff = nodeIndex = 0) || start.pop()) ) {
15723
15724 // When found, cache indexes on `parent` and break
15725 if ( node.nodeType === 1 && ++diff && node === elem ) {
15726 uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
15727 break;
15728 }
15729 }
15730
15731 } else {
15732 // Use previously-cached element index if available
15733 if ( useCache ) {
15734 // ...in a gzip-friendly way
15735 node = elem;
15736 outerCache = node[ expando ] || (node[ expando ] = {});
15737
15738 // Support: IE <9 only
15739 // Defend against cloned attroperties (jQuery gh-1709)
15740 uniqueCache = outerCache[ node.uniqueID ] ||
15741 (outerCache[ node.uniqueID ] = {});
15742
15743 cache = uniqueCache[ type ] || [];
15744 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
15745 diff = nodeIndex;
15746 }
15747
15748 // xml :nth-child(...)
15749 // or :nth-last-child(...) or :nth(-last)?-of-type(...)
15750 if ( diff === false ) {
15751 // Use the same loop as above to seek `elem` from the start
15752 while ( (node = ++nodeIndex && node && node[ dir ] ||
15753 (diff = nodeIndex = 0) || start.pop()) ) {
15754
15755 if ( ( ofType ?
15756 node.nodeName.toLowerCase() === name :
15757 node.nodeType === 1 ) &&
15758 ++diff ) {
15759
15760 // Cache the index of each encountered element
15761 if ( useCache ) {
15762 outerCache = node[ expando ] || (node[ expando ] = {});
15763
15764 // Support: IE <9 only
15765 // Defend against cloned attroperties (jQuery gh-1709)
15766 uniqueCache = outerCache[ node.uniqueID ] ||
15767 (outerCache[ node.uniqueID ] = {});
15768
15769 uniqueCache[ type ] = [ dirruns, diff ];
15770 }
15771
15772 if ( node === elem ) {
15773 break;
15774 }
15775 }
15776 }
15777 }
15778 }
15779
15780 // Incorporate the offset, then check against cycle size
15781 diff -= last;
15782 return diff === first || ( diff % first === 0 && diff / first >= 0 );
15783 }
15784 };
15785 },
15786
15787 "PSEUDO": function( pseudo, argument ) {
15788 // pseudo-class names are case-insensitive
15789 // http://www.w3.org/TR/selectors/#pseudo-classes
15790 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
15791 // Remember that setFilters inherits from pseudos
15792 var args,
15793 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
15794 Sizzle.error( "unsupported pseudo: " + pseudo );
15795
15796 // The user may use createPseudo to indicate that
15797 // arguments are needed to create the filter function
15798 // just as Sizzle does
15799 if ( fn[ expando ] ) {
15800 return fn( argument );
15801 }
15802
15803 // But maintain support for old signatures
15804 if ( fn.length > 1 ) {
15805 args = [ pseudo, pseudo, "", argument ];
15806 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
15807 markFunction(function( seed, matches ) {
15808 var idx,
15809 matched = fn( seed, argument ),
15810 i = matched.length;
15811 while ( i-- ) {
15812 idx = indexOf( seed, matched[i] );
15813 seed[ idx ] = !( matches[ idx ] = matched[i] );
15814 }
15815 }) :
15816 function( elem ) {
15817 return fn( elem, 0, args );
15818 };
15819 }
15820
15821 return fn;
15822 }
15823 },
15824
15825 pseudos: {
15826 // Potentially complex pseudos
15827 "not": markFunction(function( selector ) {
15828 // Trim the selector passed to compile
15829 // to avoid treating leading and trailing
15830 // spaces as combinators
15831 var input = [],
15832 results = [],
15833 matcher = compile( selector.replace( rtrim, "$1" ) );
15834
15835 return matcher[ expando ] ?
15836 markFunction(function( seed, matches, context, xml ) {
15837 var elem,
15838 unmatched = matcher( seed, null, xml, [] ),
15839 i = seed.length;
15840
15841 // Match elements unmatched by `matcher`
15842 while ( i-- ) {
15843 if ( (elem = unmatched[i]) ) {
15844 seed[i] = !(matches[i] = elem);
15845 }
15846 }
15847 }) :
15848 function( elem, context, xml ) {
15849 input[0] = elem;
15850 matcher( input, null, xml, results );
15851 // Don't keep the element (issue #299)
15852 input[0] = null;
15853 return !results.pop();
15854 };
15855 }),
15856
15857 "has": markFunction(function( selector ) {
15858 return function( elem ) {
15859 return Sizzle( selector, elem ).length > 0;
15860 };
15861 }),
15862
15863 "contains": markFunction(function( text ) {
15864 text = text.replace( runescape, funescape );
15865 return function( elem ) {
15866 return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
15867 };
15868 }),
15869
15870 // "Whether an element is represented by a :lang() selector
15871 // is based solely on the element's language value
15872 // being equal to the identifier C,
15873 // or beginning with the identifier C immediately followed by "-".
15874 // The matching of C against the element's language value is performed case-insensitively.
15875 // The identifier C does not have to be a valid language name."
15876 // http://www.w3.org/TR/selectors/#lang-pseudo
15877 "lang": markFunction( function( lang ) {
15878 // lang value must be a valid identifier
15879 if ( !ridentifier.test(lang || "") ) {
15880 Sizzle.error( "unsupported lang: " + lang );
15881 }
15882 lang = lang.replace( runescape, funescape ).toLowerCase();
15883 return function( elem ) {
15884 var elemLang;
15885 do {
15886 if ( (elemLang = documentIsHTML ?
15887 elem.lang :
15888 elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
15889
15890 elemLang = elemLang.toLowerCase();
15891 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
15892 }
15893 } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
15894 return false;
15895 };
15896 }),
15897
15898 // Miscellaneous
15899 "target": function( elem ) {
15900 var hash = window.location && window.location.hash;
15901 return hash && hash.slice( 1 ) === elem.id;
15902 },
15903
15904 "root": function( elem ) {
15905 return elem === docElem;
15906 },
15907
15908 "focus": function( elem ) {
15909 return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
15910 },
15911
15912 // Boolean properties
15913 "enabled": createDisabledPseudo( false ),
15914 "disabled": createDisabledPseudo( true ),
15915
15916 "checked": function( elem ) {
15917 // In CSS3, :checked should return both checked and selected elements
15918 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
15919 var nodeName = elem.nodeName.toLowerCase();
15920 return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
15921 },
15922
15923 "selected": function( elem ) {
15924 // Accessing this property makes selected-by-default
15925 // options in Safari work properly
15926 if ( elem.parentNode ) {
15927 elem.parentNode.selectedIndex;
15928 }
15929
15930 return elem.selected === true;
15931 },
15932
15933 // Contents
15934 "empty": function( elem ) {
15935 // http://www.w3.org/TR/selectors/#empty-pseudo
15936 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
15937 // but not by others (comment: 8; processing instruction: 7; etc.)
15938 // nodeType < 6 works because attributes (2) do not appear as children
15939 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
15940 if ( elem.nodeType < 6 ) {
15941 return false;
15942 }
15943 }
15944 return true;
15945 },
15946
15947 "parent": function( elem ) {
15948 return !Expr.pseudos["empty"]( elem );
15949 },
15950
15951 // Element/input types
15952 "header": function( elem ) {
15953 return rheader.test( elem.nodeName );
15954 },
15955
15956 "input": function( elem ) {
15957 return rinputs.test( elem.nodeName );
15958 },
15959
15960 "button": function( elem ) {
15961 var name = elem.nodeName.toLowerCase();
15962 return name === "input" && elem.type === "button" || name === "button";
15963 },
15964
15965 "text": function( elem ) {
15966 var attr;
15967 return elem.nodeName.toLowerCase() === "input" &&
15968 elem.type === "text" &&
15969
15970 // Support: IE<8
15971 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
15972 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
15973 },
15974
15975 // Position-in-collection
15976 "first": createPositionalPseudo(function() {
15977 return [ 0 ];
15978 }),
15979
15980 "last": createPositionalPseudo(function( matchIndexes, length ) {
15981 return [ length - 1 ];
15982 }),
15983
15984 "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
15985 return [ argument < 0 ? argument + length : argument ];
15986 }),
15987
15988 "even": createPositionalPseudo(function( matchIndexes, length ) {
15989 var i = 0;
15990 for ( ; i < length; i += 2 ) {
15991 matchIndexes.push( i );
15992 }
15993 return matchIndexes;
15994 }),
15995
15996 "odd": createPositionalPseudo(function( matchIndexes, length ) {
15997 var i = 1;
15998 for ( ; i < length; i += 2 ) {
15999 matchIndexes.push( i );
16000 }
16001 return matchIndexes;
16002 }),
16003
16004 "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
16005 var i = argument < 0 ? argument + length : argument;
16006 for ( ; --i >= 0; ) {
16007 matchIndexes.push( i );
16008 }
16009 return matchIndexes;
16010 }),
16011
16012 "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
16013 var i = argument < 0 ? argument + length : argument;
16014 for ( ; ++i < length; ) {
16015 matchIndexes.push( i );
16016 }
16017 return matchIndexes;
16018 })
16019 }
16020 };
16021
16022 Expr.pseudos["nth"] = Expr.pseudos["eq"];
16023
16024 // Add button/input type pseudos
16025 for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
16026 Expr.pseudos[ i ] = createInputPseudo( i );
16027 }
16028 for ( i in { submit: true, reset: true } ) {
16029 Expr.pseudos[ i ] = createButtonPseudo( i );
16030 }
16031
16032 // Easy API for creating new setFilters
16033 function setFilters() {}
16034 setFilters.prototype = Expr.filters = Expr.pseudos;
16035 Expr.setFilters = new setFilters();
16036
16037 tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
16038 var matched, match, tokens, type,
16039 soFar, groups, preFilters,
16040 cached = tokenCache[ selector + " " ];
16041
16042 if ( cached ) {
16043 return parseOnly ? 0 : cached.slice( 0 );
16044 }
16045
16046 soFar = selector;
16047 groups = [];
16048 preFilters = Expr.preFilter;
16049
16050 while ( soFar ) {
16051
16052 // Comma and first run
16053 if ( !matched || (match = rcomma.exec( soFar )) ) {
16054 if ( match ) {
16055 // Don't consume trailing commas as valid
16056 soFar = soFar.slice( match[0].length ) || soFar;
16057 }
16058 groups.push( (tokens = []) );
16059 }
16060
16061 matched = false;
16062
16063 // Combinators
16064 if ( (match = rcombinators.exec( soFar )) ) {
16065 matched = match.shift();
16066 tokens.push({
16067 value: matched,
16068 // Cast descendant combinators to space
16069 type: match[0].replace( rtrim, " " )
16070 });
16071 soFar = soFar.slice( matched.length );
16072 }
16073
16074 // Filters
16075 for ( type in Expr.filter ) {
16076 if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
16077 (match = preFilters[ type ]( match ))) ) {
16078 matched = match.shift();
16079 tokens.push({
16080 value: matched,
16081 type: type,
16082 matches: match
16083 });
16084 soFar = soFar.slice( matched.length );
16085 }
16086 }
16087
16088 if ( !matched ) {
16089 break;
16090 }
16091 }
16092
16093 // Return the length of the invalid excess
16094 // if we're just parsing
16095 // Otherwise, throw an error or return tokens
16096 return parseOnly ?
16097 soFar.length :
16098 soFar ?
16099 Sizzle.error( selector ) :
16100 // Cache the tokens
16101 tokenCache( selector, groups ).slice( 0 );
16102 };
16103
16104 function toSelector( tokens ) {
16105 var i = 0,
16106 len = tokens.length,
16107 selector = "";
16108 for ( ; i < len; i++ ) {
16109 selector += tokens[i].value;
16110 }
16111 return selector;
16112 }
16113
16114 function addCombinator( matcher, combinator, base ) {
16115 var dir = combinator.dir,
16116 skip = combinator.next,
16117 key = skip || dir,
16118 checkNonElements = base && key === "parentNode",
16119 doneName = done++;
16120
16121 return combinator.first ?
16122 // Check against closest ancestor/preceding element
16123 function( elem, context, xml ) {
16124 while ( (elem = elem[ dir ]) ) {
16125 if ( elem.nodeType === 1 || checkNonElements ) {
16126 return matcher( elem, context, xml );
16127 }
16128 }
16129 return false;
16130 } :
16131
16132 // Check against all ancestor/preceding elements
16133 function( elem, context, xml ) {
16134 var oldCache, uniqueCache, outerCache,
16135 newCache = [ dirruns, doneName ];
16136
16137 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
16138 if ( xml ) {
16139 while ( (elem = elem[ dir ]) ) {
16140 if ( elem.nodeType === 1 || checkNonElements ) {
16141 if ( matcher( elem, context, xml ) ) {
16142 return true;
16143 }
16144 }
16145 }
16146 } else {
16147 while ( (elem = elem[ dir ]) ) {
16148 if ( elem.nodeType === 1 || checkNonElements ) {
16149 outerCache = elem[ expando ] || (elem[ expando ] = {});
16150
16151 // Support: IE <9 only
16152 // Defend against cloned attroperties (jQuery gh-1709)
16153 uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
16154
16155 if ( skip && skip === elem.nodeName.toLowerCase() ) {
16156 elem = elem[ dir ] || elem;
16157 } else if ( (oldCache = uniqueCache[ key ]) &&
16158 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
16159
16160 // Assign to newCache so results back-propagate to previous elements
16161 return (newCache[ 2 ] = oldCache[ 2 ]);
16162 } else {
16163 // Reuse newcache so results back-propagate to previous elements
16164 uniqueCache[ key ] = newCache;
16165
16166 // A match means we're done; a fail means we have to keep checking
16167 if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
16168 return true;
16169 }
16170 }
16171 }
16172 }
16173 }
16174 return false;
16175 };
16176 }
16177
16178 function elementMatcher( matchers ) {
16179 return matchers.length > 1 ?
16180 function( elem, context, xml ) {
16181 var i = matchers.length;
16182 while ( i-- ) {
16183 if ( !matchers[i]( elem, context, xml ) ) {
16184 return false;
16185 }
16186 }
16187 return true;
16188 } :
16189 matchers[0];
16190 }
16191
16192 function multipleContexts( selector, contexts, results ) {
16193 var i = 0,
16194 len = contexts.length;
16195 for ( ; i < len; i++ ) {
16196 Sizzle( selector, contexts[i], results );
16197 }
16198 return results;
16199 }
16200
16201 function condense( unmatched, map, filter, context, xml ) {
16202 var elem,
16203 newUnmatched = [],
16204 i = 0,
16205 len = unmatched.length,
16206 mapped = map != null;
16207
16208 for ( ; i < len; i++ ) {
16209 if ( (elem = unmatched[i]) ) {
16210 if ( !filter || filter( elem, context, xml ) ) {
16211 newUnmatched.push( elem );
16212 if ( mapped ) {
16213 map.push( i );
16214 }
16215 }
16216 }
16217 }
16218
16219 return newUnmatched;
16220 }
16221
16222 function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
16223 if ( postFilter && !postFilter[ expando ] ) {
16224 postFilter = setMatcher( postFilter );
16225 }
16226 if ( postFinder && !postFinder[ expando ] ) {
16227 postFinder = setMatcher( postFinder, postSelector );
16228 }
16229 return markFunction(function( seed, results, context, xml ) {
16230 var temp, i, elem,
16231 preMap = [],
16232 postMap = [],
16233 preexisting = results.length,
16234
16235 // Get initial elements from seed or context
16236 elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
16237
16238 // Prefilter to get matcher input, preserving a map for seed-results synchronization
16239 matcherIn = preFilter && ( seed || !selector ) ?
16240 condense( elems, preMap, preFilter, context, xml ) :
16241 elems,
16242
16243 matcherOut = matcher ?
16244 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
16245 postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
16246
16247 // ...intermediate processing is necessary
16248 [] :
16249
16250 // ...otherwise use results directly
16251 results :
16252 matcherIn;
16253
16254 // Find primary matches
16255 if ( matcher ) {
16256 matcher( matcherIn, matcherOut, context, xml );
16257 }
16258
16259 // Apply postFilter
16260 if ( postFilter ) {
16261 temp = condense( matcherOut, postMap );
16262 postFilter( temp, [], context, xml );
16263
16264 // Un-match failing elements by moving them back to matcherIn
16265 i = temp.length;
16266 while ( i-- ) {
16267 if ( (elem = temp[i]) ) {
16268 matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
16269 }
16270 }
16271 }
16272
16273 if ( seed ) {
16274 if ( postFinder || preFilter ) {
16275 if ( postFinder ) {
16276 // Get the final matcherOut by condensing this intermediate into postFinder contexts
16277 temp = [];
16278 i = matcherOut.length;
16279 while ( i-- ) {
16280 if ( (elem = matcherOut[i]) ) {
16281 // Restore matcherIn since elem is not yet a final match
16282 temp.push( (matcherIn[i] = elem) );
16283 }
16284 }
16285 postFinder( null, (matcherOut = []), temp, xml );
16286 }
16287
16288 // Move matched elements from seed to results to keep them synchronized
16289 i = matcherOut.length;
16290 while ( i-- ) {
16291 if ( (elem = matcherOut[i]) &&
16292 (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
16293
16294 seed[temp] = !(results[temp] = elem);
16295 }
16296 }
16297 }
16298
16299 // Add elements to results, through postFinder if defined
16300 } else {
16301 matcherOut = condense(
16302 matcherOut === results ?
16303 matcherOut.splice( preexisting, matcherOut.length ) :
16304 matcherOut
16305 );
16306 if ( postFinder ) {
16307 postFinder( null, results, matcherOut, xml );
16308 } else {
16309 push.apply( results, matcherOut );
16310 }
16311 }
16312 });
16313 }
16314
16315 function matcherFromTokens( tokens ) {
16316 var checkContext, matcher, j,
16317 len = tokens.length,
16318 leadingRelative = Expr.relative[ tokens[0].type ],
16319 implicitRelative = leadingRelative || Expr.relative[" "],
16320 i = leadingRelative ? 1 : 0,
16321
16322 // The foundational matcher ensures that elements are reachable from top-level context(s)
16323 matchContext = addCombinator( function( elem ) {
16324 return elem === checkContext;
16325 }, implicitRelative, true ),
16326 matchAnyContext = addCombinator( function( elem ) {
16327 return indexOf( checkContext, elem ) > -1;
16328 }, implicitRelative, true ),
16329 matchers = [ function( elem, context, xml ) {
16330 var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
16331 (checkContext = context).nodeType ?
16332 matchContext( elem, context, xml ) :
16333 matchAnyContext( elem, context, xml ) );
16334 // Avoid hanging onto element (issue #299)
16335 checkContext = null;
16336 return ret;
16337 } ];
16338
16339 for ( ; i < len; i++ ) {
16340 if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
16341 matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
16342 } else {
16343 matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
16344
16345 // Return special upon seeing a positional matcher
16346 if ( matcher[ expando ] ) {
16347 // Find the next relative operator (if any) for proper handling
16348 j = ++i;
16349 for ( ; j < len; j++ ) {
16350 if ( Expr.relative[ tokens[j].type ] ) {
16351 break;
16352 }
16353 }
16354 return setMatcher(
16355 i > 1 && elementMatcher( matchers ),
16356 i > 1 && toSelector(
16357 // If the preceding token was a descendant combinator, insert an implicit any-element `*`
16358 tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
16359 ).replace( rtrim, "$1" ),
16360 matcher,
16361 i < j && matcherFromTokens( tokens.slice( i, j ) ),
16362 j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
16363 j < len && toSelector( tokens )
16364 );
16365 }
16366 matchers.push( matcher );
16367 }
16368 }
16369
16370 return elementMatcher( matchers );
16371 }
16372
16373 function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
16374 var bySet = setMatchers.length > 0,
16375 byElement = elementMatchers.length > 0,
16376 superMatcher = function( seed, context, xml, results, outermost ) {
16377 var elem, j, matcher,
16378 matchedCount = 0,
16379 i = "0",
16380 unmatched = seed && [],
16381 setMatched = [],
16382 contextBackup = outermostContext,
16383 // We must always have either seed elements or outermost context
16384 elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
16385 // Use integer dirruns iff this is the outermost matcher
16386 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
16387 len = elems.length;
16388
16389 if ( outermost ) {
16390 outermostContext = context === document || context || outermost;
16391 }
16392
16393 // Add elements passing elementMatchers directly to results
16394 // Support: IE<9, Safari
16395 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
16396 for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
16397 if ( byElement && elem ) {
16398 j = 0;
16399 if ( !context && elem.ownerDocument !== document ) {
16400 setDocument( elem );
16401 xml = !documentIsHTML;
16402 }
16403 while ( (matcher = elementMatchers[j++]) ) {
16404 if ( matcher( elem, context || document, xml) ) {
16405 results.push( elem );
16406 break;
16407 }
16408 }
16409 if ( outermost ) {
16410 dirruns = dirrunsUnique;
16411 }
16412 }
16413
16414 // Track unmatched elements for set filters
16415 if ( bySet ) {
16416 // They will have gone through all possible matchers
16417 if ( (elem = !matcher && elem) ) {
16418 matchedCount--;
16419 }
16420
16421 // Lengthen the array for every element, matched or not
16422 if ( seed ) {
16423 unmatched.push( elem );
16424 }
16425 }
16426 }
16427
16428 // `i` is now the count of elements visited above, and adding it to `matchedCount`
16429 // makes the latter nonnegative.
16430 matchedCount += i;
16431
16432 // Apply set filters to unmatched elements
16433 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
16434 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
16435 // no element matchers and no seed.
16436 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
16437 // case, which will result in a "00" `matchedCount` that differs from `i` but is also
16438 // numerically zero.
16439 if ( bySet && i !== matchedCount ) {
16440 j = 0;
16441 while ( (matcher = setMatchers[j++]) ) {
16442 matcher( unmatched, setMatched, context, xml );
16443 }
16444
16445 if ( seed ) {
16446 // Reintegrate element matches to eliminate the need for sorting
16447 if ( matchedCount > 0 ) {
16448 while ( i-- ) {
16449 if ( !(unmatched[i] || setMatched[i]) ) {
16450 setMatched[i] = pop.call( results );
16451 }
16452 }
16453 }
16454
16455 // Discard index placeholder values to get only actual matches
16456 setMatched = condense( setMatched );
16457 }
16458
16459 // Add matches to results
16460 push.apply( results, setMatched );
16461
16462 // Seedless set matches succeeding multiple successful matchers stipulate sorting
16463 if ( outermost && !seed && setMatched.length > 0 &&
16464 ( matchedCount + setMatchers.length ) > 1 ) {
16465
16466 Sizzle.uniqueSort( results );
16467 }
16468 }
16469
16470 // Override manipulation of globals by nested matchers
16471 if ( outermost ) {
16472 dirruns = dirrunsUnique;
16473 outermostContext = contextBackup;
16474 }
16475
16476 return unmatched;
16477 };
16478
16479 return bySet ?
16480 markFunction( superMatcher ) :
16481 superMatcher;
16482 }
16483
16484 compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
16485 var i,
16486 setMatchers = [],
16487 elementMatchers = [],
16488 cached = compilerCache[ selector + " " ];
16489
16490 if ( !cached ) {
16491 // Generate a function of recursive functions that can be used to check each element
16492 if ( !match ) {
16493 match = tokenize( selector );
16494 }
16495 i = match.length;
16496 while ( i-- ) {
16497 cached = matcherFromTokens( match[i] );
16498 if ( cached[ expando ] ) {
16499 setMatchers.push( cached );
16500 } else {
16501 elementMatchers.push( cached );
16502 }
16503 }
16504
16505 // Cache the compiled function
16506 cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
16507
16508 // Save selector and tokenization
16509 cached.selector = selector;
16510 }
16511 return cached;
16512 };
16513
16514 /**
16515 * A low-level selection function that works with Sizzle's compiled
16516 * selector functions
16517 * @param {String|Function} selector A selector or a pre-compiled
16518 * selector function built with Sizzle.compile
16519 * @param {Element} context
16520 * @param {Array} [results]
16521 * @param {Array} [seed] A set of elements to match against
16522 */
16523 select = Sizzle.select = function( selector, context, results, seed ) {
16524 var i, tokens, token, type, find,
16525 compiled = typeof selector === "function" && selector,
16526 match = !seed && tokenize( (selector = compiled.selector || selector) );
16527
16528 results = results || [];
16529
16530 // Try to minimize operations if there is only one selector in the list and no seed
16531 // (the latter of which guarantees us context)
16532 if ( match.length === 1 ) {
16533
16534 // Reduce context if the leading compound selector is an ID
16535 tokens = match[0] = match[0].slice( 0 );
16536 if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
16537 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
16538
16539 context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
16540 if ( !context ) {
16541 return results;
16542
16543 // Precompiled matchers will still verify ancestry, so step up a level
16544 } else if ( compiled ) {
16545 context = context.parentNode;
16546 }
16547
16548 selector = selector.slice( tokens.shift().value.length );
16549 }
16550
16551 // Fetch a seed set for right-to-left matching
16552 i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
16553 while ( i-- ) {
16554 token = tokens[i];
16555
16556 // Abort if we hit a combinator
16557 if ( Expr.relative[ (type = token.type) ] ) {
16558 break;
16559 }
16560 if ( (find = Expr.find[ type ]) ) {
16561 // Search, expanding context for leading sibling combinators
16562 if ( (seed = find(
16563 token.matches[0].replace( runescape, funescape ),
16564 rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
16565 )) ) {
16566
16567 // If seed is empty or no tokens remain, we can return early
16568 tokens.splice( i, 1 );
16569 selector = seed.length && toSelector( tokens );
16570 if ( !selector ) {
16571 push.apply( results, seed );
16572 return results;
16573 }
16574
16575 break;
16576 }
16577 }
16578 }
16579 }
16580
16581 // Compile and execute a filtering function if one is not provided
16582 // Provide `match` to avoid retokenization if we modified the selector above
16583 ( compiled || compile( selector, match ) )(
16584 seed,
16585 context,
16586 !documentIsHTML,
16587 results,
16588 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
16589 );
16590 return results;
16591 };
16592
16593 // One-time assignments
16594
16595 // Sort stability
16596 support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
16597
16598 // Support: Chrome 14-35+
16599 // Always assume duplicates if they aren't passed to the comparison function
16600 support.detectDuplicates = !!hasDuplicate;
16601
16602 // Initialize against the default document
16603 setDocument();
16604
16605 // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
16606 // Detached nodes confoundingly follow *each other*
16607 support.sortDetached = assert(function( el ) {
16608 // Should return 1, but returns 4 (following)
16609 return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
16610 });
16611
16612 // Support: IE<8
16613 // Prevent attribute/property "interpolation"
16614 // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
16615 if ( !assert(function( el ) {
16616 el.innerHTML = "<a href='#'></a>";
16617 return el.firstChild.getAttribute("href") === "#" ;
16618 }) ) {
16619 addHandle( "type|href|height|width", function( elem, name, isXML ) {
16620 if ( !isXML ) {
16621 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
16622 }
16623 });
16624 }
16625
16626 // Support: IE<9
16627 // Use defaultValue in place of getAttribute("value")
16628 if ( !support.attributes || !assert(function( el ) {
16629 el.innerHTML = "<input/>";
16630 el.firstChild.setAttribute( "value", "" );
16631 return el.firstChild.getAttribute( "value" ) === "";
16632 }) ) {
16633 addHandle( "value", function( elem, name, isXML ) {
16634 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
16635 return elem.defaultValue;
16636 }
16637 });
16638 }
16639
16640 // Support: IE<9
16641 // Use getAttributeNode to fetch booleans when getAttribute lies
16642 if ( !assert(function( el ) {
16643 return el.getAttribute("disabled") == null;
16644 }) ) {
16645 addHandle( booleans, function( elem, name, isXML ) {
16646 var val;
16647 if ( !isXML ) {
16648 return elem[ name ] === true ? name.toLowerCase() :
16649 (val = elem.getAttributeNode( name )) && val.specified ?
16650 val.value :
16651 null;
16652 }
16653 });
16654 }
16655
16656 return Sizzle;
16657
16658 })( window );
16659
16660
16661
16662 jQuery.find = Sizzle;
16663 jQuery.expr = Sizzle.selectors;
16664
16665 // Deprecated
16666 jQuery.expr[ ":" ] = jQuery.expr.pseudos;
16667 jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
16668 jQuery.text = Sizzle.getText;
16669 jQuery.isXMLDoc = Sizzle.isXML;
16670 jQuery.contains = Sizzle.contains;
16671 jQuery.escapeSelector = Sizzle.escape;
16672
16673
16674
16675
16676 var dir = function( elem, dir, until ) {
16677 var matched = [],
16678 truncate = until !== undefined;
16679
16680 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
16681 if ( elem.nodeType === 1 ) {
16682 if ( truncate && jQuery( elem ).is( until ) ) {
16683 break;
16684 }
16685 matched.push( elem );
16686 }
16687 }
16688 return matched;
16689 };
16690
16691
16692 var siblings = function( n, elem ) {
16693 var matched = [];
16694
16695 for ( ; n; n = n.nextSibling ) {
16696 if ( n.nodeType === 1 && n !== elem ) {
16697 matched.push( n );
16698 }
16699 }
16700
16701 return matched;
16702 };
16703
16704
16705 var rneedsContext = jQuery.expr.match.needsContext;
16706
16707
16708
16709 function nodeName( elem, name ) {
16710
16711 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
16712
16713 };
16714 var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
16715
16716
16717
16718 var risSimple = /^.[^:#\[\.,]*$/;
16719
16720 // Implement the identical functionality for filter and not
16721 function winnow( elements, qualifier, not ) {
16722 if ( jQuery.isFunction( qualifier ) ) {
16723 return jQuery.grep( elements, function( elem, i ) {
16724 return !!qualifier.call( elem, i, elem ) !== not;
16725 } );
16726 }
16727
16728 // Single element
16729 if ( qualifier.nodeType ) {
16730 return jQuery.grep( elements, function( elem ) {
16731 return ( elem === qualifier ) !== not;
16732 } );
16733 }
16734
16735 // Arraylike of elements (jQuery, arguments, Array)
16736 if ( typeof qualifier !== "string" ) {
16737 return jQuery.grep( elements, function( elem ) {
16738 return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
16739 } );
16740 }
16741
16742 // Simple selector that can be filtered directly, removing non-Elements
16743 if ( risSimple.test( qualifier ) ) {
16744 return jQuery.filter( qualifier, elements, not );
16745 }
16746
16747 // Complex selector, compare the two sets, removing non-Elements
16748 qualifier = jQuery.filter( qualifier, elements );
16749 return jQuery.grep( elements, function( elem ) {
16750 return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
16751 } );
16752 }
16753
16754 jQuery.filter = function( expr, elems, not ) {
16755 var elem = elems[ 0 ];
16756
16757 if ( not ) {
16758 expr = ":not(" + expr + ")";
16759 }
16760
16761 if ( elems.length === 1 && elem.nodeType === 1 ) {
16762 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
16763 }
16764
16765 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
16766 return elem.nodeType === 1;
16767 } ) );
16768 };
16769
16770 jQuery.fn.extend( {
16771 find: function( selector ) {
16772 var i, ret,
16773 len = this.length,
16774 self = this;
16775
16776 if ( typeof selector !== "string" ) {
16777 return this.pushStack( jQuery( selector ).filter( function() {
16778 for ( i = 0; i < len; i++ ) {
16779 if ( jQuery.contains( self[ i ], this ) ) {
16780 return true;
16781 }
16782 }
16783 } ) );
16784 }
16785
16786 ret = this.pushStack( [] );
16787
16788 for ( i = 0; i < len; i++ ) {
16789 jQuery.find( selector, self[ i ], ret );
16790 }
16791
16792 return len > 1 ? jQuery.uniqueSort( ret ) : ret;
16793 },
16794 filter: function( selector ) {
16795 return this.pushStack( winnow( this, selector || [], false ) );
16796 },
16797 not: function( selector ) {
16798 return this.pushStack( winnow( this, selector || [], true ) );
16799 },
16800 is: function( selector ) {
16801 return !!winnow(
16802 this,
16803
16804 // If this is a positional/relative selector, check membership in the returned set
16805 // so $("p:first").is("p:last") won't return true for a doc with two "p".
16806 typeof selector === "string" && rneedsContext.test( selector ) ?
16807 jQuery( selector ) :
16808 selector || [],
16809 false
16810 ).length;
16811 }
16812 } );
16813
16814
16815 // Initialize a jQuery object
16816
16817
16818 // A central reference to the root jQuery(document)
16819 var rootjQuery,
16820
16821 // A simple way to check for HTML strings
16822 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
16823 // Strict HTML recognition (#11290: must start with <)
16824 // Shortcut simple #id case for speed
16825 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
16826
16827 init = jQuery.fn.init = function( selector, context, root ) {
16828 var match, elem;
16829
16830 // HANDLE: $(""), $(null), $(undefined), $(false)
16831 if ( !selector ) {
16832 return this;
16833 }
16834
16835 // Method init() accepts an alternate rootjQuery
16836 // so migrate can support jQuery.sub (gh-2101)
16837 root = root || rootjQuery;
16838
16839 // Handle HTML strings
16840 if ( typeof selector === "string" ) {
16841 if ( selector[ 0 ] === "<" &&
16842 selector[ selector.length - 1 ] === ">" &&
16843 selector.length >= 3 ) {
16844
16845 // Assume that strings that start and end with <> are HTML and skip the regex check
16846 match = [ null, selector, null ];
16847
16848 } else {
16849 match = rquickExpr.exec( selector );
16850 }
16851
16852 // Match html or make sure no context is specified for #id
16853 if ( match && ( match[ 1 ] || !context ) ) {
16854
16855 // HANDLE: $(html) -> $(array)
16856 if ( match[ 1 ] ) {
16857 context = context instanceof jQuery ? context[ 0 ] : context;
16858
16859 // Option to run scripts is true for back-compat
16860 // Intentionally let the error be thrown if parseHTML is not present
16861 jQuery.merge( this, jQuery.parseHTML(
16862 match[ 1 ],
16863 context && context.nodeType ? context.ownerDocument || context : document,
16864 true
16865 ) );
16866
16867 // HANDLE: $(html, props)
16868 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
16869 for ( match in context ) {
16870
16871 // Properties of context are called as methods if possible
16872 if ( jQuery.isFunction( this[ match ] ) ) {
16873 this[ match ]( context[ match ] );
16874
16875 // ...and otherwise set as attributes
16876 } else {
16877 this.attr( match, context[ match ] );
16878 }
16879 }
16880 }
16881
16882 return this;
16883
16884 // HANDLE: $(#id)
16885 } else {
16886 elem = document.getElementById( match[ 2 ] );
16887
16888 if ( elem ) {
16889
16890 // Inject the element directly into the jQuery object
16891 this[ 0 ] = elem;
16892 this.length = 1;
16893 }
16894 return this;
16895 }
16896
16897 // HANDLE: $(expr, $(...))
16898 } else if ( !context || context.jquery ) {
16899 return ( context || root ).find( selector );
16900
16901 // HANDLE: $(expr, context)
16902 // (which is just equivalent to: $(context).find(expr)
16903 } else {
16904 return this.constructor( context ).find( selector );
16905 }
16906
16907 // HANDLE: $(DOMElement)
16908 } else if ( selector.nodeType ) {
16909 this[ 0 ] = selector;
16910 this.length = 1;
16911 return this;
16912
16913 // HANDLE: $(function)
16914 // Shortcut for document ready
16915 } else if ( jQuery.isFunction( selector ) ) {
16916 return root.ready !== undefined ?
16917 root.ready( selector ) :
16918
16919 // Execute immediately if ready is not present
16920 selector( jQuery );
16921 }
16922
16923 return jQuery.makeArray( selector, this );
16924 };
16925
16926 // Give the init function the jQuery prototype for later instantiation
16927 init.prototype = jQuery.fn;
16928
16929 // Initialize central reference
16930 rootjQuery = jQuery( document );
16931
16932
16933 var rparentsprev = /^(?:parents|prev(?:Until|All))/,
16934
16935 // Methods guaranteed to produce a unique set when starting from a unique set
16936 guaranteedUnique = {
16937 children: true,
16938 contents: true,
16939 next: true,
16940 prev: true
16941 };
16942
16943 jQuery.fn.extend( {
16944 has: function( target ) {
16945 var targets = jQuery( target, this ),
16946 l = targets.length;
16947
16948 return this.filter( function() {
16949 var i = 0;
16950 for ( ; i < l; i++ ) {
16951 if ( jQuery.contains( this, targets[ i ] ) ) {
16952 return true;
16953 }
16954 }
16955 } );
16956 },
16957
16958 closest: function( selectors, context ) {
16959 var cur,
16960 i = 0,
16961 l = this.length,
16962 matched = [],
16963 targets = typeof selectors !== "string" && jQuery( selectors );
16964
16965 // Positional selectors never match, since there's no _selection_ context
16966 if ( !rneedsContext.test( selectors ) ) {
16967 for ( ; i < l; i++ ) {
16968 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
16969
16970 // Always skip document fragments
16971 if ( cur.nodeType < 11 && ( targets ?
16972 targets.index( cur ) > -1 :
16973
16974 // Don't pass non-elements to Sizzle
16975 cur.nodeType === 1 &&
16976 jQuery.find.matchesSelector( cur, selectors ) ) ) {
16977
16978 matched.push( cur );
16979 break;
16980 }
16981 }
16982 }
16983 }
16984
16985 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
16986 },
16987
16988 // Determine the position of an element within the set
16989 index: function( elem ) {
16990
16991 // No argument, return index in parent
16992 if ( !elem ) {
16993 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
16994 }
16995
16996 // Index in selector
16997 if ( typeof elem === "string" ) {
16998 return indexOf.call( jQuery( elem ), this[ 0 ] );
16999 }
17000
17001 // Locate the position of the desired element
17002 return indexOf.call( this,
17003
17004 // If it receives a jQuery object, the first element is used
17005 elem.jquery ? elem[ 0 ] : elem
17006 );
17007 },
17008
17009 add: function( selector, context ) {
17010 return this.pushStack(
17011 jQuery.uniqueSort(
17012 jQuery.merge( this.get(), jQuery( selector, context ) )
17013 )
17014 );
17015 },
17016
17017 addBack: function( selector ) {
17018 return this.add( selector == null ?
17019 this.prevObject : this.prevObject.filter( selector )
17020 );
17021 }
17022 } );
17023
17024 function sibling( cur, dir ) {
17025 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
17026 return cur;
17027 }
17028
17029 jQuery.each( {
17030 parent: function( elem ) {
17031 var parent = elem.parentNode;
17032 return parent && parent.nodeType !== 11 ? parent : null;
17033 },
17034 parents: function( elem ) {
17035 return dir( elem, "parentNode" );
17036 },
17037 parentsUntil: function( elem, i, until ) {
17038 return dir( elem, "parentNode", until );
17039 },
17040 next: function( elem ) {
17041 return sibling( elem, "nextSibling" );
17042 },
17043 prev: function( elem ) {
17044 return sibling( elem, "previousSibling" );
17045 },
17046 nextAll: function( elem ) {
17047 return dir( elem, "nextSibling" );
17048 },
17049 prevAll: function( elem ) {
17050 return dir( elem, "previousSibling" );
17051 },
17052 nextUntil: function( elem, i, until ) {
17053 return dir( elem, "nextSibling", until );
17054 },
17055 prevUntil: function( elem, i, until ) {
17056 return dir( elem, "previousSibling", until );
17057 },
17058 siblings: function( elem ) {
17059 return siblings( ( elem.parentNode || {} ).firstChild, elem );
17060 },
17061 children: function( elem ) {
17062 return siblings( elem.firstChild );
17063 },
17064 contents: function( elem ) {
17065 if ( nodeName( elem, "iframe" ) ) {
17066 return elem.contentDocument;
17067 }
17068
17069 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
17070 // Treat the template element as a regular one in browsers that
17071 // don't support it.
17072 if ( nodeName( elem, "template" ) ) {
17073 elem = elem.content || elem;
17074 }
17075
17076 return jQuery.merge( [], elem.childNodes );
17077 }
17078 }, function( name, fn ) {
17079 jQuery.fn[ name ] = function( until, selector ) {
17080 var matched = jQuery.map( this, fn, until );
17081
17082 if ( name.slice( -5 ) !== "Until" ) {
17083 selector = until;
17084 }
17085
17086 if ( selector && typeof selector === "string" ) {
17087 matched = jQuery.filter( selector, matched );
17088 }
17089
17090 if ( this.length > 1 ) {
17091
17092 // Remove duplicates
17093 if ( !guaranteedUnique[ name ] ) {
17094 jQuery.uniqueSort( matched );
17095 }
17096
17097 // Reverse order for parents* and prev-derivatives
17098 if ( rparentsprev.test( name ) ) {
17099 matched.reverse();
17100 }
17101 }
17102
17103 return this.pushStack( matched );
17104 };
17105 } );
17106 var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
17107
17108
17109
17110 // Convert String-formatted options into Object-formatted ones
17111 function createOptions( options ) {
17112 var object = {};
17113 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
17114 object[ flag ] = true;
17115 } );
17116 return object;
17117 }
17118
17119 /*
17120 * Create a callback list using the following parameters:
17121 *
17122 * options: an optional list of space-separated options that will change how
17123 * the callback list behaves or a more traditional option object
17124 *
17125 * By default a callback list will act like an event callback list and can be
17126 * "fired" multiple times.
17127 *
17128 * Possible options:
17129 *
17130 * once: will ensure the callback list can only be fired once (like a Deferred)
17131 *
17132 * memory: will keep track of previous values and will call any callback added
17133 * after the list has been fired right away with the latest "memorized"
17134 * values (like a Deferred)
17135 *
17136 * unique: will ensure a callback can only be added once (no duplicate in the list)
17137 *
17138 * stopOnFalse: interrupt callings when a callback returns false
17139 *
17140 */
17141 jQuery.Callbacks = function( options ) {
17142
17143 // Convert options from String-formatted to Object-formatted if needed
17144 // (we check in cache first)
17145 options = typeof options === "string" ?
17146 createOptions( options ) :
17147 jQuery.extend( {}, options );
17148
17149 var // Flag to know if list is currently firing
17150 firing,
17151
17152 // Last fire value for non-forgettable lists
17153 memory,
17154
17155 // Flag to know if list was already fired
17156 fired,
17157
17158 // Flag to prevent firing
17159 locked,
17160
17161 // Actual callback list
17162 list = [],
17163
17164 // Queue of execution data for repeatable lists
17165 queue = [],
17166
17167 // Index of currently firing callback (modified by add/remove as needed)
17168 firingIndex = -1,
17169
17170 // Fire callbacks
17171 fire = function() {
17172
17173 // Enforce single-firing
17174 locked = locked || options.once;
17175
17176 // Execute callbacks for all pending executions,
17177 // respecting firingIndex overrides and runtime changes
17178 fired = firing = true;
17179 for ( ; queue.length; firingIndex = -1 ) {
17180 memory = queue.shift();
17181 while ( ++firingIndex < list.length ) {
17182
17183 // Run callback and check for early termination
17184 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
17185 options.stopOnFalse ) {
17186
17187 // Jump to end and forget the data so .add doesn't re-fire
17188 firingIndex = list.length;
17189 memory = false;
17190 }
17191 }
17192 }
17193
17194 // Forget the data if we're done with it
17195 if ( !options.memory ) {
17196 memory = false;
17197 }
17198
17199 firing = false;
17200
17201 // Clean up if we're done firing for good
17202 if ( locked ) {
17203
17204 // Keep an empty list if we have data for future add calls
17205 if ( memory ) {
17206 list = [];
17207
17208 // Otherwise, this object is spent
17209 } else {
17210 list = "";
17211 }
17212 }
17213 },
17214
17215 // Actual Callbacks object
17216 self = {
17217
17218 // Add a callback or a collection of callbacks to the list
17219 add: function() {
17220 if ( list ) {
17221
17222 // If we have memory from a past run, we should fire after adding
17223 if ( memory && !firing ) {
17224 firingIndex = list.length - 1;
17225 queue.push( memory );
17226 }
17227
17228 ( function add( args ) {
17229 jQuery.each( args, function( _, arg ) {
17230 if ( jQuery.isFunction( arg ) ) {
17231 if ( !options.unique || !self.has( arg ) ) {
17232 list.push( arg );
17233 }
17234 } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
17235
17236 // Inspect recursively
17237 add( arg );
17238 }
17239 } );
17240 } )( arguments );
17241
17242 if ( memory && !firing ) {
17243 fire();
17244 }
17245 }
17246 return this;
17247 },
17248
17249 // Remove a callback from the list
17250 remove: function() {
17251 jQuery.each( arguments, function( _, arg ) {
17252 var index;
17253 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
17254 list.splice( index, 1 );
17255
17256 // Handle firing indexes
17257 if ( index <= firingIndex ) {
17258 firingIndex--;
17259 }
17260 }
17261 } );
17262 return this;
17263 },
17264
17265 // Check if a given callback is in the list.
17266 // If no argument is given, return whether or not list has callbacks attached.
17267 has: function( fn ) {
17268 return fn ?
17269 jQuery.inArray( fn, list ) > -1 :
17270 list.length > 0;
17271 },
17272
17273 // Remove all callbacks from the list
17274 empty: function() {
17275 if ( list ) {
17276 list = [];
17277 }
17278 return this;
17279 },
17280
17281 // Disable .fire and .add
17282 // Abort any current/pending executions
17283 // Clear all callbacks and values
17284 disable: function() {
17285 locked = queue = [];
17286 list = memory = "";
17287 return this;
17288 },
17289 disabled: function() {
17290 return !list;
17291 },
17292
17293 // Disable .fire
17294 // Also disable .add unless we have memory (since it would have no effect)
17295 // Abort any pending executions
17296 lock: function() {
17297 locked = queue = [];
17298 if ( !memory && !firing ) {
17299 list = memory = "";
17300 }
17301 return this;
17302 },
17303 locked: function() {
17304 return !!locked;
17305 },
17306
17307 // Call all callbacks with the given context and arguments
17308 fireWith: function( context, args ) {
17309 if ( !locked ) {
17310 args = args || [];
17311 args = [ context, args.slice ? args.slice() : args ];
17312 queue.push( args );
17313 if ( !firing ) {
17314 fire();
17315 }
17316 }
17317 return this;
17318 },
17319
17320 // Call all the callbacks with the given arguments
17321 fire: function() {
17322 self.fireWith( this, arguments );
17323 return this;
17324 },
17325
17326 // To know if the callbacks have already been called at least once
17327 fired: function() {
17328 return !!fired;
17329 }
17330 };
17331
17332 return self;
17333 };
17334
17335
17336 function Identity( v ) {
17337 return v;
17338 }
17339 function Thrower( ex ) {
17340 throw ex;
17341 }
17342
17343 function adoptValue( value, resolve, reject, noValue ) {
17344 var method;
17345
17346 try {
17347
17348 // Check for promise aspect first to privilege synchronous behavior
17349 if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
17350 method.call( value ).done( resolve ).fail( reject );
17351
17352 // Other thenables
17353 } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
17354 method.call( value, resolve, reject );
17355
17356 // Other non-thenables
17357 } else {
17358
17359 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
17360 // * false: [ value ].slice( 0 ) => resolve( value )
17361 // * true: [ value ].slice( 1 ) => resolve()
17362 resolve.apply( undefined, [ value ].slice( noValue ) );
17363 }
17364
17365 // For Promises/A+, convert exceptions into rejections
17366 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
17367 // Deferred#then to conditionally suppress rejection.
17368 } catch ( value ) {
17369
17370 // Support: Android 4.0 only
17371 // Strict mode functions invoked without .call/.apply get global-object context
17372 reject.apply( undefined, [ value ] );
17373 }
17374 }
17375
17376 jQuery.extend( {
17377
17378 Deferred: function( func ) {
17379 var tuples = [
17380
17381 // action, add listener, callbacks,
17382 // ... .then handlers, argument index, [final state]
17383 [ "notify", "progress", jQuery.Callbacks( "memory" ),
17384 jQuery.Callbacks( "memory" ), 2 ],
17385 [ "resolve", "done", jQuery.Callbacks( "once memory" ),
17386 jQuery.Callbacks( "once memory" ), 0, "resolved" ],
17387 [ "reject", "fail", jQuery.Callbacks( "once memory" ),
17388 jQuery.Callbacks( "once memory" ), 1, "rejected" ]
17389 ],
17390 state = "pending",
17391 promise = {
17392 state: function() {
17393 return state;
17394 },
17395 always: function() {
17396 deferred.done( arguments ).fail( arguments );
17397 return this;
17398 },
17399 "catch": function( fn ) {
17400 return promise.then( null, fn );
17401 },
17402
17403 // Keep pipe for back-compat
17404 pipe: function( /* fnDone, fnFail, fnProgress */ ) {
17405 var fns = arguments;
17406
17407 return jQuery.Deferred( function( newDefer ) {
17408 jQuery.each( tuples, function( i, tuple ) {
17409
17410 // Map tuples (progress, done, fail) to arguments (done, fail, progress)
17411 var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
17412
17413 // deferred.progress(function() { bind to newDefer or newDefer.notify })
17414 // deferred.done(function() { bind to newDefer or newDefer.resolve })
17415 // deferred.fail(function() { bind to newDefer or newDefer.reject })
17416 deferred[ tuple[ 1 ] ]( function() {
17417 var returned = fn && fn.apply( this, arguments );
17418 if ( returned && jQuery.isFunction( returned.promise ) ) {
17419 returned.promise()
17420 .progress( newDefer.notify )
17421 .done( newDefer.resolve )
17422 .fail( newDefer.reject );
17423 } else {
17424 newDefer[ tuple[ 0 ] + "With" ](
17425 this,
17426 fn ? [ returned ] : arguments
17427 );
17428 }
17429 } );
17430 } );
17431 fns = null;
17432 } ).promise();
17433 },
17434 then: function( onFulfilled, onRejected, onProgress ) {
17435 var maxDepth = 0;
17436 function resolve( depth, deferred, handler, special ) {
17437 return function() {
17438 var that = this,
17439 args = arguments,
17440 mightThrow = function() {
17441 var returned, then;
17442
17443 // Support: Promises/A+ section 2.3.3.3.3
17444 // https://promisesaplus.com/#point-59
17445 // Ignore double-resolution attempts
17446 if ( depth < maxDepth ) {
17447 return;
17448 }
17449
17450 returned = handler.apply( that, args );
17451
17452 // Support: Promises/A+ section 2.3.1
17453 // https://promisesaplus.com/#point-48
17454 if ( returned === deferred.promise() ) {
17455 throw new TypeError( "Thenable self-resolution" );
17456 }
17457
17458 // Support: Promises/A+ sections 2.3.3.1, 3.5
17459 // https://promisesaplus.com/#point-54
17460 // https://promisesaplus.com/#point-75
17461 // Retrieve `then` only once
17462 then = returned &&
17463
17464 // Support: Promises/A+ section 2.3.4
17465 // https://promisesaplus.com/#point-64
17466 // Only check objects and functions for thenability
17467 ( typeof returned === "object" ||
17468 typeof returned === "function" ) &&
17469 returned.then;
17470
17471 // Handle a returned thenable
17472 if ( jQuery.isFunction( then ) ) {
17473
17474 // Special processors (notify) just wait for resolution
17475 if ( special ) {
17476 then.call(
17477 returned,
17478 resolve( maxDepth, deferred, Identity, special ),
17479 resolve( maxDepth, deferred, Thrower, special )
17480 );
17481
17482 // Normal processors (resolve) also hook into progress
17483 } else {
17484
17485 // ...and disregard older resolution values
17486 maxDepth++;
17487
17488 then.call(
17489 returned,
17490 resolve( maxDepth, deferred, Identity, special ),
17491 resolve( maxDepth, deferred, Thrower, special ),
17492 resolve( maxDepth, deferred, Identity,
17493 deferred.notifyWith )
17494 );
17495 }
17496
17497 // Handle all other returned values
17498 } else {
17499
17500 // Only substitute handlers pass on context
17501 // and multiple values (non-spec behavior)
17502 if ( handler !== Identity ) {
17503 that = undefined;
17504 args = [ returned ];
17505 }
17506
17507 // Process the value(s)
17508 // Default process is resolve
17509 ( special || deferred.resolveWith )( that, args );
17510 }
17511 },
17512
17513 // Only normal processors (resolve) catch and reject exceptions
17514 process = special ?
17515 mightThrow :
17516 function() {
17517 try {
17518 mightThrow();
17519 } catch ( e ) {
17520
17521 if ( jQuery.Deferred.exceptionHook ) {
17522 jQuery.Deferred.exceptionHook( e,
17523 process.stackTrace );
17524 }
17525
17526 // Support: Promises/A+ section 2.3.3.3.4.1
17527 // https://promisesaplus.com/#point-61
17528 // Ignore post-resolution exceptions
17529 if ( depth + 1 >= maxDepth ) {
17530
17531 // Only substitute handlers pass on context
17532 // and multiple values (non-spec behavior)
17533 if ( handler !== Thrower ) {
17534 that = undefined;
17535 args = [ e ];
17536 }
17537
17538 deferred.rejectWith( that, args );
17539 }
17540 }
17541 };
17542
17543 // Support: Promises/A+ section 2.3.3.3.1
17544 // https://promisesaplus.com/#point-57
17545 // Re-resolve promises immediately to dodge false rejection from
17546 // subsequent errors
17547 if ( depth ) {
17548 process();
17549 } else {
17550
17551 // Call an optional hook to record the stack, in case of exception
17552 // since it's otherwise lost when execution goes async
17553 if ( jQuery.Deferred.getStackHook ) {
17554 process.stackTrace = jQuery.Deferred.getStackHook();
17555 }
17556 window.setTimeout( process );
17557 }
17558 };
17559 }
17560
17561 return jQuery.Deferred( function( newDefer ) {
17562
17563 // progress_handlers.add( ... )
17564 tuples[ 0 ][ 3 ].add(
17565 resolve(
17566 0,
17567 newDefer,
17568 jQuery.isFunction( onProgress ) ?
17569 onProgress :
17570 Identity,
17571 newDefer.notifyWith
17572 )
17573 );
17574
17575 // fulfilled_handlers.add( ... )
17576 tuples[ 1 ][ 3 ].add(
17577 resolve(
17578 0,
17579 newDefer,
17580 jQuery.isFunction( onFulfilled ) ?
17581 onFulfilled :
17582 Identity
17583 )
17584 );
17585
17586 // rejected_handlers.add( ... )
17587 tuples[ 2 ][ 3 ].add(
17588 resolve(
17589 0,
17590 newDefer,
17591 jQuery.isFunction( onRejected ) ?
17592 onRejected :
17593 Thrower
17594 )
17595 );
17596 } ).promise();
17597 },
17598
17599 // Get a promise for this deferred
17600 // If obj is provided, the promise aspect is added to the object
17601 promise: function( obj ) {
17602 return obj != null ? jQuery.extend( obj, promise ) : promise;
17603 }
17604 },
17605 deferred = {};
17606
17607 // Add list-specific methods
17608 jQuery.each( tuples, function( i, tuple ) {
17609 var list = tuple[ 2 ],
17610 stateString = tuple[ 5 ];
17611
17612 // promise.progress = list.add
17613 // promise.done = list.add
17614 // promise.fail = list.add
17615 promise[ tuple[ 1 ] ] = list.add;
17616
17617 // Handle state
17618 if ( stateString ) {
17619 list.add(
17620 function() {
17621
17622 // state = "resolved" (i.e., fulfilled)
17623 // state = "rejected"
17624 state = stateString;
17625 },
17626
17627 // rejected_callbacks.disable
17628 // fulfilled_callbacks.disable
17629 tuples[ 3 - i ][ 2 ].disable,
17630
17631 // progress_callbacks.lock
17632 tuples[ 0 ][ 2 ].lock
17633 );
17634 }
17635
17636 // progress_handlers.fire
17637 // fulfilled_handlers.fire
17638 // rejected_handlers.fire
17639 list.add( tuple[ 3 ].fire );
17640
17641 // deferred.notify = function() { deferred.notifyWith(...) }
17642 // deferred.resolve = function() { deferred.resolveWith(...) }
17643 // deferred.reject = function() { deferred.rejectWith(...) }
17644 deferred[ tuple[ 0 ] ] = function() {
17645 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
17646 return this;
17647 };
17648
17649 // deferred.notifyWith = list.fireWith
17650 // deferred.resolveWith = list.fireWith
17651 // deferred.rejectWith = list.fireWith
17652 deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
17653 } );
17654
17655 // Make the deferred a promise
17656 promise.promise( deferred );
17657
17658 // Call given func if any
17659 if ( func ) {
17660 func.call( deferred, deferred );
17661 }
17662
17663 // All done!
17664 return deferred;
17665 },
17666
17667 // Deferred helper
17668 when: function( singleValue ) {
17669 var
17670
17671 // count of uncompleted subordinates
17672 remaining = arguments.length,
17673
17674 // count of unprocessed arguments
17675 i = remaining,
17676
17677 // subordinate fulfillment data
17678 resolveContexts = Array( i ),
17679 resolveValues = slice.call( arguments ),
17680
17681 // the master Deferred
17682 master = jQuery.Deferred(),
17683
17684 // subordinate callback factory
17685 updateFunc = function( i ) {
17686 return function( value ) {
17687 resolveContexts[ i ] = this;
17688 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
17689 if ( !( --remaining ) ) {
17690 master.resolveWith( resolveContexts, resolveValues );
17691 }
17692 };
17693 };
17694
17695 // Single- and empty arguments are adopted like Promise.resolve
17696 if ( remaining <= 1 ) {
17697 adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
17698 !remaining );
17699
17700 // Use .then() to unwrap secondary thenables (cf. gh-3000)
17701 if ( master.state() === "pending" ||
17702 jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
17703
17704 return master.then();
17705 }
17706 }
17707
17708 // Multiple arguments are aggregated like Promise.all array elements
17709 while ( i-- ) {
17710 adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
17711 }
17712
17713 return master.promise();
17714 }
17715 } );
17716
17717
17718 // These usually indicate a programmer mistake during development,
17719 // warn about them ASAP rather than swallowing them by default.
17720 var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
17721
17722 jQuery.Deferred.exceptionHook = function( error, stack ) {
17723
17724 // Support: IE 8 - 9 only
17725 // Console exists when dev tools are open, which can happen at any time
17726 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
17727 window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
17728 }
17729 };
17730
17731
17732
17733
17734 jQuery.readyException = function( error ) {
17735 window.setTimeout( function() {
17736 throw error;
17737 } );
17738 };
17739
17740
17741
17742
17743 // The deferred used on DOM ready
17744 var readyList = jQuery.Deferred();
17745
17746 jQuery.fn.ready = function( fn ) {
17747
17748 readyList
17749 .then( fn )
17750
17751 // Wrap jQuery.readyException in a function so that the lookup
17752 // happens at the time of error handling instead of callback
17753 // registration.
17754 .catch( function( error ) {
17755 jQuery.readyException( error );
17756 } );
17757
17758 return this;
17759 };
17760
17761 jQuery.extend( {
17762
17763 // Is the DOM ready to be used? Set to true once it occurs.
17764 isReady: false,
17765
17766 // A counter to track how many items to wait for before
17767 // the ready event fires. See #6781
17768 readyWait: 1,
17769
17770 // Handle when the DOM is ready
17771 ready: function( wait ) {
17772
17773 // Abort if there are pending holds or we're already ready
17774 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
17775 return;
17776 }
17777
17778 // Remember that the DOM is ready
17779 jQuery.isReady = true;
17780
17781 // If a normal DOM Ready event fired, decrement, and wait if need be
17782 if ( wait !== true && --jQuery.readyWait > 0 ) {
17783 return;
17784 }
17785
17786 // If there are functions bound, to execute
17787 readyList.resolveWith( document, [ jQuery ] );
17788 }
17789 } );
17790
17791 jQuery.ready.then = readyList.then;
17792
17793 // The ready event handler and self cleanup method
17794 function completed() {
17795 document.removeEventListener( "DOMContentLoaded", completed );
17796 window.removeEventListener( "load", completed );
17797 jQuery.ready();
17798 }
17799
17800 // Catch cases where $(document).ready() is called
17801 // after the browser event has already occurred.
17802 // Support: IE <=9 - 10 only
17803 // Older IE sometimes signals "interactive" too soon
17804 if ( document.readyState === "complete" ||
17805 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
17806
17807 // Handle it asynchronously to allow scripts the opportunity to delay ready
17808 window.setTimeout( jQuery.ready );
17809
17810 } else {
17811
17812 // Use the handy event callback
17813 document.addEventListener( "DOMContentLoaded", completed );
17814
17815 // A fallback to window.onload, that will always work
17816 window.addEventListener( "load", completed );
17817 }
17818
17819
17820
17821
17822 // Multifunctional method to get and set values of a collection
17823 // The value/s can optionally be executed if it's a function
17824 var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
17825 var i = 0,
17826 len = elems.length,
17827 bulk = key == null;
17828
17829 // Sets many values
17830 if ( jQuery.type( key ) === "object" ) {
17831 chainable = true;
17832 for ( i in key ) {
17833 access( elems, fn, i, key[ i ], true, emptyGet, raw );
17834 }
17835
17836 // Sets one value
17837 } else if ( value !== undefined ) {
17838 chainable = true;
17839
17840 if ( !jQuery.isFunction( value ) ) {
17841 raw = true;
17842 }
17843
17844 if ( bulk ) {
17845
17846 // Bulk operations run against the entire set
17847 if ( raw ) {
17848 fn.call( elems, value );
17849 fn = null;
17850
17851 // ...except when executing function values
17852 } else {
17853 bulk = fn;
17854 fn = function( elem, key, value ) {
17855 return bulk.call( jQuery( elem ), value );
17856 };
17857 }
17858 }
17859
17860 if ( fn ) {
17861 for ( ; i < len; i++ ) {
17862 fn(
17863 elems[ i ], key, raw ?
17864 value :
17865 value.call( elems[ i ], i, fn( elems[ i ], key ) )
17866 );
17867 }
17868 }
17869 }
17870
17871 if ( chainable ) {
17872 return elems;
17873 }
17874
17875 // Gets
17876 if ( bulk ) {
17877 return fn.call( elems );
17878 }
17879
17880 return len ? fn( elems[ 0 ], key ) : emptyGet;
17881 };
17882 var acceptData = function( owner ) {
17883
17884 // Accepts only:
17885 // - Node
17886 // - Node.ELEMENT_NODE
17887 // - Node.DOCUMENT_NODE
17888 // - Object
17889 // - Any
17890 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
17891 };
17892
17893
17894
17895
17896 function Data() {
17897 this.expando = jQuery.expando + Data.uid++;
17898 }
17899
17900 Data.uid = 1;
17901
17902 Data.prototype = {
17903
17904 cache: function( owner ) {
17905
17906 // Check if the owner object already has a cache
17907 var value = owner[ this.expando ];
17908
17909 // If not, create one
17910 if ( !value ) {
17911 value = {};
17912
17913 // We can accept data for non-element nodes in modern browsers,
17914 // but we should not, see #8335.
17915 // Always return an empty object.
17916 if ( acceptData( owner ) ) {
17917
17918 // If it is a node unlikely to be stringify-ed or looped over
17919 // use plain assignment
17920 if ( owner.nodeType ) {
17921 owner[ this.expando ] = value;
17922
17923 // Otherwise secure it in a non-enumerable property
17924 // configurable must be true to allow the property to be
17925 // deleted when data is removed
17926 } else {
17927 Object.defineProperty( owner, this.expando, {
17928 value: value,
17929 configurable: true
17930 } );
17931 }
17932 }
17933 }
17934
17935 return value;
17936 },
17937 set: function( owner, data, value ) {
17938 var prop,
17939 cache = this.cache( owner );
17940
17941 // Handle: [ owner, key, value ] args
17942 // Always use camelCase key (gh-2257)
17943 if ( typeof data === "string" ) {
17944 cache[ jQuery.camelCase( data ) ] = value;
17945
17946 // Handle: [ owner, { properties } ] args
17947 } else {
17948
17949 // Copy the properties one-by-one to the cache object
17950 for ( prop in data ) {
17951 cache[ jQuery.camelCase( prop ) ] = data[ prop ];
17952 }
17953 }
17954 return cache;
17955 },
17956 get: function( owner, key ) {
17957 return key === undefined ?
17958 this.cache( owner ) :
17959
17960 // Always use camelCase key (gh-2257)
17961 owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
17962 },
17963 access: function( owner, key, value ) {
17964
17965 // In cases where either:
17966 //
17967 // 1. No key was specified
17968 // 2. A string key was specified, but no value provided
17969 //
17970 // Take the "read" path and allow the get method to determine
17971 // which value to return, respectively either:
17972 //
17973 // 1. The entire cache object
17974 // 2. The data stored at the key
17975 //
17976 if ( key === undefined ||
17977 ( ( key && typeof key === "string" ) && value === undefined ) ) {
17978
17979 return this.get( owner, key );
17980 }
17981
17982 // When the key is not a string, or both a key and value
17983 // are specified, set or extend (existing objects) with either:
17984 //
17985 // 1. An object of properties
17986 // 2. A key and value
17987 //
17988 this.set( owner, key, value );
17989
17990 // Since the "set" path can have two possible entry points
17991 // return the expected data based on which path was taken[*]
17992 return value !== undefined ? value : key;
17993 },
17994 remove: function( owner, key ) {
17995 var i,
17996 cache = owner[ this.expando ];
17997
17998 if ( cache === undefined ) {
17999 return;
18000 }
18001
18002 if ( key !== undefined ) {
18003
18004 // Support array or space separated string of keys
18005 if ( Array.isArray( key ) ) {
18006
18007 // If key is an array of keys...
18008 // We always set camelCase keys, so remove that.
18009 key = key.map( jQuery.camelCase );
18010 } else {
18011 key = jQuery.camelCase( key );
18012
18013 // If a key with the spaces exists, use it.
18014 // Otherwise, create an array by matching non-whitespace
18015 key = key in cache ?
18016 [ key ] :
18017 ( key.match( rnothtmlwhite ) || [] );
18018 }
18019
18020 i = key.length;
18021
18022 while ( i-- ) {
18023 delete cache[ key[ i ] ];
18024 }
18025 }
18026
18027 // Remove the expando if there's no more data
18028 if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
18029
18030 // Support: Chrome <=35 - 45
18031 // Webkit & Blink performance suffers when deleting properties
18032 // from DOM nodes, so set to undefined instead
18033 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
18034 if ( owner.nodeType ) {
18035 owner[ this.expando ] = undefined;
18036 } else {
18037 delete owner[ this.expando ];
18038 }
18039 }
18040 },
18041 hasData: function( owner ) {
18042 var cache = owner[ this.expando ];
18043 return cache !== undefined && !jQuery.isEmptyObject( cache );
18044 }
18045 };
18046 var dataPriv = new Data();
18047
18048 var dataUser = new Data();
18049
18050
18051
18052 // Implementation Summary
18053 //
18054 // 1. Enforce API surface and semantic compatibility with 1.9.x branch
18055 // 2. Improve the module's maintainability by reducing the storage
18056 // paths to a single mechanism.
18057 // 3. Use the same single mechanism to support "private" and "user" data.
18058 // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
18059 // 5. Avoid exposing implementation details on user objects (eg. expando properties)
18060 // 6. Provide a clear path for implementation upgrade to WeakMap in 2014
18061
18062 var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
18063 rmultiDash = /[A-Z]/g;
18064
18065 function getData( data ) {
18066 if ( data === "true" ) {
18067 return true;
18068 }
18069
18070 if ( data === "false" ) {
18071 return false;
18072 }
18073
18074 if ( data === "null" ) {
18075 return null;
18076 }
18077
18078 // Only convert to a number if it doesn't change the string
18079 if ( data === +data + "" ) {
18080 return +data;
18081 }
18082
18083 if ( rbrace.test( data ) ) {
18084 return JSON.parse( data );
18085 }
18086
18087 return data;
18088 }
18089
18090 function dataAttr( elem, key, data ) {
18091 var name;
18092
18093 // If nothing was found internally, try to fetch any
18094 // data from the HTML5 data-* attribute
18095 if ( data === undefined && elem.nodeType === 1 ) {
18096 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
18097 data = elem.getAttribute( name );
18098
18099 if ( typeof data === "string" ) {
18100 try {
18101 data = getData( data );
18102 } catch ( e ) {}
18103
18104 // Make sure we set the data so it isn't changed later
18105 dataUser.set( elem, key, data );
18106 } else {
18107 data = undefined;
18108 }
18109 }
18110 return data;
18111 }
18112
18113 jQuery.extend( {
18114 hasData: function( elem ) {
18115 return dataUser.hasData( elem ) || dataPriv.hasData( elem );
18116 },
18117
18118 data: function( elem, name, data ) {
18119 return dataUser.access( elem, name, data );
18120 },
18121
18122 removeData: function( elem, name ) {
18123 dataUser.remove( elem, name );
18124 },
18125
18126 // TODO: Now that all calls to _data and _removeData have been replaced
18127 // with direct calls to dataPriv methods, these can be deprecated.
18128 _data: function( elem, name, data ) {
18129 return dataPriv.access( elem, name, data );
18130 },
18131
18132 _removeData: function( elem, name ) {
18133 dataPriv.remove( elem, name );
18134 }
18135 } );
18136
18137 jQuery.fn.extend( {
18138 data: function( key, value ) {
18139 var i, name, data,
18140 elem = this[ 0 ],
18141 attrs = elem && elem.attributes;
18142
18143 // Gets all values
18144 if ( key === undefined ) {
18145 if ( this.length ) {
18146 data = dataUser.get( elem );
18147
18148 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
18149 i = attrs.length;
18150 while ( i-- ) {
18151
18152 // Support: IE 11 only
18153 // The attrs elements can be null (#14894)
18154 if ( attrs[ i ] ) {
18155 name = attrs[ i ].name;
18156 if ( name.indexOf( "data-" ) === 0 ) {
18157 name = jQuery.camelCase( name.slice( 5 ) );
18158 dataAttr( elem, name, data[ name ] );
18159 }
18160 }
18161 }
18162 dataPriv.set( elem, "hasDataAttrs", true );
18163 }
18164 }
18165
18166 return data;
18167 }
18168
18169 // Sets multiple values
18170 if ( typeof key === "object" ) {
18171 return this.each( function() {
18172 dataUser.set( this, key );
18173 } );
18174 }
18175
18176 return access( this, function( value ) {
18177 var data;
18178
18179 // The calling jQuery object (element matches) is not empty
18180 // (and therefore has an element appears at this[ 0 ]) and the
18181 // `value` parameter was not undefined. An empty jQuery object
18182 // will result in `undefined` for elem = this[ 0 ] which will
18183 // throw an exception if an attempt to read a data cache is made.
18184 if ( elem && value === undefined ) {
18185
18186 // Attempt to get data from the cache
18187 // The key will always be camelCased in Data
18188 data = dataUser.get( elem, key );
18189 if ( data !== undefined ) {
18190 return data;
18191 }
18192
18193 // Attempt to "discover" the data in
18194 // HTML5 custom data-* attrs
18195 data = dataAttr( elem, key );
18196 if ( data !== undefined ) {
18197 return data;
18198 }
18199
18200 // We tried really hard, but the data doesn't exist.
18201 return;
18202 }
18203
18204 // Set the data...
18205 this.each( function() {
18206
18207 // We always store the camelCased key
18208 dataUser.set( this, key, value );
18209 } );
18210 }, null, value, arguments.length > 1, null, true );
18211 },
18212
18213 removeData: function( key ) {
18214 return this.each( function() {
18215 dataUser.remove( this, key );
18216 } );
18217 }
18218 } );
18219
18220
18221 jQuery.extend( {
18222 queue: function( elem, type, data ) {
18223 var queue;
18224
18225 if ( elem ) {
18226 type = ( type || "fx" ) + "queue";
18227 queue = dataPriv.get( elem, type );
18228
18229 // Speed up dequeue by getting out quickly if this is just a lookup
18230 if ( data ) {
18231 if ( !queue || Array.isArray( data ) ) {
18232 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
18233 } else {
18234 queue.push( data );
18235 }
18236 }
18237 return queue || [];
18238 }
18239 },
18240
18241 dequeue: function( elem, type ) {
18242 type = type || "fx";
18243
18244 var queue = jQuery.queue( elem, type ),
18245 startLength = queue.length,
18246 fn = queue.shift(),
18247 hooks = jQuery._queueHooks( elem, type ),
18248 next = function() {
18249 jQuery.dequeue( elem, type );
18250 };
18251
18252 // If the fx queue is dequeued, always remove the progress sentinel
18253 if ( fn === "inprogress" ) {
18254 fn = queue.shift();
18255 startLength--;
18256 }
18257
18258 if ( fn ) {
18259
18260 // Add a progress sentinel to prevent the fx queue from being
18261 // automatically dequeued
18262 if ( type === "fx" ) {
18263 queue.unshift( "inprogress" );
18264 }
18265
18266 // Clear up the last queue stop function
18267 delete hooks.stop;
18268 fn.call( elem, next, hooks );
18269 }
18270
18271 if ( !startLength && hooks ) {
18272 hooks.empty.fire();
18273 }
18274 },
18275
18276 // Not public - generate a queueHooks object, or return the current one
18277 _queueHooks: function( elem, type ) {
18278 var key = type + "queueHooks";
18279 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
18280 empty: jQuery.Callbacks( "once memory" ).add( function() {
18281 dataPriv.remove( elem, [ type + "queue", key ] );
18282 } )
18283 } );
18284 }
18285 } );
18286
18287 jQuery.fn.extend( {
18288 queue: function( type, data ) {
18289 var setter = 2;
18290
18291 if ( typeof type !== "string" ) {
18292 data = type;
18293 type = "fx";
18294 setter--;
18295 }
18296
18297 if ( arguments.length < setter ) {
18298 return jQuery.queue( this[ 0 ], type );
18299 }
18300
18301 return data === undefined ?
18302 this :
18303 this.each( function() {
18304 var queue = jQuery.queue( this, type, data );
18305
18306 // Ensure a hooks for this queue
18307 jQuery._queueHooks( this, type );
18308
18309 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
18310 jQuery.dequeue( this, type );
18311 }
18312 } );
18313 },
18314 dequeue: function( type ) {
18315 return this.each( function() {
18316 jQuery.dequeue( this, type );
18317 } );
18318 },
18319 clearQueue: function( type ) {
18320 return this.queue( type || "fx", [] );
18321 },
18322
18323 // Get a promise resolved when queues of a certain type
18324 // are emptied (fx is the type by default)
18325 promise: function( type, obj ) {
18326 var tmp,
18327 count = 1,
18328 defer = jQuery.Deferred(),
18329 elements = this,
18330 i = this.length,
18331 resolve = function() {
18332 if ( !( --count ) ) {
18333 defer.resolveWith( elements, [ elements ] );
18334 }
18335 };
18336
18337 if ( typeof type !== "string" ) {
18338 obj = type;
18339 type = undefined;
18340 }
18341 type = type || "fx";
18342
18343 while ( i-- ) {
18344 tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
18345 if ( tmp && tmp.empty ) {
18346 count++;
18347 tmp.empty.add( resolve );
18348 }
18349 }
18350 resolve();
18351 return defer.promise( obj );
18352 }
18353 } );
18354 var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
18355
18356 var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
18357
18358
18359 var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
18360
18361 var isHiddenWithinTree = function( elem, el ) {
18362
18363 // isHiddenWithinTree might be called from jQuery#filter function;
18364 // in that case, element will be second argument
18365 elem = el || elem;
18366
18367 // Inline style trumps all
18368 return elem.style.display === "none" ||
18369 elem.style.display === "" &&
18370
18371 // Otherwise, check computed style
18372 // Support: Firefox <=43 - 45
18373 // Disconnected elements can have computed display: none, so first confirm that elem is
18374 // in the document.
18375 jQuery.contains( elem.ownerDocument, elem ) &&
18376
18377 jQuery.css( elem, "display" ) === "none";
18378 };
18379
18380 var swap = function( elem, options, callback, args ) {
18381 var ret, name,
18382 old = {};
18383
18384 // Remember the old values, and insert the new ones
18385 for ( name in options ) {
18386 old[ name ] = elem.style[ name ];
18387 elem.style[ name ] = options[ name ];
18388 }
18389
18390 ret = callback.apply( elem, args || [] );
18391
18392 // Revert the old values
18393 for ( name in options ) {
18394 elem.style[ name ] = old[ name ];
18395 }
18396
18397 return ret;
18398 };
18399
18400
18401
18402
18403 function adjustCSS( elem, prop, valueParts, tween ) {
18404 var adjusted,
18405 scale = 1,
18406 maxIterations = 20,
18407 currentValue = tween ?
18408 function() {
18409 return tween.cur();
18410 } :
18411 function() {
18412 return jQuery.css( elem, prop, "" );
18413 },
18414 initial = currentValue(),
18415 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
18416
18417 // Starting value computation is required for potential unit mismatches
18418 initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
18419 rcssNum.exec( jQuery.css( elem, prop ) );
18420
18421 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
18422
18423 // Trust units reported by jQuery.css
18424 unit = unit || initialInUnit[ 3 ];
18425
18426 // Make sure we update the tween properties later on
18427 valueParts = valueParts || [];
18428
18429 // Iteratively approximate from a nonzero starting point
18430 initialInUnit = +initial || 1;
18431
18432 do {
18433
18434 // If previous iteration zeroed out, double until we get *something*.
18435 // Use string for doubling so we don't accidentally see scale as unchanged below
18436 scale = scale || ".5";
18437
18438 // Adjust and apply
18439 initialInUnit = initialInUnit / scale;
18440 jQuery.style( elem, prop, initialInUnit + unit );
18441
18442 // Update scale, tolerating zero or NaN from tween.cur()
18443 // Break the loop if scale is unchanged or perfect, or if we've just had enough.
18444 } while (
18445 scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
18446 );
18447 }
18448
18449 if ( valueParts ) {
18450 initialInUnit = +initialInUnit || +initial || 0;
18451
18452 // Apply relative offset (+=/-=) if specified
18453 adjusted = valueParts[ 1 ] ?
18454 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
18455 +valueParts[ 2 ];
18456 if ( tween ) {
18457 tween.unit = unit;
18458 tween.start = initialInUnit;
18459 tween.end = adjusted;
18460 }
18461 }
18462 return adjusted;
18463 }
18464
18465
18466 var defaultDisplayMap = {};
18467
18468 function getDefaultDisplay( elem ) {
18469 var temp,
18470 doc = elem.ownerDocument,
18471 nodeName = elem.nodeName,
18472 display = defaultDisplayMap[ nodeName ];
18473
18474 if ( display ) {
18475 return display;
18476 }
18477
18478 temp = doc.body.appendChild( doc.createElement( nodeName ) );
18479 display = jQuery.css( temp, "display" );
18480
18481 temp.parentNode.removeChild( temp );
18482
18483 if ( display === "none" ) {
18484 display = "block";
18485 }
18486 defaultDisplayMap[ nodeName ] = display;
18487
18488 return display;
18489 }
18490
18491 function showHide( elements, show ) {
18492 var display, elem,
18493 values = [],
18494 index = 0,
18495 length = elements.length;
18496
18497 // Determine new display value for elements that need to change
18498 for ( ; index < length; index++ ) {
18499 elem = elements[ index ];
18500 if ( !elem.style ) {
18501 continue;
18502 }
18503
18504 display = elem.style.display;
18505 if ( show ) {
18506
18507 // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
18508 // check is required in this first loop unless we have a nonempty display value (either
18509 // inline or about-to-be-restored)
18510 if ( display === "none" ) {
18511 values[ index ] = dataPriv.get( elem, "display" ) || null;
18512 if ( !values[ index ] ) {
18513 elem.style.display = "";
18514 }
18515 }
18516 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
18517 values[ index ] = getDefaultDisplay( elem );
18518 }
18519 } else {
18520 if ( display !== "none" ) {
18521 values[ index ] = "none";
18522
18523 // Remember what we're overwriting
18524 dataPriv.set( elem, "display", display );
18525 }
18526 }
18527 }
18528
18529 // Set the display of the elements in a second loop to avoid constant reflow
18530 for ( index = 0; index < length; index++ ) {
18531 if ( values[ index ] != null ) {
18532 elements[ index ].style.display = values[ index ];
18533 }
18534 }
18535
18536 return elements;
18537 }
18538
18539 jQuery.fn.extend( {
18540 show: function() {
18541 return showHide( this, true );
18542 },
18543 hide: function() {
18544 return showHide( this );
18545 },
18546 toggle: function( state ) {
18547 if ( typeof state === "boolean" ) {
18548 return state ? this.show() : this.hide();
18549 }
18550
18551 return this.each( function() {
18552 if ( isHiddenWithinTree( this ) ) {
18553 jQuery( this ).show();
18554 } else {
18555 jQuery( this ).hide();
18556 }
18557 } );
18558 }
18559 } );
18560 var rcheckableType = ( /^(?:checkbox|radio)$/i );
18561
18562 var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
18563
18564 var rscriptType = ( /^$|\/(?:java|ecma)script/i );
18565
18566
18567
18568 // We have to close these tags to support XHTML (#13200)
18569 var wrapMap = {
18570
18571 // Support: IE <=9 only
18572 option: [ 1, "<select multiple='multiple'>", "</select>" ],
18573
18574 // XHTML parsers do not magically insert elements in the
18575 // same way that tag soup parsers do. So we cannot shorten
18576 // this by omitting <tbody> or other required elements.
18577 thead: [ 1, "<table>", "</table>" ],
18578 col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
18579 tr: [ 2, "<table><tbody>", "</tbody></table>" ],
18580 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
18581
18582 _default: [ 0, "", "" ]
18583 };
18584
18585 // Support: IE <=9 only
18586 wrapMap.optgroup = wrapMap.option;
18587
18588 wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
18589 wrapMap.th = wrapMap.td;
18590
18591
18592 function getAll( context, tag ) {
18593
18594 // Support: IE <=9 - 11 only
18595 // Use typeof to avoid zero-argument method invocation on host objects (#15151)
18596 var ret;
18597
18598 if ( typeof context.getElementsByTagName !== "undefined" ) {
18599 ret = context.getElementsByTagName( tag || "*" );
18600
18601 } else if ( typeof context.querySelectorAll !== "undefined" ) {
18602 ret = context.querySelectorAll( tag || "*" );
18603
18604 } else {
18605 ret = [];
18606 }
18607
18608 if ( tag === undefined || tag && nodeName( context, tag ) ) {
18609 return jQuery.merge( [ context ], ret );
18610 }
18611
18612 return ret;
18613 }
18614
18615
18616 // Mark scripts as having already been evaluated
18617 function setGlobalEval( elems, refElements ) {
18618 var i = 0,
18619 l = elems.length;
18620
18621 for ( ; i < l; i++ ) {
18622 dataPriv.set(
18623 elems[ i ],
18624 "globalEval",
18625 !refElements || dataPriv.get( refElements[ i ], "globalEval" )
18626 );
18627 }
18628 }
18629
18630
18631 var rhtml = /<|&#?\w+;/;
18632
18633 function buildFragment( elems, context, scripts, selection, ignored ) {
18634 var elem, tmp, tag, wrap, contains, j,
18635 fragment = context.createDocumentFragment(),
18636 nodes = [],
18637 i = 0,
18638 l = elems.length;
18639
18640 for ( ; i < l; i++ ) {
18641 elem = elems[ i ];
18642
18643 if ( elem || elem === 0 ) {
18644
18645 // Add nodes directly
18646 if ( jQuery.type( elem ) === "object" ) {
18647
18648 // Support: Android <=4.0 only, PhantomJS 1 only
18649 // push.apply(_, arraylike) throws on ancient WebKit
18650 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
18651
18652 // Convert non-html into a text node
18653 } else if ( !rhtml.test( elem ) ) {
18654 nodes.push( context.createTextNode( elem ) );
18655
18656 // Convert html into DOM nodes
18657 } else {
18658 tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
18659
18660 // Deserialize a standard representation
18661 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
18662 wrap = wrapMap[ tag ] || wrapMap._default;
18663 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
18664
18665 // Descend through wrappers to the right content
18666 j = wrap[ 0 ];
18667 while ( j-- ) {
18668 tmp = tmp.lastChild;
18669 }
18670
18671 // Support: Android <=4.0 only, PhantomJS 1 only
18672 // push.apply(_, arraylike) throws on ancient WebKit
18673 jQuery.merge( nodes, tmp.childNodes );
18674
18675 // Remember the top-level container
18676 tmp = fragment.firstChild;
18677
18678 // Ensure the created nodes are orphaned (#12392)
18679 tmp.textContent = "";
18680 }
18681 }
18682 }
18683
18684 // Remove wrapper from fragment
18685 fragment.textContent = "";
18686
18687 i = 0;
18688 while ( ( elem = nodes[ i++ ] ) ) {
18689
18690 // Skip elements already in the context collection (trac-4087)
18691 if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
18692 if ( ignored ) {
18693 ignored.push( elem );
18694 }
18695 continue;
18696 }
18697
18698 contains = jQuery.contains( elem.ownerDocument, elem );
18699
18700 // Append to fragment
18701 tmp = getAll( fragment.appendChild( elem ), "script" );
18702
18703 // Preserve script evaluation history
18704 if ( contains ) {
18705 setGlobalEval( tmp );
18706 }
18707
18708 // Capture executables
18709 if ( scripts ) {
18710 j = 0;
18711 while ( ( elem = tmp[ j++ ] ) ) {
18712 if ( rscriptType.test( elem.type || "" ) ) {
18713 scripts.push( elem );
18714 }
18715 }
18716 }
18717 }
18718
18719 return fragment;
18720 }
18721
18722
18723 ( function() {
18724 var fragment = document.createDocumentFragment(),
18725 div = fragment.appendChild( document.createElement( "div" ) ),
18726 input = document.createElement( "input" );
18727
18728 // Support: Android 4.0 - 4.3 only
18729 // Check state lost if the name is set (#11217)
18730 // Support: Windows Web Apps (WWA)
18731 // `name` and `type` must use .setAttribute for WWA (#14901)
18732 input.setAttribute( "type", "radio" );
18733 input.setAttribute( "checked", "checked" );
18734 input.setAttribute( "name", "t" );
18735
18736 div.appendChild( input );
18737
18738 // Support: Android <=4.1 only
18739 // Older WebKit doesn't clone checked state correctly in fragments
18740 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
18741
18742 // Support: IE <=11 only
18743 // Make sure textarea (and checkbox) defaultValue is properly cloned
18744 div.innerHTML = "<textarea>x</textarea>";
18745 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
18746 } )();
18747 var documentElement = document.documentElement;
18748
18749
18750
18751 var
18752 rkeyEvent = /^key/,
18753 rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
18754 rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
18755
18756 function returnTrue() {
18757 return true;
18758 }
18759
18760 function returnFalse() {
18761 return false;
18762 }
18763
18764 // Support: IE <=9 only
18765 // See #13393 for more info
18766 function safeActiveElement() {
18767 try {
18768 return document.activeElement;
18769 } catch ( err ) { }
18770 }
18771
18772 function on( elem, types, selector, data, fn, one ) {
18773 var origFn, type;
18774
18775 // Types can be a map of types/handlers
18776 if ( typeof types === "object" ) {
18777
18778 // ( types-Object, selector, data )
18779 if ( typeof selector !== "string" ) {
18780
18781 // ( types-Object, data )
18782 data = data || selector;
18783 selector = undefined;
18784 }
18785 for ( type in types ) {
18786 on( elem, type, selector, data, types[ type ], one );
18787 }
18788 return elem;
18789 }
18790
18791 if ( data == null && fn == null ) {
18792
18793 // ( types, fn )
18794 fn = selector;
18795 data = selector = undefined;
18796 } else if ( fn == null ) {
18797 if ( typeof selector === "string" ) {
18798
18799 // ( types, selector, fn )
18800 fn = data;
18801 data = undefined;
18802 } else {
18803
18804 // ( types, data, fn )
18805 fn = data;
18806 data = selector;
18807 selector = undefined;
18808 }
18809 }
18810 if ( fn === false ) {
18811 fn = returnFalse;
18812 } else if ( !fn ) {
18813 return elem;
18814 }
18815
18816 if ( one === 1 ) {
18817 origFn = fn;
18818 fn = function( event ) {
18819
18820 // Can use an empty set, since event contains the info
18821 jQuery().off( event );
18822 return origFn.apply( this, arguments );
18823 };
18824
18825 // Use same guid so caller can remove using origFn
18826 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
18827 }
18828 return elem.each( function() {
18829 jQuery.event.add( this, types, fn, data, selector );
18830 } );
18831 }
18832
18833 /*
18834 * Helper functions for managing events -- not part of the public interface.
18835 * Props to Dean Edwards' addEvent library for many of the ideas.
18836 */
18837 jQuery.event = {
18838
18839 global: {},
18840
18841 add: function( elem, types, handler, data, selector ) {
18842
18843 var handleObjIn, eventHandle, tmp,
18844 events, t, handleObj,
18845 special, handlers, type, namespaces, origType,
18846 elemData = dataPriv.get( elem );
18847
18848 // Don't attach events to noData or text/comment nodes (but allow plain objects)
18849 if ( !elemData ) {
18850 return;
18851 }
18852
18853 // Caller can pass in an object of custom data in lieu of the handler
18854 if ( handler.handler ) {
18855 handleObjIn = handler;
18856 handler = handleObjIn.handler;
18857 selector = handleObjIn.selector;
18858 }
18859
18860 // Ensure that invalid selectors throw exceptions at attach time
18861 // Evaluate against documentElement in case elem is a non-element node (e.g., document)
18862 if ( selector ) {
18863 jQuery.find.matchesSelector( documentElement, selector );
18864 }
18865
18866 // Make sure that the handler has a unique ID, used to find/remove it later
18867 if ( !handler.guid ) {
18868 handler.guid = jQuery.guid++;
18869 }
18870
18871 // Init the element's event structure and main handler, if this is the first
18872 if ( !( events = elemData.events ) ) {
18873 events = elemData.events = {};
18874 }
18875 if ( !( eventHandle = elemData.handle ) ) {
18876 eventHandle = elemData.handle = function( e ) {
18877
18878 // Discard the second event of a jQuery.event.trigger() and
18879 // when an event is called after a page has unloaded
18880 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
18881 jQuery.event.dispatch.apply( elem, arguments ) : undefined;
18882 };
18883 }
18884
18885 // Handle multiple events separated by a space
18886 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
18887 t = types.length;
18888 while ( t-- ) {
18889 tmp = rtypenamespace.exec( types[ t ] ) || [];
18890 type = origType = tmp[ 1 ];
18891 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
18892
18893 // There *must* be a type, no attaching namespace-only handlers
18894 if ( !type ) {
18895 continue;
18896 }
18897
18898 // If event changes its type, use the special event handlers for the changed type
18899 special = jQuery.event.special[ type ] || {};
18900
18901 // If selector defined, determine special event api type, otherwise given type
18902 type = ( selector ? special.delegateType : special.bindType ) || type;
18903
18904 // Update special based on newly reset type
18905 special = jQuery.event.special[ type ] || {};
18906
18907 // handleObj is passed to all event handlers
18908 handleObj = jQuery.extend( {
18909 type: type,
18910 origType: origType,
18911 data: data,
18912 handler: handler,
18913 guid: handler.guid,
18914 selector: selector,
18915 needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
18916 namespace: namespaces.join( "." )
18917 }, handleObjIn );
18918
18919 // Init the event handler queue if we're the first
18920 if ( !( handlers = events[ type ] ) ) {
18921 handlers = events[ type ] = [];
18922 handlers.delegateCount = 0;
18923
18924 // Only use addEventListener if the special events handler returns false
18925 if ( !special.setup ||
18926 special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
18927
18928 if ( elem.addEventListener ) {
18929 elem.addEventListener( type, eventHandle );
18930 }
18931 }
18932 }
18933
18934 if ( special.add ) {
18935 special.add.call( elem, handleObj );
18936
18937 if ( !handleObj.handler.guid ) {
18938 handleObj.handler.guid = handler.guid;
18939 }
18940 }
18941
18942 // Add to the element's handler list, delegates in front
18943 if ( selector ) {
18944 handlers.splice( handlers.delegateCount++, 0, handleObj );
18945 } else {
18946 handlers.push( handleObj );
18947 }
18948
18949 // Keep track of which events have ever been used, for event optimization
18950 jQuery.event.global[ type ] = true;
18951 }
18952
18953 },
18954
18955 // Detach an event or set of events from an element
18956 remove: function( elem, types, handler, selector, mappedTypes ) {
18957
18958 var j, origCount, tmp,
18959 events, t, handleObj,
18960 special, handlers, type, namespaces, origType,
18961 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
18962
18963 if ( !elemData || !( events = elemData.events ) ) {
18964 return;
18965 }
18966
18967 // Once for each type.namespace in types; type may be omitted
18968 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
18969 t = types.length;
18970 while ( t-- ) {
18971 tmp = rtypenamespace.exec( types[ t ] ) || [];
18972 type = origType = tmp[ 1 ];
18973 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
18974
18975 // Unbind all events (on this namespace, if provided) for the element
18976 if ( !type ) {
18977 for ( type in events ) {
18978 jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
18979 }
18980 continue;
18981 }
18982
18983 special = jQuery.event.special[ type ] || {};
18984 type = ( selector ? special.delegateType : special.bindType ) || type;
18985 handlers = events[ type ] || [];
18986 tmp = tmp[ 2 ] &&
18987 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
18988
18989 // Remove matching events
18990 origCount = j = handlers.length;
18991 while ( j-- ) {
18992 handleObj = handlers[ j ];
18993
18994 if ( ( mappedTypes || origType === handleObj.origType ) &&
18995 ( !handler || handler.guid === handleObj.guid ) &&
18996 ( !tmp || tmp.test( handleObj.namespace ) ) &&
18997 ( !selector || selector === handleObj.selector ||
18998 selector === "**" && handleObj.selector ) ) {
18999 handlers.splice( j, 1 );
19000
19001 if ( handleObj.selector ) {
19002 handlers.delegateCount--;
19003 }
19004 if ( special.remove ) {
19005 special.remove.call( elem, handleObj );
19006 }
19007 }
19008 }
19009
19010 // Remove generic event handler if we removed something and no more handlers exist
19011 // (avoids potential for endless recursion during removal of special event handlers)
19012 if ( origCount && !handlers.length ) {
19013 if ( !special.teardown ||
19014 special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
19015
19016 jQuery.removeEvent( elem, type, elemData.handle );
19017 }
19018
19019 delete events[ type ];
19020 }
19021 }
19022
19023 // Remove data and the expando if it's no longer used
19024 if ( jQuery.isEmptyObject( events ) ) {
19025 dataPriv.remove( elem, "handle events" );
19026 }
19027 },
19028
19029 dispatch: function( nativeEvent ) {
19030
19031 // Make a writable jQuery.Event from the native event object
19032 var event = jQuery.event.fix( nativeEvent );
19033
19034 var i, j, ret, matched, handleObj, handlerQueue,
19035 args = new Array( arguments.length ),
19036 handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
19037 special = jQuery.event.special[ event.type ] || {};
19038
19039 // Use the fix-ed jQuery.Event rather than the (read-only) native event
19040 args[ 0 ] = event;
19041
19042 for ( i = 1; i < arguments.length; i++ ) {
19043 args[ i ] = arguments[ i ];
19044 }
19045
19046 event.delegateTarget = this;
19047
19048 // Call the preDispatch hook for the mapped type, and let it bail if desired
19049 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
19050 return;
19051 }
19052
19053 // Determine handlers
19054 handlerQueue = jQuery.event.handlers.call( this, event, handlers );
19055
19056 // Run delegates first; they may want to stop propagation beneath us
19057 i = 0;
19058 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
19059 event.currentTarget = matched.elem;
19060
19061 j = 0;
19062 while ( ( handleObj = matched.handlers[ j++ ] ) &&
19063 !event.isImmediatePropagationStopped() ) {
19064
19065 // Triggered event must either 1) have no namespace, or 2) have namespace(s)
19066 // a subset or equal to those in the bound event (both can have no namespace).
19067 if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
19068
19069 event.handleObj = handleObj;
19070 event.data = handleObj.data;
19071
19072 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
19073 handleObj.handler ).apply( matched.elem, args );
19074
19075 if ( ret !== undefined ) {
19076 if ( ( event.result = ret ) === false ) {
19077 event.preventDefault();
19078 event.stopPropagation();
19079 }
19080 }
19081 }
19082 }
19083 }
19084
19085 // Call the postDispatch hook for the mapped type
19086 if ( special.postDispatch ) {
19087 special.postDispatch.call( this, event );
19088 }
19089
19090 return event.result;
19091 },
19092
19093 handlers: function( event, handlers ) {
19094 var i, handleObj, sel, matchedHandlers, matchedSelectors,
19095 handlerQueue = [],
19096 delegateCount = handlers.delegateCount,
19097 cur = event.target;
19098
19099 // Find delegate handlers
19100 if ( delegateCount &&
19101
19102 // Support: IE <=9
19103 // Black-hole SVG <use> instance trees (trac-13180)
19104 cur.nodeType &&
19105
19106 // Support: Firefox <=42
19107 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
19108 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
19109 // Support: IE 11 only
19110 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
19111 !( event.type === "click" && event.button >= 1 ) ) {
19112
19113 for ( ; cur !== this; cur = cur.parentNode || this ) {
19114
19115 // Don't check non-elements (#13208)
19116 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
19117 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
19118 matchedHandlers = [];
19119 matchedSelectors = {};
19120 for ( i = 0; i < delegateCount; i++ ) {
19121 handleObj = handlers[ i ];
19122
19123 // Don't conflict with Object.prototype properties (#13203)
19124 sel = handleObj.selector + " ";
19125
19126 if ( matchedSelectors[ sel ] === undefined ) {
19127 matchedSelectors[ sel ] = handleObj.needsContext ?
19128 jQuery( sel, this ).index( cur ) > -1 :
19129 jQuery.find( sel, this, null, [ cur ] ).length;
19130 }
19131 if ( matchedSelectors[ sel ] ) {
19132 matchedHandlers.push( handleObj );
19133 }
19134 }
19135 if ( matchedHandlers.length ) {
19136 handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
19137 }
19138 }
19139 }
19140 }
19141
19142 // Add the remaining (directly-bound) handlers
19143 cur = this;
19144 if ( delegateCount < handlers.length ) {
19145 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
19146 }
19147
19148 return handlerQueue;
19149 },
19150
19151 addProp: function( name, hook ) {
19152 Object.defineProperty( jQuery.Event.prototype, name, {
19153 enumerable: true,
19154 configurable: true,
19155
19156 get: jQuery.isFunction( hook ) ?
19157 function() {
19158 if ( this.originalEvent ) {
19159 return hook( this.originalEvent );
19160 }
19161 } :
19162 function() {
19163 if ( this.originalEvent ) {
19164 return this.originalEvent[ name ];
19165 }
19166 },
19167
19168 set: function( value ) {
19169 Object.defineProperty( this, name, {
19170 enumerable: true,
19171 configurable: true,
19172 writable: true,
19173 value: value
19174 } );
19175 }
19176 } );
19177 },
19178
19179 fix: function( originalEvent ) {
19180 return originalEvent[ jQuery.expando ] ?
19181 originalEvent :
19182 new jQuery.Event( originalEvent );
19183 },
19184
19185 special: {
19186 load: {
19187
19188 // Prevent triggered image.load events from bubbling to window.load
19189 noBubble: true
19190 },
19191 focus: {
19192
19193 // Fire native event if possible so blur/focus sequence is correct
19194 trigger: function() {
19195 if ( this !== safeActiveElement() && this.focus ) {
19196 this.focus();
19197 return false;
19198 }
19199 },
19200 delegateType: "focusin"
19201 },
19202 blur: {
19203 trigger: function() {
19204 if ( this === safeActiveElement() && this.blur ) {
19205 this.blur();
19206 return false;
19207 }
19208 },
19209 delegateType: "focusout"
19210 },
19211 click: {
19212
19213 // For checkbox, fire native event so checked state will be right
19214 trigger: function() {
19215 if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
19216 this.click();
19217 return false;
19218 }
19219 },
19220
19221 // For cross-browser consistency, don't fire native .click() on links
19222 _default: function( event ) {
19223 return nodeName( event.target, "a" );
19224 }
19225 },
19226
19227 beforeunload: {
19228 postDispatch: function( event ) {
19229
19230 // Support: Firefox 20+
19231 // Firefox doesn't alert if the returnValue field is not set.
19232 if ( event.result !== undefined && event.originalEvent ) {
19233 event.originalEvent.returnValue = event.result;
19234 }
19235 }
19236 }
19237 }
19238 };
19239
19240 jQuery.removeEvent = function( elem, type, handle ) {
19241
19242 // This "if" is needed for plain objects
19243 if ( elem.removeEventListener ) {
19244 elem.removeEventListener( type, handle );
19245 }
19246 };
19247
19248 jQuery.Event = function( src, props ) {
19249
19250 // Allow instantiation without the 'new' keyword
19251 if ( !( this instanceof jQuery.Event ) ) {
19252 return new jQuery.Event( src, props );
19253 }
19254
19255 // Event object
19256 if ( src && src.type ) {
19257 this.originalEvent = src;
19258 this.type = src.type;
19259
19260 // Events bubbling up the document may have been marked as prevented
19261 // by a handler lower down the tree; reflect the correct value.
19262 this.isDefaultPrevented = src.defaultPrevented ||
19263 src.defaultPrevented === undefined &&
19264
19265 // Support: Android <=2.3 only
19266 src.returnValue === false ?
19267 returnTrue :
19268 returnFalse;
19269
19270 // Create target properties
19271 // Support: Safari <=6 - 7 only
19272 // Target should not be a text node (#504, #13143)
19273 this.target = ( src.target && src.target.nodeType === 3 ) ?
19274 src.target.parentNode :
19275 src.target;
19276
19277 this.currentTarget = src.currentTarget;
19278 this.relatedTarget = src.relatedTarget;
19279
19280 // Event type
19281 } else {
19282 this.type = src;
19283 }
19284
19285 // Put explicitly provided properties onto the event object
19286 if ( props ) {
19287 jQuery.extend( this, props );
19288 }
19289
19290 // Create a timestamp if incoming event doesn't have one
19291 this.timeStamp = src && src.timeStamp || jQuery.now();
19292
19293 // Mark it as fixed
19294 this[ jQuery.expando ] = true;
19295 };
19296
19297 // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
19298 // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
19299 jQuery.Event.prototype = {
19300 constructor: jQuery.Event,
19301 isDefaultPrevented: returnFalse,
19302 isPropagationStopped: returnFalse,
19303 isImmediatePropagationStopped: returnFalse,
19304 isSimulated: false,
19305
19306 preventDefault: function() {
19307 var e = this.originalEvent;
19308
19309 this.isDefaultPrevented = returnTrue;
19310
19311 if ( e && !this.isSimulated ) {
19312 e.preventDefault();
19313 }
19314 },
19315 stopPropagation: function() {
19316 var e = this.originalEvent;
19317
19318 this.isPropagationStopped = returnTrue;
19319
19320 if ( e && !this.isSimulated ) {
19321 e.stopPropagation();
19322 }
19323 },
19324 stopImmediatePropagation: function() {
19325 var e = this.originalEvent;
19326
19327 this.isImmediatePropagationStopped = returnTrue;
19328
19329 if ( e && !this.isSimulated ) {
19330 e.stopImmediatePropagation();
19331 }
19332
19333 this.stopPropagation();
19334 }
19335 };
19336
19337 // Includes all common event props including KeyEvent and MouseEvent specific props
19338 jQuery.each( {
19339 altKey: true,
19340 bubbles: true,
19341 cancelable: true,
19342 changedTouches: true,
19343 ctrlKey: true,
19344 detail: true,
19345 eventPhase: true,
19346 metaKey: true,
19347 pageX: true,
19348 pageY: true,
19349 shiftKey: true,
19350 view: true,
19351 "char": true,
19352 charCode: true,
19353 key: true,
19354 keyCode: true,
19355 button: true,
19356 buttons: true,
19357 clientX: true,
19358 clientY: true,
19359 offsetX: true,
19360 offsetY: true,
19361 pointerId: true,
19362 pointerType: true,
19363 screenX: true,
19364 screenY: true,
19365 targetTouches: true,
19366 toElement: true,
19367 touches: true,
19368
19369 which: function( event ) {
19370 var button = event.button;
19371
19372 // Add which for key events
19373 if ( event.which == null && rkeyEvent.test( event.type ) ) {
19374 return event.charCode != null ? event.charCode : event.keyCode;
19375 }
19376
19377 // Add which for click: 1 === left; 2 === middle; 3 === right
19378 if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
19379 if ( button & 1 ) {
19380 return 1;
19381 }
19382
19383 if ( button & 2 ) {
19384 return 3;
19385 }
19386
19387 if ( button & 4 ) {
19388 return 2;
19389 }
19390
19391 return 0;
19392 }
19393
19394 return event.which;
19395 }
19396 }, jQuery.event.addProp );
19397
19398 // Create mouseenter/leave events using mouseover/out and event-time checks
19399 // so that event delegation works in jQuery.
19400 // Do the same for pointerenter/pointerleave and pointerover/pointerout
19401 //
19402 // Support: Safari 7 only
19403 // Safari sends mouseenter too often; see:
19404 // https://bugs.chromium.org/p/chromium/issues/detail?id=470258
19405 // for the description of the bug (it existed in older Chrome versions as well).
19406 jQuery.each( {
19407 mouseenter: "mouseover",
19408 mouseleave: "mouseout",
19409 pointerenter: "pointerover",
19410 pointerleave: "pointerout"
19411 }, function( orig, fix ) {
19412 jQuery.event.special[ orig ] = {
19413 delegateType: fix,
19414 bindType: fix,
19415
19416 handle: function( event ) {
19417 var ret,
19418 target = this,
19419 related = event.relatedTarget,
19420 handleObj = event.handleObj;
19421
19422 // For mouseenter/leave call the handler if related is outside the target.
19423 // NB: No relatedTarget if the mouse left/entered the browser window
19424 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
19425 event.type = handleObj.origType;
19426 ret = handleObj.handler.apply( this, arguments );
19427 event.type = fix;
19428 }
19429 return ret;
19430 }
19431 };
19432 } );
19433
19434 jQuery.fn.extend( {
19435
19436 on: function( types, selector, data, fn ) {
19437 return on( this, types, selector, data, fn );
19438 },
19439 one: function( types, selector, data, fn ) {
19440 return on( this, types, selector, data, fn, 1 );
19441 },
19442 off: function( types, selector, fn ) {
19443 var handleObj, type;
19444 if ( types && types.preventDefault && types.handleObj ) {
19445
19446 // ( event ) dispatched jQuery.Event
19447 handleObj = types.handleObj;
19448 jQuery( types.delegateTarget ).off(
19449 handleObj.namespace ?
19450 handleObj.origType + "." + handleObj.namespace :
19451 handleObj.origType,
19452 handleObj.selector,
19453 handleObj.handler
19454 );
19455 return this;
19456 }
19457 if ( typeof types === "object" ) {
19458
19459 // ( types-object [, selector] )
19460 for ( type in types ) {
19461 this.off( type, selector, types[ type ] );
19462 }
19463 return this;
19464 }
19465 if ( selector === false || typeof selector === "function" ) {
19466
19467 // ( types [, fn] )
19468 fn = selector;
19469 selector = undefined;
19470 }
19471 if ( fn === false ) {
19472 fn = returnFalse;
19473 }
19474 return this.each( function() {
19475 jQuery.event.remove( this, types, fn, selector );
19476 } );
19477 }
19478 } );
19479
19480
19481 var
19482
19483 /* eslint-disable max-len */
19484
19485 // See https://github.com/eslint/eslint/issues/3229
19486 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
19487
19488 /* eslint-enable */
19489
19490 // Support: IE <=10 - 11, Edge 12 - 13
19491 // In IE/Edge using regex groups here causes severe slowdowns.
19492 // See https://connect.microsoft.com/IE/feedback/details/1736512/
19493 rnoInnerhtml = /<script|<style|<link/i,
19494
19495 // checked="checked" or checked
19496 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
19497 rscriptTypeMasked = /^true\/(.*)/,
19498 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
19499
19500 // Prefer a tbody over its parent table for containing new rows
19501 function manipulationTarget( elem, content ) {
19502 if ( nodeName( elem, "table" ) &&
19503 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
19504
19505 return jQuery( ">tbody", elem )[ 0 ] || elem;
19506 }
19507
19508 return elem;
19509 }
19510
19511 // Replace/restore the type attribute of script elements for safe DOM manipulation
19512 function disableScript( elem ) {
19513 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
19514 return elem;
19515 }
19516 function restoreScript( elem ) {
19517 var match = rscriptTypeMasked.exec( elem.type );
19518
19519 if ( match ) {
19520 elem.type = match[ 1 ];
19521 } else {
19522 elem.removeAttribute( "type" );
19523 }
19524
19525 return elem;
19526 }
19527
19528 function cloneCopyEvent( src, dest ) {
19529 var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
19530
19531 if ( dest.nodeType !== 1 ) {
19532 return;
19533 }
19534
19535 // 1. Copy private data: events, handlers, etc.
19536 if ( dataPriv.hasData( src ) ) {
19537 pdataOld = dataPriv.access( src );
19538 pdataCur = dataPriv.set( dest, pdataOld );
19539 events = pdataOld.events;
19540
19541 if ( events ) {
19542 delete pdataCur.handle;
19543 pdataCur.events = {};
19544
19545 for ( type in events ) {
19546 for ( i = 0, l = events[ type ].length; i < l; i++ ) {
19547 jQuery.event.add( dest, type, events[ type ][ i ] );
19548 }
19549 }
19550 }
19551 }
19552
19553 // 2. Copy user data
19554 if ( dataUser.hasData( src ) ) {
19555 udataOld = dataUser.access( src );
19556 udataCur = jQuery.extend( {}, udataOld );
19557
19558 dataUser.set( dest, udataCur );
19559 }
19560 }
19561
19562 // Fix IE bugs, see support tests
19563 function fixInput( src, dest ) {
19564 var nodeName = dest.nodeName.toLowerCase();
19565
19566 // Fails to persist the checked state of a cloned checkbox or radio button.
19567 if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
19568 dest.checked = src.checked;
19569
19570 // Fails to return the selected option to the default selected state when cloning options
19571 } else if ( nodeName === "input" || nodeName === "textarea" ) {
19572 dest.defaultValue = src.defaultValue;
19573 }
19574 }
19575
19576 function domManip( collection, args, callback, ignored ) {
19577
19578 // Flatten any nested arrays
19579 args = concat.apply( [], args );
19580
19581 var fragment, first, scripts, hasScripts, node, doc,
19582 i = 0,
19583 l = collection.length,
19584 iNoClone = l - 1,
19585 value = args[ 0 ],
19586 isFunction = jQuery.isFunction( value );
19587
19588 // We can't cloneNode fragments that contain checked, in WebKit
19589 if ( isFunction ||
19590 ( l > 1 && typeof value === "string" &&
19591 !support.checkClone && rchecked.test( value ) ) ) {
19592 return collection.each( function( index ) {
19593 var self = collection.eq( index );
19594 if ( isFunction ) {
19595 args[ 0 ] = value.call( this, index, self.html() );
19596 }
19597 domManip( self, args, callback, ignored );
19598 } );
19599 }
19600
19601 if ( l ) {
19602 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
19603 first = fragment.firstChild;
19604
19605 if ( fragment.childNodes.length === 1 ) {
19606 fragment = first;
19607 }
19608
19609 // Require either new content or an interest in ignored elements to invoke the callback
19610 if ( first || ignored ) {
19611 scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
19612 hasScripts = scripts.length;
19613
19614 // Use the original fragment for the last item
19615 // instead of the first because it can end up
19616 // being emptied incorrectly in certain situations (#8070).
19617 for ( ; i < l; i++ ) {
19618 node = fragment;
19619
19620 if ( i !== iNoClone ) {
19621 node = jQuery.clone( node, true, true );
19622
19623 // Keep references to cloned scripts for later restoration
19624 if ( hasScripts ) {
19625
19626 // Support: Android <=4.0 only, PhantomJS 1 only
19627 // push.apply(_, arraylike) throws on ancient WebKit
19628 jQuery.merge( scripts, getAll( node, "script" ) );
19629 }
19630 }
19631
19632 callback.call( collection[ i ], node, i );
19633 }
19634
19635 if ( hasScripts ) {
19636 doc = scripts[ scripts.length - 1 ].ownerDocument;
19637
19638 // Reenable scripts
19639 jQuery.map( scripts, restoreScript );
19640
19641 // Evaluate executable scripts on first document insertion
19642 for ( i = 0; i < hasScripts; i++ ) {
19643 node = scripts[ i ];
19644 if ( rscriptType.test( node.type || "" ) &&
19645 !dataPriv.access( node, "globalEval" ) &&
19646 jQuery.contains( doc, node ) ) {
19647
19648 if ( node.src ) {
19649
19650 // Optional AJAX dependency, but won't run scripts if not present
19651 if ( jQuery._evalUrl ) {
19652 jQuery._evalUrl( node.src );
19653 }
19654 } else {
19655 DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
19656 }
19657 }
19658 }
19659 }
19660 }
19661 }
19662
19663 return collection;
19664 }
19665
19666 function remove( elem, selector, keepData ) {
19667 var node,
19668 nodes = selector ? jQuery.filter( selector, elem ) : elem,
19669 i = 0;
19670
19671 for ( ; ( node = nodes[ i ] ) != null; i++ ) {
19672 if ( !keepData && node.nodeType === 1 ) {
19673 jQuery.cleanData( getAll( node ) );
19674 }
19675
19676 if ( node.parentNode ) {
19677 if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
19678 setGlobalEval( getAll( node, "script" ) );
19679 }
19680 node.parentNode.removeChild( node );
19681 }
19682 }
19683
19684 return elem;
19685 }
19686
19687 jQuery.extend( {
19688 htmlPrefilter: function( html ) {
19689 return html.replace( rxhtmlTag, "<$1></$2>" );
19690 },
19691
19692 clone: function( elem, dataAndEvents, deepDataAndEvents ) {
19693 var i, l, srcElements, destElements,
19694 clone = elem.cloneNode( true ),
19695 inPage = jQuery.contains( elem.ownerDocument, elem );
19696
19697 // Fix IE cloning issues
19698 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
19699 !jQuery.isXMLDoc( elem ) ) {
19700
19701 // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
19702 destElements = getAll( clone );
19703 srcElements = getAll( elem );
19704
19705 for ( i = 0, l = srcElements.length; i < l; i++ ) {
19706 fixInput( srcElements[ i ], destElements[ i ] );
19707 }
19708 }
19709
19710 // Copy the events from the original to the clone
19711 if ( dataAndEvents ) {
19712 if ( deepDataAndEvents ) {
19713 srcElements = srcElements || getAll( elem );
19714 destElements = destElements || getAll( clone );
19715
19716 for ( i = 0, l = srcElements.length; i < l; i++ ) {
19717 cloneCopyEvent( srcElements[ i ], destElements[ i ] );
19718 }
19719 } else {
19720 cloneCopyEvent( elem, clone );
19721 }
19722 }
19723
19724 // Preserve script evaluation history
19725 destElements = getAll( clone, "script" );
19726 if ( destElements.length > 0 ) {
19727 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
19728 }
19729
19730 // Return the cloned set
19731 return clone;
19732 },
19733
19734 cleanData: function( elems ) {
19735 var data, elem, type,
19736 special = jQuery.event.special,
19737 i = 0;
19738
19739 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
19740 if ( acceptData( elem ) ) {
19741 if ( ( data = elem[ dataPriv.expando ] ) ) {
19742 if ( data.events ) {
19743 for ( type in data.events ) {
19744 if ( special[ type ] ) {
19745 jQuery.event.remove( elem, type );
19746
19747 // This is a shortcut to avoid jQuery.event.remove's overhead
19748 } else {
19749 jQuery.removeEvent( elem, type, data.handle );
19750 }
19751 }
19752 }
19753
19754 // Support: Chrome <=35 - 45+
19755 // Assign undefined instead of using delete, see Data#remove
19756 elem[ dataPriv.expando ] = undefined;
19757 }
19758 if ( elem[ dataUser.expando ] ) {
19759
19760 // Support: Chrome <=35 - 45+
19761 // Assign undefined instead of using delete, see Data#remove
19762 elem[ dataUser.expando ] = undefined;
19763 }
19764 }
19765 }
19766 }
19767 } );
19768
19769 jQuery.fn.extend( {
19770 detach: function( selector ) {
19771 return remove( this, selector, true );
19772 },
19773
19774 remove: function( selector ) {
19775 return remove( this, selector );
19776 },
19777
19778 text: function( value ) {
19779 return access( this, function( value ) {
19780 return value === undefined ?
19781 jQuery.text( this ) :
19782 this.empty().each( function() {
19783 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19784 this.textContent = value;
19785 }
19786 } );
19787 }, null, value, arguments.length );
19788 },
19789
19790 append: function() {
19791 return domManip( this, arguments, function( elem ) {
19792 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19793 var target = manipulationTarget( this, elem );
19794 target.appendChild( elem );
19795 }
19796 } );
19797 },
19798
19799 prepend: function() {
19800 return domManip( this, arguments, function( elem ) {
19801 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19802 var target = manipulationTarget( this, elem );
19803 target.insertBefore( elem, target.firstChild );
19804 }
19805 } );
19806 },
19807
19808 before: function() {
19809 return domManip( this, arguments, function( elem ) {
19810 if ( this.parentNode ) {
19811 this.parentNode.insertBefore( elem, this );
19812 }
19813 } );
19814 },
19815
19816 after: function() {
19817 return domManip( this, arguments, function( elem ) {
19818 if ( this.parentNode ) {
19819 this.parentNode.insertBefore( elem, this.nextSibling );
19820 }
19821 } );
19822 },
19823
19824 empty: function() {
19825 var elem,
19826 i = 0;
19827
19828 for ( ; ( elem = this[ i ] ) != null; i++ ) {
19829 if ( elem.nodeType === 1 ) {
19830
19831 // Prevent memory leaks
19832 jQuery.cleanData( getAll( elem, false ) );
19833
19834 // Remove any remaining nodes
19835 elem.textContent = "";
19836 }
19837 }
19838
19839 return this;
19840 },
19841
19842 clone: function( dataAndEvents, deepDataAndEvents ) {
19843 dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
19844 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
19845
19846 return this.map( function() {
19847 return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
19848 } );
19849 },
19850
19851 html: function( value ) {
19852 return access( this, function( value ) {
19853 var elem = this[ 0 ] || {},
19854 i = 0,
19855 l = this.length;
19856
19857 if ( value === undefined && elem.nodeType === 1 ) {
19858 return elem.innerHTML;
19859 }
19860
19861 // See if we can take a shortcut and just use innerHTML
19862 if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
19863 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
19864
19865 value = jQuery.htmlPrefilter( value );
19866
19867 try {
19868 for ( ; i < l; i++ ) {
19869 elem = this[ i ] || {};
19870
19871 // Remove element nodes and prevent memory leaks
19872 if ( elem.nodeType === 1 ) {
19873 jQuery.cleanData( getAll( elem, false ) );
19874 elem.innerHTML = value;
19875 }
19876 }
19877
19878 elem = 0;
19879
19880 // If using innerHTML throws an exception, use the fallback method
19881 } catch ( e ) {}
19882 }
19883
19884 if ( elem ) {
19885 this.empty().append( value );
19886 }
19887 }, null, value, arguments.length );
19888 },
19889
19890 replaceWith: function() {
19891 var ignored = [];
19892
19893 // Make the changes, replacing each non-ignored context element with the new content
19894 return domManip( this, arguments, function( elem ) {
19895 var parent = this.parentNode;
19896
19897 if ( jQuery.inArray( this, ignored ) < 0 ) {
19898 jQuery.cleanData( getAll( this ) );
19899 if ( parent ) {
19900 parent.replaceChild( elem, this );
19901 }
19902 }
19903
19904 // Force callback invocation
19905 }, ignored );
19906 }
19907 } );
19908
19909 jQuery.each( {
19910 appendTo: "append",
19911 prependTo: "prepend",
19912 insertBefore: "before",
19913 insertAfter: "after",
19914 replaceAll: "replaceWith"
19915 }, function( name, original ) {
19916 jQuery.fn[ name ] = function( selector ) {
19917 var elems,
19918 ret = [],
19919 insert = jQuery( selector ),
19920 last = insert.length - 1,
19921 i = 0;
19922
19923 for ( ; i <= last; i++ ) {
19924 elems = i === last ? this : this.clone( true );
19925 jQuery( insert[ i ] )[ original ]( elems );
19926
19927 // Support: Android <=4.0 only, PhantomJS 1 only
19928 // .get() because push.apply(_, arraylike) throws on ancient WebKit
19929 push.apply( ret, elems.get() );
19930 }
19931
19932 return this.pushStack( ret );
19933 };
19934 } );
19935 var rmargin = ( /^margin/ );
19936
19937 var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
19938
19939 var getStyles = function( elem ) {
19940
19941 // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
19942 // IE throws on elements created in popups
19943 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
19944 var view = elem.ownerDocument.defaultView;
19945
19946 if ( !view || !view.opener ) {
19947 view = window;
19948 }
19949
19950 return view.getComputedStyle( elem );
19951 };
19952
19953
19954
19955 ( function() {
19956
19957 // Executing both pixelPosition & boxSizingReliable tests require only one layout
19958 // so they're executed at the same time to save the second computation.
19959 function computeStyleTests() {
19960
19961 // This is a singleton, we need to execute it only once
19962 if ( !div ) {
19963 return;
19964 }
19965
19966 div.style.cssText =
19967 "box-sizing:border-box;" +
19968 "position:relative;display:block;" +
19969 "margin:auto;border:1px;padding:1px;" +
19970 "top:1%;width:50%";
19971 div.innerHTML = "";
19972 documentElement.appendChild( container );
19973
19974 var divStyle = window.getComputedStyle( div );
19975 pixelPositionVal = divStyle.top !== "1%";
19976
19977 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
19978 reliableMarginLeftVal = divStyle.marginLeft === "2px";
19979 boxSizingReliableVal = divStyle.width === "4px";
19980
19981 // Support: Android 4.0 - 4.3 only
19982 // Some styles come back with percentage values, even though they shouldn't
19983 div.style.marginRight = "50%";
19984 pixelMarginRightVal = divStyle.marginRight === "4px";
19985
19986 documentElement.removeChild( container );
19987
19988 // Nullify the div so it wouldn't be stored in the memory and
19989 // it will also be a sign that checks already performed
19990 div = null;
19991 }
19992
19993 var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
19994 container = document.createElement( "div" ),
19995 div = document.createElement( "div" );
19996
19997 // Finish early in limited (non-browser) environments
19998 if ( !div.style ) {
19999 return;
20000 }
20001
20002 // Support: IE <=9 - 11 only
20003 // Style of cloned element affects source element cloned (#8908)
20004 div.style.backgroundClip = "content-box";
20005 div.cloneNode( true ).style.backgroundClip = "";
20006 support.clearCloneStyle = div.style.backgroundClip === "content-box";
20007
20008 container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
20009 "padding:0;margin-top:1px;position:absolute";
20010 container.appendChild( div );
20011
20012 jQuery.extend( support, {
20013 pixelPosition: function() {
20014 computeStyleTests();
20015 return pixelPositionVal;
20016 },
20017 boxSizingReliable: function() {
20018 computeStyleTests();
20019 return boxSizingReliableVal;
20020 },
20021 pixelMarginRight: function() {
20022 computeStyleTests();
20023 return pixelMarginRightVal;
20024 },
20025 reliableMarginLeft: function() {
20026 computeStyleTests();
20027 return reliableMarginLeftVal;
20028 }
20029 } );
20030 } )();
20031
20032
20033 function curCSS( elem, name, computed ) {
20034 var width, minWidth, maxWidth, ret,
20035
20036 // Support: Firefox 51+
20037 // Retrieving style before computed somehow
20038 // fixes an issue with getting wrong values
20039 // on detached elements
20040 style = elem.style;
20041
20042 computed = computed || getStyles( elem );
20043
20044 // getPropertyValue is needed for:
20045 // .css('filter') (IE 9 only, #12537)
20046 // .css('--customProperty) (#3144)
20047 if ( computed ) {
20048 ret = computed.getPropertyValue( name ) || computed[ name ];
20049
20050 if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
20051 ret = jQuery.style( elem, name );
20052 }
20053
20054 // A tribute to the "awesome hack by Dean Edwards"
20055 // Android Browser returns percentage for some values,
20056 // but width seems to be reliably pixels.
20057 // This is against the CSSOM draft spec:
20058 // https://drafts.csswg.org/cssom/#resolved-values
20059 if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
20060
20061 // Remember the original values
20062 width = style.width;
20063 minWidth = style.minWidth;
20064 maxWidth = style.maxWidth;
20065
20066 // Put in the new values to get a computed value out
20067 style.minWidth = style.maxWidth = style.width = ret;
20068 ret = computed.width;
20069
20070 // Revert the changed values
20071 style.width = width;
20072 style.minWidth = minWidth;
20073 style.maxWidth = maxWidth;
20074 }
20075 }
20076
20077 return ret !== undefined ?
20078
20079 // Support: IE <=9 - 11 only
20080 // IE returns zIndex value as an integer.
20081 ret + "" :
20082 ret;
20083 }
20084
20085
20086 function addGetHookIf( conditionFn, hookFn ) {
20087
20088 // Define the hook, we'll check on the first run if it's really needed.
20089 return {
20090 get: function() {
20091 if ( conditionFn() ) {
20092
20093 // Hook not needed (or it's not possible to use it due
20094 // to missing dependency), remove it.
20095 delete this.get;
20096 return;
20097 }
20098
20099 // Hook needed; redefine it so that the support test is not executed again.
20100 return ( this.get = hookFn ).apply( this, arguments );
20101 }
20102 };
20103 }
20104
20105
20106 var
20107
20108 // Swappable if display is none or starts with table
20109 // except "table", "table-cell", or "table-caption"
20110 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
20111 rdisplayswap = /^(none|table(?!-c[ea]).+)/,
20112 rcustomProp = /^--/,
20113 cssShow = { position: "absolute", visibility: "hidden", display: "block" },
20114 cssNormalTransform = {
20115 letterSpacing: "0",
20116 fontWeight: "400"
20117 },
20118
20119 cssPrefixes = [ "Webkit", "Moz", "ms" ],
20120 emptyStyle = document.createElement( "div" ).style;
20121
20122 // Return a css property mapped to a potentially vendor prefixed property
20123 function vendorPropName( name ) {
20124
20125 // Shortcut for names that are not vendor prefixed
20126 if ( name in emptyStyle ) {
20127 return name;
20128 }
20129
20130 // Check for vendor prefixed names
20131 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
20132 i = cssPrefixes.length;
20133
20134 while ( i-- ) {
20135 name = cssPrefixes[ i ] + capName;
20136 if ( name in emptyStyle ) {
20137 return name;
20138 }
20139 }
20140 }
20141
20142 // Return a property mapped along what jQuery.cssProps suggests or to
20143 // a vendor prefixed property.
20144 function finalPropName( name ) {
20145 var ret = jQuery.cssProps[ name ];
20146 if ( !ret ) {
20147 ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
20148 }
20149 return ret;
20150 }
20151
20152 function setPositiveNumber( elem, value, subtract ) {
20153
20154 // Any relative (+/-) values have already been
20155 // normalized at this point
20156 var matches = rcssNum.exec( value );
20157 return matches ?
20158
20159 // Guard against undefined "subtract", e.g., when used as in cssHooks
20160 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
20161 value;
20162 }
20163
20164 function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
20165 var i,
20166 val = 0;
20167
20168 // If we already have the right measurement, avoid augmentation
20169 if ( extra === ( isBorderBox ? "border" : "content" ) ) {
20170 i = 4;
20171
20172 // Otherwise initialize for horizontal or vertical properties
20173 } else {
20174 i = name === "width" ? 1 : 0;
20175 }
20176
20177 for ( ; i < 4; i += 2 ) {
20178
20179 // Both box models exclude margin, so add it if we want it
20180 if ( extra === "margin" ) {
20181 val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
20182 }
20183
20184 if ( isBorderBox ) {
20185
20186 // border-box includes padding, so remove it if we want content
20187 if ( extra === "content" ) {
20188 val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
20189 }
20190
20191 // At this point, extra isn't border nor margin, so remove border
20192 if ( extra !== "margin" ) {
20193 val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
20194 }
20195 } else {
20196
20197 // At this point, extra isn't content, so add padding
20198 val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
20199
20200 // At this point, extra isn't content nor padding, so add border
20201 if ( extra !== "padding" ) {
20202 val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
20203 }
20204 }
20205 }
20206
20207 return val;
20208 }
20209
20210 function getWidthOrHeight( elem, name, extra ) {
20211
20212 // Start with computed style
20213 var valueIsBorderBox,
20214 styles = getStyles( elem ),
20215 val = curCSS( elem, name, styles ),
20216 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
20217
20218 // Computed unit is not pixels. Stop here and return.
20219 if ( rnumnonpx.test( val ) ) {
20220 return val;
20221 }
20222
20223 // Check for style in case a browser which returns unreliable values
20224 // for getComputedStyle silently falls back to the reliable elem.style
20225 valueIsBorderBox = isBorderBox &&
20226 ( support.boxSizingReliable() || val === elem.style[ name ] );
20227
20228 // Fall back to offsetWidth/Height when value is "auto"
20229 // This happens for inline elements with no explicit setting (gh-3571)
20230 if ( val === "auto" ) {
20231 val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];
20232 }
20233
20234 // Normalize "", auto, and prepare for extra
20235 val = parseFloat( val ) || 0;
20236
20237 // Use the active box-sizing model to add/subtract irrelevant styles
20238 return ( val +
20239 augmentWidthOrHeight(
20240 elem,
20241 name,
20242 extra || ( isBorderBox ? "border" : "content" ),
20243 valueIsBorderBox,
20244 styles
20245 )
20246 ) + "px";
20247 }
20248
20249 jQuery.extend( {
20250
20251 // Add in style property hooks for overriding the default
20252 // behavior of getting and setting a style property
20253 cssHooks: {
20254 opacity: {
20255 get: function( elem, computed ) {
20256 if ( computed ) {
20257
20258 // We should always get a number back from opacity
20259 var ret = curCSS( elem, "opacity" );
20260 return ret === "" ? "1" : ret;
20261 }
20262 }
20263 }
20264 },
20265
20266 // Don't automatically add "px" to these possibly-unitless properties
20267 cssNumber: {
20268 "animationIterationCount": true,
20269 "columnCount": true,
20270 "fillOpacity": true,
20271 "flexGrow": true,
20272 "flexShrink": true,
20273 "fontWeight": true,
20274 "lineHeight": true,
20275 "opacity": true,
20276 "order": true,
20277 "orphans": true,
20278 "widows": true,
20279 "zIndex": true,
20280 "zoom": true
20281 },
20282
20283 // Add in properties whose names you wish to fix before
20284 // setting or getting the value
20285 cssProps: {
20286 "float": "cssFloat"
20287 },
20288
20289 // Get and set the style property on a DOM Node
20290 style: function( elem, name, value, extra ) {
20291
20292 // Don't set styles on text and comment nodes
20293 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
20294 return;
20295 }
20296
20297 // Make sure that we're working with the right name
20298 var ret, type, hooks,
20299 origName = jQuery.camelCase( name ),
20300 isCustomProp = rcustomProp.test( name ),
20301 style = elem.style;
20302
20303 // Make sure that we're working with the right name. We don't
20304 // want to query the value if it is a CSS custom property
20305 // since they are user-defined.
20306 if ( !isCustomProp ) {
20307 name = finalPropName( origName );
20308 }
20309
20310 // Gets hook for the prefixed version, then unprefixed version
20311 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
20312
20313 // Check if we're setting a value
20314 if ( value !== undefined ) {
20315 type = typeof value;
20316
20317 // Convert "+=" or "-=" to relative numbers (#7345)
20318 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
20319 value = adjustCSS( elem, name, ret );
20320
20321 // Fixes bug #9237
20322 type = "number";
20323 }
20324
20325 // Make sure that null and NaN values aren't set (#7116)
20326 if ( value == null || value !== value ) {
20327 return;
20328 }
20329
20330 // If a number was passed in, add the unit (except for certain CSS properties)
20331 if ( type === "number" ) {
20332 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
20333 }
20334
20335 // background-* props affect original clone's values
20336 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
20337 style[ name ] = "inherit";
20338 }
20339
20340 // If a hook was provided, use that value, otherwise just set the specified value
20341 if ( !hooks || !( "set" in hooks ) ||
20342 ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
20343
20344 if ( isCustomProp ) {
20345 style.setProperty( name, value );
20346 } else {
20347 style[ name ] = value;
20348 }
20349 }
20350
20351 } else {
20352
20353 // If a hook was provided get the non-computed value from there
20354 if ( hooks && "get" in hooks &&
20355 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
20356
20357 return ret;
20358 }
20359
20360 // Otherwise just get the value from the style object
20361 return style[ name ];
20362 }
20363 },
20364
20365 css: function( elem, name, extra, styles ) {
20366 var val, num, hooks,
20367 origName = jQuery.camelCase( name ),
20368 isCustomProp = rcustomProp.test( name );
20369
20370 // Make sure that we're working with the right name. We don't
20371 // want to modify the value if it is a CSS custom property
20372 // since they are user-defined.
20373 if ( !isCustomProp ) {
20374 name = finalPropName( origName );
20375 }
20376
20377 // Try prefixed name followed by the unprefixed name
20378 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
20379
20380 // If a hook was provided get the computed value from there
20381 if ( hooks && "get" in hooks ) {
20382 val = hooks.get( elem, true, extra );
20383 }
20384
20385 // Otherwise, if a way to get the computed value exists, use that
20386 if ( val === undefined ) {
20387 val = curCSS( elem, name, styles );
20388 }
20389
20390 // Convert "normal" to computed value
20391 if ( val === "normal" && name in cssNormalTransform ) {
20392 val = cssNormalTransform[ name ];
20393 }
20394
20395 // Make numeric if forced or a qualifier was provided and val looks numeric
20396 if ( extra === "" || extra ) {
20397 num = parseFloat( val );
20398 return extra === true || isFinite( num ) ? num || 0 : val;
20399 }
20400
20401 return val;
20402 }
20403 } );
20404
20405 jQuery.each( [ "height", "width" ], function( i, name ) {
20406 jQuery.cssHooks[ name ] = {
20407 get: function( elem, computed, extra ) {
20408 if ( computed ) {
20409
20410 // Certain elements can have dimension info if we invisibly show them
20411 // but it must have a current display style that would benefit
20412 return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
20413
20414 // Support: Safari 8+
20415 // Table columns in Safari have non-zero offsetWidth & zero
20416 // getBoundingClientRect().width unless display is changed.
20417 // Support: IE <=11 only
20418 // Running getBoundingClientRect on a disconnected node
20419 // in IE throws an error.
20420 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
20421 swap( elem, cssShow, function() {
20422 return getWidthOrHeight( elem, name, extra );
20423 } ) :
20424 getWidthOrHeight( elem, name, extra );
20425 }
20426 },
20427
20428 set: function( elem, value, extra ) {
20429 var matches,
20430 styles = extra && getStyles( elem ),
20431 subtract = extra && augmentWidthOrHeight(
20432 elem,
20433 name,
20434 extra,
20435 jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
20436 styles
20437 );
20438
20439 // Convert to pixels if value adjustment is needed
20440 if ( subtract && ( matches = rcssNum.exec( value ) ) &&
20441 ( matches[ 3 ] || "px" ) !== "px" ) {
20442
20443 elem.style[ name ] = value;
20444 value = jQuery.css( elem, name );
20445 }
20446
20447 return setPositiveNumber( elem, value, subtract );
20448 }
20449 };
20450 } );
20451
20452 jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
20453 function( elem, computed ) {
20454 if ( computed ) {
20455 return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
20456 elem.getBoundingClientRect().left -
20457 swap( elem, { marginLeft: 0 }, function() {
20458 return elem.getBoundingClientRect().left;
20459 } )
20460 ) + "px";
20461 }
20462 }
20463 );
20464
20465 // These hooks are used by animate to expand properties
20466 jQuery.each( {
20467 margin: "",
20468 padding: "",
20469 border: "Width"
20470 }, function( prefix, suffix ) {
20471 jQuery.cssHooks[ prefix + suffix ] = {
20472 expand: function( value ) {
20473 var i = 0,
20474 expanded = {},
20475
20476 // Assumes a single number if not a string
20477 parts = typeof value === "string" ? value.split( " " ) : [ value ];
20478
20479 for ( ; i < 4; i++ ) {
20480 expanded[ prefix + cssExpand[ i ] + suffix ] =
20481 parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
20482 }
20483
20484 return expanded;
20485 }
20486 };
20487
20488 if ( !rmargin.test( prefix ) ) {
20489 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
20490 }
20491 } );
20492
20493 jQuery.fn.extend( {
20494 css: function( name, value ) {
20495 return access( this, function( elem, name, value ) {
20496 var styles, len,
20497 map = {},
20498 i = 0;
20499
20500 if ( Array.isArray( name ) ) {
20501 styles = getStyles( elem );
20502 len = name.length;
20503
20504 for ( ; i < len; i++ ) {
20505 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
20506 }
20507
20508 return map;
20509 }
20510
20511 return value !== undefined ?
20512 jQuery.style( elem, name, value ) :
20513 jQuery.css( elem, name );
20514 }, name, value, arguments.length > 1 );
20515 }
20516 } );
20517
20518
20519 function Tween( elem, options, prop, end, easing ) {
20520 return new Tween.prototype.init( elem, options, prop, end, easing );
20521 }
20522 jQuery.Tween = Tween;
20523
20524 Tween.prototype = {
20525 constructor: Tween,
20526 init: function( elem, options, prop, end, easing, unit ) {
20527 this.elem = elem;
20528 this.prop = prop;
20529 this.easing = easing || jQuery.easing._default;
20530 this.options = options;
20531 this.start = this.now = this.cur();
20532 this.end = end;
20533 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
20534 },
20535 cur: function() {
20536 var hooks = Tween.propHooks[ this.prop ];
20537
20538 return hooks && hooks.get ?
20539 hooks.get( this ) :
20540 Tween.propHooks._default.get( this );
20541 },
20542 run: function( percent ) {
20543 var eased,
20544 hooks = Tween.propHooks[ this.prop ];
20545
20546 if ( this.options.duration ) {
20547 this.pos = eased = jQuery.easing[ this.easing ](
20548 percent, this.options.duration * percent, 0, 1, this.options.duration
20549 );
20550 } else {
20551 this.pos = eased = percent;
20552 }
20553 this.now = ( this.end - this.start ) * eased + this.start;
20554
20555 if ( this.options.step ) {
20556 this.options.step.call( this.elem, this.now, this );
20557 }
20558
20559 if ( hooks && hooks.set ) {
20560 hooks.set( this );
20561 } else {
20562 Tween.propHooks._default.set( this );
20563 }
20564 return this;
20565 }
20566 };
20567
20568 Tween.prototype.init.prototype = Tween.prototype;
20569
20570 Tween.propHooks = {
20571 _default: {
20572 get: function( tween ) {
20573 var result;
20574
20575 // Use a property on the element directly when it is not a DOM element,
20576 // or when there is no matching style property that exists.
20577 if ( tween.elem.nodeType !== 1 ||
20578 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
20579 return tween.elem[ tween.prop ];
20580 }
20581
20582 // Passing an empty string as a 3rd parameter to .css will automatically
20583 // attempt a parseFloat and fallback to a string if the parse fails.
20584 // Simple values such as "10px" are parsed to Float;
20585 // complex values such as "rotate(1rad)" are returned as-is.
20586 result = jQuery.css( tween.elem, tween.prop, "" );
20587
20588 // Empty strings, null, undefined and "auto" are converted to 0.
20589 return !result || result === "auto" ? 0 : result;
20590 },
20591 set: function( tween ) {
20592
20593 // Use step hook for back compat.
20594 // Use cssHook if its there.
20595 // Use .style if available and use plain properties where available.
20596 if ( jQuery.fx.step[ tween.prop ] ) {
20597 jQuery.fx.step[ tween.prop ]( tween );
20598 } else if ( tween.elem.nodeType === 1 &&
20599 ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
20600 jQuery.cssHooks[ tween.prop ] ) ) {
20601 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
20602 } else {
20603 tween.elem[ tween.prop ] = tween.now;
20604 }
20605 }
20606 }
20607 };
20608
20609 // Support: IE <=9 only
20610 // Panic based approach to setting things on disconnected nodes
20611 Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
20612 set: function( tween ) {
20613 if ( tween.elem.nodeType && tween.elem.parentNode ) {
20614 tween.elem[ tween.prop ] = tween.now;
20615 }
20616 }
20617 };
20618
20619 jQuery.easing = {
20620 linear: function( p ) {
20621 return p;
20622 },
20623 swing: function( p ) {
20624 return 0.5 - Math.cos( p * Math.PI ) / 2;
20625 },
20626 _default: "swing"
20627 };
20628
20629 jQuery.fx = Tween.prototype.init;
20630
20631 // Back compat <1.8 extension point
20632 jQuery.fx.step = {};
20633
20634
20635
20636
20637 var
20638 fxNow, inProgress,
20639 rfxtypes = /^(?:toggle|show|hide)$/,
20640 rrun = /queueHooks$/;
20641
20642 function schedule() {
20643 if ( inProgress ) {
20644 if ( document.hidden === false && window.requestAnimationFrame ) {
20645 window.requestAnimationFrame( schedule );
20646 } else {
20647 window.setTimeout( schedule, jQuery.fx.interval );
20648 }
20649
20650 jQuery.fx.tick();
20651 }
20652 }
20653
20654 // Animations created synchronously will run synchronously
20655 function createFxNow() {
20656 window.setTimeout( function() {
20657 fxNow = undefined;
20658 } );
20659 return ( fxNow = jQuery.now() );
20660 }
20661
20662 // Generate parameters to create a standard animation
20663 function genFx( type, includeWidth ) {
20664 var which,
20665 i = 0,
20666 attrs = { height: type };
20667
20668 // If we include width, step value is 1 to do all cssExpand values,
20669 // otherwise step value is 2 to skip over Left and Right
20670 includeWidth = includeWidth ? 1 : 0;
20671 for ( ; i < 4; i += 2 - includeWidth ) {
20672 which = cssExpand[ i ];
20673 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
20674 }
20675
20676 if ( includeWidth ) {
20677 attrs.opacity = attrs.width = type;
20678 }
20679
20680 return attrs;
20681 }
20682
20683 function createTween( value, prop, animation ) {
20684 var tween,
20685 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
20686 index = 0,
20687 length = collection.length;
20688 for ( ; index < length; index++ ) {
20689 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
20690
20691 // We're done with this property
20692 return tween;
20693 }
20694 }
20695 }
20696
20697 function defaultPrefilter( elem, props, opts ) {
20698 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
20699 isBox = "width" in props || "height" in props,
20700 anim = this,
20701 orig = {},
20702 style = elem.style,
20703 hidden = elem.nodeType && isHiddenWithinTree( elem ),
20704 dataShow = dataPriv.get( elem, "fxshow" );
20705
20706 // Queue-skipping animations hijack the fx hooks
20707 if ( !opts.queue ) {
20708 hooks = jQuery._queueHooks( elem, "fx" );
20709 if ( hooks.unqueued == null ) {
20710 hooks.unqueued = 0;
20711 oldfire = hooks.empty.fire;
20712 hooks.empty.fire = function() {
20713 if ( !hooks.unqueued ) {
20714 oldfire();
20715 }
20716 };
20717 }
20718 hooks.unqueued++;
20719
20720 anim.always( function() {
20721
20722 // Ensure the complete handler is called before this completes
20723 anim.always( function() {
20724 hooks.unqueued--;
20725 if ( !jQuery.queue( elem, "fx" ).length ) {
20726 hooks.empty.fire();
20727 }
20728 } );
20729 } );
20730 }
20731
20732 // Detect show/hide animations
20733 for ( prop in props ) {
20734 value = props[ prop ];
20735 if ( rfxtypes.test( value ) ) {
20736 delete props[ prop ];
20737 toggle = toggle || value === "toggle";
20738 if ( value === ( hidden ? "hide" : "show" ) ) {
20739
20740 // Pretend to be hidden if this is a "show" and
20741 // there is still data from a stopped show/hide
20742 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
20743 hidden = true;
20744
20745 // Ignore all other no-op show/hide data
20746 } else {
20747 continue;
20748 }
20749 }
20750 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
20751 }
20752 }
20753
20754 // Bail out if this is a no-op like .hide().hide()
20755 propTween = !jQuery.isEmptyObject( props );
20756 if ( !propTween && jQuery.isEmptyObject( orig ) ) {
20757 return;
20758 }
20759
20760 // Restrict "overflow" and "display" styles during box animations
20761 if ( isBox && elem.nodeType === 1 ) {
20762
20763 // Support: IE <=9 - 11, Edge 12 - 13
20764 // Record all 3 overflow attributes because IE does not infer the shorthand
20765 // from identically-valued overflowX and overflowY
20766 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
20767
20768 // Identify a display type, preferring old show/hide data over the CSS cascade
20769 restoreDisplay = dataShow && dataShow.display;
20770 if ( restoreDisplay == null ) {
20771 restoreDisplay = dataPriv.get( elem, "display" );
20772 }
20773 display = jQuery.css( elem, "display" );
20774 if ( display === "none" ) {
20775 if ( restoreDisplay ) {
20776 display = restoreDisplay;
20777 } else {
20778
20779 // Get nonempty value(s) by temporarily forcing visibility
20780 showHide( [ elem ], true );
20781 restoreDisplay = elem.style.display || restoreDisplay;
20782 display = jQuery.css( elem, "display" );
20783 showHide( [ elem ] );
20784 }
20785 }
20786
20787 // Animate inline elements as inline-block
20788 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
20789 if ( jQuery.css( elem, "float" ) === "none" ) {
20790
20791 // Restore the original display value at the end of pure show/hide animations
20792 if ( !propTween ) {
20793 anim.done( function() {
20794 style.display = restoreDisplay;
20795 } );
20796 if ( restoreDisplay == null ) {
20797 display = style.display;
20798 restoreDisplay = display === "none" ? "" : display;
20799 }
20800 }
20801 style.display = "inline-block";
20802 }
20803 }
20804 }
20805
20806 if ( opts.overflow ) {
20807 style.overflow = "hidden";
20808 anim.always( function() {
20809 style.overflow = opts.overflow[ 0 ];
20810 style.overflowX = opts.overflow[ 1 ];
20811 style.overflowY = opts.overflow[ 2 ];
20812 } );
20813 }
20814
20815 // Implement show/hide animations
20816 propTween = false;
20817 for ( prop in orig ) {
20818
20819 // General show/hide setup for this element animation
20820 if ( !propTween ) {
20821 if ( dataShow ) {
20822 if ( "hidden" in dataShow ) {
20823 hidden = dataShow.hidden;
20824 }
20825 } else {
20826 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
20827 }
20828
20829 // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
20830 if ( toggle ) {
20831 dataShow.hidden = !hidden;
20832 }
20833
20834 // Show elements before animating them
20835 if ( hidden ) {
20836 showHide( [ elem ], true );
20837 }
20838
20839 /* eslint-disable no-loop-func */
20840
20841 anim.done( function() {
20842
20843 /* eslint-enable no-loop-func */
20844
20845 // The final step of a "hide" animation is actually hiding the element
20846 if ( !hidden ) {
20847 showHide( [ elem ] );
20848 }
20849 dataPriv.remove( elem, "fxshow" );
20850 for ( prop in orig ) {
20851 jQuery.style( elem, prop, orig[ prop ] );
20852 }
20853 } );
20854 }
20855
20856 // Per-property setup
20857 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
20858 if ( !( prop in dataShow ) ) {
20859 dataShow[ prop ] = propTween.start;
20860 if ( hidden ) {
20861 propTween.end = propTween.start;
20862 propTween.start = 0;
20863 }
20864 }
20865 }
20866 }
20867
20868 function propFilter( props, specialEasing ) {
20869 var index, name, easing, value, hooks;
20870
20871 // camelCase, specialEasing and expand cssHook pass
20872 for ( index in props ) {
20873 name = jQuery.camelCase( index );
20874 easing = specialEasing[ name ];
20875 value = props[ index ];
20876 if ( Array.isArray( value ) ) {
20877 easing = value[ 1 ];
20878 value = props[ index ] = value[ 0 ];
20879 }
20880
20881 if ( index !== name ) {
20882 props[ name ] = value;
20883 delete props[ index ];
20884 }
20885
20886 hooks = jQuery.cssHooks[ name ];
20887 if ( hooks && "expand" in hooks ) {
20888 value = hooks.expand( value );
20889 delete props[ name ];
20890
20891 // Not quite $.extend, this won't overwrite existing keys.
20892 // Reusing 'index' because we have the correct "name"
20893 for ( index in value ) {
20894 if ( !( index in props ) ) {
20895 props[ index ] = value[ index ];
20896 specialEasing[ index ] = easing;
20897 }
20898 }
20899 } else {
20900 specialEasing[ name ] = easing;
20901 }
20902 }
20903 }
20904
20905 function Animation( elem, properties, options ) {
20906 var result,
20907 stopped,
20908 index = 0,
20909 length = Animation.prefilters.length,
20910 deferred = jQuery.Deferred().always( function() {
20911
20912 // Don't match elem in the :animated selector
20913 delete tick.elem;
20914 } ),
20915 tick = function() {
20916 if ( stopped ) {
20917 return false;
20918 }
20919 var currentTime = fxNow || createFxNow(),
20920 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
20921
20922 // Support: Android 2.3 only
20923 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
20924 temp = remaining / animation.duration || 0,
20925 percent = 1 - temp,
20926 index = 0,
20927 length = animation.tweens.length;
20928
20929 for ( ; index < length; index++ ) {
20930 animation.tweens[ index ].run( percent );
20931 }
20932
20933 deferred.notifyWith( elem, [ animation, percent, remaining ] );
20934
20935 // If there's more to do, yield
20936 if ( percent < 1 && length ) {
20937 return remaining;
20938 }
20939
20940 // If this was an empty animation, synthesize a final progress notification
20941 if ( !length ) {
20942 deferred.notifyWith( elem, [ animation, 1, 0 ] );
20943 }
20944
20945 // Resolve the animation and report its conclusion
20946 deferred.resolveWith( elem, [ animation ] );
20947 return false;
20948 },
20949 animation = deferred.promise( {
20950 elem: elem,
20951 props: jQuery.extend( {}, properties ),
20952 opts: jQuery.extend( true, {
20953 specialEasing: {},
20954 easing: jQuery.easing._default
20955 }, options ),
20956 originalProperties: properties,
20957 originalOptions: options,
20958 startTime: fxNow || createFxNow(),
20959 duration: options.duration,
20960 tweens: [],
20961 createTween: function( prop, end ) {
20962 var tween = jQuery.Tween( elem, animation.opts, prop, end,
20963 animation.opts.specialEasing[ prop ] || animation.opts.easing );
20964 animation.tweens.push( tween );
20965 return tween;
20966 },
20967 stop: function( gotoEnd ) {
20968 var index = 0,
20969
20970 // If we are going to the end, we want to run all the tweens
20971 // otherwise we skip this part
20972 length = gotoEnd ? animation.tweens.length : 0;
20973 if ( stopped ) {
20974 return this;
20975 }
20976 stopped = true;
20977 for ( ; index < length; index++ ) {
20978 animation.tweens[ index ].run( 1 );
20979 }
20980
20981 // Resolve when we played the last frame; otherwise, reject
20982 if ( gotoEnd ) {
20983 deferred.notifyWith( elem, [ animation, 1, 0 ] );
20984 deferred.resolveWith( elem, [ animation, gotoEnd ] );
20985 } else {
20986 deferred.rejectWith( elem, [ animation, gotoEnd ] );
20987 }
20988 return this;
20989 }
20990 } ),
20991 props = animation.props;
20992
20993 propFilter( props, animation.opts.specialEasing );
20994
20995 for ( ; index < length; index++ ) {
20996 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
20997 if ( result ) {
20998 if ( jQuery.isFunction( result.stop ) ) {
20999 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
21000 jQuery.proxy( result.stop, result );
21001 }
21002 return result;
21003 }
21004 }
21005
21006 jQuery.map( props, createTween, animation );
21007
21008 if ( jQuery.isFunction( animation.opts.start ) ) {
21009 animation.opts.start.call( elem, animation );
21010 }
21011
21012 // Attach callbacks from options
21013 animation
21014 .progress( animation.opts.progress )
21015 .done( animation.opts.done, animation.opts.complete )
21016 .fail( animation.opts.fail )
21017 .always( animation.opts.always );
21018
21019 jQuery.fx.timer(
21020 jQuery.extend( tick, {
21021 elem: elem,
21022 anim: animation,
21023 queue: animation.opts.queue
21024 } )
21025 );
21026
21027 return animation;
21028 }
21029
21030 jQuery.Animation = jQuery.extend( Animation, {
21031
21032 tweeners: {
21033 "*": [ function( prop, value ) {
21034 var tween = this.createTween( prop, value );
21035 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
21036 return tween;
21037 } ]
21038 },
21039
21040 tweener: function( props, callback ) {
21041 if ( jQuery.isFunction( props ) ) {
21042 callback = props;
21043 props = [ "*" ];
21044 } else {
21045 props = props.match( rnothtmlwhite );
21046 }
21047
21048 var prop,
21049 index = 0,
21050 length = props.length;
21051
21052 for ( ; index < length; index++ ) {
21053 prop = props[ index ];
21054 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
21055 Animation.tweeners[ prop ].unshift( callback );
21056 }
21057 },
21058
21059 prefilters: [ defaultPrefilter ],
21060
21061 prefilter: function( callback, prepend ) {
21062 if ( prepend ) {
21063 Animation.prefilters.unshift( callback );
21064 } else {
21065 Animation.prefilters.push( callback );
21066 }
21067 }
21068 } );
21069
21070 jQuery.speed = function( speed, easing, fn ) {
21071 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
21072 complete: fn || !fn && easing ||
21073 jQuery.isFunction( speed ) && speed,
21074 duration: speed,
21075 easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
21076 };
21077
21078 // Go to the end state if fx are off
21079 if ( jQuery.fx.off ) {
21080 opt.duration = 0;
21081
21082 } else {
21083 if ( typeof opt.duration !== "number" ) {
21084 if ( opt.duration in jQuery.fx.speeds ) {
21085 opt.duration = jQuery.fx.speeds[ opt.duration ];
21086
21087 } else {
21088 opt.duration = jQuery.fx.speeds._default;
21089 }
21090 }
21091 }
21092
21093 // Normalize opt.queue - true/undefined/null -> "fx"
21094 if ( opt.queue == null || opt.queue === true ) {
21095 opt.queue = "fx";
21096 }
21097
21098 // Queueing
21099 opt.old = opt.complete;
21100
21101 opt.complete = function() {
21102 if ( jQuery.isFunction( opt.old ) ) {
21103 opt.old.call( this );
21104 }
21105
21106 if ( opt.queue ) {
21107 jQuery.dequeue( this, opt.queue );
21108 }
21109 };
21110
21111 return opt;
21112 };
21113
21114 jQuery.fn.extend( {
21115 fadeTo: function( speed, to, easing, callback ) {
21116
21117 // Show any hidden elements after setting opacity to 0
21118 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
21119
21120 // Animate to the value specified
21121 .end().animate( { opacity: to }, speed, easing, callback );
21122 },
21123 animate: function( prop, speed, easing, callback ) {
21124 var empty = jQuery.isEmptyObject( prop ),
21125 optall = jQuery.speed( speed, easing, callback ),
21126 doAnimation = function() {
21127
21128 // Operate on a copy of prop so per-property easing won't be lost
21129 var anim = Animation( this, jQuery.extend( {}, prop ), optall );
21130
21131 // Empty animations, or finishing resolves immediately
21132 if ( empty || dataPriv.get( this, "finish" ) ) {
21133 anim.stop( true );
21134 }
21135 };
21136 doAnimation.finish = doAnimation;
21137
21138 return empty || optall.queue === false ?
21139 this.each( doAnimation ) :
21140 this.queue( optall.queue, doAnimation );
21141 },
21142 stop: function( type, clearQueue, gotoEnd ) {
21143 var stopQueue = function( hooks ) {
21144 var stop = hooks.stop;
21145 delete hooks.stop;
21146 stop( gotoEnd );
21147 };
21148
21149 if ( typeof type !== "string" ) {
21150 gotoEnd = clearQueue;
21151 clearQueue = type;
21152 type = undefined;
21153 }
21154 if ( clearQueue && type !== false ) {
21155 this.queue( type || "fx", [] );
21156 }
21157
21158 return this.each( function() {
21159 var dequeue = true,
21160 index = type != null && type + "queueHooks",
21161 timers = jQuery.timers,
21162 data = dataPriv.get( this );
21163
21164 if ( index ) {
21165 if ( data[ index ] && data[ index ].stop ) {
21166 stopQueue( data[ index ] );
21167 }
21168 } else {
21169 for ( index in data ) {
21170 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
21171 stopQueue( data[ index ] );
21172 }
21173 }
21174 }
21175
21176 for ( index = timers.length; index--; ) {
21177 if ( timers[ index ].elem === this &&
21178 ( type == null || timers[ index ].queue === type ) ) {
21179
21180 timers[ index ].anim.stop( gotoEnd );
21181 dequeue = false;
21182 timers.splice( index, 1 );
21183 }
21184 }
21185
21186 // Start the next in the queue if the last step wasn't forced.
21187 // Timers currently will call their complete callbacks, which
21188 // will dequeue but only if they were gotoEnd.
21189 if ( dequeue || !gotoEnd ) {
21190 jQuery.dequeue( this, type );
21191 }
21192 } );
21193 },
21194 finish: function( type ) {
21195 if ( type !== false ) {
21196 type = type || "fx";
21197 }
21198 return this.each( function() {
21199 var index,
21200 data = dataPriv.get( this ),
21201 queue = data[ type + "queue" ],
21202 hooks = data[ type + "queueHooks" ],
21203 timers = jQuery.timers,
21204 length = queue ? queue.length : 0;
21205
21206 // Enable finishing flag on private data
21207 data.finish = true;
21208
21209 // Empty the queue first
21210 jQuery.queue( this, type, [] );
21211
21212 if ( hooks && hooks.stop ) {
21213 hooks.stop.call( this, true );
21214 }
21215
21216 // Look for any active animations, and finish them
21217 for ( index = timers.length; index--; ) {
21218 if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
21219 timers[ index ].anim.stop( true );
21220 timers.splice( index, 1 );
21221 }
21222 }
21223
21224 // Look for any animations in the old queue and finish them
21225 for ( index = 0; index < length; index++ ) {
21226 if ( queue[ index ] && queue[ index ].finish ) {
21227 queue[ index ].finish.call( this );
21228 }
21229 }
21230
21231 // Turn off finishing flag
21232 delete data.finish;
21233 } );
21234 }
21235 } );
21236
21237 jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
21238 var cssFn = jQuery.fn[ name ];
21239 jQuery.fn[ name ] = function( speed, easing, callback ) {
21240 return speed == null || typeof speed === "boolean" ?
21241 cssFn.apply( this, arguments ) :
21242 this.animate( genFx( name, true ), speed, easing, callback );
21243 };
21244 } );
21245
21246 // Generate shortcuts for custom animations
21247 jQuery.each( {
21248 slideDown: genFx( "show" ),
21249 slideUp: genFx( "hide" ),
21250 slideToggle: genFx( "toggle" ),
21251 fadeIn: { opacity: "show" },
21252 fadeOut: { opacity: "hide" },
21253 fadeToggle: { opacity: "toggle" }
21254 }, function( name, props ) {
21255 jQuery.fn[ name ] = function( speed, easing, callback ) {
21256 return this.animate( props, speed, easing, callback );
21257 };
21258 } );
21259
21260 jQuery.timers = [];
21261 jQuery.fx.tick = function() {
21262 var timer,
21263 i = 0,
21264 timers = jQuery.timers;
21265
21266 fxNow = jQuery.now();
21267
21268 for ( ; i < timers.length; i++ ) {
21269 timer = timers[ i ];
21270
21271 // Run the timer and safely remove it when done (allowing for external removal)
21272 if ( !timer() && timers[ i ] === timer ) {
21273 timers.splice( i--, 1 );
21274 }
21275 }
21276
21277 if ( !timers.length ) {
21278 jQuery.fx.stop();
21279 }
21280 fxNow = undefined;
21281 };
21282
21283 jQuery.fx.timer = function( timer ) {
21284 jQuery.timers.push( timer );
21285 jQuery.fx.start();
21286 };
21287
21288 jQuery.fx.interval = 13;
21289 jQuery.fx.start = function() {
21290 if ( inProgress ) {
21291 return;
21292 }
21293
21294 inProgress = true;
21295 schedule();
21296 };
21297
21298 jQuery.fx.stop = function() {
21299 inProgress = null;
21300 };
21301
21302 jQuery.fx.speeds = {
21303 slow: 600,
21304 fast: 200,
21305
21306 // Default speed
21307 _default: 400
21308 };
21309
21310
21311 // Based off of the plugin by Clint Helfers, with permission.
21312 // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
21313 jQuery.fn.delay = function( time, type ) {
21314 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
21315 type = type || "fx";
21316
21317 return this.queue( type, function( next, hooks ) {
21318 var timeout = window.setTimeout( next, time );
21319 hooks.stop = function() {
21320 window.clearTimeout( timeout );
21321 };
21322 } );
21323 };
21324
21325
21326 ( function() {
21327 var input = document.createElement( "input" ),
21328 select = document.createElement( "select" ),
21329 opt = select.appendChild( document.createElement( "option" ) );
21330
21331 input.type = "checkbox";
21332
21333 // Support: Android <=4.3 only
21334 // Default value for a checkbox should be "on"
21335 support.checkOn = input.value !== "";
21336
21337 // Support: IE <=11 only
21338 // Must access selectedIndex to make default options select
21339 support.optSelected = opt.selected;
21340
21341 // Support: IE <=11 only
21342 // An input loses its value after becoming a radio
21343 input = document.createElement( "input" );
21344 input.value = "t";
21345 input.type = "radio";
21346 support.radioValue = input.value === "t";
21347 } )();
21348
21349
21350 var boolHook,
21351 attrHandle = jQuery.expr.attrHandle;
21352
21353 jQuery.fn.extend( {
21354 attr: function( name, value ) {
21355 return access( this, jQuery.attr, name, value, arguments.length > 1 );
21356 },
21357
21358 removeAttr: function( name ) {
21359 return this.each( function() {
21360 jQuery.removeAttr( this, name );
21361 } );
21362 }
21363 } );
21364
21365 jQuery.extend( {
21366 attr: function( elem, name, value ) {
21367 var ret, hooks,
21368 nType = elem.nodeType;
21369
21370 // Don't get/set attributes on text, comment and attribute nodes
21371 if ( nType === 3 || nType === 8 || nType === 2 ) {
21372 return;
21373 }
21374
21375 // Fallback to prop when attributes are not supported
21376 if ( typeof elem.getAttribute === "undefined" ) {
21377 return jQuery.prop( elem, name, value );
21378 }
21379
21380 // Attribute hooks are determined by the lowercase version
21381 // Grab necessary hook if one is defined
21382 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
21383 hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
21384 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
21385 }
21386
21387 if ( value !== undefined ) {
21388 if ( value === null ) {
21389 jQuery.removeAttr( elem, name );
21390 return;
21391 }
21392
21393 if ( hooks && "set" in hooks &&
21394 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
21395 return ret;
21396 }
21397
21398 elem.setAttribute( name, value + "" );
21399 return value;
21400 }
21401
21402 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
21403 return ret;
21404 }
21405
21406 ret = jQuery.find.attr( elem, name );
21407
21408 // Non-existent attributes return null, we normalize to undefined
21409 return ret == null ? undefined : ret;
21410 },
21411
21412 attrHooks: {
21413 type: {
21414 set: function( elem, value ) {
21415 if ( !support.radioValue && value === "radio" &&
21416 nodeName( elem, "input" ) ) {
21417 var val = elem.value;
21418 elem.setAttribute( "type", value );
21419 if ( val ) {
21420 elem.value = val;
21421 }
21422 return value;
21423 }
21424 }
21425 }
21426 },
21427
21428 removeAttr: function( elem, value ) {
21429 var name,
21430 i = 0,
21431
21432 // Attribute names can contain non-HTML whitespace characters
21433 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
21434 attrNames = value && value.match( rnothtmlwhite );
21435
21436 if ( attrNames && elem.nodeType === 1 ) {
21437 while ( ( name = attrNames[ i++ ] ) ) {
21438 elem.removeAttribute( name );
21439 }
21440 }
21441 }
21442 } );
21443
21444 // Hooks for boolean attributes
21445 boolHook = {
21446 set: function( elem, value, name ) {
21447 if ( value === false ) {
21448
21449 // Remove boolean attributes when set to false
21450 jQuery.removeAttr( elem, name );
21451 } else {
21452 elem.setAttribute( name, name );
21453 }
21454 return name;
21455 }
21456 };
21457
21458 jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
21459 var getter = attrHandle[ name ] || jQuery.find.attr;
21460
21461 attrHandle[ name ] = function( elem, name, isXML ) {
21462 var ret, handle,
21463 lowercaseName = name.toLowerCase();
21464
21465 if ( !isXML ) {
21466
21467 // Avoid an infinite loop by temporarily removing this function from the getter
21468 handle = attrHandle[ lowercaseName ];
21469 attrHandle[ lowercaseName ] = ret;
21470 ret = getter( elem, name, isXML ) != null ?
21471 lowercaseName :
21472 null;
21473 attrHandle[ lowercaseName ] = handle;
21474 }
21475 return ret;
21476 };
21477 } );
21478
21479
21480
21481
21482 var rfocusable = /^(?:input|select|textarea|button)$/i,
21483 rclickable = /^(?:a|area)$/i;
21484
21485 jQuery.fn.extend( {
21486 prop: function( name, value ) {
21487 return access( this, jQuery.prop, name, value, arguments.length > 1 );
21488 },
21489
21490 removeProp: function( name ) {
21491 return this.each( function() {
21492 delete this[ jQuery.propFix[ name ] || name ];
21493 } );
21494 }
21495 } );
21496
21497 jQuery.extend( {
21498 prop: function( elem, name, value ) {
21499 var ret, hooks,
21500 nType = elem.nodeType;
21501
21502 // Don't get/set properties on text, comment and attribute nodes
21503 if ( nType === 3 || nType === 8 || nType === 2 ) {
21504 return;
21505 }
21506
21507 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
21508
21509 // Fix name and attach hooks
21510 name = jQuery.propFix[ name ] || name;
21511 hooks = jQuery.propHooks[ name ];
21512 }
21513
21514 if ( value !== undefined ) {
21515 if ( hooks && "set" in hooks &&
21516 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
21517 return ret;
21518 }
21519
21520 return ( elem[ name ] = value );
21521 }
21522
21523 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
21524 return ret;
21525 }
21526
21527 return elem[ name ];
21528 },
21529
21530 propHooks: {
21531 tabIndex: {
21532 get: function( elem ) {
21533
21534 // Support: IE <=9 - 11 only
21535 // elem.tabIndex doesn't always return the
21536 // correct value when it hasn't been explicitly set
21537 // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
21538 // Use proper attribute retrieval(#12072)
21539 var tabindex = jQuery.find.attr( elem, "tabindex" );
21540
21541 if ( tabindex ) {
21542 return parseInt( tabindex, 10 );
21543 }
21544
21545 if (
21546 rfocusable.test( elem.nodeName ) ||
21547 rclickable.test( elem.nodeName ) &&
21548 elem.href
21549 ) {
21550 return 0;
21551 }
21552
21553 return -1;
21554 }
21555 }
21556 },
21557
21558 propFix: {
21559 "for": "htmlFor",
21560 "class": "className"
21561 }
21562 } );
21563
21564 // Support: IE <=11 only
21565 // Accessing the selectedIndex property
21566 // forces the browser to respect setting selected
21567 // on the option
21568 // The getter ensures a default option is selected
21569 // when in an optgroup
21570 // eslint rule "no-unused-expressions" is disabled for this code
21571 // since it considers such accessions noop
21572 if ( !support.optSelected ) {
21573 jQuery.propHooks.selected = {
21574 get: function( elem ) {
21575
21576 /* eslint no-unused-expressions: "off" */
21577
21578 var parent = elem.parentNode;
21579 if ( parent && parent.parentNode ) {
21580 parent.parentNode.selectedIndex;
21581 }
21582 return null;
21583 },
21584 set: function( elem ) {
21585
21586 /* eslint no-unused-expressions: "off" */
21587
21588 var parent = elem.parentNode;
21589 if ( parent ) {
21590 parent.selectedIndex;
21591
21592 if ( parent.parentNode ) {
21593 parent.parentNode.selectedIndex;
21594 }
21595 }
21596 }
21597 };
21598 }
21599
21600 jQuery.each( [
21601 "tabIndex",
21602 "readOnly",
21603 "maxLength",
21604 "cellSpacing",
21605 "cellPadding",
21606 "rowSpan",
21607 "colSpan",
21608 "useMap",
21609 "frameBorder",
21610 "contentEditable"
21611 ], function() {
21612 jQuery.propFix[ this.toLowerCase() ] = this;
21613 } );
21614
21615
21616
21617
21618 // Strip and collapse whitespace according to HTML spec
21619 // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace
21620 function stripAndCollapse( value ) {
21621 var tokens = value.match( rnothtmlwhite ) || [];
21622 return tokens.join( " " );
21623 }
21624
21625
21626 function getClass( elem ) {
21627 return elem.getAttribute && elem.getAttribute( "class" ) || "";
21628 }
21629
21630 jQuery.fn.extend( {
21631 addClass: function( value ) {
21632 var classes, elem, cur, curValue, clazz, j, finalValue,
21633 i = 0;
21634
21635 if ( jQuery.isFunction( value ) ) {
21636 return this.each( function( j ) {
21637 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
21638 } );
21639 }
21640
21641 if ( typeof value === "string" && value ) {
21642 classes = value.match( rnothtmlwhite ) || [];
21643
21644 while ( ( elem = this[ i++ ] ) ) {
21645 curValue = getClass( elem );
21646 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
21647
21648 if ( cur ) {
21649 j = 0;
21650 while ( ( clazz = classes[ j++ ] ) ) {
21651 if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
21652 cur += clazz + " ";
21653 }
21654 }
21655
21656 // Only assign if different to avoid unneeded rendering.
21657 finalValue = stripAndCollapse( cur );
21658 if ( curValue !== finalValue ) {
21659 elem.setAttribute( "class", finalValue );
21660 }
21661 }
21662 }
21663 }
21664
21665 return this;
21666 },
21667
21668 removeClass: function( value ) {
21669 var classes, elem, cur, curValue, clazz, j, finalValue,
21670 i = 0;
21671
21672 if ( jQuery.isFunction( value ) ) {
21673 return this.each( function( j ) {
21674 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
21675 } );
21676 }
21677
21678 if ( !arguments.length ) {
21679 return this.attr( "class", "" );
21680 }
21681
21682 if ( typeof value === "string" && value ) {
21683 classes = value.match( rnothtmlwhite ) || [];
21684
21685 while ( ( elem = this[ i++ ] ) ) {
21686 curValue = getClass( elem );
21687
21688 // This expression is here for better compressibility (see addClass)
21689 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
21690
21691 if ( cur ) {
21692 j = 0;
21693 while ( ( clazz = classes[ j++ ] ) ) {
21694
21695 // Remove *all* instances
21696 while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
21697 cur = cur.replace( " " + clazz + " ", " " );
21698 }
21699 }
21700
21701 // Only assign if different to avoid unneeded rendering.
21702 finalValue = stripAndCollapse( cur );
21703 if ( curValue !== finalValue ) {
21704 elem.setAttribute( "class", finalValue );
21705 }
21706 }
21707 }
21708 }
21709
21710 return this;
21711 },
21712
21713 toggleClass: function( value, stateVal ) {
21714 var type = typeof value;
21715
21716 if ( typeof stateVal === "boolean" && type === "string" ) {
21717 return stateVal ? this.addClass( value ) : this.removeClass( value );
21718 }
21719
21720 if ( jQuery.isFunction( value ) ) {
21721 return this.each( function( i ) {
21722 jQuery( this ).toggleClass(
21723 value.call( this, i, getClass( this ), stateVal ),
21724 stateVal
21725 );
21726 } );
21727 }
21728
21729 return this.each( function() {
21730 var className, i, self, classNames;
21731
21732 if ( type === "string" ) {
21733
21734 // Toggle individual class names
21735 i = 0;
21736 self = jQuery( this );
21737 classNames = value.match( rnothtmlwhite ) || [];
21738
21739 while ( ( className = classNames[ i++ ] ) ) {
21740
21741 // Check each className given, space separated list
21742 if ( self.hasClass( className ) ) {
21743 self.removeClass( className );
21744 } else {
21745 self.addClass( className );
21746 }
21747 }
21748
21749 // Toggle whole class name
21750 } else if ( value === undefined || type === "boolean" ) {
21751 className = getClass( this );
21752 if ( className ) {
21753
21754 // Store className if set
21755 dataPriv.set( this, "__className__", className );
21756 }
21757
21758 // If the element has a class name or if we're passed `false`,
21759 // then remove the whole classname (if there was one, the above saved it).
21760 // Otherwise bring back whatever was previously saved (if anything),
21761 // falling back to the empty string if nothing was stored.
21762 if ( this.setAttribute ) {
21763 this.setAttribute( "class",
21764 className || value === false ?
21765 "" :
21766 dataPriv.get( this, "__className__" ) || ""
21767 );
21768 }
21769 }
21770 } );
21771 },
21772
21773 hasClass: function( selector ) {
21774 var className, elem,
21775 i = 0;
21776
21777 className = " " + selector + " ";
21778 while ( ( elem = this[ i++ ] ) ) {
21779 if ( elem.nodeType === 1 &&
21780 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
21781 return true;
21782 }
21783 }
21784
21785 return false;
21786 }
21787 } );
21788
21789
21790
21791
21792 var rreturn = /\r/g;
21793
21794 jQuery.fn.extend( {
21795 val: function( value ) {
21796 var hooks, ret, isFunction,
21797 elem = this[ 0 ];
21798
21799 if ( !arguments.length ) {
21800 if ( elem ) {
21801 hooks = jQuery.valHooks[ elem.type ] ||
21802 jQuery.valHooks[ elem.nodeName.toLowerCase() ];
21803
21804 if ( hooks &&
21805 "get" in hooks &&
21806 ( ret = hooks.get( elem, "value" ) ) !== undefined
21807 ) {
21808 return ret;
21809 }
21810
21811 ret = elem.value;
21812
21813 // Handle most common string cases
21814 if ( typeof ret === "string" ) {
21815 return ret.replace( rreturn, "" );
21816 }
21817
21818 // Handle cases where value is null/undef or number
21819 return ret == null ? "" : ret;
21820 }
21821
21822 return;
21823 }
21824
21825 isFunction = jQuery.isFunction( value );
21826
21827 return this.each( function( i ) {
21828 var val;
21829
21830 if ( this.nodeType !== 1 ) {
21831 return;
21832 }
21833
21834 if ( isFunction ) {
21835 val = value.call( this, i, jQuery( this ).val() );
21836 } else {
21837 val = value;
21838 }
21839
21840 // Treat null/undefined as ""; convert numbers to string
21841 if ( val == null ) {
21842 val = "";
21843
21844 } else if ( typeof val === "number" ) {
21845 val += "";
21846
21847 } else if ( Array.isArray( val ) ) {
21848 val = jQuery.map( val, function( value ) {
21849 return value == null ? "" : value + "";
21850 } );
21851 }
21852
21853 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
21854
21855 // If set returns undefined, fall back to normal setting
21856 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
21857 this.value = val;
21858 }
21859 } );
21860 }
21861 } );
21862
21863 jQuery.extend( {
21864 valHooks: {
21865 option: {
21866 get: function( elem ) {
21867
21868 var val = jQuery.find.attr( elem, "value" );
21869 return val != null ?
21870 val :
21871
21872 // Support: IE <=10 - 11 only
21873 // option.text throws exceptions (#14686, #14858)
21874 // Strip and collapse whitespace
21875 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
21876 stripAndCollapse( jQuery.text( elem ) );
21877 }
21878 },
21879 select: {
21880 get: function( elem ) {
21881 var value, option, i,
21882 options = elem.options,
21883 index = elem.selectedIndex,
21884 one = elem.type === "select-one",
21885 values = one ? null : [],
21886 max = one ? index + 1 : options.length;
21887
21888 if ( index < 0 ) {
21889 i = max;
21890
21891 } else {
21892 i = one ? index : 0;
21893 }
21894
21895 // Loop through all the selected options
21896 for ( ; i < max; i++ ) {
21897 option = options[ i ];
21898
21899 // Support: IE <=9 only
21900 // IE8-9 doesn't update selected after form reset (#2551)
21901 if ( ( option.selected || i === index ) &&
21902
21903 // Don't return options that are disabled or in a disabled optgroup
21904 !option.disabled &&
21905 ( !option.parentNode.disabled ||
21906 !nodeName( option.parentNode, "optgroup" ) ) ) {
21907
21908 // Get the specific value for the option
21909 value = jQuery( option ).val();
21910
21911 // We don't need an array for one selects
21912 if ( one ) {
21913 return value;
21914 }
21915
21916 // Multi-Selects return an array
21917 values.push( value );
21918 }
21919 }
21920
21921 return values;
21922 },
21923
21924 set: function( elem, value ) {
21925 var optionSet, option,
21926 options = elem.options,
21927 values = jQuery.makeArray( value ),
21928 i = options.length;
21929
21930 while ( i-- ) {
21931 option = options[ i ];
21932
21933 /* eslint-disable no-cond-assign */
21934
21935 if ( option.selected =
21936 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
21937 ) {
21938 optionSet = true;
21939 }
21940
21941 /* eslint-enable no-cond-assign */
21942 }
21943
21944 // Force browsers to behave consistently when non-matching value is set
21945 if ( !optionSet ) {
21946 elem.selectedIndex = -1;
21947 }
21948 return values;
21949 }
21950 }
21951 }
21952 } );
21953
21954 // Radios and checkboxes getter/setter
21955 jQuery.each( [ "radio", "checkbox" ], function() {
21956 jQuery.valHooks[ this ] = {
21957 set: function( elem, value ) {
21958 if ( Array.isArray( value ) ) {
21959 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
21960 }
21961 }
21962 };
21963 if ( !support.checkOn ) {
21964 jQuery.valHooks[ this ].get = function( elem ) {
21965 return elem.getAttribute( "value" ) === null ? "on" : elem.value;
21966 };
21967 }
21968 } );
21969
21970
21971
21972
21973 // Return jQuery for attributes-only inclusion
21974
21975
21976 var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
21977
21978 jQuery.extend( jQuery.event, {
21979
21980 trigger: function( event, data, elem, onlyHandlers ) {
21981
21982 var i, cur, tmp, bubbleType, ontype, handle, special,
21983 eventPath = [ elem || document ],
21984 type = hasOwn.call( event, "type" ) ? event.type : event,
21985 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
21986
21987 cur = tmp = elem = elem || document;
21988
21989 // Don't do events on text and comment nodes
21990 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
21991 return;
21992 }
21993
21994 // focus/blur morphs to focusin/out; ensure we're not firing them right now
21995 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
21996 return;
21997 }
21998
21999 if ( type.indexOf( "." ) > -1 ) {
22000
22001 // Namespaced trigger; create a regexp to match event type in handle()
22002 namespaces = type.split( "." );
22003 type = namespaces.shift();
22004 namespaces.sort();
22005 }
22006 ontype = type.indexOf( ":" ) < 0 && "on" + type;
22007
22008 // Caller can pass in a jQuery.Event object, Object, or just an event type string
22009 event = event[ jQuery.expando ] ?
22010 event :
22011 new jQuery.Event( type, typeof event === "object" && event );
22012
22013 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
22014 event.isTrigger = onlyHandlers ? 2 : 3;
22015 event.namespace = namespaces.join( "." );
22016 event.rnamespace = event.namespace ?
22017 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
22018 null;
22019
22020 // Clean up the event in case it is being reused
22021 event.result = undefined;
22022 if ( !event.target ) {
22023 event.target = elem;
22024 }
22025
22026 // Clone any incoming data and prepend the event, creating the handler arg list
22027 data = data == null ?
22028 [ event ] :
22029 jQuery.makeArray( data, [ event ] );
22030
22031 // Allow special events to draw outside the lines
22032 special = jQuery.event.special[ type ] || {};
22033 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
22034 return;
22035 }
22036
22037 // Determine event propagation path in advance, per W3C events spec (#9951)
22038 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
22039 if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
22040
22041 bubbleType = special.delegateType || type;
22042 if ( !rfocusMorph.test( bubbleType + type ) ) {
22043 cur = cur.parentNode;
22044 }
22045 for ( ; cur; cur = cur.parentNode ) {
22046 eventPath.push( cur );
22047 tmp = cur;
22048 }
22049
22050 // Only add window if we got to document (e.g., not plain obj or detached DOM)
22051 if ( tmp === ( elem.ownerDocument || document ) ) {
22052 eventPath.push( tmp.defaultView || tmp.parentWindow || window );
22053 }
22054 }
22055
22056 // Fire handlers on the event path
22057 i = 0;
22058 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
22059
22060 event.type = i > 1 ?
22061 bubbleType :
22062 special.bindType || type;
22063
22064 // jQuery handler
22065 handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
22066 dataPriv.get( cur, "handle" );
22067 if ( handle ) {
22068 handle.apply( cur, data );
22069 }
22070
22071 // Native handler
22072 handle = ontype && cur[ ontype ];
22073 if ( handle && handle.apply && acceptData( cur ) ) {
22074 event.result = handle.apply( cur, data );
22075 if ( event.result === false ) {
22076 event.preventDefault();
22077 }
22078 }
22079 }
22080 event.type = type;
22081
22082 // If nobody prevented the default action, do it now
22083 if ( !onlyHandlers && !event.isDefaultPrevented() ) {
22084
22085 if ( ( !special._default ||
22086 special._default.apply( eventPath.pop(), data ) === false ) &&
22087 acceptData( elem ) ) {
22088
22089 // Call a native DOM method on the target with the same name as the event.
22090 // Don't do default actions on window, that's where global variables be (#6170)
22091 if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
22092
22093 // Don't re-trigger an onFOO event when we call its FOO() method
22094 tmp = elem[ ontype ];
22095
22096 if ( tmp ) {
22097 elem[ ontype ] = null;
22098 }
22099
22100 // Prevent re-triggering of the same event, since we already bubbled it above
22101 jQuery.event.triggered = type;
22102 elem[ type ]();
22103 jQuery.event.triggered = undefined;
22104
22105 if ( tmp ) {
22106 elem[ ontype ] = tmp;
22107 }
22108 }
22109 }
22110 }
22111
22112 return event.result;
22113 },
22114
22115 // Piggyback on a donor event to simulate a different one
22116 // Used only for `focus(in | out)` events
22117 simulate: function( type, elem, event ) {
22118 var e = jQuery.extend(
22119 new jQuery.Event(),
22120 event,
22121 {
22122 type: type,
22123 isSimulated: true
22124 }
22125 );
22126
22127 jQuery.event.trigger( e, null, elem );
22128 }
22129
22130 } );
22131
22132 jQuery.fn.extend( {
22133
22134 trigger: function( type, data ) {
22135 return this.each( function() {
22136 jQuery.event.trigger( type, data, this );
22137 } );
22138 },
22139 triggerHandler: function( type, data ) {
22140 var elem = this[ 0 ];
22141 if ( elem ) {
22142 return jQuery.event.trigger( type, data, elem, true );
22143 }
22144 }
22145 } );
22146
22147
22148 jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
22149 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
22150 "change select submit keydown keypress keyup contextmenu" ).split( " " ),
22151 function( i, name ) {
22152
22153 // Handle event binding
22154 jQuery.fn[ name ] = function( data, fn ) {
22155 return arguments.length > 0 ?
22156 this.on( name, null, data, fn ) :
22157 this.trigger( name );
22158 };
22159 } );
22160
22161 jQuery.fn.extend( {
22162 hover: function( fnOver, fnOut ) {
22163 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
22164 }
22165 } );
22166
22167
22168
22169
22170 support.focusin = "onfocusin" in window;
22171
22172
22173 // Support: Firefox <=44
22174 // Firefox doesn't have focus(in | out) events
22175 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
22176 //
22177 // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
22178 // focus(in | out) events fire after focus & blur events,
22179 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
22180 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
22181 if ( !support.focusin ) {
22182 jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
22183
22184 // Attach a single capturing handler on the document while someone wants focusin/focusout
22185 var handler = function( event ) {
22186 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
22187 };
22188
22189 jQuery.event.special[ fix ] = {
22190 setup: function() {
22191 var doc = this.ownerDocument || this,
22192 attaches = dataPriv.access( doc, fix );
22193
22194 if ( !attaches ) {
22195 doc.addEventListener( orig, handler, true );
22196 }
22197 dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
22198 },
22199 teardown: function() {
22200 var doc = this.ownerDocument || this,
22201 attaches = dataPriv.access( doc, fix ) - 1;
22202
22203 if ( !attaches ) {
22204 doc.removeEventListener( orig, handler, true );
22205 dataPriv.remove( doc, fix );
22206
22207 } else {
22208 dataPriv.access( doc, fix, attaches );
22209 }
22210 }
22211 };
22212 } );
22213 }
22214 var location = window.location;
22215
22216 var nonce = jQuery.now();
22217
22218 var rquery = ( /\?/ );
22219
22220
22221
22222 // Cross-browser xml parsing
22223 jQuery.parseXML = function( data ) {
22224 var xml;
22225 if ( !data || typeof data !== "string" ) {
22226 return null;
22227 }
22228
22229 // Support: IE 9 - 11 only
22230 // IE throws on parseFromString with invalid input.
22231 try {
22232 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
22233 } catch ( e ) {
22234 xml = undefined;
22235 }
22236
22237 if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
22238 jQuery.error( "Invalid XML: " + data );
22239 }
22240 return xml;
22241 };
22242
22243
22244 var
22245 rbracket = /\[\]$/,
22246 rCRLF = /\r?\n/g,
22247 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
22248 rsubmittable = /^(?:input|select|textarea|keygen)/i;
22249
22250 function buildParams( prefix, obj, traditional, add ) {
22251 var name;
22252
22253 if ( Array.isArray( obj ) ) {
22254
22255 // Serialize array item.
22256 jQuery.each( obj, function( i, v ) {
22257 if ( traditional || rbracket.test( prefix ) ) {
22258
22259 // Treat each array item as a scalar.
22260 add( prefix, v );
22261
22262 } else {
22263
22264 // Item is non-scalar (array or object), encode its numeric index.
22265 buildParams(
22266 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
22267 v,
22268 traditional,
22269 add
22270 );
22271 }
22272 } );
22273
22274 } else if ( !traditional && jQuery.type( obj ) === "object" ) {
22275
22276 // Serialize object item.
22277 for ( name in obj ) {
22278 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
22279 }
22280
22281 } else {
22282
22283 // Serialize scalar item.
22284 add( prefix, obj );
22285 }
22286 }
22287
22288 // Serialize an array of form elements or a set of
22289 // key/values into a query string
22290 jQuery.param = function( a, traditional ) {
22291 var prefix,
22292 s = [],
22293 add = function( key, valueOrFunction ) {
22294
22295 // If value is a function, invoke it and use its return value
22296 var value = jQuery.isFunction( valueOrFunction ) ?
22297 valueOrFunction() :
22298 valueOrFunction;
22299
22300 s[ s.length ] = encodeURIComponent( key ) + "=" +
22301 encodeURIComponent( value == null ? "" : value );
22302 };
22303
22304 // If an array was passed in, assume that it is an array of form elements.
22305 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
22306
22307 // Serialize the form elements
22308 jQuery.each( a, function() {
22309 add( this.name, this.value );
22310 } );
22311
22312 } else {
22313
22314 // If traditional, encode the "old" way (the way 1.3.2 or older
22315 // did it), otherwise encode params recursively.
22316 for ( prefix in a ) {
22317 buildParams( prefix, a[ prefix ], traditional, add );
22318 }
22319 }
22320
22321 // Return the resulting serialization
22322 return s.join( "&" );
22323 };
22324
22325 jQuery.fn.extend( {
22326 serialize: function() {
22327 return jQuery.param( this.serializeArray() );
22328 },
22329 serializeArray: function() {
22330 return this.map( function() {
22331
22332 // Can add propHook for "elements" to filter or add form elements
22333 var elements = jQuery.prop( this, "elements" );
22334 return elements ? jQuery.makeArray( elements ) : this;
22335 } )
22336 .filter( function() {
22337 var type = this.type;
22338
22339 // Use .is( ":disabled" ) so that fieldset[disabled] works
22340 return this.name && !jQuery( this ).is( ":disabled" ) &&
22341 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
22342 ( this.checked || !rcheckableType.test( type ) );
22343 } )
22344 .map( function( i, elem ) {
22345 var val = jQuery( this ).val();
22346
22347 if ( val == null ) {
22348 return null;
22349 }
22350
22351 if ( Array.isArray( val ) ) {
22352 return jQuery.map( val, function( val ) {
22353 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
22354 } );
22355 }
22356
22357 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
22358 } ).get();
22359 }
22360 } );
22361
22362
22363 var
22364 r20 = /%20/g,
22365 rhash = /#.*$/,
22366 rantiCache = /([?&])_=[^&]*/,
22367 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
22368
22369 // #7653, #8125, #8152: local protocol detection
22370 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
22371 rnoContent = /^(?:GET|HEAD)$/,
22372 rprotocol = /^\/\//,
22373
22374 /* Prefilters
22375 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
22376 * 2) These are called:
22377 * - BEFORE asking for a transport
22378 * - AFTER param serialization (s.data is a string if s.processData is true)
22379 * 3) key is the dataType
22380 * 4) the catchall symbol "*" can be used
22381 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
22382 */
22383 prefilters = {},
22384
22385 /* Transports bindings
22386 * 1) key is the dataType
22387 * 2) the catchall symbol "*" can be used
22388 * 3) selection will start with transport dataType and THEN go to "*" if needed
22389 */
22390 transports = {},
22391
22392 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
22393 allTypes = "*/".concat( "*" ),
22394
22395 // Anchor tag for parsing the document origin
22396 originAnchor = document.createElement( "a" );
22397 originAnchor.href = location.href;
22398
22399 // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
22400 function addToPrefiltersOrTransports( structure ) {
22401
22402 // dataTypeExpression is optional and defaults to "*"
22403 return function( dataTypeExpression, func ) {
22404
22405 if ( typeof dataTypeExpression !== "string" ) {
22406 func = dataTypeExpression;
22407 dataTypeExpression = "*";
22408 }
22409
22410 var dataType,
22411 i = 0,
22412 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
22413
22414 if ( jQuery.isFunction( func ) ) {
22415
22416 // For each dataType in the dataTypeExpression
22417 while ( ( dataType = dataTypes[ i++ ] ) ) {
22418
22419 // Prepend if requested
22420 if ( dataType[ 0 ] === "+" ) {
22421 dataType = dataType.slice( 1 ) || "*";
22422 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
22423
22424 // Otherwise append
22425 } else {
22426 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
22427 }
22428 }
22429 }
22430 };
22431 }
22432
22433 // Base inspection function for prefilters and transports
22434 function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
22435
22436 var inspected = {},
22437 seekingTransport = ( structure === transports );
22438
22439 function inspect( dataType ) {
22440 var selected;
22441 inspected[ dataType ] = true;
22442 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
22443 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
22444 if ( typeof dataTypeOrTransport === "string" &&
22445 !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
22446
22447 options.dataTypes.unshift( dataTypeOrTransport );
22448 inspect( dataTypeOrTransport );
22449 return false;
22450 } else if ( seekingTransport ) {
22451 return !( selected = dataTypeOrTransport );
22452 }
22453 } );
22454 return selected;
22455 }
22456
22457 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
22458 }
22459
22460 // A special extend for ajax options
22461 // that takes "flat" options (not to be deep extended)
22462 // Fixes #9887
22463 function ajaxExtend( target, src ) {
22464 var key, deep,
22465 flatOptions = jQuery.ajaxSettings.flatOptions || {};
22466
22467 for ( key in src ) {
22468 if ( src[ key ] !== undefined ) {
22469 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
22470 }
22471 }
22472 if ( deep ) {
22473 jQuery.extend( true, target, deep );
22474 }
22475
22476 return target;
22477 }
22478
22479 /* Handles responses to an ajax request:
22480 * - finds the right dataType (mediates between content-type and expected dataType)
22481 * - returns the corresponding response
22482 */
22483 function ajaxHandleResponses( s, jqXHR, responses ) {
22484
22485 var ct, type, finalDataType, firstDataType,
22486 contents = s.contents,
22487 dataTypes = s.dataTypes;
22488
22489 // Remove auto dataType and get content-type in the process
22490 while ( dataTypes[ 0 ] === "*" ) {
22491 dataTypes.shift();
22492 if ( ct === undefined ) {
22493 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
22494 }
22495 }
22496
22497 // Check if we're dealing with a known content-type
22498 if ( ct ) {
22499 for ( type in contents ) {
22500 if ( contents[ type ] && contents[ type ].test( ct ) ) {
22501 dataTypes.unshift( type );
22502 break;
22503 }
22504 }
22505 }
22506
22507 // Check to see if we have a response for the expected dataType
22508 if ( dataTypes[ 0 ] in responses ) {
22509 finalDataType = dataTypes[ 0 ];
22510 } else {
22511
22512 // Try convertible dataTypes
22513 for ( type in responses ) {
22514 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
22515 finalDataType = type;
22516 break;
22517 }
22518 if ( !firstDataType ) {
22519 firstDataType = type;
22520 }
22521 }
22522
22523 // Or just use first one
22524 finalDataType = finalDataType || firstDataType;
22525 }
22526
22527 // If we found a dataType
22528 // We add the dataType to the list if needed
22529 // and return the corresponding response
22530 if ( finalDataType ) {
22531 if ( finalDataType !== dataTypes[ 0 ] ) {
22532 dataTypes.unshift( finalDataType );
22533 }
22534 return responses[ finalDataType ];
22535 }
22536 }
22537
22538 /* Chain conversions given the request and the original response
22539 * Also sets the responseXXX fields on the jqXHR instance
22540 */
22541 function ajaxConvert( s, response, jqXHR, isSuccess ) {
22542 var conv2, current, conv, tmp, prev,
22543 converters = {},
22544
22545 // Work with a copy of dataTypes in case we need to modify it for conversion
22546 dataTypes = s.dataTypes.slice();
22547
22548 // Create converters map with lowercased keys
22549 if ( dataTypes[ 1 ] ) {
22550 for ( conv in s.converters ) {
22551 converters[ conv.toLowerCase() ] = s.converters[ conv ];
22552 }
22553 }
22554
22555 current = dataTypes.shift();
22556
22557 // Convert to each sequential dataType
22558 while ( current ) {
22559
22560 if ( s.responseFields[ current ] ) {
22561 jqXHR[ s.responseFields[ current ] ] = response;
22562 }
22563
22564 // Apply the dataFilter if provided
22565 if ( !prev && isSuccess && s.dataFilter ) {
22566 response = s.dataFilter( response, s.dataType );
22567 }
22568
22569 prev = current;
22570 current = dataTypes.shift();
22571
22572 if ( current ) {
22573
22574 // There's only work to do if current dataType is non-auto
22575 if ( current === "*" ) {
22576
22577 current = prev;
22578
22579 // Convert response if prev dataType is non-auto and differs from current
22580 } else if ( prev !== "*" && prev !== current ) {
22581
22582 // Seek a direct converter
22583 conv = converters[ prev + " " + current ] || converters[ "* " + current ];
22584
22585 // If none found, seek a pair
22586 if ( !conv ) {
22587 for ( conv2 in converters ) {
22588
22589 // If conv2 outputs current
22590 tmp = conv2.split( " " );
22591 if ( tmp[ 1 ] === current ) {
22592
22593 // If prev can be converted to accepted input
22594 conv = converters[ prev + " " + tmp[ 0 ] ] ||
22595 converters[ "* " + tmp[ 0 ] ];
22596 if ( conv ) {
22597
22598 // Condense equivalence converters
22599 if ( conv === true ) {
22600 conv = converters[ conv2 ];
22601
22602 // Otherwise, insert the intermediate dataType
22603 } else if ( converters[ conv2 ] !== true ) {
22604 current = tmp[ 0 ];
22605 dataTypes.unshift( tmp[ 1 ] );
22606 }
22607 break;
22608 }
22609 }
22610 }
22611 }
22612
22613 // Apply converter (if not an equivalence)
22614 if ( conv !== true ) {
22615
22616 // Unless errors are allowed to bubble, catch and return them
22617 if ( conv && s.throws ) {
22618 response = conv( response );
22619 } else {
22620 try {
22621 response = conv( response );
22622 } catch ( e ) {
22623 return {
22624 state: "parsererror",
22625 error: conv ? e : "No conversion from " + prev + " to " + current
22626 };
22627 }
22628 }
22629 }
22630 }
22631 }
22632 }
22633
22634 return { state: "success", data: response };
22635 }
22636
22637 jQuery.extend( {
22638
22639 // Counter for holding the number of active queries
22640 active: 0,
22641
22642 // Last-Modified header cache for next request
22643 lastModified: {},
22644 etag: {},
22645
22646 ajaxSettings: {
22647 url: location.href,
22648 type: "GET",
22649 isLocal: rlocalProtocol.test( location.protocol ),
22650 global: true,
22651 processData: true,
22652 async: true,
22653 contentType: "application/x-www-form-urlencoded; charset=UTF-8",
22654
22655 /*
22656 timeout: 0,
22657 data: null,
22658 dataType: null,
22659 username: null,
22660 password: null,
22661 cache: null,
22662 throws: false,
22663 traditional: false,
22664 headers: {},
22665 */
22666
22667 accepts: {
22668 "*": allTypes,
22669 text: "text/plain",
22670 html: "text/html",
22671 xml: "application/xml, text/xml",
22672 json: "application/json, text/javascript"
22673 },
22674
22675 contents: {
22676 xml: /\bxml\b/,
22677 html: /\bhtml/,
22678 json: /\bjson\b/
22679 },
22680
22681 responseFields: {
22682 xml: "responseXML",
22683 text: "responseText",
22684 json: "responseJSON"
22685 },
22686
22687 // Data converters
22688 // Keys separate source (or catchall "*") and destination types with a single space
22689 converters: {
22690
22691 // Convert anything to text
22692 "* text": String,
22693
22694 // Text to html (true = no transformation)
22695 "text html": true,
22696
22697 // Evaluate text as a json expression
22698 "text json": JSON.parse,
22699
22700 // Parse text as xml
22701 "text xml": jQuery.parseXML
22702 },
22703
22704 // For options that shouldn't be deep extended:
22705 // you can add your own custom options here if
22706 // and when you create one that shouldn't be
22707 // deep extended (see ajaxExtend)
22708 flatOptions: {
22709 url: true,
22710 context: true
22711 }
22712 },
22713
22714 // Creates a full fledged settings object into target
22715 // with both ajaxSettings and settings fields.
22716 // If target is omitted, writes into ajaxSettings.
22717 ajaxSetup: function( target, settings ) {
22718 return settings ?
22719
22720 // Building a settings object
22721 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
22722
22723 // Extending ajaxSettings
22724 ajaxExtend( jQuery.ajaxSettings, target );
22725 },
22726
22727 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
22728 ajaxTransport: addToPrefiltersOrTransports( transports ),
22729
22730 // Main method
22731 ajax: function( url, options ) {
22732
22733 // If url is an object, simulate pre-1.5 signature
22734 if ( typeof url === "object" ) {
22735 options = url;
22736 url = undefined;
22737 }
22738
22739 // Force options to be an object
22740 options = options || {};
22741
22742 var transport,
22743
22744 // URL without anti-cache param
22745 cacheURL,
22746
22747 // Response headers
22748 responseHeadersString,
22749 responseHeaders,
22750
22751 // timeout handle
22752 timeoutTimer,
22753
22754 // Url cleanup var
22755 urlAnchor,
22756
22757 // Request state (becomes false upon send and true upon completion)
22758 completed,
22759
22760 // To know if global events are to be dispatched
22761 fireGlobals,
22762
22763 // Loop variable
22764 i,
22765
22766 // uncached part of the url
22767 uncached,
22768
22769 // Create the final options object
22770 s = jQuery.ajaxSetup( {}, options ),
22771
22772 // Callbacks context
22773 callbackContext = s.context || s,
22774
22775 // Context for global events is callbackContext if it is a DOM node or jQuery collection
22776 globalEventContext = s.context &&
22777 ( callbackContext.nodeType || callbackContext.jquery ) ?
22778 jQuery( callbackContext ) :
22779 jQuery.event,
22780
22781 // Deferreds
22782 deferred = jQuery.Deferred(),
22783 completeDeferred = jQuery.Callbacks( "once memory" ),
22784
22785 // Status-dependent callbacks
22786 statusCode = s.statusCode || {},
22787
22788 // Headers (they are sent all at once)
22789 requestHeaders = {},
22790 requestHeadersNames = {},
22791
22792 // Default abort message
22793 strAbort = "canceled",
22794
22795 // Fake xhr
22796 jqXHR = {
22797 readyState: 0,
22798
22799 // Builds headers hashtable if needed
22800 getResponseHeader: function( key ) {
22801 var match;
22802 if ( completed ) {
22803 if ( !responseHeaders ) {
22804 responseHeaders = {};
22805 while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
22806 responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
22807 }
22808 }
22809 match = responseHeaders[ key.toLowerCase() ];
22810 }
22811 return match == null ? null : match;
22812 },
22813
22814 // Raw string
22815 getAllResponseHeaders: function() {
22816 return completed ? responseHeadersString : null;
22817 },
22818
22819 // Caches the header
22820 setRequestHeader: function( name, value ) {
22821 if ( completed == null ) {
22822 name = requestHeadersNames[ name.toLowerCase() ] =
22823 requestHeadersNames[ name.toLowerCase() ] || name;
22824 requestHeaders[ name ] = value;
22825 }
22826 return this;
22827 },
22828
22829 // Overrides response content-type header
22830 overrideMimeType: function( type ) {
22831 if ( completed == null ) {
22832 s.mimeType = type;
22833 }
22834 return this;
22835 },
22836
22837 // Status-dependent callbacks
22838 statusCode: function( map ) {
22839 var code;
22840 if ( map ) {
22841 if ( completed ) {
22842
22843 // Execute the appropriate callbacks
22844 jqXHR.always( map[ jqXHR.status ] );
22845 } else {
22846
22847 // Lazy-add the new callbacks in a way that preserves old ones
22848 for ( code in map ) {
22849 statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
22850 }
22851 }
22852 }
22853 return this;
22854 },
22855
22856 // Cancel the request
22857 abort: function( statusText ) {
22858 var finalText = statusText || strAbort;
22859 if ( transport ) {
22860 transport.abort( finalText );
22861 }
22862 done( 0, finalText );
22863 return this;
22864 }
22865 };
22866
22867 // Attach deferreds
22868 deferred.promise( jqXHR );
22869
22870 // Add protocol if not provided (prefilters might expect it)
22871 // Handle falsy url in the settings object (#10093: consistency with old signature)
22872 // We also use the url parameter if available
22873 s.url = ( ( url || s.url || location.href ) + "" )
22874 .replace( rprotocol, location.protocol + "//" );
22875
22876 // Alias method option to type as per ticket #12004
22877 s.type = options.method || options.type || s.method || s.type;
22878
22879 // Extract dataTypes list
22880 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
22881
22882 // A cross-domain request is in order when the origin doesn't match the current origin.
22883 if ( s.crossDomain == null ) {
22884 urlAnchor = document.createElement( "a" );
22885
22886 // Support: IE <=8 - 11, Edge 12 - 13
22887 // IE throws exception on accessing the href property if url is malformed,
22888 // e.g. http://example.com:80x/
22889 try {
22890 urlAnchor.href = s.url;
22891
22892 // Support: IE <=8 - 11 only
22893 // Anchor's host property isn't correctly set when s.url is relative
22894 urlAnchor.href = urlAnchor.href;
22895 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
22896 urlAnchor.protocol + "//" + urlAnchor.host;
22897 } catch ( e ) {
22898
22899 // If there is an error parsing the URL, assume it is crossDomain,
22900 // it can be rejected by the transport if it is invalid
22901 s.crossDomain = true;
22902 }
22903 }
22904
22905 // Convert data if not already a string
22906 if ( s.data && s.processData && typeof s.data !== "string" ) {
22907 s.data = jQuery.param( s.data, s.traditional );
22908 }
22909
22910 // Apply prefilters
22911 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
22912
22913 // If request was aborted inside a prefilter, stop there
22914 if ( completed ) {
22915 return jqXHR;
22916 }
22917
22918 // We can fire global events as of now if asked to
22919 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
22920 fireGlobals = jQuery.event && s.global;
22921
22922 // Watch for a new set of requests
22923 if ( fireGlobals && jQuery.active++ === 0 ) {
22924 jQuery.event.trigger( "ajaxStart" );
22925 }
22926
22927 // Uppercase the type
22928 s.type = s.type.toUpperCase();
22929
22930 // Determine if request has content
22931 s.hasContent = !rnoContent.test( s.type );
22932
22933 // Save the URL in case we're toying with the If-Modified-Since
22934 // and/or If-None-Match header later on
22935 // Remove hash to simplify url manipulation
22936 cacheURL = s.url.replace( rhash, "" );
22937
22938 // More options handling for requests with no content
22939 if ( !s.hasContent ) {
22940
22941 // Remember the hash so we can put it back
22942 uncached = s.url.slice( cacheURL.length );
22943
22944 // If data is available, append data to url
22945 if ( s.data ) {
22946 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
22947
22948 // #9682: remove data so that it's not used in an eventual retry
22949 delete s.data;
22950 }
22951
22952 // Add or update anti-cache param if needed
22953 if ( s.cache === false ) {
22954 cacheURL = cacheURL.replace( rantiCache, "$1" );
22955 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
22956 }
22957
22958 // Put hash and anti-cache on the URL that will be requested (gh-1732)
22959 s.url = cacheURL + uncached;
22960
22961 // Change '%20' to '+' if this is encoded form body content (gh-2658)
22962 } else if ( s.data && s.processData &&
22963 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
22964 s.data = s.data.replace( r20, "+" );
22965 }
22966
22967 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
22968 if ( s.ifModified ) {
22969 if ( jQuery.lastModified[ cacheURL ] ) {
22970 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
22971 }
22972 if ( jQuery.etag[ cacheURL ] ) {
22973 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
22974 }
22975 }
22976
22977 // Set the correct header, if data is being sent
22978 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
22979 jqXHR.setRequestHeader( "Content-Type", s.contentType );
22980 }
22981
22982 // Set the Accepts header for the server, depending on the dataType
22983 jqXHR.setRequestHeader(
22984 "Accept",
22985 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
22986 s.accepts[ s.dataTypes[ 0 ] ] +
22987 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
22988 s.accepts[ "*" ]
22989 );
22990
22991 // Check for headers option
22992 for ( i in s.headers ) {
22993 jqXHR.setRequestHeader( i, s.headers[ i ] );
22994 }
22995
22996 // Allow custom headers/mimetypes and early abort
22997 if ( s.beforeSend &&
22998 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
22999
23000 // Abort if not done already and return
23001 return jqXHR.abort();
23002 }
23003
23004 // Aborting is no longer a cancellation
23005 strAbort = "abort";
23006
23007 // Install callbacks on deferreds
23008 completeDeferred.add( s.complete );
23009 jqXHR.done( s.success );
23010 jqXHR.fail( s.error );
23011
23012 // Get transport
23013 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
23014
23015 // If no transport, we auto-abort
23016 if ( !transport ) {
23017 done( -1, "No Transport" );
23018 } else {
23019 jqXHR.readyState = 1;
23020
23021 // Send global event
23022 if ( fireGlobals ) {
23023 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
23024 }
23025
23026 // If request was aborted inside ajaxSend, stop there
23027 if ( completed ) {
23028 return jqXHR;
23029 }
23030
23031 // Timeout
23032 if ( s.async && s.timeout > 0 ) {
23033 timeoutTimer = window.setTimeout( function() {
23034 jqXHR.abort( "timeout" );
23035 }, s.timeout );
23036 }
23037
23038 try {
23039 completed = false;
23040 transport.send( requestHeaders, done );
23041 } catch ( e ) {
23042
23043 // Rethrow post-completion exceptions
23044 if ( completed ) {
23045 throw e;
23046 }
23047
23048 // Propagate others as results
23049 done( -1, e );
23050 }
23051 }
23052
23053 // Callback for when everything is done
23054 function done( status, nativeStatusText, responses, headers ) {
23055 var isSuccess, success, error, response, modified,
23056 statusText = nativeStatusText;
23057
23058 // Ignore repeat invocations
23059 if ( completed ) {
23060 return;
23061 }
23062
23063 completed = true;
23064
23065 // Clear timeout if it exists
23066 if ( timeoutTimer ) {
23067 window.clearTimeout( timeoutTimer );
23068 }
23069
23070 // Dereference transport for early garbage collection
23071 // (no matter how long the jqXHR object will be used)
23072 transport = undefined;
23073
23074 // Cache response headers
23075 responseHeadersString = headers || "";
23076
23077 // Set readyState
23078 jqXHR.readyState = status > 0 ? 4 : 0;
23079
23080 // Determine if successful
23081 isSuccess = status >= 200 && status < 300 || status === 304;
23082
23083 // Get response data
23084 if ( responses ) {
23085 response = ajaxHandleResponses( s, jqXHR, responses );
23086 }
23087
23088 // Convert no matter what (that way responseXXX fields are always set)
23089 response = ajaxConvert( s, response, jqXHR, isSuccess );
23090
23091 // If successful, handle type chaining
23092 if ( isSuccess ) {
23093
23094 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
23095 if ( s.ifModified ) {
23096 modified = jqXHR.getResponseHeader( "Last-Modified" );
23097 if ( modified ) {
23098 jQuery.lastModified[ cacheURL ] = modified;
23099 }
23100 modified = jqXHR.getResponseHeader( "etag" );
23101 if ( modified ) {
23102 jQuery.etag[ cacheURL ] = modified;
23103 }
23104 }
23105
23106 // if no content
23107 if ( status === 204 || s.type === "HEAD" ) {
23108 statusText = "nocontent";
23109
23110 // if not modified
23111 } else if ( status === 304 ) {
23112 statusText = "notmodified";
23113
23114 // If we have data, let's convert it
23115 } else {
23116 statusText = response.state;
23117 success = response.data;
23118 error = response.error;
23119 isSuccess = !error;
23120 }
23121 } else {
23122
23123 // Extract error from statusText and normalize for non-aborts
23124 error = statusText;
23125 if ( status || !statusText ) {
23126 statusText = "error";
23127 if ( status < 0 ) {
23128 status = 0;
23129 }
23130 }
23131 }
23132
23133 // Set data for the fake xhr object
23134 jqXHR.status = status;
23135 jqXHR.statusText = ( nativeStatusText || statusText ) + "";
23136
23137 // Success/Error
23138 if ( isSuccess ) {
23139 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
23140 } else {
23141 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
23142 }
23143
23144 // Status-dependent callbacks
23145 jqXHR.statusCode( statusCode );
23146 statusCode = undefined;
23147
23148 if ( fireGlobals ) {
23149 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
23150 [ jqXHR, s, isSuccess ? success : error ] );
23151 }
23152
23153 // Complete
23154 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
23155
23156 if ( fireGlobals ) {
23157 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
23158
23159 // Handle the global AJAX counter
23160 if ( !( --jQuery.active ) ) {
23161 jQuery.event.trigger( "ajaxStop" );
23162 }
23163 }
23164 }
23165
23166 return jqXHR;
23167 },
23168
23169 getJSON: function( url, data, callback ) {
23170 return jQuery.get( url, data, callback, "json" );
23171 },
23172
23173 getScript: function( url, callback ) {
23174 return jQuery.get( url, undefined, callback, "script" );
23175 }
23176 } );
23177
23178 jQuery.each( [ "get", "post" ], function( i, method ) {
23179 jQuery[ method ] = function( url, data, callback, type ) {
23180
23181 // Shift arguments if data argument was omitted
23182 if ( jQuery.isFunction( data ) ) {
23183 type = type || callback;
23184 callback = data;
23185 data = undefined;
23186 }
23187
23188 // The url can be an options object (which then must have .url)
23189 return jQuery.ajax( jQuery.extend( {
23190 url: url,
23191 type: method,
23192 dataType: type,
23193 data: data,
23194 success: callback
23195 }, jQuery.isPlainObject( url ) && url ) );
23196 };
23197 } );
23198
23199
23200 jQuery._evalUrl = function( url ) {
23201 return jQuery.ajax( {
23202 url: url,
23203
23204 // Make this explicit, since user can override this through ajaxSetup (#11264)
23205 type: "GET",
23206 dataType: "script",
23207 cache: true,
23208 async: false,
23209 global: false,
23210 "throws": true
23211 } );
23212 };
23213
23214
23215 jQuery.fn.extend( {
23216 wrapAll: function( html ) {
23217 var wrap;
23218
23219 if ( this[ 0 ] ) {
23220 if ( jQuery.isFunction( html ) ) {
23221 html = html.call( this[ 0 ] );
23222 }
23223
23224 // The elements to wrap the target around
23225 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
23226
23227 if ( this[ 0 ].parentNode ) {
23228 wrap.insertBefore( this[ 0 ] );
23229 }
23230
23231 wrap.map( function() {
23232 var elem = this;
23233
23234 while ( elem.firstElementChild ) {
23235 elem = elem.firstElementChild;
23236 }
23237
23238 return elem;
23239 } ).append( this );
23240 }
23241
23242 return this;
23243 },
23244
23245 wrapInner: function( html ) {
23246 if ( jQuery.isFunction( html ) ) {
23247 return this.each( function( i ) {
23248 jQuery( this ).wrapInner( html.call( this, i ) );
23249 } );
23250 }
23251
23252 return this.each( function() {
23253 var self = jQuery( this ),
23254 contents = self.contents();
23255
23256 if ( contents.length ) {
23257 contents.wrapAll( html );
23258
23259 } else {
23260 self.append( html );
23261 }
23262 } );
23263 },
23264
23265 wrap: function( html ) {
23266 var isFunction = jQuery.isFunction( html );
23267
23268 return this.each( function( i ) {
23269 jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
23270 } );
23271 },
23272
23273 unwrap: function( selector ) {
23274 this.parent( selector ).not( "body" ).each( function() {
23275 jQuery( this ).replaceWith( this.childNodes );
23276 } );
23277 return this;
23278 }
23279 } );
23280
23281
23282 jQuery.expr.pseudos.hidden = function( elem ) {
23283 return !jQuery.expr.pseudos.visible( elem );
23284 };
23285 jQuery.expr.pseudos.visible = function( elem ) {
23286 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
23287 };
23288
23289
23290
23291
23292 jQuery.ajaxSettings.xhr = function() {
23293 try {
23294 return new window.XMLHttpRequest();
23295 } catch ( e ) {}
23296 };
23297
23298 var xhrSuccessStatus = {
23299
23300 // File protocol always yields status code 0, assume 200
23301 0: 200,
23302
23303 // Support: IE <=9 only
23304 // #1450: sometimes IE returns 1223 when it should be 204
23305 1223: 204
23306 },
23307 xhrSupported = jQuery.ajaxSettings.xhr();
23308
23309 support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
23310 support.ajax = xhrSupported = !!xhrSupported;
23311
23312 jQuery.ajaxTransport( function( options ) {
23313 var callback, errorCallback;
23314
23315 // Cross domain only allowed if supported through XMLHttpRequest
23316 if ( support.cors || xhrSupported && !options.crossDomain ) {
23317 return {
23318 send: function( headers, complete ) {
23319 var i,
23320 xhr = options.xhr();
23321
23322 xhr.open(
23323 options.type,
23324 options.url,
23325 options.async,
23326 options.username,
23327 options.password
23328 );
23329
23330 // Apply custom fields if provided
23331 if ( options.xhrFields ) {
23332 for ( i in options.xhrFields ) {
23333 xhr[ i ] = options.xhrFields[ i ];
23334 }
23335 }
23336
23337 // Override mime type if needed
23338 if ( options.mimeType && xhr.overrideMimeType ) {
23339 xhr.overrideMimeType( options.mimeType );
23340 }
23341
23342 // X-Requested-With header
23343 // For cross-domain requests, seeing as conditions for a preflight are
23344 // akin to a jigsaw puzzle, we simply never set it to be sure.
23345 // (it can always be set on a per-request basis or even using ajaxSetup)
23346 // For same-domain requests, won't change header if already provided.
23347 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
23348 headers[ "X-Requested-With" ] = "XMLHttpRequest";
23349 }
23350
23351 // Set headers
23352 for ( i in headers ) {
23353 xhr.setRequestHeader( i, headers[ i ] );
23354 }
23355
23356 // Callback
23357 callback = function( type ) {
23358 return function() {
23359 if ( callback ) {
23360 callback = errorCallback = xhr.onload =
23361 xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
23362
23363 if ( type === "abort" ) {
23364 xhr.abort();
23365 } else if ( type === "error" ) {
23366
23367 // Support: IE <=9 only
23368 // On a manual native abort, IE9 throws
23369 // errors on any property access that is not readyState
23370 if ( typeof xhr.status !== "number" ) {
23371 complete( 0, "error" );
23372 } else {
23373 complete(
23374
23375 // File: protocol always yields status 0; see #8605, #14207
23376 xhr.status,
23377 xhr.statusText
23378 );
23379 }
23380 } else {
23381 complete(
23382 xhrSuccessStatus[ xhr.status ] || xhr.status,
23383 xhr.statusText,
23384
23385 // Support: IE <=9 only
23386 // IE9 has no XHR2 but throws on binary (trac-11426)
23387 // For XHR2 non-text, let the caller handle it (gh-2498)
23388 ( xhr.responseType || "text" ) !== "text" ||
23389 typeof xhr.responseText !== "string" ?
23390 { binary: xhr.response } :
23391 { text: xhr.responseText },
23392 xhr.getAllResponseHeaders()
23393 );
23394 }
23395 }
23396 };
23397 };
23398
23399 // Listen to events
23400 xhr.onload = callback();
23401 errorCallback = xhr.onerror = callback( "error" );
23402
23403 // Support: IE 9 only
23404 // Use onreadystatechange to replace onabort
23405 // to handle uncaught aborts
23406 if ( xhr.onabort !== undefined ) {
23407 xhr.onabort = errorCallback;
23408 } else {
23409 xhr.onreadystatechange = function() {
23410
23411 // Check readyState before timeout as it changes
23412 if ( xhr.readyState === 4 ) {
23413
23414 // Allow onerror to be called first,
23415 // but that will not handle a native abort
23416 // Also, save errorCallback to a variable
23417 // as xhr.onerror cannot be accessed
23418 window.setTimeout( function() {
23419 if ( callback ) {
23420 errorCallback();
23421 }
23422 } );
23423 }
23424 };
23425 }
23426
23427 // Create the abort callback
23428 callback = callback( "abort" );
23429
23430 try {
23431
23432 // Do send the request (this may raise an exception)
23433 xhr.send( options.hasContent && options.data || null );
23434 } catch ( e ) {
23435
23436 // #14683: Only rethrow if this hasn't been notified as an error yet
23437 if ( callback ) {
23438 throw e;
23439 }
23440 }
23441 },
23442
23443 abort: function() {
23444 if ( callback ) {
23445 callback();
23446 }
23447 }
23448 };
23449 }
23450 } );
23451
23452
23453
23454
23455 // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
23456 jQuery.ajaxPrefilter( function( s ) {
23457 if ( s.crossDomain ) {
23458 s.contents.script = false;
23459 }
23460 } );
23461
23462 // Install script dataType
23463 jQuery.ajaxSetup( {
23464 accepts: {
23465 script: "text/javascript, application/javascript, " +
23466 "application/ecmascript, application/x-ecmascript"
23467 },
23468 contents: {
23469 script: /\b(?:java|ecma)script\b/
23470 },
23471 converters: {
23472 "text script": function( text ) {
23473 jQuery.globalEval( text );
23474 return text;
23475 }
23476 }
23477 } );
23478
23479 // Handle cache's special case and crossDomain
23480 jQuery.ajaxPrefilter( "script", function( s ) {
23481 if ( s.cache === undefined ) {
23482 s.cache = false;
23483 }
23484 if ( s.crossDomain ) {
23485 s.type = "GET";
23486 }
23487 } );
23488
23489 // Bind script tag hack transport
23490 jQuery.ajaxTransport( "script", function( s ) {
23491
23492 // This transport only deals with cross domain requests
23493 if ( s.crossDomain ) {
23494 var script, callback;
23495 return {
23496 send: function( _, complete ) {
23497 script = jQuery( "<script>" ).prop( {
23498 charset: s.scriptCharset,
23499 src: s.url
23500 } ).on(
23501 "load error",
23502 callback = function( evt ) {
23503 script.remove();
23504 callback = null;
23505 if ( evt ) {
23506 complete( evt.type === "error" ? 404 : 200, evt.type );
23507 }
23508 }
23509 );
23510
23511 // Use native DOM manipulation to avoid our domManip AJAX trickery
23512 document.head.appendChild( script[ 0 ] );
23513 },
23514 abort: function() {
23515 if ( callback ) {
23516 callback();
23517 }
23518 }
23519 };
23520 }
23521 } );
23522
23523
23524
23525
23526 var oldCallbacks = [],
23527 rjsonp = /(=)\?(?=&|$)|\?\?/;
23528
23529 // Default jsonp settings
23530 jQuery.ajaxSetup( {
23531 jsonp: "callback",
23532 jsonpCallback: function() {
23533 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
23534 this[ callback ] = true;
23535 return callback;
23536 }
23537 } );
23538
23539 // Detect, normalize options and install callbacks for jsonp requests
23540 jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
23541
23542 var callbackName, overwritten, responseContainer,
23543 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
23544 "url" :
23545 typeof s.data === "string" &&
23546 ( s.contentType || "" )
23547 .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
23548 rjsonp.test( s.data ) && "data"
23549 );
23550
23551 // Handle iff the expected data type is "jsonp" or we have a parameter to set
23552 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
23553
23554 // Get callback name, remembering preexisting value associated with it
23555 callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
23556 s.jsonpCallback() :
23557 s.jsonpCallback;
23558
23559 // Insert callback into url or form data
23560 if ( jsonProp ) {
23561 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
23562 } else if ( s.jsonp !== false ) {
23563 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
23564 }
23565
23566 // Use data converter to retrieve json after script execution
23567 s.converters[ "script json" ] = function() {
23568 if ( !responseContainer ) {
23569 jQuery.error( callbackName + " was not called" );
23570 }
23571 return responseContainer[ 0 ];
23572 };
23573
23574 // Force json dataType
23575 s.dataTypes[ 0 ] = "json";
23576
23577 // Install callback
23578 overwritten = window[ callbackName ];
23579 window[ callbackName ] = function() {
23580 responseContainer = arguments;
23581 };
23582
23583 // Clean-up function (fires after converters)
23584 jqXHR.always( function() {
23585
23586 // If previous value didn't exist - remove it
23587 if ( overwritten === undefined ) {
23588 jQuery( window ).removeProp( callbackName );
23589
23590 // Otherwise restore preexisting value
23591 } else {
23592 window[ callbackName ] = overwritten;
23593 }
23594
23595 // Save back as free
23596 if ( s[ callbackName ] ) {
23597
23598 // Make sure that re-using the options doesn't screw things around
23599 s.jsonpCallback = originalSettings.jsonpCallback;
23600
23601 // Save the callback name for future use
23602 oldCallbacks.push( callbackName );
23603 }
23604
23605 // Call if it was a function and we have a response
23606 if ( responseContainer && jQuery.isFunction( overwritten ) ) {
23607 overwritten( responseContainer[ 0 ] );
23608 }
23609
23610 responseContainer = overwritten = undefined;
23611 } );
23612
23613 // Delegate to script
23614 return "script";
23615 }
23616 } );
23617
23618
23619
23620
23621 // Support: Safari 8 only
23622 // In Safari 8 documents created via document.implementation.createHTMLDocument
23623 // collapse sibling forms: the second one becomes a child of the first one.
23624 // Because of that, this security measure has to be disabled in Safari 8.
23625 // https://bugs.webkit.org/show_bug.cgi?id=137337
23626 support.createHTMLDocument = ( function() {
23627 var body = document.implementation.createHTMLDocument( "" ).body;
23628 body.innerHTML = "<form></form><form></form>";
23629 return body.childNodes.length === 2;
23630 } )();
23631
23632
23633 // Argument "data" should be string of html
23634 // context (optional): If specified, the fragment will be created in this context,
23635 // defaults to document
23636 // keepScripts (optional): If true, will include scripts passed in the html string
23637 jQuery.parseHTML = function( data, context, keepScripts ) {
23638 if ( typeof data !== "string" ) {
23639 return [];
23640 }
23641 if ( typeof context === "boolean" ) {
23642 keepScripts = context;
23643 context = false;
23644 }
23645
23646 var base, parsed, scripts;
23647
23648 if ( !context ) {
23649
23650 // Stop scripts or inline event handlers from being executed immediately
23651 // by using document.implementation
23652 if ( support.createHTMLDocument ) {
23653 context = document.implementation.createHTMLDocument( "" );
23654
23655 // Set the base href for the created document
23656 // so any parsed elements with URLs
23657 // are based on the document's URL (gh-2965)
23658 base = context.createElement( "base" );
23659 base.href = document.location.href;
23660 context.head.appendChild( base );
23661 } else {
23662 context = document;
23663 }
23664 }
23665
23666 parsed = rsingleTag.exec( data );
23667 scripts = !keepScripts && [];
23668
23669 // Single tag
23670 if ( parsed ) {
23671 return [ context.createElement( parsed[ 1 ] ) ];
23672 }
23673
23674 parsed = buildFragment( [ data ], context, scripts );
23675
23676 if ( scripts && scripts.length ) {
23677 jQuery( scripts ).remove();
23678 }
23679
23680 return jQuery.merge( [], parsed.childNodes );
23681 };
23682
23683
23684 /**
23685 * Load a url into a page
23686 */
23687 jQuery.fn.load = function( url, params, callback ) {
23688 var selector, type, response,
23689 self = this,
23690 off = url.indexOf( " " );
23691
23692 if ( off > -1 ) {
23693 selector = stripAndCollapse( url.slice( off ) );
23694 url = url.slice( 0, off );
23695 }
23696
23697 // If it's a function
23698 if ( jQuery.isFunction( params ) ) {
23699
23700 // We assume that it's the callback
23701 callback = params;
23702 params = undefined;
23703
23704 // Otherwise, build a param string
23705 } else if ( params && typeof params === "object" ) {
23706 type = "POST";
23707 }
23708
23709 // If we have elements to modify, make the request
23710 if ( self.length > 0 ) {
23711 jQuery.ajax( {
23712 url: url,
23713
23714 // If "type" variable is undefined, then "GET" method will be used.
23715 // Make value of this field explicit since
23716 // user can override it through ajaxSetup method
23717 type: type || "GET",
23718 dataType: "html",
23719 data: params
23720 } ).done( function( responseText ) {
23721
23722 // Save response for use in complete callback
23723 response = arguments;
23724
23725 self.html( selector ?
23726
23727 // If a selector was specified, locate the right elements in a dummy div
23728 // Exclude scripts to avoid IE 'Permission Denied' errors
23729 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
23730
23731 // Otherwise use the full result
23732 responseText );
23733
23734 // If the request succeeds, this function gets "data", "status", "jqXHR"
23735 // but they are ignored because response was set above.
23736 // If it fails, this function gets "jqXHR", "status", "error"
23737 } ).always( callback && function( jqXHR, status ) {
23738 self.each( function() {
23739 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
23740 } );
23741 } );
23742 }
23743
23744 return this;
23745 };
23746
23747
23748
23749
23750 // Attach a bunch of functions for handling common AJAX events
23751 jQuery.each( [
23752 "ajaxStart",
23753 "ajaxStop",
23754 "ajaxComplete",
23755 "ajaxError",
23756 "ajaxSuccess",
23757 "ajaxSend"
23758 ], function( i, type ) {
23759 jQuery.fn[ type ] = function( fn ) {
23760 return this.on( type, fn );
23761 };
23762 } );
23763
23764
23765
23766
23767 jQuery.expr.pseudos.animated = function( elem ) {
23768 return jQuery.grep( jQuery.timers, function( fn ) {
23769 return elem === fn.elem;
23770 } ).length;
23771 };
23772
23773
23774
23775
23776 jQuery.offset = {
23777 setOffset: function( elem, options, i ) {
23778 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
23779 position = jQuery.css( elem, "position" ),
23780 curElem = jQuery( elem ),
23781 props = {};
23782
23783 // Set position first, in-case top/left are set even on static elem
23784 if ( position === "static" ) {
23785 elem.style.position = "relative";
23786 }
23787
23788 curOffset = curElem.offset();
23789 curCSSTop = jQuery.css( elem, "top" );
23790 curCSSLeft = jQuery.css( elem, "left" );
23791 calculatePosition = ( position === "absolute" || position === "fixed" ) &&
23792 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
23793
23794 // Need to be able to calculate position if either
23795 // top or left is auto and position is either absolute or fixed
23796 if ( calculatePosition ) {
23797 curPosition = curElem.position();
23798 curTop = curPosition.top;
23799 curLeft = curPosition.left;
23800
23801 } else {
23802 curTop = parseFloat( curCSSTop ) || 0;
23803 curLeft = parseFloat( curCSSLeft ) || 0;
23804 }
23805
23806 if ( jQuery.isFunction( options ) ) {
23807
23808 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
23809 options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
23810 }
23811
23812 if ( options.top != null ) {
23813 props.top = ( options.top - curOffset.top ) + curTop;
23814 }
23815 if ( options.left != null ) {
23816 props.left = ( options.left - curOffset.left ) + curLeft;
23817 }
23818
23819 if ( "using" in options ) {
23820 options.using.call( elem, props );
23821
23822 } else {
23823 curElem.css( props );
23824 }
23825 }
23826 };
23827
23828 jQuery.fn.extend( {
23829 offset: function( options ) {
23830
23831 // Preserve chaining for setter
23832 if ( arguments.length ) {
23833 return options === undefined ?
23834 this :
23835 this.each( function( i ) {
23836 jQuery.offset.setOffset( this, options, i );
23837 } );
23838 }
23839
23840 var doc, docElem, rect, win,
23841 elem = this[ 0 ];
23842
23843 if ( !elem ) {
23844 return;
23845 }
23846
23847 // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
23848 // Support: IE <=11 only
23849 // Running getBoundingClientRect on a
23850 // disconnected node in IE throws an error
23851 if ( !elem.getClientRects().length ) {
23852 return { top: 0, left: 0 };
23853 }
23854
23855 rect = elem.getBoundingClientRect();
23856
23857 doc = elem.ownerDocument;
23858 docElem = doc.documentElement;
23859 win = doc.defaultView;
23860
23861 return {
23862 top: rect.top + win.pageYOffset - docElem.clientTop,
23863 left: rect.left + win.pageXOffset - docElem.clientLeft
23864 };
23865 },
23866
23867 position: function() {
23868 if ( !this[ 0 ] ) {
23869 return;
23870 }
23871
23872 var offsetParent, offset,
23873 elem = this[ 0 ],
23874 parentOffset = { top: 0, left: 0 };
23875
23876 // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
23877 // because it is its only offset parent
23878 if ( jQuery.css( elem, "position" ) === "fixed" ) {
23879
23880 // Assume getBoundingClientRect is there when computed position is fixed
23881 offset = elem.getBoundingClientRect();
23882
23883 } else {
23884
23885 // Get *real* offsetParent
23886 offsetParent = this.offsetParent();
23887
23888 // Get correct offsets
23889 offset = this.offset();
23890 if ( !nodeName( offsetParent[ 0 ], "html" ) ) {
23891 parentOffset = offsetParent.offset();
23892 }
23893
23894 // Add offsetParent borders
23895 parentOffset = {
23896 top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
23897 left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
23898 };
23899 }
23900
23901 // Subtract parent offsets and element margins
23902 return {
23903 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
23904 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
23905 };
23906 },
23907
23908 // This method will return documentElement in the following cases:
23909 // 1) For the element inside the iframe without offsetParent, this method will return
23910 // documentElement of the parent window
23911 // 2) For the hidden or detached element
23912 // 3) For body or html element, i.e. in case of the html node - it will return itself
23913 //
23914 // but those exceptions were never presented as a real life use-cases
23915 // and might be considered as more preferable results.
23916 //
23917 // This logic, however, is not guaranteed and can change at any point in the future
23918 offsetParent: function() {
23919 return this.map( function() {
23920 var offsetParent = this.offsetParent;
23921
23922 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
23923 offsetParent = offsetParent.offsetParent;
23924 }
23925
23926 return offsetParent || documentElement;
23927 } );
23928 }
23929 } );
23930
23931 // Create scrollLeft and scrollTop methods
23932 jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
23933 var top = "pageYOffset" === prop;
23934
23935 jQuery.fn[ method ] = function( val ) {
23936 return access( this, function( elem, method, val ) {
23937
23938 // Coalesce documents and windows
23939 var win;
23940 if ( jQuery.isWindow( elem ) ) {
23941 win = elem;
23942 } else if ( elem.nodeType === 9 ) {
23943 win = elem.defaultView;
23944 }
23945
23946 if ( val === undefined ) {
23947 return win ? win[ prop ] : elem[ method ];
23948 }
23949
23950 if ( win ) {
23951 win.scrollTo(
23952 !top ? val : win.pageXOffset,
23953 top ? val : win.pageYOffset
23954 );
23955
23956 } else {
23957 elem[ method ] = val;
23958 }
23959 }, method, val, arguments.length );
23960 };
23961 } );
23962
23963 // Support: Safari <=7 - 9.1, Chrome <=37 - 49
23964 // Add the top/left cssHooks using jQuery.fn.position
23965 // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
23966 // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
23967 // getComputedStyle returns percent when specified for top/left/bottom/right;
23968 // rather than make the css module depend on the offset module, just check for it here
23969 jQuery.each( [ "top", "left" ], function( i, prop ) {
23970 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
23971 function( elem, computed ) {
23972 if ( computed ) {
23973 computed = curCSS( elem, prop );
23974
23975 // If curCSS returns percentage, fallback to offset
23976 return rnumnonpx.test( computed ) ?
23977 jQuery( elem ).position()[ prop ] + "px" :
23978 computed;
23979 }
23980 }
23981 );
23982 } );
23983
23984
23985 // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
23986 jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
23987 jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
23988 function( defaultExtra, funcName ) {
23989
23990 // Margin is only for outerHeight, outerWidth
23991 jQuery.fn[ funcName ] = function( margin, value ) {
23992 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
23993 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
23994
23995 return access( this, function( elem, type, value ) {
23996 var doc;
23997
23998 if ( jQuery.isWindow( elem ) ) {
23999
24000 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
24001 return funcName.indexOf( "outer" ) === 0 ?
24002 elem[ "inner" + name ] :
24003 elem.document.documentElement[ "client" + name ];
24004 }
24005
24006 // Get document width or height
24007 if ( elem.nodeType === 9 ) {
24008 doc = elem.documentElement;
24009
24010 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
24011 // whichever is greatest
24012 return Math.max(
24013 elem.body[ "scroll" + name ], doc[ "scroll" + name ],
24014 elem.body[ "offset" + name ], doc[ "offset" + name ],
24015 doc[ "client" + name ]
24016 );
24017 }
24018
24019 return value === undefined ?
24020
24021 // Get width or height on the element, requesting but not forcing parseFloat
24022 jQuery.css( elem, type, extra ) :
24023
24024 // Set width or height on the element
24025 jQuery.style( elem, type, value, extra );
24026 }, type, chainable ? margin : undefined, chainable );
24027 };
24028 } );
24029 } );
24030
24031
24032 jQuery.fn.extend( {
24033
24034 bind: function( types, data, fn ) {
24035 return this.on( types, null, data, fn );
24036 },
24037 unbind: function( types, fn ) {
24038 return this.off( types, null, fn );
24039 },
24040
24041 delegate: function( selector, types, data, fn ) {
24042 return this.on( types, selector, data, fn );
24043 },
24044 undelegate: function( selector, types, fn ) {
24045
24046 // ( namespace ) or ( selector, types [, fn] )
24047 return arguments.length === 1 ?
24048 this.off( selector, "**" ) :
24049 this.off( types, selector || "**", fn );
24050 }
24051 } );
24052
24053 jQuery.holdReady = function( hold ) {
24054 if ( hold ) {
24055 jQuery.readyWait++;
24056 } else {
24057 jQuery.ready( true );
24058 }
24059 };
24060 jQuery.isArray = Array.isArray;
24061 jQuery.parseJSON = JSON.parse;
24062 jQuery.nodeName = nodeName;
24063
24064
24065
24066
24067 // Register as a named AMD module, since jQuery can be concatenated with other
24068 // files that may use define, but not via a proper concatenation script that
24069 // understands anonymous AMD modules. A named AMD is safest and most robust
24070 // way to register. Lowercase jquery is used because AMD module names are
24071 // derived from file names, and jQuery is normally delivered in a lowercase
24072 // file name. Do this after creating the global so that if an AMD module wants
24073 // to call noConflict to hide this version of jQuery, it will work.
24074
24075 // Note that for maximum portability, libraries that are not jQuery should
24076 // declare themselves as anonymous modules, and avoid setting a global if an
24077 // AMD loader is present. jQuery is a special case. For more information, see
24078 // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
24079
24080 if ( typeof define === "function" && define.amd ) {
24081 define( "jquery", [], function() {
24082 return jQuery;
24083 } );
24084 }
24085
24086
24087
24088
24089 var
24090
24091 // Map over jQuery in case of overwrite
24092 _jQuery = window.jQuery,
24093
24094 // Map over the $ in case of overwrite
24095 _$ = window.$;
24096
24097 jQuery.noConflict = function( deep ) {
24098 if ( window.$ === jQuery ) {
24099 window.$ = _$;
24100 }
24101
24102 if ( deep && window.jQuery === jQuery ) {
24103 window.jQuery = _jQuery;
24104 }
24105
24106 return jQuery;
24107 };
24108
24109 // Expose jQuery and $ identifiers, even in AMD
24110 // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
24111 // and CommonJS for browser emulators (#13566)
24112 if ( !noGlobal ) {
24113 window.jQuery = window.$ = jQuery;
24114 }
24115
24116
24117
24118
24119 return jQuery;
24120 } );
24121 </script>
24122 <script>/*!
24123 * Bootstrap v3.3.7 (http://getbootstrap.com)
24124 * Copyright 2011-2016 Twitter, Inc.
24125 * Licensed under the MIT license
24126 */
24127
24128 if (typeof jQuery === 'undefined') {
24129 throw new Error('Bootstrap\'s JavaScript requires jQuery')
24130 }
24131
24132 +function ($) {
24133 'use strict';
24134 var version = $.fn.jquery.split(' ')[0].split('.')
24135 if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
24136 throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
24137 }
24138 }(jQuery);
24139
24140 /* ========================================================================
24141 * Bootstrap: transition.js v3.3.7
24142 * http://getbootstrap.com/javascript/#transitions
24143 * ========================================================================
24144 * Copyright 2011-2016 Twitter, Inc.
24145 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24146 * ======================================================================== */
24147
24148
24149 +function ($) {
24150 'use strict';
24151
24152 // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
24153 // ============================================================
24154
24155 function transitionEnd() {
24156 var el = document.createElement('bootstrap')
24157
24158 var transEndEventNames = {
24159 WebkitTransition : 'webkitTransitionEnd',
24160 MozTransition : 'transitionend',
24161 OTransition : 'oTransitionEnd otransitionend',
24162 transition : 'transitionend'
24163 }
24164
24165 for (var name in transEndEventNames) {
24166 if (el.style[name] !== undefined) {
24167 return { end: transEndEventNames[name] }
24168 }
24169 }
24170
24171 return false // explicit for ie8 ( ._.)
24172 }
24173
24174 // http://blog.alexmaccaw.com/css-transitions
24175 $.fn.emulateTransitionEnd = function (duration) {
24176 var called = false
24177 var $el = this
24178 $(this).one('bsTransitionEnd', function () { called = true })
24179 var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
24180 setTimeout(callback, duration)
24181 return this
24182 }
24183
24184 $(function () {
24185 $.support.transition = transitionEnd()
24186
24187 if (!$.support.transition) return
24188
24189 $.event.special.bsTransitionEnd = {
24190 bindType: $.support.transition.end,
24191 delegateType: $.support.transition.end,
24192 handle: function (e) {
24193 if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
24194 }
24195 }
24196 })
24197
24198 }(jQuery);
24199
24200 /* ========================================================================
24201 * Bootstrap: alert.js v3.3.7
24202 * http://getbootstrap.com/javascript/#alerts
24203 * ========================================================================
24204 * Copyright 2011-2016 Twitter, Inc.
24205 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24206 * ======================================================================== */
24207
24208
24209 +function ($) {
24210 'use strict';
24211
24212 // ALERT CLASS DEFINITION
24213 // ======================
24214
24215 var dismiss = '[data-dismiss="alert"]'
24216 var Alert = function (el) {
24217 $(el).on('click', dismiss, this.close)
24218 }
24219
24220 Alert.VERSION = '3.3.7'
24221
24222 Alert.TRANSITION_DURATION = 150
24223
24224 Alert.prototype.close = function (e) {
24225 var $this = $(this)
24226 var selector = $this.attr('data-target')
24227
24228 if (!selector) {
24229 selector = $this.attr('href')
24230 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
24231 }
24232
24233 var $parent = $(selector === '#' ? [] : selector)
24234
24235 if (e) e.preventDefault()
24236
24237 if (!$parent.length) {
24238 $parent = $this.closest('.alert')
24239 }
24240
24241 $parent.trigger(e = $.Event('close.bs.alert'))
24242
24243 if (e.isDefaultPrevented()) return
24244
24245 $parent.removeClass('in')
24246
24247 function removeElement() {
24248 // detach from parent, fire event then clean up data
24249 $parent.detach().trigger('closed.bs.alert').remove()
24250 }
24251
24252 $.support.transition && $parent.hasClass('fade') ?
24253 $parent
24254 .one('bsTransitionEnd', removeElement)
24255 .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
24256 removeElement()
24257 }
24258
24259
24260 // ALERT PLUGIN DEFINITION
24261 // =======================
24262
24263 function Plugin(option) {
24264 return this.each(function () {
24265 var $this = $(this)
24266 var data = $this.data('bs.alert')
24267
24268 if (!data) $this.data('bs.alert', (data = new Alert(this)))
24269 if (typeof option == 'string') data[option].call($this)
24270 })
24271 }
24272
24273 var old = $.fn.alert
24274
24275 $.fn.alert = Plugin
24276 $.fn.alert.Constructor = Alert
24277
24278
24279 // ALERT NO CONFLICT
24280 // =================
24281
24282 $.fn.alert.noConflict = function () {
24283 $.fn.alert = old
24284 return this
24285 }
24286
24287
24288 // ALERT DATA-API
24289 // ==============
24290
24291 $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
24292
24293 }(jQuery);
24294
24295 /* ========================================================================
24296 * Bootstrap: button.js v3.3.7
24297 * http://getbootstrap.com/javascript/#buttons
24298 * ========================================================================
24299 * Copyright 2011-2016 Twitter, Inc.
24300 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24301 * ======================================================================== */
24302
24303
24304 +function ($) {
24305 'use strict';
24306
24307 // BUTTON PUBLIC CLASS DEFINITION
24308 // ==============================
24309
24310 var Button = function (element, options) {
24311 this.$element = $(element)
24312 this.options = $.extend({}, Button.DEFAULTS, options)
24313 this.isLoading = false
24314 }
24315
24316 Button.VERSION = '3.3.7'
24317
24318 Button.DEFAULTS = {
24319 loadingText: 'loading...'
24320 }
24321
24322 Button.prototype.setState = function (state) {
24323 var d = 'disabled'
24324 var $el = this.$element
24325 var val = $el.is('input') ? 'val' : 'html'
24326 var data = $el.data()
24327
24328 state += 'Text'
24329
24330 if (data.resetText == null) $el.data('resetText', $el[val]())
24331
24332 // push to event loop to allow forms to submit
24333 setTimeout($.proxy(function () {
24334 $el[val](data[state] == null ? this.options[state] : data[state])
24335
24336 if (state == 'loadingText') {
24337 this.isLoading = true
24338 $el.addClass(d).attr(d, d).prop(d, true)
24339 } else if (this.isLoading) {
24340 this.isLoading = false
24341 $el.removeClass(d).removeAttr(d).prop(d, false)
24342 }
24343 }, this), 0)
24344 }
24345
24346 Button.prototype.toggle = function () {
24347 var changed = true
24348 var $parent = this.$element.closest('[data-toggle="buttons"]')
24349
24350 if ($parent.length) {
24351 var $input = this.$element.find('input')
24352 if ($input.prop('type') == 'radio') {
24353 if ($input.prop('checked')) changed = false
24354 $parent.find('.active').removeClass('active')
24355 this.$element.addClass('active')
24356 } else if ($input.prop('type') == 'checkbox') {
24357 if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
24358 this.$element.toggleClass('active')
24359 }
24360 $input.prop('checked', this.$element.hasClass('active'))
24361 if (changed) $input.trigger('change')
24362 } else {
24363 this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
24364 this.$element.toggleClass('active')
24365 }
24366 }
24367
24368
24369 // BUTTON PLUGIN DEFINITION
24370 // ========================
24371
24372 function Plugin(option) {
24373 return this.each(function () {
24374 var $this = $(this)
24375 var data = $this.data('bs.button')
24376 var options = typeof option == 'object' && option
24377
24378 if (!data) $this.data('bs.button', (data = new Button(this, options)))
24379
24380 if (option == 'toggle') data.toggle()
24381 else if (option) data.setState(option)
24382 })
24383 }
24384
24385 var old = $.fn.button
24386
24387 $.fn.button = Plugin
24388 $.fn.button.Constructor = Button
24389
24390
24391 // BUTTON NO CONFLICT
24392 // ==================
24393
24394 $.fn.button.noConflict = function () {
24395 $.fn.button = old
24396 return this
24397 }
24398
24399
24400 // BUTTON DATA-API
24401 // ===============
24402
24403 $(document)
24404 .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
24405 var $btn = $(e.target).closest('.btn')
24406 Plugin.call($btn, 'toggle')
24407 if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
24408 // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
24409 e.preventDefault()
24410 // The target component still receive the focus
24411 if ($btn.is('input,button')) $btn.trigger('focus')
24412 else $btn.find('input:visible,button:visible').first().trigger('focus')
24413 }
24414 })
24415 .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
24416 $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
24417 })
24418
24419 }(jQuery);
24420
24421 /* ========================================================================
24422 * Bootstrap: carousel.js v3.3.7
24423 * http://getbootstrap.com/javascript/#carousel
24424 * ========================================================================
24425 * Copyright 2011-2016 Twitter, Inc.
24426 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24427 * ======================================================================== */
24428
24429
24430 +function ($) {
24431 'use strict';
24432
24433 // CAROUSEL CLASS DEFINITION
24434 // =========================
24435
24436 var Carousel = function (element, options) {
24437 this.$element = $(element)
24438 this.$indicators = this.$element.find('.carousel-indicators')
24439 this.options = options
24440 this.paused = null
24441 this.sliding = null
24442 this.interval = null
24443 this.$active = null
24444 this.$items = null
24445
24446 this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
24447
24448 this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
24449 .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
24450 .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
24451 }
24452
24453 Carousel.VERSION = '3.3.7'
24454
24455 Carousel.TRANSITION_DURATION = 600
24456
24457 Carousel.DEFAULTS = {
24458 interval: 5000,
24459 pause: 'hover',
24460 wrap: true,
24461 keyboard: true
24462 }
24463
24464 Carousel.prototype.keydown = function (e) {
24465 if (/input|textarea/i.test(e.target.tagName)) return
24466 switch (e.which) {
24467 case 37: this.prev(); break
24468 case 39: this.next(); break
24469 default: return
24470 }
24471
24472 e.preventDefault()
24473 }
24474
24475 Carousel.prototype.cycle = function (e) {
24476 e || (this.paused = false)
24477
24478 this.interval && clearInterval(this.interval)
24479
24480 this.options.interval
24481 && !this.paused
24482 && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
24483
24484 return this
24485 }
24486
24487 Carousel.prototype.getItemIndex = function (item) {
24488 this.$items = item.parent().children('.item')
24489 return this.$items.index(item || this.$active)
24490 }
24491
24492 Carousel.prototype.getItemForDirection = function (direction, active) {
24493 var activeIndex = this.getItemIndex(active)
24494 var willWrap = (direction == 'prev' && activeIndex === 0)
24495 || (direction == 'next' && activeIndex == (this.$items.length - 1))
24496 if (willWrap && !this.options.wrap) return active
24497 var delta = direction == 'prev' ? -1 : 1
24498 var itemIndex = (activeIndex + delta) % this.$items.length
24499 return this.$items.eq(itemIndex)
24500 }
24501
24502 Carousel.prototype.to = function (pos) {
24503 var that = this
24504 var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
24505
24506 if (pos > (this.$items.length - 1) || pos < 0) return
24507
24508 if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
24509 if (activeIndex == pos) return this.pause().cycle()
24510
24511 return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
24512 }
24513
24514 Carousel.prototype.pause = function (e) {
24515 e || (this.paused = true)
24516
24517 if (this.$element.find('.next, .prev').length && $.support.transition) {
24518 this.$element.trigger($.support.transition.end)
24519 this.cycle(true)
24520 }
24521
24522 this.interval = clearInterval(this.interval)
24523
24524 return this
24525 }
24526
24527 Carousel.prototype.next = function () {
24528 if (this.sliding) return
24529 return this.slide('next')
24530 }
24531
24532 Carousel.prototype.prev = function () {
24533 if (this.sliding) return
24534 return this.slide('prev')
24535 }
24536
24537 Carousel.prototype.slide = function (type, next) {
24538 var $active = this.$element.find('.item.active')
24539 var $next = next || this.getItemForDirection(type, $active)
24540 var isCycling = this.interval
24541 var direction = type == 'next' ? 'left' : 'right'
24542 var that = this
24543
24544 if ($next.hasClass('active')) return (this.sliding = false)
24545
24546 var relatedTarget = $next[0]
24547 var slideEvent = $.Event('slide.bs.carousel', {
24548 relatedTarget: relatedTarget,
24549 direction: direction
24550 })
24551 this.$element.trigger(slideEvent)
24552 if (slideEvent.isDefaultPrevented()) return
24553
24554 this.sliding = true
24555
24556 isCycling && this.pause()
24557
24558 if (this.$indicators.length) {
24559 this.$indicators.find('.active').removeClass('active')
24560 var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
24561 $nextIndicator && $nextIndicator.addClass('active')
24562 }
24563
24564 var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
24565 if ($.support.transition && this.$element.hasClass('slide')) {
24566 $next.addClass(type)
24567 $next[0].offsetWidth // force reflow
24568 $active.addClass(direction)
24569 $next.addClass(direction)
24570 $active
24571 .one('bsTransitionEnd', function () {
24572 $next.removeClass([type, direction].join(' ')).addClass('active')
24573 $active.removeClass(['active', direction].join(' '))
24574 that.sliding = false
24575 setTimeout(function () {
24576 that.$element.trigger(slidEvent)
24577 }, 0)
24578 })
24579 .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
24580 } else {
24581 $active.removeClass('active')
24582 $next.addClass('active')
24583 this.sliding = false
24584 this.$element.trigger(slidEvent)
24585 }
24586
24587 isCycling && this.cycle()
24588
24589 return this
24590 }
24591
24592
24593 // CAROUSEL PLUGIN DEFINITION
24594 // ==========================
24595
24596 function Plugin(option) {
24597 return this.each(function () {
24598 var $this = $(this)
24599 var data = $this.data('bs.carousel')
24600 var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
24601 var action = typeof option == 'string' ? option : options.slide
24602
24603 if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
24604 if (typeof option == 'number') data.to(option)
24605 else if (action) data[action]()
24606 else if (options.interval) data.pause().cycle()
24607 })
24608 }
24609
24610 var old = $.fn.carousel
24611
24612 $.fn.carousel = Plugin
24613 $.fn.carousel.Constructor = Carousel
24614
24615
24616 // CAROUSEL NO CONFLICT
24617 // ====================
24618
24619 $.fn.carousel.noConflict = function () {
24620 $.fn.carousel = old
24621 return this
24622 }
24623
24624
24625 // CAROUSEL DATA-API
24626 // =================
24627
24628 var clickHandler = function (e) {
24629 var href
24630 var $this = $(this)
24631 var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
24632 if (!$target.hasClass('carousel')) return
24633 var options = $.extend({}, $target.data(), $this.data())
24634 var slideIndex = $this.attr('data-slide-to')
24635 if (slideIndex) options.interval = false
24636
24637 Plugin.call($target, options)
24638
24639 if (slideIndex) {
24640 $target.data('bs.carousel').to(slideIndex)
24641 }
24642
24643 e.preventDefault()
24644 }
24645
24646 $(document)
24647 .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
24648 .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
24649
24650 $(window).on('load', function () {
24651 $('[data-ride="carousel"]').each(function () {
24652 var $carousel = $(this)
24653 Plugin.call($carousel, $carousel.data())
24654 })
24655 })
24656
24657 }(jQuery);
24658
24659 /* ========================================================================
24660 * Bootstrap: collapse.js v3.3.7
24661 * http://getbootstrap.com/javascript/#collapse
24662 * ========================================================================
24663 * Copyright 2011-2016 Twitter, Inc.
24664 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24665 * ======================================================================== */
24666
24667 /* jshint latedef: false */
24668
24669 +function ($) {
24670 'use strict';
24671
24672 // COLLAPSE PUBLIC CLASS DEFINITION
24673 // ================================
24674
24675 var Collapse = function (element, options) {
24676 this.$element = $(element)
24677 this.options = $.extend({}, Collapse.DEFAULTS, options)
24678 this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
24679 '[data-toggle="collapse"][data-target="#' + element.id + '"]')
24680 this.transitioning = null
24681
24682 if (this.options.parent) {
24683 this.$parent = this.getParent()
24684 } else {
24685 this.addAriaAndCollapsedClass(this.$element, this.$trigger)
24686 }
24687
24688 if (this.options.toggle) this.toggle()
24689 }
24690
24691 Collapse.VERSION = '3.3.7'
24692
24693 Collapse.TRANSITION_DURATION = 350
24694
24695 Collapse.DEFAULTS = {
24696 toggle: true
24697 }
24698
24699 Collapse.prototype.dimension = function () {
24700 var hasWidth = this.$element.hasClass('width')
24701 return hasWidth ? 'width' : 'height'
24702 }
24703
24704 Collapse.prototype.show = function () {
24705 if (this.transitioning || this.$element.hasClass('in')) return
24706
24707 var activesData
24708 var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
24709
24710 if (actives && actives.length) {
24711 activesData = actives.data('bs.collapse')
24712 if (activesData && activesData.transitioning) return
24713 }
24714
24715 var startEvent = $.Event('show.bs.collapse')
24716 this.$element.trigger(startEvent)
24717 if (startEvent.isDefaultPrevented()) return
24718
24719 if (actives && actives.length) {
24720 Plugin.call(actives, 'hide')
24721 activesData || actives.data('bs.collapse', null)
24722 }
24723
24724 var dimension = this.dimension()
24725
24726 this.$element
24727 .removeClass('collapse')
24728 .addClass('collapsing')[dimension](0)
24729 .attr('aria-expanded', true)
24730
24731 this.$trigger
24732 .removeClass('collapsed')
24733 .attr('aria-expanded', true)
24734
24735 this.transitioning = 1
24736
24737 var complete = function () {
24738 this.$element
24739 .removeClass('collapsing')
24740 .addClass('collapse in')[dimension]('')
24741 this.transitioning = 0
24742 this.$element
24743 .trigger('shown.bs.collapse')
24744 }
24745
24746 if (!$.support.transition) return complete.call(this)
24747
24748 var scrollSize = $.camelCase(['scroll', dimension].join('-'))
24749
24750 this.$element
24751 .one('bsTransitionEnd', $.proxy(complete, this))
24752 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
24753 }
24754
24755 Collapse.prototype.hide = function () {
24756 if (this.transitioning || !this.$element.hasClass('in')) return
24757
24758 var startEvent = $.Event('hide.bs.collapse')
24759 this.$element.trigger(startEvent)
24760 if (startEvent.isDefaultPrevented()) return
24761
24762 var dimension = this.dimension()
24763
24764 this.$element[dimension](this.$element[dimension]())[0].offsetHeight
24765
24766 this.$element
24767 .addClass('collapsing')
24768 .removeClass('collapse in')
24769 .attr('aria-expanded', false)
24770
24771 this.$trigger
24772 .addClass('collapsed')
24773 .attr('aria-expanded', false)
24774
24775 this.transitioning = 1
24776
24777 var complete = function () {
24778 this.transitioning = 0
24779 this.$element
24780 .removeClass('collapsing')
24781 .addClass('collapse')
24782 .trigger('hidden.bs.collapse')
24783 }
24784
24785 if (!$.support.transition) return complete.call(this)
24786
24787 this.$element
24788 [dimension](0)
24789 .one('bsTransitionEnd', $.proxy(complete, this))
24790 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
24791 }
24792
24793 Collapse.prototype.toggle = function () {
24794 this[this.$element.hasClass('in') ? 'hide' : 'show']()
24795 }
24796
24797 Collapse.prototype.getParent = function () {
24798 return $(this.options.parent)
24799 .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
24800 .each($.proxy(function (i, element) {
24801 var $element = $(element)
24802 this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
24803 }, this))
24804 .end()
24805 }
24806
24807 Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
24808 var isOpen = $element.hasClass('in')
24809
24810 $element.attr('aria-expanded', isOpen)
24811 $trigger
24812 .toggleClass('collapsed', !isOpen)
24813 .attr('aria-expanded', isOpen)
24814 }
24815
24816 function getTargetFromTrigger($trigger) {
24817 var href
24818 var target = $trigger.attr('data-target')
24819 || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
24820
24821 return $(target)
24822 }
24823
24824
24825 // COLLAPSE PLUGIN DEFINITION
24826 // ==========================
24827
24828 function Plugin(option) {
24829 return this.each(function () {
24830 var $this = $(this)
24831 var data = $this.data('bs.collapse')
24832 var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
24833
24834 if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
24835 if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
24836 if (typeof option == 'string') data[option]()
24837 })
24838 }
24839
24840 var old = $.fn.collapse
24841
24842 $.fn.collapse = Plugin
24843 $.fn.collapse.Constructor = Collapse
24844
24845
24846 // COLLAPSE NO CONFLICT
24847 // ====================
24848
24849 $.fn.collapse.noConflict = function () {
24850 $.fn.collapse = old
24851 return this
24852 }
24853
24854
24855 // COLLAPSE DATA-API
24856 // =================
24857
24858 $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
24859 var $this = $(this)
24860
24861 if (!$this.attr('data-target')) e.preventDefault()
24862
24863 var $target = getTargetFromTrigger($this)
24864 var data = $target.data('bs.collapse')
24865 var option = data ? 'toggle' : $this.data()
24866
24867 Plugin.call($target, option)
24868 })
24869
24870 }(jQuery);
24871
24872 /* ========================================================================
24873 * Bootstrap: dropdown.js v3.3.7
24874 * http://getbootstrap.com/javascript/#dropdowns
24875 * ========================================================================
24876 * Copyright 2011-2016 Twitter, Inc.
24877 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24878 * ======================================================================== */
24879
24880
24881 +function ($) {
24882 'use strict';
24883
24884 // DROPDOWN CLASS DEFINITION
24885 // =========================
24886
24887 var backdrop = '.dropdown-backdrop'
24888 var toggle = '[data-toggle="dropdown"]'
24889 var Dropdown = function (element) {
24890 $(element).on('click.bs.dropdown', this.toggle)
24891 }
24892
24893 Dropdown.VERSION = '3.3.7'
24894
24895 function getParent($this) {
24896 var selector = $this.attr('data-target')
24897
24898 if (!selector) {
24899 selector = $this.attr('href')
24900 selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
24901 }
24902
24903 var $parent = selector && $(selector)
24904
24905 return $parent && $parent.length ? $parent : $this.parent()
24906 }
24907
24908 function clearMenus(e) {
24909 if (e && e.which === 3) return
24910 $(backdrop).remove()
24911 $(toggle).each(function () {
24912 var $this = $(this)
24913 var $parent = getParent($this)
24914 var relatedTarget = { relatedTarget: this }
24915
24916 if (!$parent.hasClass('open')) return
24917
24918 if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
24919
24920 $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
24921
24922 if (e.isDefaultPrevented()) return
24923
24924 $this.attr('aria-expanded', 'false')
24925 $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
24926 })
24927 }
24928
24929 Dropdown.prototype.toggle = function (e) {
24930 var $this = $(this)
24931
24932 if ($this.is('.disabled, :disabled')) return
24933
24934 var $parent = getParent($this)
24935 var isActive = $parent.hasClass('open')
24936
24937 clearMenus()
24938
24939 if (!isActive) {
24940 if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
24941 // if mobile we use a backdrop because click events don't delegate
24942 $(document.createElement('div'))
24943 .addClass('dropdown-backdrop')
24944 .insertAfter($(this))
24945 .on('click', clearMenus)
24946 }
24947
24948 var relatedTarget = { relatedTarget: this }
24949 $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
24950
24951 if (e.isDefaultPrevented()) return
24952
24953 $this
24954 .trigger('focus')
24955 .attr('aria-expanded', 'true')
24956
24957 $parent
24958 .toggleClass('open')
24959 .trigger($.Event('shown.bs.dropdown', relatedTarget))
24960 }
24961
24962 return false
24963 }
24964
24965 Dropdown.prototype.keydown = function (e) {
24966 if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
24967
24968 var $this = $(this)
24969
24970 e.preventDefault()
24971 e.stopPropagation()
24972
24973 if ($this.is('.disabled, :disabled')) return
24974
24975 var $parent = getParent($this)
24976 var isActive = $parent.hasClass('open')
24977
24978 if (!isActive && e.which != 27 || isActive && e.which == 27) {
24979 if (e.which == 27) $parent.find(toggle).trigger('focus')
24980 return $this.trigger('click')
24981 }
24982
24983 var desc = ' li:not(.disabled):visible a'
24984 var $items = $parent.find('.dropdown-menu' + desc)
24985
24986 if (!$items.length) return
24987
24988 var index = $items.index(e.target)
24989
24990 if (e.which == 38 && index > 0) index-- // up
24991 if (e.which == 40 && index < $items.length - 1) index++ // down
24992 if (!~index) index = 0
24993
24994 $items.eq(index).trigger('focus')
24995 }
24996
24997
24998 // DROPDOWN PLUGIN DEFINITION
24999 // ==========================
25000
25001 function Plugin(option) {
25002 return this.each(function () {
25003 var $this = $(this)
25004 var data = $this.data('bs.dropdown')
25005
25006 if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
25007 if (typeof option == 'string') data[option].call($this)
25008 })
25009 }
25010
25011 var old = $.fn.dropdown
25012
25013 $.fn.dropdown = Plugin
25014 $.fn.dropdown.Constructor = Dropdown
25015
25016
25017 // DROPDOWN NO CONFLICT
25018 // ====================
25019
25020 $.fn.dropdown.noConflict = function () {
25021 $.fn.dropdown = old
25022 return this
25023 }
25024
25025
25026 // APPLY TO STANDARD DROPDOWN ELEMENTS
25027 // ===================================
25028
25029 $(document)
25030 .on('click.bs.dropdown.data-api', clearMenus)
25031 .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
25032 .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
25033 .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
25034 .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
25035
25036 }(jQuery);
25037
25038 /* ========================================================================
25039 * Bootstrap: modal.js v3.3.7
25040 * http://getbootstrap.com/javascript/#modals
25041 * ========================================================================
25042 * Copyright 2011-2016 Twitter, Inc.
25043 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25044 * ======================================================================== */
25045
25046
25047 +function ($) {
25048 'use strict';
25049
25050 // MODAL CLASS DEFINITION
25051 // ======================
25052
25053 var Modal = function (element, options) {
25054 this.options = options
25055 this.$body = $(document.body)
25056 this.$element = $(element)
25057 this.$dialog = this.$element.find('.modal-dialog')
25058 this.$backdrop = null
25059 this.isShown = null
25060 this.originalBodyPad = null
25061 this.scrollbarWidth = 0
25062 this.ignoreBackdropClick = false
25063
25064 if (this.options.remote) {
25065 this.$element
25066 .find('.modal-content')
25067 .load(this.options.remote, $.proxy(function () {
25068 this.$element.trigger('loaded.bs.modal')
25069 }, this))
25070 }
25071 }
25072
25073 Modal.VERSION = '3.3.7'
25074
25075 Modal.TRANSITION_DURATION = 300
25076 Modal.BACKDROP_TRANSITION_DURATION = 150
25077
25078 Modal.DEFAULTS = {
25079 backdrop: true,
25080 keyboard: true,
25081 show: true
25082 }
25083
25084 Modal.prototype.toggle = function (_relatedTarget) {
25085 return this.isShown ? this.hide() : this.show(_relatedTarget)
25086 }
25087
25088 Modal.prototype.show = function (_relatedTarget) {
25089 var that = this
25090 var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
25091
25092 this.$element.trigger(e)
25093
25094 if (this.isShown || e.isDefaultPrevented()) return
25095
25096 this.isShown = true
25097
25098 this.checkScrollbar()
25099 this.setScrollbar()
25100 this.$body.addClass('modal-open')
25101
25102 this.escape()
25103 this.resize()
25104
25105 this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
25106
25107 this.$dialog.on('mousedown.dismiss.bs.modal', function () {
25108 that.$element.one('mouseup.dismiss.bs.modal', function (e) {
25109 if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
25110 })
25111 })
25112
25113 this.backdrop(function () {
25114 var transition = $.support.transition && that.$element.hasClass('fade')
25115
25116 if (!that.$element.parent().length) {
25117 that.$element.appendTo(that.$body) // don't move modals dom position
25118 }
25119
25120 that.$element
25121 .show()
25122 .scrollTop(0)
25123
25124 that.adjustDialog()
25125
25126 if (transition) {
25127 that.$element[0].offsetWidth // force reflow
25128 }
25129
25130 that.$element.addClass('in')
25131
25132 that.enforceFocus()
25133
25134 var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
25135
25136 transition ?
25137 that.$dialog // wait for modal to slide in
25138 .one('bsTransitionEnd', function () {
25139 that.$element.trigger('focus').trigger(e)
25140 })
25141 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
25142 that.$element.trigger('focus').trigger(e)
25143 })
25144 }
25145
25146 Modal.prototype.hide = function (e) {
25147 if (e) e.preventDefault()
25148
25149 e = $.Event('hide.bs.modal')
25150
25151 this.$element.trigger(e)
25152
25153 if (!this.isShown || e.isDefaultPrevented()) return
25154
25155 this.isShown = false
25156
25157 this.escape()
25158 this.resize()
25159
25160 $(document).off('focusin.bs.modal')
25161
25162 this.$element
25163 .removeClass('in')
25164 .off('click.dismiss.bs.modal')
25165 .off('mouseup.dismiss.bs.modal')
25166
25167 this.$dialog.off('mousedown.dismiss.bs.modal')
25168
25169 $.support.transition && this.$element.hasClass('fade') ?
25170 this.$element
25171 .one('bsTransitionEnd', $.proxy(this.hideModal, this))
25172 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
25173 this.hideModal()
25174 }
25175
25176 Modal.prototype.enforceFocus = function () {
25177 $(document)
25178 .off('focusin.bs.modal') // guard against infinite focus loop
25179 .on('focusin.bs.modal', $.proxy(function (e) {
25180 if (document !== e.target &&
25181 this.$element[0] !== e.target &&
25182 !this.$element.has(e.target).length) {
25183 this.$element.trigger('focus')
25184 }
25185 }, this))
25186 }
25187
25188 Modal.prototype.escape = function () {
25189 if (this.isShown && this.options.keyboard) {
25190 this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
25191 e.which == 27 && this.hide()
25192 }, this))
25193 } else if (!this.isShown) {
25194 this.$element.off('keydown.dismiss.bs.modal')
25195 }
25196 }
25197
25198 Modal.prototype.resize = function () {
25199 if (this.isShown) {
25200 $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
25201 } else {
25202 $(window).off('resize.bs.modal')
25203 }
25204 }
25205
25206 Modal.prototype.hideModal = function () {
25207 var that = this
25208 this.$element.hide()
25209 this.backdrop(function () {
25210 that.$body.removeClass('modal-open')
25211 that.resetAdjustments()
25212 that.resetScrollbar()
25213 that.$element.trigger('hidden.bs.modal')
25214 })
25215 }
25216
25217 Modal.prototype.removeBackdrop = function () {
25218 this.$backdrop && this.$backdrop.remove()
25219 this.$backdrop = null
25220 }
25221
25222 Modal.prototype.backdrop = function (callback) {
25223 var that = this
25224 var animate = this.$element.hasClass('fade') ? 'fade' : ''
25225
25226 if (this.isShown && this.options.backdrop) {
25227 var doAnimate = $.support.transition && animate
25228
25229 this.$backdrop = $(document.createElement('div'))
25230 .addClass('modal-backdrop ' + animate)
25231 .appendTo(this.$body)
25232
25233 this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
25234 if (this.ignoreBackdropClick) {
25235 this.ignoreBackdropClick = false
25236 return
25237 }
25238 if (e.target !== e.currentTarget) return
25239 this.options.backdrop == 'static'
25240 ? this.$element[0].focus()
25241 : this.hide()
25242 }, this))
25243
25244 if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
25245
25246 this.$backdrop.addClass('in')
25247
25248 if (!callback) return
25249
25250 doAnimate ?
25251 this.$backdrop
25252 .one('bsTransitionEnd', callback)
25253 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
25254 callback()
25255
25256 } else if (!this.isShown && this.$backdrop) {
25257 this.$backdrop.removeClass('in')
25258
25259 var callbackRemove = function () {
25260 that.removeBackdrop()
25261 callback && callback()
25262 }
25263 $.support.transition && this.$element.hasClass('fade') ?
25264 this.$backdrop
25265 .one('bsTransitionEnd', callbackRemove)
25266 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
25267 callbackRemove()
25268
25269 } else if (callback) {
25270 callback()
25271 }
25272 }
25273
25274 // these following methods are used to handle overflowing modals
25275
25276 Modal.prototype.handleUpdate = function () {
25277 this.adjustDialog()
25278 }
25279
25280 Modal.prototype.adjustDialog = function () {
25281 var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
25282
25283 this.$element.css({
25284 paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
25285 paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
25286 })
25287 }
25288
25289 Modal.prototype.resetAdjustments = function () {
25290 this.$element.css({
25291 paddingLeft: '',
25292 paddingRight: ''
25293 })
25294 }
25295
25296 Modal.prototype.checkScrollbar = function () {
25297 var fullWindowWidth = window.innerWidth
25298 if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
25299 var documentElementRect = document.documentElement.getBoundingClientRect()
25300 fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
25301 }
25302 this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
25303 this.scrollbarWidth = this.measureScrollbar()
25304 }
25305
25306 Modal.prototype.setScrollbar = function () {
25307 var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
25308 this.originalBodyPad = document.body.style.paddingRight || ''
25309 if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
25310 }
25311
25312 Modal.prototype.resetScrollbar = function () {
25313 this.$body.css('padding-right', this.originalBodyPad)
25314 }
25315
25316 Modal.prototype.measureScrollbar = function () { // thx walsh
25317 var scrollDiv = document.createElement('div')
25318 scrollDiv.className = 'modal-scrollbar-measure'
25319 this.$body.append(scrollDiv)
25320 var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
25321 this.$body[0].removeChild(scrollDiv)
25322 return scrollbarWidth
25323 }
25324
25325
25326 // MODAL PLUGIN DEFINITION
25327 // =======================
25328
25329 function Plugin(option, _relatedTarget) {
25330 return this.each(function () {
25331 var $this = $(this)
25332 var data = $this.data('bs.modal')
25333 var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
25334
25335 if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
25336 if (typeof option == 'string') data[option](_relatedTarget)
25337 else if (options.show) data.show(_relatedTarget)
25338 })
25339 }
25340
25341 var old = $.fn.modal
25342
25343 $.fn.modal = Plugin
25344 $.fn.modal.Constructor = Modal
25345
25346
25347 // MODAL NO CONFLICT
25348 // =================
25349
25350 $.fn.modal.noConflict = function () {
25351 $.fn.modal = old
25352 return this
25353 }
25354
25355
25356 // MODAL DATA-API
25357 // ==============
25358
25359 $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
25360 var $this = $(this)
25361 var href = $this.attr('href')
25362 var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
25363 var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
25364
25365 if ($this.is('a')) e.preventDefault()
25366
25367 $target.one('show.bs.modal', function (showEvent) {
25368 if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
25369 $target.one('hidden.bs.modal', function () {
25370 $this.is(':visible') && $this.trigger('focus')
25371 })
25372 })
25373 Plugin.call($target, option, this)
25374 })
25375
25376 }(jQuery);
25377
25378 /* ========================================================================
25379 * Bootstrap: tooltip.js v3.3.7
25380 * http://getbootstrap.com/javascript/#tooltip
25381 * Inspired by the original jQuery.tipsy by Jason Frame
25382 * ========================================================================
25383 * Copyright 2011-2016 Twitter, Inc.
25384 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25385 * ======================================================================== */
25386
25387
25388 +function ($) {
25389 'use strict';
25390
25391 // TOOLTIP PUBLIC CLASS DEFINITION
25392 // ===============================
25393
25394 var Tooltip = function (element, options) {
25395 this.type = null
25396 this.options = null
25397 this.enabled = null
25398 this.timeout = null
25399 this.hoverState = null
25400 this.$element = null
25401 this.inState = null
25402
25403 this.init('tooltip', element, options)
25404 }
25405
25406 Tooltip.VERSION = '3.3.7'
25407
25408 Tooltip.TRANSITION_DURATION = 150
25409
25410 Tooltip.DEFAULTS = {
25411 animation: true,
25412 placement: 'top',
25413 selector: false,
25414 template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
25415 trigger: 'hover focus',
25416 title: '',
25417 delay: 0,
25418 html: false,
25419 container: false,
25420 viewport: {
25421 selector: 'body',
25422 padding: 0
25423 }
25424 }
25425
25426 Tooltip.prototype.init = function (type, element, options) {
25427 this.enabled = true
25428 this.type = type
25429 this.$element = $(element)
25430 this.options = this.getOptions(options)
25431 this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
25432 this.inState = { click: false, hover: false, focus: false }
25433
25434 if (this.$element[0] instanceof document.constructor && !this.options.selector) {
25435 throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
25436 }
25437
25438 var triggers = this.options.trigger.split(' ')
25439
25440 for (var i = triggers.length; i--;) {
25441 var trigger = triggers[i]
25442
25443 if (trigger == 'click') {
25444 this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
25445 } else if (trigger != 'manual') {
25446 var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
25447 var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
25448
25449 this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
25450 this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
25451 }
25452 }
25453
25454 this.options.selector ?
25455 (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
25456 this.fixTitle()
25457 }
25458
25459 Tooltip.prototype.getDefaults = function () {
25460 return Tooltip.DEFAULTS
25461 }
25462
25463 Tooltip.prototype.getOptions = function (options) {
25464 options = $.extend({}, this.getDefaults(), this.$element.data(), options)
25465
25466 if (options.delay && typeof options.delay == 'number') {
25467 options.delay = {
25468 show: options.delay,
25469 hide: options.delay
25470 }
25471 }
25472
25473 return options
25474 }
25475
25476 Tooltip.prototype.getDelegateOptions = function () {
25477 var options = {}
25478 var defaults = this.getDefaults()
25479
25480 this._options && $.each(this._options, function (key, value) {
25481 if (defaults[key] != value) options[key] = value
25482 })
25483
25484 return options
25485 }
25486
25487 Tooltip.prototype.enter = function (obj) {
25488 var self = obj instanceof this.constructor ?
25489 obj : $(obj.currentTarget).data('bs.' + this.type)
25490
25491 if (!self) {
25492 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
25493 $(obj.currentTarget).data('bs.' + this.type, self)
25494 }
25495
25496 if (obj instanceof $.Event) {
25497 self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
25498 }
25499
25500 if (self.tip().hasClass('in') || self.hoverState == 'in') {
25501 self.hoverState = 'in'
25502 return
25503 }
25504
25505 clearTimeout(self.timeout)
25506
25507 self.hoverState = 'in'
25508
25509 if (!self.options.delay || !self.options.delay.show) return self.show()
25510
25511 self.timeout = setTimeout(function () {
25512 if (self.hoverState == 'in') self.show()
25513 }, self.options.delay.show)
25514 }
25515
25516 Tooltip.prototype.isInStateTrue = function () {
25517 for (var key in this.inState) {
25518 if (this.inState[key]) return true
25519 }
25520
25521 return false
25522 }
25523
25524 Tooltip.prototype.leave = function (obj) {
25525 var self = obj instanceof this.constructor ?
25526 obj : $(obj.currentTarget).data('bs.' + this.type)
25527
25528 if (!self) {
25529 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
25530 $(obj.currentTarget).data('bs.' + this.type, self)
25531 }
25532
25533 if (obj instanceof $.Event) {
25534 self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
25535 }
25536
25537 if (self.isInStateTrue()) return
25538
25539 clearTimeout(self.timeout)
25540
25541 self.hoverState = 'out'
25542
25543 if (!self.options.delay || !self.options.delay.hide) return self.hide()
25544
25545 self.timeout = setTimeout(function () {
25546 if (self.hoverState == 'out') self.hide()
25547 }, self.options.delay.hide)
25548 }
25549
25550 Tooltip.prototype.show = function () {
25551 var e = $.Event('show.bs.' + this.type)
25552
25553 if (this.hasContent() && this.enabled) {
25554 this.$element.trigger(e)
25555
25556 var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
25557 if (e.isDefaultPrevented() || !inDom) return
25558 var that = this
25559
25560 var $tip = this.tip()
25561
25562 var tipId = this.getUID(this.type)
25563
25564 this.setContent()
25565 $tip.attr('id', tipId)
25566 this.$element.attr('aria-describedby', tipId)
25567
25568 if (this.options.animation) $tip.addClass('fade')
25569
25570 var placement = typeof this.options.placement == 'function' ?
25571 this.options.placement.call(this, $tip[0], this.$element[0]) :
25572 this.options.placement
25573
25574 var autoToken = /\s?auto?\s?/i
25575 var autoPlace = autoToken.test(placement)
25576 if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
25577
25578 $tip
25579 .detach()
25580 .css({ top: 0, left: 0, display: 'block' })
25581 .addClass(placement)
25582 .data('bs.' + this.type, this)
25583
25584 this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
25585 this.$element.trigger('inserted.bs.' + this.type)
25586
25587 var pos = this.getPosition()
25588 var actualWidth = $tip[0].offsetWidth
25589 var actualHeight = $tip[0].offsetHeight
25590
25591 if (autoPlace) {
25592 var orgPlacement = placement
25593 var viewportDim = this.getPosition(this.$viewport)
25594
25595 placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
25596 placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
25597 placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
25598 placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
25599 placement
25600
25601 $tip
25602 .removeClass(orgPlacement)
25603 .addClass(placement)
25604 }
25605
25606 var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
25607
25608 this.applyPlacement(calculatedOffset, placement)
25609
25610 var complete = function () {
25611 var prevHoverState = that.hoverState
25612 that.$element.trigger('shown.bs.' + that.type)
25613 that.hoverState = null
25614
25615 if (prevHoverState == 'out') that.leave(that)
25616 }
25617
25618 $.support.transition && this.$tip.hasClass('fade') ?
25619 $tip
25620 .one('bsTransitionEnd', complete)
25621 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
25622 complete()
25623 }
25624 }
25625
25626 Tooltip.prototype.applyPlacement = function (offset, placement) {
25627 var $tip = this.tip()
25628 var width = $tip[0].offsetWidth
25629 var height = $tip[0].offsetHeight
25630
25631 // manually read margins because getBoundingClientRect includes difference
25632 var marginTop = parseInt($tip.css('margin-top'), 10)
25633 var marginLeft = parseInt($tip.css('margin-left'), 10)
25634
25635 // we must check for NaN for ie 8/9
25636 if (isNaN(marginTop)) marginTop = 0
25637 if (isNaN(marginLeft)) marginLeft = 0
25638
25639 offset.top += marginTop
25640 offset.left += marginLeft
25641
25642 // $.fn.offset doesn't round pixel values
25643 // so we use setOffset directly with our own function B-0
25644 $.offset.setOffset($tip[0], $.extend({
25645 using: function (props) {
25646 $tip.css({
25647 top: Math.round(props.top),
25648 left: Math.round(props.left)
25649 })
25650 }
25651 }, offset), 0)
25652
25653 $tip.addClass('in')
25654
25655 // check to see if placing tip in new offset caused the tip to resize itself
25656 var actualWidth = $tip[0].offsetWidth
25657 var actualHeight = $tip[0].offsetHeight
25658
25659 if (placement == 'top' && actualHeight != height) {
25660 offset.top = offset.top + height - actualHeight
25661 }
25662
25663 var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
25664
25665 if (delta.left) offset.left += delta.left
25666 else offset.top += delta.top
25667
25668 var isVertical = /top|bottom/.test(placement)
25669 var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
25670 var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
25671
25672 $tip.offset(offset)
25673 this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
25674 }
25675
25676 Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
25677 this.arrow()
25678 .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
25679 .css(isVertical ? 'top' : 'left', '')
25680 }
25681
25682 Tooltip.prototype.setContent = function () {
25683 var $tip = this.tip()
25684 var title = this.getTitle()
25685
25686 $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
25687 $tip.removeClass('fade in top bottom left right')
25688 }
25689
25690 Tooltip.prototype.hide = function (callback) {
25691 var that = this
25692 var $tip = $(this.$tip)
25693 var e = $.Event('hide.bs.' + this.type)
25694
25695 function complete() {
25696 if (that.hoverState != 'in') $tip.detach()
25697 if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
25698 that.$element
25699 .removeAttr('aria-describedby')
25700 .trigger('hidden.bs.' + that.type)
25701 }
25702 callback && callback()
25703 }
25704
25705 this.$element.trigger(e)
25706
25707 if (e.isDefaultPrevented()) return
25708
25709 $tip.removeClass('in')
25710
25711 $.support.transition && $tip.hasClass('fade') ?
25712 $tip
25713 .one('bsTransitionEnd', complete)
25714 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
25715 complete()
25716
25717 this.hoverState = null
25718
25719 return this
25720 }
25721
25722 Tooltip.prototype.fixTitle = function () {
25723 var $e = this.$element
25724 if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
25725 $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
25726 }
25727 }
25728
25729 Tooltip.prototype.hasContent = function () {
25730 return this.getTitle()
25731 }
25732
25733 Tooltip.prototype.getPosition = function ($element) {
25734 $element = $element || this.$element
25735
25736 var el = $element[0]
25737 var isBody = el.tagName == 'BODY'
25738
25739 var elRect = el.getBoundingClientRect()
25740 if (elRect.width == null) {
25741 // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
25742 elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
25743 }
25744 var isSvg = window.SVGElement && el instanceof window.SVGElement
25745 // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
25746 // See https://github.com/twbs/bootstrap/issues/20280
25747 var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
25748 var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
25749 var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
25750
25751 return $.extend({}, elRect, scroll, outerDims, elOffset)
25752 }
25753
25754 Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
25755 return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
25756 placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
25757 placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
25758 /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
25759
25760 }
25761
25762 Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
25763 var delta = { top: 0, left: 0 }
25764 if (!this.$viewport) return delta
25765
25766 var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
25767 var viewportDimensions = this.getPosition(this.$viewport)
25768
25769 if (/right|left/.test(placement)) {
25770 var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
25771 var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
25772 if (topEdgeOffset < viewportDimensions.top) { // top overflow
25773 delta.top = viewportDimensions.top - topEdgeOffset
25774 } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
25775 delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
25776 }
25777 } else {
25778 var leftEdgeOffset = pos.left - viewportPadding
25779 var rightEdgeOffset = pos.left + viewportPadding + actualWidth
25780 if (leftEdgeOffset < viewportDimensions.left) { // left overflow
25781 delta.left = viewportDimensions.left - leftEdgeOffset
25782 } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
25783 delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
25784 }
25785 }
25786
25787 return delta
25788 }
25789
25790 Tooltip.prototype.getTitle = function () {
25791 var title
25792 var $e = this.$element
25793 var o = this.options
25794
25795 title = $e.attr('data-original-title')
25796 || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
25797
25798 return title
25799 }
25800
25801 Tooltip.prototype.getUID = function (prefix) {
25802 do prefix += ~~(Math.random() * 1000000)
25803 while (document.getElementById(prefix))
25804 return prefix
25805 }
25806
25807 Tooltip.prototype.tip = function () {
25808 if (!this.$tip) {
25809 this.$tip = $(this.options.template)
25810 if (this.$tip.length != 1) {
25811 throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
25812 }
25813 }
25814 return this.$tip
25815 }
25816
25817 Tooltip.prototype.arrow = function () {
25818 return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
25819 }
25820
25821 Tooltip.prototype.enable = function () {
25822 this.enabled = true
25823 }
25824
25825 Tooltip.prototype.disable = function () {
25826 this.enabled = false
25827 }
25828
25829 Tooltip.prototype.toggleEnabled = function () {
25830 this.enabled = !this.enabled
25831 }
25832
25833 Tooltip.prototype.toggle = function (e) {
25834 var self = this
25835 if (e) {
25836 self = $(e.currentTarget).data('bs.' + this.type)
25837 if (!self) {
25838 self = new this.constructor(e.currentTarget, this.getDelegateOptions())
25839 $(e.currentTarget).data('bs.' + this.type, self)
25840 }
25841 }
25842
25843 if (e) {
25844 self.inState.click = !self.inState.click
25845 if (self.isInStateTrue()) self.enter(self)
25846 else self.leave(self)
25847 } else {
25848 self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
25849 }
25850 }
25851
25852 Tooltip.prototype.destroy = function () {
25853 var that = this
25854 clearTimeout(this.timeout)
25855 this.hide(function () {
25856 that.$element.off('.' + that.type).removeData('bs.' + that.type)
25857 if (that.$tip) {
25858 that.$tip.detach()
25859 }
25860 that.$tip = null
25861 that.$arrow = null
25862 that.$viewport = null
25863 that.$element = null
25864 })
25865 }
25866
25867
25868 // TOOLTIP PLUGIN DEFINITION
25869 // =========================
25870
25871 function Plugin(option) {
25872 return this.each(function () {
25873 var $this = $(this)
25874 var data = $this.data('bs.tooltip')
25875 var options = typeof option == 'object' && option
25876
25877 if (!data && /destroy|hide/.test(option)) return
25878 if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
25879 if (typeof option == 'string') data[option]()
25880 })
25881 }
25882
25883 var old = $.fn.tooltip
25884
25885 $.fn.tooltip = Plugin
25886 $.fn.tooltip.Constructor = Tooltip
25887
25888
25889 // TOOLTIP NO CONFLICT
25890 // ===================
25891
25892 $.fn.tooltip.noConflict = function () {
25893 $.fn.tooltip = old
25894 return this
25895 }
25896
25897 }(jQuery);
25898
25899 /* ========================================================================
25900 * Bootstrap: popover.js v3.3.7
25901 * http://getbootstrap.com/javascript/#popovers
25902 * ========================================================================
25903 * Copyright 2011-2016 Twitter, Inc.
25904 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25905 * ======================================================================== */
25906
25907
25908 +function ($) {
25909 'use strict';
25910
25911 // POPOVER PUBLIC CLASS DEFINITION
25912 // ===============================
25913
25914 var Popover = function (element, options) {
25915 this.init('popover', element, options)
25916 }
25917
25918 if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
25919
25920 Popover.VERSION = '3.3.7'
25921
25922 Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
25923 placement: 'right',
25924 trigger: 'click',
25925 content: '',
25926 template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
25927 })
25928
25929
25930 // NOTE: POPOVER EXTENDS tooltip.js
25931 // ================================
25932
25933 Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
25934
25935 Popover.prototype.constructor = Popover
25936
25937 Popover.prototype.getDefaults = function () {
25938 return Popover.DEFAULTS
25939 }
25940
25941 Popover.prototype.setContent = function () {
25942 var $tip = this.tip()
25943 var title = this.getTitle()
25944 var content = this.getContent()
25945
25946 $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
25947 $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
25948 this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
25949 ](content)
25950
25951 $tip.removeClass('fade top bottom left right in')
25952
25953 // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
25954 // this manually by checking the contents.
25955 if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
25956 }
25957
25958 Popover.prototype.hasContent = function () {
25959 return this.getTitle() || this.getContent()
25960 }
25961
25962 Popover.prototype.getContent = function () {
25963 var $e = this.$element
25964 var o = this.options
25965
25966 return $e.attr('data-content')
25967 || (typeof o.content == 'function' ?
25968 o.content.call($e[0]) :
25969 o.content)
25970 }
25971
25972 Popover.prototype.arrow = function () {
25973 return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
25974 }
25975
25976
25977 // POPOVER PLUGIN DEFINITION
25978 // =========================
25979
25980 function Plugin(option) {
25981 return this.each(function () {
25982 var $this = $(this)
25983 var data = $this.data('bs.popover')
25984 var options = typeof option == 'object' && option
25985
25986 if (!data && /destroy|hide/.test(option)) return
25987 if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
25988 if (typeof option == 'string') data[option]()
25989 })
25990 }
25991
25992 var old = $.fn.popover
25993
25994 $.fn.popover = Plugin
25995 $.fn.popover.Constructor = Popover
25996
25997
25998 // POPOVER NO CONFLICT
25999 // ===================
26000
26001 $.fn.popover.noConflict = function () {
26002 $.fn.popover = old
26003 return this
26004 }
26005
26006 }(jQuery);
26007
26008 /* ========================================================================
26009 * Bootstrap: scrollspy.js v3.3.7
26010 * http://getbootstrap.com/javascript/#scrollspy
26011 * ========================================================================
26012 * Copyright 2011-2016 Twitter, Inc.
26013 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26014 * ======================================================================== */
26015
26016
26017 +function ($) {
26018 'use strict';
26019
26020 // SCROLLSPY CLASS DEFINITION
26021 // ==========================
26022
26023 function ScrollSpy(element, options) {
26024 this.$body = $(document.body)
26025 this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
26026 this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
26027 this.selector = (this.options.target || '') + ' .nav li > a'
26028 this.offsets = []
26029 this.targets = []
26030 this.activeTarget = null
26031 this.scrollHeight = 0
26032
26033 this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
26034 this.refresh()
26035 this.process()
26036 }
26037
26038 ScrollSpy.VERSION = '3.3.7'
26039
26040 ScrollSpy.DEFAULTS = {
26041 offset: 10
26042 }
26043
26044 ScrollSpy.prototype.getScrollHeight = function () {
26045 return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
26046 }
26047
26048 ScrollSpy.prototype.refresh = function () {
26049 var that = this
26050 var offsetMethod = 'offset'
26051 var offsetBase = 0
26052
26053 this.offsets = []
26054 this.targets = []
26055 this.scrollHeight = this.getScrollHeight()
26056
26057 if (!$.isWindow(this.$scrollElement[0])) {
26058 offsetMethod = 'position'
26059 offsetBase = this.$scrollElement.scrollTop()
26060 }
26061
26062 this.$body
26063 .find(this.selector)
26064 .map(function () {
26065 var $el = $(this)
26066 var href = $el.data('target') || $el.attr('href')
26067 var $href = /^#./.test(href) && $(href)
26068
26069 return ($href
26070 && $href.length
26071 && $href.is(':visible')
26072 && [[$href[offsetMethod]().top + offsetBase, href]]) || null
26073 })
26074 .sort(function (a, b) { return a[0] - b[0] })
26075 .each(function () {
26076 that.offsets.push(this[0])
26077 that.targets.push(this[1])
26078 })
26079 }
26080
26081 ScrollSpy.prototype.process = function () {
26082 var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
26083 var scrollHeight = this.getScrollHeight()
26084 var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
26085 var offsets = this.offsets
26086 var targets = this.targets
26087 var activeTarget = this.activeTarget
26088 var i
26089
26090 if (this.scrollHeight != scrollHeight) {
26091 this.refresh()
26092 }
26093
26094 if (scrollTop >= maxScroll) {
26095 return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
26096 }
26097
26098 if (activeTarget && scrollTop < offsets[0]) {
26099 this.activeTarget = null
26100 return this.clear()
26101 }
26102
26103 for (i = offsets.length; i--;) {
26104 activeTarget != targets[i]
26105 && scrollTop >= offsets[i]
26106 && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
26107 && this.activate(targets[i])
26108 }
26109 }
26110
26111 ScrollSpy.prototype.activate = function (target) {
26112 this.activeTarget = target
26113
26114 this.clear()
26115
26116 var selector = this.selector +
26117 '[data-target="' + target + '"],' +
26118 this.selector + '[href="' + target + '"]'
26119
26120 var active = $(selector)
26121 .parents('li')
26122 .addClass('active')
26123
26124 if (active.parent('.dropdown-menu').length) {
26125 active = active
26126 .closest('li.dropdown')
26127 .addClass('active')
26128 }
26129
26130 active.trigger('activate.bs.scrollspy')
26131 }
26132
26133 ScrollSpy.prototype.clear = function () {
26134 $(this.selector)
26135 .parentsUntil(this.options.target, '.active')
26136 .removeClass('active')
26137 }
26138
26139
26140 // SCROLLSPY PLUGIN DEFINITION
26141 // ===========================
26142
26143 function Plugin(option) {
26144 return this.each(function () {
26145 var $this = $(this)
26146 var data = $this.data('bs.scrollspy')
26147 var options = typeof option == 'object' && option
26148
26149 if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
26150 if (typeof option == 'string') data[option]()
26151 })
26152 }
26153
26154 var old = $.fn.scrollspy
26155
26156 $.fn.scrollspy = Plugin
26157 $.fn.scrollspy.Constructor = ScrollSpy
26158
26159
26160 // SCROLLSPY NO CONFLICT
26161 // =====================
26162
26163 $.fn.scrollspy.noConflict = function () {
26164 $.fn.scrollspy = old
26165 return this
26166 }
26167
26168
26169 // SCROLLSPY DATA-API
26170 // ==================
26171
26172 $(window).on('load.bs.scrollspy.data-api', function () {
26173 $('[data-spy="scroll"]').each(function () {
26174 var $spy = $(this)
26175 Plugin.call($spy, $spy.data())
26176 })
26177 })
26178
26179 }(jQuery);
26180
26181 /* ========================================================================
26182 * Bootstrap: tab.js v3.3.7
26183 * http://getbootstrap.com/javascript/#tabs
26184 * ========================================================================
26185 * Copyright 2011-2016 Twitter, Inc.
26186 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26187 * ======================================================================== */
26188
26189
26190 +function ($) {
26191 'use strict';
26192
26193 // TAB CLASS DEFINITION
26194 // ====================
26195
26196 var Tab = function (element) {
26197 // jscs:disable requireDollarBeforejQueryAssignment
26198 this.element = $(element)
26199 // jscs:enable requireDollarBeforejQueryAssignment
26200 }
26201
26202 Tab.VERSION = '3.3.7'
26203
26204 Tab.TRANSITION_DURATION = 150
26205
26206 Tab.prototype.show = function () {
26207 var $this = this.element
26208 var $ul = $this.closest('ul:not(.dropdown-menu)')
26209 var selector = $this.data('target')
26210
26211 if (!selector) {
26212 selector = $this.attr('href')
26213 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
26214 }
26215
26216 if ($this.parent('li').hasClass('active')) return
26217
26218 var $previous = $ul.find('.active:last a')
26219 var hideEvent = $.Event('hide.bs.tab', {
26220 relatedTarget: $this[0]
26221 })
26222 var showEvent = $.Event('show.bs.tab', {
26223 relatedTarget: $previous[0]
26224 })
26225
26226 $previous.trigger(hideEvent)
26227 $this.trigger(showEvent)
26228
26229 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
26230
26231 var $target = $(selector)
26232
26233 this.activate($this.closest('li'), $ul)
26234 this.activate($target, $target.parent(), function () {
26235 $previous.trigger({
26236 type: 'hidden.bs.tab',
26237 relatedTarget: $this[0]
26238 })
26239 $this.trigger({
26240 type: 'shown.bs.tab',
26241 relatedTarget: $previous[0]
26242 })
26243 })
26244 }
26245
26246 Tab.prototype.activate = function (element, container, callback) {
26247 var $active = container.find('> .active')
26248 var transition = callback
26249 && $.support.transition
26250 && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
26251
26252 function next() {
26253 $active
26254 .removeClass('active')
26255 .find('> .dropdown-menu > .active')
26256 .removeClass('active')
26257 .end()
26258 .find('[data-toggle="tab"]')
26259 .attr('aria-expanded', false)
26260
26261 element
26262 .addClass('active')
26263 .find('[data-toggle="tab"]')
26264 .attr('aria-expanded', true)
26265
26266 if (transition) {
26267 element[0].offsetWidth // reflow for transition
26268 element.addClass('in')
26269 } else {
26270 element.removeClass('fade')
26271 }
26272
26273 if (element.parent('.dropdown-menu').length) {
26274 element
26275 .closest('li.dropdown')
26276 .addClass('active')
26277 .end()
26278 .find('[data-toggle="tab"]')
26279 .attr('aria-expanded', true)
26280 }
26281
26282 callback && callback()
26283 }
26284
26285 $active.length && transition ?
26286 $active
26287 .one('bsTransitionEnd', next)
26288 .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
26289 next()
26290
26291 $active.removeClass('in')
26292 }
26293
26294
26295 // TAB PLUGIN DEFINITION
26296 // =====================
26297
26298 function Plugin(option) {
26299 return this.each(function () {
26300 var $this = $(this)
26301 var data = $this.data('bs.tab')
26302
26303 if (!data) $this.data('bs.tab', (data = new Tab(this)))
26304 if (typeof option == 'string') data[option]()
26305 })
26306 }
26307
26308 var old = $.fn.tab
26309
26310 $.fn.tab = Plugin
26311 $.fn.tab.Constructor = Tab
26312
26313
26314 // TAB NO CONFLICT
26315 // ===============
26316
26317 $.fn.tab.noConflict = function () {
26318 $.fn.tab = old
26319 return this
26320 }
26321
26322
26323 // TAB DATA-API
26324 // ============
26325
26326 var clickHandler = function (e) {
26327 e.preventDefault()
26328 Plugin.call($(this), 'show')
26329 }
26330
26331 $(document)
26332 .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
26333 .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
26334
26335 }(jQuery);
26336
26337 /* ========================================================================
26338 * Bootstrap: affix.js v3.3.7
26339 * http://getbootstrap.com/javascript/#affix
26340 * ========================================================================
26341 * Copyright 2011-2016 Twitter, Inc.
26342 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26343 * ======================================================================== */
26344
26345
26346 +function ($) {
26347 'use strict';
26348
26349 // AFFIX CLASS DEFINITION
26350 // ======================
26351
26352 var Affix = function (element, options) {
26353 this.options = $.extend({}, Affix.DEFAULTS, options)
26354
26355 this.$target = $(this.options.target)
26356 .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
26357 .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
26358
26359 this.$element = $(element)
26360 this.affixed = null
26361 this.unpin = null
26362 this.pinnedOffset = null
26363
26364 this.checkPosition()
26365 }
26366
26367 Affix.VERSION = '3.3.7'
26368
26369 Affix.RESET = 'affix affix-top affix-bottom'
26370
26371 Affix.DEFAULTS = {
26372 offset: 0,
26373 target: window
26374 }
26375
26376 Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
26377 var scrollTop = this.$target.scrollTop()
26378 var position = this.$element.offset()
26379 var targetHeight = this.$target.height()
26380
26381 if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
26382
26383 if (this.affixed == 'bottom') {
26384 if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
26385 return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
26386 }
26387
26388 var initializing = this.affixed == null
26389 var colliderTop = initializing ? scrollTop : position.top
26390 var colliderHeight = initializing ? targetHeight : height
26391
26392 if (offsetTop != null && scrollTop <= offsetTop) return 'top'
26393 if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
26394
26395 return false
26396 }
26397
26398 Affix.prototype.getPinnedOffset = function () {
26399 if (this.pinnedOffset) return this.pinnedOffset
26400 this.$element.removeClass(Affix.RESET).addClass('affix')
26401 var scrollTop = this.$target.scrollTop()
26402 var position = this.$element.offset()
26403 return (this.pinnedOffset = position.top - scrollTop)
26404 }
26405
26406 Affix.prototype.checkPositionWithEventLoop = function () {
26407 setTimeout($.proxy(this.checkPosition, this), 1)
26408 }
26409
26410 Affix.prototype.checkPosition = function () {
26411 if (!this.$element.is(':visible')) return
26412
26413 var height = this.$element.height()
26414 var offset = this.options.offset
26415 var offsetTop = offset.top
26416 var offsetBottom = offset.bottom
26417 var scrollHeight = Math.max($(document).height(), $(document.body).height())
26418
26419 if (typeof offset != 'object') offsetBottom = offsetTop = offset
26420 if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
26421 if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
26422
26423 var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
26424
26425 if (this.affixed != affix) {
26426 if (this.unpin != null) this.$element.css('top', '')
26427
26428 var affixType = 'affix' + (affix ? '-' + affix : '')
26429 var e = $.Event(affixType + '.bs.affix')
26430
26431 this.$element.trigger(e)
26432
26433 if (e.isDefaultPrevented()) return
26434
26435 this.affixed = affix
26436 this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
26437
26438 this.$element
26439 .removeClass(Affix.RESET)
26440 .addClass(affixType)
26441 .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
26442 }
26443
26444 if (affix == 'bottom') {
26445 this.$element.offset({
26446 top: scrollHeight - height - offsetBottom
26447 })
26448 }
26449 }
26450
26451
26452 // AFFIX PLUGIN DEFINITION
26453 // =======================
26454
26455 function Plugin(option) {
26456 return this.each(function () {
26457 var $this = $(this)
26458 var data = $this.data('bs.affix')
26459 var options = typeof option == 'object' && option
26460
26461 if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
26462 if (typeof option == 'string') data[option]()
26463 })
26464 }
26465
26466 var old = $.fn.affix
26467
26468 $.fn.affix = Plugin
26469 $.fn.affix.Constructor = Affix
26470
26471
26472 // AFFIX NO CONFLICT
26473 // =================
26474
26475 $.fn.affix.noConflict = function () {
26476 $.fn.affix = old
26477 return this
26478 }
26479
26480
26481 // AFFIX DATA-API
26482 // ==============
26483
26484 $(window).on('load', function () {
26485 $('[data-spy="affix"]').each(function () {
26486 var $spy = $(this)
26487 var data = $spy.data()
26488
26489 data.offset = data.offset || {}
26490
26491 if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
26492 if (data.offsetTop != null) data.offset.top = data.offsetTop
26493
26494 Plugin.call($spy, data)
26495 })
26496 })
26497
26498 }(jQuery);
26499 </script>
26500 <script>(function() {
26501 'use strict';
26502
26503 /**
26504 * Extend an Object with another Object's properties.
26505 *
26506 * The source objects are specified as additional arguments.
26507 *
26508 * @param dst Object the object to extend.
26509 *
26510 * @return Object the final object.
26511 */
26512 var _extend = function(dst) {
26513 var sources = Array.prototype.slice.call(arguments, 1);
26514 for (var i=0; i<sources.length; ++i) {
26515 var src = sources[i];
26516 for (var p in src) {
26517 if (src.hasOwnProperty(p)) dst[p] = src[p];
26518 }
26519 }
26520 return dst;
26521 };
26522
26523
26524 /**
26525 * Defer execution of given function.
26526 * @param {Function} func
26527 */
26528 var _defer = function(func) {
26529 if (typeof setImmediate === 'function') {
26530 return setImmediate(func);
26531 } else {
26532 return setTimeout(func, 0);
26533 }
26534 };
26535
26536 /**
26537 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
26538 */
26539 var Levenshtein = {
26540 /**
26541 * Calculate levenshtein distance of the two strings.
26542 *
26543 * @param str1 String the first string.
26544 * @param str2 String the second string.
26545 * @return Integer the levenshtein distance (0 and above).
26546 */
26547 get: function(str1, str2) {
26548 // base cases
26549 if (str1 === str2) return 0;
26550 if (str1.length === 0) return str2.length;
26551 if (str2.length === 0) return str1.length;
26552
26553 // two rows
26554 var prevRow = new Array(str2.length + 1),
26555 curCol, nextCol, i, j, tmp;
26556
26557 // initialise previous row
26558 for (i=0; i<prevRow.length; ++i) {
26559 prevRow[i] = i;
26560 }
26561
26562 // calculate current row distance from previous row
26563 for (i=0; i<str1.length; ++i) {
26564 nextCol = i + 1;
26565
26566 for (j=0; j<str2.length; ++j) {
26567 curCol = nextCol;
26568
26569 // substution
26570 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
26571 // insertion
26572 tmp = curCol + 1;
26573 if (nextCol > tmp) {
26574 nextCol = tmp;
26575 }
26576 // deletion
26577 tmp = prevRow[j + 1] + 1;
26578 if (nextCol > tmp) {
26579 nextCol = tmp;
26580 }
26581
26582 // copy current col value into previous (in preparation for next iteration)
26583 prevRow[j] = curCol;
26584 }
26585
26586 // copy last col value into previous (in preparation for next iteration)
26587 prevRow[j] = nextCol;
26588 }
26589
26590 return nextCol;
26591 },
26592
26593 /**
26594 * Asynchronously calculate levenshtein distance of the two strings.
26595 *
26596 * @param str1 String the first string.
26597 * @param str2 String the second string.
26598 * @param cb Function callback function with signature: function(Error err, int distance)
26599 * @param [options] Object additional options.
26600 * @param [options.progress] Function progress callback with signature: function(percentComplete)
26601 */
26602 getAsync: function(str1, str2, cb, options) {
26603 options = _extend({}, {
26604 progress: null
26605 }, options);
26606
26607 // base cases
26608 if (str1 === str2) return cb(null, 0);
26609 if (str1.length === 0) return cb(null, str2.length);
26610 if (str2.length === 0) return cb(null, str1.length);
26611
26612 // two rows
26613 var prevRow = new Array(str2.length + 1),
26614 curCol, nextCol,
26615 i, j, tmp,
26616 startTime, currentTime;
26617
26618 // initialise previous row
26619 for (i=0; i<prevRow.length; ++i) {
26620 prevRow[i] = i;
26621 }
26622
26623 nextCol = 1;
26624 i = 0;
26625 j = -1;
26626
26627 var __calculate = function() {
26628 // reset timer
26629 startTime = new Date().valueOf();
26630 currentTime = startTime;
26631
26632 // keep going until one second has elapsed
26633 while (currentTime - startTime < 1000) {
26634 // reached end of current row?
26635 if (str2.length <= (++j)) {
26636 // copy current into previous (in preparation for next iteration)
26637 prevRow[j] = nextCol;
26638
26639 // if already done all chars
26640 if (str1.length <= (++i)) {
26641 return cb(null, nextCol);
26642 }
26643 // else if we have more left to do
26644 else {
26645 nextCol = i + 1;
26646 j = 0;
26647 }
26648 }
26649
26650 // calculation
26651 curCol = nextCol;
26652
26653 // substution
26654 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
26655 // insertion
26656 tmp = curCol + 1;
26657 if (nextCol > tmp) {
26658 nextCol = tmp;
26659 }
26660 // deletion
26661 tmp = prevRow[j + 1] + 1;
26662 if (nextCol > tmp) {
26663 nextCol = tmp;
26664 }
26665
26666 // copy current into previous (in preparation for next iteration)
26667 prevRow[j] = curCol;
26668
26669 // get current time
26670 currentTime = new Date().valueOf();
26671 }
26672
26673 // send a progress update?
26674 if (null !== options.progress) {
26675 try {
26676 options.progress.call(null, (i * 100.0/ str1.length));
26677 } catch (err) {
26678 return cb('Progress callback: ' + err.toString());
26679 }
26680 }
26681
26682 // next iteration
26683 _defer(__calculate);
26684 };
26685
26686 __calculate();
26687 }
26688
26689 };
26690
26691 // amd
26692 if (typeof define !== "undefined" && define !== null && define.amd) {
26693 define(function() {
26694 return Levenshtein;
26695 });
26696 }
26697 // commonjs
26698 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
26699 module.exports = Levenshtein;
26700 }
26701 // web worker
26702 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
26703 self.Levenshtein = Levenshtein;
26704 }
26705 // browser main thread
26706 else if (typeof window !== "undefined" && window !== null) {
26707 window.Levenshtein = Levenshtein;
26708 }
26709 }());
26710
26711 </script>
26712 <script>/*! kjua v0.1.1 - https://larsjung.de/kjua/ */
26713 !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>
26714 <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){
26715 (function (global){
26716 'use strict';
26717
26718 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
26719 // original notice:
26720
26721 /*!
26722 * The buffer module from node.js, for the browser.
26723 *
26724 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
26725 * @license MIT
26726 */
26727 function compare(a, b) {
26728 if (a === b) {
26729 return 0;
26730 }
26731
26732 var x = a.length;
26733 var y = b.length;
26734
26735 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
26736 if (a[i] !== b[i]) {
26737 x = a[i];
26738 y = b[i];
26739 break;
26740 }
26741 }
26742
26743 if (x < y) {
26744 return -1;
26745 }
26746 if (y < x) {
26747 return 1;
26748 }
26749 return 0;
26750 }
26751 function isBuffer(b) {
26752 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
26753 return global.Buffer.isBuffer(b);
26754 }
26755 return !!(b != null && b._isBuffer);
26756 }
26757
26758 // based on node assert, original notice:
26759
26760 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
26761 //
26762 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
26763 //
26764 // Originally from narwhal.js (http://narwhaljs.org)
26765 // Copyright (c) 2009 Thomas Robinson <280north.com>
26766 //
26767 // Permission is hereby granted, free of charge, to any person obtaining a copy
26768 // of this software and associated documentation files (the 'Software'), to
26769 // deal in the Software without restriction, including without limitation the
26770 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
26771 // sell copies of the Software, and to permit persons to whom the Software is
26772 // furnished to do so, subject to the following conditions:
26773 //
26774 // The above copyright notice and this permission notice shall be included in
26775 // all copies or substantial portions of the Software.
26776 //
26777 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26778 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26779 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26780 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
26781 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26782 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26783
26784 var util = require('util/');
26785 var hasOwn = Object.prototype.hasOwnProperty;
26786 var pSlice = Array.prototype.slice;
26787 var functionsHaveNames = (function () {
26788 return function foo() {}.name === 'foo';
26789 }());
26790 function pToString (obj) {
26791 return Object.prototype.toString.call(obj);
26792 }
26793 function isView(arrbuf) {
26794 if (isBuffer(arrbuf)) {
26795 return false;
26796 }
26797 if (typeof global.ArrayBuffer !== 'function') {
26798 return false;
26799 }
26800 if (typeof ArrayBuffer.isView === 'function') {
26801 return ArrayBuffer.isView(arrbuf);
26802 }
26803 if (!arrbuf) {
26804 return false;
26805 }
26806 if (arrbuf instanceof DataView) {
26807 return true;
26808 }
26809 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
26810 return true;
26811 }
26812 return false;
26813 }
26814 // 1. The assert module provides functions that throw
26815 // AssertionError's when particular conditions are not met. The
26816 // assert module must conform to the following interface.
26817
26818 var assert = module.exports = ok;
26819
26820 // 2. The AssertionError is defined in assert.
26821 // new assert.AssertionError({ message: message,
26822 // actual: actual,
26823 // expected: expected })
26824
26825 var regex = /\s*function\s+([^\(\s]*)\s*/;
26826 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
26827 function getName(func) {
26828 if (!util.isFunction(func)) {
26829 return;
26830 }
26831 if (functionsHaveNames) {
26832 return func.name;
26833 }
26834 var str = func.toString();
26835 var match = str.match(regex);
26836 return match && match[1];
26837 }
26838 assert.AssertionError = function AssertionError(options) {
26839 this.name = 'AssertionError';
26840 this.actual = options.actual;
26841 this.expected = options.expected;
26842 this.operator = options.operator;
26843 if (options.message) {
26844 this.message = options.message;
26845 this.generatedMessage = false;
26846 } else {
26847 this.message = getMessage(this);
26848 this.generatedMessage = true;
26849 }
26850 var stackStartFunction = options.stackStartFunction || fail;
26851 if (Error.captureStackTrace) {
26852 Error.captureStackTrace(this, stackStartFunction);
26853 } else {
26854 // non v8 browsers so we can have a stacktrace
26855 var err = new Error();
26856 if (err.stack) {
26857 var out = err.stack;
26858
26859 // try to strip useless frames
26860 var fn_name = getName(stackStartFunction);
26861 var idx = out.indexOf('\n' + fn_name);
26862 if (idx >= 0) {
26863 // once we have located the function frame
26864 // we need to strip out everything before it (and its line)
26865 var next_line = out.indexOf('\n', idx + 1);
26866 out = out.substring(next_line + 1);
26867 }
26868
26869 this.stack = out;
26870 }
26871 }
26872 };
26873
26874 // assert.AssertionError instanceof Error
26875 util.inherits(assert.AssertionError, Error);
26876
26877 function truncate(s, n) {
26878 if (typeof s === 'string') {
26879 return s.length < n ? s : s.slice(0, n);
26880 } else {
26881 return s;
26882 }
26883 }
26884 function inspect(something) {
26885 if (functionsHaveNames || !util.isFunction(something)) {
26886 return util.inspect(something);
26887 }
26888 var rawname = getName(something);
26889 var name = rawname ? ': ' + rawname : '';
26890 return '[Function' + name + ']';
26891 }
26892 function getMessage(self) {
26893 return truncate(inspect(self.actual), 128) + ' ' +
26894 self.operator + ' ' +
26895 truncate(inspect(self.expected), 128);
26896 }
26897
26898 // At present only the three keys mentioned above are used and
26899 // understood by the spec. Implementations or sub modules can pass
26900 // other keys to the AssertionError's constructor - they will be
26901 // ignored.
26902
26903 // 3. All of the following functions must throw an AssertionError
26904 // when a corresponding condition is not met, with a message that
26905 // may be undefined if not provided. All assertion methods provide
26906 // both the actual and expected values to the assertion error for
26907 // display purposes.
26908
26909 function fail(actual, expected, message, operator, stackStartFunction) {
26910 throw new assert.AssertionError({
26911 message: message,
26912 actual: actual,
26913 expected: expected,
26914 operator: operator,
26915 stackStartFunction: stackStartFunction
26916 });
26917 }
26918
26919 // EXTENSION! allows for well behaved errors defined elsewhere.
26920 assert.fail = fail;
26921
26922 // 4. Pure assertion tests whether a value is truthy, as determined
26923 // by !!guard.
26924 // assert.ok(guard, message_opt);
26925 // This statement is equivalent to assert.equal(true, !!guard,
26926 // message_opt);. To test strictly for the value true, use
26927 // assert.strictEqual(true, guard, message_opt);.
26928
26929 function ok(value, message) {
26930 if (!value) fail(value, true, message, '==', assert.ok);
26931 }
26932 assert.ok = ok;
26933
26934 // 5. The equality assertion tests shallow, coercive equality with
26935 // ==.
26936 // assert.equal(actual, expected, message_opt);
26937
26938 assert.equal = function equal(actual, expected, message) {
26939 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
26940 };
26941
26942 // 6. The non-equality assertion tests for whether two objects are not equal
26943 // with != assert.notEqual(actual, expected, message_opt);
26944
26945 assert.notEqual = function notEqual(actual, expected, message) {
26946 if (actual == expected) {
26947 fail(actual, expected, message, '!=', assert.notEqual);
26948 }
26949 };
26950
26951 // 7. The equivalence assertion tests a deep equality relation.
26952 // assert.deepEqual(actual, expected, message_opt);
26953
26954 assert.deepEqual = function deepEqual(actual, expected, message) {
26955 if (!_deepEqual(actual, expected, false)) {
26956 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
26957 }
26958 };
26959
26960 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
26961 if (!_deepEqual(actual, expected, true)) {
26962 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
26963 }
26964 };
26965
26966 function _deepEqual(actual, expected, strict, memos) {
26967 // 7.1. All identical values are equivalent, as determined by ===.
26968 if (actual === expected) {
26969 return true;
26970 } else if (isBuffer(actual) && isBuffer(expected)) {
26971 return compare(actual, expected) === 0;
26972
26973 // 7.2. If the expected value is a Date object, the actual value is
26974 // equivalent if it is also a Date object that refers to the same time.
26975 } else if (util.isDate(actual) && util.isDate(expected)) {
26976 return actual.getTime() === expected.getTime();
26977
26978 // 7.3 If the expected value is a RegExp object, the actual value is
26979 // equivalent if it is also a RegExp object with the same source and
26980 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
26981 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
26982 return actual.source === expected.source &&
26983 actual.global === expected.global &&
26984 actual.multiline === expected.multiline &&
26985 actual.lastIndex === expected.lastIndex &&
26986 actual.ignoreCase === expected.ignoreCase;
26987
26988 // 7.4. Other pairs that do not both pass typeof value == 'object',
26989 // equivalence is determined by ==.
26990 } else if ((actual === null || typeof actual !== 'object') &&
26991 (expected === null || typeof expected !== 'object')) {
26992 return strict ? actual === expected : actual == expected;
26993
26994 // If both values are instances of typed arrays, wrap their underlying
26995 // ArrayBuffers in a Buffer each to increase performance
26996 // This optimization requires the arrays to have the same type as checked by
26997 // Object.prototype.toString (aka pToString). Never perform binary
26998 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
26999 // bit patterns are not identical.
27000 } else if (isView(actual) && isView(expected) &&
27001 pToString(actual) === pToString(expected) &&
27002 !(actual instanceof Float32Array ||
27003 actual instanceof Float64Array)) {
27004 return compare(new Uint8Array(actual.buffer),
27005 new Uint8Array(expected.buffer)) === 0;
27006
27007 // 7.5 For all other Object pairs, including Array objects, equivalence is
27008 // determined by having the same number of owned properties (as verified
27009 // with Object.prototype.hasOwnProperty.call), the same set of keys
27010 // (although not necessarily the same order), equivalent values for every
27011 // corresponding key, and an identical 'prototype' property. Note: this
27012 // accounts for both named and indexed properties on Arrays.
27013 } else if (isBuffer(actual) !== isBuffer(expected)) {
27014 return false;
27015 } else {
27016 memos = memos || {actual: [], expected: []};
27017
27018 var actualIndex = memos.actual.indexOf(actual);
27019 if (actualIndex !== -1) {
27020 if (actualIndex === memos.expected.indexOf(expected)) {
27021 return true;
27022 }
27023 }
27024
27025 memos.actual.push(actual);
27026 memos.expected.push(expected);
27027
27028 return objEquiv(actual, expected, strict, memos);
27029 }
27030 }
27031
27032 function isArguments(object) {
27033 return Object.prototype.toString.call(object) == '[object Arguments]';
27034 }
27035
27036 function objEquiv(a, b, strict, actualVisitedObjects) {
27037 if (a === null || a === undefined || b === null || b === undefined)
27038 return false;
27039 // if one is a primitive, the other must be same
27040 if (util.isPrimitive(a) || util.isPrimitive(b))
27041 return a === b;
27042 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
27043 return false;
27044 var aIsArgs = isArguments(a);
27045 var bIsArgs = isArguments(b);
27046 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
27047 return false;
27048 if (aIsArgs) {
27049 a = pSlice.call(a);
27050 b = pSlice.call(b);
27051 return _deepEqual(a, b, strict);
27052 }
27053 var ka = objectKeys(a);
27054 var kb = objectKeys(b);
27055 var key, i;
27056 // having the same number of owned properties (keys incorporates
27057 // hasOwnProperty)
27058 if (ka.length !== kb.length)
27059 return false;
27060 //the same set of keys (although not necessarily the same order),
27061 ka.sort();
27062 kb.sort();
27063 //~~~cheap key test
27064 for (i = ka.length - 1; i >= 0; i--) {
27065 if (ka[i] !== kb[i])
27066 return false;
27067 }
27068 //equivalent values for every corresponding key, and
27069 //~~~possibly expensive deep test
27070 for (i = ka.length - 1; i >= 0; i--) {
27071 key = ka[i];
27072 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
27073 return false;
27074 }
27075 return true;
27076 }
27077
27078 // 8. The non-equivalence assertion tests for any deep inequality.
27079 // assert.notDeepEqual(actual, expected, message_opt);
27080
27081 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
27082 if (_deepEqual(actual, expected, false)) {
27083 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
27084 }
27085 };
27086
27087 assert.notDeepStrictEqual = notDeepStrictEqual;
27088 function notDeepStrictEqual(actual, expected, message) {
27089 if (_deepEqual(actual, expected, true)) {
27090 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
27091 }
27092 }
27093
27094
27095 // 9. The strict equality assertion tests strict equality, as determined by ===.
27096 // assert.strictEqual(actual, expected, message_opt);
27097
27098 assert.strictEqual = function strictEqual(actual, expected, message) {
27099 if (actual !== expected) {
27100 fail(actual, expected, message, '===', assert.strictEqual);
27101 }
27102 };
27103
27104 // 10. The strict non-equality assertion tests for strict inequality, as
27105 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
27106
27107 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
27108 if (actual === expected) {
27109 fail(actual, expected, message, '!==', assert.notStrictEqual);
27110 }
27111 };
27112
27113 function expectedException(actual, expected) {
27114 if (!actual || !expected) {
27115 return false;
27116 }
27117
27118 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
27119 return expected.test(actual);
27120 }
27121
27122 try {
27123 if (actual instanceof expected) {
27124 return true;
27125 }
27126 } catch (e) {
27127 // Ignore. The instanceof check doesn't work for arrow functions.
27128 }
27129
27130 if (Error.isPrototypeOf(expected)) {
27131 return false;
27132 }
27133
27134 return expected.call({}, actual) === true;
27135 }
27136
27137 function _tryBlock(block) {
27138 var error;
27139 try {
27140 block();
27141 } catch (e) {
27142 error = e;
27143 }
27144 return error;
27145 }
27146
27147 function _throws(shouldThrow, block, expected, message) {
27148 var actual;
27149
27150 if (typeof block !== 'function') {
27151 throw new TypeError('"block" argument must be a function');
27152 }
27153
27154 if (typeof expected === 'string') {
27155 message = expected;
27156 expected = null;
27157 }
27158
27159 actual = _tryBlock(block);
27160
27161 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
27162 (message ? ' ' + message : '.');
27163
27164 if (shouldThrow && !actual) {
27165 fail(actual, expected, 'Missing expected exception' + message);
27166 }
27167
27168 var userProvidedMessage = typeof message === 'string';
27169 var isUnwantedException = !shouldThrow && util.isError(actual);
27170 var isUnexpectedException = !shouldThrow && actual && !expected;
27171
27172 if ((isUnwantedException &&
27173 userProvidedMessage &&
27174 expectedException(actual, expected)) ||
27175 isUnexpectedException) {
27176 fail(actual, expected, 'Got unwanted exception' + message);
27177 }
27178
27179 if ((shouldThrow && actual && expected &&
27180 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
27181 throw actual;
27182 }
27183 }
27184
27185 // 11. Expected to throw an error:
27186 // assert.throws(block, Error_opt, message_opt);
27187
27188 assert.throws = function(block, /*optional*/error, /*optional*/message) {
27189 _throws(true, block, error, message);
27190 };
27191
27192 // EXTENSION! This is annoying to write outside this module.
27193 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
27194 _throws(false, block, error, message);
27195 };
27196
27197 assert.ifError = function(err) { if (err) throw err; };
27198
27199 var objectKeys = Object.keys || function (obj) {
27200 var keys = [];
27201 for (var key in obj) {
27202 if (hasOwn.call(obj, key)) keys.push(key);
27203 }
27204 return keys;
27205 };
27206
27207 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
27208 },{"util/":33}],2:[function(require,module,exports){
27209 'use strict'
27210
27211 exports.byteLength = byteLength
27212 exports.toByteArray = toByteArray
27213 exports.fromByteArray = fromByteArray
27214
27215 var lookup = []
27216 var revLookup = []
27217 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
27218
27219 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
27220 for (var i = 0, len = code.length; i < len; ++i) {
27221 lookup[i] = code[i]
27222 revLookup[code.charCodeAt(i)] = i
27223 }
27224
27225 revLookup['-'.charCodeAt(0)] = 62
27226 revLookup['_'.charCodeAt(0)] = 63
27227
27228 function placeHoldersCount (b64) {
27229 var len = b64.length
27230 if (len % 4 > 0) {
27231 throw new Error('Invalid string. Length must be a multiple of 4')
27232 }
27233
27234 // the number of equal signs (place holders)
27235 // if there are two placeholders, than the two characters before it
27236 // represent one byte
27237 // if there is only one, then the three characters before it represent 2 bytes
27238 // this is just a cheap hack to not do indexOf twice
27239 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
27240 }
27241
27242 function byteLength (b64) {
27243 // base64 is 4/3 + up to two characters of the original data
27244 return b64.length * 3 / 4 - placeHoldersCount(b64)
27245 }
27246
27247 function toByteArray (b64) {
27248 var i, j, l, tmp, placeHolders, arr
27249 var len = b64.length
27250 placeHolders = placeHoldersCount(b64)
27251
27252 arr = new Arr(len * 3 / 4 - placeHolders)
27253
27254 // if there are placeholders, only get up to the last complete 4 chars
27255 l = placeHolders > 0 ? len - 4 : len
27256
27257 var L = 0
27258
27259 for (i = 0, j = 0; i < l; i += 4, j += 3) {
27260 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
27261 arr[L++] = (tmp >> 16) & 0xFF
27262 arr[L++] = (tmp >> 8) & 0xFF
27263 arr[L++] = tmp & 0xFF
27264 }
27265
27266 if (placeHolders === 2) {
27267 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
27268 arr[L++] = tmp & 0xFF
27269 } else if (placeHolders === 1) {
27270 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
27271 arr[L++] = (tmp >> 8) & 0xFF
27272 arr[L++] = tmp & 0xFF
27273 }
27274
27275 return arr
27276 }
27277
27278 function tripletToBase64 (num) {
27279 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
27280 }
27281
27282 function encodeChunk (uint8, start, end) {
27283 var tmp
27284 var output = []
27285 for (var i = start; i < end; i += 3) {
27286 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
27287 output.push(tripletToBase64(tmp))
27288 }
27289 return output.join('')
27290 }
27291
27292 function fromByteArray (uint8) {
27293 var tmp
27294 var len = uint8.length
27295 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
27296 var output = ''
27297 var parts = []
27298 var maxChunkLength = 16383 // must be multiple of 3
27299
27300 // go through the array every three bytes, we'll deal with trailing stuff later
27301 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
27302 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
27303 }
27304
27305 // pad the end with zeros, but make sure to not forget the extra bytes
27306 if (extraBytes === 1) {
27307 tmp = uint8[len - 1]
27308 output += lookup[tmp >> 2]
27309 output += lookup[(tmp << 4) & 0x3F]
27310 output += '=='
27311 } else if (extraBytes === 2) {
27312 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
27313 output += lookup[tmp >> 10]
27314 output += lookup[(tmp >> 4) & 0x3F]
27315 output += lookup[(tmp << 2) & 0x3F]
27316 output += '='
27317 }
27318
27319 parts.push(output)
27320
27321 return parts.join('')
27322 }
27323
27324 },{}],3:[function(require,module,exports){
27325
27326 },{}],4:[function(require,module,exports){
27327 (function (global){
27328 'use strict';
27329
27330 var buffer = require('buffer');
27331 var Buffer = buffer.Buffer;
27332 var SlowBuffer = buffer.SlowBuffer;
27333 var MAX_LEN = buffer.kMaxLength || 2147483647;
27334 exports.alloc = function alloc(size, fill, encoding) {
27335 if (typeof Buffer.alloc === 'function') {
27336 return Buffer.alloc(size, fill, encoding);
27337 }
27338 if (typeof encoding === 'number') {
27339 throw new TypeError('encoding must not be number');
27340 }
27341 if (typeof size !== 'number') {
27342 throw new TypeError('size must be a number');
27343 }
27344 if (size > MAX_LEN) {
27345 throw new RangeError('size is too large');
27346 }
27347 var enc = encoding;
27348 var _fill = fill;
27349 if (_fill === undefined) {
27350 enc = undefined;
27351 _fill = 0;
27352 }
27353 var buf = new Buffer(size);
27354 if (typeof _fill === 'string') {
27355 var fillBuf = new Buffer(_fill, enc);
27356 var flen = fillBuf.length;
27357 var i = -1;
27358 while (++i < size) {
27359 buf[i] = fillBuf[i % flen];
27360 }
27361 } else {
27362 buf.fill(_fill);
27363 }
27364 return buf;
27365 }
27366 exports.allocUnsafe = function allocUnsafe(size) {
27367 if (typeof Buffer.allocUnsafe === 'function') {
27368 return Buffer.allocUnsafe(size);
27369 }
27370 if (typeof size !== 'number') {
27371 throw new TypeError('size must be a number');
27372 }
27373 if (size > MAX_LEN) {
27374 throw new RangeError('size is too large');
27375 }
27376 return new Buffer(size);
27377 }
27378 exports.from = function from(value, encodingOrOffset, length) {
27379 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
27380 return Buffer.from(value, encodingOrOffset, length);
27381 }
27382 if (typeof value === 'number') {
27383 throw new TypeError('"value" argument must not be a number');
27384 }
27385 if (typeof value === 'string') {
27386 return new Buffer(value, encodingOrOffset);
27387 }
27388 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
27389 var offset = encodingOrOffset;
27390 if (arguments.length === 1) {
27391 return new Buffer(value);
27392 }
27393 if (typeof offset === 'undefined') {
27394 offset = 0;
27395 }
27396 var len = length;
27397 if (typeof len === 'undefined') {
27398 len = value.byteLength - offset;
27399 }
27400 if (offset >= value.byteLength) {
27401 throw new RangeError('\'offset\' is out of bounds');
27402 }
27403 if (len > value.byteLength - offset) {
27404 throw new RangeError('\'length\' is out of bounds');
27405 }
27406 return new Buffer(value.slice(offset, offset + len));
27407 }
27408 if (Buffer.isBuffer(value)) {
27409 var out = new Buffer(value.length);
27410 value.copy(out, 0, 0, value.length);
27411 return out;
27412 }
27413 if (value) {
27414 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
27415 return new Buffer(value);
27416 }
27417 if (value.type === 'Buffer' && Array.isArray(value.data)) {
27418 return new Buffer(value.data);
27419 }
27420 }
27421
27422 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
27423 }
27424 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
27425 if (typeof Buffer.allocUnsafeSlow === 'function') {
27426 return Buffer.allocUnsafeSlow(size);
27427 }
27428 if (typeof size !== 'number') {
27429 throw new TypeError('size must be a number');
27430 }
27431 if (size >= MAX_LEN) {
27432 throw new RangeError('size is too large');
27433 }
27434 return new SlowBuffer(size);
27435 }
27436
27437 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
27438 },{"buffer":5}],5:[function(require,module,exports){
27439 /*!
27440 * The buffer module from node.js, for the browser.
27441 *
27442 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
27443 * @license MIT
27444 */
27445 /* eslint-disable no-proto */
27446
27447 'use strict'
27448
27449 var base64 = require('base64-js')
27450 var ieee754 = require('ieee754')
27451
27452 exports.Buffer = Buffer
27453 exports.SlowBuffer = SlowBuffer
27454 exports.INSPECT_MAX_BYTES = 50
27455
27456 var K_MAX_LENGTH = 0x7fffffff
27457 exports.kMaxLength = K_MAX_LENGTH
27458
27459 /**
27460 * If `Buffer.TYPED_ARRAY_SUPPORT`:
27461 * === true Use Uint8Array implementation (fastest)
27462 * === false Print warning and recommend using `buffer` v4.x which has an Object
27463 * implementation (most compatible, even IE6)
27464 *
27465 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
27466 * Opera 11.6+, iOS 4.2+.
27467 *
27468 * We report that the browser does not support typed arrays if the are not subclassable
27469 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
27470 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
27471 * for __proto__ and has a buggy typed array implementation.
27472 */
27473 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
27474
27475 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
27476 typeof console.error === 'function') {
27477 console.error(
27478 'This browser lacks typed array (Uint8Array) support which is required by ' +
27479 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
27480 )
27481 }
27482
27483 function typedArraySupport () {
27484 // Can typed array instances can be augmented?
27485 try {
27486 var arr = new Uint8Array(1)
27487 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
27488 return arr.foo() === 42
27489 } catch (e) {
27490 return false
27491 }
27492 }
27493
27494 function createBuffer (length) {
27495 if (length > K_MAX_LENGTH) {
27496 throw new RangeError('Invalid typed array length')
27497 }
27498 // Return an augmented `Uint8Array` instance
27499 var buf = new Uint8Array(length)
27500 buf.__proto__ = Buffer.prototype
27501 return buf
27502 }
27503
27504 /**
27505 * The Buffer constructor returns instances of `Uint8Array` that have their
27506 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
27507 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
27508 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
27509 * returns a single octet.
27510 *
27511 * The `Uint8Array` prototype remains unmodified.
27512 */
27513
27514 function Buffer (arg, encodingOrOffset, length) {
27515 // Common case.
27516 if (typeof arg === 'number') {
27517 if (typeof encodingOrOffset === 'string') {
27518 throw new Error(
27519 'If encoding is specified then the first argument must be a string'
27520 )
27521 }
27522 return allocUnsafe(arg)
27523 }
27524 return from(arg, encodingOrOffset, length)
27525 }
27526
27527 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
27528 if (typeof Symbol !== 'undefined' && Symbol.species &&
27529 Buffer[Symbol.species] === Buffer) {
27530 Object.defineProperty(Buffer, Symbol.species, {
27531 value: null,
27532 configurable: true,
27533 enumerable: false,
27534 writable: false
27535 })
27536 }
27537
27538 Buffer.poolSize = 8192 // not used by this implementation
27539
27540 function from (value, encodingOrOffset, length) {
27541 if (typeof value === 'number') {
27542 throw new TypeError('"value" argument must not be a number')
27543 }
27544
27545 if (value instanceof ArrayBuffer) {
27546 return fromArrayBuffer(value, encodingOrOffset, length)
27547 }
27548
27549 if (typeof value === 'string') {
27550 return fromString(value, encodingOrOffset)
27551 }
27552
27553 return fromObject(value)
27554 }
27555
27556 /**
27557 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
27558 * if value is a number.
27559 * Buffer.from(str[, encoding])
27560 * Buffer.from(array)
27561 * Buffer.from(buffer)
27562 * Buffer.from(arrayBuffer[, byteOffset[, length]])
27563 **/
27564 Buffer.from = function (value, encodingOrOffset, length) {
27565 return from(value, encodingOrOffset, length)
27566 }
27567
27568 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
27569 // https://github.com/feross/buffer/pull/148
27570 Buffer.prototype.__proto__ = Uint8Array.prototype
27571 Buffer.__proto__ = Uint8Array
27572
27573 function assertSize (size) {
27574 if (typeof size !== 'number') {
27575 throw new TypeError('"size" argument must be a number')
27576 } else if (size < 0) {
27577 throw new RangeError('"size" argument must not be negative')
27578 }
27579 }
27580
27581 function alloc (size, fill, encoding) {
27582 assertSize(size)
27583 if (size <= 0) {
27584 return createBuffer(size)
27585 }
27586 if (fill !== undefined) {
27587 // Only pay attention to encoding if it's a string. This
27588 // prevents accidentally sending in a number that would
27589 // be interpretted as a start offset.
27590 return typeof encoding === 'string'
27591 ? createBuffer(size).fill(fill, encoding)
27592 : createBuffer(size).fill(fill)
27593 }
27594 return createBuffer(size)
27595 }
27596
27597 /**
27598 * Creates a new filled Buffer instance.
27599 * alloc(size[, fill[, encoding]])
27600 **/
27601 Buffer.alloc = function (size, fill, encoding) {
27602 return alloc(size, fill, encoding)
27603 }
27604
27605 function allocUnsafe (size) {
27606 assertSize(size)
27607 return createBuffer(size < 0 ? 0 : checked(size) | 0)
27608 }
27609
27610 /**
27611 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
27612 * */
27613 Buffer.allocUnsafe = function (size) {
27614 return allocUnsafe(size)
27615 }
27616 /**
27617 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
27618 */
27619 Buffer.allocUnsafeSlow = function (size) {
27620 return allocUnsafe(size)
27621 }
27622
27623 function fromString (string, encoding) {
27624 if (typeof encoding !== 'string' || encoding === '') {
27625 encoding = 'utf8'
27626 }
27627
27628 if (!Buffer.isEncoding(encoding)) {
27629 throw new TypeError('"encoding" must be a valid string encoding')
27630 }
27631
27632 var length = byteLength(string, encoding) | 0
27633 var buf = createBuffer(length)
27634
27635 var actual = buf.write(string, encoding)
27636
27637 if (actual !== length) {
27638 // Writing a hex string, for example, that contains invalid characters will
27639 // cause everything after the first invalid character to be ignored. (e.g.
27640 // 'abxxcd' will be treated as 'ab')
27641 buf = buf.slice(0, actual)
27642 }
27643
27644 return buf
27645 }
27646
27647 function fromArrayLike (array) {
27648 var length = array.length < 0 ? 0 : checked(array.length) | 0
27649 var buf = createBuffer(length)
27650 for (var i = 0; i < length; i += 1) {
27651 buf[i] = array[i] & 255
27652 }
27653 return buf
27654 }
27655
27656 function fromArrayBuffer (array, byteOffset, length) {
27657 if (byteOffset < 0 || array.byteLength < byteOffset) {
27658 throw new RangeError('\'offset\' is out of bounds')
27659 }
27660
27661 if (array.byteLength < byteOffset + (length || 0)) {
27662 throw new RangeError('\'length\' is out of bounds')
27663 }
27664
27665 var buf
27666 if (byteOffset === undefined && length === undefined) {
27667 buf = new Uint8Array(array)
27668 } else if (length === undefined) {
27669 buf = new Uint8Array(array, byteOffset)
27670 } else {
27671 buf = new Uint8Array(array, byteOffset, length)
27672 }
27673
27674 // Return an augmented `Uint8Array` instance
27675 buf.__proto__ = Buffer.prototype
27676 return buf
27677 }
27678
27679 function fromObject (obj) {
27680 if (Buffer.isBuffer(obj)) {
27681 var len = checked(obj.length) | 0
27682 var buf = createBuffer(len)
27683
27684 if (buf.length === 0) {
27685 return buf
27686 }
27687
27688 obj.copy(buf, 0, 0, len)
27689 return buf
27690 }
27691
27692 if (obj) {
27693 if (isArrayBufferView(obj) || 'length' in obj) {
27694 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
27695 return createBuffer(0)
27696 }
27697 return fromArrayLike(obj)
27698 }
27699
27700 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
27701 return fromArrayLike(obj.data)
27702 }
27703 }
27704
27705 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
27706 }
27707
27708 function checked (length) {
27709 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
27710 // length is NaN (which is otherwise coerced to zero.)
27711 if (length >= K_MAX_LENGTH) {
27712 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
27713 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
27714 }
27715 return length | 0
27716 }
27717
27718 function SlowBuffer (length) {
27719 if (+length != length) { // eslint-disable-line eqeqeq
27720 length = 0
27721 }
27722 return Buffer.alloc(+length)
27723 }
27724
27725 Buffer.isBuffer = function isBuffer (b) {
27726 return b != null && b._isBuffer === true
27727 }
27728
27729 Buffer.compare = function compare (a, b) {
27730 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
27731 throw new TypeError('Arguments must be Buffers')
27732 }
27733
27734 if (a === b) return 0
27735
27736 var x = a.length
27737 var y = b.length
27738
27739 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
27740 if (a[i] !== b[i]) {
27741 x = a[i]
27742 y = b[i]
27743 break
27744 }
27745 }
27746
27747 if (x < y) return -1
27748 if (y < x) return 1
27749 return 0
27750 }
27751
27752 Buffer.isEncoding = function isEncoding (encoding) {
27753 switch (String(encoding).toLowerCase()) {
27754 case 'hex':
27755 case 'utf8':
27756 case 'utf-8':
27757 case 'ascii':
27758 case 'latin1':
27759 case 'binary':
27760 case 'base64':
27761 case 'ucs2':
27762 case 'ucs-2':
27763 case 'utf16le':
27764 case 'utf-16le':
27765 return true
27766 default:
27767 return false
27768 }
27769 }
27770
27771 Buffer.concat = function concat (list, length) {
27772 if (!Array.isArray(list)) {
27773 throw new TypeError('"list" argument must be an Array of Buffers')
27774 }
27775
27776 if (list.length === 0) {
27777 return Buffer.alloc(0)
27778 }
27779
27780 var i
27781 if (length === undefined) {
27782 length = 0
27783 for (i = 0; i < list.length; ++i) {
27784 length += list[i].length
27785 }
27786 }
27787
27788 var buffer = Buffer.allocUnsafe(length)
27789 var pos = 0
27790 for (i = 0; i < list.length; ++i) {
27791 var buf = list[i]
27792 if (!Buffer.isBuffer(buf)) {
27793 throw new TypeError('"list" argument must be an Array of Buffers')
27794 }
27795 buf.copy(buffer, pos)
27796 pos += buf.length
27797 }
27798 return buffer
27799 }
27800
27801 function byteLength (string, encoding) {
27802 if (Buffer.isBuffer(string)) {
27803 return string.length
27804 }
27805 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
27806 return string.byteLength
27807 }
27808 if (typeof string !== 'string') {
27809 string = '' + string
27810 }
27811
27812 var len = string.length
27813 if (len === 0) return 0
27814
27815 // Use a for loop to avoid recursion
27816 var loweredCase = false
27817 for (;;) {
27818 switch (encoding) {
27819 case 'ascii':
27820 case 'latin1':
27821 case 'binary':
27822 return len
27823 case 'utf8':
27824 case 'utf-8':
27825 case undefined:
27826 return utf8ToBytes(string).length
27827 case 'ucs2':
27828 case 'ucs-2':
27829 case 'utf16le':
27830 case 'utf-16le':
27831 return len * 2
27832 case 'hex':
27833 return len >>> 1
27834 case 'base64':
27835 return base64ToBytes(string).length
27836 default:
27837 if (loweredCase) return utf8ToBytes(string).length // assume utf8
27838 encoding = ('' + encoding).toLowerCase()
27839 loweredCase = true
27840 }
27841 }
27842 }
27843 Buffer.byteLength = byteLength
27844
27845 function slowToString (encoding, start, end) {
27846 var loweredCase = false
27847
27848 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
27849 // property of a typed array.
27850
27851 // This behaves neither like String nor Uint8Array in that we set start/end
27852 // to their upper/lower bounds if the value passed is out of range.
27853 // undefined is handled specially as per ECMA-262 6th Edition,
27854 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
27855 if (start === undefined || start < 0) {
27856 start = 0
27857 }
27858 // Return early if start > this.length. Done here to prevent potential uint32
27859 // coercion fail below.
27860 if (start > this.length) {
27861 return ''
27862 }
27863
27864 if (end === undefined || end > this.length) {
27865 end = this.length
27866 }
27867
27868 if (end <= 0) {
27869 return ''
27870 }
27871
27872 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
27873 end >>>= 0
27874 start >>>= 0
27875
27876 if (end <= start) {
27877 return ''
27878 }
27879
27880 if (!encoding) encoding = 'utf8'
27881
27882 while (true) {
27883 switch (encoding) {
27884 case 'hex':
27885 return hexSlice(this, start, end)
27886
27887 case 'utf8':
27888 case 'utf-8':
27889 return utf8Slice(this, start, end)
27890
27891 case 'ascii':
27892 return asciiSlice(this, start, end)
27893
27894 case 'latin1':
27895 case 'binary':
27896 return latin1Slice(this, start, end)
27897
27898 case 'base64':
27899 return base64Slice(this, start, end)
27900
27901 case 'ucs2':
27902 case 'ucs-2':
27903 case 'utf16le':
27904 case 'utf-16le':
27905 return utf16leSlice(this, start, end)
27906
27907 default:
27908 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
27909 encoding = (encoding + '').toLowerCase()
27910 loweredCase = true
27911 }
27912 }
27913 }
27914
27915 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
27916 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
27917 // reliably in a browserify context because there could be multiple different
27918 // copies of the 'buffer' package in use. This method works even for Buffer
27919 // instances that were created from another copy of the `buffer` package.
27920 // See: https://github.com/feross/buffer/issues/154
27921 Buffer.prototype._isBuffer = true
27922
27923 function swap (b, n, m) {
27924 var i = b[n]
27925 b[n] = b[m]
27926 b[m] = i
27927 }
27928
27929 Buffer.prototype.swap16 = function swap16 () {
27930 var len = this.length
27931 if (len % 2 !== 0) {
27932 throw new RangeError('Buffer size must be a multiple of 16-bits')
27933 }
27934 for (var i = 0; i < len; i += 2) {
27935 swap(this, i, i + 1)
27936 }
27937 return this
27938 }
27939
27940 Buffer.prototype.swap32 = function swap32 () {
27941 var len = this.length
27942 if (len % 4 !== 0) {
27943 throw new RangeError('Buffer size must be a multiple of 32-bits')
27944 }
27945 for (var i = 0; i < len; i += 4) {
27946 swap(this, i, i + 3)
27947 swap(this, i + 1, i + 2)
27948 }
27949 return this
27950 }
27951
27952 Buffer.prototype.swap64 = function swap64 () {
27953 var len = this.length
27954 if (len % 8 !== 0) {
27955 throw new RangeError('Buffer size must be a multiple of 64-bits')
27956 }
27957 for (var i = 0; i < len; i += 8) {
27958 swap(this, i, i + 7)
27959 swap(this, i + 1, i + 6)
27960 swap(this, i + 2, i + 5)
27961 swap(this, i + 3, i + 4)
27962 }
27963 return this
27964 }
27965
27966 Buffer.prototype.toString = function toString () {
27967 var length = this.length
27968 if (length === 0) return ''
27969 if (arguments.length === 0) return utf8Slice(this, 0, length)
27970 return slowToString.apply(this, arguments)
27971 }
27972
27973 Buffer.prototype.equals = function equals (b) {
27974 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
27975 if (this === b) return true
27976 return Buffer.compare(this, b) === 0
27977 }
27978
27979 Buffer.prototype.inspect = function inspect () {
27980 var str = ''
27981 var max = exports.INSPECT_MAX_BYTES
27982 if (this.length > 0) {
27983 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
27984 if (this.length > max) str += ' ... '
27985 }
27986 return '<Buffer ' + str + '>'
27987 }
27988
27989 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
27990 if (!Buffer.isBuffer(target)) {
27991 throw new TypeError('Argument must be a Buffer')
27992 }
27993
27994 if (start === undefined) {
27995 start = 0
27996 }
27997 if (end === undefined) {
27998 end = target ? target.length : 0
27999 }
28000 if (thisStart === undefined) {
28001 thisStart = 0
28002 }
28003 if (thisEnd === undefined) {
28004 thisEnd = this.length
28005 }
28006
28007 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
28008 throw new RangeError('out of range index')
28009 }
28010
28011 if (thisStart >= thisEnd && start >= end) {
28012 return 0
28013 }
28014 if (thisStart >= thisEnd) {
28015 return -1
28016 }
28017 if (start >= end) {
28018 return 1
28019 }
28020
28021 start >>>= 0
28022 end >>>= 0
28023 thisStart >>>= 0
28024 thisEnd >>>= 0
28025
28026 if (this === target) return 0
28027
28028 var x = thisEnd - thisStart
28029 var y = end - start
28030 var len = Math.min(x, y)
28031
28032 var thisCopy = this.slice(thisStart, thisEnd)
28033 var targetCopy = target.slice(start, end)
28034
28035 for (var i = 0; i < len; ++i) {
28036 if (thisCopy[i] !== targetCopy[i]) {
28037 x = thisCopy[i]
28038 y = targetCopy[i]
28039 break
28040 }
28041 }
28042
28043 if (x < y) return -1
28044 if (y < x) return 1
28045 return 0
28046 }
28047
28048 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
28049 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
28050 //
28051 // Arguments:
28052 // - buffer - a Buffer to search
28053 // - val - a string, Buffer, or number
28054 // - byteOffset - an index into `buffer`; will be clamped to an int32
28055 // - encoding - an optional encoding, relevant is val is a string
28056 // - dir - true for indexOf, false for lastIndexOf
28057 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
28058 // Empty buffer means no match
28059 if (buffer.length === 0) return -1
28060
28061 // Normalize byteOffset
28062 if (typeof byteOffset === 'string') {
28063 encoding = byteOffset
28064 byteOffset = 0
28065 } else if (byteOffset > 0x7fffffff) {
28066 byteOffset = 0x7fffffff
28067 } else if (byteOffset < -0x80000000) {
28068 byteOffset = -0x80000000
28069 }
28070 byteOffset = +byteOffset // Coerce to Number.
28071 if (numberIsNaN(byteOffset)) {
28072 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
28073 byteOffset = dir ? 0 : (buffer.length - 1)
28074 }
28075
28076 // Normalize byteOffset: negative offsets start from the end of the buffer
28077 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
28078 if (byteOffset >= buffer.length) {
28079 if (dir) return -1
28080 else byteOffset = buffer.length - 1
28081 } else if (byteOffset < 0) {
28082 if (dir) byteOffset = 0
28083 else return -1
28084 }
28085
28086 // Normalize val
28087 if (typeof val === 'string') {
28088 val = Buffer.from(val, encoding)
28089 }
28090
28091 // Finally, search either indexOf (if dir is true) or lastIndexOf
28092 if (Buffer.isBuffer(val)) {
28093 // Special case: looking for empty string/buffer always fails
28094 if (val.length === 0) {
28095 return -1
28096 }
28097 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
28098 } else if (typeof val === 'number') {
28099 val = val & 0xFF // Search for a byte value [0-255]
28100 if (typeof Uint8Array.prototype.indexOf === 'function') {
28101 if (dir) {
28102 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
28103 } else {
28104 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
28105 }
28106 }
28107 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
28108 }
28109
28110 throw new TypeError('val must be string, number or Buffer')
28111 }
28112
28113 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
28114 var indexSize = 1
28115 var arrLength = arr.length
28116 var valLength = val.length
28117
28118 if (encoding !== undefined) {
28119 encoding = String(encoding).toLowerCase()
28120 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
28121 encoding === 'utf16le' || encoding === 'utf-16le') {
28122 if (arr.length < 2 || val.length < 2) {
28123 return -1
28124 }
28125 indexSize = 2
28126 arrLength /= 2
28127 valLength /= 2
28128 byteOffset /= 2
28129 }
28130 }
28131
28132 function read (buf, i) {
28133 if (indexSize === 1) {
28134 return buf[i]
28135 } else {
28136 return buf.readUInt16BE(i * indexSize)
28137 }
28138 }
28139
28140 var i
28141 if (dir) {
28142 var foundIndex = -1
28143 for (i = byteOffset; i < arrLength; i++) {
28144 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
28145 if (foundIndex === -1) foundIndex = i
28146 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
28147 } else {
28148 if (foundIndex !== -1) i -= i - foundIndex
28149 foundIndex = -1
28150 }
28151 }
28152 } else {
28153 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
28154 for (i = byteOffset; i >= 0; i--) {
28155 var found = true
28156 for (var j = 0; j < valLength; j++) {
28157 if (read(arr, i + j) !== read(val, j)) {
28158 found = false
28159 break
28160 }
28161 }
28162 if (found) return i
28163 }
28164 }
28165
28166 return -1
28167 }
28168
28169 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
28170 return this.indexOf(val, byteOffset, encoding) !== -1
28171 }
28172
28173 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
28174 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
28175 }
28176
28177 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
28178 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
28179 }
28180
28181 function hexWrite (buf, string, offset, length) {
28182 offset = Number(offset) || 0
28183 var remaining = buf.length - offset
28184 if (!length) {
28185 length = remaining
28186 } else {
28187 length = Number(length)
28188 if (length > remaining) {
28189 length = remaining
28190 }
28191 }
28192
28193 // must be an even number of digits
28194 var strLen = string.length
28195 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
28196
28197 if (length > strLen / 2) {
28198 length = strLen / 2
28199 }
28200 for (var i = 0; i < length; ++i) {
28201 var parsed = parseInt(string.substr(i * 2, 2), 16)
28202 if (numberIsNaN(parsed)) return i
28203 buf[offset + i] = parsed
28204 }
28205 return i
28206 }
28207
28208 function utf8Write (buf, string, offset, length) {
28209 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
28210 }
28211
28212 function asciiWrite (buf, string, offset, length) {
28213 return blitBuffer(asciiToBytes(string), buf, offset, length)
28214 }
28215
28216 function latin1Write (buf, string, offset, length) {
28217 return asciiWrite(buf, string, offset, length)
28218 }
28219
28220 function base64Write (buf, string, offset, length) {
28221 return blitBuffer(base64ToBytes(string), buf, offset, length)
28222 }
28223
28224 function ucs2Write (buf, string, offset, length) {
28225 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
28226 }
28227
28228 Buffer.prototype.write = function write (string, offset, length, encoding) {
28229 // Buffer#write(string)
28230 if (offset === undefined) {
28231 encoding = 'utf8'
28232 length = this.length
28233 offset = 0
28234 // Buffer#write(string, encoding)
28235 } else if (length === undefined && typeof offset === 'string') {
28236 encoding = offset
28237 length = this.length
28238 offset = 0
28239 // Buffer#write(string, offset[, length][, encoding])
28240 } else if (isFinite(offset)) {
28241 offset = offset >>> 0
28242 if (isFinite(length)) {
28243 length = length >>> 0
28244 if (encoding === undefined) encoding = 'utf8'
28245 } else {
28246 encoding = length
28247 length = undefined
28248 }
28249 } else {
28250 throw new Error(
28251 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
28252 )
28253 }
28254
28255 var remaining = this.length - offset
28256 if (length === undefined || length > remaining) length = remaining
28257
28258 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
28259 throw new RangeError('Attempt to write outside buffer bounds')
28260 }
28261
28262 if (!encoding) encoding = 'utf8'
28263
28264 var loweredCase = false
28265 for (;;) {
28266 switch (encoding) {
28267 case 'hex':
28268 return hexWrite(this, string, offset, length)
28269
28270 case 'utf8':
28271 case 'utf-8':
28272 return utf8Write(this, string, offset, length)
28273
28274 case 'ascii':
28275 return asciiWrite(this, string, offset, length)
28276
28277 case 'latin1':
28278 case 'binary':
28279 return latin1Write(this, string, offset, length)
28280
28281 case 'base64':
28282 // Warning: maxLength not taken into account in base64Write
28283 return base64Write(this, string, offset, length)
28284
28285 case 'ucs2':
28286 case 'ucs-2':
28287 case 'utf16le':
28288 case 'utf-16le':
28289 return ucs2Write(this, string, offset, length)
28290
28291 default:
28292 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
28293 encoding = ('' + encoding).toLowerCase()
28294 loweredCase = true
28295 }
28296 }
28297 }
28298
28299 Buffer.prototype.toJSON = function toJSON () {
28300 return {
28301 type: 'Buffer',
28302 data: Array.prototype.slice.call(this._arr || this, 0)
28303 }
28304 }
28305
28306 function base64Slice (buf, start, end) {
28307 if (start === 0 && end === buf.length) {
28308 return base64.fromByteArray(buf)
28309 } else {
28310 return base64.fromByteArray(buf.slice(start, end))
28311 }
28312 }
28313
28314 function utf8Slice (buf, start, end) {
28315 end = Math.min(buf.length, end)
28316 var res = []
28317
28318 var i = start
28319 while (i < end) {
28320 var firstByte = buf[i]
28321 var codePoint = null
28322 var bytesPerSequence = (firstByte > 0xEF) ? 4
28323 : (firstByte > 0xDF) ? 3
28324 : (firstByte > 0xBF) ? 2
28325 : 1
28326
28327 if (i + bytesPerSequence <= end) {
28328 var secondByte, thirdByte, fourthByte, tempCodePoint
28329
28330 switch (bytesPerSequence) {
28331 case 1:
28332 if (firstByte < 0x80) {
28333 codePoint = firstByte
28334 }
28335 break
28336 case 2:
28337 secondByte = buf[i + 1]
28338 if ((secondByte & 0xC0) === 0x80) {
28339 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
28340 if (tempCodePoint > 0x7F) {
28341 codePoint = tempCodePoint
28342 }
28343 }
28344 break
28345 case 3:
28346 secondByte = buf[i + 1]
28347 thirdByte = buf[i + 2]
28348 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
28349 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
28350 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
28351 codePoint = tempCodePoint
28352 }
28353 }
28354 break
28355 case 4:
28356 secondByte = buf[i + 1]
28357 thirdByte = buf[i + 2]
28358 fourthByte = buf[i + 3]
28359 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
28360 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
28361 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
28362 codePoint = tempCodePoint
28363 }
28364 }
28365 }
28366 }
28367
28368 if (codePoint === null) {
28369 // we did not generate a valid codePoint so insert a
28370 // replacement char (U+FFFD) and advance only 1 byte
28371 codePoint = 0xFFFD
28372 bytesPerSequence = 1
28373 } else if (codePoint > 0xFFFF) {
28374 // encode to utf16 (surrogate pair dance)
28375 codePoint -= 0x10000
28376 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
28377 codePoint = 0xDC00 | codePoint & 0x3FF
28378 }
28379
28380 res.push(codePoint)
28381 i += bytesPerSequence
28382 }
28383
28384 return decodeCodePointsArray(res)
28385 }
28386
28387 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
28388 // the lowest limit is Chrome, with 0x10000 args.
28389 // We go 1 magnitude less, for safety
28390 var MAX_ARGUMENTS_LENGTH = 0x1000
28391
28392 function decodeCodePointsArray (codePoints) {
28393 var len = codePoints.length
28394 if (len <= MAX_ARGUMENTS_LENGTH) {
28395 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
28396 }
28397
28398 // Decode in chunks to avoid "call stack size exceeded".
28399 var res = ''
28400 var i = 0
28401 while (i < len) {
28402 res += String.fromCharCode.apply(
28403 String,
28404 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
28405 )
28406 }
28407 return res
28408 }
28409
28410 function asciiSlice (buf, start, end) {
28411 var ret = ''
28412 end = Math.min(buf.length, end)
28413
28414 for (var i = start; i < end; ++i) {
28415 ret += String.fromCharCode(buf[i] & 0x7F)
28416 }
28417 return ret
28418 }
28419
28420 function latin1Slice (buf, start, end) {
28421 var ret = ''
28422 end = Math.min(buf.length, end)
28423
28424 for (var i = start; i < end; ++i) {
28425 ret += String.fromCharCode(buf[i])
28426 }
28427 return ret
28428 }
28429
28430 function hexSlice (buf, start, end) {
28431 var len = buf.length
28432
28433 if (!start || start < 0) start = 0
28434 if (!end || end < 0 || end > len) end = len
28435
28436 var out = ''
28437 for (var i = start; i < end; ++i) {
28438 out += toHex(buf[i])
28439 }
28440 return out
28441 }
28442
28443 function utf16leSlice (buf, start, end) {
28444 var bytes = buf.slice(start, end)
28445 var res = ''
28446 for (var i = 0; i < bytes.length; i += 2) {
28447 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
28448 }
28449 return res
28450 }
28451
28452 Buffer.prototype.slice = function slice (start, end) {
28453 var len = this.length
28454 start = ~~start
28455 end = end === undefined ? len : ~~end
28456
28457 if (start < 0) {
28458 start += len
28459 if (start < 0) start = 0
28460 } else if (start > len) {
28461 start = len
28462 }
28463
28464 if (end < 0) {
28465 end += len
28466 if (end < 0) end = 0
28467 } else if (end > len) {
28468 end = len
28469 }
28470
28471 if (end < start) end = start
28472
28473 var newBuf = this.subarray(start, end)
28474 // Return an augmented `Uint8Array` instance
28475 newBuf.__proto__ = Buffer.prototype
28476 return newBuf
28477 }
28478
28479 /*
28480 * Need to make sure that buffer isn't trying to write out of bounds.
28481 */
28482 function checkOffset (offset, ext, length) {
28483 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
28484 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
28485 }
28486
28487 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
28488 offset = offset >>> 0
28489 byteLength = byteLength >>> 0
28490 if (!noAssert) checkOffset(offset, byteLength, this.length)
28491
28492 var val = this[offset]
28493 var mul = 1
28494 var i = 0
28495 while (++i < byteLength && (mul *= 0x100)) {
28496 val += this[offset + i] * mul
28497 }
28498
28499 return val
28500 }
28501
28502 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
28503 offset = offset >>> 0
28504 byteLength = byteLength >>> 0
28505 if (!noAssert) {
28506 checkOffset(offset, byteLength, this.length)
28507 }
28508
28509 var val = this[offset + --byteLength]
28510 var mul = 1
28511 while (byteLength > 0 && (mul *= 0x100)) {
28512 val += this[offset + --byteLength] * mul
28513 }
28514
28515 return val
28516 }
28517
28518 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
28519 offset = offset >>> 0
28520 if (!noAssert) checkOffset(offset, 1, this.length)
28521 return this[offset]
28522 }
28523
28524 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
28525 offset = offset >>> 0
28526 if (!noAssert) checkOffset(offset, 2, this.length)
28527 return this[offset] | (this[offset + 1] << 8)
28528 }
28529
28530 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
28531 offset = offset >>> 0
28532 if (!noAssert) checkOffset(offset, 2, this.length)
28533 return (this[offset] << 8) | this[offset + 1]
28534 }
28535
28536 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
28537 offset = offset >>> 0
28538 if (!noAssert) checkOffset(offset, 4, this.length)
28539
28540 return ((this[offset]) |
28541 (this[offset + 1] << 8) |
28542 (this[offset + 2] << 16)) +
28543 (this[offset + 3] * 0x1000000)
28544 }
28545
28546 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
28547 offset = offset >>> 0
28548 if (!noAssert) checkOffset(offset, 4, this.length)
28549
28550 return (this[offset] * 0x1000000) +
28551 ((this[offset + 1] << 16) |
28552 (this[offset + 2] << 8) |
28553 this[offset + 3])
28554 }
28555
28556 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
28557 offset = offset >>> 0
28558 byteLength = byteLength >>> 0
28559 if (!noAssert) checkOffset(offset, byteLength, this.length)
28560
28561 var val = this[offset]
28562 var mul = 1
28563 var i = 0
28564 while (++i < byteLength && (mul *= 0x100)) {
28565 val += this[offset + i] * mul
28566 }
28567 mul *= 0x80
28568
28569 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
28570
28571 return val
28572 }
28573
28574 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
28575 offset = offset >>> 0
28576 byteLength = byteLength >>> 0
28577 if (!noAssert) checkOffset(offset, byteLength, this.length)
28578
28579 var i = byteLength
28580 var mul = 1
28581 var val = this[offset + --i]
28582 while (i > 0 && (mul *= 0x100)) {
28583 val += this[offset + --i] * mul
28584 }
28585 mul *= 0x80
28586
28587 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
28588
28589 return val
28590 }
28591
28592 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
28593 offset = offset >>> 0
28594 if (!noAssert) checkOffset(offset, 1, this.length)
28595 if (!(this[offset] & 0x80)) return (this[offset])
28596 return ((0xff - this[offset] + 1) * -1)
28597 }
28598
28599 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
28600 offset = offset >>> 0
28601 if (!noAssert) checkOffset(offset, 2, this.length)
28602 var val = this[offset] | (this[offset + 1] << 8)
28603 return (val & 0x8000) ? val | 0xFFFF0000 : val
28604 }
28605
28606 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
28607 offset = offset >>> 0
28608 if (!noAssert) checkOffset(offset, 2, this.length)
28609 var val = this[offset + 1] | (this[offset] << 8)
28610 return (val & 0x8000) ? val | 0xFFFF0000 : val
28611 }
28612
28613 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
28614 offset = offset >>> 0
28615 if (!noAssert) checkOffset(offset, 4, this.length)
28616
28617 return (this[offset]) |
28618 (this[offset + 1] << 8) |
28619 (this[offset + 2] << 16) |
28620 (this[offset + 3] << 24)
28621 }
28622
28623 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
28624 offset = offset >>> 0
28625 if (!noAssert) checkOffset(offset, 4, this.length)
28626
28627 return (this[offset] << 24) |
28628 (this[offset + 1] << 16) |
28629 (this[offset + 2] << 8) |
28630 (this[offset + 3])
28631 }
28632
28633 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
28634 offset = offset >>> 0
28635 if (!noAssert) checkOffset(offset, 4, this.length)
28636 return ieee754.read(this, offset, true, 23, 4)
28637 }
28638
28639 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
28640 offset = offset >>> 0
28641 if (!noAssert) checkOffset(offset, 4, this.length)
28642 return ieee754.read(this, offset, false, 23, 4)
28643 }
28644
28645 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
28646 offset = offset >>> 0
28647 if (!noAssert) checkOffset(offset, 8, this.length)
28648 return ieee754.read(this, offset, true, 52, 8)
28649 }
28650
28651 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
28652 offset = offset >>> 0
28653 if (!noAssert) checkOffset(offset, 8, this.length)
28654 return ieee754.read(this, offset, false, 52, 8)
28655 }
28656
28657 function checkInt (buf, value, offset, ext, max, min) {
28658 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
28659 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
28660 if (offset + ext > buf.length) throw new RangeError('Index out of range')
28661 }
28662
28663 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
28664 value = +value
28665 offset = offset >>> 0
28666 byteLength = byteLength >>> 0
28667 if (!noAssert) {
28668 var maxBytes = Math.pow(2, 8 * byteLength) - 1
28669 checkInt(this, value, offset, byteLength, maxBytes, 0)
28670 }
28671
28672 var mul = 1
28673 var i = 0
28674 this[offset] = value & 0xFF
28675 while (++i < byteLength && (mul *= 0x100)) {
28676 this[offset + i] = (value / mul) & 0xFF
28677 }
28678
28679 return offset + byteLength
28680 }
28681
28682 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
28683 value = +value
28684 offset = offset >>> 0
28685 byteLength = byteLength >>> 0
28686 if (!noAssert) {
28687 var maxBytes = Math.pow(2, 8 * byteLength) - 1
28688 checkInt(this, value, offset, byteLength, maxBytes, 0)
28689 }
28690
28691 var i = byteLength - 1
28692 var mul = 1
28693 this[offset + i] = value & 0xFF
28694 while (--i >= 0 && (mul *= 0x100)) {
28695 this[offset + i] = (value / mul) & 0xFF
28696 }
28697
28698 return offset + byteLength
28699 }
28700
28701 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
28702 value = +value
28703 offset = offset >>> 0
28704 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
28705 this[offset] = (value & 0xff)
28706 return offset + 1
28707 }
28708
28709 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
28710 value = +value
28711 offset = offset >>> 0
28712 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
28713 this[offset] = (value & 0xff)
28714 this[offset + 1] = (value >>> 8)
28715 return offset + 2
28716 }
28717
28718 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
28719 value = +value
28720 offset = offset >>> 0
28721 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
28722 this[offset] = (value >>> 8)
28723 this[offset + 1] = (value & 0xff)
28724 return offset + 2
28725 }
28726
28727 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
28728 value = +value
28729 offset = offset >>> 0
28730 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
28731 this[offset + 3] = (value >>> 24)
28732 this[offset + 2] = (value >>> 16)
28733 this[offset + 1] = (value >>> 8)
28734 this[offset] = (value & 0xff)
28735 return offset + 4
28736 }
28737
28738 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
28739 value = +value
28740 offset = offset >>> 0
28741 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
28742 this[offset] = (value >>> 24)
28743 this[offset + 1] = (value >>> 16)
28744 this[offset + 2] = (value >>> 8)
28745 this[offset + 3] = (value & 0xff)
28746 return offset + 4
28747 }
28748
28749 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
28750 value = +value
28751 offset = offset >>> 0
28752 if (!noAssert) {
28753 var limit = Math.pow(2, (8 * byteLength) - 1)
28754
28755 checkInt(this, value, offset, byteLength, limit - 1, -limit)
28756 }
28757
28758 var i = 0
28759 var mul = 1
28760 var sub = 0
28761 this[offset] = value & 0xFF
28762 while (++i < byteLength && (mul *= 0x100)) {
28763 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
28764 sub = 1
28765 }
28766 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
28767 }
28768
28769 return offset + byteLength
28770 }
28771
28772 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
28773 value = +value
28774 offset = offset >>> 0
28775 if (!noAssert) {
28776 var limit = Math.pow(2, (8 * byteLength) - 1)
28777
28778 checkInt(this, value, offset, byteLength, limit - 1, -limit)
28779 }
28780
28781 var i = byteLength - 1
28782 var mul = 1
28783 var sub = 0
28784 this[offset + i] = value & 0xFF
28785 while (--i >= 0 && (mul *= 0x100)) {
28786 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
28787 sub = 1
28788 }
28789 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
28790 }
28791
28792 return offset + byteLength
28793 }
28794
28795 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
28796 value = +value
28797 offset = offset >>> 0
28798 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
28799 if (value < 0) value = 0xff + value + 1
28800 this[offset] = (value & 0xff)
28801 return offset + 1
28802 }
28803
28804 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
28805 value = +value
28806 offset = offset >>> 0
28807 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
28808 this[offset] = (value & 0xff)
28809 this[offset + 1] = (value >>> 8)
28810 return offset + 2
28811 }
28812
28813 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
28814 value = +value
28815 offset = offset >>> 0
28816 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
28817 this[offset] = (value >>> 8)
28818 this[offset + 1] = (value & 0xff)
28819 return offset + 2
28820 }
28821
28822 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
28823 value = +value
28824 offset = offset >>> 0
28825 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
28826 this[offset] = (value & 0xff)
28827 this[offset + 1] = (value >>> 8)
28828 this[offset + 2] = (value >>> 16)
28829 this[offset + 3] = (value >>> 24)
28830 return offset + 4
28831 }
28832
28833 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
28834 value = +value
28835 offset = offset >>> 0
28836 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
28837 if (value < 0) value = 0xffffffff + value + 1
28838 this[offset] = (value >>> 24)
28839 this[offset + 1] = (value >>> 16)
28840 this[offset + 2] = (value >>> 8)
28841 this[offset + 3] = (value & 0xff)
28842 return offset + 4
28843 }
28844
28845 function checkIEEE754 (buf, value, offset, ext, max, min) {
28846 if (offset + ext > buf.length) throw new RangeError('Index out of range')
28847 if (offset < 0) throw new RangeError('Index out of range')
28848 }
28849
28850 function writeFloat (buf, value, offset, littleEndian, noAssert) {
28851 value = +value
28852 offset = offset >>> 0
28853 if (!noAssert) {
28854 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
28855 }
28856 ieee754.write(buf, value, offset, littleEndian, 23, 4)
28857 return offset + 4
28858 }
28859
28860 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
28861 return writeFloat(this, value, offset, true, noAssert)
28862 }
28863
28864 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
28865 return writeFloat(this, value, offset, false, noAssert)
28866 }
28867
28868 function writeDouble (buf, value, offset, littleEndian, noAssert) {
28869 value = +value
28870 offset = offset >>> 0
28871 if (!noAssert) {
28872 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
28873 }
28874 ieee754.write(buf, value, offset, littleEndian, 52, 8)
28875 return offset + 8
28876 }
28877
28878 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
28879 return writeDouble(this, value, offset, true, noAssert)
28880 }
28881
28882 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
28883 return writeDouble(this, value, offset, false, noAssert)
28884 }
28885
28886 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
28887 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
28888 if (!start) start = 0
28889 if (!end && end !== 0) end = this.length
28890 if (targetStart >= target.length) targetStart = target.length
28891 if (!targetStart) targetStart = 0
28892 if (end > 0 && end < start) end = start
28893
28894 // Copy 0 bytes; we're done
28895 if (end === start) return 0
28896 if (target.length === 0 || this.length === 0) return 0
28897
28898 // Fatal error conditions
28899 if (targetStart < 0) {
28900 throw new RangeError('targetStart out of bounds')
28901 }
28902 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
28903 if (end < 0) throw new RangeError('sourceEnd out of bounds')
28904
28905 // Are we oob?
28906 if (end > this.length) end = this.length
28907 if (target.length - targetStart < end - start) {
28908 end = target.length - targetStart + start
28909 }
28910
28911 var len = end - start
28912 var i
28913
28914 if (this === target && start < targetStart && targetStart < end) {
28915 // descending copy from end
28916 for (i = len - 1; i >= 0; --i) {
28917 target[i + targetStart] = this[i + start]
28918 }
28919 } else if (len < 1000) {
28920 // ascending copy from start
28921 for (i = 0; i < len; ++i) {
28922 target[i + targetStart] = this[i + start]
28923 }
28924 } else {
28925 Uint8Array.prototype.set.call(
28926 target,
28927 this.subarray(start, start + len),
28928 targetStart
28929 )
28930 }
28931
28932 return len
28933 }
28934
28935 // Usage:
28936 // buffer.fill(number[, offset[, end]])
28937 // buffer.fill(buffer[, offset[, end]])
28938 // buffer.fill(string[, offset[, end]][, encoding])
28939 Buffer.prototype.fill = function fill (val, start, end, encoding) {
28940 // Handle string cases:
28941 if (typeof val === 'string') {
28942 if (typeof start === 'string') {
28943 encoding = start
28944 start = 0
28945 end = this.length
28946 } else if (typeof end === 'string') {
28947 encoding = end
28948 end = this.length
28949 }
28950 if (val.length === 1) {
28951 var code = val.charCodeAt(0)
28952 if (code < 256) {
28953 val = code
28954 }
28955 }
28956 if (encoding !== undefined && typeof encoding !== 'string') {
28957 throw new TypeError('encoding must be a string')
28958 }
28959 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
28960 throw new TypeError('Unknown encoding: ' + encoding)
28961 }
28962 } else if (typeof val === 'number') {
28963 val = val & 255
28964 }
28965
28966 // Invalid ranges are not set to a default, so can range check early.
28967 if (start < 0 || this.length < start || this.length < end) {
28968 throw new RangeError('Out of range index')
28969 }
28970
28971 if (end <= start) {
28972 return this
28973 }
28974
28975 start = start >>> 0
28976 end = end === undefined ? this.length : end >>> 0
28977
28978 if (!val) val = 0
28979
28980 var i
28981 if (typeof val === 'number') {
28982 for (i = start; i < end; ++i) {
28983 this[i] = val
28984 }
28985 } else {
28986 var bytes = Buffer.isBuffer(val)
28987 ? val
28988 : new Buffer(val, encoding)
28989 var len = bytes.length
28990 for (i = 0; i < end - start; ++i) {
28991 this[i + start] = bytes[i % len]
28992 }
28993 }
28994
28995 return this
28996 }
28997
28998 // HELPER FUNCTIONS
28999 // ================
29000
29001 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
29002
29003 function base64clean (str) {
29004 // Node strips out invalid characters like \n and \t from the string, base64-js does not
29005 str = str.trim().replace(INVALID_BASE64_RE, '')
29006 // Node converts strings with length < 2 to ''
29007 if (str.length < 2) return ''
29008 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
29009 while (str.length % 4 !== 0) {
29010 str = str + '='
29011 }
29012 return str
29013 }
29014
29015 function toHex (n) {
29016 if (n < 16) return '0' + n.toString(16)
29017 return n.toString(16)
29018 }
29019
29020 function utf8ToBytes (string, units) {
29021 units = units || Infinity
29022 var codePoint
29023 var length = string.length
29024 var leadSurrogate = null
29025 var bytes = []
29026
29027 for (var i = 0; i < length; ++i) {
29028 codePoint = string.charCodeAt(i)
29029
29030 // is surrogate component
29031 if (codePoint > 0xD7FF && codePoint < 0xE000) {
29032 // last char was a lead
29033 if (!leadSurrogate) {
29034 // no lead yet
29035 if (codePoint > 0xDBFF) {
29036 // unexpected trail
29037 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29038 continue
29039 } else if (i + 1 === length) {
29040 // unpaired lead
29041 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29042 continue
29043 }
29044
29045 // valid lead
29046 leadSurrogate = codePoint
29047
29048 continue
29049 }
29050
29051 // 2 leads in a row
29052 if (codePoint < 0xDC00) {
29053 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29054 leadSurrogate = codePoint
29055 continue
29056 }
29057
29058 // valid surrogate pair
29059 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
29060 } else if (leadSurrogate) {
29061 // valid bmp char, but last char was a lead
29062 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29063 }
29064
29065 leadSurrogate = null
29066
29067 // encode utf8
29068 if (codePoint < 0x80) {
29069 if ((units -= 1) < 0) break
29070 bytes.push(codePoint)
29071 } else if (codePoint < 0x800) {
29072 if ((units -= 2) < 0) break
29073 bytes.push(
29074 codePoint >> 0x6 | 0xC0,
29075 codePoint & 0x3F | 0x80
29076 )
29077 } else if (codePoint < 0x10000) {
29078 if ((units -= 3) < 0) break
29079 bytes.push(
29080 codePoint >> 0xC | 0xE0,
29081 codePoint >> 0x6 & 0x3F | 0x80,
29082 codePoint & 0x3F | 0x80
29083 )
29084 } else if (codePoint < 0x110000) {
29085 if ((units -= 4) < 0) break
29086 bytes.push(
29087 codePoint >> 0x12 | 0xF0,
29088 codePoint >> 0xC & 0x3F | 0x80,
29089 codePoint >> 0x6 & 0x3F | 0x80,
29090 codePoint & 0x3F | 0x80
29091 )
29092 } else {
29093 throw new Error('Invalid code point')
29094 }
29095 }
29096
29097 return bytes
29098 }
29099
29100 function asciiToBytes (str) {
29101 var byteArray = []
29102 for (var i = 0; i < str.length; ++i) {
29103 // Node's code seems to be doing this and not & 0x7F..
29104 byteArray.push(str.charCodeAt(i) & 0xFF)
29105 }
29106 return byteArray
29107 }
29108
29109 function utf16leToBytes (str, units) {
29110 var c, hi, lo
29111 var byteArray = []
29112 for (var i = 0; i < str.length; ++i) {
29113 if ((units -= 2) < 0) break
29114
29115 c = str.charCodeAt(i)
29116 hi = c >> 8
29117 lo = c % 256
29118 byteArray.push(lo)
29119 byteArray.push(hi)
29120 }
29121
29122 return byteArray
29123 }
29124
29125 function base64ToBytes (str) {
29126 return base64.toByteArray(base64clean(str))
29127 }
29128
29129 function blitBuffer (src, dst, offset, length) {
29130 for (var i = 0; i < length; ++i) {
29131 if ((i + offset >= dst.length) || (i >= src.length)) break
29132 dst[i + offset] = src[i]
29133 }
29134 return i
29135 }
29136
29137 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
29138 function isArrayBufferView (obj) {
29139 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
29140 }
29141
29142 function numberIsNaN (obj) {
29143 return obj !== obj // eslint-disable-line no-self-compare
29144 }
29145
29146 },{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
29147 (function (Buffer){
29148 // Copyright Joyent, Inc. and other Node contributors.
29149 //
29150 // Permission is hereby granted, free of charge, to any person obtaining a
29151 // copy of this software and associated documentation files (the
29152 // "Software"), to deal in the Software without restriction, including
29153 // without limitation the rights to use, copy, modify, merge, publish,
29154 // distribute, sublicense, and/or sell copies of the Software, and to permit
29155 // persons to whom the Software is furnished to do so, subject to the
29156 // following conditions:
29157 //
29158 // The above copyright notice and this permission notice shall be included
29159 // in all copies or substantial portions of the Software.
29160 //
29161 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
29162 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29163 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
29164 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
29165 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
29166 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
29167 // USE OR OTHER DEALINGS IN THE SOFTWARE.
29168
29169 // NOTE: These type checking functions intentionally don't use `instanceof`
29170 // because it is fragile and can be easily faked with `Object.create()`.
29171
29172 function isArray(arg) {
29173 if (Array.isArray) {
29174 return Array.isArray(arg);
29175 }
29176 return objectToString(arg) === '[object Array]';
29177 }
29178 exports.isArray = isArray;
29179
29180 function isBoolean(arg) {
29181 return typeof arg === 'boolean';
29182 }
29183 exports.isBoolean = isBoolean;
29184
29185 function isNull(arg) {
29186 return arg === null;
29187 }
29188 exports.isNull = isNull;
29189
29190 function isNullOrUndefined(arg) {
29191 return arg == null;
29192 }
29193 exports.isNullOrUndefined = isNullOrUndefined;
29194
29195 function isNumber(arg) {
29196 return typeof arg === 'number';
29197 }
29198 exports.isNumber = isNumber;
29199
29200 function isString(arg) {
29201 return typeof arg === 'string';
29202 }
29203 exports.isString = isString;
29204
29205 function isSymbol(arg) {
29206 return typeof arg === 'symbol';
29207 }
29208 exports.isSymbol = isSymbol;
29209
29210 function isUndefined(arg) {
29211 return arg === void 0;
29212 }
29213 exports.isUndefined = isUndefined;
29214
29215 function isRegExp(re) {
29216 return objectToString(re) === '[object RegExp]';
29217 }
29218 exports.isRegExp = isRegExp;
29219
29220 function isObject(arg) {
29221 return typeof arg === 'object' && arg !== null;
29222 }
29223 exports.isObject = isObject;
29224
29225 function isDate(d) {
29226 return objectToString(d) === '[object Date]';
29227 }
29228 exports.isDate = isDate;
29229
29230 function isError(e) {
29231 return (objectToString(e) === '[object Error]' || e instanceof Error);
29232 }
29233 exports.isError = isError;
29234
29235 function isFunction(arg) {
29236 return typeof arg === 'function';
29237 }
29238 exports.isFunction = isFunction;
29239
29240 function isPrimitive(arg) {
29241 return arg === null ||
29242 typeof arg === 'boolean' ||
29243 typeof arg === 'number' ||
29244 typeof arg === 'string' ||
29245 typeof arg === 'symbol' || // ES6 symbol
29246 typeof arg === 'undefined';
29247 }
29248 exports.isPrimitive = isPrimitive;
29249
29250 exports.isBuffer = Buffer.isBuffer;
29251
29252 function objectToString(o) {
29253 return Object.prototype.toString.call(o);
29254 }
29255
29256 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
29257 },{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
29258 // Copyright Joyent, Inc. and other Node contributors.
29259 //
29260 // Permission is hereby granted, free of charge, to any person obtaining a
29261 // copy of this software and associated documentation files (the
29262 // "Software"), to deal in the Software without restriction, including
29263 // without limitation the rights to use, copy, modify, merge, publish,
29264 // distribute, sublicense, and/or sell copies of the Software, and to permit
29265 // persons to whom the Software is furnished to do so, subject to the
29266 // following conditions:
29267 //
29268 // The above copyright notice and this permission notice shall be included
29269 // in all copies or substantial portions of the Software.
29270 //
29271 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
29272 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29273 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
29274 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
29275 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
29276 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
29277 // USE OR OTHER DEALINGS IN THE SOFTWARE.
29278
29279 function EventEmitter() {
29280 this._events = this._events || {};
29281 this._maxListeners = this._maxListeners || undefined;
29282 }
29283 module.exports = EventEmitter;
29284
29285 // Backwards-compat with node 0.10.x
29286 EventEmitter.EventEmitter = EventEmitter;
29287
29288 EventEmitter.prototype._events = undefined;
29289 EventEmitter.prototype._maxListeners = undefined;
29290
29291 // By default EventEmitters will print a warning if more than 10 listeners are
29292 // added to it. This is a useful default which helps finding memory leaks.
29293 EventEmitter.defaultMaxListeners = 10;
29294
29295 // Obviously not all Emitters should be limited to 10. This function allows
29296 // that to be increased. Set to zero for unlimited.
29297 EventEmitter.prototype.setMaxListeners = function(n) {
29298 if (!isNumber(n) || n < 0 || isNaN(n))
29299 throw TypeError('n must be a positive number');
29300 this._maxListeners = n;
29301 return this;
29302 };
29303
29304 EventEmitter.prototype.emit = function(type) {
29305 var er, handler, len, args, i, listeners;
29306
29307 if (!this._events)
29308 this._events = {};
29309
29310 // If there is no 'error' event listener then throw.
29311 if (type === 'error') {
29312 if (!this._events.error ||
29313 (isObject(this._events.error) && !this._events.error.length)) {
29314 er = arguments[1];
29315 if (er instanceof Error) {
29316 throw er; // Unhandled 'error' event
29317 } else {
29318 // At least give some kind of context to the user
29319 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
29320 err.context = er;
29321 throw err;
29322 }
29323 }
29324 }
29325
29326 handler = this._events[type];
29327
29328 if (isUndefined(handler))
29329 return false;
29330
29331 if (isFunction(handler)) {
29332 switch (arguments.length) {
29333 // fast cases
29334 case 1:
29335 handler.call(this);
29336 break;
29337 case 2:
29338 handler.call(this, arguments[1]);
29339 break;
29340 case 3:
29341 handler.call(this, arguments[1], arguments[2]);
29342 break;
29343 // slower
29344 default:
29345 args = Array.prototype.slice.call(arguments, 1);
29346 handler.apply(this, args);
29347 }
29348 } else if (isObject(handler)) {
29349 args = Array.prototype.slice.call(arguments, 1);
29350 listeners = handler.slice();
29351 len = listeners.length;
29352 for (i = 0; i < len; i++)
29353 listeners[i].apply(this, args);
29354 }
29355
29356 return true;
29357 };
29358
29359 EventEmitter.prototype.addListener = function(type, listener) {
29360 var m;
29361
29362 if (!isFunction(listener))
29363 throw TypeError('listener must be a function');
29364
29365 if (!this._events)
29366 this._events = {};
29367
29368 // To avoid recursion in the case that type === "newListener"! Before
29369 // adding it to the listeners, first emit "newListener".
29370 if (this._events.newListener)
29371 this.emit('newListener', type,
29372 isFunction(listener.listener) ?
29373 listener.listener : listener);
29374
29375 if (!this._events[type])
29376 // Optimize the case of one listener. Don't need the extra array object.
29377 this._events[type] = listener;
29378 else if (isObject(this._events[type]))
29379 // If we've already got an array, just append.
29380 this._events[type].push(listener);
29381 else
29382 // Adding the second element, need to change to array.
29383 this._events[type] = [this._events[type], listener];
29384
29385 // Check for listener leak
29386 if (isObject(this._events[type]) && !this._events[type].warned) {
29387 if (!isUndefined(this._maxListeners)) {
29388 m = this._maxListeners;
29389 } else {
29390 m = EventEmitter.defaultMaxListeners;
29391 }
29392
29393 if (m && m > 0 && this._events[type].length > m) {
29394 this._events[type].warned = true;
29395 console.error('(node) warning: possible EventEmitter memory ' +
29396 'leak detected. %d listeners added. ' +
29397 'Use emitter.setMaxListeners() to increase limit.',
29398 this._events[type].length);
29399 if (typeof console.trace === 'function') {
29400 // not supported in IE 10
29401 console.trace();
29402 }
29403 }
29404 }
29405
29406 return this;
29407 };
29408
29409 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
29410
29411 EventEmitter.prototype.once = function(type, listener) {
29412 if (!isFunction(listener))
29413 throw TypeError('listener must be a function');
29414
29415 var fired = false;
29416
29417 function g() {
29418 this.removeListener(type, g);
29419
29420 if (!fired) {
29421 fired = true;
29422 listener.apply(this, arguments);
29423 }
29424 }
29425
29426 g.listener = listener;
29427 this.on(type, g);
29428
29429 return this;
29430 };
29431
29432 // emits a 'removeListener' event iff the listener was removed
29433 EventEmitter.prototype.removeListener = function(type, listener) {
29434 var list, position, length, i;
29435
29436 if (!isFunction(listener))
29437 throw TypeError('listener must be a function');
29438
29439 if (!this._events || !this._events[type])
29440 return this;
29441
29442 list = this._events[type];
29443 length = list.length;
29444 position = -1;
29445
29446 if (list === listener ||
29447 (isFunction(list.listener) && list.listener === listener)) {
29448 delete this._events[type];
29449 if (this._events.removeListener)
29450 this.emit('removeListener', type, listener);
29451
29452 } else if (isObject(list)) {
29453 for (i = length; i-- > 0;) {
29454 if (list[i] === listener ||
29455 (list[i].listener && list[i].listener === listener)) {
29456 position = i;
29457 break;
29458 }
29459 }
29460
29461 if (position < 0)
29462 return this;
29463
29464 if (list.length === 1) {
29465 list.length = 0;
29466 delete this._events[type];
29467 } else {
29468 list.splice(position, 1);
29469 }
29470
29471 if (this._events.removeListener)
29472 this.emit('removeListener', type, listener);
29473 }
29474
29475 return this;
29476 };
29477
29478 EventEmitter.prototype.removeAllListeners = function(type) {
29479 var key, listeners;
29480
29481 if (!this._events)
29482 return this;
29483
29484 // not listening for removeListener, no need to emit
29485 if (!this._events.removeListener) {
29486 if (arguments.length === 0)
29487 this._events = {};
29488 else if (this._events[type])
29489 delete this._events[type];
29490 return this;
29491 }
29492
29493 // emit removeListener for all listeners on all events
29494 if (arguments.length === 0) {
29495 for (key in this._events) {
29496 if (key === 'removeListener') continue;
29497 this.removeAllListeners(key);
29498 }
29499 this.removeAllListeners('removeListener');
29500 this._events = {};
29501 return this;
29502 }
29503
29504 listeners = this._events[type];
29505
29506 if (isFunction(listeners)) {
29507 this.removeListener(type, listeners);
29508 } else if (listeners) {
29509 // LIFO order
29510 while (listeners.length)
29511 this.removeListener(type, listeners[listeners.length - 1]);
29512 }
29513 delete this._events[type];
29514
29515 return this;
29516 };
29517
29518 EventEmitter.prototype.listeners = function(type) {
29519 var ret;
29520 if (!this._events || !this._events[type])
29521 ret = [];
29522 else if (isFunction(this._events[type]))
29523 ret = [this._events[type]];
29524 else
29525 ret = this._events[type].slice();
29526 return ret;
29527 };
29528
29529 EventEmitter.prototype.listenerCount = function(type) {
29530 if (this._events) {
29531 var evlistener = this._events[type];
29532
29533 if (isFunction(evlistener))
29534 return 1;
29535 else if (evlistener)
29536 return evlistener.length;
29537 }
29538 return 0;
29539 };
29540
29541 EventEmitter.listenerCount = function(emitter, type) {
29542 return emitter.listenerCount(type);
29543 };
29544
29545 function isFunction(arg) {
29546 return typeof arg === 'function';
29547 }
29548
29549 function isNumber(arg) {
29550 return typeof arg === 'number';
29551 }
29552
29553 function isObject(arg) {
29554 return typeof arg === 'object' && arg !== null;
29555 }
29556
29557 function isUndefined(arg) {
29558 return arg === void 0;
29559 }
29560
29561 },{}],8:[function(require,module,exports){
29562 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
29563 var e, m
29564 var eLen = nBytes * 8 - mLen - 1
29565 var eMax = (1 << eLen) - 1
29566 var eBias = eMax >> 1
29567 var nBits = -7
29568 var i = isLE ? (nBytes - 1) : 0
29569 var d = isLE ? -1 : 1
29570 var s = buffer[offset + i]
29571
29572 i += d
29573
29574 e = s & ((1 << (-nBits)) - 1)
29575 s >>= (-nBits)
29576 nBits += eLen
29577 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
29578
29579 m = e & ((1 << (-nBits)) - 1)
29580 e >>= (-nBits)
29581 nBits += mLen
29582 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
29583
29584 if (e === 0) {
29585 e = 1 - eBias
29586 } else if (e === eMax) {
29587 return m ? NaN : ((s ? -1 : 1) * Infinity)
29588 } else {
29589 m = m + Math.pow(2, mLen)
29590 e = e - eBias
29591 }
29592 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
29593 }
29594
29595 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
29596 var e, m, c
29597 var eLen = nBytes * 8 - mLen - 1
29598 var eMax = (1 << eLen) - 1
29599 var eBias = eMax >> 1
29600 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
29601 var i = isLE ? 0 : (nBytes - 1)
29602 var d = isLE ? 1 : -1
29603 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
29604
29605 value = Math.abs(value)
29606
29607 if (isNaN(value) || value === Infinity) {
29608 m = isNaN(value) ? 1 : 0
29609 e = eMax
29610 } else {
29611 e = Math.floor(Math.log(value) / Math.LN2)
29612 if (value * (c = Math.pow(2, -e)) < 1) {
29613 e--
29614 c *= 2
29615 }
29616 if (e + eBias >= 1) {
29617 value += rt / c
29618 } else {
29619 value += rt * Math.pow(2, 1 - eBias)
29620 }
29621 if (value * c >= 2) {
29622 e++
29623 c /= 2
29624 }
29625
29626 if (e + eBias >= eMax) {
29627 m = 0
29628 e = eMax
29629 } else if (e + eBias >= 1) {
29630 m = (value * c - 1) * Math.pow(2, mLen)
29631 e = e + eBias
29632 } else {
29633 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
29634 e = 0
29635 }
29636 }
29637
29638 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
29639
29640 e = (e << mLen) | m
29641 eLen += mLen
29642 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
29643
29644 buffer[offset + i - d] |= s * 128
29645 }
29646
29647 },{}],9:[function(require,module,exports){
29648 if (typeof Object.create === 'function') {
29649 // implementation from standard node.js 'util' module
29650 module.exports = function inherits(ctor, superCtor) {
29651 ctor.super_ = superCtor
29652 ctor.prototype = Object.create(superCtor.prototype, {
29653 constructor: {
29654 value: ctor,
29655 enumerable: false,
29656 writable: true,
29657 configurable: true
29658 }
29659 });
29660 };
29661 } else {
29662 // old school shim for old browsers
29663 module.exports = function inherits(ctor, superCtor) {
29664 ctor.super_ = superCtor
29665 var TempCtor = function () {}
29666 TempCtor.prototype = superCtor.prototype
29667 ctor.prototype = new TempCtor()
29668 ctor.prototype.constructor = ctor
29669 }
29670 }
29671
29672 },{}],10:[function(require,module,exports){
29673 /*!
29674 * Determine if an object is a Buffer
29675 *
29676 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
29677 * @license MIT
29678 */
29679
29680 // The _isBuffer check is for Safari 5-7 support, because it's missing
29681 // Object.prototype.constructor. Remove this eventually
29682 module.exports = function (obj) {
29683 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
29684 }
29685
29686 function isBuffer (obj) {
29687 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
29688 }
29689
29690 // For Node v0.10 support. Remove this eventually.
29691 function isSlowBuffer (obj) {
29692 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
29693 }
29694
29695 },{}],11:[function(require,module,exports){
29696 var toString = {}.toString;
29697
29698 module.exports = Array.isArray || function (arr) {
29699 return toString.call(arr) == '[object Array]';
29700 };
29701
29702 },{}],12:[function(require,module,exports){
29703 (function (process){
29704 'use strict';
29705
29706 if (!process.version ||
29707 process.version.indexOf('v0.') === 0 ||
29708 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
29709 module.exports = nextTick;
29710 } else {
29711 module.exports = process.nextTick;
29712 }
29713
29714 function nextTick(fn, arg1, arg2, arg3) {
29715 if (typeof fn !== 'function') {
29716 throw new TypeError('"callback" argument must be a function');
29717 }
29718 var len = arguments.length;
29719 var args, i;
29720 switch (len) {
29721 case 0:
29722 case 1:
29723 return process.nextTick(fn);
29724 case 2:
29725 return process.nextTick(function afterTickOne() {
29726 fn.call(null, arg1);
29727 });
29728 case 3:
29729 return process.nextTick(function afterTickTwo() {
29730 fn.call(null, arg1, arg2);
29731 });
29732 case 4:
29733 return process.nextTick(function afterTickThree() {
29734 fn.call(null, arg1, arg2, arg3);
29735 });
29736 default:
29737 args = new Array(len - 1);
29738 i = 0;
29739 while (i < args.length) {
29740 args[i++] = arguments[i];
29741 }
29742 return process.nextTick(function afterTick() {
29743 fn.apply(null, args);
29744 });
29745 }
29746 }
29747
29748 }).call(this,require('_process'))
29749 },{"_process":13}],13:[function(require,module,exports){
29750 // shim for using process in browser
29751 var process = module.exports = {};
29752
29753 // cached from whatever global is present so that test runners that stub it
29754 // don't break things. But we need to wrap it in a try catch in case it is
29755 // wrapped in strict mode code which doesn't define any globals. It's inside a
29756 // function because try/catches deoptimize in certain engines.
29757
29758 var cachedSetTimeout;
29759 var cachedClearTimeout;
29760
29761 function defaultSetTimout() {
29762 throw new Error('setTimeout has not been defined');
29763 }
29764 function defaultClearTimeout () {
29765 throw new Error('clearTimeout has not been defined');
29766 }
29767 (function () {
29768 try {
29769 if (typeof setTimeout === 'function') {
29770 cachedSetTimeout = setTimeout;
29771 } else {
29772 cachedSetTimeout = defaultSetTimout;
29773 }
29774 } catch (e) {
29775 cachedSetTimeout = defaultSetTimout;
29776 }
29777 try {
29778 if (typeof clearTimeout === 'function') {
29779 cachedClearTimeout = clearTimeout;
29780 } else {
29781 cachedClearTimeout = defaultClearTimeout;
29782 }
29783 } catch (e) {
29784 cachedClearTimeout = defaultClearTimeout;
29785 }
29786 } ())
29787 function runTimeout(fun) {
29788 if (cachedSetTimeout === setTimeout) {
29789 //normal enviroments in sane situations
29790 return setTimeout(fun, 0);
29791 }
29792 // if setTimeout wasn't available but was latter defined
29793 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
29794 cachedSetTimeout = setTimeout;
29795 return setTimeout(fun, 0);
29796 }
29797 try {
29798 // when when somebody has screwed with setTimeout but no I.E. maddness
29799 return cachedSetTimeout(fun, 0);
29800 } catch(e){
29801 try {
29802 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
29803 return cachedSetTimeout.call(null, fun, 0);
29804 } catch(e){
29805 // 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
29806 return cachedSetTimeout.call(this, fun, 0);
29807 }
29808 }
29809
29810
29811 }
29812 function runClearTimeout(marker) {
29813 if (cachedClearTimeout === clearTimeout) {
29814 //normal enviroments in sane situations
29815 return clearTimeout(marker);
29816 }
29817 // if clearTimeout wasn't available but was latter defined
29818 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
29819 cachedClearTimeout = clearTimeout;
29820 return clearTimeout(marker);
29821 }
29822 try {
29823 // when when somebody has screwed with setTimeout but no I.E. maddness
29824 return cachedClearTimeout(marker);
29825 } catch (e){
29826 try {
29827 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
29828 return cachedClearTimeout.call(null, marker);
29829 } catch (e){
29830 // 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.
29831 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
29832 return cachedClearTimeout.call(this, marker);
29833 }
29834 }
29835
29836
29837
29838 }
29839 var queue = [];
29840 var draining = false;
29841 var currentQueue;
29842 var queueIndex = -1;
29843
29844 function cleanUpNextTick() {
29845 if (!draining || !currentQueue) {
29846 return;
29847 }
29848 draining = false;
29849 if (currentQueue.length) {
29850 queue = currentQueue.concat(queue);
29851 } else {
29852 queueIndex = -1;
29853 }
29854 if (queue.length) {
29855 drainQueue();
29856 }
29857 }
29858
29859 function drainQueue() {
29860 if (draining) {
29861 return;
29862 }
29863 var timeout = runTimeout(cleanUpNextTick);
29864 draining = true;
29865
29866 var len = queue.length;
29867 while(len) {
29868 currentQueue = queue;
29869 queue = [];
29870 while (++queueIndex < len) {
29871 if (currentQueue) {
29872 currentQueue[queueIndex].run();
29873 }
29874 }
29875 queueIndex = -1;
29876 len = queue.length;
29877 }
29878 currentQueue = null;
29879 draining = false;
29880 runClearTimeout(timeout);
29881 }
29882
29883 process.nextTick = function (fun) {
29884 var args = new Array(arguments.length - 1);
29885 if (arguments.length > 1) {
29886 for (var i = 1; i < arguments.length; i++) {
29887 args[i - 1] = arguments[i];
29888 }
29889 }
29890 queue.push(new Item(fun, args));
29891 if (queue.length === 1 && !draining) {
29892 runTimeout(drainQueue);
29893 }
29894 };
29895
29896 // v8 likes predictible objects
29897 function Item(fun, array) {
29898 this.fun = fun;
29899 this.array = array;
29900 }
29901 Item.prototype.run = function () {
29902 this.fun.apply(null, this.array);
29903 };
29904 process.title = 'browser';
29905 process.browser = true;
29906 process.env = {};
29907 process.argv = [];
29908 process.version = ''; // empty string to avoid regexp issues
29909 process.versions = {};
29910
29911 function noop() {}
29912
29913 process.on = noop;
29914 process.addListener = noop;
29915 process.once = noop;
29916 process.off = noop;
29917 process.removeListener = noop;
29918 process.removeAllListeners = noop;
29919 process.emit = noop;
29920 process.prependListener = noop;
29921 process.prependOnceListener = noop;
29922
29923 process.listeners = function (name) { return [] }
29924
29925 process.binding = function (name) {
29926 throw new Error('process.binding is not supported');
29927 };
29928
29929 process.cwd = function () { return '/' };
29930 process.chdir = function (dir) {
29931 throw new Error('process.chdir is not supported');
29932 };
29933 process.umask = function() { return 0; };
29934
29935 },{}],14:[function(require,module,exports){
29936 module.exports = require('./lib/_stream_duplex.js');
29937
29938 },{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
29939 // a duplex stream is just a stream that is both readable and writable.
29940 // Since JS doesn't have multiple prototypal inheritance, this class
29941 // prototypally inherits from Readable, and then parasitically from
29942 // Writable.
29943
29944 'use strict';
29945
29946 /*<replacement>*/
29947
29948 var objectKeys = Object.keys || function (obj) {
29949 var keys = [];
29950 for (var key in obj) {
29951 keys.push(key);
29952 }return keys;
29953 };
29954 /*</replacement>*/
29955
29956 module.exports = Duplex;
29957
29958 /*<replacement>*/
29959 var processNextTick = require('process-nextick-args');
29960 /*</replacement>*/
29961
29962 /*<replacement>*/
29963 var util = require('core-util-is');
29964 util.inherits = require('inherits');
29965 /*</replacement>*/
29966
29967 var Readable = require('./_stream_readable');
29968 var Writable = require('./_stream_writable');
29969
29970 util.inherits(Duplex, Readable);
29971
29972 var keys = objectKeys(Writable.prototype);
29973 for (var v = 0; v < keys.length; v++) {
29974 var method = keys[v];
29975 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
29976 }
29977
29978 function Duplex(options) {
29979 if (!(this instanceof Duplex)) return new Duplex(options);
29980
29981 Readable.call(this, options);
29982 Writable.call(this, options);
29983
29984 if (options && options.readable === false) this.readable = false;
29985
29986 if (options && options.writable === false) this.writable = false;
29987
29988 this.allowHalfOpen = true;
29989 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
29990
29991 this.once('end', onend);
29992 }
29993
29994 // the no-half-open enforcer
29995 function onend() {
29996 // if we allow half-open state, or if the writable side ended,
29997 // then we're ok.
29998 if (this.allowHalfOpen || this._writableState.ended) return;
29999
30000 // no more data can be written.
30001 // But allow more writes to happen in this tick.
30002 processNextTick(onEndNT, this);
30003 }
30004
30005 function onEndNT(self) {
30006 self.end();
30007 }
30008
30009 function forEach(xs, f) {
30010 for (var i = 0, l = xs.length; i < l; i++) {
30011 f(xs[i], i);
30012 }
30013 }
30014 },{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
30015 // a passthrough stream.
30016 // basically just the most minimal sort of Transform stream.
30017 // Every written chunk gets output as-is.
30018
30019 'use strict';
30020
30021 module.exports = PassThrough;
30022
30023 var Transform = require('./_stream_transform');
30024
30025 /*<replacement>*/
30026 var util = require('core-util-is');
30027 util.inherits = require('inherits');
30028 /*</replacement>*/
30029
30030 util.inherits(PassThrough, Transform);
30031
30032 function PassThrough(options) {
30033 if (!(this instanceof PassThrough)) return new PassThrough(options);
30034
30035 Transform.call(this, options);
30036 }
30037
30038 PassThrough.prototype._transform = function (chunk, encoding, cb) {
30039 cb(null, chunk);
30040 };
30041 },{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
30042 (function (process){
30043 'use strict';
30044
30045 module.exports = Readable;
30046
30047 /*<replacement>*/
30048 var processNextTick = require('process-nextick-args');
30049 /*</replacement>*/
30050
30051 /*<replacement>*/
30052 var isArray = require('isarray');
30053 /*</replacement>*/
30054
30055 /*<replacement>*/
30056 var Duplex;
30057 /*</replacement>*/
30058
30059 Readable.ReadableState = ReadableState;
30060
30061 /*<replacement>*/
30062 var EE = require('events').EventEmitter;
30063
30064 var EElistenerCount = function (emitter, type) {
30065 return emitter.listeners(type).length;
30066 };
30067 /*</replacement>*/
30068
30069 /*<replacement>*/
30070 var Stream = require('./internal/streams/stream');
30071 /*</replacement>*/
30072
30073 var Buffer = require('buffer').Buffer;
30074 /*<replacement>*/
30075 var bufferShim = require('buffer-shims');
30076 /*</replacement>*/
30077
30078 /*<replacement>*/
30079 var util = require('core-util-is');
30080 util.inherits = require('inherits');
30081 /*</replacement>*/
30082
30083 /*<replacement>*/
30084 var debugUtil = require('util');
30085 var debug = void 0;
30086 if (debugUtil && debugUtil.debuglog) {
30087 debug = debugUtil.debuglog('stream');
30088 } else {
30089 debug = function () {};
30090 }
30091 /*</replacement>*/
30092
30093 var BufferList = require('./internal/streams/BufferList');
30094 var StringDecoder;
30095
30096 util.inherits(Readable, Stream);
30097
30098 var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
30099
30100 function prependListener(emitter, event, fn) {
30101 // Sadly this is not cacheable as some libraries bundle their own
30102 // event emitter implementation with them.
30103 if (typeof emitter.prependListener === 'function') {
30104 return emitter.prependListener(event, fn);
30105 } else {
30106 // This is a hack to make sure that our error handler is attached before any
30107 // userland ones. NEVER DO THIS. This is here only because this code needs
30108 // to continue to work with older versions of Node.js that do not include
30109 // the prependListener() method. The goal is to eventually remove this hack.
30110 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]];
30111 }
30112 }
30113
30114 function ReadableState(options, stream) {
30115 Duplex = Duplex || require('./_stream_duplex');
30116
30117 options = options || {};
30118
30119 // object stream flag. Used to make read(n) ignore n and to
30120 // make all the buffer merging and length checks go away
30121 this.objectMode = !!options.objectMode;
30122
30123 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
30124
30125 // the point at which it stops calling _read() to fill the buffer
30126 // Note: 0 is a valid value, means "don't call _read preemptively ever"
30127 var hwm = options.highWaterMark;
30128 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
30129 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
30130
30131 // cast to ints.
30132 this.highWaterMark = ~~this.highWaterMark;
30133
30134 // A linked list is used to store data chunks instead of an array because the
30135 // linked list can remove elements from the beginning faster than
30136 // array.shift()
30137 this.buffer = new BufferList();
30138 this.length = 0;
30139 this.pipes = null;
30140 this.pipesCount = 0;
30141 this.flowing = null;
30142 this.ended = false;
30143 this.endEmitted = false;
30144 this.reading = false;
30145
30146 // a flag to be able to tell if the onwrite cb is called immediately,
30147 // or on a later tick. We set this to true at first, because any
30148 // actions that shouldn't happen until "later" should generally also
30149 // not happen before the first write call.
30150 this.sync = true;
30151
30152 // whenever we return null, then we set a flag to say
30153 // that we're awaiting a 'readable' event emission.
30154 this.needReadable = false;
30155 this.emittedReadable = false;
30156 this.readableListening = false;
30157 this.resumeScheduled = false;
30158
30159 // Crypto is kind of old and crusty. Historically, its default string
30160 // encoding is 'binary' so we have to make this configurable.
30161 // Everything else in the universe uses 'utf8', though.
30162 this.defaultEncoding = options.defaultEncoding || 'utf8';
30163
30164 // when piping, we only care about 'readable' events that happen
30165 // after read()ing all the bytes and not getting any pushback.
30166 this.ranOut = false;
30167
30168 // the number of writers that are awaiting a drain event in .pipe()s
30169 this.awaitDrain = 0;
30170
30171 // if true, a maybeReadMore has been scheduled
30172 this.readingMore = false;
30173
30174 this.decoder = null;
30175 this.encoding = null;
30176 if (options.encoding) {
30177 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
30178 this.decoder = new StringDecoder(options.encoding);
30179 this.encoding = options.encoding;
30180 }
30181 }
30182
30183 function Readable(options) {
30184 Duplex = Duplex || require('./_stream_duplex');
30185
30186 if (!(this instanceof Readable)) return new Readable(options);
30187
30188 this._readableState = new ReadableState(options, this);
30189
30190 // legacy
30191 this.readable = true;
30192
30193 if (options && typeof options.read === 'function') this._read = options.read;
30194
30195 Stream.call(this);
30196 }
30197
30198 // Manually shove something into the read() buffer.
30199 // This returns true if the highWaterMark has not been hit yet,
30200 // similar to how Writable.write() returns true if you should
30201 // write() some more.
30202 Readable.prototype.push = function (chunk, encoding) {
30203 var state = this._readableState;
30204
30205 if (!state.objectMode && typeof chunk === 'string') {
30206 encoding = encoding || state.defaultEncoding;
30207 if (encoding !== state.encoding) {
30208 chunk = bufferShim.from(chunk, encoding);
30209 encoding = '';
30210 }
30211 }
30212
30213 return readableAddChunk(this, state, chunk, encoding, false);
30214 };
30215
30216 // Unshift should *always* be something directly out of read()
30217 Readable.prototype.unshift = function (chunk) {
30218 var state = this._readableState;
30219 return readableAddChunk(this, state, chunk, '', true);
30220 };
30221
30222 Readable.prototype.isPaused = function () {
30223 return this._readableState.flowing === false;
30224 };
30225
30226 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
30227 var er = chunkInvalid(state, chunk);
30228 if (er) {
30229 stream.emit('error', er);
30230 } else if (chunk === null) {
30231 state.reading = false;
30232 onEofChunk(stream, state);
30233 } else if (state.objectMode || chunk && chunk.length > 0) {
30234 if (state.ended && !addToFront) {
30235 var e = new Error('stream.push() after EOF');
30236 stream.emit('error', e);
30237 } else if (state.endEmitted && addToFront) {
30238 var _e = new Error('stream.unshift() after end event');
30239 stream.emit('error', _e);
30240 } else {
30241 var skipAdd;
30242 if (state.decoder && !addToFront && !encoding) {
30243 chunk = state.decoder.write(chunk);
30244 skipAdd = !state.objectMode && chunk.length === 0;
30245 }
30246
30247 if (!addToFront) state.reading = false;
30248
30249 // Don't add to the buffer if we've decoded to an empty string chunk and
30250 // we're not in object mode
30251 if (!skipAdd) {
30252 // if we want the data now, just emit it.
30253 if (state.flowing && state.length === 0 && !state.sync) {
30254 stream.emit('data', chunk);
30255 stream.read(0);
30256 } else {
30257 // update the buffer info.
30258 state.length += state.objectMode ? 1 : chunk.length;
30259 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
30260
30261 if (state.needReadable) emitReadable(stream);
30262 }
30263 }
30264
30265 maybeReadMore(stream, state);
30266 }
30267 } else if (!addToFront) {
30268 state.reading = false;
30269 }
30270
30271 return needMoreData(state);
30272 }
30273
30274 // if it's past the high water mark, we can push in some more.
30275 // Also, if we have no data yet, we can stand some
30276 // more bytes. This is to work around cases where hwm=0,
30277 // such as the repl. Also, if the push() triggered a
30278 // readable event, and the user called read(largeNumber) such that
30279 // needReadable was set, then we ought to push more, so that another
30280 // 'readable' event will be triggered.
30281 function needMoreData(state) {
30282 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
30283 }
30284
30285 // backwards compatibility.
30286 Readable.prototype.setEncoding = function (enc) {
30287 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
30288 this._readableState.decoder = new StringDecoder(enc);
30289 this._readableState.encoding = enc;
30290 return this;
30291 };
30292
30293 // Don't raise the hwm > 8MB
30294 var MAX_HWM = 0x800000;
30295 function computeNewHighWaterMark(n) {
30296 if (n >= MAX_HWM) {
30297 n = MAX_HWM;
30298 } else {
30299 // Get the next highest power of 2 to prevent increasing hwm excessively in
30300 // tiny amounts
30301 n--;
30302 n |= n >>> 1;
30303 n |= n >>> 2;
30304 n |= n >>> 4;
30305 n |= n >>> 8;
30306 n |= n >>> 16;
30307 n++;
30308 }
30309 return n;
30310 }
30311
30312 // This function is designed to be inlinable, so please take care when making
30313 // changes to the function body.
30314 function howMuchToRead(n, state) {
30315 if (n <= 0 || state.length === 0 && state.ended) return 0;
30316 if (state.objectMode) return 1;
30317 if (n !== n) {
30318 // Only flow one buffer at a time
30319 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
30320 }
30321 // If we're asking for more than the current hwm, then raise the hwm.
30322 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
30323 if (n <= state.length) return n;
30324 // Don't have enough
30325 if (!state.ended) {
30326 state.needReadable = true;
30327 return 0;
30328 }
30329 return state.length;
30330 }
30331
30332 // you can override either this method, or the async _read(n) below.
30333 Readable.prototype.read = function (n) {
30334 debug('read', n);
30335 n = parseInt(n, 10);
30336 var state = this._readableState;
30337 var nOrig = n;
30338
30339 if (n !== 0) state.emittedReadable = false;
30340
30341 // if we're doing read(0) to trigger a readable event, but we
30342 // already have a bunch of data in the buffer, then just trigger
30343 // the 'readable' event and move on.
30344 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
30345 debug('read: emitReadable', state.length, state.ended);
30346 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
30347 return null;
30348 }
30349
30350 n = howMuchToRead(n, state);
30351
30352 // if we've ended, and we're now clear, then finish it up.
30353 if (n === 0 && state.ended) {
30354 if (state.length === 0) endReadable(this);
30355 return null;
30356 }
30357
30358 // All the actual chunk generation logic needs to be
30359 // *below* the call to _read. The reason is that in certain
30360 // synthetic stream cases, such as passthrough streams, _read
30361 // may be a completely synchronous operation which may change
30362 // the state of the read buffer, providing enough data when
30363 // before there was *not* enough.
30364 //
30365 // So, the steps are:
30366 // 1. Figure out what the state of things will be after we do
30367 // a read from the buffer.
30368 //
30369 // 2. If that resulting state will trigger a _read, then call _read.
30370 // Note that this may be asynchronous, or synchronous. Yes, it is
30371 // deeply ugly to write APIs this way, but that still doesn't mean
30372 // that the Readable class should behave improperly, as streams are
30373 // designed to be sync/async agnostic.
30374 // Take note if the _read call is sync or async (ie, if the read call
30375 // has returned yet), so that we know whether or not it's safe to emit
30376 // 'readable' etc.
30377 //
30378 // 3. Actually pull the requested chunks out of the buffer and return.
30379
30380 // if we need a readable event, then we need to do some reading.
30381 var doRead = state.needReadable;
30382 debug('need readable', doRead);
30383
30384 // if we currently have less than the highWaterMark, then also read some
30385 if (state.length === 0 || state.length - n < state.highWaterMark) {
30386 doRead = true;
30387 debug('length less than watermark', doRead);
30388 }
30389
30390 // however, if we've ended, then there's no point, and if we're already
30391 // reading, then it's unnecessary.
30392 if (state.ended || state.reading) {
30393 doRead = false;
30394 debug('reading or ended', doRead);
30395 } else if (doRead) {
30396 debug('do read');
30397 state.reading = true;
30398 state.sync = true;
30399 // if the length is currently zero, then we *need* a readable event.
30400 if (state.length === 0) state.needReadable = true;
30401 // call internal read method
30402 this._read(state.highWaterMark);
30403 state.sync = false;
30404 // If _read pushed data synchronously, then `reading` will be false,
30405 // and we need to re-evaluate how much data we can return to the user.
30406 if (!state.reading) n = howMuchToRead(nOrig, state);
30407 }
30408
30409 var ret;
30410 if (n > 0) ret = fromList(n, state);else ret = null;
30411
30412 if (ret === null) {
30413 state.needReadable = true;
30414 n = 0;
30415 } else {
30416 state.length -= n;
30417 }
30418
30419 if (state.length === 0) {
30420 // If we have nothing in the buffer, then we want to know
30421 // as soon as we *do* get something into the buffer.
30422 if (!state.ended) state.needReadable = true;
30423
30424 // If we tried to read() past the EOF, then emit end on the next tick.
30425 if (nOrig !== n && state.ended) endReadable(this);
30426 }
30427
30428 if (ret !== null) this.emit('data', ret);
30429
30430 return ret;
30431 };
30432
30433 function chunkInvalid(state, chunk) {
30434 var er = null;
30435 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
30436 er = new TypeError('Invalid non-string/buffer chunk');
30437 }
30438 return er;
30439 }
30440
30441 function onEofChunk(stream, state) {
30442 if (state.ended) return;
30443 if (state.decoder) {
30444 var chunk = state.decoder.end();
30445 if (chunk && chunk.length) {
30446 state.buffer.push(chunk);
30447 state.length += state.objectMode ? 1 : chunk.length;
30448 }
30449 }
30450 state.ended = true;
30451
30452 // emit 'readable' now to make sure it gets picked up.
30453 emitReadable(stream);
30454 }
30455
30456 // Don't emit readable right away in sync mode, because this can trigger
30457 // another read() call => stack overflow. This way, it might trigger
30458 // a nextTick recursion warning, but that's not so bad.
30459 function emitReadable(stream) {
30460 var state = stream._readableState;
30461 state.needReadable = false;
30462 if (!state.emittedReadable) {
30463 debug('emitReadable', state.flowing);
30464 state.emittedReadable = true;
30465 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
30466 }
30467 }
30468
30469 function emitReadable_(stream) {
30470 debug('emit readable');
30471 stream.emit('readable');
30472 flow(stream);
30473 }
30474
30475 // at this point, the user has presumably seen the 'readable' event,
30476 // and called read() to consume some data. that may have triggered
30477 // in turn another _read(n) call, in which case reading = true if
30478 // it's in progress.
30479 // However, if we're not ended, or reading, and the length < hwm,
30480 // then go ahead and try to read some more preemptively.
30481 function maybeReadMore(stream, state) {
30482 if (!state.readingMore) {
30483 state.readingMore = true;
30484 processNextTick(maybeReadMore_, stream, state);
30485 }
30486 }
30487
30488 function maybeReadMore_(stream, state) {
30489 var len = state.length;
30490 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
30491 debug('maybeReadMore read 0');
30492 stream.read(0);
30493 if (len === state.length)
30494 // didn't get any data, stop spinning.
30495 break;else len = state.length;
30496 }
30497 state.readingMore = false;
30498 }
30499
30500 // abstract method. to be overridden in specific implementation classes.
30501 // call cb(er, data) where data is <= n in length.
30502 // for virtual (non-string, non-buffer) streams, "length" is somewhat
30503 // arbitrary, and perhaps not very meaningful.
30504 Readable.prototype._read = function (n) {
30505 this.emit('error', new Error('_read() is not implemented'));
30506 };
30507
30508 Readable.prototype.pipe = function (dest, pipeOpts) {
30509 var src = this;
30510 var state = this._readableState;
30511
30512 switch (state.pipesCount) {
30513 case 0:
30514 state.pipes = dest;
30515 break;
30516 case 1:
30517 state.pipes = [state.pipes, dest];
30518 break;
30519 default:
30520 state.pipes.push(dest);
30521 break;
30522 }
30523 state.pipesCount += 1;
30524 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
30525
30526 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
30527
30528 var endFn = doEnd ? onend : cleanup;
30529 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
30530
30531 dest.on('unpipe', onunpipe);
30532 function onunpipe(readable) {
30533 debug('onunpipe');
30534 if (readable === src) {
30535 cleanup();
30536 }
30537 }
30538
30539 function onend() {
30540 debug('onend');
30541 dest.end();
30542 }
30543
30544 // when the dest drains, it reduces the awaitDrain counter
30545 // on the source. This would be more elegant with a .once()
30546 // handler in flow(), but adding and removing repeatedly is
30547 // too slow.
30548 var ondrain = pipeOnDrain(src);
30549 dest.on('drain', ondrain);
30550
30551 var cleanedUp = false;
30552 function cleanup() {
30553 debug('cleanup');
30554 // cleanup event handlers once the pipe is broken
30555 dest.removeListener('close', onclose);
30556 dest.removeListener('finish', onfinish);
30557 dest.removeListener('drain', ondrain);
30558 dest.removeListener('error', onerror);
30559 dest.removeListener('unpipe', onunpipe);
30560 src.removeListener('end', onend);
30561 src.removeListener('end', cleanup);
30562 src.removeListener('data', ondata);
30563
30564 cleanedUp = true;
30565
30566 // if the reader is waiting for a drain event from this
30567 // specific writer, then it would cause it to never start
30568 // flowing again.
30569 // So, if this is awaiting a drain, then we just call it now.
30570 // If we don't know, then assume that we are waiting for one.
30571 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
30572 }
30573
30574 // If the user pushes more data while we're writing to dest then we'll end up
30575 // in ondata again. However, we only want to increase awaitDrain once because
30576 // dest will only emit one 'drain' event for the multiple writes.
30577 // => Introduce a guard on increasing awaitDrain.
30578 var increasedAwaitDrain = false;
30579 src.on('data', ondata);
30580 function ondata(chunk) {
30581 debug('ondata');
30582 increasedAwaitDrain = false;
30583 var ret = dest.write(chunk);
30584 if (false === ret && !increasedAwaitDrain) {
30585 // If the user unpiped during `dest.write()`, it is possible
30586 // to get stuck in a permanently paused state if that write
30587 // also returned false.
30588 // => Check whether `dest` is still a piping destination.
30589 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
30590 debug('false write response, pause', src._readableState.awaitDrain);
30591 src._readableState.awaitDrain++;
30592 increasedAwaitDrain = true;
30593 }
30594 src.pause();
30595 }
30596 }
30597
30598 // if the dest has an error, then stop piping into it.
30599 // however, don't suppress the throwing behavior for this.
30600 function onerror(er) {
30601 debug('onerror', er);
30602 unpipe();
30603 dest.removeListener('error', onerror);
30604 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
30605 }
30606
30607 // Make sure our error handler is attached before userland ones.
30608 prependListener(dest, 'error', onerror);
30609
30610 // Both close and finish should trigger unpipe, but only once.
30611 function onclose() {
30612 dest.removeListener('finish', onfinish);
30613 unpipe();
30614 }
30615 dest.once('close', onclose);
30616 function onfinish() {
30617 debug('onfinish');
30618 dest.removeListener('close', onclose);
30619 unpipe();
30620 }
30621 dest.once('finish', onfinish);
30622
30623 function unpipe() {
30624 debug('unpipe');
30625 src.unpipe(dest);
30626 }
30627
30628 // tell the dest that it's being piped to
30629 dest.emit('pipe', src);
30630
30631 // start the flow if it hasn't been started already.
30632 if (!state.flowing) {
30633 debug('pipe resume');
30634 src.resume();
30635 }
30636
30637 return dest;
30638 };
30639
30640 function pipeOnDrain(src) {
30641 return function () {
30642 var state = src._readableState;
30643 debug('pipeOnDrain', state.awaitDrain);
30644 if (state.awaitDrain) state.awaitDrain--;
30645 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
30646 state.flowing = true;
30647 flow(src);
30648 }
30649 };
30650 }
30651
30652 Readable.prototype.unpipe = function (dest) {
30653 var state = this._readableState;
30654
30655 // if we're not piping anywhere, then do nothing.
30656 if (state.pipesCount === 0) return this;
30657
30658 // just one destination. most common case.
30659 if (state.pipesCount === 1) {
30660 // passed in one, but it's not the right one.
30661 if (dest && dest !== state.pipes) return this;
30662
30663 if (!dest) dest = state.pipes;
30664
30665 // got a match.
30666 state.pipes = null;
30667 state.pipesCount = 0;
30668 state.flowing = false;
30669 if (dest) dest.emit('unpipe', this);
30670 return this;
30671 }
30672
30673 // slow case. multiple pipe destinations.
30674
30675 if (!dest) {
30676 // remove all.
30677 var dests = state.pipes;
30678 var len = state.pipesCount;
30679 state.pipes = null;
30680 state.pipesCount = 0;
30681 state.flowing = false;
30682
30683 for (var i = 0; i < len; i++) {
30684 dests[i].emit('unpipe', this);
30685 }return this;
30686 }
30687
30688 // try to find the right one.
30689 var index = indexOf(state.pipes, dest);
30690 if (index === -1) return this;
30691
30692 state.pipes.splice(index, 1);
30693 state.pipesCount -= 1;
30694 if (state.pipesCount === 1) state.pipes = state.pipes[0];
30695
30696 dest.emit('unpipe', this);
30697
30698 return this;
30699 };
30700
30701 // set up data events if they are asked for
30702 // Ensure readable listeners eventually get something
30703 Readable.prototype.on = function (ev, fn) {
30704 var res = Stream.prototype.on.call(this, ev, fn);
30705
30706 if (ev === 'data') {
30707 // Start flowing on next tick if stream isn't explicitly paused
30708 if (this._readableState.flowing !== false) this.resume();
30709 } else if (ev === 'readable') {
30710 var state = this._readableState;
30711 if (!state.endEmitted && !state.readableListening) {
30712 state.readableListening = state.needReadable = true;
30713 state.emittedReadable = false;
30714 if (!state.reading) {
30715 processNextTick(nReadingNextTick, this);
30716 } else if (state.length) {
30717 emitReadable(this, state);
30718 }
30719 }
30720 }
30721
30722 return res;
30723 };
30724 Readable.prototype.addListener = Readable.prototype.on;
30725
30726 function nReadingNextTick(self) {
30727 debug('readable nexttick read 0');
30728 self.read(0);
30729 }
30730
30731 // pause() and resume() are remnants of the legacy readable stream API
30732 // If the user uses them, then switch into old mode.
30733 Readable.prototype.resume = function () {
30734 var state = this._readableState;
30735 if (!state.flowing) {
30736 debug('resume');
30737 state.flowing = true;
30738 resume(this, state);
30739 }
30740 return this;
30741 };
30742
30743 function resume(stream, state) {
30744 if (!state.resumeScheduled) {
30745 state.resumeScheduled = true;
30746 processNextTick(resume_, stream, state);
30747 }
30748 }
30749
30750 function resume_(stream, state) {
30751 if (!state.reading) {
30752 debug('resume read 0');
30753 stream.read(0);
30754 }
30755
30756 state.resumeScheduled = false;
30757 state.awaitDrain = 0;
30758 stream.emit('resume');
30759 flow(stream);
30760 if (state.flowing && !state.reading) stream.read(0);
30761 }
30762
30763 Readable.prototype.pause = function () {
30764 debug('call pause flowing=%j', this._readableState.flowing);
30765 if (false !== this._readableState.flowing) {
30766 debug('pause');
30767 this._readableState.flowing = false;
30768 this.emit('pause');
30769 }
30770 return this;
30771 };
30772
30773 function flow(stream) {
30774 var state = stream._readableState;
30775 debug('flow', state.flowing);
30776 while (state.flowing && stream.read() !== null) {}
30777 }
30778
30779 // wrap an old-style stream as the async data source.
30780 // This is *not* part of the readable stream interface.
30781 // It is an ugly unfortunate mess of history.
30782 Readable.prototype.wrap = function (stream) {
30783 var state = this._readableState;
30784 var paused = false;
30785
30786 var self = this;
30787 stream.on('end', function () {
30788 debug('wrapped end');
30789 if (state.decoder && !state.ended) {
30790 var chunk = state.decoder.end();
30791 if (chunk && chunk.length) self.push(chunk);
30792 }
30793
30794 self.push(null);
30795 });
30796
30797 stream.on('data', function (chunk) {
30798 debug('wrapped data');
30799 if (state.decoder) chunk = state.decoder.write(chunk);
30800
30801 // don't skip over falsy values in objectMode
30802 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
30803
30804 var ret = self.push(chunk);
30805 if (!ret) {
30806 paused = true;
30807 stream.pause();
30808 }
30809 });
30810
30811 // proxy all the other methods.
30812 // important when wrapping filters and duplexes.
30813 for (var i in stream) {
30814 if (this[i] === undefined && typeof stream[i] === 'function') {
30815 this[i] = function (method) {
30816 return function () {
30817 return stream[method].apply(stream, arguments);
30818 };
30819 }(i);
30820 }
30821 }
30822
30823 // proxy certain important events.
30824 for (var n = 0; n < kProxyEvents.length; n++) {
30825 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
30826 }
30827
30828 // when we try to consume some more bytes, simply unpause the
30829 // underlying stream.
30830 self._read = function (n) {
30831 debug('wrapped _read', n);
30832 if (paused) {
30833 paused = false;
30834 stream.resume();
30835 }
30836 };
30837
30838 return self;
30839 };
30840
30841 // exposed for testing purposes only.
30842 Readable._fromList = fromList;
30843
30844 // Pluck off n bytes from an array of buffers.
30845 // Length is the combined lengths of all the buffers in the list.
30846 // This function is designed to be inlinable, so please take care when making
30847 // changes to the function body.
30848 function fromList(n, state) {
30849 // nothing buffered
30850 if (state.length === 0) return null;
30851
30852 var ret;
30853 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
30854 // read it all, truncate the list
30855 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);
30856 state.buffer.clear();
30857 } else {
30858 // read part of list
30859 ret = fromListPartial(n, state.buffer, state.decoder);
30860 }
30861
30862 return ret;
30863 }
30864
30865 // Extracts only enough buffered data to satisfy the amount requested.
30866 // This function is designed to be inlinable, so please take care when making
30867 // changes to the function body.
30868 function fromListPartial(n, list, hasStrings) {
30869 var ret;
30870 if (n < list.head.data.length) {
30871 // slice is the same for buffers and strings
30872 ret = list.head.data.slice(0, n);
30873 list.head.data = list.head.data.slice(n);
30874 } else if (n === list.head.data.length) {
30875 // first chunk is a perfect match
30876 ret = list.shift();
30877 } else {
30878 // result spans more than one buffer
30879 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
30880 }
30881 return ret;
30882 }
30883
30884 // Copies a specified amount of characters from the list of buffered data
30885 // chunks.
30886 // This function is designed to be inlinable, so please take care when making
30887 // changes to the function body.
30888 function copyFromBufferString(n, list) {
30889 var p = list.head;
30890 var c = 1;
30891 var ret = p.data;
30892 n -= ret.length;
30893 while (p = p.next) {
30894 var str = p.data;
30895 var nb = n > str.length ? str.length : n;
30896 if (nb === str.length) ret += str;else ret += str.slice(0, n);
30897 n -= nb;
30898 if (n === 0) {
30899 if (nb === str.length) {
30900 ++c;
30901 if (p.next) list.head = p.next;else list.head = list.tail = null;
30902 } else {
30903 list.head = p;
30904 p.data = str.slice(nb);
30905 }
30906 break;
30907 }
30908 ++c;
30909 }
30910 list.length -= c;
30911 return ret;
30912 }
30913
30914 // Copies a specified amount of bytes from the list of buffered data chunks.
30915 // This function is designed to be inlinable, so please take care when making
30916 // changes to the function body.
30917 function copyFromBuffer(n, list) {
30918 var ret = bufferShim.allocUnsafe(n);
30919 var p = list.head;
30920 var c = 1;
30921 p.data.copy(ret);
30922 n -= p.data.length;
30923 while (p = p.next) {
30924 var buf = p.data;
30925 var nb = n > buf.length ? buf.length : n;
30926 buf.copy(ret, ret.length - n, 0, nb);
30927 n -= nb;
30928 if (n === 0) {
30929 if (nb === buf.length) {
30930 ++c;
30931 if (p.next) list.head = p.next;else list.head = list.tail = null;
30932 } else {
30933 list.head = p;
30934 p.data = buf.slice(nb);
30935 }
30936 break;
30937 }
30938 ++c;
30939 }
30940 list.length -= c;
30941 return ret;
30942 }
30943
30944 function endReadable(stream) {
30945 var state = stream._readableState;
30946
30947 // If we get here before consuming all the bytes, then that is a
30948 // bug in node. Should never happen.
30949 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
30950
30951 if (!state.endEmitted) {
30952 state.ended = true;
30953 processNextTick(endReadableNT, state, stream);
30954 }
30955 }
30956
30957 function endReadableNT(state, stream) {
30958 // Check that we didn't get one last unshift.
30959 if (!state.endEmitted && state.length === 0) {
30960 state.endEmitted = true;
30961 stream.readable = false;
30962 stream.emit('end');
30963 }
30964 }
30965
30966 function forEach(xs, f) {
30967 for (var i = 0, l = xs.length; i < l; i++) {
30968 f(xs[i], i);
30969 }
30970 }
30971
30972 function indexOf(xs, x) {
30973 for (var i = 0, l = xs.length; i < l; i++) {
30974 if (xs[i] === x) return i;
30975 }
30976 return -1;
30977 }
30978 }).call(this,require('_process'))
30979 },{"./_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){
30980 // a transform stream is a readable/writable stream where you do
30981 // something with the data. Sometimes it's called a "filter",
30982 // but that's not a great name for it, since that implies a thing where
30983 // some bits pass through, and others are simply ignored. (That would
30984 // be a valid example of a transform, of course.)
30985 //
30986 // While the output is causally related to the input, it's not a
30987 // necessarily symmetric or synchronous transformation. For example,
30988 // a zlib stream might take multiple plain-text writes(), and then
30989 // emit a single compressed chunk some time in the future.
30990 //
30991 // Here's how this works:
30992 //
30993 // The Transform stream has all the aspects of the readable and writable
30994 // stream classes. When you write(chunk), that calls _write(chunk,cb)
30995 // internally, and returns false if there's a lot of pending writes
30996 // buffered up. When you call read(), that calls _read(n) until
30997 // there's enough pending readable data buffered up.
30998 //
30999 // In a transform stream, the written data is placed in a buffer. When
31000 // _read(n) is called, it transforms the queued up data, calling the
31001 // buffered _write cb's as it consumes chunks. If consuming a single
31002 // written chunk would result in multiple output chunks, then the first
31003 // outputted bit calls the readcb, and subsequent chunks just go into
31004 // the read buffer, and will cause it to emit 'readable' if necessary.
31005 //
31006 // This way, back-pressure is actually determined by the reading side,
31007 // since _read has to be called to start processing a new chunk. However,
31008 // a pathological inflate type of transform can cause excessive buffering
31009 // here. For example, imagine a stream where every byte of input is
31010 // interpreted as an integer from 0-255, and then results in that many
31011 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
31012 // 1kb of data being output. In this case, you could write a very small
31013 // amount of input, and end up with a very large amount of output. In
31014 // such a pathological inflating mechanism, there'd be no way to tell
31015 // the system to stop doing the transform. A single 4MB write could
31016 // cause the system to run out of memory.
31017 //
31018 // However, even in such a pathological case, only a single written chunk
31019 // would be consumed, and then the rest would wait (un-transformed) until
31020 // the results of the previous transformed chunk were consumed.
31021
31022 'use strict';
31023
31024 module.exports = Transform;
31025
31026 var Duplex = require('./_stream_duplex');
31027
31028 /*<replacement>*/
31029 var util = require('core-util-is');
31030 util.inherits = require('inherits');
31031 /*</replacement>*/
31032
31033 util.inherits(Transform, Duplex);
31034
31035 function TransformState(stream) {
31036 this.afterTransform = function (er, data) {
31037 return afterTransform(stream, er, data);
31038 };
31039
31040 this.needTransform = false;
31041 this.transforming = false;
31042 this.writecb = null;
31043 this.writechunk = null;
31044 this.writeencoding = null;
31045 }
31046
31047 function afterTransform(stream, er, data) {
31048 var ts = stream._transformState;
31049 ts.transforming = false;
31050
31051 var cb = ts.writecb;
31052
31053 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
31054
31055 ts.writechunk = null;
31056 ts.writecb = null;
31057
31058 if (data !== null && data !== undefined) stream.push(data);
31059
31060 cb(er);
31061
31062 var rs = stream._readableState;
31063 rs.reading = false;
31064 if (rs.needReadable || rs.length < rs.highWaterMark) {
31065 stream._read(rs.highWaterMark);
31066 }
31067 }
31068
31069 function Transform(options) {
31070 if (!(this instanceof Transform)) return new Transform(options);
31071
31072 Duplex.call(this, options);
31073
31074 this._transformState = new TransformState(this);
31075
31076 var stream = this;
31077
31078 // start out asking for a readable event once data is transformed.
31079 this._readableState.needReadable = true;
31080
31081 // we have implemented the _read method, and done the other things
31082 // that Readable wants before the first _read call, so unset the
31083 // sync guard flag.
31084 this._readableState.sync = false;
31085
31086 if (options) {
31087 if (typeof options.transform === 'function') this._transform = options.transform;
31088
31089 if (typeof options.flush === 'function') this._flush = options.flush;
31090 }
31091
31092 // When the writable side finishes, then flush out anything remaining.
31093 this.once('prefinish', function () {
31094 if (typeof this._flush === 'function') this._flush(function (er, data) {
31095 done(stream, er, data);
31096 });else done(stream);
31097 });
31098 }
31099
31100 Transform.prototype.push = function (chunk, encoding) {
31101 this._transformState.needTransform = false;
31102 return Duplex.prototype.push.call(this, chunk, encoding);
31103 };
31104
31105 // This is the part where you do stuff!
31106 // override this function in implementation classes.
31107 // 'chunk' is an input chunk.
31108 //
31109 // Call `push(newChunk)` to pass along transformed output
31110 // to the readable side. You may call 'push' zero or more times.
31111 //
31112 // Call `cb(err)` when you are done with this chunk. If you pass
31113 // an error, then that'll put the hurt on the whole operation. If you
31114 // never call cb(), then you'll never get another chunk.
31115 Transform.prototype._transform = function (chunk, encoding, cb) {
31116 throw new Error('_transform() is not implemented');
31117 };
31118
31119 Transform.prototype._write = function (chunk, encoding, cb) {
31120 var ts = this._transformState;
31121 ts.writecb = cb;
31122 ts.writechunk = chunk;
31123 ts.writeencoding = encoding;
31124 if (!ts.transforming) {
31125 var rs = this._readableState;
31126 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
31127 }
31128 };
31129
31130 // Doesn't matter what the args are here.
31131 // _transform does all the work.
31132 // That we got here means that the readable side wants more data.
31133 Transform.prototype._read = function (n) {
31134 var ts = this._transformState;
31135
31136 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
31137 ts.transforming = true;
31138 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
31139 } else {
31140 // mark that we need a transform, so that any data that comes in
31141 // will get processed, now that we've asked for it.
31142 ts.needTransform = true;
31143 }
31144 };
31145
31146 function done(stream, er, data) {
31147 if (er) return stream.emit('error', er);
31148
31149 if (data !== null && data !== undefined) stream.push(data);
31150
31151 // if there's nothing in the write buffer, then that means
31152 // that nothing more will ever be provided
31153 var ws = stream._writableState;
31154 var ts = stream._transformState;
31155
31156 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
31157
31158 if (ts.transforming) throw new Error('Calling transform done when still transforming');
31159
31160 return stream.push(null);
31161 }
31162 },{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
31163 (function (process){
31164 // A bit simpler than readable streams.
31165 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
31166 // the drain event emission and buffering.
31167
31168 'use strict';
31169
31170 module.exports = Writable;
31171
31172 /*<replacement>*/
31173 var processNextTick = require('process-nextick-args');
31174 /*</replacement>*/
31175
31176 /*<replacement>*/
31177 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
31178 /*</replacement>*/
31179
31180 /*<replacement>*/
31181 var Duplex;
31182 /*</replacement>*/
31183
31184 Writable.WritableState = WritableState;
31185
31186 /*<replacement>*/
31187 var util = require('core-util-is');
31188 util.inherits = require('inherits');
31189 /*</replacement>*/
31190
31191 /*<replacement>*/
31192 var internalUtil = {
31193 deprecate: require('util-deprecate')
31194 };
31195 /*</replacement>*/
31196
31197 /*<replacement>*/
31198 var Stream = require('./internal/streams/stream');
31199 /*</replacement>*/
31200
31201 var Buffer = require('buffer').Buffer;
31202 /*<replacement>*/
31203 var bufferShim = require('buffer-shims');
31204 /*</replacement>*/
31205
31206 util.inherits(Writable, Stream);
31207
31208 function nop() {}
31209
31210 function WriteReq(chunk, encoding, cb) {
31211 this.chunk = chunk;
31212 this.encoding = encoding;
31213 this.callback = cb;
31214 this.next = null;
31215 }
31216
31217 function WritableState(options, stream) {
31218 Duplex = Duplex || require('./_stream_duplex');
31219
31220 options = options || {};
31221
31222 // object stream flag to indicate whether or not this stream
31223 // contains buffers or objects.
31224 this.objectMode = !!options.objectMode;
31225
31226 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
31227
31228 // the point at which write() starts returning false
31229 // Note: 0 is a valid value, means that we always return false if
31230 // the entire buffer is not flushed immediately on write()
31231 var hwm = options.highWaterMark;
31232 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
31233 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
31234
31235 // cast to ints.
31236 this.highWaterMark = ~~this.highWaterMark;
31237
31238 // drain event flag.
31239 this.needDrain = false;
31240 // at the start of calling end()
31241 this.ending = false;
31242 // when end() has been called, and returned
31243 this.ended = false;
31244 // when 'finish' is emitted
31245 this.finished = false;
31246
31247 // should we decode strings into buffers before passing to _write?
31248 // this is here so that some node-core streams can optimize string
31249 // handling at a lower level.
31250 var noDecode = options.decodeStrings === false;
31251 this.decodeStrings = !noDecode;
31252
31253 // Crypto is kind of old and crusty. Historically, its default string
31254 // encoding is 'binary' so we have to make this configurable.
31255 // Everything else in the universe uses 'utf8', though.
31256 this.defaultEncoding = options.defaultEncoding || 'utf8';
31257
31258 // not an actual buffer we keep track of, but a measurement
31259 // of how much we're waiting to get pushed to some underlying
31260 // socket or file.
31261 this.length = 0;
31262
31263 // a flag to see when we're in the middle of a write.
31264 this.writing = false;
31265
31266 // when true all writes will be buffered until .uncork() call
31267 this.corked = 0;
31268
31269 // a flag to be able to tell if the onwrite cb is called immediately,
31270 // or on a later tick. We set this to true at first, because any
31271 // actions that shouldn't happen until "later" should generally also
31272 // not happen before the first write call.
31273 this.sync = true;
31274
31275 // a flag to know if we're processing previously buffered items, which
31276 // may call the _write() callback in the same tick, so that we don't
31277 // end up in an overlapped onwrite situation.
31278 this.bufferProcessing = false;
31279
31280 // the callback that's passed to _write(chunk,cb)
31281 this.onwrite = function (er) {
31282 onwrite(stream, er);
31283 };
31284
31285 // the callback that the user supplies to write(chunk,encoding,cb)
31286 this.writecb = null;
31287
31288 // the amount that is being written when _write is called.
31289 this.writelen = 0;
31290
31291 this.bufferedRequest = null;
31292 this.lastBufferedRequest = null;
31293
31294 // number of pending user-supplied write callbacks
31295 // this must be 0 before 'finish' can be emitted
31296 this.pendingcb = 0;
31297
31298 // emit prefinish if the only thing we're waiting for is _write cbs
31299 // This is relevant for synchronous Transform streams
31300 this.prefinished = false;
31301
31302 // True if the error was already emitted and should not be thrown again
31303 this.errorEmitted = false;
31304
31305 // count buffered requests
31306 this.bufferedRequestCount = 0;
31307
31308 // allocate the first CorkedRequest, there is always
31309 // one allocated and free to use, and we maintain at most two
31310 this.corkedRequestsFree = new CorkedRequest(this);
31311 }
31312
31313 WritableState.prototype.getBuffer = function getBuffer() {
31314 var current = this.bufferedRequest;
31315 var out = [];
31316 while (current) {
31317 out.push(current);
31318 current = current.next;
31319 }
31320 return out;
31321 };
31322
31323 (function () {
31324 try {
31325 Object.defineProperty(WritableState.prototype, 'buffer', {
31326 get: internalUtil.deprecate(function () {
31327 return this.getBuffer();
31328 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
31329 });
31330 } catch (_) {}
31331 })();
31332
31333 // Test _writableState for inheritance to account for Duplex streams,
31334 // whose prototype chain only points to Readable.
31335 var realHasInstance;
31336 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
31337 realHasInstance = Function.prototype[Symbol.hasInstance];
31338 Object.defineProperty(Writable, Symbol.hasInstance, {
31339 value: function (object) {
31340 if (realHasInstance.call(this, object)) return true;
31341
31342 return object && object._writableState instanceof WritableState;
31343 }
31344 });
31345 } else {
31346 realHasInstance = function (object) {
31347 return object instanceof this;
31348 };
31349 }
31350
31351 function Writable(options) {
31352 Duplex = Duplex || require('./_stream_duplex');
31353
31354 // Writable ctor is applied to Duplexes, too.
31355 // `realHasInstance` is necessary because using plain `instanceof`
31356 // would return false, as no `_writableState` property is attached.
31357
31358 // Trying to use the custom `instanceof` for Writable here will also break the
31359 // Node.js LazyTransform implementation, which has a non-trivial getter for
31360 // `_writableState` that would lead to infinite recursion.
31361 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
31362 return new Writable(options);
31363 }
31364
31365 this._writableState = new WritableState(options, this);
31366
31367 // legacy.
31368 this.writable = true;
31369
31370 if (options) {
31371 if (typeof options.write === 'function') this._write = options.write;
31372
31373 if (typeof options.writev === 'function') this._writev = options.writev;
31374 }
31375
31376 Stream.call(this);
31377 }
31378
31379 // Otherwise people can pipe Writable streams, which is just wrong.
31380 Writable.prototype.pipe = function () {
31381 this.emit('error', new Error('Cannot pipe, not readable'));
31382 };
31383
31384 function writeAfterEnd(stream, cb) {
31385 var er = new Error('write after end');
31386 // TODO: defer error events consistently everywhere, not just the cb
31387 stream.emit('error', er);
31388 processNextTick(cb, er);
31389 }
31390
31391 // Checks that a user-supplied chunk is valid, especially for the particular
31392 // mode the stream is in. Currently this means that `null` is never accepted
31393 // and undefined/non-string values are only allowed in object mode.
31394 function validChunk(stream, state, chunk, cb) {
31395 var valid = true;
31396 var er = false;
31397
31398 if (chunk === null) {
31399 er = new TypeError('May not write null values to stream');
31400 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
31401 er = new TypeError('Invalid non-string/buffer chunk');
31402 }
31403 if (er) {
31404 stream.emit('error', er);
31405 processNextTick(cb, er);
31406 valid = false;
31407 }
31408 return valid;
31409 }
31410
31411 Writable.prototype.write = function (chunk, encoding, cb) {
31412 var state = this._writableState;
31413 var ret = false;
31414 var isBuf = Buffer.isBuffer(chunk);
31415
31416 if (typeof encoding === 'function') {
31417 cb = encoding;
31418 encoding = null;
31419 }
31420
31421 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
31422
31423 if (typeof cb !== 'function') cb = nop;
31424
31425 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
31426 state.pendingcb++;
31427 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
31428 }
31429
31430 return ret;
31431 };
31432
31433 Writable.prototype.cork = function () {
31434 var state = this._writableState;
31435
31436 state.corked++;
31437 };
31438
31439 Writable.prototype.uncork = function () {
31440 var state = this._writableState;
31441
31442 if (state.corked) {
31443 state.corked--;
31444
31445 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
31446 }
31447 };
31448
31449 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
31450 // node::ParseEncoding() requires lower case.
31451 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
31452 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);
31453 this._writableState.defaultEncoding = encoding;
31454 return this;
31455 };
31456
31457 function decodeChunk(state, chunk, encoding) {
31458 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
31459 chunk = bufferShim.from(chunk, encoding);
31460 }
31461 return chunk;
31462 }
31463
31464 // if we're already writing something, then just put this
31465 // in the queue, and wait our turn. Otherwise, call _write
31466 // If we return false, then we need a drain event, so set that flag.
31467 function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
31468 if (!isBuf) {
31469 chunk = decodeChunk(state, chunk, encoding);
31470 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
31471 }
31472 var len = state.objectMode ? 1 : chunk.length;
31473
31474 state.length += len;
31475
31476 var ret = state.length < state.highWaterMark;
31477 // we must ensure that previous needDrain will not be reset to false.
31478 if (!ret) state.needDrain = true;
31479
31480 if (state.writing || state.corked) {
31481 var last = state.lastBufferedRequest;
31482 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
31483 if (last) {
31484 last.next = state.lastBufferedRequest;
31485 } else {
31486 state.bufferedRequest = state.lastBufferedRequest;
31487 }
31488 state.bufferedRequestCount += 1;
31489 } else {
31490 doWrite(stream, state, false, len, chunk, encoding, cb);
31491 }
31492
31493 return ret;
31494 }
31495
31496 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
31497 state.writelen = len;
31498 state.writecb = cb;
31499 state.writing = true;
31500 state.sync = true;
31501 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
31502 state.sync = false;
31503 }
31504
31505 function onwriteError(stream, state, sync, er, cb) {
31506 --state.pendingcb;
31507 if (sync) processNextTick(cb, er);else cb(er);
31508
31509 stream._writableState.errorEmitted = true;
31510 stream.emit('error', er);
31511 }
31512
31513 function onwriteStateUpdate(state) {
31514 state.writing = false;
31515 state.writecb = null;
31516 state.length -= state.writelen;
31517 state.writelen = 0;
31518 }
31519
31520 function onwrite(stream, er) {
31521 var state = stream._writableState;
31522 var sync = state.sync;
31523 var cb = state.writecb;
31524
31525 onwriteStateUpdate(state);
31526
31527 if (er) onwriteError(stream, state, sync, er, cb);else {
31528 // Check if we're actually ready to finish, but don't emit yet
31529 var finished = needFinish(state);
31530
31531 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
31532 clearBuffer(stream, state);
31533 }
31534
31535 if (sync) {
31536 /*<replacement>*/
31537 asyncWrite(afterWrite, stream, state, finished, cb);
31538 /*</replacement>*/
31539 } else {
31540 afterWrite(stream, state, finished, cb);
31541 }
31542 }
31543 }
31544
31545 function afterWrite(stream, state, finished, cb) {
31546 if (!finished) onwriteDrain(stream, state);
31547 state.pendingcb--;
31548 cb();
31549 finishMaybe(stream, state);
31550 }
31551
31552 // Must force callback to be called on nextTick, so that we don't
31553 // emit 'drain' before the write() consumer gets the 'false' return
31554 // value, and has a chance to attach a 'drain' listener.
31555 function onwriteDrain(stream, state) {
31556 if (state.length === 0 && state.needDrain) {
31557 state.needDrain = false;
31558 stream.emit('drain');
31559 }
31560 }
31561
31562 // if there's something in the buffer waiting, then process it
31563 function clearBuffer(stream, state) {
31564 state.bufferProcessing = true;
31565 var entry = state.bufferedRequest;
31566
31567 if (stream._writev && entry && entry.next) {
31568 // Fast case, write everything using _writev()
31569 var l = state.bufferedRequestCount;
31570 var buffer = new Array(l);
31571 var holder = state.corkedRequestsFree;
31572 holder.entry = entry;
31573
31574 var count = 0;
31575 while (entry) {
31576 buffer[count] = entry;
31577 entry = entry.next;
31578 count += 1;
31579 }
31580
31581 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
31582
31583 // doWrite is almost always async, defer these to save a bit of time
31584 // as the hot path ends with doWrite
31585 state.pendingcb++;
31586 state.lastBufferedRequest = null;
31587 if (holder.next) {
31588 state.corkedRequestsFree = holder.next;
31589 holder.next = null;
31590 } else {
31591 state.corkedRequestsFree = new CorkedRequest(state);
31592 }
31593 } else {
31594 // Slow case, write chunks one-by-one
31595 while (entry) {
31596 var chunk = entry.chunk;
31597 var encoding = entry.encoding;
31598 var cb = entry.callback;
31599 var len = state.objectMode ? 1 : chunk.length;
31600
31601 doWrite(stream, state, false, len, chunk, encoding, cb);
31602 entry = entry.next;
31603 // if we didn't call the onwrite immediately, then
31604 // it means that we need to wait until it does.
31605 // also, that means that the chunk and cb are currently
31606 // being processed, so move the buffer counter past them.
31607 if (state.writing) {
31608 break;
31609 }
31610 }
31611
31612 if (entry === null) state.lastBufferedRequest = null;
31613 }
31614
31615 state.bufferedRequestCount = 0;
31616 state.bufferedRequest = entry;
31617 state.bufferProcessing = false;
31618 }
31619
31620 Writable.prototype._write = function (chunk, encoding, cb) {
31621 cb(new Error('_write() is not implemented'));
31622 };
31623
31624 Writable.prototype._writev = null;
31625
31626 Writable.prototype.end = function (chunk, encoding, cb) {
31627 var state = this._writableState;
31628
31629 if (typeof chunk === 'function') {
31630 cb = chunk;
31631 chunk = null;
31632 encoding = null;
31633 } else if (typeof encoding === 'function') {
31634 cb = encoding;
31635 encoding = null;
31636 }
31637
31638 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
31639
31640 // .end() fully uncorks
31641 if (state.corked) {
31642 state.corked = 1;
31643 this.uncork();
31644 }
31645
31646 // ignore unnecessary end() calls.
31647 if (!state.ending && !state.finished) endWritable(this, state, cb);
31648 };
31649
31650 function needFinish(state) {
31651 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
31652 }
31653
31654 function prefinish(stream, state) {
31655 if (!state.prefinished) {
31656 state.prefinished = true;
31657 stream.emit('prefinish');
31658 }
31659 }
31660
31661 function finishMaybe(stream, state) {
31662 var need = needFinish(state);
31663 if (need) {
31664 if (state.pendingcb === 0) {
31665 prefinish(stream, state);
31666 state.finished = true;
31667 stream.emit('finish');
31668 } else {
31669 prefinish(stream, state);
31670 }
31671 }
31672 return need;
31673 }
31674
31675 function endWritable(stream, state, cb) {
31676 state.ending = true;
31677 finishMaybe(stream, state);
31678 if (cb) {
31679 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
31680 }
31681 state.ended = true;
31682 stream.writable = false;
31683 }
31684
31685 // It seems a linked list but it is not
31686 // there will be only 2 of these for each stream
31687 function CorkedRequest(state) {
31688 var _this = this;
31689
31690 this.next = null;
31691 this.entry = null;
31692 this.finish = function (err) {
31693 var entry = _this.entry;
31694 _this.entry = null;
31695 while (entry) {
31696 var cb = entry.callback;
31697 state.pendingcb--;
31698 cb(err);
31699 entry = entry.next;
31700 }
31701 if (state.corkedRequestsFree) {
31702 state.corkedRequestsFree.next = _this;
31703 } else {
31704 state.corkedRequestsFree = _this;
31705 }
31706 };
31707 }
31708 }).call(this,require('_process'))
31709 },{"./_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){
31710 'use strict';
31711
31712 var Buffer = require('buffer').Buffer;
31713 /*<replacement>*/
31714 var bufferShim = require('buffer-shims');
31715 /*</replacement>*/
31716
31717 module.exports = BufferList;
31718
31719 function BufferList() {
31720 this.head = null;
31721 this.tail = null;
31722 this.length = 0;
31723 }
31724
31725 BufferList.prototype.push = function (v) {
31726 var entry = { data: v, next: null };
31727 if (this.length > 0) this.tail.next = entry;else this.head = entry;
31728 this.tail = entry;
31729 ++this.length;
31730 };
31731
31732 BufferList.prototype.unshift = function (v) {
31733 var entry = { data: v, next: this.head };
31734 if (this.length === 0) this.tail = entry;
31735 this.head = entry;
31736 ++this.length;
31737 };
31738
31739 BufferList.prototype.shift = function () {
31740 if (this.length === 0) return;
31741 var ret = this.head.data;
31742 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
31743 --this.length;
31744 return ret;
31745 };
31746
31747 BufferList.prototype.clear = function () {
31748 this.head = this.tail = null;
31749 this.length = 0;
31750 };
31751
31752 BufferList.prototype.join = function (s) {
31753 if (this.length === 0) return '';
31754 var p = this.head;
31755 var ret = '' + p.data;
31756 while (p = p.next) {
31757 ret += s + p.data;
31758 }return ret;
31759 };
31760
31761 BufferList.prototype.concat = function (n) {
31762 if (this.length === 0) return bufferShim.alloc(0);
31763 if (this.length === 1) return this.head.data;
31764 var ret = bufferShim.allocUnsafe(n >>> 0);
31765 var p = this.head;
31766 var i = 0;
31767 while (p) {
31768 p.data.copy(ret, i);
31769 i += p.data.length;
31770 p = p.next;
31771 }
31772 return ret;
31773 };
31774 },{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
31775 module.exports = require('events').EventEmitter;
31776
31777 },{"events":7}],22:[function(require,module,exports){
31778 'use strict';
31779
31780 var Buffer = require('safe-buffer').Buffer;
31781
31782 var isEncoding = Buffer.isEncoding || function (encoding) {
31783 encoding = '' + encoding;
31784 switch (encoding && encoding.toLowerCase()) {
31785 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':
31786 return true;
31787 default:
31788 return false;
31789 }
31790 };
31791
31792 function _normalizeEncoding(enc) {
31793 if (!enc) return 'utf8';
31794 var retried;
31795 while (true) {
31796 switch (enc) {
31797 case 'utf8':
31798 case 'utf-8':
31799 return 'utf8';
31800 case 'ucs2':
31801 case 'ucs-2':
31802 case 'utf16le':
31803 case 'utf-16le':
31804 return 'utf16le';
31805 case 'latin1':
31806 case 'binary':
31807 return 'latin1';
31808 case 'base64':
31809 case 'ascii':
31810 case 'hex':
31811 return enc;
31812 default:
31813 if (retried) return; // undefined
31814 enc = ('' + enc).toLowerCase();
31815 retried = true;
31816 }
31817 }
31818 };
31819
31820 // Do not cache `Buffer.isEncoding` when checking encoding names as some
31821 // modules monkey-patch it to support additional encodings
31822 function normalizeEncoding(enc) {
31823 var nenc = _normalizeEncoding(enc);
31824 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
31825 return nenc || enc;
31826 }
31827
31828 // StringDecoder provides an interface for efficiently splitting a series of
31829 // buffers into a series of JS strings without breaking apart multi-byte
31830 // characters.
31831 exports.StringDecoder = StringDecoder;
31832 function StringDecoder(encoding) {
31833 this.encoding = normalizeEncoding(encoding);
31834 var nb;
31835 switch (this.encoding) {
31836 case 'utf16le':
31837 this.text = utf16Text;
31838 this.end = utf16End;
31839 nb = 4;
31840 break;
31841 case 'utf8':
31842 this.fillLast = utf8FillLast;
31843 nb = 4;
31844 break;
31845 case 'base64':
31846 this.text = base64Text;
31847 this.end = base64End;
31848 nb = 3;
31849 break;
31850 default:
31851 this.write = simpleWrite;
31852 this.end = simpleEnd;
31853 return;
31854 }
31855 this.lastNeed = 0;
31856 this.lastTotal = 0;
31857 this.lastChar = Buffer.allocUnsafe(nb);
31858 }
31859
31860 StringDecoder.prototype.write = function (buf) {
31861 if (buf.length === 0) return '';
31862 var r;
31863 var i;
31864 if (this.lastNeed) {
31865 r = this.fillLast(buf);
31866 if (r === undefined) return '';
31867 i = this.lastNeed;
31868 this.lastNeed = 0;
31869 } else {
31870 i = 0;
31871 }
31872 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
31873 return r || '';
31874 };
31875
31876 StringDecoder.prototype.end = utf8End;
31877
31878 // Returns only complete characters in a Buffer
31879 StringDecoder.prototype.text = utf8Text;
31880
31881 // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
31882 StringDecoder.prototype.fillLast = function (buf) {
31883 if (this.lastNeed <= buf.length) {
31884 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
31885 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
31886 }
31887 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
31888 this.lastNeed -= buf.length;
31889 };
31890
31891 // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
31892 // continuation byte.
31893 function utf8CheckByte(byte) {
31894 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;
31895 return -1;
31896 }
31897
31898 // Checks at most 3 bytes at the end of a Buffer in order to detect an
31899 // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
31900 // needed to complete the UTF-8 character (if applicable) are returned.
31901 function utf8CheckIncomplete(self, buf, i) {
31902 var j = buf.length - 1;
31903 if (j < i) return 0;
31904 var nb = utf8CheckByte(buf[j]);
31905 if (nb >= 0) {
31906 if (nb > 0) self.lastNeed = nb - 1;
31907 return nb;
31908 }
31909 if (--j < i) return 0;
31910 nb = utf8CheckByte(buf[j]);
31911 if (nb >= 0) {
31912 if (nb > 0) self.lastNeed = nb - 2;
31913 return nb;
31914 }
31915 if (--j < i) return 0;
31916 nb = utf8CheckByte(buf[j]);
31917 if (nb >= 0) {
31918 if (nb > 0) {
31919 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
31920 }
31921 return nb;
31922 }
31923 return 0;
31924 }
31925
31926 // Validates as many continuation bytes for a multi-byte UTF-8 character as
31927 // needed or are available. If we see a non-continuation byte where we expect
31928 // one, we "replace" the validated continuation bytes we've seen so far with
31929 // UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
31930 // behavior. The continuation byte check is included three times in the case
31931 // where all of the continuation bytes for a character exist in the same buffer.
31932 // It is also done this way as a slight performance increase instead of using a
31933 // loop.
31934 function utf8CheckExtraBytes(self, buf, p) {
31935 if ((buf[0] & 0xC0) !== 0x80) {
31936 self.lastNeed = 0;
31937 return '\ufffd'.repeat(p);
31938 }
31939 if (self.lastNeed > 1 && buf.length > 1) {
31940 if ((buf[1] & 0xC0) !== 0x80) {
31941 self.lastNeed = 1;
31942 return '\ufffd'.repeat(p + 1);
31943 }
31944 if (self.lastNeed > 2 && buf.length > 2) {
31945 if ((buf[2] & 0xC0) !== 0x80) {
31946 self.lastNeed = 2;
31947 return '\ufffd'.repeat(p + 2);
31948 }
31949 }
31950 }
31951 }
31952
31953 // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
31954 function utf8FillLast(buf) {
31955 var p = this.lastTotal - this.lastNeed;
31956 var r = utf8CheckExtraBytes(this, buf, p);
31957 if (r !== undefined) return r;
31958 if (this.lastNeed <= buf.length) {
31959 buf.copy(this.lastChar, p, 0, this.lastNeed);
31960 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
31961 }
31962 buf.copy(this.lastChar, p, 0, buf.length);
31963 this.lastNeed -= buf.length;
31964 }
31965
31966 // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
31967 // partial character, the character's bytes are buffered until the required
31968 // number of bytes are available.
31969 function utf8Text(buf, i) {
31970 var total = utf8CheckIncomplete(this, buf, i);
31971 if (!this.lastNeed) return buf.toString('utf8', i);
31972 this.lastTotal = total;
31973 var end = buf.length - (total - this.lastNeed);
31974 buf.copy(this.lastChar, 0, end);
31975 return buf.toString('utf8', i, end);
31976 }
31977
31978 // For UTF-8, a replacement character for each buffered byte of a (partial)
31979 // character needs to be added to the output.
31980 function utf8End(buf) {
31981 var r = buf && buf.length ? this.write(buf) : '';
31982 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
31983 return r;
31984 }
31985
31986 // UTF-16LE typically needs two bytes per character, but even if we have an even
31987 // number of bytes available, we need to check if we end on a leading/high
31988 // surrogate. In that case, we need to wait for the next two bytes in order to
31989 // decode the last character properly.
31990 function utf16Text(buf, i) {
31991 if ((buf.length - i) % 2 === 0) {
31992 var r = buf.toString('utf16le', i);
31993 if (r) {
31994 var c = r.charCodeAt(r.length - 1);
31995 if (c >= 0xD800 && c <= 0xDBFF) {
31996 this.lastNeed = 2;
31997 this.lastTotal = 4;
31998 this.lastChar[0] = buf[buf.length - 2];
31999 this.lastChar[1] = buf[buf.length - 1];
32000 return r.slice(0, -1);
32001 }
32002 }
32003 return r;
32004 }
32005 this.lastNeed = 1;
32006 this.lastTotal = 2;
32007 this.lastChar[0] = buf[buf.length - 1];
32008 return buf.toString('utf16le', i, buf.length - 1);
32009 }
32010
32011 // For UTF-16LE we do not explicitly append special replacement characters if we
32012 // end on a partial character, we simply let v8 handle that.
32013 function utf16End(buf) {
32014 var r = buf && buf.length ? this.write(buf) : '';
32015 if (this.lastNeed) {
32016 var end = this.lastTotal - this.lastNeed;
32017 return r + this.lastChar.toString('utf16le', 0, end);
32018 }
32019 return r;
32020 }
32021
32022 function base64Text(buf, i) {
32023 var n = (buf.length - i) % 3;
32024 if (n === 0) return buf.toString('base64', i);
32025 this.lastNeed = 3 - n;
32026 this.lastTotal = 3;
32027 if (n === 1) {
32028 this.lastChar[0] = buf[buf.length - 1];
32029 } else {
32030 this.lastChar[0] = buf[buf.length - 2];
32031 this.lastChar[1] = buf[buf.length - 1];
32032 }
32033 return buf.toString('base64', i, buf.length - n);
32034 }
32035
32036 function base64End(buf) {
32037 var r = buf && buf.length ? this.write(buf) : '';
32038 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
32039 return r;
32040 }
32041
32042 // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
32043 function simpleWrite(buf) {
32044 return buf.toString(this.encoding);
32045 }
32046
32047 function simpleEnd(buf) {
32048 return buf && buf.length ? this.write(buf) : '';
32049 }
32050 },{"safe-buffer":27}],23:[function(require,module,exports){
32051 module.exports = require('./readable').PassThrough
32052
32053 },{"./readable":24}],24:[function(require,module,exports){
32054 exports = module.exports = require('./lib/_stream_readable.js');
32055 exports.Stream = exports;
32056 exports.Readable = exports;
32057 exports.Writable = require('./lib/_stream_writable.js');
32058 exports.Duplex = require('./lib/_stream_duplex.js');
32059 exports.Transform = require('./lib/_stream_transform.js');
32060 exports.PassThrough = require('./lib/_stream_passthrough.js');
32061
32062 },{"./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){
32063 module.exports = require('./readable').Transform
32064
32065 },{"./readable":24}],26:[function(require,module,exports){
32066 module.exports = require('./lib/_stream_writable.js');
32067
32068 },{"./lib/_stream_writable.js":19}],27:[function(require,module,exports){
32069 module.exports = require('buffer')
32070
32071 },{"buffer":5}],28:[function(require,module,exports){
32072 // Copyright Joyent, Inc. and other Node contributors.
32073 //
32074 // Permission is hereby granted, free of charge, to any person obtaining a
32075 // copy of this software and associated documentation files (the
32076 // "Software"), to deal in the Software without restriction, including
32077 // without limitation the rights to use, copy, modify, merge, publish,
32078 // distribute, sublicense, and/or sell copies of the Software, and to permit
32079 // persons to whom the Software is furnished to do so, subject to the
32080 // following conditions:
32081 //
32082 // The above copyright notice and this permission notice shall be included
32083 // in all copies or substantial portions of the Software.
32084 //
32085 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32086 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32087 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32088 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32089 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32090 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32091 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32092
32093 module.exports = Stream;
32094
32095 var EE = require('events').EventEmitter;
32096 var inherits = require('inherits');
32097
32098 inherits(Stream, EE);
32099 Stream.Readable = require('readable-stream/readable.js');
32100 Stream.Writable = require('readable-stream/writable.js');
32101 Stream.Duplex = require('readable-stream/duplex.js');
32102 Stream.Transform = require('readable-stream/transform.js');
32103 Stream.PassThrough = require('readable-stream/passthrough.js');
32104
32105 // Backwards-compat with node 0.4.x
32106 Stream.Stream = Stream;
32107
32108
32109
32110 // old-style streams. Note that the pipe method (the only relevant
32111 // part of this class) is overridden in the Readable class.
32112
32113 function Stream() {
32114 EE.call(this);
32115 }
32116
32117 Stream.prototype.pipe = function(dest, options) {
32118 var source = this;
32119
32120 function ondata(chunk) {
32121 if (dest.writable) {
32122 if (false === dest.write(chunk) && source.pause) {
32123 source.pause();
32124 }
32125 }
32126 }
32127
32128 source.on('data', ondata);
32129
32130 function ondrain() {
32131 if (source.readable && source.resume) {
32132 source.resume();
32133 }
32134 }
32135
32136 dest.on('drain', ondrain);
32137
32138 // If the 'end' option is not supplied, dest.end() will be called when
32139 // source gets the 'end' or 'close' events. Only dest.end() once.
32140 if (!dest._isStdio && (!options || options.end !== false)) {
32141 source.on('end', onend);
32142 source.on('close', onclose);
32143 }
32144
32145 var didOnEnd = false;
32146 function onend() {
32147 if (didOnEnd) return;
32148 didOnEnd = true;
32149
32150 dest.end();
32151 }
32152
32153
32154 function onclose() {
32155 if (didOnEnd) return;
32156 didOnEnd = true;
32157
32158 if (typeof dest.destroy === 'function') dest.destroy();
32159 }
32160
32161 // don't leave dangling pipes when there are errors.
32162 function onerror(er) {
32163 cleanup();
32164 if (EE.listenerCount(this, 'error') === 0) {
32165 throw er; // Unhandled stream error in pipe.
32166 }
32167 }
32168
32169 source.on('error', onerror);
32170 dest.on('error', onerror);
32171
32172 // remove all the event listeners that were added.
32173 function cleanup() {
32174 source.removeListener('data', ondata);
32175 dest.removeListener('drain', ondrain);
32176
32177 source.removeListener('end', onend);
32178 source.removeListener('close', onclose);
32179
32180 source.removeListener('error', onerror);
32181 dest.removeListener('error', onerror);
32182
32183 source.removeListener('end', cleanup);
32184 source.removeListener('close', cleanup);
32185
32186 dest.removeListener('close', cleanup);
32187 }
32188
32189 source.on('end', cleanup);
32190 source.on('close', cleanup);
32191
32192 dest.on('close', cleanup);
32193
32194 dest.emit('pipe', source);
32195
32196 // Allow for unix-like usage: A.pipe(B).pipe(C)
32197 return dest;
32198 };
32199
32200 },{"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){
32201 // Copyright Joyent, Inc. and other Node contributors.
32202 //
32203 // Permission is hereby granted, free of charge, to any person obtaining a
32204 // copy of this software and associated documentation files (the
32205 // "Software"), to deal in the Software without restriction, including
32206 // without limitation the rights to use, copy, modify, merge, publish,
32207 // distribute, sublicense, and/or sell copies of the Software, and to permit
32208 // persons to whom the Software is furnished to do so, subject to the
32209 // following conditions:
32210 //
32211 // The above copyright notice and this permission notice shall be included
32212 // in all copies or substantial portions of the Software.
32213 //
32214 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32215 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32216 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32217 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32218 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32219 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32220 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32221
32222 var Buffer = require('buffer').Buffer;
32223
32224 var isBufferEncoding = Buffer.isEncoding
32225 || function(encoding) {
32226 switch (encoding && encoding.toLowerCase()) {
32227 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;
32228 default: return false;
32229 }
32230 }
32231
32232
32233 function assertEncoding(encoding) {
32234 if (encoding && !isBufferEncoding(encoding)) {
32235 throw new Error('Unknown encoding: ' + encoding);
32236 }
32237 }
32238
32239 // StringDecoder provides an interface for efficiently splitting a series of
32240 // buffers into a series of JS strings without breaking apart multi-byte
32241 // characters. CESU-8 is handled as part of the UTF-8 encoding.
32242 //
32243 // @TODO Handling all encodings inside a single object makes it very difficult
32244 // to reason about this code, so it should be split up in the future.
32245 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
32246 // points as used by CESU-8.
32247 var StringDecoder = exports.StringDecoder = function(encoding) {
32248 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
32249 assertEncoding(encoding);
32250 switch (this.encoding) {
32251 case 'utf8':
32252 // CESU-8 represents each of Surrogate Pair by 3-bytes
32253 this.surrogateSize = 3;
32254 break;
32255 case 'ucs2':
32256 case 'utf16le':
32257 // UTF-16 represents each of Surrogate Pair by 2-bytes
32258 this.surrogateSize = 2;
32259 this.detectIncompleteChar = utf16DetectIncompleteChar;
32260 break;
32261 case 'base64':
32262 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
32263 this.surrogateSize = 3;
32264 this.detectIncompleteChar = base64DetectIncompleteChar;
32265 break;
32266 default:
32267 this.write = passThroughWrite;
32268 return;
32269 }
32270
32271 // Enough space to store all bytes of a single character. UTF-8 needs 4
32272 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
32273 this.charBuffer = new Buffer(6);
32274 // Number of bytes received for the current incomplete multi-byte character.
32275 this.charReceived = 0;
32276 // Number of bytes expected for the current incomplete multi-byte character.
32277 this.charLength = 0;
32278 };
32279
32280
32281 // write decodes the given buffer and returns it as JS string that is
32282 // guaranteed to not contain any partial multi-byte characters. Any partial
32283 // character found at the end of the buffer is buffered up, and will be
32284 // returned when calling write again with the remaining bytes.
32285 //
32286 // Note: Converting a Buffer containing an orphan surrogate to a String
32287 // currently works, but converting a String to a Buffer (via `new Buffer`, or
32288 // Buffer#write) will replace incomplete surrogates with the unicode
32289 // replacement character. See https://codereview.chromium.org/121173009/ .
32290 StringDecoder.prototype.write = function(buffer) {
32291 var charStr = '';
32292 // if our last write ended with an incomplete multibyte character
32293 while (this.charLength) {
32294 // determine how many remaining bytes this buffer has to offer for this char
32295 var available = (buffer.length >= this.charLength - this.charReceived) ?
32296 this.charLength - this.charReceived :
32297 buffer.length;
32298
32299 // add the new bytes to the char buffer
32300 buffer.copy(this.charBuffer, this.charReceived, 0, available);
32301 this.charReceived += available;
32302
32303 if (this.charReceived < this.charLength) {
32304 // still not enough chars in this buffer? wait for more ...
32305 return '';
32306 }
32307
32308 // remove bytes belonging to the current character from the buffer
32309 buffer = buffer.slice(available, buffer.length);
32310
32311 // get the character that was split
32312 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
32313
32314 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
32315 var charCode = charStr.charCodeAt(charStr.length - 1);
32316 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
32317 this.charLength += this.surrogateSize;
32318 charStr = '';
32319 continue;
32320 }
32321 this.charReceived = this.charLength = 0;
32322
32323 // if there are no more bytes in this buffer, just emit our char
32324 if (buffer.length === 0) {
32325 return charStr;
32326 }
32327 break;
32328 }
32329
32330 // determine and set charLength / charReceived
32331 this.detectIncompleteChar(buffer);
32332
32333 var end = buffer.length;
32334 if (this.charLength) {
32335 // buffer the incomplete character bytes we got
32336 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
32337 end -= this.charReceived;
32338 }
32339
32340 charStr += buffer.toString(this.encoding, 0, end);
32341
32342 var end = charStr.length - 1;
32343 var charCode = charStr.charCodeAt(end);
32344 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
32345 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
32346 var size = this.surrogateSize;
32347 this.charLength += size;
32348 this.charReceived += size;
32349 this.charBuffer.copy(this.charBuffer, size, 0, size);
32350 buffer.copy(this.charBuffer, 0, 0, size);
32351 return charStr.substring(0, end);
32352 }
32353
32354 // or just emit the charStr
32355 return charStr;
32356 };
32357
32358 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
32359 // the end of the given buffer. If so, it sets this.charLength to the byte
32360 // length that character, and sets this.charReceived to the number of bytes
32361 // that are available for this character.
32362 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
32363 // determine how many bytes we have to check at the end of this buffer
32364 var i = (buffer.length >= 3) ? 3 : buffer.length;
32365
32366 // Figure out if one of the last i bytes of our buffer announces an
32367 // incomplete char.
32368 for (; i > 0; i--) {
32369 var c = buffer[buffer.length - i];
32370
32371 // See http://en.wikipedia.org/wiki/UTF-8#Description
32372
32373 // 110XXXXX
32374 if (i == 1 && c >> 5 == 0x06) {
32375 this.charLength = 2;
32376 break;
32377 }
32378
32379 // 1110XXXX
32380 if (i <= 2 && c >> 4 == 0x0E) {
32381 this.charLength = 3;
32382 break;
32383 }
32384
32385 // 11110XXX
32386 if (i <= 3 && c >> 3 == 0x1E) {
32387 this.charLength = 4;
32388 break;
32389 }
32390 }
32391 this.charReceived = i;
32392 };
32393
32394 StringDecoder.prototype.end = function(buffer) {
32395 var res = '';
32396 if (buffer && buffer.length)
32397 res = this.write(buffer);
32398
32399 if (this.charReceived) {
32400 var cr = this.charReceived;
32401 var buf = this.charBuffer;
32402 var enc = this.encoding;
32403 res += buf.slice(0, cr).toString(enc);
32404 }
32405
32406 return res;
32407 };
32408
32409 function passThroughWrite(buffer) {
32410 return buffer.toString(this.encoding);
32411 }
32412
32413 function utf16DetectIncompleteChar(buffer) {
32414 this.charReceived = buffer.length % 2;
32415 this.charLength = this.charReceived ? 2 : 0;
32416 }
32417
32418 function base64DetectIncompleteChar(buffer) {
32419 this.charReceived = buffer.length % 3;
32420 this.charLength = this.charReceived ? 3 : 0;
32421 }
32422
32423 },{"buffer":5}],30:[function(require,module,exports){
32424 (function (global){
32425
32426 /**
32427 * Module exports.
32428 */
32429
32430 module.exports = deprecate;
32431
32432 /**
32433 * Mark that a method should not be used.
32434 * Returns a modified function which warns once by default.
32435 *
32436 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
32437 *
32438 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
32439 * will throw an Error when invoked.
32440 *
32441 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
32442 * will invoke `console.trace()` instead of `console.error()`.
32443 *
32444 * @param {Function} fn - the function to deprecate
32445 * @param {String} msg - the string to print to the console when `fn` is invoked
32446 * @returns {Function} a new "deprecated" version of `fn`
32447 * @api public
32448 */
32449
32450 function deprecate (fn, msg) {
32451 if (config('noDeprecation')) {
32452 return fn;
32453 }
32454
32455 var warned = false;
32456 function deprecated() {
32457 if (!warned) {
32458 if (config('throwDeprecation')) {
32459 throw new Error(msg);
32460 } else if (config('traceDeprecation')) {
32461 console.trace(msg);
32462 } else {
32463 console.warn(msg);
32464 }
32465 warned = true;
32466 }
32467 return fn.apply(this, arguments);
32468 }
32469
32470 return deprecated;
32471 }
32472
32473 /**
32474 * Checks `localStorage` for boolean values for the given `name`.
32475 *
32476 * @param {String} name
32477 * @returns {Boolean}
32478 * @api private
32479 */
32480
32481 function config (name) {
32482 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
32483 try {
32484 if (!global.localStorage) return false;
32485 } catch (_) {
32486 return false;
32487 }
32488 var val = global.localStorage[name];
32489 if (null == val) return false;
32490 return String(val).toLowerCase() === 'true';
32491 }
32492
32493 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
32494 },{}],31:[function(require,module,exports){
32495 arguments[4][9][0].apply(exports,arguments)
32496 },{"dup":9}],32:[function(require,module,exports){
32497 module.exports = function isBuffer(arg) {
32498 return arg && typeof arg === 'object'
32499 && typeof arg.copy === 'function'
32500 && typeof arg.fill === 'function'
32501 && typeof arg.readUInt8 === 'function';
32502 }
32503 },{}],33:[function(require,module,exports){
32504 (function (process,global){
32505 // Copyright Joyent, Inc. and other Node contributors.
32506 //
32507 // Permission is hereby granted, free of charge, to any person obtaining a
32508 // copy of this software and associated documentation files (the
32509 // "Software"), to deal in the Software without restriction, including
32510 // without limitation the rights to use, copy, modify, merge, publish,
32511 // distribute, sublicense, and/or sell copies of the Software, and to permit
32512 // persons to whom the Software is furnished to do so, subject to the
32513 // following conditions:
32514 //
32515 // The above copyright notice and this permission notice shall be included
32516 // in all copies or substantial portions of the Software.
32517 //
32518 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32519 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32520 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32521 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32522 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32523 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32524 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32525
32526 var formatRegExp = /%[sdj%]/g;
32527 exports.format = function(f) {
32528 if (!isString(f)) {
32529 var objects = [];
32530 for (var i = 0; i < arguments.length; i++) {
32531 objects.push(inspect(arguments[i]));
32532 }
32533 return objects.join(' ');
32534 }
32535
32536 var i = 1;
32537 var args = arguments;
32538 var len = args.length;
32539 var str = String(f).replace(formatRegExp, function(x) {
32540 if (x === '%%') return '%';
32541 if (i >= len) return x;
32542 switch (x) {
32543 case '%s': return String(args[i++]);
32544 case '%d': return Number(args[i++]);
32545 case '%j':
32546 try {
32547 return JSON.stringify(args[i++]);
32548 } catch (_) {
32549 return '[Circular]';
32550 }
32551 default:
32552 return x;
32553 }
32554 });
32555 for (var x = args[i]; i < len; x = args[++i]) {
32556 if (isNull(x) || !isObject(x)) {
32557 str += ' ' + x;
32558 } else {
32559 str += ' ' + inspect(x);
32560 }
32561 }
32562 return str;
32563 };
32564
32565
32566 // Mark that a method should not be used.
32567 // Returns a modified function which warns once by default.
32568 // If --no-deprecation is set, then it is a no-op.
32569 exports.deprecate = function(fn, msg) {
32570 // Allow for deprecating things in the process of starting up.
32571 if (isUndefined(global.process)) {
32572 return function() {
32573 return exports.deprecate(fn, msg).apply(this, arguments);
32574 };
32575 }
32576
32577 if (process.noDeprecation === true) {
32578 return fn;
32579 }
32580
32581 var warned = false;
32582 function deprecated() {
32583 if (!warned) {
32584 if (process.throwDeprecation) {
32585 throw new Error(msg);
32586 } else if (process.traceDeprecation) {
32587 console.trace(msg);
32588 } else {
32589 console.error(msg);
32590 }
32591 warned = true;
32592 }
32593 return fn.apply(this, arguments);
32594 }
32595
32596 return deprecated;
32597 };
32598
32599
32600 var debugs = {};
32601 var debugEnviron;
32602 exports.debuglog = function(set) {
32603 if (isUndefined(debugEnviron))
32604 debugEnviron = process.env.NODE_DEBUG || '';
32605 set = set.toUpperCase();
32606 if (!debugs[set]) {
32607 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
32608 var pid = process.pid;
32609 debugs[set] = function() {
32610 var msg = exports.format.apply(exports, arguments);
32611 console.error('%s %d: %s', set, pid, msg);
32612 };
32613 } else {
32614 debugs[set] = function() {};
32615 }
32616 }
32617 return debugs[set];
32618 };
32619
32620
32621 /**
32622 * Echos the value of a value. Trys to print the value out
32623 * in the best way possible given the different types.
32624 *
32625 * @param {Object} obj The object to print out.
32626 * @param {Object} opts Optional options object that alters the output.
32627 */
32628 /* legacy: obj, showHidden, depth, colors*/
32629 function inspect(obj, opts) {
32630 // default options
32631 var ctx = {
32632 seen: [],
32633 stylize: stylizeNoColor
32634 };
32635 // legacy...
32636 if (arguments.length >= 3) ctx.depth = arguments[2];
32637 if (arguments.length >= 4) ctx.colors = arguments[3];
32638 if (isBoolean(opts)) {
32639 // legacy...
32640 ctx.showHidden = opts;
32641 } else if (opts) {
32642 // got an "options" object
32643 exports._extend(ctx, opts);
32644 }
32645 // set default options
32646 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
32647 if (isUndefined(ctx.depth)) ctx.depth = 2;
32648 if (isUndefined(ctx.colors)) ctx.colors = false;
32649 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
32650 if (ctx.colors) ctx.stylize = stylizeWithColor;
32651 return formatValue(ctx, obj, ctx.depth);
32652 }
32653 exports.inspect = inspect;
32654
32655
32656 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
32657 inspect.colors = {
32658 'bold' : [1, 22],
32659 'italic' : [3, 23],
32660 'underline' : [4, 24],
32661 'inverse' : [7, 27],
32662 'white' : [37, 39],
32663 'grey' : [90, 39],
32664 'black' : [30, 39],
32665 'blue' : [34, 39],
32666 'cyan' : [36, 39],
32667 'green' : [32, 39],
32668 'magenta' : [35, 39],
32669 'red' : [31, 39],
32670 'yellow' : [33, 39]
32671 };
32672
32673 // Don't use 'blue' not visible on cmd.exe
32674 inspect.styles = {
32675 'special': 'cyan',
32676 'number': 'yellow',
32677 'boolean': 'yellow',
32678 'undefined': 'grey',
32679 'null': 'bold',
32680 'string': 'green',
32681 'date': 'magenta',
32682 // "name": intentionally not styling
32683 'regexp': 'red'
32684 };
32685
32686
32687 function stylizeWithColor(str, styleType) {
32688 var style = inspect.styles[styleType];
32689
32690 if (style) {
32691 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
32692 '\u001b[' + inspect.colors[style][1] + 'm';
32693 } else {
32694 return str;
32695 }
32696 }
32697
32698
32699 function stylizeNoColor(str, styleType) {
32700 return str;
32701 }
32702
32703
32704 function arrayToHash(array) {
32705 var hash = {};
32706
32707 array.forEach(function(val, idx) {
32708 hash[val] = true;
32709 });
32710
32711 return hash;
32712 }
32713
32714
32715 function formatValue(ctx, value, recurseTimes) {
32716 // Provide a hook for user-specified inspect functions.
32717 // Check that value is an object with an inspect function on it
32718 if (ctx.customInspect &&
32719 value &&
32720 isFunction(value.inspect) &&
32721 // Filter out the util module, it's inspect function is special
32722 value.inspect !== exports.inspect &&
32723 // Also filter out any prototype objects using the circular check.
32724 !(value.constructor && value.constructor.prototype === value)) {
32725 var ret = value.inspect(recurseTimes, ctx);
32726 if (!isString(ret)) {
32727 ret = formatValue(ctx, ret, recurseTimes);
32728 }
32729 return ret;
32730 }
32731
32732 // Primitive types cannot have properties
32733 var primitive = formatPrimitive(ctx, value);
32734 if (primitive) {
32735 return primitive;
32736 }
32737
32738 // Look up the keys of the object.
32739 var keys = Object.keys(value);
32740 var visibleKeys = arrayToHash(keys);
32741
32742 if (ctx.showHidden) {
32743 keys = Object.getOwnPropertyNames(value);
32744 }
32745
32746 // IE doesn't make error fields non-enumerable
32747 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
32748 if (isError(value)
32749 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
32750 return formatError(value);
32751 }
32752
32753 // Some type of object without properties can be shortcutted.
32754 if (keys.length === 0) {
32755 if (isFunction(value)) {
32756 var name = value.name ? ': ' + value.name : '';
32757 return ctx.stylize('[Function' + name + ']', 'special');
32758 }
32759 if (isRegExp(value)) {
32760 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
32761 }
32762 if (isDate(value)) {
32763 return ctx.stylize(Date.prototype.toString.call(value), 'date');
32764 }
32765 if (isError(value)) {
32766 return formatError(value);
32767 }
32768 }
32769
32770 var base = '', array = false, braces = ['{', '}'];
32771
32772 // Make Array say that they are Array
32773 if (isArray(value)) {
32774 array = true;
32775 braces = ['[', ']'];
32776 }
32777
32778 // Make functions say that they are functions
32779 if (isFunction(value)) {
32780 var n = value.name ? ': ' + value.name : '';
32781 base = ' [Function' + n + ']';
32782 }
32783
32784 // Make RegExps say that they are RegExps
32785 if (isRegExp(value)) {
32786 base = ' ' + RegExp.prototype.toString.call(value);
32787 }
32788
32789 // Make dates with properties first say the date
32790 if (isDate(value)) {
32791 base = ' ' + Date.prototype.toUTCString.call(value);
32792 }
32793
32794 // Make error with message first say the error
32795 if (isError(value)) {
32796 base = ' ' + formatError(value);
32797 }
32798
32799 if (keys.length === 0 && (!array || value.length == 0)) {
32800 return braces[0] + base + braces[1];
32801 }
32802
32803 if (recurseTimes < 0) {
32804 if (isRegExp(value)) {
32805 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
32806 } else {
32807 return ctx.stylize('[Object]', 'special');
32808 }
32809 }
32810
32811 ctx.seen.push(value);
32812
32813 var output;
32814 if (array) {
32815 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
32816 } else {
32817 output = keys.map(function(key) {
32818 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
32819 });
32820 }
32821
32822 ctx.seen.pop();
32823
32824 return reduceToSingleString(output, base, braces);
32825 }
32826
32827
32828 function formatPrimitive(ctx, value) {
32829 if (isUndefined(value))
32830 return ctx.stylize('undefined', 'undefined');
32831 if (isString(value)) {
32832 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
32833 .replace(/'/g, "\\'")
32834 .replace(/\\"/g, '"') + '\'';
32835 return ctx.stylize(simple, 'string');
32836 }
32837 if (isNumber(value))
32838 return ctx.stylize('' + value, 'number');
32839 if (isBoolean(value))
32840 return ctx.stylize('' + value, 'boolean');
32841 // For some reason typeof null is "object", so special case here.
32842 if (isNull(value))
32843 return ctx.stylize('null', 'null');
32844 }
32845
32846
32847 function formatError(value) {
32848 return '[' + Error.prototype.toString.call(value) + ']';
32849 }
32850
32851
32852 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
32853 var output = [];
32854 for (var i = 0, l = value.length; i < l; ++i) {
32855 if (hasOwnProperty(value, String(i))) {
32856 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
32857 String(i), true));
32858 } else {
32859 output.push('');
32860 }
32861 }
32862 keys.forEach(function(key) {
32863 if (!key.match(/^\d+$/)) {
32864 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
32865 key, true));
32866 }
32867 });
32868 return output;
32869 }
32870
32871
32872 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
32873 var name, str, desc;
32874 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
32875 if (desc.get) {
32876 if (desc.set) {
32877 str = ctx.stylize('[Getter/Setter]', 'special');
32878 } else {
32879 str = ctx.stylize('[Getter]', 'special');
32880 }
32881 } else {
32882 if (desc.set) {
32883 str = ctx.stylize('[Setter]', 'special');
32884 }
32885 }
32886 if (!hasOwnProperty(visibleKeys, key)) {
32887 name = '[' + key + ']';
32888 }
32889 if (!str) {
32890 if (ctx.seen.indexOf(desc.value) < 0) {
32891 if (isNull(recurseTimes)) {
32892 str = formatValue(ctx, desc.value, null);
32893 } else {
32894 str = formatValue(ctx, desc.value, recurseTimes - 1);
32895 }
32896 if (str.indexOf('\n') > -1) {
32897 if (array) {
32898 str = str.split('\n').map(function(line) {
32899 return ' ' + line;
32900 }).join('\n').substr(2);
32901 } else {
32902 str = '\n' + str.split('\n').map(function(line) {
32903 return ' ' + line;
32904 }).join('\n');
32905 }
32906 }
32907 } else {
32908 str = ctx.stylize('[Circular]', 'special');
32909 }
32910 }
32911 if (isUndefined(name)) {
32912 if (array && key.match(/^\d+$/)) {
32913 return str;
32914 }
32915 name = JSON.stringify('' + key);
32916 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
32917 name = name.substr(1, name.length - 2);
32918 name = ctx.stylize(name, 'name');
32919 } else {
32920 name = name.replace(/'/g, "\\'")
32921 .replace(/\\"/g, '"')
32922 .replace(/(^"|"$)/g, "'");
32923 name = ctx.stylize(name, 'string');
32924 }
32925 }
32926
32927 return name + ': ' + str;
32928 }
32929
32930
32931 function reduceToSingleString(output, base, braces) {
32932 var numLinesEst = 0;
32933 var length = output.reduce(function(prev, cur) {
32934 numLinesEst++;
32935 if (cur.indexOf('\n') >= 0) numLinesEst++;
32936 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
32937 }, 0);
32938
32939 if (length > 60) {
32940 return braces[0] +
32941 (base === '' ? '' : base + '\n ') +
32942 ' ' +
32943 output.join(',\n ') +
32944 ' ' +
32945 braces[1];
32946 }
32947
32948 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
32949 }
32950
32951
32952 // NOTE: These type checking functions intentionally don't use `instanceof`
32953 // because it is fragile and can be easily faked with `Object.create()`.
32954 function isArray(ar) {
32955 return Array.isArray(ar);
32956 }
32957 exports.isArray = isArray;
32958
32959 function isBoolean(arg) {
32960 return typeof arg === 'boolean';
32961 }
32962 exports.isBoolean = isBoolean;
32963
32964 function isNull(arg) {
32965 return arg === null;
32966 }
32967 exports.isNull = isNull;
32968
32969 function isNullOrUndefined(arg) {
32970 return arg == null;
32971 }
32972 exports.isNullOrUndefined = isNullOrUndefined;
32973
32974 function isNumber(arg) {
32975 return typeof arg === 'number';
32976 }
32977 exports.isNumber = isNumber;
32978
32979 function isString(arg) {
32980 return typeof arg === 'string';
32981 }
32982 exports.isString = isString;
32983
32984 function isSymbol(arg) {
32985 return typeof arg === 'symbol';
32986 }
32987 exports.isSymbol = isSymbol;
32988
32989 function isUndefined(arg) {
32990 return arg === void 0;
32991 }
32992 exports.isUndefined = isUndefined;
32993
32994 function isRegExp(re) {
32995 return isObject(re) && objectToString(re) === '[object RegExp]';
32996 }
32997 exports.isRegExp = isRegExp;
32998
32999 function isObject(arg) {
33000 return typeof arg === 'object' && arg !== null;
33001 }
33002 exports.isObject = isObject;
33003
33004 function isDate(d) {
33005 return isObject(d) && objectToString(d) === '[object Date]';
33006 }
33007 exports.isDate = isDate;
33008
33009 function isError(e) {
33010 return isObject(e) &&
33011 (objectToString(e) === '[object Error]' || e instanceof Error);
33012 }
33013 exports.isError = isError;
33014
33015 function isFunction(arg) {
33016 return typeof arg === 'function';
33017 }
33018 exports.isFunction = isFunction;
33019
33020 function isPrimitive(arg) {
33021 return arg === null ||
33022 typeof arg === 'boolean' ||
33023 typeof arg === 'number' ||
33024 typeof arg === 'string' ||
33025 typeof arg === 'symbol' || // ES6 symbol
33026 typeof arg === 'undefined';
33027 }
33028 exports.isPrimitive = isPrimitive;
33029
33030 exports.isBuffer = require('./support/isBuffer');
33031
33032 function objectToString(o) {
33033 return Object.prototype.toString.call(o);
33034 }
33035
33036
33037 function pad(n) {
33038 return n < 10 ? '0' + n.toString(10) : n.toString(10);
33039 }
33040
33041
33042 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
33043 'Oct', 'Nov', 'Dec'];
33044
33045 // 26 Feb 16:19:34
33046 function timestamp() {
33047 var d = new Date();
33048 var time = [pad(d.getHours()),
33049 pad(d.getMinutes()),
33050 pad(d.getSeconds())].join(':');
33051 return [d.getDate(), months[d.getMonth()], time].join(' ');
33052 }
33053
33054
33055 // log is just a thin wrapper to console.log that prepends a timestamp
33056 exports.log = function() {
33057 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
33058 };
33059
33060
33061 /**
33062 * Inherit the prototype methods from one constructor into another.
33063 *
33064 * The Function.prototype.inherits from lang.js rewritten as a standalone
33065 * function (not on Function.prototype). NOTE: If this file is to be loaded
33066 * during bootstrapping this function needs to be rewritten using some native
33067 * functions as prototype setup using normal JavaScript does not work as
33068 * expected during bootstrapping (see mirror.js in r114903).
33069 *
33070 * @param {function} ctor Constructor function which needs to inherit the
33071 * prototype.
33072 * @param {function} superCtor Constructor function to inherit prototype from.
33073 */
33074 exports.inherits = require('inherits');
33075
33076 exports._extend = function(origin, add) {
33077 // Don't do anything if add isn't an object
33078 if (!add || !isObject(add)) return origin;
33079
33080 var keys = Object.keys(add);
33081 var i = keys.length;
33082 while (i--) {
33083 origin[keys[i]] = add[keys[i]];
33084 }
33085 return origin;
33086 };
33087
33088 function hasOwnProperty(obj, prop) {
33089 return Object.prototype.hasOwnProperty.call(obj, prop);
33090 }
33091
33092 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
33093 },{"./support/isBuffer":32,"_process":13,"inherits":31}],34:[function(require,module,exports){
33094 bitcoin = {
33095 base58: require('bs58'),
33096 bitcoin: require('bitcoinjs-lib'),
33097 ecurve: require('ecurve'),
33098 BigInteger: require('bigi'),
33099 Buffer: require('buffer'),
33100 elliptic: require('elliptic'),
33101 bs58check: require('bs58check'),
33102 }
33103
33104 module.exports = bitcoin;
33105
33106 },{"bigi":39,"bitcoinjs-lib":52,"bs58":83,"bs58check":85,"buffer":5,"ecurve":94,"elliptic":97}],35:[function(require,module,exports){
33107 // base-x encoding
33108 // Forked from https://github.com/cryptocoinjs/bs58
33109 // Originally written by Mike Hearn for BitcoinJ
33110 // Copyright (c) 2011 Google Inc
33111 // Ported to JavaScript by Stefan Thomas
33112 // Merged Buffer refactorings from base58-native by Stephen Pair
33113 // Copyright (c) 2013 BitPay Inc
33114
33115 var Buffer = require('safe-buffer').Buffer
33116
33117 module.exports = function base (ALPHABET) {
33118 var ALPHABET_MAP = {}
33119 var BASE = ALPHABET.length
33120 var LEADER = ALPHABET.charAt(0)
33121
33122 // pre-compute lookup table
33123 for (var z = 0; z < ALPHABET.length; z++) {
33124 var x = ALPHABET.charAt(z)
33125
33126 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
33127 ALPHABET_MAP[x] = z
33128 }
33129
33130 function encode (source) {
33131 if (source.length === 0) return ''
33132
33133 var digits = [0]
33134 for (var i = 0; i < source.length; ++i) {
33135 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
33136 carry += digits[j] << 8
33137 digits[j] = carry % BASE
33138 carry = (carry / BASE) | 0
33139 }
33140
33141 while (carry > 0) {
33142 digits.push(carry % BASE)
33143 carry = (carry / BASE) | 0
33144 }
33145 }
33146
33147 var string = ''
33148
33149 // deal with leading zeros
33150 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
33151 // convert digits to a string
33152 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
33153
33154 return string
33155 }
33156
33157 function decodeUnsafe (string) {
33158 if (string.length === 0) return Buffer.allocUnsafe(0)
33159
33160 var bytes = [0]
33161 for (var i = 0; i < string.length; i++) {
33162 var value = ALPHABET_MAP[string[i]]
33163 if (value === undefined) return
33164
33165 for (var j = 0, carry = value; j < bytes.length; ++j) {
33166 carry += bytes[j] * BASE
33167 bytes[j] = carry & 0xff
33168 carry >>= 8
33169 }
33170
33171 while (carry > 0) {
33172 bytes.push(carry & 0xff)
33173 carry >>= 8
33174 }
33175 }
33176
33177 // deal with leading zeros
33178 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
33179 bytes.push(0)
33180 }
33181
33182 return Buffer.from(bytes.reverse())
33183 }
33184
33185 function decode (string) {
33186 var buffer = decodeUnsafe(string)
33187 if (buffer) return buffer
33188
33189 throw new Error('Non-base' + BASE + ' character')
33190 }
33191
33192 return {
33193 encode: encode,
33194 decodeUnsafe: decodeUnsafe,
33195 decode: decode
33196 }
33197 }
33198
33199 },{"safe-buffer":128}],36:[function(require,module,exports){
33200 'use strict'
33201 let ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'
33202
33203 // pre-compute lookup table
33204 let ALPHABET_MAP = {}
33205 for (let z = 0; z < ALPHABET.length; z++) {
33206 let x = ALPHABET.charAt(z)
33207
33208 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
33209 ALPHABET_MAP[x] = z
33210 }
33211
33212 function polymodStep (pre) {
33213 let b = pre >> 25
33214 return ((pre & 0x1FFFFFF) << 5) ^
33215 (-((b >> 0) & 1) & 0x3b6a57b2) ^
33216 (-((b >> 1) & 1) & 0x26508e6d) ^
33217 (-((b >> 2) & 1) & 0x1ea119fa) ^
33218 (-((b >> 3) & 1) & 0x3d4233dd) ^
33219 (-((b >> 4) & 1) & 0x2a1462b3)
33220 }
33221
33222 function prefixChk (prefix) {
33223 let chk = 1
33224 for (let i = 0; i < prefix.length; ++i) {
33225 let c = prefix.charCodeAt(i)
33226 if (c < 33 || c > 126) throw new Error('Invalid prefix (' + prefix + ')')
33227
33228 chk = polymodStep(chk) ^ (c >> 5)
33229 }
33230 chk = polymodStep(chk)
33231
33232 for (let i = 0; i < prefix.length; ++i) {
33233 let v = prefix.charCodeAt(i)
33234 chk = polymodStep(chk) ^ (v & 0x1f)
33235 }
33236 return chk
33237 }
33238
33239 function encode (prefix, words) {
33240 // too long?
33241 if ((prefix.length + 7 + words.length) > 90) throw new TypeError('Exceeds Bech32 maximum length')
33242 prefix = prefix.toLowerCase()
33243
33244 // determine chk mod
33245 let chk = prefixChk(prefix)
33246 let result = prefix + '1'
33247 for (let i = 0; i < words.length; ++i) {
33248 let x = words[i]
33249 if ((x >> 5) !== 0) throw new Error('Non 5-bit word')
33250
33251 chk = polymodStep(chk) ^ x
33252 result += ALPHABET.charAt(x)
33253 }
33254
33255 for (let i = 0; i < 6; ++i) {
33256 chk = polymodStep(chk)
33257 }
33258 chk ^= 1
33259
33260 for (let i = 0; i < 6; ++i) {
33261 let v = (chk >> ((5 - i) * 5)) & 0x1f
33262 result += ALPHABET.charAt(v)
33263 }
33264
33265 return result
33266 }
33267
33268 function decode (str) {
33269 if (str.length < 8) throw new TypeError(str + ' too short')
33270 if (str.length > 90) throw new TypeError(str + ' too long')
33271
33272 // don't allow mixed case
33273 let lowered = str.toLowerCase()
33274 let uppered = str.toUpperCase()
33275 if (str !== lowered && str !== uppered) throw new Error('Mixed-case string ' + str)
33276 str = lowered
33277
33278 let split = str.lastIndexOf('1')
33279 if (split === 0) throw new Error('Missing prefix for ' + str)
33280
33281 let prefix = str.slice(0, split)
33282 let wordChars = str.slice(split + 1)
33283 if (wordChars.length < 6) throw new Error('Data too short')
33284
33285 let chk = prefixChk(prefix)
33286 let words = []
33287 for (let i = 0; i < wordChars.length; ++i) {
33288 let c = wordChars.charAt(i)
33289 let v = ALPHABET_MAP[c]
33290 if (v === undefined) throw new Error('Unknown character ' + c)
33291 chk = polymodStep(chk) ^ v
33292
33293 // not in the checksum?
33294 if (i + 6 >= wordChars.length) continue
33295 words.push(v)
33296 }
33297
33298 if (chk !== 1) throw new Error('Invalid checksum for ' + str)
33299 return { prefix, words }
33300 }
33301
33302 function convert (data, inBits, outBits, pad) {
33303 let value = 0
33304 let bits = 0
33305 let maxV = (1 << outBits) - 1
33306
33307 let result = []
33308 for (let i = 0; i < data.length; ++i) {
33309 value = (value << inBits) | data[i]
33310 bits += inBits
33311
33312 while (bits >= outBits) {
33313 bits -= outBits
33314 result.push((value >> bits) & maxV)
33315 }
33316 }
33317
33318 if (pad) {
33319 if (bits > 0) {
33320 result.push((value << (outBits - bits)) & maxV)
33321 }
33322 } else {
33323 if (bits >= inBits) throw new Error('Excess padding')
33324 if ((value << (outBits - bits)) & maxV) throw new Error('Non-zero padding')
33325 }
33326
33327 return result
33328 }
33329
33330 function toWords (bytes) {
33331 return convert(bytes, 8, 5, true)
33332 }
33333
33334 function fromWords (words) {
33335 return convert(words, 5, 8, false)
33336 }
33337
33338 module.exports = { decode, encode, toWords, fromWords }
33339
33340 },{}],37:[function(require,module,exports){
33341 // (public) Constructor
33342 function BigInteger(a, b, c) {
33343 if (!(this instanceof BigInteger))
33344 return new BigInteger(a, b, c)
33345
33346 if (a != null) {
33347 if ("number" == typeof a) this.fromNumber(a, b, c)
33348 else if (b == null && "string" != typeof a) this.fromString(a, 256)
33349 else this.fromString(a, b)
33350 }
33351 }
33352
33353 var proto = BigInteger.prototype
33354
33355 // duck-typed isBigInteger
33356 proto.__bigi = require('../package.json').version
33357 BigInteger.isBigInteger = function (obj, check_ver) {
33358 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
33359 }
33360
33361 // Bits per digit
33362 var dbits
33363
33364 // am: Compute w_j += (x*this_i), propagate carries,
33365 // c is initial carry, returns final carry.
33366 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
33367 // We need to select the fastest one that works in this environment.
33368
33369 // am1: use a single mult and divide to get the high bits,
33370 // max digit bits should be 26 because
33371 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
33372 function am1(i, x, w, j, c, n) {
33373 while (--n >= 0) {
33374 var v = x * this[i++] + w[j] + c
33375 c = Math.floor(v / 0x4000000)
33376 w[j++] = v & 0x3ffffff
33377 }
33378 return c
33379 }
33380 // am2 avoids a big mult-and-extract completely.
33381 // Max digit bits should be <= 30 because we do bitwise ops
33382 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
33383 function am2(i, x, w, j, c, n) {
33384 var xl = x & 0x7fff,
33385 xh = x >> 15
33386 while (--n >= 0) {
33387 var l = this[i] & 0x7fff
33388 var h = this[i++] >> 15
33389 var m = xh * l + h * xl
33390 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
33391 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
33392 w[j++] = l & 0x3fffffff
33393 }
33394 return c
33395 }
33396 // Alternately, set max digit bits to 28 since some
33397 // browsers slow down when dealing with 32-bit numbers.
33398 function am3(i, x, w, j, c, n) {
33399 var xl = x & 0x3fff,
33400 xh = x >> 14
33401 while (--n >= 0) {
33402 var l = this[i] & 0x3fff
33403 var h = this[i++] >> 14
33404 var m = xh * l + h * xl
33405 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
33406 c = (l >> 28) + (m >> 14) + xh * h
33407 w[j++] = l & 0xfffffff
33408 }
33409 return c
33410 }
33411
33412 // wtf?
33413 BigInteger.prototype.am = am1
33414 dbits = 26
33415
33416 BigInteger.prototype.DB = dbits
33417 BigInteger.prototype.DM = ((1 << dbits) - 1)
33418 var DV = BigInteger.prototype.DV = (1 << dbits)
33419
33420 var BI_FP = 52
33421 BigInteger.prototype.FV = Math.pow(2, BI_FP)
33422 BigInteger.prototype.F1 = BI_FP - dbits
33423 BigInteger.prototype.F2 = 2 * dbits - BI_FP
33424
33425 // Digit conversions
33426 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
33427 var BI_RC = new Array()
33428 var rr, vv
33429 rr = "0".charCodeAt(0)
33430 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
33431 rr = "a".charCodeAt(0)
33432 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
33433 rr = "A".charCodeAt(0)
33434 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
33435
33436 function int2char(n) {
33437 return BI_RM.charAt(n)
33438 }
33439
33440 function intAt(s, i) {
33441 var c = BI_RC[s.charCodeAt(i)]
33442 return (c == null) ? -1 : c
33443 }
33444
33445 // (protected) copy this to r
33446 function bnpCopyTo(r) {
33447 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
33448 r.t = this.t
33449 r.s = this.s
33450 }
33451
33452 // (protected) set from integer value x, -DV <= x < DV
33453 function bnpFromInt(x) {
33454 this.t = 1
33455 this.s = (x < 0) ? -1 : 0
33456 if (x > 0) this[0] = x
33457 else if (x < -1) this[0] = x + DV
33458 else this.t = 0
33459 }
33460
33461 // return bigint initialized to value
33462 function nbv(i) {
33463 var r = new BigInteger()
33464 r.fromInt(i)
33465 return r
33466 }
33467
33468 // (protected) set from string and radix
33469 function bnpFromString(s, b) {
33470 var self = this
33471
33472 var k
33473 if (b == 16) k = 4
33474 else if (b == 8) k = 3
33475 else if (b == 256) k = 8; // byte array
33476 else if (b == 2) k = 1
33477 else if (b == 32) k = 5
33478 else if (b == 4) k = 2
33479 else {
33480 self.fromRadix(s, b)
33481 return
33482 }
33483 self.t = 0
33484 self.s = 0
33485 var i = s.length,
33486 mi = false,
33487 sh = 0
33488 while (--i >= 0) {
33489 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
33490 if (x < 0) {
33491 if (s.charAt(i) == "-") mi = true
33492 continue
33493 }
33494 mi = false
33495 if (sh == 0)
33496 self[self.t++] = x
33497 else if (sh + k > self.DB) {
33498 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
33499 self[self.t++] = (x >> (self.DB - sh))
33500 } else
33501 self[self.t - 1] |= x << sh
33502 sh += k
33503 if (sh >= self.DB) sh -= self.DB
33504 }
33505 if (k == 8 && (s[0] & 0x80) != 0) {
33506 self.s = -1
33507 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
33508 }
33509 self.clamp()
33510 if (mi) BigInteger.ZERO.subTo(self, self)
33511 }
33512
33513 // (protected) clamp off excess high words
33514 function bnpClamp() {
33515 var c = this.s & this.DM
33516 while (this.t > 0 && this[this.t - 1] == c)--this.t
33517 }
33518
33519 // (public) return string representation in given radix
33520 function bnToString(b) {
33521 var self = this
33522 if (self.s < 0) return "-" + self.negate()
33523 .toString(b)
33524 var k
33525 if (b == 16) k = 4
33526 else if (b == 8) k = 3
33527 else if (b == 2) k = 1
33528 else if (b == 32) k = 5
33529 else if (b == 4) k = 2
33530 else return self.toRadix(b)
33531 var km = (1 << k) - 1,
33532 d, m = false,
33533 r = "",
33534 i = self.t
33535 var p = self.DB - (i * self.DB) % k
33536 if (i-- > 0) {
33537 if (p < self.DB && (d = self[i] >> p) > 0) {
33538 m = true
33539 r = int2char(d)
33540 }
33541 while (i >= 0) {
33542 if (p < k) {
33543 d = (self[i] & ((1 << p) - 1)) << (k - p)
33544 d |= self[--i] >> (p += self.DB - k)
33545 } else {
33546 d = (self[i] >> (p -= k)) & km
33547 if (p <= 0) {
33548 p += self.DB
33549 --i
33550 }
33551 }
33552 if (d > 0) m = true
33553 if (m) r += int2char(d)
33554 }
33555 }
33556 return m ? r : "0"
33557 }
33558
33559 // (public) -this
33560 function bnNegate() {
33561 var r = new BigInteger()
33562 BigInteger.ZERO.subTo(this, r)
33563 return r
33564 }
33565
33566 // (public) |this|
33567 function bnAbs() {
33568 return (this.s < 0) ? this.negate() : this
33569 }
33570
33571 // (public) return + if this > a, - if this < a, 0 if equal
33572 function bnCompareTo(a) {
33573 var r = this.s - a.s
33574 if (r != 0) return r
33575 var i = this.t
33576 r = i - a.t
33577 if (r != 0) return (this.s < 0) ? -r : r
33578 while (--i >= 0)
33579 if ((r = this[i] - a[i]) != 0) return r
33580 return 0
33581 }
33582
33583 // returns bit length of the integer x
33584 function nbits(x) {
33585 var r = 1,
33586 t
33587 if ((t = x >>> 16) != 0) {
33588 x = t
33589 r += 16
33590 }
33591 if ((t = x >> 8) != 0) {
33592 x = t
33593 r += 8
33594 }
33595 if ((t = x >> 4) != 0) {
33596 x = t
33597 r += 4
33598 }
33599 if ((t = x >> 2) != 0) {
33600 x = t
33601 r += 2
33602 }
33603 if ((t = x >> 1) != 0) {
33604 x = t
33605 r += 1
33606 }
33607 return r
33608 }
33609
33610 // (public) return the number of bits in "this"
33611 function bnBitLength() {
33612 if (this.t <= 0) return 0
33613 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
33614 }
33615
33616 // (public) return the number of bytes in "this"
33617 function bnByteLength() {
33618 return this.bitLength() >> 3
33619 }
33620
33621 // (protected) r = this << n*DB
33622 function bnpDLShiftTo(n, r) {
33623 var i
33624 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
33625 for (i = n - 1; i >= 0; --i) r[i] = 0
33626 r.t = this.t + n
33627 r.s = this.s
33628 }
33629
33630 // (protected) r = this >> n*DB
33631 function bnpDRShiftTo(n, r) {
33632 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
33633 r.t = Math.max(this.t - n, 0)
33634 r.s = this.s
33635 }
33636
33637 // (protected) r = this << n
33638 function bnpLShiftTo(n, r) {
33639 var self = this
33640 var bs = n % self.DB
33641 var cbs = self.DB - bs
33642 var bm = (1 << cbs) - 1
33643 var ds = Math.floor(n / self.DB),
33644 c = (self.s << bs) & self.DM,
33645 i
33646 for (i = self.t - 1; i >= 0; --i) {
33647 r[i + ds + 1] = (self[i] >> cbs) | c
33648 c = (self[i] & bm) << bs
33649 }
33650 for (i = ds - 1; i >= 0; --i) r[i] = 0
33651 r[ds] = c
33652 r.t = self.t + ds + 1
33653 r.s = self.s
33654 r.clamp()
33655 }
33656
33657 // (protected) r = this >> n
33658 function bnpRShiftTo(n, r) {
33659 var self = this
33660 r.s = self.s
33661 var ds = Math.floor(n / self.DB)
33662 if (ds >= self.t) {
33663 r.t = 0
33664 return
33665 }
33666 var bs = n % self.DB
33667 var cbs = self.DB - bs
33668 var bm = (1 << bs) - 1
33669 r[0] = self[ds] >> bs
33670 for (var i = ds + 1; i < self.t; ++i) {
33671 r[i - ds - 1] |= (self[i] & bm) << cbs
33672 r[i - ds] = self[i] >> bs
33673 }
33674 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
33675 r.t = self.t - ds
33676 r.clamp()
33677 }
33678
33679 // (protected) r = this - a
33680 function bnpSubTo(a, r) {
33681 var self = this
33682 var i = 0,
33683 c = 0,
33684 m = Math.min(a.t, self.t)
33685 while (i < m) {
33686 c += self[i] - a[i]
33687 r[i++] = c & self.DM
33688 c >>= self.DB
33689 }
33690 if (a.t < self.t) {
33691 c -= a.s
33692 while (i < self.t) {
33693 c += self[i]
33694 r[i++] = c & self.DM
33695 c >>= self.DB
33696 }
33697 c += self.s
33698 } else {
33699 c += self.s
33700 while (i < a.t) {
33701 c -= a[i]
33702 r[i++] = c & self.DM
33703 c >>= self.DB
33704 }
33705 c -= a.s
33706 }
33707 r.s = (c < 0) ? -1 : 0
33708 if (c < -1) r[i++] = self.DV + c
33709 else if (c > 0) r[i++] = c
33710 r.t = i
33711 r.clamp()
33712 }
33713
33714 // (protected) r = this * a, r != this,a (HAC 14.12)
33715 // "this" should be the larger one if appropriate.
33716 function bnpMultiplyTo(a, r) {
33717 var x = this.abs(),
33718 y = a.abs()
33719 var i = x.t
33720 r.t = i + y.t
33721 while (--i >= 0) r[i] = 0
33722 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
33723 r.s = 0
33724 r.clamp()
33725 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
33726 }
33727
33728 // (protected) r = this^2, r != this (HAC 14.16)
33729 function bnpSquareTo(r) {
33730 var x = this.abs()
33731 var i = r.t = 2 * x.t
33732 while (--i >= 0) r[i] = 0
33733 for (i = 0; i < x.t - 1; ++i) {
33734 var c = x.am(i, x[i], r, 2 * i, 0, 1)
33735 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
33736 r[i + x.t] -= x.DV
33737 r[i + x.t + 1] = 1
33738 }
33739 }
33740 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
33741 r.s = 0
33742 r.clamp()
33743 }
33744
33745 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
33746 // r != q, this != m. q or r may be null.
33747 function bnpDivRemTo(m, q, r) {
33748 var self = this
33749 var pm = m.abs()
33750 if (pm.t <= 0) return
33751 var pt = self.abs()
33752 if (pt.t < pm.t) {
33753 if (q != null) q.fromInt(0)
33754 if (r != null) self.copyTo(r)
33755 return
33756 }
33757 if (r == null) r = new BigInteger()
33758 var y = new BigInteger(),
33759 ts = self.s,
33760 ms = m.s
33761 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
33762 if (nsh > 0) {
33763 pm.lShiftTo(nsh, y)
33764 pt.lShiftTo(nsh, r)
33765 } else {
33766 pm.copyTo(y)
33767 pt.copyTo(r)
33768 }
33769 var ys = y.t
33770 var y0 = y[ys - 1]
33771 if (y0 == 0) return
33772 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
33773 var d1 = self.FV / yt,
33774 d2 = (1 << self.F1) / yt,
33775 e = 1 << self.F2
33776 var i = r.t,
33777 j = i - ys,
33778 t = (q == null) ? new BigInteger() : q
33779 y.dlShiftTo(j, t)
33780 if (r.compareTo(t) >= 0) {
33781 r[r.t++] = 1
33782 r.subTo(t, r)
33783 }
33784 BigInteger.ONE.dlShiftTo(ys, t)
33785 t.subTo(y, y); // "negative" y so we can replace sub with am later
33786 while (y.t < ys) y[y.t++] = 0
33787 while (--j >= 0) {
33788 // Estimate quotient digit
33789 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
33790 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
33791 y.dlShiftTo(j, t)
33792 r.subTo(t, r)
33793 while (r[i] < --qd) r.subTo(t, r)
33794 }
33795 }
33796 if (q != null) {
33797 r.drShiftTo(ys, q)
33798 if (ts != ms) BigInteger.ZERO.subTo(q, q)
33799 }
33800 r.t = ys
33801 r.clamp()
33802 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
33803 if (ts < 0) BigInteger.ZERO.subTo(r, r)
33804 }
33805
33806 // (public) this mod a
33807 function bnMod(a) {
33808 var r = new BigInteger()
33809 this.abs()
33810 .divRemTo(a, null, r)
33811 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
33812 return r
33813 }
33814
33815 // Modular reduction using "classic" algorithm
33816 function Classic(m) {
33817 this.m = m
33818 }
33819
33820 function cConvert(x) {
33821 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
33822 else return x
33823 }
33824
33825 function cRevert(x) {
33826 return x
33827 }
33828
33829 function cReduce(x) {
33830 x.divRemTo(this.m, null, x)
33831 }
33832
33833 function cMulTo(x, y, r) {
33834 x.multiplyTo(y, r)
33835 this.reduce(r)
33836 }
33837
33838 function cSqrTo(x, r) {
33839 x.squareTo(r)
33840 this.reduce(r)
33841 }
33842
33843 Classic.prototype.convert = cConvert
33844 Classic.prototype.revert = cRevert
33845 Classic.prototype.reduce = cReduce
33846 Classic.prototype.mulTo = cMulTo
33847 Classic.prototype.sqrTo = cSqrTo
33848
33849 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
33850 // justification:
33851 // xy == 1 (mod m)
33852 // xy = 1+km
33853 // xy(2-xy) = (1+km)(1-km)
33854 // x[y(2-xy)] = 1-k^2m^2
33855 // x[y(2-xy)] == 1 (mod m^2)
33856 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
33857 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
33858 // JS multiply "overflows" differently from C/C++, so care is needed here.
33859 function bnpInvDigit() {
33860 if (this.t < 1) return 0
33861 var x = this[0]
33862 if ((x & 1) == 0) return 0
33863 var y = x & 3; // y == 1/x mod 2^2
33864 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
33865 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
33866 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
33867 // last step - calculate inverse mod DV directly
33868 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
33869 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
33870 // we really want the negative inverse, and -DV < y < DV
33871 return (y > 0) ? this.DV - y : -y
33872 }
33873
33874 // Montgomery reduction
33875 function Montgomery(m) {
33876 this.m = m
33877 this.mp = m.invDigit()
33878 this.mpl = this.mp & 0x7fff
33879 this.mph = this.mp >> 15
33880 this.um = (1 << (m.DB - 15)) - 1
33881 this.mt2 = 2 * m.t
33882 }
33883
33884 // xR mod m
33885 function montConvert(x) {
33886 var r = new BigInteger()
33887 x.abs()
33888 .dlShiftTo(this.m.t, r)
33889 r.divRemTo(this.m, null, r)
33890 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
33891 return r
33892 }
33893
33894 // x/R mod m
33895 function montRevert(x) {
33896 var r = new BigInteger()
33897 x.copyTo(r)
33898 this.reduce(r)
33899 return r
33900 }
33901
33902 // x = x/R mod m (HAC 14.32)
33903 function montReduce(x) {
33904 while (x.t <= this.mt2) // pad x so am has enough room later
33905 x[x.t++] = 0
33906 for (var i = 0; i < this.m.t; ++i) {
33907 // faster way of calculating u0 = x[i]*mp mod DV
33908 var j = x[i] & 0x7fff
33909 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
33910 // use am to combine the multiply-shift-add into one call
33911 j = i + this.m.t
33912 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
33913 // propagate carry
33914 while (x[j] >= x.DV) {
33915 x[j] -= x.DV
33916 x[++j]++
33917 }
33918 }
33919 x.clamp()
33920 x.drShiftTo(this.m.t, x)
33921 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
33922 }
33923
33924 // r = "x^2/R mod m"; x != r
33925 function montSqrTo(x, r) {
33926 x.squareTo(r)
33927 this.reduce(r)
33928 }
33929
33930 // r = "xy/R mod m"; x,y != r
33931 function montMulTo(x, y, r) {
33932 x.multiplyTo(y, r)
33933 this.reduce(r)
33934 }
33935
33936 Montgomery.prototype.convert = montConvert
33937 Montgomery.prototype.revert = montRevert
33938 Montgomery.prototype.reduce = montReduce
33939 Montgomery.prototype.mulTo = montMulTo
33940 Montgomery.prototype.sqrTo = montSqrTo
33941
33942 // (protected) true iff this is even
33943 function bnpIsEven() {
33944 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
33945 }
33946
33947 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
33948 function bnpExp(e, z) {
33949 if (e > 0xffffffff || e < 1) return BigInteger.ONE
33950 var r = new BigInteger(),
33951 r2 = new BigInteger(),
33952 g = z.convert(this),
33953 i = nbits(e) - 1
33954 g.copyTo(r)
33955 while (--i >= 0) {
33956 z.sqrTo(r, r2)
33957 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
33958 else {
33959 var t = r
33960 r = r2
33961 r2 = t
33962 }
33963 }
33964 return z.revert(r)
33965 }
33966
33967 // (public) this^e % m, 0 <= e < 2^32
33968 function bnModPowInt(e, m) {
33969 var z
33970 if (e < 256 || m.isEven()) z = new Classic(m)
33971 else z = new Montgomery(m)
33972 return this.exp(e, z)
33973 }
33974
33975 // protected
33976 proto.copyTo = bnpCopyTo
33977 proto.fromInt = bnpFromInt
33978 proto.fromString = bnpFromString
33979 proto.clamp = bnpClamp
33980 proto.dlShiftTo = bnpDLShiftTo
33981 proto.drShiftTo = bnpDRShiftTo
33982 proto.lShiftTo = bnpLShiftTo
33983 proto.rShiftTo = bnpRShiftTo
33984 proto.subTo = bnpSubTo
33985 proto.multiplyTo = bnpMultiplyTo
33986 proto.squareTo = bnpSquareTo
33987 proto.divRemTo = bnpDivRemTo
33988 proto.invDigit = bnpInvDigit
33989 proto.isEven = bnpIsEven
33990 proto.exp = bnpExp
33991
33992 // public
33993 proto.toString = bnToString
33994 proto.negate = bnNegate
33995 proto.abs = bnAbs
33996 proto.compareTo = bnCompareTo
33997 proto.bitLength = bnBitLength
33998 proto.byteLength = bnByteLength
33999 proto.mod = bnMod
34000 proto.modPowInt = bnModPowInt
34001
34002 // (public)
34003 function bnClone() {
34004 var r = new BigInteger()
34005 this.copyTo(r)
34006 return r
34007 }
34008
34009 // (public) return value as integer
34010 function bnIntValue() {
34011 if (this.s < 0) {
34012 if (this.t == 1) return this[0] - this.DV
34013 else if (this.t == 0) return -1
34014 } else if (this.t == 1) return this[0]
34015 else if (this.t == 0) return 0
34016 // assumes 16 < DB < 32
34017 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
34018 }
34019
34020 // (public) return value as byte
34021 function bnByteValue() {
34022 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
34023 }
34024
34025 // (public) return value as short (assumes DB>=16)
34026 function bnShortValue() {
34027 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
34028 }
34029
34030 // (protected) return x s.t. r^x < DV
34031 function bnpChunkSize(r) {
34032 return Math.floor(Math.LN2 * this.DB / Math.log(r))
34033 }
34034
34035 // (public) 0 if this == 0, 1 if this > 0
34036 function bnSigNum() {
34037 if (this.s < 0) return -1
34038 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
34039 else return 1
34040 }
34041
34042 // (protected) convert to radix string
34043 function bnpToRadix(b) {
34044 if (b == null) b = 10
34045 if (this.signum() == 0 || b < 2 || b > 36) return "0"
34046 var cs = this.chunkSize(b)
34047 var a = Math.pow(b, cs)
34048 var d = nbv(a),
34049 y = new BigInteger(),
34050 z = new BigInteger(),
34051 r = ""
34052 this.divRemTo(d, y, z)
34053 while (y.signum() > 0) {
34054 r = (a + z.intValue())
34055 .toString(b)
34056 .substr(1) + r
34057 y.divRemTo(d, y, z)
34058 }
34059 return z.intValue()
34060 .toString(b) + r
34061 }
34062
34063 // (protected) convert from radix string
34064 function bnpFromRadix(s, b) {
34065 var self = this
34066 self.fromInt(0)
34067 if (b == null) b = 10
34068 var cs = self.chunkSize(b)
34069 var d = Math.pow(b, cs),
34070 mi = false,
34071 j = 0,
34072 w = 0
34073 for (var i = 0; i < s.length; ++i) {
34074 var x = intAt(s, i)
34075 if (x < 0) {
34076 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
34077 continue
34078 }
34079 w = b * w + x
34080 if (++j >= cs) {
34081 self.dMultiply(d)
34082 self.dAddOffset(w, 0)
34083 j = 0
34084 w = 0
34085 }
34086 }
34087 if (j > 0) {
34088 self.dMultiply(Math.pow(b, j))
34089 self.dAddOffset(w, 0)
34090 }
34091 if (mi) BigInteger.ZERO.subTo(self, self)
34092 }
34093
34094 // (protected) alternate constructor
34095 function bnpFromNumber(a, b, c) {
34096 var self = this
34097 if ("number" == typeof b) {
34098 // new BigInteger(int,int,RNG)
34099 if (a < 2) self.fromInt(1)
34100 else {
34101 self.fromNumber(a, c)
34102 if (!self.testBit(a - 1)) // force MSB set
34103 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
34104 if (self.isEven()) self.dAddOffset(1, 0); // force odd
34105 while (!self.isProbablePrime(b)) {
34106 self.dAddOffset(2, 0)
34107 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
34108 }
34109 }
34110 } else {
34111 // new BigInteger(int,RNG)
34112 var x = new Array(),
34113 t = a & 7
34114 x.length = (a >> 3) + 1
34115 b.nextBytes(x)
34116 if (t > 0) x[0] &= ((1 << t) - 1)
34117 else x[0] = 0
34118 self.fromString(x, 256)
34119 }
34120 }
34121
34122 // (public) convert to bigendian byte array
34123 function bnToByteArray() {
34124 var self = this
34125 var i = self.t,
34126 r = new Array()
34127 r[0] = self.s
34128 var p = self.DB - (i * self.DB) % 8,
34129 d, k = 0
34130 if (i-- > 0) {
34131 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
34132 r[k++] = d | (self.s << (self.DB - p))
34133 while (i >= 0) {
34134 if (p < 8) {
34135 d = (self[i] & ((1 << p) - 1)) << (8 - p)
34136 d |= self[--i] >> (p += self.DB - 8)
34137 } else {
34138 d = (self[i] >> (p -= 8)) & 0xff
34139 if (p <= 0) {
34140 p += self.DB
34141 --i
34142 }
34143 }
34144 if ((d & 0x80) != 0) d |= -256
34145 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
34146 if (k > 0 || d != self.s) r[k++] = d
34147 }
34148 }
34149 return r
34150 }
34151
34152 function bnEquals(a) {
34153 return (this.compareTo(a) == 0)
34154 }
34155
34156 function bnMin(a) {
34157 return (this.compareTo(a) < 0) ? this : a
34158 }
34159
34160 function bnMax(a) {
34161 return (this.compareTo(a) > 0) ? this : a
34162 }
34163
34164 // (protected) r = this op a (bitwise)
34165 function bnpBitwiseTo(a, op, r) {
34166 var self = this
34167 var i, f, m = Math.min(a.t, self.t)
34168 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
34169 if (a.t < self.t) {
34170 f = a.s & self.DM
34171 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
34172 r.t = self.t
34173 } else {
34174 f = self.s & self.DM
34175 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
34176 r.t = a.t
34177 }
34178 r.s = op(self.s, a.s)
34179 r.clamp()
34180 }
34181
34182 // (public) this & a
34183 function op_and(x, y) {
34184 return x & y
34185 }
34186
34187 function bnAnd(a) {
34188 var r = new BigInteger()
34189 this.bitwiseTo(a, op_and, r)
34190 return r
34191 }
34192
34193 // (public) this | a
34194 function op_or(x, y) {
34195 return x | y
34196 }
34197
34198 function bnOr(a) {
34199 var r = new BigInteger()
34200 this.bitwiseTo(a, op_or, r)
34201 return r
34202 }
34203
34204 // (public) this ^ a
34205 function op_xor(x, y) {
34206 return x ^ y
34207 }
34208
34209 function bnXor(a) {
34210 var r = new BigInteger()
34211 this.bitwiseTo(a, op_xor, r)
34212 return r
34213 }
34214
34215 // (public) this & ~a
34216 function op_andnot(x, y) {
34217 return x & ~y
34218 }
34219
34220 function bnAndNot(a) {
34221 var r = new BigInteger()
34222 this.bitwiseTo(a, op_andnot, r)
34223 return r
34224 }
34225
34226 // (public) ~this
34227 function bnNot() {
34228 var r = new BigInteger()
34229 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
34230 r.t = this.t
34231 r.s = ~this.s
34232 return r
34233 }
34234
34235 // (public) this << n
34236 function bnShiftLeft(n) {
34237 var r = new BigInteger()
34238 if (n < 0) this.rShiftTo(-n, r)
34239 else this.lShiftTo(n, r)
34240 return r
34241 }
34242
34243 // (public) this >> n
34244 function bnShiftRight(n) {
34245 var r = new BigInteger()
34246 if (n < 0) this.lShiftTo(-n, r)
34247 else this.rShiftTo(n, r)
34248 return r
34249 }
34250
34251 // return index of lowest 1-bit in x, x < 2^31
34252 function lbit(x) {
34253 if (x == 0) return -1
34254 var r = 0
34255 if ((x & 0xffff) == 0) {
34256 x >>= 16
34257 r += 16
34258 }
34259 if ((x & 0xff) == 0) {
34260 x >>= 8
34261 r += 8
34262 }
34263 if ((x & 0xf) == 0) {
34264 x >>= 4
34265 r += 4
34266 }
34267 if ((x & 3) == 0) {
34268 x >>= 2
34269 r += 2
34270 }
34271 if ((x & 1) == 0)++r
34272 return r
34273 }
34274
34275 // (public) returns index of lowest 1-bit (or -1 if none)
34276 function bnGetLowestSetBit() {
34277 for (var i = 0; i < this.t; ++i)
34278 if (this[i] != 0) return i * this.DB + lbit(this[i])
34279 if (this.s < 0) return this.t * this.DB
34280 return -1
34281 }
34282
34283 // return number of 1 bits in x
34284 function cbit(x) {
34285 var r = 0
34286 while (x != 0) {
34287 x &= x - 1
34288 ++r
34289 }
34290 return r
34291 }
34292
34293 // (public) return number of set bits
34294 function bnBitCount() {
34295 var r = 0,
34296 x = this.s & this.DM
34297 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
34298 return r
34299 }
34300
34301 // (public) true iff nth bit is set
34302 function bnTestBit(n) {
34303 var j = Math.floor(n / this.DB)
34304 if (j >= this.t) return (this.s != 0)
34305 return ((this[j] & (1 << (n % this.DB))) != 0)
34306 }
34307
34308 // (protected) this op (1<<n)
34309 function bnpChangeBit(n, op) {
34310 var r = BigInteger.ONE.shiftLeft(n)
34311 this.bitwiseTo(r, op, r)
34312 return r
34313 }
34314
34315 // (public) this | (1<<n)
34316 function bnSetBit(n) {
34317 return this.changeBit(n, op_or)
34318 }
34319
34320 // (public) this & ~(1<<n)
34321 function bnClearBit(n) {
34322 return this.changeBit(n, op_andnot)
34323 }
34324
34325 // (public) this ^ (1<<n)
34326 function bnFlipBit(n) {
34327 return this.changeBit(n, op_xor)
34328 }
34329
34330 // (protected) r = this + a
34331 function bnpAddTo(a, r) {
34332 var self = this
34333
34334 var i = 0,
34335 c = 0,
34336 m = Math.min(a.t, self.t)
34337 while (i < m) {
34338 c += self[i] + a[i]
34339 r[i++] = c & self.DM
34340 c >>= self.DB
34341 }
34342 if (a.t < self.t) {
34343 c += a.s
34344 while (i < self.t) {
34345 c += self[i]
34346 r[i++] = c & self.DM
34347 c >>= self.DB
34348 }
34349 c += self.s
34350 } else {
34351 c += self.s
34352 while (i < a.t) {
34353 c += a[i]
34354 r[i++] = c & self.DM
34355 c >>= self.DB
34356 }
34357 c += a.s
34358 }
34359 r.s = (c < 0) ? -1 : 0
34360 if (c > 0) r[i++] = c
34361 else if (c < -1) r[i++] = self.DV + c
34362 r.t = i
34363 r.clamp()
34364 }
34365
34366 // (public) this + a
34367 function bnAdd(a) {
34368 var r = new BigInteger()
34369 this.addTo(a, r)
34370 return r
34371 }
34372
34373 // (public) this - a
34374 function bnSubtract(a) {
34375 var r = new BigInteger()
34376 this.subTo(a, r)
34377 return r
34378 }
34379
34380 // (public) this * a
34381 function bnMultiply(a) {
34382 var r = new BigInteger()
34383 this.multiplyTo(a, r)
34384 return r
34385 }
34386
34387 // (public) this^2
34388 function bnSquare() {
34389 var r = new BigInteger()
34390 this.squareTo(r)
34391 return r
34392 }
34393
34394 // (public) this / a
34395 function bnDivide(a) {
34396 var r = new BigInteger()
34397 this.divRemTo(a, r, null)
34398 return r
34399 }
34400
34401 // (public) this % a
34402 function bnRemainder(a) {
34403 var r = new BigInteger()
34404 this.divRemTo(a, null, r)
34405 return r
34406 }
34407
34408 // (public) [this/a,this%a]
34409 function bnDivideAndRemainder(a) {
34410 var q = new BigInteger(),
34411 r = new BigInteger()
34412 this.divRemTo(a, q, r)
34413 return new Array(q, r)
34414 }
34415
34416 // (protected) this *= n, this >= 0, 1 < n < DV
34417 function bnpDMultiply(n) {
34418 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
34419 ++this.t
34420 this.clamp()
34421 }
34422
34423 // (protected) this += n << w words, this >= 0
34424 function bnpDAddOffset(n, w) {
34425 if (n == 0) return
34426 while (this.t <= w) this[this.t++] = 0
34427 this[w] += n
34428 while (this[w] >= this.DV) {
34429 this[w] -= this.DV
34430 if (++w >= this.t) this[this.t++] = 0
34431 ++this[w]
34432 }
34433 }
34434
34435 // A "null" reducer
34436 function NullExp() {}
34437
34438 function nNop(x) {
34439 return x
34440 }
34441
34442 function nMulTo(x, y, r) {
34443 x.multiplyTo(y, r)
34444 }
34445
34446 function nSqrTo(x, r) {
34447 x.squareTo(r)
34448 }
34449
34450 NullExp.prototype.convert = nNop
34451 NullExp.prototype.revert = nNop
34452 NullExp.prototype.mulTo = nMulTo
34453 NullExp.prototype.sqrTo = nSqrTo
34454
34455 // (public) this^e
34456 function bnPow(e) {
34457 return this.exp(e, new NullExp())
34458 }
34459
34460 // (protected) r = lower n words of "this * a", a.t <= n
34461 // "this" should be the larger one if appropriate.
34462 function bnpMultiplyLowerTo(a, n, r) {
34463 var i = Math.min(this.t + a.t, n)
34464 r.s = 0; // assumes a,this >= 0
34465 r.t = i
34466 while (i > 0) r[--i] = 0
34467 var j
34468 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
34469 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
34470 r.clamp()
34471 }
34472
34473 // (protected) r = "this * a" without lower n words, n > 0
34474 // "this" should be the larger one if appropriate.
34475 function bnpMultiplyUpperTo(a, n, r) {
34476 --n
34477 var i = r.t = this.t + a.t - n
34478 r.s = 0; // assumes a,this >= 0
34479 while (--i >= 0) r[i] = 0
34480 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
34481 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
34482 r.clamp()
34483 r.drShiftTo(1, r)
34484 }
34485
34486 // Barrett modular reduction
34487 function Barrett(m) {
34488 // setup Barrett
34489 this.r2 = new BigInteger()
34490 this.q3 = new BigInteger()
34491 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
34492 this.mu = this.r2.divide(m)
34493 this.m = m
34494 }
34495
34496 function barrettConvert(x) {
34497 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
34498 else if (x.compareTo(this.m) < 0) return x
34499 else {
34500 var r = new BigInteger()
34501 x.copyTo(r)
34502 this.reduce(r)
34503 return r
34504 }
34505 }
34506
34507 function barrettRevert(x) {
34508 return x
34509 }
34510
34511 // x = x mod m (HAC 14.42)
34512 function barrettReduce(x) {
34513 var self = this
34514 x.drShiftTo(self.m.t - 1, self.r2)
34515 if (x.t > self.m.t + 1) {
34516 x.t = self.m.t + 1
34517 x.clamp()
34518 }
34519 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
34520 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
34521 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
34522 x.subTo(self.r2, x)
34523 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
34524 }
34525
34526 // r = x^2 mod m; x != r
34527 function barrettSqrTo(x, r) {
34528 x.squareTo(r)
34529 this.reduce(r)
34530 }
34531
34532 // r = x*y mod m; x,y != r
34533 function barrettMulTo(x, y, r) {
34534 x.multiplyTo(y, r)
34535 this.reduce(r)
34536 }
34537
34538 Barrett.prototype.convert = barrettConvert
34539 Barrett.prototype.revert = barrettRevert
34540 Barrett.prototype.reduce = barrettReduce
34541 Barrett.prototype.mulTo = barrettMulTo
34542 Barrett.prototype.sqrTo = barrettSqrTo
34543
34544 // (public) this^e % m (HAC 14.85)
34545 function bnModPow(e, m) {
34546 var i = e.bitLength(),
34547 k, r = nbv(1),
34548 z
34549 if (i <= 0) return r
34550 else if (i < 18) k = 1
34551 else if (i < 48) k = 3
34552 else if (i < 144) k = 4
34553 else if (i < 768) k = 5
34554 else k = 6
34555 if (i < 8)
34556 z = new Classic(m)
34557 else if (m.isEven())
34558 z = new Barrett(m)
34559 else
34560 z = new Montgomery(m)
34561
34562 // precomputation
34563 var g = new Array(),
34564 n = 3,
34565 k1 = k - 1,
34566 km = (1 << k) - 1
34567 g[1] = z.convert(this)
34568 if (k > 1) {
34569 var g2 = new BigInteger()
34570 z.sqrTo(g[1], g2)
34571 while (n <= km) {
34572 g[n] = new BigInteger()
34573 z.mulTo(g2, g[n - 2], g[n])
34574 n += 2
34575 }
34576 }
34577
34578 var j = e.t - 1,
34579 w, is1 = true,
34580 r2 = new BigInteger(),
34581 t
34582 i = nbits(e[j]) - 1
34583 while (j >= 0) {
34584 if (i >= k1) w = (e[j] >> (i - k1)) & km
34585 else {
34586 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
34587 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
34588 }
34589
34590 n = k
34591 while ((w & 1) == 0) {
34592 w >>= 1
34593 --n
34594 }
34595 if ((i -= n) < 0) {
34596 i += this.DB
34597 --j
34598 }
34599 if (is1) { // ret == 1, don't bother squaring or multiplying it
34600 g[w].copyTo(r)
34601 is1 = false
34602 } else {
34603 while (n > 1) {
34604 z.sqrTo(r, r2)
34605 z.sqrTo(r2, r)
34606 n -= 2
34607 }
34608 if (n > 0) z.sqrTo(r, r2)
34609 else {
34610 t = r
34611 r = r2
34612 r2 = t
34613 }
34614 z.mulTo(r2, g[w], r)
34615 }
34616
34617 while (j >= 0 && (e[j] & (1 << i)) == 0) {
34618 z.sqrTo(r, r2)
34619 t = r
34620 r = r2
34621 r2 = t
34622 if (--i < 0) {
34623 i = this.DB - 1
34624 --j
34625 }
34626 }
34627 }
34628 return z.revert(r)
34629 }
34630
34631 // (public) gcd(this,a) (HAC 14.54)
34632 function bnGCD(a) {
34633 var x = (this.s < 0) ? this.negate() : this.clone()
34634 var y = (a.s < 0) ? a.negate() : a.clone()
34635 if (x.compareTo(y) < 0) {
34636 var t = x
34637 x = y
34638 y = t
34639 }
34640 var i = x.getLowestSetBit(),
34641 g = y.getLowestSetBit()
34642 if (g < 0) return x
34643 if (i < g) g = i
34644 if (g > 0) {
34645 x.rShiftTo(g, x)
34646 y.rShiftTo(g, y)
34647 }
34648 while (x.signum() > 0) {
34649 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
34650 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
34651 if (x.compareTo(y) >= 0) {
34652 x.subTo(y, x)
34653 x.rShiftTo(1, x)
34654 } else {
34655 y.subTo(x, y)
34656 y.rShiftTo(1, y)
34657 }
34658 }
34659 if (g > 0) y.lShiftTo(g, y)
34660 return y
34661 }
34662
34663 // (protected) this % n, n < 2^26
34664 function bnpModInt(n) {
34665 if (n <= 0) return 0
34666 var d = this.DV % n,
34667 r = (this.s < 0) ? n - 1 : 0
34668 if (this.t > 0)
34669 if (d == 0) r = this[0] % n
34670 else
34671 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
34672 return r
34673 }
34674
34675 // (public) 1/this % m (HAC 14.61)
34676 function bnModInverse(m) {
34677 var ac = m.isEven()
34678 if (this.signum() === 0) throw new Error('division by zero')
34679 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
34680 var u = m.clone(),
34681 v = this.clone()
34682 var a = nbv(1),
34683 b = nbv(0),
34684 c = nbv(0),
34685 d = nbv(1)
34686 while (u.signum() != 0) {
34687 while (u.isEven()) {
34688 u.rShiftTo(1, u)
34689 if (ac) {
34690 if (!a.isEven() || !b.isEven()) {
34691 a.addTo(this, a)
34692 b.subTo(m, b)
34693 }
34694 a.rShiftTo(1, a)
34695 } else if (!b.isEven()) b.subTo(m, b)
34696 b.rShiftTo(1, b)
34697 }
34698 while (v.isEven()) {
34699 v.rShiftTo(1, v)
34700 if (ac) {
34701 if (!c.isEven() || !d.isEven()) {
34702 c.addTo(this, c)
34703 d.subTo(m, d)
34704 }
34705 c.rShiftTo(1, c)
34706 } else if (!d.isEven()) d.subTo(m, d)
34707 d.rShiftTo(1, d)
34708 }
34709 if (u.compareTo(v) >= 0) {
34710 u.subTo(v, u)
34711 if (ac) a.subTo(c, a)
34712 b.subTo(d, b)
34713 } else {
34714 v.subTo(u, v)
34715 if (ac) c.subTo(a, c)
34716 d.subTo(b, d)
34717 }
34718 }
34719 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
34720 while (d.compareTo(m) >= 0) d.subTo(m, d)
34721 while (d.signum() < 0) d.addTo(m, d)
34722 return d
34723 }
34724
34725 var lowprimes = [
34726 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
34727 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
34728 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
34729 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
34730 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
34731 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
34732 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
34733 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
34734 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
34735 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
34736 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
34737 ]
34738
34739 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
34740
34741 // (public) test primality with certainty >= 1-.5^t
34742 function bnIsProbablePrime(t) {
34743 var i, x = this.abs()
34744 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
34745 for (i = 0; i < lowprimes.length; ++i)
34746 if (x[0] == lowprimes[i]) return true
34747 return false
34748 }
34749 if (x.isEven()) return false
34750 i = 1
34751 while (i < lowprimes.length) {
34752 var m = lowprimes[i],
34753 j = i + 1
34754 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
34755 m = x.modInt(m)
34756 while (i < j) if (m % lowprimes[i++] == 0) return false
34757 }
34758 return x.millerRabin(t)
34759 }
34760
34761 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
34762 function bnpMillerRabin(t) {
34763 var n1 = this.subtract(BigInteger.ONE)
34764 var k = n1.getLowestSetBit()
34765 if (k <= 0) return false
34766 var r = n1.shiftRight(k)
34767 t = (t + 1) >> 1
34768 if (t > lowprimes.length) t = lowprimes.length
34769 var a = new BigInteger(null)
34770 var j, bases = []
34771 for (var i = 0; i < t; ++i) {
34772 for (;;) {
34773 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
34774 if (bases.indexOf(j) == -1) break
34775 }
34776 bases.push(j)
34777 a.fromInt(j)
34778 var y = a.modPow(r, this)
34779 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
34780 var j = 1
34781 while (j++ < k && y.compareTo(n1) != 0) {
34782 y = y.modPowInt(2, this)
34783 if (y.compareTo(BigInteger.ONE) == 0) return false
34784 }
34785 if (y.compareTo(n1) != 0) return false
34786 }
34787 }
34788 return true
34789 }
34790
34791 // protected
34792 proto.chunkSize = bnpChunkSize
34793 proto.toRadix = bnpToRadix
34794 proto.fromRadix = bnpFromRadix
34795 proto.fromNumber = bnpFromNumber
34796 proto.bitwiseTo = bnpBitwiseTo
34797 proto.changeBit = bnpChangeBit
34798 proto.addTo = bnpAddTo
34799 proto.dMultiply = bnpDMultiply
34800 proto.dAddOffset = bnpDAddOffset
34801 proto.multiplyLowerTo = bnpMultiplyLowerTo
34802 proto.multiplyUpperTo = bnpMultiplyUpperTo
34803 proto.modInt = bnpModInt
34804 proto.millerRabin = bnpMillerRabin
34805
34806 // public
34807 proto.clone = bnClone
34808 proto.intValue = bnIntValue
34809 proto.byteValue = bnByteValue
34810 proto.shortValue = bnShortValue
34811 proto.signum = bnSigNum
34812 proto.toByteArray = bnToByteArray
34813 proto.equals = bnEquals
34814 proto.min = bnMin
34815 proto.max = bnMax
34816 proto.and = bnAnd
34817 proto.or = bnOr
34818 proto.xor = bnXor
34819 proto.andNot = bnAndNot
34820 proto.not = bnNot
34821 proto.shiftLeft = bnShiftLeft
34822 proto.shiftRight = bnShiftRight
34823 proto.getLowestSetBit = bnGetLowestSetBit
34824 proto.bitCount = bnBitCount
34825 proto.testBit = bnTestBit
34826 proto.setBit = bnSetBit
34827 proto.clearBit = bnClearBit
34828 proto.flipBit = bnFlipBit
34829 proto.add = bnAdd
34830 proto.subtract = bnSubtract
34831 proto.multiply = bnMultiply
34832 proto.divide = bnDivide
34833 proto.remainder = bnRemainder
34834 proto.divideAndRemainder = bnDivideAndRemainder
34835 proto.modPow = bnModPow
34836 proto.modInverse = bnModInverse
34837 proto.pow = bnPow
34838 proto.gcd = bnGCD
34839 proto.isProbablePrime = bnIsProbablePrime
34840
34841 // JSBN-specific extension
34842 proto.square = bnSquare
34843
34844 // constants
34845 BigInteger.ZERO = nbv(0)
34846 BigInteger.ONE = nbv(1)
34847 BigInteger.valueOf = nbv
34848
34849 module.exports = BigInteger
34850
34851 },{"../package.json":40}],38:[function(require,module,exports){
34852 (function (Buffer){
34853 // FIXME: Kind of a weird way to throw exceptions, consider removing
34854 var assert = require('assert')
34855 var BigInteger = require('./bigi')
34856
34857 /**
34858 * Turns a byte array into a big integer.
34859 *
34860 * This function will interpret a byte array as a big integer in big
34861 * endian notation.
34862 */
34863 BigInteger.fromByteArrayUnsigned = function(byteArray) {
34864 // BigInteger expects a DER integer conformant byte array
34865 if (byteArray[0] & 0x80) {
34866 return new BigInteger([0].concat(byteArray))
34867 }
34868
34869 return new BigInteger(byteArray)
34870 }
34871
34872 /**
34873 * Returns a byte array representation of the big integer.
34874 *
34875 * This returns the absolute of the contained value in big endian
34876 * form. A value of zero results in an empty array.
34877 */
34878 BigInteger.prototype.toByteArrayUnsigned = function() {
34879 var byteArray = this.toByteArray()
34880 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
34881 }
34882
34883 BigInteger.fromDERInteger = function(byteArray) {
34884 return new BigInteger(byteArray)
34885 }
34886
34887 /*
34888 * Converts BigInteger to a DER integer representation.
34889 *
34890 * The format for this value uses the most significant bit as a sign
34891 * bit. If the most significant bit is already set and the integer is
34892 * positive, a 0x00 is prepended.
34893 *
34894 * Examples:
34895 *
34896 * 0 => 0x00
34897 * 1 => 0x01
34898 * -1 => 0xff
34899 * 127 => 0x7f
34900 * -127 => 0x81
34901 * 128 => 0x0080
34902 * -128 => 0x80
34903 * 255 => 0x00ff
34904 * -255 => 0xff01
34905 * 16300 => 0x3fac
34906 * -16300 => 0xc054
34907 * 62300 => 0x00f35c
34908 * -62300 => 0xff0ca4
34909 */
34910 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
34911
34912 BigInteger.fromBuffer = function(buffer) {
34913 // BigInteger expects a DER integer conformant byte array
34914 if (buffer[0] & 0x80) {
34915 var byteArray = Array.prototype.slice.call(buffer)
34916
34917 return new BigInteger([0].concat(byteArray))
34918 }
34919
34920 return new BigInteger(buffer)
34921 }
34922
34923 BigInteger.fromHex = function(hex) {
34924 if (hex === '') return BigInteger.ZERO
34925
34926 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
34927 assert.equal(hex.length % 2, 0, 'Incomplete hex')
34928 return new BigInteger(hex, 16)
34929 }
34930
34931 BigInteger.prototype.toBuffer = function(size) {
34932 var byteArray = this.toByteArrayUnsigned()
34933 var zeros = []
34934
34935 var padding = size - byteArray.length
34936 while (zeros.length < padding) zeros.push(0)
34937
34938 return new Buffer(zeros.concat(byteArray))
34939 }
34940
34941 BigInteger.prototype.toHex = function(size) {
34942 return this.toBuffer(size).toString('hex')
34943 }
34944
34945 }).call(this,require("buffer").Buffer)
34946 },{"./bigi":37,"assert":1,"buffer":5}],39:[function(require,module,exports){
34947 var BigInteger = require('./bigi')
34948
34949 //addons
34950 require('./convert')
34951
34952 module.exports = BigInteger
34953 },{"./bigi":37,"./convert":38}],40:[function(require,module,exports){
34954 module.exports={
34955 "_args": [
34956 [
34957 "bigi",
34958 "/home/ian/git/bitcoin/bitcoinjs-lib-browser"
34959 ]
34960 ],
34961 "_from": "bigi@latest",
34962 "_id": "bigi@1.4.2",
34963 "_inCache": true,
34964 "_installable": true,
34965 "_location": "/bigi",
34966 "_nodeVersion": "6.1.0",
34967 "_npmOperationalInternal": {
34968 "host": "packages-12-west.internal.npmjs.com",
34969 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
34970 },
34971 "_npmUser": {
34972 "email": "jprichardson@gmail.com",
34973 "name": "jprichardson"
34974 },
34975 "_npmVersion": "3.8.6",
34976 "_phantomChildren": {},
34977 "_requested": {
34978 "name": "bigi",
34979 "raw": "bigi",
34980 "rawSpec": "",
34981 "scope": null,
34982 "spec": "latest",
34983 "type": "tag"
34984 },
34985 "_requiredBy": [
34986 "#USER",
34987 "/bitcoinjs-lib",
34988 "/ecurve"
34989 ],
34990 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
34991 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
34992 "_shrinkwrap": null,
34993 "_spec": "bigi",
34994 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser",
34995 "bugs": {
34996 "url": "https://github.com/cryptocoinjs/bigi/issues"
34997 },
34998 "dependencies": {},
34999 "description": "Big integers.",
35000 "devDependencies": {
35001 "coveralls": "^2.11.2",
35002 "istanbul": "^0.3.5",
35003 "jshint": "^2.5.1",
35004 "mocha": "^2.1.0",
35005 "mochify": "^2.1.0"
35006 },
35007 "directories": {},
35008 "dist": {
35009 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
35010 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
35011 },
35012 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
35013 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
35014 "keywords": [
35015 "cryptography",
35016 "math",
35017 "bitcoin",
35018 "arbitrary",
35019 "precision",
35020 "arithmetic",
35021 "big",
35022 "integer",
35023 "int",
35024 "number",
35025 "biginteger",
35026 "bigint",
35027 "bignumber",
35028 "decimal",
35029 "float"
35030 ],
35031 "main": "./lib/index.js",
35032 "maintainers": [
35033 {
35034 "email": "boydb@midnightdesign.ws",
35035 "name": "midnightlightning"
35036 },
35037 {
35038 "email": "sidazhang89@gmail.com",
35039 "name": "sidazhang"
35040 },
35041 {
35042 "email": "npm@shesek.info",
35043 "name": "nadav"
35044 },
35045 {
35046 "email": "jprichardson@gmail.com",
35047 "name": "jprichardson"
35048 }
35049 ],
35050 "name": "bigi",
35051 "optionalDependencies": {},
35052 "readme": "ERROR: No README data found!",
35053 "repository": {
35054 "type": "git",
35055 "url": "git+https://github.com/cryptocoinjs/bigi.git"
35056 },
35057 "scripts": {
35058 "browser-test": "mochify --wd -R spec",
35059 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
35060 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
35061 "jshint": "jshint --config jshint.json lib/*.js ; true",
35062 "test": "_mocha -- test/*.js",
35063 "unit": "mocha"
35064 },
35065 "testling": {
35066 "browsers": [
35067 "ie/9..latest",
35068 "firefox/latest",
35069 "chrome/latest",
35070 "safari/6.0..latest",
35071 "iphone/6.0..latest",
35072 "android-browser/4.2..latest"
35073 ],
35074 "files": "test/*.js",
35075 "harness": "mocha"
35076 },
35077 "version": "1.4.2"
35078 }
35079
35080 },{}],41:[function(require,module,exports){
35081 // Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
35082 // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
35083 // NOTE: SIGHASH byte ignored AND restricted, truncate before use
35084
35085 var Buffer = require('safe-buffer').Buffer
35086
35087 function check (buffer) {
35088 if (buffer.length < 8) return false
35089 if (buffer.length > 72) return false
35090 if (buffer[0] !== 0x30) return false
35091 if (buffer[1] !== buffer.length - 2) return false
35092 if (buffer[2] !== 0x02) return false
35093
35094 var lenR = buffer[3]
35095 if (lenR === 0) return false
35096 if (5 + lenR >= buffer.length) return false
35097 if (buffer[4 + lenR] !== 0x02) return false
35098
35099 var lenS = buffer[5 + lenR]
35100 if (lenS === 0) return false
35101 if ((6 + lenR + lenS) !== buffer.length) return false
35102
35103 if (buffer[4] & 0x80) return false
35104 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
35105
35106 if (buffer[lenR + 6] & 0x80) return false
35107 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
35108 return true
35109 }
35110
35111 function decode (buffer) {
35112 if (buffer.length < 8) throw new Error('DER sequence length is too short')
35113 if (buffer.length > 72) throw new Error('DER sequence length is too long')
35114 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
35115 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
35116 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
35117
35118 var lenR = buffer[3]
35119 if (lenR === 0) throw new Error('R length is zero')
35120 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
35121 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
35122
35123 var lenS = buffer[5 + lenR]
35124 if (lenS === 0) throw new Error('S length is zero')
35125 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
35126
35127 if (buffer[4] & 0x80) throw new Error('R value is negative')
35128 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
35129
35130 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
35131 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
35132
35133 // non-BIP66 - extract R, S values
35134 return {
35135 r: buffer.slice(4, 4 + lenR),
35136 s: buffer.slice(6 + lenR)
35137 }
35138 }
35139
35140 /*
35141 * Expects r and s to be positive DER integers.
35142 *
35143 * The DER format uses the most significant bit as a sign bit (& 0x80).
35144 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
35145 *
35146 * Examples:
35147 *
35148 * 0 => 0x00
35149 * 1 => 0x01
35150 * -1 => 0xff
35151 * 127 => 0x7f
35152 * -127 => 0x81
35153 * 128 => 0x0080
35154 * -128 => 0x80
35155 * 255 => 0x00ff
35156 * -255 => 0xff01
35157 * 16300 => 0x3fac
35158 * -16300 => 0xc054
35159 * 62300 => 0x00f35c
35160 * -62300 => 0xff0ca4
35161 */
35162 function encode (r, s) {
35163 var lenR = r.length
35164 var lenS = s.length
35165 if (lenR === 0) throw new Error('R length is zero')
35166 if (lenS === 0) throw new Error('S length is zero')
35167 if (lenR > 33) throw new Error('R length is too long')
35168 if (lenS > 33) throw new Error('S length is too long')
35169 if (r[0] & 0x80) throw new Error('R value is negative')
35170 if (s[0] & 0x80) throw new Error('S value is negative')
35171 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
35172 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
35173
35174 var signature = Buffer.allocUnsafe(6 + lenR + lenS)
35175
35176 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
35177 signature[0] = 0x30
35178 signature[1] = signature.length - 2
35179 signature[2] = 0x02
35180 signature[3] = r.length
35181 r.copy(signature, 4)
35182 signature[4 + lenR] = 0x02
35183 signature[5 + lenR] = s.length
35184 s.copy(signature, 6 + lenR)
35185
35186 return signature
35187 }
35188
35189 module.exports = {
35190 check: check,
35191 decode: decode,
35192 encode: encode
35193 }
35194
35195 },{"safe-buffer":128}],42:[function(require,module,exports){
35196 module.exports={
35197 "OP_FALSE": 0,
35198 "OP_0": 0,
35199 "OP_PUSHDATA1": 76,
35200 "OP_PUSHDATA2": 77,
35201 "OP_PUSHDATA4": 78,
35202 "OP_1NEGATE": 79,
35203 "OP_RESERVED": 80,
35204 "OP_1": 81,
35205 "OP_TRUE": 81,
35206 "OP_2": 82,
35207 "OP_3": 83,
35208 "OP_4": 84,
35209 "OP_5": 85,
35210 "OP_6": 86,
35211 "OP_7": 87,
35212 "OP_8": 88,
35213 "OP_9": 89,
35214 "OP_10": 90,
35215 "OP_11": 91,
35216 "OP_12": 92,
35217 "OP_13": 93,
35218 "OP_14": 94,
35219 "OP_15": 95,
35220 "OP_16": 96,
35221
35222 "OP_NOP": 97,
35223 "OP_VER": 98,
35224 "OP_IF": 99,
35225 "OP_NOTIF": 100,
35226 "OP_VERIF": 101,
35227 "OP_VERNOTIF": 102,
35228 "OP_ELSE": 103,
35229 "OP_ENDIF": 104,
35230 "OP_VERIFY": 105,
35231 "OP_RETURN": 106,
35232
35233 "OP_TOALTSTACK": 107,
35234 "OP_FROMALTSTACK": 108,
35235 "OP_2DROP": 109,
35236 "OP_2DUP": 110,
35237 "OP_3DUP": 111,
35238 "OP_2OVER": 112,
35239 "OP_2ROT": 113,
35240 "OP_2SWAP": 114,
35241 "OP_IFDUP": 115,
35242 "OP_DEPTH": 116,
35243 "OP_DROP": 117,
35244 "OP_DUP": 118,
35245 "OP_NIP": 119,
35246 "OP_OVER": 120,
35247 "OP_PICK": 121,
35248 "OP_ROLL": 122,
35249 "OP_ROT": 123,
35250 "OP_SWAP": 124,
35251 "OP_TUCK": 125,
35252
35253 "OP_CAT": 126,
35254 "OP_SUBSTR": 127,
35255 "OP_LEFT": 128,
35256 "OP_RIGHT": 129,
35257 "OP_SIZE": 130,
35258
35259 "OP_INVERT": 131,
35260 "OP_AND": 132,
35261 "OP_OR": 133,
35262 "OP_XOR": 134,
35263 "OP_EQUAL": 135,
35264 "OP_EQUALVERIFY": 136,
35265 "OP_RESERVED1": 137,
35266 "OP_RESERVED2": 138,
35267
35268 "OP_1ADD": 139,
35269 "OP_1SUB": 140,
35270 "OP_2MUL": 141,
35271 "OP_2DIV": 142,
35272 "OP_NEGATE": 143,
35273 "OP_ABS": 144,
35274 "OP_NOT": 145,
35275 "OP_0NOTEQUAL": 146,
35276 "OP_ADD": 147,
35277 "OP_SUB": 148,
35278 "OP_MUL": 149,
35279 "OP_DIV": 150,
35280 "OP_MOD": 151,
35281 "OP_LSHIFT": 152,
35282 "OP_RSHIFT": 153,
35283
35284 "OP_BOOLAND": 154,
35285 "OP_BOOLOR": 155,
35286 "OP_NUMEQUAL": 156,
35287 "OP_NUMEQUALVERIFY": 157,
35288 "OP_NUMNOTEQUAL": 158,
35289 "OP_LESSTHAN": 159,
35290 "OP_GREATERTHAN": 160,
35291 "OP_LESSTHANOREQUAL": 161,
35292 "OP_GREATERTHANOREQUAL": 162,
35293 "OP_MIN": 163,
35294 "OP_MAX": 164,
35295
35296 "OP_WITHIN": 165,
35297
35298 "OP_RIPEMD160": 166,
35299 "OP_SHA1": 167,
35300 "OP_SHA256": 168,
35301 "OP_HASH160": 169,
35302 "OP_HASH256": 170,
35303 "OP_CODESEPARATOR": 171,
35304 "OP_CHECKSIG": 172,
35305 "OP_CHECKSIGVERIFY": 173,
35306 "OP_CHECKMULTISIG": 174,
35307 "OP_CHECKMULTISIGVERIFY": 175,
35308
35309 "OP_NOP1": 176,
35310 "OP_NOP2": 177,
35311 "OP_CHECKLOCKTIMEVERIFY": 177,
35312
35313 "OP_NOP3": 178,
35314 "OP_NOP4": 179,
35315 "OP_NOP5": 180,
35316 "OP_NOP6": 181,
35317 "OP_NOP7": 182,
35318 "OP_NOP8": 183,
35319 "OP_NOP9": 184,
35320 "OP_NOP10": 185,
35321
35322 "OP_PUBKEYHASH": 253,
35323 "OP_PUBKEY": 254,
35324 "OP_INVALIDOPCODE": 255
35325 }
35326
35327 },{}],43:[function(require,module,exports){
35328 var OPS = require('./index.json')
35329
35330 var map = {}
35331 for (var op in OPS) {
35332 var code = OPS[op]
35333 map[code] = op
35334 }
35335
35336 module.exports = map
35337
35338 },{"./index.json":42}],44:[function(require,module,exports){
35339 var Buffer = require('safe-buffer').Buffer
35340 var bech32 = require('bech32')
35341 var bs58check = require('bs58check')
35342 var bscript = require('./script')
35343 var btemplates = require('./templates')
35344 var networks = require('./networks')
35345 var typeforce = require('typeforce')
35346 var types = require('./types')
35347
35348 function fromBase58Check (address) {
35349 var payload = bs58check.decode(address)
35350
35351 // TODO: 4.0.0, move to "toOutputScript"
35352 if (payload.length < 21) throw new TypeError(address + ' is too short')
35353 if (payload.length > 21) throw new TypeError(address + ' is too long')
35354
35355 var version = payload.readUInt8(0)
35356 var hash = payload.slice(1)
35357
35358 return { version: version, hash: hash }
35359 }
35360
35361 function fromBech32 (address) {
35362 var result = bech32.decode(address)
35363 var data = bech32.fromWords(result.words.slice(1))
35364
35365 return {
35366 version: result.words[0],
35367 prefix: result.prefix,
35368 data: Buffer.from(data)
35369 }
35370 }
35371
35372 function toBase58Check (hash, version) {
35373 typeforce(types.tuple(types.Hash160bit, types.UInt8), arguments)
35374
35375 var payload = Buffer.allocUnsafe(21)
35376 payload.writeUInt8(version, 0)
35377 hash.copy(payload, 1)
35378
35379 return bs58check.encode(payload)
35380 }
35381
35382 function toBech32 (data, version, prefix) {
35383 var words = bech32.toWords(data)
35384 words.unshift(version)
35385
35386 return bech32.encode(prefix, words)
35387 }
35388
35389 function fromOutputScript (outputScript, network) {
35390 network = network || networks.bitcoin
35391
35392 if (btemplates.pubKeyHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(3, 23), network.pubKeyHash)
35393 if (btemplates.scriptHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(2, 22), network.scriptHash)
35394 if (btemplates.witnessPubKeyHash.output.check(outputScript)) return toBech32(bscript.compile(outputScript).slice(2, 22), 0, network.bech32)
35395 if (btemplates.witnessScriptHash.output.check(outputScript)) return toBech32(bscript.compile(outputScript).slice(2, 34), 0, network.bech32)
35396
35397 throw new Error(bscript.toASM(outputScript) + ' has no matching Address')
35398 }
35399
35400 function toOutputScript (address, network) {
35401 network = network || networks.bitcoin
35402
35403 var decode
35404 try {
35405 decode = fromBase58Check(address)
35406 } catch (e) {}
35407
35408 if (decode) {
35409 if (decode.version === network.pubKeyHash) return btemplates.pubKeyHash.output.encode(decode.hash)
35410 if (decode.version === network.scriptHash) return btemplates.scriptHash.output.encode(decode.hash)
35411 } else {
35412 try {
35413 decode = fromBech32(address)
35414 } catch (e) {}
35415
35416 if (decode) {
35417 if (decode.prefix !== network.bech32) throw new Error(address + ' has an invalid prefix')
35418 if (decode.version === 0) {
35419 if (decode.data.length === 20) return btemplates.witnessPubKeyHash.output.encode(decode.data)
35420 if (decode.data.length === 32) return btemplates.witnessScriptHash.output.encode(decode.data)
35421 }
35422 }
35423 }
35424
35425 throw new Error(address + ' has no matching Script')
35426 }
35427
35428 module.exports = {
35429 fromBase58Check: fromBase58Check,
35430 fromBech32: fromBech32,
35431 fromOutputScript: fromOutputScript,
35432 toBase58Check: toBase58Check,
35433 toBech32: toBech32,
35434 toOutputScript: toOutputScript
35435 }
35436
35437 },{"./networks":53,"./script":54,"./templates":56,"./types":80,"bech32":36,"bs58check":85,"safe-buffer":128,"typeforce":139}],45:[function(require,module,exports){
35438 var Buffer = require('safe-buffer').Buffer
35439 var bcrypto = require('./crypto')
35440 var fastMerkleRoot = require('merkle-lib/fastRoot')
35441 var typeforce = require('typeforce')
35442 var types = require('./types')
35443 var varuint = require('varuint-bitcoin')
35444
35445 var Transaction = require('./transaction')
35446
35447 function Block () {
35448 this.version = 1
35449 this.prevHash = null
35450 this.merkleRoot = null
35451 this.timestamp = 0
35452 this.bits = 0
35453 this.nonce = 0
35454 }
35455
35456 Block.fromBuffer = function (buffer) {
35457 if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)')
35458
35459 var offset = 0
35460 function readSlice (n) {
35461 offset += n
35462 return buffer.slice(offset - n, offset)
35463 }
35464
35465 function readUInt32 () {
35466 var i = buffer.readUInt32LE(offset)
35467 offset += 4
35468 return i
35469 }
35470
35471 function readInt32 () {
35472 var i = buffer.readInt32LE(offset)
35473 offset += 4
35474 return i
35475 }
35476
35477 var block = new Block()
35478 block.version = readInt32()
35479 block.prevHash = readSlice(32)
35480 block.merkleRoot = readSlice(32)
35481 block.timestamp = readUInt32()
35482 block.bits = readUInt32()
35483 block.nonce = readUInt32()
35484
35485 if (buffer.length === 80) return block
35486
35487 function readVarInt () {
35488 var vi = varuint.decode(buffer, offset)
35489 offset += varuint.decode.bytes
35490 return vi
35491 }
35492
35493 function readTransaction () {
35494 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
35495 offset += tx.byteLength()
35496 return tx
35497 }
35498
35499 var nTransactions = readVarInt()
35500 block.transactions = []
35501
35502 for (var i = 0; i < nTransactions; ++i) {
35503 var tx = readTransaction()
35504 block.transactions.push(tx)
35505 }
35506
35507 return block
35508 }
35509
35510 Block.prototype.byteLength = function (headersOnly) {
35511 if (headersOnly || !this.transactions) return 80
35512
35513 return 80 + varuint.encodingLength(this.transactions.length) + this.transactions.reduce(function (a, x) {
35514 return a + x.byteLength()
35515 }, 0)
35516 }
35517
35518 Block.fromHex = function (hex) {
35519 return Block.fromBuffer(Buffer.from(hex, 'hex'))
35520 }
35521
35522 Block.prototype.getHash = function () {
35523 return bcrypto.hash256(this.toBuffer(true))
35524 }
35525
35526 Block.prototype.getId = function () {
35527 return this.getHash().reverse().toString('hex')
35528 }
35529
35530 Block.prototype.getUTCDate = function () {
35531 var date = new Date(0) // epoch
35532 date.setUTCSeconds(this.timestamp)
35533
35534 return date
35535 }
35536
35537 // TODO: buffer, offset compatibility
35538 Block.prototype.toBuffer = function (headersOnly) {
35539 var buffer = Buffer.allocUnsafe(this.byteLength(headersOnly))
35540
35541 var offset = 0
35542 function writeSlice (slice) {
35543 slice.copy(buffer, offset)
35544 offset += slice.length
35545 }
35546
35547 function writeInt32 (i) {
35548 buffer.writeInt32LE(i, offset)
35549 offset += 4
35550 }
35551 function writeUInt32 (i) {
35552 buffer.writeUInt32LE(i, offset)
35553 offset += 4
35554 }
35555
35556 writeInt32(this.version)
35557 writeSlice(this.prevHash)
35558 writeSlice(this.merkleRoot)
35559 writeUInt32(this.timestamp)
35560 writeUInt32(this.bits)
35561 writeUInt32(this.nonce)
35562
35563 if (headersOnly || !this.transactions) return buffer
35564
35565 varuint.encode(this.transactions.length, buffer, offset)
35566 offset += varuint.encode.bytes
35567
35568 this.transactions.forEach(function (tx) {
35569 var txSize = tx.byteLength() // TODO: extract from toBuffer?
35570 tx.toBuffer(buffer, offset)
35571 offset += txSize
35572 })
35573
35574 return buffer
35575 }
35576
35577 Block.prototype.toHex = function (headersOnly) {
35578 return this.toBuffer(headersOnly).toString('hex')
35579 }
35580
35581 Block.calculateTarget = function (bits) {
35582 var exponent = ((bits & 0xff000000) >> 24) - 3
35583 var mantissa = bits & 0x007fffff
35584 var target = Buffer.alloc(32, 0)
35585 target.writeUInt32BE(mantissa, 28 - exponent)
35586 return target
35587 }
35588
35589 Block.calculateMerkleRoot = function (transactions) {
35590 typeforce([{ getHash: types.Function }], transactions)
35591 if (transactions.length === 0) throw TypeError('Cannot compute merkle root for zero transactions')
35592
35593 var hashes = transactions.map(function (transaction) {
35594 return transaction.getHash()
35595 })
35596
35597 return fastMerkleRoot(hashes, bcrypto.hash256)
35598 }
35599
35600 Block.prototype.checkMerkleRoot = function () {
35601 if (!this.transactions) return false
35602
35603 var actualMerkleRoot = Block.calculateMerkleRoot(this.transactions)
35604 return this.merkleRoot.compare(actualMerkleRoot) === 0
35605 }
35606
35607 Block.prototype.checkProofOfWork = function () {
35608 var hash = this.getHash().reverse()
35609 var target = Block.calculateTarget(this.bits)
35610
35611 return hash.compare(target) <= 0
35612 }
35613
35614 module.exports = Block
35615
35616 },{"./crypto":47,"./transaction":78,"./types":80,"merkle-lib/fastRoot":122,"safe-buffer":128,"typeforce":139,"varuint-bitcoin":141}],46:[function(require,module,exports){
35617 var pushdata = require('pushdata-bitcoin')
35618 var varuint = require('varuint-bitcoin')
35619
35620 // https://github.com/feross/buffer/blob/master/index.js#L1127
35621 function verifuint (value, max) {
35622 if (typeof value !== 'number') throw new Error('cannot write a non-number as a number')
35623 if (value < 0) throw new Error('specified a negative value for writing an unsigned value')
35624 if (value > max) throw new Error('RangeError: value out of range')
35625 if (Math.floor(value) !== value) throw new Error('value has a fractional component')
35626 }
35627
35628 function readUInt64LE (buffer, offset) {
35629 var a = buffer.readUInt32LE(offset)
35630 var b = buffer.readUInt32LE(offset + 4)
35631 b *= 0x100000000
35632
35633 verifuint(b + a, 0x001fffffffffffff)
35634
35635 return b + a
35636 }
35637
35638 function writeUInt64LE (buffer, value, offset) {
35639 verifuint(value, 0x001fffffffffffff)
35640
35641 buffer.writeInt32LE(value & -1, offset)
35642 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
35643 return offset + 8
35644 }
35645
35646 // TODO: remove in 4.0.0?
35647 function readVarInt (buffer, offset) {
35648 var result = varuint.decode(buffer, offset)
35649
35650 return {
35651 number: result,
35652 size: varuint.decode.bytes
35653 }
35654 }
35655
35656 // TODO: remove in 4.0.0?
35657 function writeVarInt (buffer, number, offset) {
35658 varuint.encode(number, buffer, offset)
35659 return varuint.encode.bytes
35660 }
35661
35662 module.exports = {
35663 pushDataSize: pushdata.encodingLength,
35664 readPushDataInt: pushdata.decode,
35665 readUInt64LE: readUInt64LE,
35666 readVarInt: readVarInt,
35667 varIntBuffer: varuint.encode,
35668 varIntSize: varuint.encodingLength,
35669 writePushDataInt: pushdata.encode,
35670 writeUInt64LE: writeUInt64LE,
35671 writeVarInt: writeVarInt
35672 }
35673
35674 },{"pushdata-bitcoin":125,"varuint-bitcoin":141}],47:[function(require,module,exports){
35675 var createHash = require('create-hash')
35676
35677 function ripemd160 (buffer) {
35678 return createHash('rmd160').update(buffer).digest()
35679 }
35680
35681 function sha1 (buffer) {
35682 return createHash('sha1').update(buffer).digest()
35683 }
35684
35685 function sha256 (buffer) {
35686 return createHash('sha256').update(buffer).digest()
35687 }
35688
35689 function hash160 (buffer) {
35690 return ripemd160(sha256(buffer))
35691 }
35692
35693 function hash256 (buffer) {
35694 return sha256(sha256(buffer))
35695 }
35696
35697 module.exports = {
35698 hash160: hash160,
35699 hash256: hash256,
35700 ripemd160: ripemd160,
35701 sha1: sha1,
35702 sha256: sha256
35703 }
35704
35705 },{"create-hash":87}],48:[function(require,module,exports){
35706 var Buffer = require('safe-buffer').Buffer
35707 var createHmac = require('create-hmac')
35708 var typeforce = require('typeforce')
35709 var types = require('./types')
35710
35711 var BigInteger = require('bigi')
35712 var ECSignature = require('./ecsignature')
35713
35714 var ZERO = Buffer.alloc(1, 0)
35715 var ONE = Buffer.alloc(1, 1)
35716
35717 var ecurve = require('ecurve')
35718 var secp256k1 = ecurve.getCurveByName('secp256k1')
35719
35720 // https://tools.ietf.org/html/rfc6979#section-3.2
35721 function deterministicGenerateK (hash, x, checkSig) {
35722 typeforce(types.tuple(
35723 types.Hash256bit,
35724 types.Buffer256bit,
35725 types.Function
35726 ), arguments)
35727
35728 // Step A, ignored as hash already provided
35729 // Step B
35730 // Step C
35731 var k = Buffer.alloc(32, 0)
35732 var v = Buffer.alloc(32, 1)
35733
35734 // Step D
35735 k = createHmac('sha256', k)
35736 .update(v)
35737 .update(ZERO)
35738 .update(x)
35739 .update(hash)
35740 .digest()
35741
35742 // Step E
35743 v = createHmac('sha256', k).update(v).digest()
35744
35745 // Step F
35746 k = createHmac('sha256', k)
35747 .update(v)
35748 .update(ONE)
35749 .update(x)
35750 .update(hash)
35751 .digest()
35752
35753 // Step G
35754 v = createHmac('sha256', k).update(v).digest()
35755
35756 // Step H1/H2a, ignored as tlen === qlen (256 bit)
35757 // Step H2b
35758 v = createHmac('sha256', k).update(v).digest()
35759
35760 var T = BigInteger.fromBuffer(v)
35761
35762 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
35763 while (T.signum() <= 0 || T.compareTo(secp256k1.n) >= 0 || !checkSig(T)) {
35764 k = createHmac('sha256', k)
35765 .update(v)
35766 .update(ZERO)
35767 .digest()
35768
35769 v = createHmac('sha256', k).update(v).digest()
35770
35771 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
35772 // Step H2b again
35773 v = createHmac('sha256', k).update(v).digest()
35774 T = BigInteger.fromBuffer(v)
35775 }
35776
35777 return T
35778 }
35779
35780 var N_OVER_TWO = secp256k1.n.shiftRight(1)
35781
35782 function sign (hash, d) {
35783 typeforce(types.tuple(types.Hash256bit, types.BigInt), arguments)
35784
35785 var x = d.toBuffer(32)
35786 var e = BigInteger.fromBuffer(hash)
35787 var n = secp256k1.n
35788 var G = secp256k1.G
35789
35790 var r, s
35791 deterministicGenerateK(hash, x, function (k) {
35792 var Q = G.multiply(k)
35793
35794 if (secp256k1.isInfinity(Q)) return false
35795
35796 r = Q.affineX.mod(n)
35797 if (r.signum() === 0) return false
35798
35799 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
35800 if (s.signum() === 0) return false
35801
35802 return true
35803 })
35804
35805 // enforce low S values, see bip62: 'low s values in signatures'
35806 if (s.compareTo(N_OVER_TWO) > 0) {
35807 s = n.subtract(s)
35808 }
35809
35810 return new ECSignature(r, s)
35811 }
35812
35813 function verify (hash, signature, Q) {
35814 typeforce(types.tuple(
35815 types.Hash256bit,
35816 types.ECSignature,
35817 types.ECPoint
35818 ), arguments)
35819
35820 var n = secp256k1.n
35821 var G = secp256k1.G
35822
35823 var r = signature.r
35824 var s = signature.s
35825
35826 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
35827 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
35828 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
35829
35830 // 1.4.2 H = Hash(M), already done by the user
35831 // 1.4.3 e = H
35832 var e = BigInteger.fromBuffer(hash)
35833
35834 // Compute s^-1
35835 var sInv = s.modInverse(n)
35836
35837 // 1.4.4 Compute u1 = es^−1 mod n
35838 // u2 = rs^−1 mod n
35839 var u1 = e.multiply(sInv).mod(n)
35840 var u2 = r.multiply(sInv).mod(n)
35841
35842 // 1.4.5 Compute R = (xR, yR)
35843 // R = u1G + u2Q
35844 var R = G.multiplyTwo(u1, Q, u2)
35845
35846 // 1.4.5 (cont.) Enforce R is not at infinity
35847 if (secp256k1.isInfinity(R)) return false
35848
35849 // 1.4.6 Convert the field element R.x to an integer
35850 var xR = R.affineX
35851
35852 // 1.4.7 Set v = xR mod n
35853 var v = xR.mod(n)
35854
35855 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
35856 return v.equals(r)
35857 }
35858
35859 module.exports = {
35860 deterministicGenerateK: deterministicGenerateK,
35861 sign: sign,
35862 verify: verify,
35863
35864 // TODO: remove
35865 __curve: secp256k1
35866 }
35867
35868 },{"./ecsignature":50,"./types":80,"bigi":39,"create-hmac":90,"ecurve":94,"safe-buffer":128,"typeforce":139}],49:[function(require,module,exports){
35869 var baddress = require('./address')
35870 var bcrypto = require('./crypto')
35871 var ecdsa = require('./ecdsa')
35872 var randomBytes = require('randombytes')
35873 var typeforce = require('typeforce')
35874 var types = require('./types')
35875 var wif = require('wif')
35876
35877 var NETWORKS = require('./networks')
35878 var BigInteger = require('bigi')
35879
35880 var ecurve = require('ecurve')
35881 var secp256k1 = ecdsa.__curve
35882
35883 function ECPair (d, Q, options) {
35884 if (options) {
35885 typeforce({
35886 compressed: types.maybe(types.Boolean),
35887 network: types.maybe(types.Network)
35888 }, options)
35889 }
35890
35891 options = options || {}
35892
35893 if (d) {
35894 if (d.signum() <= 0) throw new Error('Private key must be greater than 0')
35895 if (d.compareTo(secp256k1.n) >= 0) throw new Error('Private key must be less than the curve order')
35896 if (Q) throw new TypeError('Unexpected publicKey parameter')
35897
35898 this.d = d
35899 } else {
35900 typeforce(types.ECPoint, Q)
35901
35902 this.__Q = Q
35903 }
35904
35905 this.compressed = options.compressed === undefined ? true : options.compressed
35906 this.network = options.network || NETWORKS.bitcoin
35907 }
35908
35909 Object.defineProperty(ECPair.prototype, 'Q', {
35910 get: function () {
35911 if (!this.__Q && this.d) {
35912 this.__Q = secp256k1.G.multiply(this.d)
35913 }
35914
35915 return this.__Q
35916 }
35917 })
35918
35919 ECPair.fromPublicKeyBuffer = function (buffer, network) {
35920 var Q = ecurve.Point.decodeFrom(secp256k1, buffer)
35921
35922 return new ECPair(null, Q, {
35923 compressed: Q.compressed,
35924 network: network
35925 })
35926 }
35927
35928 ECPair.fromWIF = function (string, network) {
35929 var decoded = wif.decode(string)
35930 var version = decoded.version
35931
35932 // list of networks?
35933 if (types.Array(network)) {
35934 network = network.filter(function (x) {
35935 return version === x.wif
35936 }).pop()
35937
35938 if (!network) throw new Error('Unknown network version')
35939
35940 // otherwise, assume a network object (or default to bitcoin)
35941 } else {
35942 network = network || NETWORKS.bitcoin
35943
35944 if (version !== network.wif) throw new Error('Invalid network version')
35945 }
35946
35947 var d = BigInteger.fromBuffer(decoded.privateKey)
35948
35949 return new ECPair(d, null, {
35950 compressed: decoded.compressed,
35951 network: network
35952 })
35953 }
35954
35955 ECPair.makeRandom = function (options) {
35956 options = options || {}
35957
35958 var rng = options.rng || randomBytes
35959
35960 var d
35961 do {
35962 var buffer = rng(32)
35963 typeforce(types.Buffer256bit, buffer)
35964
35965 d = BigInteger.fromBuffer(buffer)
35966 } while (d.signum() <= 0 || d.compareTo(secp256k1.n) >= 0)
35967
35968 return new ECPair(d, null, options)
35969 }
35970
35971 ECPair.prototype.getAddress = function () {
35972 return baddress.toBase58Check(bcrypto.hash160(this.getPublicKeyBuffer()), this.getNetwork().pubKeyHash)
35973 }
35974
35975 ECPair.prototype.getNetwork = function () {
35976 return this.network
35977 }
35978
35979 ECPair.prototype.getPublicKeyBuffer = function () {
35980 return this.Q.getEncoded(this.compressed)
35981 }
35982
35983 ECPair.prototype.sign = function (hash) {
35984 if (!this.d) throw new Error('Missing private key')
35985
35986 return ecdsa.sign(hash, this.d)
35987 }
35988
35989 ECPair.prototype.toWIF = function () {
35990 if (!this.d) throw new Error('Missing private key')
35991
35992 return wif.encode(this.network.wif, this.d.toBuffer(32), this.compressed)
35993 }
35994
35995 ECPair.prototype.verify = function (hash, signature) {
35996 return ecdsa.verify(hash, signature, this.Q)
35997 }
35998
35999 module.exports = ECPair
36000
36001 },{"./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){
36002 (function (Buffer){
36003 var bip66 = require('bip66')
36004 var typeforce = require('typeforce')
36005 var types = require('./types')
36006
36007 var BigInteger = require('bigi')
36008
36009 function ECSignature (r, s) {
36010 typeforce(types.tuple(types.BigInt, types.BigInt), arguments)
36011
36012 this.r = r
36013 this.s = s
36014 }
36015
36016 ECSignature.parseCompact = function (buffer) {
36017 typeforce(types.BufferN(65), buffer)
36018
36019 var flagByte = buffer.readUInt8(0) - 27
36020 if (flagByte !== (flagByte & 7)) throw new Error('Invalid signature parameter')
36021
36022 var compressed = !!(flagByte & 4)
36023 var recoveryParam = flagByte & 3
36024 var signature = ECSignature.fromRSBuffer(buffer.slice(1))
36025
36026 return {
36027 compressed: compressed,
36028 i: recoveryParam,
36029 signature: signature
36030 }
36031 }
36032
36033 ECSignature.fromRSBuffer = function (buffer) {
36034 typeforce(types.BufferN(64), buffer)
36035
36036 var r = BigInteger.fromBuffer(buffer.slice(0, 32))
36037 var s = BigInteger.fromBuffer(buffer.slice(32, 64))
36038 return new ECSignature(r, s)
36039 }
36040
36041 ECSignature.fromDER = function (buffer) {
36042 var decode = bip66.decode(buffer)
36043 var r = BigInteger.fromDERInteger(decode.r)
36044 var s = BigInteger.fromDERInteger(decode.s)
36045
36046 return new ECSignature(r, s)
36047 }
36048
36049 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
36050 ECSignature.parseScriptSignature = function (buffer) {
36051 var hashType = buffer.readUInt8(buffer.length - 1)
36052 var hashTypeMod = hashType & ~0x80
36053
36054 if (hashTypeMod <= 0x00 || hashTypeMod >= 0x04) throw new Error('Invalid hashType ' + hashType)
36055
36056 return {
36057 signature: ECSignature.fromDER(buffer.slice(0, -1)),
36058 hashType: hashType
36059 }
36060 }
36061
36062 ECSignature.prototype.toCompact = function (i, compressed) {
36063 if (compressed) {
36064 i += 4
36065 }
36066
36067 i += 27
36068
36069 var buffer = Buffer.alloc(65)
36070 buffer.writeUInt8(i, 0)
36071 this.toRSBuffer(buffer, 1)
36072 return buffer
36073 }
36074
36075 ECSignature.prototype.toDER = function () {
36076 var r = Buffer.from(this.r.toDERInteger())
36077 var s = Buffer.from(this.s.toDERInteger())
36078
36079 return bip66.encode(r, s)
36080 }
36081
36082 ECSignature.prototype.toRSBuffer = function (buffer, offset) {
36083 buffer = buffer || Buffer.alloc(64)
36084 this.r.toBuffer(32).copy(buffer, offset)
36085 this.s.toBuffer(32).copy(buffer, offset + 32)
36086 return buffer
36087 }
36088
36089 ECSignature.prototype.toScriptSignature = function (hashType) {
36090 var hashTypeMod = hashType & ~0x80
36091 if (hashTypeMod <= 0 || hashTypeMod >= 4) throw new Error('Invalid hashType ' + hashType)
36092
36093 var hashTypeBuffer = Buffer.alloc(1)
36094 hashTypeBuffer.writeUInt8(hashType, 0)
36095
36096 return Buffer.concat([this.toDER(), hashTypeBuffer])
36097 }
36098
36099 module.exports = ECSignature
36100
36101 }).call(this,require("buffer").Buffer)
36102 },{"./types":80,"bigi":39,"bip66":41,"buffer":5,"typeforce":139}],51:[function(require,module,exports){
36103 var Buffer = require('safe-buffer').Buffer
36104 var base58check = require('bs58check')
36105 var bcrypto = require('./crypto')
36106 var createHmac = require('create-hmac')
36107 var typeforce = require('typeforce')
36108 var types = require('./types')
36109 var NETWORKS = require('./networks')
36110
36111 var BigInteger = require('bigi')
36112 var ECPair = require('./ecpair')
36113
36114 var ecurve = require('ecurve')
36115 var curve = ecurve.getCurveByName('secp256k1')
36116
36117 function HDNode (keyPair, chainCode) {
36118 typeforce(types.tuple('ECPair', types.Buffer256bit), arguments)
36119
36120 if (!keyPair.compressed) throw new TypeError('BIP32 only allows compressed keyPairs')
36121
36122 this.keyPair = keyPair
36123 this.chainCode = chainCode
36124 this.depth = 0
36125 this.index = 0
36126 this.parentFingerprint = 0x00000000
36127 }
36128
36129 HDNode.HIGHEST_BIT = 0x80000000
36130 HDNode.LENGTH = 78
36131 HDNode.MASTER_SECRET = Buffer.from('Bitcoin seed', 'utf8')
36132
36133 HDNode.fromSeedBuffer = function (seed, network) {
36134 typeforce(types.tuple(types.Buffer, types.maybe(types.Network)), arguments)
36135
36136 if (seed.length < 16) throw new TypeError('Seed should be at least 128 bits')
36137 if (seed.length > 64) throw new TypeError('Seed should be at most 512 bits')
36138
36139 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
36140 var IL = I.slice(0, 32)
36141 var IR = I.slice(32)
36142
36143 // In case IL is 0 or >= n, the master key is invalid
36144 // This is handled by the ECPair constructor
36145 var pIL = BigInteger.fromBuffer(IL)
36146 var keyPair = new ECPair(pIL, null, {
36147 network: network
36148 })
36149
36150 return new HDNode(keyPair, IR)
36151 }
36152
36153 HDNode.fromSeedHex = function (hex, network) {
36154 return HDNode.fromSeedBuffer(Buffer.from(hex, 'hex'), network)
36155 }
36156
36157 HDNode.fromBase58 = function (string, networks) {
36158 var buffer = base58check.decode(string)
36159 if (buffer.length !== 78) throw new Error('Invalid buffer length')
36160
36161 // 4 bytes: version bytes
36162 var version = buffer.readUInt32BE(0)
36163 var network
36164
36165 // list of networks?
36166 if (Array.isArray(networks)) {
36167 network = networks.filter(function (x) {
36168 return version === x.bip32.private ||
36169 version === x.bip32.public
36170 }).pop()
36171
36172 if (!network) throw new Error('Unknown network version')
36173
36174 // otherwise, assume a network object (or default to bitcoin)
36175 } else {
36176 network = networks || NETWORKS.bitcoin
36177 }
36178
36179 if (version !== network.bip32.private &&
36180 version !== network.bip32.public) throw new Error('Invalid network version')
36181
36182 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
36183 var depth = buffer[4]
36184
36185 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
36186 var parentFingerprint = buffer.readUInt32BE(5)
36187 if (depth === 0) {
36188 if (parentFingerprint !== 0x00000000) throw new Error('Invalid parent fingerprint')
36189 }
36190
36191 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
36192 // This is encoded in MSB order. (0x00000000 if master key)
36193 var index = buffer.readUInt32BE(9)
36194 if (depth === 0 && index !== 0) throw new Error('Invalid index')
36195
36196 // 32 bytes: the chain code
36197 var chainCode = buffer.slice(13, 45)
36198 var keyPair
36199
36200 // 33 bytes: private key data (0x00 + k)
36201 if (version === network.bip32.private) {
36202 if (buffer.readUInt8(45) !== 0x00) throw new Error('Invalid private key')
36203
36204 var d = BigInteger.fromBuffer(buffer.slice(46, 78))
36205 keyPair = new ECPair(d, null, { network: network })
36206
36207 // 33 bytes: public key data (0x02 + X or 0x03 + X)
36208 } else {
36209 var Q = ecurve.Point.decodeFrom(curve, buffer.slice(45, 78))
36210 // Q.compressed is assumed, if somehow this assumption is broken, `new HDNode` will throw
36211
36212 // Verify that the X coordinate in the public point corresponds to a point on the curve.
36213 // If not, the extended public key is invalid.
36214 curve.validate(Q)
36215
36216 keyPair = new ECPair(null, Q, { network: network })
36217 }
36218
36219 var hd = new HDNode(keyPair, chainCode)
36220 hd.depth = depth
36221 hd.index = index
36222 hd.parentFingerprint = parentFingerprint
36223
36224 return hd
36225 }
36226
36227 HDNode.prototype.getAddress = function () {
36228 return this.keyPair.getAddress()
36229 }
36230
36231 HDNode.prototype.getIdentifier = function () {
36232 return bcrypto.hash160(this.keyPair.getPublicKeyBuffer())
36233 }
36234
36235 HDNode.prototype.getFingerprint = function () {
36236 return this.getIdentifier().slice(0, 4)
36237 }
36238
36239 HDNode.prototype.getNetwork = function () {
36240 return this.keyPair.getNetwork()
36241 }
36242
36243 HDNode.prototype.getPublicKeyBuffer = function () {
36244 return this.keyPair.getPublicKeyBuffer()
36245 }
36246
36247 HDNode.prototype.neutered = function () {
36248 var neuteredKeyPair = new ECPair(null, this.keyPair.Q, {
36249 network: this.keyPair.network
36250 })
36251
36252 var neutered = new HDNode(neuteredKeyPair, this.chainCode)
36253 neutered.depth = this.depth
36254 neutered.index = this.index
36255 neutered.parentFingerprint = this.parentFingerprint
36256
36257 return neutered
36258 }
36259
36260 HDNode.prototype.sign = function (hash) {
36261 return this.keyPair.sign(hash)
36262 }
36263
36264 HDNode.prototype.verify = function (hash, signature) {
36265 return this.keyPair.verify(hash, signature)
36266 }
36267
36268 HDNode.prototype.toBase58 = function (__isPrivate) {
36269 if (__isPrivate !== undefined) throw new TypeError('Unsupported argument in 2.0.0')
36270
36271 // Version
36272 var network = this.keyPair.network
36273 var version = (!this.isNeutered()) ? network.bip32.private : network.bip32.public
36274 var buffer = Buffer.allocUnsafe(78)
36275
36276 // 4 bytes: version bytes
36277 buffer.writeUInt32BE(version, 0)
36278
36279 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
36280 buffer.writeUInt8(this.depth, 4)
36281
36282 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
36283 buffer.writeUInt32BE(this.parentFingerprint, 5)
36284
36285 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
36286 // This is encoded in big endian. (0x00000000 if master key)
36287 buffer.writeUInt32BE(this.index, 9)
36288
36289 // 32 bytes: the chain code
36290 this.chainCode.copy(buffer, 13)
36291
36292 // 33 bytes: the public key or private key data
36293 if (!this.isNeutered()) {
36294 // 0x00 + k for private keys
36295 buffer.writeUInt8(0, 45)
36296 this.keyPair.d.toBuffer(32).copy(buffer, 46)
36297
36298 // 33 bytes: the public key
36299 } else {
36300 // X9.62 encoding for public keys
36301 this.keyPair.getPublicKeyBuffer().copy(buffer, 45)
36302 }
36303
36304 return base58check.encode(buffer)
36305 }
36306
36307 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
36308 HDNode.prototype.derive = function (index) {
36309 typeforce(types.UInt32, index)
36310
36311 var isHardened = index >= HDNode.HIGHEST_BIT
36312 var data = Buffer.allocUnsafe(37)
36313
36314 // Hardened child
36315 if (isHardened) {
36316 if (this.isNeutered()) throw new TypeError('Could not derive hardened child key')
36317
36318 // data = 0x00 || ser256(kpar) || ser32(index)
36319 data[0] = 0x00
36320 this.keyPair.d.toBuffer(32).copy(data, 1)
36321 data.writeUInt32BE(index, 33)
36322
36323 // Normal child
36324 } else {
36325 // data = serP(point(kpar)) || ser32(index)
36326 // = serP(Kpar) || ser32(index)
36327 this.keyPair.getPublicKeyBuffer().copy(data, 0)
36328 data.writeUInt32BE(index, 33)
36329 }
36330
36331 var I = createHmac('sha512', this.chainCode).update(data).digest()
36332 var IL = I.slice(0, 32)
36333 var IR = I.slice(32)
36334
36335 var pIL = BigInteger.fromBuffer(IL)
36336
36337 // In case parse256(IL) >= n, proceed with the next value for i
36338 if (pIL.compareTo(curve.n) >= 0) {
36339 return this.derive(index + 1)
36340 }
36341
36342 // Private parent key -> private child key
36343 var derivedKeyPair
36344 if (!this.isNeutered()) {
36345 // ki = parse256(IL) + kpar (mod n)
36346 var ki = pIL.add(this.keyPair.d).mod(curve.n)
36347
36348 // In case ki == 0, proceed with the next value for i
36349 if (ki.signum() === 0) {
36350 return this.derive(index + 1)
36351 }
36352
36353 derivedKeyPair = new ECPair(ki, null, {
36354 network: this.keyPair.network
36355 })
36356
36357 // Public parent key -> public child key
36358 } else {
36359 // Ki = point(parse256(IL)) + Kpar
36360 // = G*IL + Kpar
36361 var Ki = curve.G.multiply(pIL).add(this.keyPair.Q)
36362
36363 // In case Ki is the point at infinity, proceed with the next value for i
36364 if (curve.isInfinity(Ki)) {
36365 return this.derive(index + 1)
36366 }
36367
36368 derivedKeyPair = new ECPair(null, Ki, {
36369 network: this.keyPair.network
36370 })
36371 }
36372
36373 var hd = new HDNode(derivedKeyPair, IR)
36374 hd.depth = this.depth + 1
36375 hd.index = index
36376 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
36377
36378 return hd
36379 }
36380
36381 HDNode.prototype.deriveHardened = function (index) {
36382 typeforce(types.UInt31, index)
36383
36384 // Only derives hardened private keys by default
36385 return this.derive(index + HDNode.HIGHEST_BIT)
36386 }
36387
36388 // Private === not neutered
36389 // Public === neutered
36390 HDNode.prototype.isNeutered = function () {
36391 return !(this.keyPair.d)
36392 }
36393
36394 HDNode.prototype.derivePath = function (path) {
36395 typeforce(types.BIP32Path, path)
36396
36397 var splitPath = path.split('/')
36398 if (splitPath[0] === 'm') {
36399 if (this.parentFingerprint) {
36400 throw new Error('Not a master node')
36401 }
36402
36403 splitPath = splitPath.slice(1)
36404 }
36405
36406 return splitPath.reduce(function (prevHd, indexStr) {
36407 var index
36408 if (indexStr.slice(-1) === "'") {
36409 index = parseInt(indexStr.slice(0, -1), 10)
36410 return prevHd.deriveHardened(index)
36411 } else {
36412 index = parseInt(indexStr, 10)
36413 return prevHd.derive(index)
36414 }
36415 }, this)
36416 }
36417
36418 module.exports = HDNode
36419
36420 },{"./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){
36421 var script = require('./script')
36422
36423 var templates = require('./templates')
36424 for (var key in templates) {
36425 script[key] = templates[key]
36426 }
36427
36428 module.exports = {
36429 bufferutils: require('./bufferutils'), // TODO: remove in 4.0.0
36430
36431 Block: require('./block'),
36432 ECPair: require('./ecpair'),
36433 ECSignature: require('./ecsignature'),
36434 HDNode: require('./hdnode'),
36435 Transaction: require('./transaction'),
36436 TransactionBuilder: require('./transaction_builder'),
36437
36438 address: require('./address'),
36439 crypto: require('./crypto'),
36440 networks: require('./networks'),
36441 opcodes: require('bitcoin-ops'),
36442 script: script
36443 }
36444
36445 },{"./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){
36446 // https://en.bitcoin.it/wiki/List_of_address_prefixes
36447 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
36448
36449 module.exports = {
36450 bitcoin: {
36451 messagePrefix: '\x18Bitcoin Signed Message:\n',
36452 bech32: 'bc',
36453 bip32: {
36454 public: 0x0488b21e,
36455 private: 0x0488ade4
36456 },
36457 pubKeyHash: 0x00,
36458 scriptHash: 0x05,
36459 wif: 0x80
36460 },
36461 testnet: {
36462 messagePrefix: '\x18Bitcoin Signed Message:\n',
36463 bech32: 'tb',
36464 bip32: {
36465 public: 0x043587cf,
36466 private: 0x04358394
36467 },
36468 pubKeyHash: 0x6f,
36469 scriptHash: 0xc4,
36470 wif: 0xef
36471 },
36472 litecoin: {
36473 messagePrefix: '\x19Litecoin Signed Message:\n',
36474 bip32: {
36475 public: 0x019da462,
36476 private: 0x019d9cfe
36477 },
36478 pubKeyHash: 0x30,
36479 scriptHash: 0x32,
36480 wif: 0xb0
36481 }
36482 }
36483
36484 },{}],54:[function(require,module,exports){
36485 var Buffer = require('safe-buffer').Buffer
36486 var bip66 = require('bip66')
36487 var pushdata = require('pushdata-bitcoin')
36488 var typeforce = require('typeforce')
36489 var types = require('./types')
36490 var scriptNumber = require('./script_number')
36491
36492 var OPS = require('bitcoin-ops')
36493 var REVERSE_OPS = require('bitcoin-ops/map')
36494 var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
36495
36496 function isOPInt (value) {
36497 return types.Number(value) &&
36498 ((value === OPS.OP_0) ||
36499 (value >= OPS.OP_1 && value <= OPS.OP_16) ||
36500 (value === OPS.OP_1NEGATE))
36501 }
36502
36503 function isPushOnlyChunk (value) {
36504 return types.Buffer(value) || isOPInt(value)
36505 }
36506
36507 function isPushOnly (value) {
36508 return types.Array(value) && value.every(isPushOnlyChunk)
36509 }
36510
36511 function asMinimalOP (buffer) {
36512 if (buffer.length === 0) return OPS.OP_0
36513 if (buffer.length !== 1) return
36514 if (buffer[0] >= 1 && buffer[0] <= 16) return OP_INT_BASE + buffer[0]
36515 if (buffer[0] === 0x81) return OPS.OP_1NEGATE
36516 }
36517
36518 function compile (chunks) {
36519 // TODO: remove me
36520 if (Buffer.isBuffer(chunks)) return chunks
36521
36522 typeforce(types.Array, chunks)
36523
36524 var bufferSize = chunks.reduce(function (accum, chunk) {
36525 // data chunk
36526 if (Buffer.isBuffer(chunk)) {
36527 // adhere to BIP62.3, minimal push policy
36528 if (chunk.length === 1 && asMinimalOP(chunk) !== undefined) {
36529 return accum + 1
36530 }
36531
36532 return accum + pushdata.encodingLength(chunk.length) + chunk.length
36533 }
36534
36535 // opcode
36536 return accum + 1
36537 }, 0.0)
36538
36539 var buffer = Buffer.allocUnsafe(bufferSize)
36540 var offset = 0
36541
36542 chunks.forEach(function (chunk) {
36543 // data chunk
36544 if (Buffer.isBuffer(chunk)) {
36545 // adhere to BIP62.3, minimal push policy
36546 var opcode = asMinimalOP(chunk)
36547 if (opcode !== undefined) {
36548 buffer.writeUInt8(opcode, offset)
36549 offset += 1
36550 return
36551 }
36552
36553 offset += pushdata.encode(buffer, chunk.length, offset)
36554 chunk.copy(buffer, offset)
36555 offset += chunk.length
36556
36557 // opcode
36558 } else {
36559 buffer.writeUInt8(chunk, offset)
36560 offset += 1
36561 }
36562 })
36563
36564 if (offset !== buffer.length) throw new Error('Could not decode chunks')
36565 return buffer
36566 }
36567
36568 function decompile (buffer) {
36569 // TODO: remove me
36570 if (types.Array(buffer)) return buffer
36571
36572 typeforce(types.Buffer, buffer)
36573
36574 var chunks = []
36575 var i = 0
36576
36577 while (i < buffer.length) {
36578 var opcode = buffer[i]
36579
36580 // data chunk
36581 if ((opcode > OPS.OP_0) && (opcode <= OPS.OP_PUSHDATA4)) {
36582 var d = pushdata.decode(buffer, i)
36583
36584 // did reading a pushDataInt fail? empty script
36585 if (d === null) return []
36586 i += d.size
36587
36588 // attempt to read too much data? empty script
36589 if (i + d.number > buffer.length) return []
36590
36591 var data = buffer.slice(i, i + d.number)
36592 i += d.number
36593
36594 // decompile minimally
36595 var op = asMinimalOP(data)
36596 if (op !== undefined) {
36597 chunks.push(op)
36598 } else {
36599 chunks.push(data)
36600 }
36601
36602 // opcode
36603 } else {
36604 chunks.push(opcode)
36605
36606 i += 1
36607 }
36608 }
36609
36610 return chunks
36611 }
36612
36613 function toASM (chunks) {
36614 if (Buffer.isBuffer(chunks)) {
36615 chunks = decompile(chunks)
36616 }
36617
36618 return chunks.map(function (chunk) {
36619 // data?
36620 if (Buffer.isBuffer(chunk)) {
36621 var op = asMinimalOP(chunk)
36622 if (op === undefined) return chunk.toString('hex')
36623 chunk = op
36624 }
36625
36626 // opcode!
36627 return REVERSE_OPS[chunk]
36628 }).join(' ')
36629 }
36630
36631 function fromASM (asm) {
36632 typeforce(types.String, asm)
36633
36634 return compile(asm.split(' ').map(function (chunkStr) {
36635 // opcode?
36636 if (OPS[chunkStr] !== undefined) return OPS[chunkStr]
36637 typeforce(types.Hex, chunkStr)
36638
36639 // data!
36640 return Buffer.from(chunkStr, 'hex')
36641 }))
36642 }
36643
36644 function toStack (chunks) {
36645 chunks = decompile(chunks)
36646 typeforce(isPushOnly, chunks)
36647
36648 return chunks.map(function (op) {
36649 if (Buffer.isBuffer(op)) return op
36650 if (op === OPS.OP_0) return Buffer.allocUnsafe(0)
36651
36652 return scriptNumber.encode(op - OP_INT_BASE)
36653 })
36654 }
36655
36656 function isCanonicalPubKey (buffer) {
36657 if (!Buffer.isBuffer(buffer)) return false
36658 if (buffer.length < 33) return false
36659
36660 switch (buffer[0]) {
36661 case 0x02:
36662 case 0x03:
36663 return buffer.length === 33
36664 case 0x04:
36665 return buffer.length === 65
36666 }
36667
36668 return false
36669 }
36670
36671 function isDefinedHashType (hashType) {
36672 var hashTypeMod = hashType & ~0x80
36673
36674 // return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE
36675 return hashTypeMod > 0x00 && hashTypeMod < 0x04
36676 }
36677
36678 function isCanonicalSignature (buffer) {
36679 if (!Buffer.isBuffer(buffer)) return false
36680 if (!isDefinedHashType(buffer[buffer.length - 1])) return false
36681
36682 return bip66.check(buffer.slice(0, -1))
36683 }
36684
36685 module.exports = {
36686 compile: compile,
36687 decompile: decompile,
36688 fromASM: fromASM,
36689 toASM: toASM,
36690 toStack: toStack,
36691
36692 number: require('./script_number'),
36693
36694 isCanonicalPubKey: isCanonicalPubKey,
36695 isCanonicalSignature: isCanonicalSignature,
36696 isPushOnly: isPushOnly,
36697 isDefinedHashType: isDefinedHashType
36698 }
36699
36700 },{"./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){
36701 var Buffer = require('safe-buffer').Buffer
36702
36703 function decode (buffer, maxLength, minimal) {
36704 maxLength = maxLength || 4
36705 minimal = minimal === undefined ? true : minimal
36706
36707 var length = buffer.length
36708 if (length === 0) return 0
36709 if (length > maxLength) throw new TypeError('Script number overflow')
36710 if (minimal) {
36711 if ((buffer[length - 1] & 0x7f) === 0) {
36712 if (length <= 1 || (buffer[length - 2] & 0x80) === 0) throw new Error('Non-minimally encoded script number')
36713 }
36714 }
36715
36716 // 40-bit
36717 if (length === 5) {
36718 var a = buffer.readUInt32LE(0)
36719 var b = buffer.readUInt8(4)
36720
36721 if (b & 0x80) return -(((b & ~0x80) * 0x100000000) + a)
36722 return (b * 0x100000000) + a
36723 }
36724
36725 var result = 0
36726
36727 // 32-bit / 24-bit / 16-bit / 8-bit
36728 for (var i = 0; i < length; ++i) {
36729 result |= buffer[i] << (8 * i)
36730 }
36731
36732 if (buffer[length - 1] & 0x80) return -(result & ~(0x80 << (8 * (length - 1))))
36733 return result
36734 }
36735
36736 function scriptNumSize (i) {
36737 return i > 0x7fffffff ? 5
36738 : i > 0x7fffff ? 4
36739 : i > 0x7fff ? 3
36740 : i > 0x7f ? 2
36741 : i > 0x00 ? 1
36742 : 0
36743 }
36744
36745 function encode (number) {
36746 var value = Math.abs(number)
36747 var size = scriptNumSize(value)
36748 var buffer = Buffer.allocUnsafe(size)
36749 var negative = number < 0
36750
36751 for (var i = 0; i < size; ++i) {
36752 buffer.writeUInt8(value & 0xff, i)
36753 value >>= 8
36754 }
36755
36756 if (buffer[size - 1] & 0x80) {
36757 buffer.writeUInt8(negative ? 0x80 : 0x00, size - 1)
36758 } else if (negative) {
36759 buffer[size - 1] |= 0x80
36760 }
36761
36762 return buffer
36763 }
36764
36765 module.exports = {
36766 decode: decode,
36767 encode: encode
36768 }
36769
36770 },{"safe-buffer":128}],56:[function(require,module,exports){
36771 var decompile = require('../script').decompile
36772 var multisig = require('./multisig')
36773 var nullData = require('./nulldata')
36774 var pubKey = require('./pubkey')
36775 var pubKeyHash = require('./pubkeyhash')
36776 var scriptHash = require('./scripthash')
36777 var witnessPubKeyHash = require('./witnesspubkeyhash')
36778 var witnessScriptHash = require('./witnessscripthash')
36779 var witnessCommitment = require('./witnesscommitment')
36780
36781 var types = {
36782 MULTISIG: 'multisig',
36783 NONSTANDARD: 'nonstandard',
36784 NULLDATA: 'nulldata',
36785 P2PK: 'pubkey',
36786 P2PKH: 'pubkeyhash',
36787 P2SH: 'scripthash',
36788 P2WPKH: 'witnesspubkeyhash',
36789 P2WSH: 'witnessscripthash',
36790 WITNESS_COMMITMENT: 'witnesscommitment'
36791 }
36792
36793 function classifyOutput (script) {
36794 if (witnessPubKeyHash.output.check(script)) return types.P2WPKH
36795 if (witnessScriptHash.output.check(script)) return types.P2WSH
36796 if (pubKeyHash.output.check(script)) return types.P2PKH
36797 if (scriptHash.output.check(script)) return types.P2SH
36798
36799 // XXX: optimization, below functions .decompile before use
36800 var chunks = decompile(script)
36801 if (multisig.output.check(chunks)) return types.MULTISIG
36802 if (pubKey.output.check(chunks)) return types.P2PK
36803 if (witnessCommitment.output.check(chunks)) return types.WITNESS_COMMITMENT
36804 if (nullData.output.check(chunks)) return types.NULLDATA
36805
36806 return types.NONSTANDARD
36807 }
36808
36809 function classifyInput (script, allowIncomplete) {
36810 // XXX: optimization, below functions .decompile before use
36811 var chunks = decompile(script)
36812
36813 if (pubKeyHash.input.check(chunks)) return types.P2PKH
36814 if (scriptHash.input.check(chunks, allowIncomplete)) return types.P2SH
36815 if (multisig.input.check(chunks, allowIncomplete)) return types.MULTISIG
36816 if (pubKey.input.check(chunks)) return types.P2PK
36817
36818 return types.NONSTANDARD
36819 }
36820
36821 function classifyWitness (script, allowIncomplete) {
36822 // XXX: optimization, below functions .decompile before use
36823 var chunks = decompile(script)
36824
36825 if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH
36826 if (witnessScriptHash.input.check(chunks, allowIncomplete)) return types.P2WSH
36827
36828 return types.NONSTANDARD
36829 }
36830
36831 module.exports = {
36832 classifyInput: classifyInput,
36833 classifyOutput: classifyOutput,
36834 classifyWitness: classifyWitness,
36835 multisig: multisig,
36836 nullData: nullData,
36837 pubKey: pubKey,
36838 pubKeyHash: pubKeyHash,
36839 scriptHash: scriptHash,
36840 witnessPubKeyHash: witnessPubKeyHash,
36841 witnessScriptHash: witnessScriptHash,
36842 witnessCommitment: witnessCommitment,
36843 types: types
36844 }
36845
36846 },{"../script":54,"./multisig":57,"./nulldata":60,"./pubkey":61,"./pubkeyhash":64,"./scripthash":67,"./witnesscommitment":70,"./witnesspubkeyhash":72,"./witnessscripthash":75}],57:[function(require,module,exports){
36847 module.exports = {
36848 input: require('./input'),
36849 output: require('./output')
36850 }
36851
36852 },{"./input":58,"./output":59}],58:[function(require,module,exports){
36853 // OP_0 [signatures ...]
36854
36855 var Buffer = require('safe-buffer').Buffer
36856 var bscript = require('../../script')
36857 var p2mso = require('./output')
36858 var typeforce = require('typeforce')
36859 var OPS = require('bitcoin-ops')
36860
36861 function partialSignature (value) {
36862 return value === OPS.OP_0 || bscript.isCanonicalSignature(value)
36863 }
36864
36865 function check (script, allowIncomplete) {
36866 var chunks = bscript.decompile(script)
36867 if (chunks.length < 2) return false
36868 if (chunks[0] !== OPS.OP_0) return false
36869
36870 if (allowIncomplete) {
36871 return chunks.slice(1).every(partialSignature)
36872 }
36873
36874 return chunks.slice(1).every(bscript.isCanonicalSignature)
36875 }
36876 check.toJSON = function () { return 'multisig input' }
36877
36878 var EMPTY_BUFFER = Buffer.allocUnsafe(0)
36879
36880 function encodeStack (signatures, scriptPubKey) {
36881 typeforce([partialSignature], signatures)
36882
36883 if (scriptPubKey) {
36884 var scriptData = p2mso.decode(scriptPubKey)
36885
36886 if (signatures.length < scriptData.m) {
36887 throw new TypeError('Not enough signatures provided')
36888 }
36889
36890 if (signatures.length > scriptData.pubKeys.length) {
36891 throw new TypeError('Too many signatures provided')
36892 }
36893 }
36894
36895 return [].concat(EMPTY_BUFFER, signatures.map(function (sig) {
36896 if (sig === OPS.OP_0) {
36897 return EMPTY_BUFFER
36898 }
36899 return sig
36900 }))
36901 }
36902
36903 function encode (signatures, scriptPubKey) {
36904 return bscript.compile(encodeStack(signatures, scriptPubKey))
36905 }
36906
36907 function decodeStack (stack, allowIncomplete) {
36908 typeforce(check, stack, allowIncomplete)
36909 return stack.slice(1)
36910 }
36911
36912 function decode (buffer, allowIncomplete) {
36913 var stack = bscript.decompile(buffer)
36914 return decodeStack(stack, allowIncomplete)
36915 }
36916
36917 module.exports = {
36918 check: check,
36919 decode: decode,
36920 decodeStack: decodeStack,
36921 encode: encode,
36922 encodeStack: encodeStack
36923 }
36924
36925 },{"../../script":54,"./output":59,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139}],59:[function(require,module,exports){
36926 // m [pubKeys ...] n OP_CHECKMULTISIG
36927
36928 var bscript = require('../../script')
36929 var types = require('../../types')
36930 var typeforce = require('typeforce')
36931 var OPS = require('bitcoin-ops')
36932 var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
36933
36934 function check (script, allowIncomplete) {
36935 var chunks = bscript.decompile(script)
36936
36937 if (chunks.length < 4) return false
36938 if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG) return false
36939 if (!types.Number(chunks[0])) return false
36940 if (!types.Number(chunks[chunks.length - 2])) return false
36941 var m = chunks[0] - OP_INT_BASE
36942 var n = chunks[chunks.length - 2] - OP_INT_BASE
36943
36944 if (m <= 0) return false
36945 if (n > 16) return false
36946 if (m > n) return false
36947 if (n !== chunks.length - 3) return false
36948 if (allowIncomplete) return true
36949
36950 var keys = chunks.slice(1, -2)
36951 return keys.every(bscript.isCanonicalPubKey)
36952 }
36953 check.toJSON = function () { return 'multi-sig output' }
36954
36955 function encode (m, pubKeys) {
36956 typeforce({
36957 m: types.Number,
36958 pubKeys: [bscript.isCanonicalPubKey]
36959 }, {
36960 m: m,
36961 pubKeys: pubKeys
36962 })
36963
36964 var n = pubKeys.length
36965 if (n < m) throw new TypeError('Not enough pubKeys provided')
36966
36967 return bscript.compile([].concat(
36968 OP_INT_BASE + m,
36969 pubKeys,
36970 OP_INT_BASE + n,
36971 OPS.OP_CHECKMULTISIG
36972 ))
36973 }
36974
36975 function decode (buffer, allowIncomplete) {
36976 var chunks = bscript.decompile(buffer)
36977 typeforce(check, chunks, allowIncomplete)
36978
36979 return {
36980 m: chunks[0] - OP_INT_BASE,
36981 pubKeys: chunks.slice(1, -2)
36982 }
36983 }
36984
36985 module.exports = {
36986 check: check,
36987 decode: decode,
36988 encode: encode
36989 }
36990
36991 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],60:[function(require,module,exports){
36992 // OP_RETURN {data}
36993
36994 var bscript = require('../script')
36995 var types = require('../types')
36996 var typeforce = require('typeforce')
36997 var OPS = require('bitcoin-ops')
36998
36999 function check (script) {
37000 var buffer = bscript.compile(script)
37001
37002 return buffer.length > 1 &&
37003 buffer[0] === OPS.OP_RETURN
37004 }
37005 check.toJSON = function () { return 'null data output' }
37006
37007 function encode (data) {
37008 typeforce(types.Buffer, data)
37009
37010 return bscript.compile([OPS.OP_RETURN, data])
37011 }
37012
37013 function decode (buffer) {
37014 typeforce(check, buffer)
37015
37016 return buffer.slice(2)
37017 }
37018
37019 module.exports = {
37020 output: {
37021 check: check,
37022 decode: decode,
37023 encode: encode
37024 }
37025 }
37026
37027 },{"../script":54,"../types":80,"bitcoin-ops":42,"typeforce":139}],61:[function(require,module,exports){
37028 arguments[4][57][0].apply(exports,arguments)
37029 },{"./input":62,"./output":63,"dup":57}],62:[function(require,module,exports){
37030 // {signature}
37031
37032 var bscript = require('../../script')
37033 var typeforce = require('typeforce')
37034
37035 function check (script) {
37036 var chunks = bscript.decompile(script)
37037
37038 return chunks.length === 1 &&
37039 bscript.isCanonicalSignature(chunks[0])
37040 }
37041 check.toJSON = function () { return 'pubKey input' }
37042
37043 function encodeStack (signature) {
37044 typeforce(bscript.isCanonicalSignature, signature)
37045 return [signature]
37046 }
37047
37048 function encode (signature) {
37049 return bscript.compile(encodeStack(signature))
37050 }
37051
37052 function decodeStack (stack) {
37053 typeforce(check, stack)
37054 return stack[0]
37055 }
37056
37057 function decode (buffer) {
37058 var stack = bscript.decompile(buffer)
37059 return decodeStack(stack)
37060 }
37061
37062 module.exports = {
37063 check: check,
37064 decode: decode,
37065 decodeStack: decodeStack,
37066 encode: encode,
37067 encodeStack: encodeStack
37068 }
37069
37070 },{"../../script":54,"typeforce":139}],63:[function(require,module,exports){
37071 // {pubKey} OP_CHECKSIG
37072
37073 var bscript = require('../../script')
37074 var typeforce = require('typeforce')
37075 var OPS = require('bitcoin-ops')
37076
37077 function check (script) {
37078 var chunks = bscript.decompile(script)
37079
37080 return chunks.length === 2 &&
37081 bscript.isCanonicalPubKey(chunks[0]) &&
37082 chunks[1] === OPS.OP_CHECKSIG
37083 }
37084 check.toJSON = function () { return 'pubKey output' }
37085
37086 function encode (pubKey) {
37087 typeforce(bscript.isCanonicalPubKey, pubKey)
37088
37089 return bscript.compile([pubKey, OPS.OP_CHECKSIG])
37090 }
37091
37092 function decode (buffer) {
37093 var chunks = bscript.decompile(buffer)
37094 typeforce(check, chunks)
37095
37096 return chunks[0]
37097 }
37098
37099 module.exports = {
37100 check: check,
37101 decode: decode,
37102 encode: encode
37103 }
37104
37105 },{"../../script":54,"bitcoin-ops":42,"typeforce":139}],64:[function(require,module,exports){
37106 arguments[4][57][0].apply(exports,arguments)
37107 },{"./input":65,"./output":66,"dup":57}],65:[function(require,module,exports){
37108 // {signature} {pubKey}
37109
37110 var bscript = require('../../script')
37111 var typeforce = require('typeforce')
37112
37113 function check (script) {
37114 var chunks = bscript.decompile(script)
37115
37116 return chunks.length === 2 &&
37117 bscript.isCanonicalSignature(chunks[0]) &&
37118 bscript.isCanonicalPubKey(chunks[1])
37119 }
37120 check.toJSON = function () { return 'pubKeyHash input' }
37121
37122 function encodeStack (signature, pubKey) {
37123 typeforce({
37124 signature: bscript.isCanonicalSignature,
37125 pubKey: bscript.isCanonicalPubKey
37126 }, {
37127 signature: signature,
37128 pubKey: pubKey
37129 })
37130
37131 return [signature, pubKey]
37132 }
37133
37134 function encode (signature, pubKey) {
37135 return bscript.compile(encodeStack(signature, pubKey))
37136 }
37137
37138 function decodeStack (stack) {
37139 typeforce(check, stack)
37140
37141 return {
37142 signature: stack[0],
37143 pubKey: stack[1]
37144 }
37145 }
37146
37147 function decode (buffer) {
37148 var stack = bscript.decompile(buffer)
37149 return decodeStack(stack)
37150 }
37151
37152 module.exports = {
37153 check: check,
37154 decode: decode,
37155 decodeStack: decodeStack,
37156 encode: encode,
37157 encodeStack: encodeStack
37158 }
37159
37160 },{"../../script":54,"typeforce":139}],66:[function(require,module,exports){
37161 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
37162
37163 var bscript = require('../../script')
37164 var types = require('../../types')
37165 var typeforce = require('typeforce')
37166 var OPS = require('bitcoin-ops')
37167
37168 function check (script) {
37169 var buffer = bscript.compile(script)
37170
37171 return buffer.length === 25 &&
37172 buffer[0] === OPS.OP_DUP &&
37173 buffer[1] === OPS.OP_HASH160 &&
37174 buffer[2] === 0x14 &&
37175 buffer[23] === OPS.OP_EQUALVERIFY &&
37176 buffer[24] === OPS.OP_CHECKSIG
37177 }
37178 check.toJSON = function () { return 'pubKeyHash output' }
37179
37180 function encode (pubKeyHash) {
37181 typeforce(types.Hash160bit, pubKeyHash)
37182
37183 return bscript.compile([
37184 OPS.OP_DUP,
37185 OPS.OP_HASH160,
37186 pubKeyHash,
37187 OPS.OP_EQUALVERIFY,
37188 OPS.OP_CHECKSIG
37189 ])
37190 }
37191
37192 function decode (buffer) {
37193 typeforce(check, buffer)
37194
37195 return buffer.slice(3, 23)
37196 }
37197
37198 module.exports = {
37199 check: check,
37200 decode: decode,
37201 encode: encode
37202 }
37203
37204 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],67:[function(require,module,exports){
37205 arguments[4][57][0].apply(exports,arguments)
37206 },{"./input":68,"./output":69,"dup":57}],68:[function(require,module,exports){
37207 // <scriptSig> {serialized scriptPubKey script}
37208
37209 var Buffer = require('safe-buffer').Buffer
37210 var bscript = require('../../script')
37211 var typeforce = require('typeforce')
37212
37213 var p2ms = require('../multisig/')
37214 var p2pk = require('../pubkey/')
37215 var p2pkh = require('../pubkeyhash/')
37216 var p2wpkho = require('../witnesspubkeyhash/output')
37217 var p2wsho = require('../witnessscripthash/output')
37218
37219 function check (script, allowIncomplete) {
37220 var chunks = bscript.decompile(script)
37221 if (chunks.length < 1) return false
37222
37223 var lastChunk = chunks[chunks.length - 1]
37224 if (!Buffer.isBuffer(lastChunk)) return false
37225
37226 var scriptSigChunks = bscript.decompile(bscript.compile(chunks.slice(0, -1)))
37227 var redeemScriptChunks = bscript.decompile(lastChunk)
37228
37229 // is redeemScript a valid script?
37230 if (redeemScriptChunks.length === 0) return false
37231
37232 // is redeemScriptSig push only?
37233 if (!bscript.isPushOnly(scriptSigChunks)) return false
37234
37235 // is witness?
37236 if (chunks.length === 1) {
37237 return p2wsho.check(redeemScriptChunks) ||
37238 p2wpkho.check(redeemScriptChunks)
37239 }
37240
37241 // match types
37242 if (p2pkh.input.check(scriptSigChunks) &&
37243 p2pkh.output.check(redeemScriptChunks)) return true
37244
37245 if (p2ms.input.check(scriptSigChunks, allowIncomplete) &&
37246 p2ms.output.check(redeemScriptChunks)) return true
37247
37248 if (p2pk.input.check(scriptSigChunks) &&
37249 p2pk.output.check(redeemScriptChunks)) return true
37250
37251 return false
37252 }
37253 check.toJSON = function () { return 'scriptHash input' }
37254
37255 function encodeStack (redeemScriptStack, redeemScript) {
37256 var serializedScriptPubKey = bscript.compile(redeemScript)
37257
37258 return [].concat(redeemScriptStack, serializedScriptPubKey)
37259 }
37260
37261 function encode (redeemScriptSig, redeemScript) {
37262 var redeemScriptStack = bscript.decompile(redeemScriptSig)
37263
37264 return bscript.compile(encodeStack(redeemScriptStack, redeemScript))
37265 }
37266
37267 function decodeStack (stack) {
37268 typeforce(check, stack)
37269
37270 return {
37271 redeemScriptStack: stack.slice(0, -1),
37272 redeemScript: stack[stack.length - 1]
37273 }
37274 }
37275
37276 function decode (buffer) {
37277 var stack = bscript.decompile(buffer)
37278 var result = decodeStack(stack)
37279 result.redeemScriptSig = bscript.compile(result.redeemScriptStack)
37280 delete result.redeemScriptStack
37281 return result
37282 }
37283
37284 module.exports = {
37285 check: check,
37286 decode: decode,
37287 decodeStack: decodeStack,
37288 encode: encode,
37289 encodeStack: encodeStack
37290 }
37291
37292 },{"../../script":54,"../multisig/":57,"../pubkey/":61,"../pubkeyhash/":64,"../witnesspubkeyhash/output":74,"../witnessscripthash/output":77,"safe-buffer":128,"typeforce":139}],69:[function(require,module,exports){
37293 // OP_HASH160 {scriptHash} OP_EQUAL
37294
37295 var bscript = require('../../script')
37296 var types = require('../../types')
37297 var typeforce = require('typeforce')
37298 var OPS = require('bitcoin-ops')
37299
37300 function check (script) {
37301 var buffer = bscript.compile(script)
37302
37303 return buffer.length === 23 &&
37304 buffer[0] === OPS.OP_HASH160 &&
37305 buffer[1] === 0x14 &&
37306 buffer[22] === OPS.OP_EQUAL
37307 }
37308 check.toJSON = function () { return 'scriptHash output' }
37309
37310 function encode (scriptHash) {
37311 typeforce(types.Hash160bit, scriptHash)
37312
37313 return bscript.compile([OPS.OP_HASH160, scriptHash, OPS.OP_EQUAL])
37314 }
37315
37316 function decode (buffer) {
37317 typeforce(check, buffer)
37318
37319 return buffer.slice(2, 22)
37320 }
37321
37322 module.exports = {
37323 check: check,
37324 decode: decode,
37325 encode: encode
37326 }
37327
37328 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],70:[function(require,module,exports){
37329 module.exports = {
37330 output: require('./output')
37331 }
37332
37333 },{"./output":71}],71:[function(require,module,exports){
37334 // OP_RETURN {aa21a9ed} {commitment}
37335
37336 var Buffer = require('safe-buffer').Buffer
37337 var bscript = require('../../script')
37338 var types = require('../../types')
37339 var typeforce = require('typeforce')
37340 var OPS = require('bitcoin-ops')
37341
37342 var HEADER = Buffer.from('aa21a9ed', 'hex')
37343
37344 function check (script) {
37345 var buffer = bscript.compile(script)
37346
37347 return buffer.length > 37 &&
37348 buffer[0] === OPS.OP_RETURN &&
37349 buffer[1] === 0x24 &&
37350 buffer.slice(2, 6).equals(HEADER)
37351 }
37352
37353 check.toJSON = function () { return 'Witness commitment output' }
37354
37355 function encode (commitment) {
37356 typeforce(types.Hash256bit, commitment)
37357
37358 var buffer = Buffer.allocUnsafe(36)
37359 HEADER.copy(buffer, 0)
37360 commitment.copy(buffer, 4)
37361
37362 return bscript.compile([OPS.OP_RETURN, buffer])
37363 }
37364
37365 function decode (buffer) {
37366 typeforce(check, buffer)
37367
37368 return bscript.decompile(buffer)[1].slice(4, 36)
37369 }
37370
37371 module.exports = {
37372 check: check,
37373 decode: decode,
37374 encode: encode
37375 }
37376
37377 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139}],72:[function(require,module,exports){
37378 arguments[4][57][0].apply(exports,arguments)
37379 },{"./input":73,"./output":74,"dup":57}],73:[function(require,module,exports){
37380 // {signature} {pubKey}
37381
37382 var bscript = require('../../script')
37383 var typeforce = require('typeforce')
37384
37385 function isCompressedCanonicalPubKey (pubKey) {
37386 return bscript.isCanonicalPubKey(pubKey) && pubKey.length === 33
37387 }
37388
37389 function check (script) {
37390 var chunks = bscript.decompile(script)
37391
37392 return chunks.length === 2 &&
37393 bscript.isCanonicalSignature(chunks[0]) &&
37394 isCompressedCanonicalPubKey(chunks[1])
37395 }
37396 check.toJSON = function () { return 'witnessPubKeyHash input' }
37397
37398 function encodeStack (signature, pubKey) {
37399 typeforce({
37400 signature: bscript.isCanonicalSignature,
37401 pubKey: isCompressedCanonicalPubKey
37402 }, {
37403 signature: signature,
37404 pubKey: pubKey
37405 })
37406
37407 return [signature, pubKey]
37408 }
37409
37410 function decodeStack (stack) {
37411 typeforce(check, stack)
37412
37413 return {
37414 signature: stack[0],
37415 pubKey: stack[1]
37416 }
37417 }
37418
37419 module.exports = {
37420 check: check,
37421 decodeStack: decodeStack,
37422 encodeStack: encodeStack
37423 }
37424
37425 },{"../../script":54,"typeforce":139}],74:[function(require,module,exports){
37426 // OP_0 {pubKeyHash}
37427
37428 var bscript = require('../../script')
37429 var types = require('../../types')
37430 var typeforce = require('typeforce')
37431 var OPS = require('bitcoin-ops')
37432
37433 function check (script) {
37434 var buffer = bscript.compile(script)
37435
37436 return buffer.length === 22 &&
37437 buffer[0] === OPS.OP_0 &&
37438 buffer[1] === 0x14
37439 }
37440 check.toJSON = function () { return 'Witness pubKeyHash output' }
37441
37442 function encode (pubKeyHash) {
37443 typeforce(types.Hash160bit, pubKeyHash)
37444
37445 return bscript.compile([OPS.OP_0, pubKeyHash])
37446 }
37447
37448 function decode (buffer) {
37449 typeforce(check, buffer)
37450
37451 return buffer.slice(2)
37452 }
37453
37454 module.exports = {
37455 check: check,
37456 decode: decode,
37457 encode: encode
37458 }
37459
37460 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],75:[function(require,module,exports){
37461 arguments[4][57][0].apply(exports,arguments)
37462 },{"./input":76,"./output":77,"dup":57}],76:[function(require,module,exports){
37463 (function (Buffer){
37464 // <scriptSig> {serialized scriptPubKey script}
37465
37466 var bscript = require('../../script')
37467 var types = require('../../types')
37468 var typeforce = require('typeforce')
37469
37470 var p2ms = require('../multisig/')
37471 var p2pk = require('../pubkey/')
37472 var p2pkh = require('../pubkeyhash/')
37473
37474 function check (chunks, allowIncomplete) {
37475 typeforce(types.Array, chunks)
37476 if (chunks.length < 1) return false
37477
37478 var witnessScript = chunks[chunks.length - 1]
37479 if (!Buffer.isBuffer(witnessScript)) return false
37480
37481 var witnessScriptChunks = bscript.decompile(witnessScript)
37482
37483 // is witnessScript a valid script?
37484 if (witnessScriptChunks.length === 0) return false
37485
37486 var witnessRawScriptSig = bscript.compile(chunks.slice(0, -1))
37487
37488 // match types
37489 if (p2pkh.input.check(witnessRawScriptSig) &&
37490 p2pkh.output.check(witnessScriptChunks)) return true
37491
37492 if (p2ms.input.check(witnessRawScriptSig, allowIncomplete) &&
37493 p2ms.output.check(witnessScriptChunks)) return true
37494
37495 if (p2pk.input.check(witnessRawScriptSig) &&
37496 p2pk.output.check(witnessScriptChunks)) return true
37497
37498 return false
37499 }
37500 check.toJSON = function () { return 'witnessScriptHash input' }
37501
37502 function encodeStack (witnessData, witnessScript) {
37503 typeforce({
37504 witnessData: [types.Buffer],
37505 witnessScript: types.Buffer
37506 }, {
37507 witnessData: witnessData,
37508 witnessScript: witnessScript
37509 })
37510
37511 return [].concat(witnessData, witnessScript)
37512 }
37513
37514 function decodeStack (chunks) {
37515 typeforce(check, chunks)
37516 return {
37517 witnessData: chunks.slice(0, -1),
37518 witnessScript: chunks[chunks.length - 1]
37519 }
37520 }
37521
37522 module.exports = {
37523 check: check,
37524 decodeStack: decodeStack,
37525 encodeStack: encodeStack
37526 }
37527
37528 }).call(this,{"isBuffer":require("../../../../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
37529 },{"../../../../../../../../.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){
37530 // OP_0 {scriptHash}
37531
37532 var bscript = require('../../script')
37533 var types = require('../../types')
37534 var typeforce = require('typeforce')
37535 var OPS = require('bitcoin-ops')
37536
37537 function check (script) {
37538 var buffer = bscript.compile(script)
37539
37540 return buffer.length === 34 &&
37541 buffer[0] === OPS.OP_0 &&
37542 buffer[1] === 0x20
37543 }
37544 check.toJSON = function () { return 'Witness scriptHash output' }
37545
37546 function encode (scriptHash) {
37547 typeforce(types.Hash256bit, scriptHash)
37548
37549 return bscript.compile([OPS.OP_0, scriptHash])
37550 }
37551
37552 function decode (buffer) {
37553 typeforce(check, buffer)
37554
37555 return buffer.slice(2)
37556 }
37557
37558 module.exports = {
37559 check: check,
37560 decode: decode,
37561 encode: encode
37562 }
37563
37564 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":139}],78:[function(require,module,exports){
37565 var Buffer = require('safe-buffer').Buffer
37566 var bcrypto = require('./crypto')
37567 var bscript = require('./script')
37568 var bufferutils = require('./bufferutils')
37569 var opcodes = require('bitcoin-ops')
37570 var typeforce = require('typeforce')
37571 var types = require('./types')
37572 var varuint = require('varuint-bitcoin')
37573
37574 function varSliceSize (someScript) {
37575 var length = someScript.length
37576
37577 return varuint.encodingLength(length) + length
37578 }
37579
37580 function vectorSize (someVector) {
37581 var length = someVector.length
37582
37583 return varuint.encodingLength(length) + someVector.reduce(function (sum, witness) {
37584 return sum + varSliceSize(witness)
37585 }, 0)
37586 }
37587
37588 function Transaction () {
37589 this.version = 1
37590 this.locktime = 0
37591 this.ins = []
37592 this.outs = []
37593 }
37594
37595 Transaction.DEFAULT_SEQUENCE = 0xffffffff
37596 Transaction.SIGHASH_ALL = 0x01
37597 Transaction.SIGHASH_NONE = 0x02
37598 Transaction.SIGHASH_SINGLE = 0x03
37599 Transaction.SIGHASH_ANYONECANPAY = 0x80
37600 Transaction.ADVANCED_TRANSACTION_MARKER = 0x00
37601 Transaction.ADVANCED_TRANSACTION_FLAG = 0x01
37602
37603 var EMPTY_SCRIPT = Buffer.allocUnsafe(0)
37604 var EMPTY_WITNESS = []
37605 var ZERO = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
37606 var ONE = Buffer.from('0000000000000000000000000000000000000000000000000000000000000001', 'hex')
37607 var VALUE_UINT64_MAX = Buffer.from('ffffffffffffffff', 'hex')
37608 var BLANK_OUTPUT = {
37609 script: EMPTY_SCRIPT,
37610 valueBuffer: VALUE_UINT64_MAX
37611 }
37612
37613 Transaction.fromBuffer = function (buffer, __noStrict) {
37614 var offset = 0
37615 function readSlice (n) {
37616 offset += n
37617 return buffer.slice(offset - n, offset)
37618 }
37619
37620 function readUInt32 () {
37621 var i = buffer.readUInt32LE(offset)
37622 offset += 4
37623 return i
37624 }
37625
37626 function readInt32 () {
37627 var i = buffer.readInt32LE(offset)
37628 offset += 4
37629 return i
37630 }
37631
37632 function readUInt64 () {
37633 var i = bufferutils.readUInt64LE(buffer, offset)
37634 offset += 8
37635 return i
37636 }
37637
37638 function readVarInt () {
37639 var vi = varuint.decode(buffer, offset)
37640 offset += varuint.decode.bytes
37641 return vi
37642 }
37643
37644 function readVarSlice () {
37645 return readSlice(readVarInt())
37646 }
37647
37648 function readVector () {
37649 var count = readVarInt()
37650 var vector = []
37651 for (var i = 0; i < count; i++) vector.push(readVarSlice())
37652 return vector
37653 }
37654
37655 var tx = new Transaction()
37656 tx.version = readInt32()
37657
37658 var marker = buffer.readUInt8(offset)
37659 var flag = buffer.readUInt8(offset + 1)
37660
37661 var hasWitnesses = false
37662 if (marker === Transaction.ADVANCED_TRANSACTION_MARKER &&
37663 flag === Transaction.ADVANCED_TRANSACTION_FLAG) {
37664 offset += 2
37665 hasWitnesses = true
37666 }
37667
37668 var vinLen = readVarInt()
37669 for (var i = 0; i < vinLen; ++i) {
37670 tx.ins.push({
37671 hash: readSlice(32),
37672 index: readUInt32(),
37673 script: readVarSlice(),
37674 sequence: readUInt32(),
37675 witness: EMPTY_WITNESS
37676 })
37677 }
37678
37679 var voutLen = readVarInt()
37680 for (i = 0; i < voutLen; ++i) {
37681 tx.outs.push({
37682 value: readUInt64(),
37683 script: readVarSlice()
37684 })
37685 }
37686
37687 if (hasWitnesses) {
37688 for (i = 0; i < vinLen; ++i) {
37689 tx.ins[i].witness = readVector()
37690 }
37691
37692 // was this pointless?
37693 if (!tx.hasWitnesses()) throw new Error('Transaction has superfluous witness data')
37694 }
37695
37696 tx.locktime = readUInt32()
37697
37698 if (__noStrict) return tx
37699 if (offset !== buffer.length) throw new Error('Transaction has unexpected data')
37700
37701 return tx
37702 }
37703
37704 Transaction.fromHex = function (hex) {
37705 return Transaction.fromBuffer(Buffer.from(hex, 'hex'))
37706 }
37707
37708 Transaction.isCoinbaseHash = function (buffer) {
37709 typeforce(types.Hash256bit, buffer)
37710 for (var i = 0; i < 32; ++i) {
37711 if (buffer[i] !== 0) return false
37712 }
37713 return true
37714 }
37715
37716 Transaction.prototype.isCoinbase = function () {
37717 return this.ins.length === 1 && Transaction.isCoinbaseHash(this.ins[0].hash)
37718 }
37719
37720 Transaction.prototype.addInput = function (hash, index, sequence, scriptSig) {
37721 typeforce(types.tuple(
37722 types.Hash256bit,
37723 types.UInt32,
37724 types.maybe(types.UInt32),
37725 types.maybe(types.Buffer)
37726 ), arguments)
37727
37728 if (types.Null(sequence)) {
37729 sequence = Transaction.DEFAULT_SEQUENCE
37730 }
37731
37732 // Add the input and return the input's index
37733 return (this.ins.push({
37734 hash: hash,
37735 index: index,
37736 script: scriptSig || EMPTY_SCRIPT,
37737 sequence: sequence,
37738 witness: EMPTY_WITNESS
37739 }) - 1)
37740 }
37741
37742 Transaction.prototype.addOutput = function (scriptPubKey, value) {
37743 typeforce(types.tuple(types.Buffer, types.Satoshi), arguments)
37744
37745 // Add the output and return the output's index
37746 return (this.outs.push({
37747 script: scriptPubKey,
37748 value: value
37749 }) - 1)
37750 }
37751
37752 Transaction.prototype.hasWitnesses = function () {
37753 return this.ins.some(function (x) {
37754 return x.witness.length !== 0
37755 })
37756 }
37757
37758 Transaction.prototype.weight = function () {
37759 var base = this.__byteLength(false)
37760 var total = this.__byteLength(true)
37761 return base * 3 + total
37762 }
37763
37764 Transaction.prototype.virtualSize = function () {
37765 return Math.ceil(this.weight() / 4)
37766 }
37767
37768 Transaction.prototype.byteLength = function () {
37769 return this.__byteLength(true)
37770 }
37771
37772 Transaction.prototype.__byteLength = function (__allowWitness) {
37773 var hasWitnesses = __allowWitness && this.hasWitnesses()
37774
37775 return (
37776 (hasWitnesses ? 10 : 8) +
37777 varuint.encodingLength(this.ins.length) +
37778 varuint.encodingLength(this.outs.length) +
37779 this.ins.reduce(function (sum, input) { return sum + 40 + varSliceSize(input.script) }, 0) +
37780 this.outs.reduce(function (sum, output) { return sum + 8 + varSliceSize(output.script) }, 0) +
37781 (hasWitnesses ? this.ins.reduce(function (sum, input) { return sum + vectorSize(input.witness) }, 0) : 0)
37782 )
37783 }
37784
37785 Transaction.prototype.clone = function () {
37786 var newTx = new Transaction()
37787 newTx.version = this.version
37788 newTx.locktime = this.locktime
37789
37790 newTx.ins = this.ins.map(function (txIn) {
37791 return {
37792 hash: txIn.hash,
37793 index: txIn.index,
37794 script: txIn.script,
37795 sequence: txIn.sequence,
37796 witness: txIn.witness
37797 }
37798 })
37799
37800 newTx.outs = this.outs.map(function (txOut) {
37801 return {
37802 script: txOut.script,
37803 value: txOut.value
37804 }
37805 })
37806
37807 return newTx
37808 }
37809
37810 /**
37811 * Hash transaction for signing a specific input.
37812 *
37813 * Bitcoin uses a different hash for each signed transaction input.
37814 * This method copies the transaction, makes the necessary changes based on the
37815 * hashType, and then hashes the result.
37816 * This hash can then be used to sign the provided transaction input.
37817 */
37818 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
37819 typeforce(types.tuple(types.UInt32, types.Buffer, /* types.UInt8 */ types.Number), arguments)
37820
37821 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29
37822 if (inIndex >= this.ins.length) return ONE
37823
37824 // ignore OP_CODESEPARATOR
37825 var ourScript = bscript.compile(bscript.decompile(prevOutScript).filter(function (x) {
37826 return x !== opcodes.OP_CODESEPARATOR
37827 }))
37828
37829 var txTmp = this.clone()
37830
37831 // SIGHASH_NONE: ignore all outputs? (wildcard payee)
37832 if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) {
37833 txTmp.outs = []
37834
37835 // ignore sequence numbers (except at inIndex)
37836 txTmp.ins.forEach(function (input, i) {
37837 if (i === inIndex) return
37838
37839 input.sequence = 0
37840 })
37841
37842 // SIGHASH_SINGLE: ignore all outputs, except at the same index?
37843 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) {
37844 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60
37845 if (inIndex >= this.outs.length) return ONE
37846
37847 // truncate outputs after
37848 txTmp.outs.length = inIndex + 1
37849
37850 // "blank" outputs before
37851 for (var i = 0; i < inIndex; i++) {
37852 txTmp.outs[i] = BLANK_OUTPUT
37853 }
37854
37855 // ignore sequence numbers (except at inIndex)
37856 txTmp.ins.forEach(function (input, y) {
37857 if (y === inIndex) return
37858
37859 input.sequence = 0
37860 })
37861 }
37862
37863 // SIGHASH_ANYONECANPAY: ignore inputs entirely?
37864 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
37865 txTmp.ins = [txTmp.ins[inIndex]]
37866 txTmp.ins[0].script = ourScript
37867
37868 // SIGHASH_ALL: only ignore input scripts
37869 } else {
37870 // "blank" others input scripts
37871 txTmp.ins.forEach(function (input) { input.script = EMPTY_SCRIPT })
37872 txTmp.ins[inIndex].script = ourScript
37873 }
37874
37875 // serialize and hash
37876 var buffer = Buffer.allocUnsafe(txTmp.__byteLength(false) + 4)
37877 buffer.writeInt32LE(hashType, buffer.length - 4)
37878 txTmp.__toBuffer(buffer, 0, false)
37879
37880 return bcrypto.hash256(buffer)
37881 }
37882
37883 Transaction.prototype.hashForWitnessV0 = function (inIndex, prevOutScript, value, hashType) {
37884 typeforce(types.tuple(types.UInt32, types.Buffer, types.Satoshi, types.UInt32), arguments)
37885
37886 var tbuffer, toffset
37887 function writeSlice (slice) { toffset += slice.copy(tbuffer, toffset) }
37888 function writeUInt32 (i) { toffset = tbuffer.writeUInt32LE(i, toffset) }
37889 function writeUInt64 (i) { toffset = bufferutils.writeUInt64LE(tbuffer, i, toffset) }
37890 function writeVarInt (i) {
37891 varuint.encode(i, tbuffer, toffset)
37892 toffset += varuint.encode.bytes
37893 }
37894 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
37895
37896 var hashOutputs = ZERO
37897 var hashPrevouts = ZERO
37898 var hashSequence = ZERO
37899
37900 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY)) {
37901 tbuffer = Buffer.allocUnsafe(36 * this.ins.length)
37902 toffset = 0
37903
37904 this.ins.forEach(function (txIn) {
37905 writeSlice(txIn.hash)
37906 writeUInt32(txIn.index)
37907 })
37908
37909 hashPrevouts = bcrypto.hash256(tbuffer)
37910 }
37911
37912 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY) &&
37913 (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
37914 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
37915 tbuffer = Buffer.allocUnsafe(4 * this.ins.length)
37916 toffset = 0
37917
37918 this.ins.forEach(function (txIn) {
37919 writeUInt32(txIn.sequence)
37920 })
37921
37922 hashSequence = bcrypto.hash256(tbuffer)
37923 }
37924
37925 if ((hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
37926 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
37927 var txOutsSize = this.outs.reduce(function (sum, output) {
37928 return sum + 8 + varSliceSize(output.script)
37929 }, 0)
37930
37931 tbuffer = Buffer.allocUnsafe(txOutsSize)
37932 toffset = 0
37933
37934 this.outs.forEach(function (out) {
37935 writeUInt64(out.value)
37936 writeVarSlice(out.script)
37937 })
37938
37939 hashOutputs = bcrypto.hash256(tbuffer)
37940 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE && inIndex < this.outs.length) {
37941 var output = this.outs[inIndex]
37942
37943 tbuffer = Buffer.allocUnsafe(8 + varSliceSize(output.script))
37944 toffset = 0
37945 writeUInt64(output.value)
37946 writeVarSlice(output.script)
37947
37948 hashOutputs = bcrypto.hash256(tbuffer)
37949 }
37950
37951 tbuffer = Buffer.allocUnsafe(156 + varSliceSize(prevOutScript))
37952 toffset = 0
37953
37954 var input = this.ins[inIndex]
37955 writeUInt32(this.version)
37956 writeSlice(hashPrevouts)
37957 writeSlice(hashSequence)
37958 writeSlice(input.hash)
37959 writeUInt32(input.index)
37960 writeVarSlice(prevOutScript)
37961 writeUInt64(value)
37962 writeUInt32(input.sequence)
37963 writeSlice(hashOutputs)
37964 writeUInt32(this.locktime)
37965 writeUInt32(hashType)
37966 return bcrypto.hash256(tbuffer)
37967 }
37968
37969 Transaction.prototype.getHash = function () {
37970 return bcrypto.hash256(this.__toBuffer(undefined, undefined, false))
37971 }
37972
37973 Transaction.prototype.getId = function () {
37974 // transaction hash's are displayed in reverse order
37975 return this.getHash().reverse().toString('hex')
37976 }
37977
37978 Transaction.prototype.toBuffer = function (buffer, initialOffset) {
37979 return this.__toBuffer(buffer, initialOffset, true)
37980 }
37981
37982 Transaction.prototype.__toBuffer = function (buffer, initialOffset, __allowWitness) {
37983 if (!buffer) buffer = Buffer.allocUnsafe(this.__byteLength(__allowWitness))
37984
37985 var offset = initialOffset || 0
37986 function writeSlice (slice) { offset += slice.copy(buffer, offset) }
37987 function writeUInt8 (i) { offset = buffer.writeUInt8(i, offset) }
37988 function writeUInt32 (i) { offset = buffer.writeUInt32LE(i, offset) }
37989 function writeInt32 (i) { offset = buffer.writeInt32LE(i, offset) }
37990 function writeUInt64 (i) { offset = bufferutils.writeUInt64LE(buffer, i, offset) }
37991 function writeVarInt (i) {
37992 varuint.encode(i, buffer, offset)
37993 offset += varuint.encode.bytes
37994 }
37995 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
37996 function writeVector (vector) { writeVarInt(vector.length); vector.forEach(writeVarSlice) }
37997
37998 writeInt32(this.version)
37999
38000 var hasWitnesses = __allowWitness && this.hasWitnesses()
38001
38002 if (hasWitnesses) {
38003 writeUInt8(Transaction.ADVANCED_TRANSACTION_MARKER)
38004 writeUInt8(Transaction.ADVANCED_TRANSACTION_FLAG)
38005 }
38006
38007 writeVarInt(this.ins.length)
38008
38009 this.ins.forEach(function (txIn) {
38010 writeSlice(txIn.hash)
38011 writeUInt32(txIn.index)
38012 writeVarSlice(txIn.script)
38013 writeUInt32(txIn.sequence)
38014 })
38015
38016 writeVarInt(this.outs.length)
38017 this.outs.forEach(function (txOut) {
38018 if (!txOut.valueBuffer) {
38019 writeUInt64(txOut.value)
38020 } else {
38021 writeSlice(txOut.valueBuffer)
38022 }
38023
38024 writeVarSlice(txOut.script)
38025 })
38026
38027 if (hasWitnesses) {
38028 this.ins.forEach(function (input) {
38029 writeVector(input.witness)
38030 })
38031 }
38032
38033 writeUInt32(this.locktime)
38034
38035 // avoid slicing unless necessary
38036 if (initialOffset !== undefined) return buffer.slice(initialOffset, offset)
38037 return buffer
38038 }
38039
38040 Transaction.prototype.toHex = function () {
38041 return this.toBuffer().toString('hex')
38042 }
38043
38044 Transaction.prototype.setInputScript = function (index, scriptSig) {
38045 typeforce(types.tuple(types.Number, types.Buffer), arguments)
38046
38047 this.ins[index].script = scriptSig
38048 }
38049
38050 Transaction.prototype.setWitness = function (index, witness) {
38051 typeforce(types.tuple(types.Number, [types.Buffer]), arguments)
38052
38053 this.ins[index].witness = witness
38054 }
38055
38056 module.exports = Transaction
38057
38058 },{"./bufferutils":46,"./crypto":47,"./script":54,"./types":80,"bitcoin-ops":42,"safe-buffer":128,"typeforce":139,"varuint-bitcoin":141}],79:[function(require,module,exports){
38059 var Buffer = require('safe-buffer').Buffer
38060 var baddress = require('./address')
38061 var bcrypto = require('./crypto')
38062 var bscript = require('./script')
38063 var btemplates = require('./templates')
38064 var networks = require('./networks')
38065 var ops = require('bitcoin-ops')
38066 var typeforce = require('typeforce')
38067 var types = require('./types')
38068 var scriptTypes = btemplates.types
38069 var SIGNABLE = [btemplates.types.P2PKH, btemplates.types.P2PK, btemplates.types.MULTISIG]
38070 var P2SH = SIGNABLE.concat([btemplates.types.P2WPKH, btemplates.types.P2WSH])
38071
38072 var ECPair = require('./ecpair')
38073 var ECSignature = require('./ecsignature')
38074 var Transaction = require('./transaction')
38075
38076 function supportedType (type) {
38077 return SIGNABLE.indexOf(type) !== -1
38078 }
38079
38080 function supportedP2SHType (type) {
38081 return P2SH.indexOf(type) !== -1
38082 }
38083
38084 function extractChunks (type, chunks, script) {
38085 var pubKeys = []
38086 var signatures = []
38087 switch (type) {
38088 case scriptTypes.P2PKH:
38089 // if (redeemScript) throw new Error('Nonstandard... P2SH(P2PKH)')
38090 pubKeys = chunks.slice(1)
38091 signatures = chunks.slice(0, 1)
38092 break
38093
38094 case scriptTypes.P2PK:
38095 pubKeys[0] = script ? btemplates.pubKey.output.decode(script) : undefined
38096 signatures = chunks.slice(0, 1)
38097 break
38098
38099 case scriptTypes.MULTISIG:
38100 if (script) {
38101 var multisig = btemplates.multisig.output.decode(script)
38102 pubKeys = multisig.pubKeys
38103 }
38104
38105 signatures = chunks.slice(1).map(function (chunk) {
38106 return chunk.length === 0 ? undefined : chunk
38107 })
38108 break
38109 }
38110
38111 return {
38112 pubKeys: pubKeys,
38113 signatures: signatures
38114 }
38115 }
38116 function expandInput (scriptSig, witnessStack) {
38117 if (scriptSig.length === 0 && witnessStack.length === 0) return {}
38118
38119 var prevOutScript
38120 var prevOutType
38121 var scriptType
38122 var script
38123 var redeemScript
38124 var witnessScript
38125 var witnessScriptType
38126 var redeemScriptType
38127 var witness = false
38128 var p2wsh = false
38129 var p2sh = false
38130 var witnessProgram
38131 var chunks
38132
38133 var scriptSigChunks = bscript.decompile(scriptSig)
38134 var sigType = btemplates.classifyInput(scriptSigChunks, true)
38135 if (sigType === scriptTypes.P2SH) {
38136 p2sh = true
38137 redeemScript = scriptSigChunks[scriptSigChunks.length - 1]
38138 redeemScriptType = btemplates.classifyOutput(redeemScript)
38139 prevOutScript = btemplates.scriptHash.output.encode(bcrypto.hash160(redeemScript))
38140 prevOutType = scriptTypes.P2SH
38141 script = redeemScript
38142 }
38143
38144 var classifyWitness = btemplates.classifyWitness(witnessStack, true)
38145 if (classifyWitness === scriptTypes.P2WSH) {
38146 witnessScript = witnessStack[witnessStack.length - 1]
38147 witnessScriptType = btemplates.classifyOutput(witnessScript)
38148 p2wsh = true
38149 witness = true
38150 if (scriptSig.length === 0) {
38151 prevOutScript = btemplates.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
38152 prevOutType = scriptTypes.P2WSH
38153 if (redeemScript !== undefined) {
38154 throw new Error('Redeem script given when unnecessary')
38155 }
38156 // bare witness
38157 } else {
38158 if (!redeemScript) {
38159 throw new Error('No redeemScript provided for P2WSH, but scriptSig non-empty')
38160 }
38161 witnessProgram = btemplates.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
38162 if (!redeemScript.equals(witnessProgram)) {
38163 throw new Error('Redeem script didn\'t match witnessScript')
38164 }
38165 }
38166
38167 if (!supportedType(btemplates.classifyOutput(witnessScript))) {
38168 throw new Error('unsupported witness script')
38169 }
38170
38171 script = witnessScript
38172 scriptType = witnessScriptType
38173 chunks = witnessStack.slice(0, -1)
38174 } else if (classifyWitness === scriptTypes.P2WPKH) {
38175 witness = true
38176 var key = witnessStack[witnessStack.length - 1]
38177 var keyHash = bcrypto.hash160(key)
38178 if (scriptSig.length === 0) {
38179 prevOutScript = btemplates.witnessPubKeyHash.output.encode(keyHash)
38180 prevOutType = scriptTypes.P2WPKH
38181 if (typeof redeemScript !== 'undefined') {
38182 throw new Error('Redeem script given when unnecessary')
38183 }
38184 } else {
38185 if (!redeemScript) {
38186 throw new Error('No redeemScript provided for P2WPKH, but scriptSig wasn\'t empty')
38187 }
38188 witnessProgram = btemplates.witnessPubKeyHash.output.encode(keyHash)
38189 if (!redeemScript.equals(witnessProgram)) {
38190 throw new Error('Redeem script did not have the right witness program')
38191 }
38192 }
38193
38194 scriptType = scriptTypes.P2PKH
38195 chunks = witnessStack
38196 } else if (redeemScript) {
38197 if (!supportedP2SHType(redeemScriptType)) {
38198 throw new Error('Bad redeemscript!')
38199 }
38200
38201 script = redeemScript
38202 scriptType = redeemScriptType
38203 chunks = scriptSigChunks.slice(0, -1)
38204 } else {
38205 prevOutType = scriptType = btemplates.classifyInput(scriptSig)
38206 chunks = scriptSigChunks
38207 }
38208
38209 var expanded = extractChunks(scriptType, chunks, script)
38210
38211 var result = {
38212 pubKeys: expanded.pubKeys,
38213 signatures: expanded.signatures,
38214 prevOutScript: prevOutScript,
38215 prevOutType: prevOutType,
38216 signType: scriptType,
38217 signScript: script,
38218 witness: Boolean(witness)
38219 }
38220
38221 if (p2sh) {
38222 result.redeemScript = redeemScript
38223 result.redeemScriptType = redeemScriptType
38224 }
38225
38226 if (p2wsh) {
38227 result.witnessScript = witnessScript
38228 result.witnessScriptType = witnessScriptType
38229 }
38230
38231 return result
38232 }
38233
38234 // could be done in expandInput, but requires the original Transaction for hashForSignature
38235 function fixMultisigOrder (input, transaction, vin) {
38236 if (input.redeemScriptType !== scriptTypes.MULTISIG || !input.redeemScript) return
38237 if (input.pubKeys.length === input.signatures.length) return
38238
38239 var unmatched = input.signatures.concat()
38240
38241 input.signatures = input.pubKeys.map(function (pubKey) {
38242 var keyPair = ECPair.fromPublicKeyBuffer(pubKey)
38243 var match
38244
38245 // check for a signature
38246 unmatched.some(function (signature, i) {
38247 // skip if undefined || OP_0
38248 if (!signature) return false
38249
38250 // TODO: avoid O(n) hashForSignature
38251 var parsed = ECSignature.parseScriptSignature(signature)
38252 var hash = transaction.hashForSignature(vin, input.redeemScript, parsed.hashType)
38253
38254 // skip if signature does not match pubKey
38255 if (!keyPair.verify(hash, parsed.signature)) return false
38256
38257 // remove matched signature from unmatched
38258 unmatched[i] = undefined
38259 match = signature
38260
38261 return true
38262 })
38263
38264 return match
38265 })
38266 }
38267
38268 function expandOutput (script, scriptType, ourPubKey) {
38269 typeforce(types.Buffer, script)
38270
38271 var scriptChunks = bscript.decompile(script)
38272 if (!scriptType) {
38273 scriptType = btemplates.classifyOutput(script)
38274 }
38275
38276 var pubKeys = []
38277
38278 switch (scriptType) {
38279 // does our hash160(pubKey) match the output scripts?
38280 case scriptTypes.P2PKH:
38281 if (!ourPubKey) break
38282
38283 var pkh1 = scriptChunks[2]
38284 var pkh2 = bcrypto.hash160(ourPubKey)
38285 if (pkh1.equals(pkh2)) pubKeys = [ourPubKey]
38286 break
38287
38288 // does our hash160(pubKey) match the output scripts?
38289 case scriptTypes.P2WPKH:
38290 if (!ourPubKey) break
38291
38292 var wpkh1 = scriptChunks[1]
38293 var wpkh2 = bcrypto.hash160(ourPubKey)
38294 if (wpkh1.equals(wpkh2)) pubKeys = [ourPubKey]
38295 break
38296
38297 case scriptTypes.P2PK:
38298 pubKeys = scriptChunks.slice(0, 1)
38299 break
38300
38301 case scriptTypes.MULTISIG:
38302 pubKeys = scriptChunks.slice(1, -2)
38303 break
38304
38305 default: return { scriptType: scriptType }
38306 }
38307
38308 return {
38309 pubKeys: pubKeys,
38310 scriptType: scriptType,
38311 signatures: pubKeys.map(function () { return undefined })
38312 }
38313 }
38314
38315 function checkP2SHInput (input, redeemScriptHash) {
38316 if (input.prevOutType) {
38317 if (input.prevOutType !== scriptTypes.P2SH) throw new Error('PrevOutScript must be P2SH')
38318
38319 var prevOutScriptScriptHash = bscript.decompile(input.prevOutScript)[1]
38320 if (!prevOutScriptScriptHash.equals(redeemScriptHash)) throw new Error('Inconsistent hash160(RedeemScript)')
38321 }
38322 }
38323
38324 function checkP2WSHInput (input, witnessScriptHash) {
38325 if (input.prevOutType) {
38326 if (input.prevOutType !== scriptTypes.P2WSH) throw new Error('PrevOutScript must be P2WSH')
38327
38328 var scriptHash = bscript.decompile(input.prevOutScript)[1]
38329 if (!scriptHash.equals(witnessScriptHash)) throw new Error('Inconsistent sha25(WitnessScript)')
38330 }
38331 }
38332
38333 function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScript) {
38334 var expanded
38335 var prevOutType
38336 var prevOutScript
38337
38338 var p2sh = false
38339 var p2shType
38340 var redeemScriptHash
38341
38342 var witness = false
38343 var p2wsh = false
38344 var witnessType
38345 var witnessScriptHash
38346
38347 var signType
38348 var signScript
38349
38350 if (redeemScript && witnessScript) {
38351 redeemScriptHash = bcrypto.hash160(redeemScript)
38352 witnessScriptHash = bcrypto.sha256(witnessScript)
38353 checkP2SHInput(input, redeemScriptHash)
38354
38355 if (!redeemScript.equals(btemplates.witnessScriptHash.output.encode(witnessScriptHash))) throw new Error('Witness script inconsistent with redeem script')
38356
38357 expanded = expandOutput(witnessScript, undefined, kpPubKey)
38358 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
38359
38360 prevOutType = btemplates.types.P2SH
38361 prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
38362 p2sh = witness = p2wsh = true
38363 p2shType = btemplates.types.P2WSH
38364 signType = witnessType = expanded.scriptType
38365 signScript = witnessScript
38366 } else if (redeemScript) {
38367 redeemScriptHash = bcrypto.hash160(redeemScript)
38368 checkP2SHInput(input, redeemScriptHash)
38369
38370 expanded = expandOutput(redeemScript, undefined, kpPubKey)
38371 if (!expanded.pubKeys) throw new Error('RedeemScript not supported "' + bscript.toASM(redeemScript) + '"')
38372
38373 prevOutType = btemplates.types.P2SH
38374 prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
38375 p2sh = true
38376 signType = p2shType = expanded.scriptType
38377 signScript = redeemScript
38378 witness = signType === btemplates.types.P2WPKH
38379 } else if (witnessScript) {
38380 witnessScriptHash = bcrypto.sha256(witnessScript)
38381 checkP2WSHInput(input, witnessScriptHash)
38382
38383 expanded = expandOutput(witnessScript, undefined, kpPubKey)
38384 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
38385
38386 prevOutType = btemplates.types.P2WSH
38387 prevOutScript = btemplates.witnessScriptHash.output.encode(witnessScriptHash)
38388 witness = p2wsh = true
38389 signType = witnessType = expanded.scriptType
38390 signScript = witnessScript
38391 } else if (input.prevOutType) {
38392 // embedded scripts are not possible without a redeemScript
38393 if (input.prevOutType === scriptTypes.P2SH ||
38394 input.prevOutType === scriptTypes.P2WSH) {
38395 throw new Error('PrevOutScript is ' + input.prevOutType + ', requires redeemScript')
38396 }
38397
38398 prevOutType = input.prevOutType
38399 prevOutScript = input.prevOutScript
38400 expanded = expandOutput(input.prevOutScript, input.prevOutType, kpPubKey)
38401 if (!expanded.pubKeys) return
38402
38403 witness = (input.prevOutType === scriptTypes.P2WPKH)
38404 signType = prevOutType
38405 signScript = prevOutScript
38406 } else {
38407 prevOutScript = btemplates.pubKeyHash.output.encode(bcrypto.hash160(kpPubKey))
38408 expanded = expandOutput(prevOutScript, scriptTypes.P2PKH, kpPubKey)
38409
38410 prevOutType = scriptTypes.P2PKH
38411 witness = false
38412 signType = prevOutType
38413 signScript = prevOutScript
38414 }
38415
38416 if (signType === scriptTypes.P2WPKH) {
38417 signScript = btemplates.pubKeyHash.output.encode(btemplates.witnessPubKeyHash.output.decode(signScript))
38418 }
38419
38420 if (p2sh) {
38421 input.redeemScript = redeemScript
38422 input.redeemScriptType = p2shType
38423 }
38424
38425 if (p2wsh) {
38426 input.witnessScript = witnessScript
38427 input.witnessScriptType = witnessType
38428 }
38429
38430 input.pubKeys = expanded.pubKeys
38431 input.signatures = expanded.signatures
38432 input.signScript = signScript
38433 input.signType = signType
38434 input.prevOutScript = prevOutScript
38435 input.prevOutType = prevOutType
38436 input.witness = witness
38437 }
38438
38439 function buildStack (type, signatures, pubKeys, allowIncomplete) {
38440 if (type === scriptTypes.P2PKH) {
38441 if (signatures.length === 1 && Buffer.isBuffer(signatures[0]) && pubKeys.length === 1) return btemplates.pubKeyHash.input.encodeStack(signatures[0], pubKeys[0])
38442 } else if (type === scriptTypes.P2PK) {
38443 if (signatures.length === 1 && Buffer.isBuffer(signatures[0])) return btemplates.pubKey.input.encodeStack(signatures[0])
38444 } else if (type === scriptTypes.MULTISIG) {
38445 if (signatures.length > 0) {
38446 signatures = signatures.map(function (signature) {
38447 return signature || ops.OP_0
38448 })
38449 if (!allowIncomplete) {
38450 // remove blank signatures
38451 signatures = signatures.filter(function (x) { return x !== ops.OP_0 })
38452 }
38453
38454 return btemplates.multisig.input.encodeStack(signatures)
38455 }
38456 } else {
38457 throw new Error('Not yet supported')
38458 }
38459
38460 if (!allowIncomplete) throw new Error('Not enough signatures provided')
38461 return []
38462 }
38463
38464 function buildInput (input, allowIncomplete) {
38465 var scriptType = input.prevOutType
38466 var sig = []
38467 var witness = []
38468
38469 if (supportedType(scriptType)) {
38470 sig = buildStack(scriptType, input.signatures, input.pubKeys, allowIncomplete)
38471 }
38472
38473 var p2sh = false
38474 if (scriptType === btemplates.types.P2SH) {
38475 // We can remove this error later when we have a guarantee prepareInput
38476 // rejects unsignable scripts - it MUST be signable at this point.
38477 if (!allowIncomplete && !supportedP2SHType(input.redeemScriptType)) {
38478 throw new Error('Impossible to sign this type')
38479 }
38480
38481 if (supportedType(input.redeemScriptType)) {
38482 sig = buildStack(input.redeemScriptType, input.signatures, input.pubKeys, allowIncomplete)
38483 }
38484
38485 // If it wasn't SIGNABLE, it's witness, defer to that
38486 if (input.redeemScriptType) {
38487 p2sh = true
38488 scriptType = input.redeemScriptType
38489 }
38490 }
38491
38492 switch (scriptType) {
38493 // P2WPKH is a special case of P2PKH
38494 case btemplates.types.P2WPKH:
38495 witness = buildStack(btemplates.types.P2PKH, input.signatures, input.pubKeys, allowIncomplete)
38496 break
38497
38498 case btemplates.types.P2WSH:
38499 // We can remove this check later
38500 if (!allowIncomplete && !supportedType(input.witnessScriptType)) {
38501 throw new Error('Impossible to sign this type')
38502 }
38503
38504 if (supportedType(input.witnessScriptType)) {
38505 witness = buildStack(input.witnessScriptType, input.signatures, input.pubKeys, allowIncomplete)
38506 witness.push(input.witnessScript)
38507 scriptType = input.witnessScriptType
38508 }
38509
38510 break
38511 }
38512
38513 // append redeemScript if necessary
38514 if (p2sh) {
38515 sig.push(input.redeemScript)
38516 }
38517
38518 return {
38519 type: scriptType,
38520 script: bscript.compile(sig),
38521 witness: witness
38522 }
38523 }
38524
38525 function TransactionBuilder (network, maximumFeeRate) {
38526 this.prevTxMap = {}
38527 this.network = network || networks.bitcoin
38528
38529 // WARNING: This is __NOT__ to be relied on, its just another potential safety mechanism (safety in-depth)
38530 this.maximumFeeRate = maximumFeeRate || 1000
38531
38532 this.inputs = []
38533 this.tx = new Transaction()
38534 }
38535
38536 TransactionBuilder.prototype.setLockTime = function (locktime) {
38537 typeforce(types.UInt32, locktime)
38538
38539 // if any signatures exist, throw
38540 if (this.inputs.some(function (input) {
38541 if (!input.signatures) return false
38542
38543 return input.signatures.some(function (s) { return s })
38544 })) {
38545 throw new Error('No, this would invalidate signatures')
38546 }
38547
38548 this.tx.locktime = locktime
38549 }
38550
38551 TransactionBuilder.prototype.setVersion = function (version) {
38552 typeforce(types.UInt32, version)
38553
38554 // XXX: this might eventually become more complex depending on what the versions represent
38555 this.tx.version = version
38556 }
38557
38558 TransactionBuilder.fromTransaction = function (transaction, network) {
38559 var txb = new TransactionBuilder(network)
38560
38561 // Copy transaction fields
38562 txb.setVersion(transaction.version)
38563 txb.setLockTime(transaction.locktime)
38564
38565 // Copy outputs (done first to avoid signature invalidation)
38566 transaction.outs.forEach(function (txOut) {
38567 txb.addOutput(txOut.script, txOut.value)
38568 })
38569
38570 // Copy inputs
38571 transaction.ins.forEach(function (txIn) {
38572 txb.__addInputUnsafe(txIn.hash, txIn.index, {
38573 sequence: txIn.sequence,
38574 script: txIn.script,
38575 witness: txIn.witness
38576 })
38577 })
38578
38579 // fix some things not possible through the public API
38580 txb.inputs.forEach(function (input, i) {
38581 fixMultisigOrder(input, transaction, i)
38582 })
38583
38584 return txb
38585 }
38586
38587 TransactionBuilder.prototype.addInput = function (txHash, vout, sequence, prevOutScript) {
38588 if (!this.__canModifyInputs()) {
38589 throw new Error('No, this would invalidate signatures')
38590 }
38591
38592 var value
38593
38594 // is it a hex string?
38595 if (typeof txHash === 'string') {
38596 // transaction hashs's are displayed in reverse order, un-reverse it
38597 txHash = Buffer.from(txHash, 'hex').reverse()
38598
38599 // is it a Transaction object?
38600 } else if (txHash instanceof Transaction) {
38601 var txOut = txHash.outs[vout]
38602 prevOutScript = txOut.script
38603 value = txOut.value
38604
38605 txHash = txHash.getHash()
38606 }
38607
38608 return this.__addInputUnsafe(txHash, vout, {
38609 sequence: sequence,
38610 prevOutScript: prevOutScript,
38611 value: value
38612 })
38613 }
38614
38615 TransactionBuilder.prototype.__addInputUnsafe = function (txHash, vout, options) {
38616 if (Transaction.isCoinbaseHash(txHash)) {
38617 throw new Error('coinbase inputs not supported')
38618 }
38619
38620 var prevTxOut = txHash.toString('hex') + ':' + vout
38621 if (this.prevTxMap[prevTxOut] !== undefined) throw new Error('Duplicate TxOut: ' + prevTxOut)
38622
38623 var input = {}
38624
38625 // derive what we can from the scriptSig
38626 if (options.script !== undefined) {
38627 input = expandInput(options.script, options.witness || [])
38628 }
38629
38630 // if an input value was given, retain it
38631 if (options.value !== undefined) {
38632 input.value = options.value
38633 }
38634
38635 // derive what we can from the previous transactions output script
38636 if (!input.prevOutScript && options.prevOutScript) {
38637 var prevOutType
38638
38639 if (!input.pubKeys && !input.signatures) {
38640 var expanded = expandOutput(options.prevOutScript)
38641
38642 if (expanded.pubKeys) {
38643 input.pubKeys = expanded.pubKeys
38644 input.signatures = expanded.signatures
38645 }
38646
38647 prevOutType = expanded.scriptType
38648 }
38649
38650 input.prevOutScript = options.prevOutScript
38651 input.prevOutType = prevOutType || btemplates.classifyOutput(options.prevOutScript)
38652 }
38653
38654 var vin = this.tx.addInput(txHash, vout, options.sequence, options.scriptSig)
38655 this.inputs[vin] = input
38656 this.prevTxMap[prevTxOut] = vin
38657 return vin
38658 }
38659
38660 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
38661 if (!this.__canModifyOutputs()) {
38662 throw new Error('No, this would invalidate signatures')
38663 }
38664
38665 // Attempt to get a script if it's a base58 address string
38666 if (typeof scriptPubKey === 'string') {
38667 scriptPubKey = baddress.toOutputScript(scriptPubKey, this.network)
38668 }
38669
38670 return this.tx.addOutput(scriptPubKey, value)
38671 }
38672
38673 TransactionBuilder.prototype.build = function () {
38674 return this.__build(false)
38675 }
38676 TransactionBuilder.prototype.buildIncomplete = function () {
38677 return this.__build(true)
38678 }
38679
38680 TransactionBuilder.prototype.__build = function (allowIncomplete) {
38681 if (!allowIncomplete) {
38682 if (!this.tx.ins.length) throw new Error('Transaction has no inputs')
38683 if (!this.tx.outs.length) throw new Error('Transaction has no outputs')
38684 }
38685
38686 var tx = this.tx.clone()
38687 // Create script signatures from inputs
38688 this.inputs.forEach(function (input, i) {
38689 var scriptType = input.witnessScriptType || input.redeemScriptType || input.prevOutType
38690 if (!scriptType && !allowIncomplete) throw new Error('Transaction is not complete')
38691 var result = buildInput(input, allowIncomplete)
38692
38693 // skip if no result
38694 if (!allowIncomplete) {
38695 if (!supportedType(result.type) && result.type !== btemplates.types.P2WPKH) {
38696 throw new Error(result.type + ' not supported')
38697 }
38698 }
38699
38700 tx.setInputScript(i, result.script)
38701 tx.setWitness(i, result.witness)
38702 })
38703
38704 if (!allowIncomplete) {
38705 // do not rely on this, its merely a last resort
38706 if (this.__overMaximumFees(tx.virtualSize())) {
38707 throw new Error('Transaction has absurd fees')
38708 }
38709 }
38710
38711 return tx
38712 }
38713
38714 function canSign (input) {
38715 return input.prevOutScript !== undefined &&
38716 input.signScript !== undefined &&
38717 input.pubKeys !== undefined &&
38718 input.signatures !== undefined &&
38719 input.signatures.length === input.pubKeys.length &&
38720 input.pubKeys.length > 0 &&
38721 (
38722 input.witness === false ||
38723 (input.witness === true && input.value !== undefined)
38724 )
38725 }
38726
38727 TransactionBuilder.prototype.sign = function (vin, keyPair, redeemScript, hashType, witnessValue, witnessScript) {
38728 // TODO: remove keyPair.network matching in 4.0.0
38729 if (keyPair.network && keyPair.network !== this.network) throw new TypeError('Inconsistent network')
38730 if (!this.inputs[vin]) throw new Error('No input at index: ' + vin)
38731 hashType = hashType || Transaction.SIGHASH_ALL
38732
38733 var input = this.inputs[vin]
38734
38735 // if redeemScript was previously provided, enforce consistency
38736 if (input.redeemScript !== undefined &&
38737 redeemScript &&
38738 !input.redeemScript.equals(redeemScript)) {
38739 throw new Error('Inconsistent redeemScript')
38740 }
38741
38742 var kpPubKey = keyPair.publicKey || keyPair.getPublicKeyBuffer()
38743 if (!canSign(input)) {
38744 if (witnessValue !== undefined) {
38745 if (input.value !== undefined && input.value !== witnessValue) throw new Error('Input didn\'t match witnessValue')
38746 typeforce(types.Satoshi, witnessValue)
38747 input.value = witnessValue
38748 }
38749
38750 if (!canSign(input)) prepareInput(input, kpPubKey, redeemScript, witnessValue, witnessScript)
38751 if (!canSign(input)) throw Error(input.prevOutType + ' not supported')
38752 }
38753
38754 // ready to sign
38755 var signatureHash
38756 if (input.witness) {
38757 signatureHash = this.tx.hashForWitnessV0(vin, input.signScript, input.value, hashType)
38758 } else {
38759 signatureHash = this.tx.hashForSignature(vin, input.signScript, hashType)
38760 }
38761
38762 // enforce in order signing of public keys
38763 var signed = input.pubKeys.some(function (pubKey, i) {
38764 if (!kpPubKey.equals(pubKey)) return false
38765 if (input.signatures[i]) throw new Error('Signature already exists')
38766 if (kpPubKey.length !== 33 &&
38767 input.signType === scriptTypes.P2WPKH) throw new Error('BIP143 rejects uncompressed public keys in P2WPKH or P2WSH')
38768
38769 var signature = keyPair.sign(signatureHash)
38770 if (Buffer.isBuffer(signature)) signature = ECSignature.fromRSBuffer(signature)
38771
38772 input.signatures[i] = signature.toScriptSignature(hashType)
38773 return true
38774 })
38775
38776 if (!signed) throw new Error('Key pair cannot sign for this input')
38777 }
38778
38779 function signatureHashType (buffer) {
38780 return buffer.readUInt8(buffer.length - 1)
38781 }
38782
38783 TransactionBuilder.prototype.__canModifyInputs = function () {
38784 return this.inputs.every(function (input) {
38785 // any signatures?
38786 if (input.signatures === undefined) return true
38787
38788 return input.signatures.every(function (signature) {
38789 if (!signature) return true
38790 var hashType = signatureHashType(signature)
38791
38792 // if SIGHASH_ANYONECANPAY is set, signatures would not
38793 // be invalidated by more inputs
38794 return hashType & Transaction.SIGHASH_ANYONECANPAY
38795 })
38796 })
38797 }
38798
38799 TransactionBuilder.prototype.__canModifyOutputs = function () {
38800 var nInputs = this.tx.ins.length
38801 var nOutputs = this.tx.outs.length
38802
38803 return this.inputs.every(function (input) {
38804 if (input.signatures === undefined) return true
38805
38806 return input.signatures.every(function (signature) {
38807 if (!signature) return true
38808 var hashType = signatureHashType(signature)
38809
38810 var hashTypeMod = hashType & 0x1f
38811 if (hashTypeMod === Transaction.SIGHASH_NONE) return true
38812 if (hashTypeMod === Transaction.SIGHASH_SINGLE) {
38813 // if SIGHASH_SINGLE is set, and nInputs > nOutputs
38814 // some signatures would be invalidated by the addition
38815 // of more outputs
38816 return nInputs <= nOutputs
38817 }
38818 })
38819 })
38820 }
38821
38822 TransactionBuilder.prototype.__overMaximumFees = function (bytes) {
38823 // not all inputs will have .value defined
38824 var incoming = this.inputs.reduce(function (a, x) { return a + (x.value >>> 0) }, 0)
38825
38826 // but all outputs do, and if we have any input value
38827 // we can immediately determine if the outputs are too small
38828 var outgoing = this.tx.outs.reduce(function (a, x) { return a + x.value }, 0)
38829 var fee = incoming - outgoing
38830 var feeRate = fee / bytes
38831
38832 return feeRate > this.maximumFeeRate
38833 }
38834
38835 module.exports = TransactionBuilder
38836
38837 },{"./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){
38838 var typeforce = require('typeforce')
38839
38840 var UINT31_MAX = Math.pow(2, 31) - 1
38841 function UInt31 (value) {
38842 return typeforce.UInt32(value) && value <= UINT31_MAX
38843 }
38844
38845 function BIP32Path (value) {
38846 return typeforce.String(value) && value.match(/^(m\/)?(\d+'?\/)*\d+'?$/)
38847 }
38848 BIP32Path.toJSON = function () { return 'BIP32 derivation path' }
38849
38850 var SATOSHI_MAX = 21 * 1e14
38851 function Satoshi (value) {
38852 return typeforce.UInt53(value) && value <= SATOSHI_MAX
38853 }
38854
38855 // external dependent types
38856 var BigInt = typeforce.quacksLike('BigInteger')
38857 var ECPoint = typeforce.quacksLike('Point')
38858
38859 // exposed, external API
38860 var ECSignature = typeforce.compile({ r: BigInt, s: BigInt })
38861 var Network = typeforce.compile({
38862 messagePrefix: typeforce.oneOf(typeforce.Buffer, typeforce.String),
38863 bip32: {
38864 public: typeforce.UInt32,
38865 private: typeforce.UInt32
38866 },
38867 pubKeyHash: typeforce.UInt8,
38868 scriptHash: typeforce.UInt8,
38869 wif: typeforce.UInt8
38870 })
38871
38872 // extend typeforce types with ours
38873 var types = {
38874 BigInt: BigInt,
38875 BIP32Path: BIP32Path,
38876 Buffer256bit: typeforce.BufferN(32),
38877 ECPoint: ECPoint,
38878 ECSignature: ECSignature,
38879 Hash160bit: typeforce.BufferN(20),
38880 Hash256bit: typeforce.BufferN(32),
38881 Network: Network,
38882 Satoshi: Satoshi,
38883 UInt31: UInt31
38884 }
38885
38886 for (var typeName in typeforce) {
38887 types[typeName] = typeforce[typeName]
38888 }
38889
38890 module.exports = types
38891
38892 },{"typeforce":139}],81:[function(require,module,exports){
38893 (function (module, exports) {
38894 'use strict';
38895
38896 // Utils
38897 function assert (val, msg) {
38898 if (!val) throw new Error(msg || 'Assertion failed');
38899 }
38900
38901 // Could use `inherits` module, but don't want to move from single file
38902 // architecture yet.
38903 function inherits (ctor, superCtor) {
38904 ctor.super_ = superCtor;
38905 var TempCtor = function () {};
38906 TempCtor.prototype = superCtor.prototype;
38907 ctor.prototype = new TempCtor();
38908 ctor.prototype.constructor = ctor;
38909 }
38910
38911 // BN
38912
38913 function BN (number, base, endian) {
38914 if (BN.isBN(number)) {
38915 return number;
38916 }
38917
38918 this.negative = 0;
38919 this.words = null;
38920 this.length = 0;
38921
38922 // Reduction context
38923 this.red = null;
38924
38925 if (number !== null) {
38926 if (base === 'le' || base === 'be') {
38927 endian = base;
38928 base = 10;
38929 }
38930
38931 this._init(number || 0, base || 10, endian || 'be');
38932 }
38933 }
38934 if (typeof module === 'object') {
38935 module.exports = BN;
38936 } else {
38937 exports.BN = BN;
38938 }
38939
38940 BN.BN = BN;
38941 BN.wordSize = 26;
38942
38943 var Buffer;
38944 try {
38945 Buffer = require('buf' + 'fer').Buffer;
38946 } catch (e) {
38947 }
38948
38949 BN.isBN = function isBN (num) {
38950 if (num instanceof BN) {
38951 return true;
38952 }
38953
38954 return num !== null && typeof num === 'object' &&
38955 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
38956 };
38957
38958 BN.max = function max (left, right) {
38959 if (left.cmp(right) > 0) return left;
38960 return right;
38961 };
38962
38963 BN.min = function min (left, right) {
38964 if (left.cmp(right) < 0) return left;
38965 return right;
38966 };
38967
38968 BN.prototype._init = function init (number, base, endian) {
38969 if (typeof number === 'number') {
38970 return this._initNumber(number, base, endian);
38971 }
38972
38973 if (typeof number === 'object') {
38974 return this._initArray(number, base, endian);
38975 }
38976
38977 if (base === 'hex') {
38978 base = 16;
38979 }
38980 assert(base === (base | 0) && base >= 2 && base <= 36);
38981
38982 number = number.toString().replace(/\s+/g, '');
38983 var start = 0;
38984 if (number[0] === '-') {
38985 start++;
38986 }
38987
38988 if (base === 16) {
38989 this._parseHex(number, start);
38990 } else {
38991 this._parseBase(number, base, start);
38992 }
38993
38994 if (number[0] === '-') {
38995 this.negative = 1;
38996 }
38997
38998 this.strip();
38999
39000 if (endian !== 'le') return;
39001
39002 this._initArray(this.toArray(), base, endian);
39003 };
39004
39005 BN.prototype._initNumber = function _initNumber (number, base, endian) {
39006 if (number < 0) {
39007 this.negative = 1;
39008 number = -number;
39009 }
39010 if (number < 0x4000000) {
39011 this.words = [ number & 0x3ffffff ];
39012 this.length = 1;
39013 } else if (number < 0x10000000000000) {
39014 this.words = [
39015 number & 0x3ffffff,
39016 (number / 0x4000000) & 0x3ffffff
39017 ];
39018 this.length = 2;
39019 } else {
39020 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
39021 this.words = [
39022 number & 0x3ffffff,
39023 (number / 0x4000000) & 0x3ffffff,
39024 1
39025 ];
39026 this.length = 3;
39027 }
39028
39029 if (endian !== 'le') return;
39030
39031 // Reverse the bytes
39032 this._initArray(this.toArray(), base, endian);
39033 };
39034
39035 BN.prototype._initArray = function _initArray (number, base, endian) {
39036 // Perhaps a Uint8Array
39037 assert(typeof number.length === 'number');
39038 if (number.length <= 0) {
39039 this.words = [ 0 ];
39040 this.length = 1;
39041 return this;
39042 }
39043
39044 this.length = Math.ceil(number.length / 3);
39045 this.words = new Array(this.length);
39046 for (var i = 0; i < this.length; i++) {
39047 this.words[i] = 0;
39048 }
39049
39050 var j, w;
39051 var off = 0;
39052 if (endian === 'be') {
39053 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
39054 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
39055 this.words[j] |= (w << off) & 0x3ffffff;
39056 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
39057 off += 24;
39058 if (off >= 26) {
39059 off -= 26;
39060 j++;
39061 }
39062 }
39063 } else if (endian === 'le') {
39064 for (i = 0, j = 0; i < number.length; i += 3) {
39065 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
39066 this.words[j] |= (w << off) & 0x3ffffff;
39067 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
39068 off += 24;
39069 if (off >= 26) {
39070 off -= 26;
39071 j++;
39072 }
39073 }
39074 }
39075 return this.strip();
39076 };
39077
39078 function parseHex (str, start, end) {
39079 var r = 0;
39080 var len = Math.min(str.length, end);
39081 for (var i = start; i < len; i++) {
39082 var c = str.charCodeAt(i) - 48;
39083
39084 r <<= 4;
39085
39086 // 'a' - 'f'
39087 if (c >= 49 && c <= 54) {
39088 r |= c - 49 + 0xa;
39089
39090 // 'A' - 'F'
39091 } else if (c >= 17 && c <= 22) {
39092 r |= c - 17 + 0xa;
39093
39094 // '0' - '9'
39095 } else {
39096 r |= c & 0xf;
39097 }
39098 }
39099 return r;
39100 }
39101
39102 BN.prototype._parseHex = function _parseHex (number, start) {
39103 // Create possibly bigger array to ensure that it fits the number
39104 this.length = Math.ceil((number.length - start) / 6);
39105 this.words = new Array(this.length);
39106 for (var i = 0; i < this.length; i++) {
39107 this.words[i] = 0;
39108 }
39109
39110 var j, w;
39111 // Scan 24-bit chunks and add them to the number
39112 var off = 0;
39113 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
39114 w = parseHex(number, i, i + 6);
39115 this.words[j] |= (w << off) & 0x3ffffff;
39116 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
39117 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
39118 off += 24;
39119 if (off >= 26) {
39120 off -= 26;
39121 j++;
39122 }
39123 }
39124 if (i + 6 !== start) {
39125 w = parseHex(number, start, i + 6);
39126 this.words[j] |= (w << off) & 0x3ffffff;
39127 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
39128 }
39129 this.strip();
39130 };
39131
39132 function parseBase (str, start, end, mul) {
39133 var r = 0;
39134 var len = Math.min(str.length, end);
39135 for (var i = start; i < len; i++) {
39136 var c = str.charCodeAt(i) - 48;
39137
39138 r *= mul;
39139
39140 // 'a'
39141 if (c >= 49) {
39142 r += c - 49 + 0xa;
39143
39144 // 'A'
39145 } else if (c >= 17) {
39146 r += c - 17 + 0xa;
39147
39148 // '0' - '9'
39149 } else {
39150 r += c;
39151 }
39152 }
39153 return r;
39154 }
39155
39156 BN.prototype._parseBase = function _parseBase (number, base, start) {
39157 // Initialize as zero
39158 this.words = [ 0 ];
39159 this.length = 1;
39160
39161 // Find length of limb in base
39162 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
39163 limbLen++;
39164 }
39165 limbLen--;
39166 limbPow = (limbPow / base) | 0;
39167
39168 var total = number.length - start;
39169 var mod = total % limbLen;
39170 var end = Math.min(total, total - mod) + start;
39171
39172 var word = 0;
39173 for (var i = start; i < end; i += limbLen) {
39174 word = parseBase(number, i, i + limbLen, base);
39175
39176 this.imuln(limbPow);
39177 if (this.words[0] + word < 0x4000000) {
39178 this.words[0] += word;
39179 } else {
39180 this._iaddn(word);
39181 }
39182 }
39183
39184 if (mod !== 0) {
39185 var pow = 1;
39186 word = parseBase(number, i, number.length, base);
39187
39188 for (i = 0; i < mod; i++) {
39189 pow *= base;
39190 }
39191
39192 this.imuln(pow);
39193 if (this.words[0] + word < 0x4000000) {
39194 this.words[0] += word;
39195 } else {
39196 this._iaddn(word);
39197 }
39198 }
39199 };
39200
39201 BN.prototype.copy = function copy (dest) {
39202 dest.words = new Array(this.length);
39203 for (var i = 0; i < this.length; i++) {
39204 dest.words[i] = this.words[i];
39205 }
39206 dest.length = this.length;
39207 dest.negative = this.negative;
39208 dest.red = this.red;
39209 };
39210
39211 BN.prototype.clone = function clone () {
39212 var r = new BN(null);
39213 this.copy(r);
39214 return r;
39215 };
39216
39217 BN.prototype._expand = function _expand (size) {
39218 while (this.length < size) {
39219 this.words[this.length++] = 0;
39220 }
39221 return this;
39222 };
39223
39224 // Remove leading `0` from `this`
39225 BN.prototype.strip = function strip () {
39226 while (this.length > 1 && this.words[this.length - 1] === 0) {
39227 this.length--;
39228 }
39229 return this._normSign();
39230 };
39231
39232 BN.prototype._normSign = function _normSign () {
39233 // -0 = 0
39234 if (this.length === 1 && this.words[0] === 0) {
39235 this.negative = 0;
39236 }
39237 return this;
39238 };
39239
39240 BN.prototype.inspect = function inspect () {
39241 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
39242 };
39243
39244 /*
39245
39246 var zeros = [];
39247 var groupSizes = [];
39248 var groupBases = [];
39249
39250 var s = '';
39251 var i = -1;
39252 while (++i < BN.wordSize) {
39253 zeros[i] = s;
39254 s += '0';
39255 }
39256 groupSizes[0] = 0;
39257 groupSizes[1] = 0;
39258 groupBases[0] = 0;
39259 groupBases[1] = 0;
39260 var base = 2 - 1;
39261 while (++base < 36 + 1) {
39262 var groupSize = 0;
39263 var groupBase = 1;
39264 while (groupBase < (1 << BN.wordSize) / base) {
39265 groupBase *= base;
39266 groupSize += 1;
39267 }
39268 groupSizes[base] = groupSize;
39269 groupBases[base] = groupBase;
39270 }
39271
39272 */
39273
39274 var zeros = [
39275 '',
39276 '0',
39277 '00',
39278 '000',
39279 '0000',
39280 '00000',
39281 '000000',
39282 '0000000',
39283 '00000000',
39284 '000000000',
39285 '0000000000',
39286 '00000000000',
39287 '000000000000',
39288 '0000000000000',
39289 '00000000000000',
39290 '000000000000000',
39291 '0000000000000000',
39292 '00000000000000000',
39293 '000000000000000000',
39294 '0000000000000000000',
39295 '00000000000000000000',
39296 '000000000000000000000',
39297 '0000000000000000000000',
39298 '00000000000000000000000',
39299 '000000000000000000000000',
39300 '0000000000000000000000000'
39301 ];
39302
39303 var groupSizes = [
39304 0, 0,
39305 25, 16, 12, 11, 10, 9, 8,
39306 8, 7, 7, 7, 7, 6, 6,
39307 6, 6, 6, 6, 6, 5, 5,
39308 5, 5, 5, 5, 5, 5, 5,
39309 5, 5, 5, 5, 5, 5, 5
39310 ];
39311
39312 var groupBases = [
39313 0, 0,
39314 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
39315 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
39316 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
39317 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
39318 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
39319 ];
39320
39321 BN.prototype.toString = function toString (base, padding) {
39322 base = base || 10;
39323 padding = padding | 0 || 1;
39324
39325 var out;
39326 if (base === 16 || base === 'hex') {
39327 out = '';
39328 var off = 0;
39329 var carry = 0;
39330 for (var i = 0; i < this.length; i++) {
39331 var w = this.words[i];
39332 var word = (((w << off) | carry) & 0xffffff).toString(16);
39333 carry = (w >>> (24 - off)) & 0xffffff;
39334 if (carry !== 0 || i !== this.length - 1) {
39335 out = zeros[6 - word.length] + word + out;
39336 } else {
39337 out = word + out;
39338 }
39339 off += 2;
39340 if (off >= 26) {
39341 off -= 26;
39342 i--;
39343 }
39344 }
39345 if (carry !== 0) {
39346 out = carry.toString(16) + out;
39347 }
39348 while (out.length % padding !== 0) {
39349 out = '0' + out;
39350 }
39351 if (this.negative !== 0) {
39352 out = '-' + out;
39353 }
39354 return out;
39355 }
39356
39357 if (base === (base | 0) && base >= 2 && base <= 36) {
39358 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
39359 var groupSize = groupSizes[base];
39360 // var groupBase = Math.pow(base, groupSize);
39361 var groupBase = groupBases[base];
39362 out = '';
39363 var c = this.clone();
39364 c.negative = 0;
39365 while (!c.isZero()) {
39366 var r = c.modn(groupBase).toString(base);
39367 c = c.idivn(groupBase);
39368
39369 if (!c.isZero()) {
39370 out = zeros[groupSize - r.length] + r + out;
39371 } else {
39372 out = r + out;
39373 }
39374 }
39375 if (this.isZero()) {
39376 out = '0' + out;
39377 }
39378 while (out.length % padding !== 0) {
39379 out = '0' + out;
39380 }
39381 if (this.negative !== 0) {
39382 out = '-' + out;
39383 }
39384 return out;
39385 }
39386
39387 assert(false, 'Base should be between 2 and 36');
39388 };
39389
39390 BN.prototype.toNumber = function toNumber () {
39391 var ret = this.words[0];
39392 if (this.length === 2) {
39393 ret += this.words[1] * 0x4000000;
39394 } else if (this.length === 3 && this.words[2] === 0x01) {
39395 // NOTE: at this stage it is known that the top bit is set
39396 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
39397 } else if (this.length > 2) {
39398 assert(false, 'Number can only safely store up to 53 bits');
39399 }
39400 return (this.negative !== 0) ? -ret : ret;
39401 };
39402
39403 BN.prototype.toJSON = function toJSON () {
39404 return this.toString(16);
39405 };
39406
39407 BN.prototype.toBuffer = function toBuffer (endian, length) {
39408 assert(typeof Buffer !== 'undefined');
39409 return this.toArrayLike(Buffer, endian, length);
39410 };
39411
39412 BN.prototype.toArray = function toArray (endian, length) {
39413 return this.toArrayLike(Array, endian, length);
39414 };
39415
39416 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
39417 var byteLength = this.byteLength();
39418 var reqLength = length || Math.max(1, byteLength);
39419 assert(byteLength <= reqLength, 'byte array longer than desired length');
39420 assert(reqLength > 0, 'Requested array length <= 0');
39421
39422 this.strip();
39423 var littleEndian = endian === 'le';
39424 var res = new ArrayType(reqLength);
39425
39426 var b, i;
39427 var q = this.clone();
39428 if (!littleEndian) {
39429 // Assume big-endian
39430 for (i = 0; i < reqLength - byteLength; i++) {
39431 res[i] = 0;
39432 }
39433
39434 for (i = 0; !q.isZero(); i++) {
39435 b = q.andln(0xff);
39436 q.iushrn(8);
39437
39438 res[reqLength - i - 1] = b;
39439 }
39440 } else {
39441 for (i = 0; !q.isZero(); i++) {
39442 b = q.andln(0xff);
39443 q.iushrn(8);
39444
39445 res[i] = b;
39446 }
39447
39448 for (; i < reqLength; i++) {
39449 res[i] = 0;
39450 }
39451 }
39452
39453 return res;
39454 };
39455
39456 if (Math.clz32) {
39457 BN.prototype._countBits = function _countBits (w) {
39458 return 32 - Math.clz32(w);
39459 };
39460 } else {
39461 BN.prototype._countBits = function _countBits (w) {
39462 var t = w;
39463 var r = 0;
39464 if (t >= 0x1000) {
39465 r += 13;
39466 t >>>= 13;
39467 }
39468 if (t >= 0x40) {
39469 r += 7;
39470 t >>>= 7;
39471 }
39472 if (t >= 0x8) {
39473 r += 4;
39474 t >>>= 4;
39475 }
39476 if (t >= 0x02) {
39477 r += 2;
39478 t >>>= 2;
39479 }
39480 return r + t;
39481 };
39482 }
39483
39484 BN.prototype._zeroBits = function _zeroBits (w) {
39485 // Short-cut
39486 if (w === 0) return 26;
39487
39488 var t = w;
39489 var r = 0;
39490 if ((t & 0x1fff) === 0) {
39491 r += 13;
39492 t >>>= 13;
39493 }
39494 if ((t & 0x7f) === 0) {
39495 r += 7;
39496 t >>>= 7;
39497 }
39498 if ((t & 0xf) === 0) {
39499 r += 4;
39500 t >>>= 4;
39501 }
39502 if ((t & 0x3) === 0) {
39503 r += 2;
39504 t >>>= 2;
39505 }
39506 if ((t & 0x1) === 0) {
39507 r++;
39508 }
39509 return r;
39510 };
39511
39512 // Return number of used bits in a BN
39513 BN.prototype.bitLength = function bitLength () {
39514 var w = this.words[this.length - 1];
39515 var hi = this._countBits(w);
39516 return (this.length - 1) * 26 + hi;
39517 };
39518
39519 function toBitArray (num) {
39520 var w = new Array(num.bitLength());
39521
39522 for (var bit = 0; bit < w.length; bit++) {
39523 var off = (bit / 26) | 0;
39524 var wbit = bit % 26;
39525
39526 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
39527 }
39528
39529 return w;
39530 }
39531
39532 // Number of trailing zero bits
39533 BN.prototype.zeroBits = function zeroBits () {
39534 if (this.isZero()) return 0;
39535
39536 var r = 0;
39537 for (var i = 0; i < this.length; i++) {
39538 var b = this._zeroBits(this.words[i]);
39539 r += b;
39540 if (b !== 26) break;
39541 }
39542 return r;
39543 };
39544
39545 BN.prototype.byteLength = function byteLength () {
39546 return Math.ceil(this.bitLength() / 8);
39547 };
39548
39549 BN.prototype.toTwos = function toTwos (width) {
39550 if (this.negative !== 0) {
39551 return this.abs().inotn(width).iaddn(1);
39552 }
39553 return this.clone();
39554 };
39555
39556 BN.prototype.fromTwos = function fromTwos (width) {
39557 if (this.testn(width - 1)) {
39558 return this.notn(width).iaddn(1).ineg();
39559 }
39560 return this.clone();
39561 };
39562
39563 BN.prototype.isNeg = function isNeg () {
39564 return this.negative !== 0;
39565 };
39566
39567 // Return negative clone of `this`
39568 BN.prototype.neg = function neg () {
39569 return this.clone().ineg();
39570 };
39571
39572 BN.prototype.ineg = function ineg () {
39573 if (!this.isZero()) {
39574 this.negative ^= 1;
39575 }
39576
39577 return this;
39578 };
39579
39580 // Or `num` with `this` in-place
39581 BN.prototype.iuor = function iuor (num) {
39582 while (this.length < num.length) {
39583 this.words[this.length++] = 0;
39584 }
39585
39586 for (var i = 0; i < num.length; i++) {
39587 this.words[i] = this.words[i] | num.words[i];
39588 }
39589
39590 return this.strip();
39591 };
39592
39593 BN.prototype.ior = function ior (num) {
39594 assert((this.negative | num.negative) === 0);
39595 return this.iuor(num);
39596 };
39597
39598 // Or `num` with `this`
39599 BN.prototype.or = function or (num) {
39600 if (this.length > num.length) return this.clone().ior(num);
39601 return num.clone().ior(this);
39602 };
39603
39604 BN.prototype.uor = function uor (num) {
39605 if (this.length > num.length) return this.clone().iuor(num);
39606 return num.clone().iuor(this);
39607 };
39608
39609 // And `num` with `this` in-place
39610 BN.prototype.iuand = function iuand (num) {
39611 // b = min-length(num, this)
39612 var b;
39613 if (this.length > num.length) {
39614 b = num;
39615 } else {
39616 b = this;
39617 }
39618
39619 for (var i = 0; i < b.length; i++) {
39620 this.words[i] = this.words[i] & num.words[i];
39621 }
39622
39623 this.length = b.length;
39624
39625 return this.strip();
39626 };
39627
39628 BN.prototype.iand = function iand (num) {
39629 assert((this.negative | num.negative) === 0);
39630 return this.iuand(num);
39631 };
39632
39633 // And `num` with `this`
39634 BN.prototype.and = function and (num) {
39635 if (this.length > num.length) return this.clone().iand(num);
39636 return num.clone().iand(this);
39637 };
39638
39639 BN.prototype.uand = function uand (num) {
39640 if (this.length > num.length) return this.clone().iuand(num);
39641 return num.clone().iuand(this);
39642 };
39643
39644 // Xor `num` with `this` in-place
39645 BN.prototype.iuxor = function iuxor (num) {
39646 // a.length > b.length
39647 var a;
39648 var b;
39649 if (this.length > num.length) {
39650 a = this;
39651 b = num;
39652 } else {
39653 a = num;
39654 b = this;
39655 }
39656
39657 for (var i = 0; i < b.length; i++) {
39658 this.words[i] = a.words[i] ^ b.words[i];
39659 }
39660
39661 if (this !== a) {
39662 for (; i < a.length; i++) {
39663 this.words[i] = a.words[i];
39664 }
39665 }
39666
39667 this.length = a.length;
39668
39669 return this.strip();
39670 };
39671
39672 BN.prototype.ixor = function ixor (num) {
39673 assert((this.negative | num.negative) === 0);
39674 return this.iuxor(num);
39675 };
39676
39677 // Xor `num` with `this`
39678 BN.prototype.xor = function xor (num) {
39679 if (this.length > num.length) return this.clone().ixor(num);
39680 return num.clone().ixor(this);
39681 };
39682
39683 BN.prototype.uxor = function uxor (num) {
39684 if (this.length > num.length) return this.clone().iuxor(num);
39685 return num.clone().iuxor(this);
39686 };
39687
39688 // Not ``this`` with ``width`` bitwidth
39689 BN.prototype.inotn = function inotn (width) {
39690 assert(typeof width === 'number' && width >= 0);
39691
39692 var bytesNeeded = Math.ceil(width / 26) | 0;
39693 var bitsLeft = width % 26;
39694
39695 // Extend the buffer with leading zeroes
39696 this._expand(bytesNeeded);
39697
39698 if (bitsLeft > 0) {
39699 bytesNeeded--;
39700 }
39701
39702 // Handle complete words
39703 for (var i = 0; i < bytesNeeded; i++) {
39704 this.words[i] = ~this.words[i] & 0x3ffffff;
39705 }
39706
39707 // Handle the residue
39708 if (bitsLeft > 0) {
39709 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
39710 }
39711
39712 // And remove leading zeroes
39713 return this.strip();
39714 };
39715
39716 BN.prototype.notn = function notn (width) {
39717 return this.clone().inotn(width);
39718 };
39719
39720 // Set `bit` of `this`
39721 BN.prototype.setn = function setn (bit, val) {
39722 assert(typeof bit === 'number' && bit >= 0);
39723
39724 var off = (bit / 26) | 0;
39725 var wbit = bit % 26;
39726
39727 this._expand(off + 1);
39728
39729 if (val) {
39730 this.words[off] = this.words[off] | (1 << wbit);
39731 } else {
39732 this.words[off] = this.words[off] & ~(1 << wbit);
39733 }
39734
39735 return this.strip();
39736 };
39737
39738 // Add `num` to `this` in-place
39739 BN.prototype.iadd = function iadd (num) {
39740 var r;
39741
39742 // negative + positive
39743 if (this.negative !== 0 && num.negative === 0) {
39744 this.negative = 0;
39745 r = this.isub(num);
39746 this.negative ^= 1;
39747 return this._normSign();
39748
39749 // positive + negative
39750 } else if (this.negative === 0 && num.negative !== 0) {
39751 num.negative = 0;
39752 r = this.isub(num);
39753 num.negative = 1;
39754 return r._normSign();
39755 }
39756
39757 // a.length > b.length
39758 var a, b;
39759 if (this.length > num.length) {
39760 a = this;
39761 b = num;
39762 } else {
39763 a = num;
39764 b = this;
39765 }
39766
39767 var carry = 0;
39768 for (var i = 0; i < b.length; i++) {
39769 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
39770 this.words[i] = r & 0x3ffffff;
39771 carry = r >>> 26;
39772 }
39773 for (; carry !== 0 && i < a.length; i++) {
39774 r = (a.words[i] | 0) + carry;
39775 this.words[i] = r & 0x3ffffff;
39776 carry = r >>> 26;
39777 }
39778
39779 this.length = a.length;
39780 if (carry !== 0) {
39781 this.words[this.length] = carry;
39782 this.length++;
39783 // Copy the rest of the words
39784 } else if (a !== this) {
39785 for (; i < a.length; i++) {
39786 this.words[i] = a.words[i];
39787 }
39788 }
39789
39790 return this;
39791 };
39792
39793 // Add `num` to `this`
39794 BN.prototype.add = function add (num) {
39795 var res;
39796 if (num.negative !== 0 && this.negative === 0) {
39797 num.negative = 0;
39798 res = this.sub(num);
39799 num.negative ^= 1;
39800 return res;
39801 } else if (num.negative === 0 && this.negative !== 0) {
39802 this.negative = 0;
39803 res = num.sub(this);
39804 this.negative = 1;
39805 return res;
39806 }
39807
39808 if (this.length > num.length) return this.clone().iadd(num);
39809
39810 return num.clone().iadd(this);
39811 };
39812
39813 // Subtract `num` from `this` in-place
39814 BN.prototype.isub = function isub (num) {
39815 // this - (-num) = this + num
39816 if (num.negative !== 0) {
39817 num.negative = 0;
39818 var r = this.iadd(num);
39819 num.negative = 1;
39820 return r._normSign();
39821
39822 // -this - num = -(this + num)
39823 } else if (this.negative !== 0) {
39824 this.negative = 0;
39825 this.iadd(num);
39826 this.negative = 1;
39827 return this._normSign();
39828 }
39829
39830 // At this point both numbers are positive
39831 var cmp = this.cmp(num);
39832
39833 // Optimization - zeroify
39834 if (cmp === 0) {
39835 this.negative = 0;
39836 this.length = 1;
39837 this.words[0] = 0;
39838 return this;
39839 }
39840
39841 // a > b
39842 var a, b;
39843 if (cmp > 0) {
39844 a = this;
39845 b = num;
39846 } else {
39847 a = num;
39848 b = this;
39849 }
39850
39851 var carry = 0;
39852 for (var i = 0; i < b.length; i++) {
39853 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
39854 carry = r >> 26;
39855 this.words[i] = r & 0x3ffffff;
39856 }
39857 for (; carry !== 0 && i < a.length; i++) {
39858 r = (a.words[i] | 0) + carry;
39859 carry = r >> 26;
39860 this.words[i] = r & 0x3ffffff;
39861 }
39862
39863 // Copy rest of the words
39864 if (carry === 0 && i < a.length && a !== this) {
39865 for (; i < a.length; i++) {
39866 this.words[i] = a.words[i];
39867 }
39868 }
39869
39870 this.length = Math.max(this.length, i);
39871
39872 if (a !== this) {
39873 this.negative = 1;
39874 }
39875
39876 return this.strip();
39877 };
39878
39879 // Subtract `num` from `this`
39880 BN.prototype.sub = function sub (num) {
39881 return this.clone().isub(num);
39882 };
39883
39884 function smallMulTo (self, num, out) {
39885 out.negative = num.negative ^ self.negative;
39886 var len = (self.length + num.length) | 0;
39887 out.length = len;
39888 len = (len - 1) | 0;
39889
39890 // Peel one iteration (compiler can't do it, because of code complexity)
39891 var a = self.words[0] | 0;
39892 var b = num.words[0] | 0;
39893 var r = a * b;
39894
39895 var lo = r & 0x3ffffff;
39896 var carry = (r / 0x4000000) | 0;
39897 out.words[0] = lo;
39898
39899 for (var k = 1; k < len; k++) {
39900 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
39901 // note that ncarry could be >= 0x3ffffff
39902 var ncarry = carry >>> 26;
39903 var rword = carry & 0x3ffffff;
39904 var maxJ = Math.min(k, num.length - 1);
39905 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
39906 var i = (k - j) | 0;
39907 a = self.words[i] | 0;
39908 b = num.words[j] | 0;
39909 r = a * b + rword;
39910 ncarry += (r / 0x4000000) | 0;
39911 rword = r & 0x3ffffff;
39912 }
39913 out.words[k] = rword | 0;
39914 carry = ncarry | 0;
39915 }
39916 if (carry !== 0) {
39917 out.words[k] = carry | 0;
39918 } else {
39919 out.length--;
39920 }
39921
39922 return out.strip();
39923 }
39924
39925 // TODO(indutny): it may be reasonable to omit it for users who don't need
39926 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
39927 // multiplication (like elliptic secp256k1).
39928 var comb10MulTo = function comb10MulTo (self, num, out) {
39929 var a = self.words;
39930 var b = num.words;
39931 var o = out.words;
39932 var c = 0;
39933 var lo;
39934 var mid;
39935 var hi;
39936 var a0 = a[0] | 0;
39937 var al0 = a0 & 0x1fff;
39938 var ah0 = a0 >>> 13;
39939 var a1 = a[1] | 0;
39940 var al1 = a1 & 0x1fff;
39941 var ah1 = a1 >>> 13;
39942 var a2 = a[2] | 0;
39943 var al2 = a2 & 0x1fff;
39944 var ah2 = a2 >>> 13;
39945 var a3 = a[3] | 0;
39946 var al3 = a3 & 0x1fff;
39947 var ah3 = a3 >>> 13;
39948 var a4 = a[4] | 0;
39949 var al4 = a4 & 0x1fff;
39950 var ah4 = a4 >>> 13;
39951 var a5 = a[5] | 0;
39952 var al5 = a5 & 0x1fff;
39953 var ah5 = a5 >>> 13;
39954 var a6 = a[6] | 0;
39955 var al6 = a6 & 0x1fff;
39956 var ah6 = a6 >>> 13;
39957 var a7 = a[7] | 0;
39958 var al7 = a7 & 0x1fff;
39959 var ah7 = a7 >>> 13;
39960 var a8 = a[8] | 0;
39961 var al8 = a8 & 0x1fff;
39962 var ah8 = a8 >>> 13;
39963 var a9 = a[9] | 0;
39964 var al9 = a9 & 0x1fff;
39965 var ah9 = a9 >>> 13;
39966 var b0 = b[0] | 0;
39967 var bl0 = b0 & 0x1fff;
39968 var bh0 = b0 >>> 13;
39969 var b1 = b[1] | 0;
39970 var bl1 = b1 & 0x1fff;
39971 var bh1 = b1 >>> 13;
39972 var b2 = b[2] | 0;
39973 var bl2 = b2 & 0x1fff;
39974 var bh2 = b2 >>> 13;
39975 var b3 = b[3] | 0;
39976 var bl3 = b3 & 0x1fff;
39977 var bh3 = b3 >>> 13;
39978 var b4 = b[4] | 0;
39979 var bl4 = b4 & 0x1fff;
39980 var bh4 = b4 >>> 13;
39981 var b5 = b[5] | 0;
39982 var bl5 = b5 & 0x1fff;
39983 var bh5 = b5 >>> 13;
39984 var b6 = b[6] | 0;
39985 var bl6 = b6 & 0x1fff;
39986 var bh6 = b6 >>> 13;
39987 var b7 = b[7] | 0;
39988 var bl7 = b7 & 0x1fff;
39989 var bh7 = b7 >>> 13;
39990 var b8 = b[8] | 0;
39991 var bl8 = b8 & 0x1fff;
39992 var bh8 = b8 >>> 13;
39993 var b9 = b[9] | 0;
39994 var bl9 = b9 & 0x1fff;
39995 var bh9 = b9 >>> 13;
39996
39997 out.negative = self.negative ^ num.negative;
39998 out.length = 19;
39999 /* k = 0 */
40000 lo = Math.imul(al0, bl0);
40001 mid = Math.imul(al0, bh0);
40002 mid = (mid + Math.imul(ah0, bl0)) | 0;
40003 hi = Math.imul(ah0, bh0);
40004 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40005 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
40006 w0 &= 0x3ffffff;
40007 /* k = 1 */
40008 lo = Math.imul(al1, bl0);
40009 mid = Math.imul(al1, bh0);
40010 mid = (mid + Math.imul(ah1, bl0)) | 0;
40011 hi = Math.imul(ah1, bh0);
40012 lo = (lo + Math.imul(al0, bl1)) | 0;
40013 mid = (mid + Math.imul(al0, bh1)) | 0;
40014 mid = (mid + Math.imul(ah0, bl1)) | 0;
40015 hi = (hi + Math.imul(ah0, bh1)) | 0;
40016 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40017 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
40018 w1 &= 0x3ffffff;
40019 /* k = 2 */
40020 lo = Math.imul(al2, bl0);
40021 mid = Math.imul(al2, bh0);
40022 mid = (mid + Math.imul(ah2, bl0)) | 0;
40023 hi = Math.imul(ah2, bh0);
40024 lo = (lo + Math.imul(al1, bl1)) | 0;
40025 mid = (mid + Math.imul(al1, bh1)) | 0;
40026 mid = (mid + Math.imul(ah1, bl1)) | 0;
40027 hi = (hi + Math.imul(ah1, bh1)) | 0;
40028 lo = (lo + Math.imul(al0, bl2)) | 0;
40029 mid = (mid + Math.imul(al0, bh2)) | 0;
40030 mid = (mid + Math.imul(ah0, bl2)) | 0;
40031 hi = (hi + Math.imul(ah0, bh2)) | 0;
40032 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40033 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
40034 w2 &= 0x3ffffff;
40035 /* k = 3 */
40036 lo = Math.imul(al3, bl0);
40037 mid = Math.imul(al3, bh0);
40038 mid = (mid + Math.imul(ah3, bl0)) | 0;
40039 hi = Math.imul(ah3, bh0);
40040 lo = (lo + Math.imul(al2, bl1)) | 0;
40041 mid = (mid + Math.imul(al2, bh1)) | 0;
40042 mid = (mid + Math.imul(ah2, bl1)) | 0;
40043 hi = (hi + Math.imul(ah2, bh1)) | 0;
40044 lo = (lo + Math.imul(al1, bl2)) | 0;
40045 mid = (mid + Math.imul(al1, bh2)) | 0;
40046 mid = (mid + Math.imul(ah1, bl2)) | 0;
40047 hi = (hi + Math.imul(ah1, bh2)) | 0;
40048 lo = (lo + Math.imul(al0, bl3)) | 0;
40049 mid = (mid + Math.imul(al0, bh3)) | 0;
40050 mid = (mid + Math.imul(ah0, bl3)) | 0;
40051 hi = (hi + Math.imul(ah0, bh3)) | 0;
40052 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40053 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
40054 w3 &= 0x3ffffff;
40055 /* k = 4 */
40056 lo = Math.imul(al4, bl0);
40057 mid = Math.imul(al4, bh0);
40058 mid = (mid + Math.imul(ah4, bl0)) | 0;
40059 hi = Math.imul(ah4, bh0);
40060 lo = (lo + Math.imul(al3, bl1)) | 0;
40061 mid = (mid + Math.imul(al3, bh1)) | 0;
40062 mid = (mid + Math.imul(ah3, bl1)) | 0;
40063 hi = (hi + Math.imul(ah3, bh1)) | 0;
40064 lo = (lo + Math.imul(al2, bl2)) | 0;
40065 mid = (mid + Math.imul(al2, bh2)) | 0;
40066 mid = (mid + Math.imul(ah2, bl2)) | 0;
40067 hi = (hi + Math.imul(ah2, bh2)) | 0;
40068 lo = (lo + Math.imul(al1, bl3)) | 0;
40069 mid = (mid + Math.imul(al1, bh3)) | 0;
40070 mid = (mid + Math.imul(ah1, bl3)) | 0;
40071 hi = (hi + Math.imul(ah1, bh3)) | 0;
40072 lo = (lo + Math.imul(al0, bl4)) | 0;
40073 mid = (mid + Math.imul(al0, bh4)) | 0;
40074 mid = (mid + Math.imul(ah0, bl4)) | 0;
40075 hi = (hi + Math.imul(ah0, bh4)) | 0;
40076 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40077 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
40078 w4 &= 0x3ffffff;
40079 /* k = 5 */
40080 lo = Math.imul(al5, bl0);
40081 mid = Math.imul(al5, bh0);
40082 mid = (mid + Math.imul(ah5, bl0)) | 0;
40083 hi = Math.imul(ah5, bh0);
40084 lo = (lo + Math.imul(al4, bl1)) | 0;
40085 mid = (mid + Math.imul(al4, bh1)) | 0;
40086 mid = (mid + Math.imul(ah4, bl1)) | 0;
40087 hi = (hi + Math.imul(ah4, bh1)) | 0;
40088 lo = (lo + Math.imul(al3, bl2)) | 0;
40089 mid = (mid + Math.imul(al3, bh2)) | 0;
40090 mid = (mid + Math.imul(ah3, bl2)) | 0;
40091 hi = (hi + Math.imul(ah3, bh2)) | 0;
40092 lo = (lo + Math.imul(al2, bl3)) | 0;
40093 mid = (mid + Math.imul(al2, bh3)) | 0;
40094 mid = (mid + Math.imul(ah2, bl3)) | 0;
40095 hi = (hi + Math.imul(ah2, bh3)) | 0;
40096 lo = (lo + Math.imul(al1, bl4)) | 0;
40097 mid = (mid + Math.imul(al1, bh4)) | 0;
40098 mid = (mid + Math.imul(ah1, bl4)) | 0;
40099 hi = (hi + Math.imul(ah1, bh4)) | 0;
40100 lo = (lo + Math.imul(al0, bl5)) | 0;
40101 mid = (mid + Math.imul(al0, bh5)) | 0;
40102 mid = (mid + Math.imul(ah0, bl5)) | 0;
40103 hi = (hi + Math.imul(ah0, bh5)) | 0;
40104 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40105 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
40106 w5 &= 0x3ffffff;
40107 /* k = 6 */
40108 lo = Math.imul(al6, bl0);
40109 mid = Math.imul(al6, bh0);
40110 mid = (mid + Math.imul(ah6, bl0)) | 0;
40111 hi = Math.imul(ah6, bh0);
40112 lo = (lo + Math.imul(al5, bl1)) | 0;
40113 mid = (mid + Math.imul(al5, bh1)) | 0;
40114 mid = (mid + Math.imul(ah5, bl1)) | 0;
40115 hi = (hi + Math.imul(ah5, bh1)) | 0;
40116 lo = (lo + Math.imul(al4, bl2)) | 0;
40117 mid = (mid + Math.imul(al4, bh2)) | 0;
40118 mid = (mid + Math.imul(ah4, bl2)) | 0;
40119 hi = (hi + Math.imul(ah4, bh2)) | 0;
40120 lo = (lo + Math.imul(al3, bl3)) | 0;
40121 mid = (mid + Math.imul(al3, bh3)) | 0;
40122 mid = (mid + Math.imul(ah3, bl3)) | 0;
40123 hi = (hi + Math.imul(ah3, bh3)) | 0;
40124 lo = (lo + Math.imul(al2, bl4)) | 0;
40125 mid = (mid + Math.imul(al2, bh4)) | 0;
40126 mid = (mid + Math.imul(ah2, bl4)) | 0;
40127 hi = (hi + Math.imul(ah2, bh4)) | 0;
40128 lo = (lo + Math.imul(al1, bl5)) | 0;
40129 mid = (mid + Math.imul(al1, bh5)) | 0;
40130 mid = (mid + Math.imul(ah1, bl5)) | 0;
40131 hi = (hi + Math.imul(ah1, bh5)) | 0;
40132 lo = (lo + Math.imul(al0, bl6)) | 0;
40133 mid = (mid + Math.imul(al0, bh6)) | 0;
40134 mid = (mid + Math.imul(ah0, bl6)) | 0;
40135 hi = (hi + Math.imul(ah0, bh6)) | 0;
40136 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40137 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
40138 w6 &= 0x3ffffff;
40139 /* k = 7 */
40140 lo = Math.imul(al7, bl0);
40141 mid = Math.imul(al7, bh0);
40142 mid = (mid + Math.imul(ah7, bl0)) | 0;
40143 hi = Math.imul(ah7, bh0);
40144 lo = (lo + Math.imul(al6, bl1)) | 0;
40145 mid = (mid + Math.imul(al6, bh1)) | 0;
40146 mid = (mid + Math.imul(ah6, bl1)) | 0;
40147 hi = (hi + Math.imul(ah6, bh1)) | 0;
40148 lo = (lo + Math.imul(al5, bl2)) | 0;
40149 mid = (mid + Math.imul(al5, bh2)) | 0;
40150 mid = (mid + Math.imul(ah5, bl2)) | 0;
40151 hi = (hi + Math.imul(ah5, bh2)) | 0;
40152 lo = (lo + Math.imul(al4, bl3)) | 0;
40153 mid = (mid + Math.imul(al4, bh3)) | 0;
40154 mid = (mid + Math.imul(ah4, bl3)) | 0;
40155 hi = (hi + Math.imul(ah4, bh3)) | 0;
40156 lo = (lo + Math.imul(al3, bl4)) | 0;
40157 mid = (mid + Math.imul(al3, bh4)) | 0;
40158 mid = (mid + Math.imul(ah3, bl4)) | 0;
40159 hi = (hi + Math.imul(ah3, bh4)) | 0;
40160 lo = (lo + Math.imul(al2, bl5)) | 0;
40161 mid = (mid + Math.imul(al2, bh5)) | 0;
40162 mid = (mid + Math.imul(ah2, bl5)) | 0;
40163 hi = (hi + Math.imul(ah2, bh5)) | 0;
40164 lo = (lo + Math.imul(al1, bl6)) | 0;
40165 mid = (mid + Math.imul(al1, bh6)) | 0;
40166 mid = (mid + Math.imul(ah1, bl6)) | 0;
40167 hi = (hi + Math.imul(ah1, bh6)) | 0;
40168 lo = (lo + Math.imul(al0, bl7)) | 0;
40169 mid = (mid + Math.imul(al0, bh7)) | 0;
40170 mid = (mid + Math.imul(ah0, bl7)) | 0;
40171 hi = (hi + Math.imul(ah0, bh7)) | 0;
40172 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40173 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
40174 w7 &= 0x3ffffff;
40175 /* k = 8 */
40176 lo = Math.imul(al8, bl0);
40177 mid = Math.imul(al8, bh0);
40178 mid = (mid + Math.imul(ah8, bl0)) | 0;
40179 hi = Math.imul(ah8, bh0);
40180 lo = (lo + Math.imul(al7, bl1)) | 0;
40181 mid = (mid + Math.imul(al7, bh1)) | 0;
40182 mid = (mid + Math.imul(ah7, bl1)) | 0;
40183 hi = (hi + Math.imul(ah7, bh1)) | 0;
40184 lo = (lo + Math.imul(al6, bl2)) | 0;
40185 mid = (mid + Math.imul(al6, bh2)) | 0;
40186 mid = (mid + Math.imul(ah6, bl2)) | 0;
40187 hi = (hi + Math.imul(ah6, bh2)) | 0;
40188 lo = (lo + Math.imul(al5, bl3)) | 0;
40189 mid = (mid + Math.imul(al5, bh3)) | 0;
40190 mid = (mid + Math.imul(ah5, bl3)) | 0;
40191 hi = (hi + Math.imul(ah5, bh3)) | 0;
40192 lo = (lo + Math.imul(al4, bl4)) | 0;
40193 mid = (mid + Math.imul(al4, bh4)) | 0;
40194 mid = (mid + Math.imul(ah4, bl4)) | 0;
40195 hi = (hi + Math.imul(ah4, bh4)) | 0;
40196 lo = (lo + Math.imul(al3, bl5)) | 0;
40197 mid = (mid + Math.imul(al3, bh5)) | 0;
40198 mid = (mid + Math.imul(ah3, bl5)) | 0;
40199 hi = (hi + Math.imul(ah3, bh5)) | 0;
40200 lo = (lo + Math.imul(al2, bl6)) | 0;
40201 mid = (mid + Math.imul(al2, bh6)) | 0;
40202 mid = (mid + Math.imul(ah2, bl6)) | 0;
40203 hi = (hi + Math.imul(ah2, bh6)) | 0;
40204 lo = (lo + Math.imul(al1, bl7)) | 0;
40205 mid = (mid + Math.imul(al1, bh7)) | 0;
40206 mid = (mid + Math.imul(ah1, bl7)) | 0;
40207 hi = (hi + Math.imul(ah1, bh7)) | 0;
40208 lo = (lo + Math.imul(al0, bl8)) | 0;
40209 mid = (mid + Math.imul(al0, bh8)) | 0;
40210 mid = (mid + Math.imul(ah0, bl8)) | 0;
40211 hi = (hi + Math.imul(ah0, bh8)) | 0;
40212 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40213 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
40214 w8 &= 0x3ffffff;
40215 /* k = 9 */
40216 lo = Math.imul(al9, bl0);
40217 mid = Math.imul(al9, bh0);
40218 mid = (mid + Math.imul(ah9, bl0)) | 0;
40219 hi = Math.imul(ah9, bh0);
40220 lo = (lo + Math.imul(al8, bl1)) | 0;
40221 mid = (mid + Math.imul(al8, bh1)) | 0;
40222 mid = (mid + Math.imul(ah8, bl1)) | 0;
40223 hi = (hi + Math.imul(ah8, bh1)) | 0;
40224 lo = (lo + Math.imul(al7, bl2)) | 0;
40225 mid = (mid + Math.imul(al7, bh2)) | 0;
40226 mid = (mid + Math.imul(ah7, bl2)) | 0;
40227 hi = (hi + Math.imul(ah7, bh2)) | 0;
40228 lo = (lo + Math.imul(al6, bl3)) | 0;
40229 mid = (mid + Math.imul(al6, bh3)) | 0;
40230 mid = (mid + Math.imul(ah6, bl3)) | 0;
40231 hi = (hi + Math.imul(ah6, bh3)) | 0;
40232 lo = (lo + Math.imul(al5, bl4)) | 0;
40233 mid = (mid + Math.imul(al5, bh4)) | 0;
40234 mid = (mid + Math.imul(ah5, bl4)) | 0;
40235 hi = (hi + Math.imul(ah5, bh4)) | 0;
40236 lo = (lo + Math.imul(al4, bl5)) | 0;
40237 mid = (mid + Math.imul(al4, bh5)) | 0;
40238 mid = (mid + Math.imul(ah4, bl5)) | 0;
40239 hi = (hi + Math.imul(ah4, bh5)) | 0;
40240 lo = (lo + Math.imul(al3, bl6)) | 0;
40241 mid = (mid + Math.imul(al3, bh6)) | 0;
40242 mid = (mid + Math.imul(ah3, bl6)) | 0;
40243 hi = (hi + Math.imul(ah3, bh6)) | 0;
40244 lo = (lo + Math.imul(al2, bl7)) | 0;
40245 mid = (mid + Math.imul(al2, bh7)) | 0;
40246 mid = (mid + Math.imul(ah2, bl7)) | 0;
40247 hi = (hi + Math.imul(ah2, bh7)) | 0;
40248 lo = (lo + Math.imul(al1, bl8)) | 0;
40249 mid = (mid + Math.imul(al1, bh8)) | 0;
40250 mid = (mid + Math.imul(ah1, bl8)) | 0;
40251 hi = (hi + Math.imul(ah1, bh8)) | 0;
40252 lo = (lo + Math.imul(al0, bl9)) | 0;
40253 mid = (mid + Math.imul(al0, bh9)) | 0;
40254 mid = (mid + Math.imul(ah0, bl9)) | 0;
40255 hi = (hi + Math.imul(ah0, bh9)) | 0;
40256 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40257 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
40258 w9 &= 0x3ffffff;
40259 /* k = 10 */
40260 lo = Math.imul(al9, bl1);
40261 mid = Math.imul(al9, bh1);
40262 mid = (mid + Math.imul(ah9, bl1)) | 0;
40263 hi = Math.imul(ah9, bh1);
40264 lo = (lo + Math.imul(al8, bl2)) | 0;
40265 mid = (mid + Math.imul(al8, bh2)) | 0;
40266 mid = (mid + Math.imul(ah8, bl2)) | 0;
40267 hi = (hi + Math.imul(ah8, bh2)) | 0;
40268 lo = (lo + Math.imul(al7, bl3)) | 0;
40269 mid = (mid + Math.imul(al7, bh3)) | 0;
40270 mid = (mid + Math.imul(ah7, bl3)) | 0;
40271 hi = (hi + Math.imul(ah7, bh3)) | 0;
40272 lo = (lo + Math.imul(al6, bl4)) | 0;
40273 mid = (mid + Math.imul(al6, bh4)) | 0;
40274 mid = (mid + Math.imul(ah6, bl4)) | 0;
40275 hi = (hi + Math.imul(ah6, bh4)) | 0;
40276 lo = (lo + Math.imul(al5, bl5)) | 0;
40277 mid = (mid + Math.imul(al5, bh5)) | 0;
40278 mid = (mid + Math.imul(ah5, bl5)) | 0;
40279 hi = (hi + Math.imul(ah5, bh5)) | 0;
40280 lo = (lo + Math.imul(al4, bl6)) | 0;
40281 mid = (mid + Math.imul(al4, bh6)) | 0;
40282 mid = (mid + Math.imul(ah4, bl6)) | 0;
40283 hi = (hi + Math.imul(ah4, bh6)) | 0;
40284 lo = (lo + Math.imul(al3, bl7)) | 0;
40285 mid = (mid + Math.imul(al3, bh7)) | 0;
40286 mid = (mid + Math.imul(ah3, bl7)) | 0;
40287 hi = (hi + Math.imul(ah3, bh7)) | 0;
40288 lo = (lo + Math.imul(al2, bl8)) | 0;
40289 mid = (mid + Math.imul(al2, bh8)) | 0;
40290 mid = (mid + Math.imul(ah2, bl8)) | 0;
40291 hi = (hi + Math.imul(ah2, bh8)) | 0;
40292 lo = (lo + Math.imul(al1, bl9)) | 0;
40293 mid = (mid + Math.imul(al1, bh9)) | 0;
40294 mid = (mid + Math.imul(ah1, bl9)) | 0;
40295 hi = (hi + Math.imul(ah1, bh9)) | 0;
40296 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40297 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
40298 w10 &= 0x3ffffff;
40299 /* k = 11 */
40300 lo = Math.imul(al9, bl2);
40301 mid = Math.imul(al9, bh2);
40302 mid = (mid + Math.imul(ah9, bl2)) | 0;
40303 hi = Math.imul(ah9, bh2);
40304 lo = (lo + Math.imul(al8, bl3)) | 0;
40305 mid = (mid + Math.imul(al8, bh3)) | 0;
40306 mid = (mid + Math.imul(ah8, bl3)) | 0;
40307 hi = (hi + Math.imul(ah8, bh3)) | 0;
40308 lo = (lo + Math.imul(al7, bl4)) | 0;
40309 mid = (mid + Math.imul(al7, bh4)) | 0;
40310 mid = (mid + Math.imul(ah7, bl4)) | 0;
40311 hi = (hi + Math.imul(ah7, bh4)) | 0;
40312 lo = (lo + Math.imul(al6, bl5)) | 0;
40313 mid = (mid + Math.imul(al6, bh5)) | 0;
40314 mid = (mid + Math.imul(ah6, bl5)) | 0;
40315 hi = (hi + Math.imul(ah6, bh5)) | 0;
40316 lo = (lo + Math.imul(al5, bl6)) | 0;
40317 mid = (mid + Math.imul(al5, bh6)) | 0;
40318 mid = (mid + Math.imul(ah5, bl6)) | 0;
40319 hi = (hi + Math.imul(ah5, bh6)) | 0;
40320 lo = (lo + Math.imul(al4, bl7)) | 0;
40321 mid = (mid + Math.imul(al4, bh7)) | 0;
40322 mid = (mid + Math.imul(ah4, bl7)) | 0;
40323 hi = (hi + Math.imul(ah4, bh7)) | 0;
40324 lo = (lo + Math.imul(al3, bl8)) | 0;
40325 mid = (mid + Math.imul(al3, bh8)) | 0;
40326 mid = (mid + Math.imul(ah3, bl8)) | 0;
40327 hi = (hi + Math.imul(ah3, bh8)) | 0;
40328 lo = (lo + Math.imul(al2, bl9)) | 0;
40329 mid = (mid + Math.imul(al2, bh9)) | 0;
40330 mid = (mid + Math.imul(ah2, bl9)) | 0;
40331 hi = (hi + Math.imul(ah2, bh9)) | 0;
40332 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40333 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
40334 w11 &= 0x3ffffff;
40335 /* k = 12 */
40336 lo = Math.imul(al9, bl3);
40337 mid = Math.imul(al9, bh3);
40338 mid = (mid + Math.imul(ah9, bl3)) | 0;
40339 hi = Math.imul(ah9, bh3);
40340 lo = (lo + Math.imul(al8, bl4)) | 0;
40341 mid = (mid + Math.imul(al8, bh4)) | 0;
40342 mid = (mid + Math.imul(ah8, bl4)) | 0;
40343 hi = (hi + Math.imul(ah8, bh4)) | 0;
40344 lo = (lo + Math.imul(al7, bl5)) | 0;
40345 mid = (mid + Math.imul(al7, bh5)) | 0;
40346 mid = (mid + Math.imul(ah7, bl5)) | 0;
40347 hi = (hi + Math.imul(ah7, bh5)) | 0;
40348 lo = (lo + Math.imul(al6, bl6)) | 0;
40349 mid = (mid + Math.imul(al6, bh6)) | 0;
40350 mid = (mid + Math.imul(ah6, bl6)) | 0;
40351 hi = (hi + Math.imul(ah6, bh6)) | 0;
40352 lo = (lo + Math.imul(al5, bl7)) | 0;
40353 mid = (mid + Math.imul(al5, bh7)) | 0;
40354 mid = (mid + Math.imul(ah5, bl7)) | 0;
40355 hi = (hi + Math.imul(ah5, bh7)) | 0;
40356 lo = (lo + Math.imul(al4, bl8)) | 0;
40357 mid = (mid + Math.imul(al4, bh8)) | 0;
40358 mid = (mid + Math.imul(ah4, bl8)) | 0;
40359 hi = (hi + Math.imul(ah4, bh8)) | 0;
40360 lo = (lo + Math.imul(al3, bl9)) | 0;
40361 mid = (mid + Math.imul(al3, bh9)) | 0;
40362 mid = (mid + Math.imul(ah3, bl9)) | 0;
40363 hi = (hi + Math.imul(ah3, bh9)) | 0;
40364 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40365 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
40366 w12 &= 0x3ffffff;
40367 /* k = 13 */
40368 lo = Math.imul(al9, bl4);
40369 mid = Math.imul(al9, bh4);
40370 mid = (mid + Math.imul(ah9, bl4)) | 0;
40371 hi = Math.imul(ah9, bh4);
40372 lo = (lo + Math.imul(al8, bl5)) | 0;
40373 mid = (mid + Math.imul(al8, bh5)) | 0;
40374 mid = (mid + Math.imul(ah8, bl5)) | 0;
40375 hi = (hi + Math.imul(ah8, bh5)) | 0;
40376 lo = (lo + Math.imul(al7, bl6)) | 0;
40377 mid = (mid + Math.imul(al7, bh6)) | 0;
40378 mid = (mid + Math.imul(ah7, bl6)) | 0;
40379 hi = (hi + Math.imul(ah7, bh6)) | 0;
40380 lo = (lo + Math.imul(al6, bl7)) | 0;
40381 mid = (mid + Math.imul(al6, bh7)) | 0;
40382 mid = (mid + Math.imul(ah6, bl7)) | 0;
40383 hi = (hi + Math.imul(ah6, bh7)) | 0;
40384 lo = (lo + Math.imul(al5, bl8)) | 0;
40385 mid = (mid + Math.imul(al5, bh8)) | 0;
40386 mid = (mid + Math.imul(ah5, bl8)) | 0;
40387 hi = (hi + Math.imul(ah5, bh8)) | 0;
40388 lo = (lo + Math.imul(al4, bl9)) | 0;
40389 mid = (mid + Math.imul(al4, bh9)) | 0;
40390 mid = (mid + Math.imul(ah4, bl9)) | 0;
40391 hi = (hi + Math.imul(ah4, bh9)) | 0;
40392 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40393 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
40394 w13 &= 0x3ffffff;
40395 /* k = 14 */
40396 lo = Math.imul(al9, bl5);
40397 mid = Math.imul(al9, bh5);
40398 mid = (mid + Math.imul(ah9, bl5)) | 0;
40399 hi = Math.imul(ah9, bh5);
40400 lo = (lo + Math.imul(al8, bl6)) | 0;
40401 mid = (mid + Math.imul(al8, bh6)) | 0;
40402 mid = (mid + Math.imul(ah8, bl6)) | 0;
40403 hi = (hi + Math.imul(ah8, bh6)) | 0;
40404 lo = (lo + Math.imul(al7, bl7)) | 0;
40405 mid = (mid + Math.imul(al7, bh7)) | 0;
40406 mid = (mid + Math.imul(ah7, bl7)) | 0;
40407 hi = (hi + Math.imul(ah7, bh7)) | 0;
40408 lo = (lo + Math.imul(al6, bl8)) | 0;
40409 mid = (mid + Math.imul(al6, bh8)) | 0;
40410 mid = (mid + Math.imul(ah6, bl8)) | 0;
40411 hi = (hi + Math.imul(ah6, bh8)) | 0;
40412 lo = (lo + Math.imul(al5, bl9)) | 0;
40413 mid = (mid + Math.imul(al5, bh9)) | 0;
40414 mid = (mid + Math.imul(ah5, bl9)) | 0;
40415 hi = (hi + Math.imul(ah5, bh9)) | 0;
40416 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40417 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
40418 w14 &= 0x3ffffff;
40419 /* k = 15 */
40420 lo = Math.imul(al9, bl6);
40421 mid = Math.imul(al9, bh6);
40422 mid = (mid + Math.imul(ah9, bl6)) | 0;
40423 hi = Math.imul(ah9, bh6);
40424 lo = (lo + Math.imul(al8, bl7)) | 0;
40425 mid = (mid + Math.imul(al8, bh7)) | 0;
40426 mid = (mid + Math.imul(ah8, bl7)) | 0;
40427 hi = (hi + Math.imul(ah8, bh7)) | 0;
40428 lo = (lo + Math.imul(al7, bl8)) | 0;
40429 mid = (mid + Math.imul(al7, bh8)) | 0;
40430 mid = (mid + Math.imul(ah7, bl8)) | 0;
40431 hi = (hi + Math.imul(ah7, bh8)) | 0;
40432 lo = (lo + Math.imul(al6, bl9)) | 0;
40433 mid = (mid + Math.imul(al6, bh9)) | 0;
40434 mid = (mid + Math.imul(ah6, bl9)) | 0;
40435 hi = (hi + Math.imul(ah6, bh9)) | 0;
40436 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40437 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
40438 w15 &= 0x3ffffff;
40439 /* k = 16 */
40440 lo = Math.imul(al9, bl7);
40441 mid = Math.imul(al9, bh7);
40442 mid = (mid + Math.imul(ah9, bl7)) | 0;
40443 hi = Math.imul(ah9, bh7);
40444 lo = (lo + Math.imul(al8, bl8)) | 0;
40445 mid = (mid + Math.imul(al8, bh8)) | 0;
40446 mid = (mid + Math.imul(ah8, bl8)) | 0;
40447 hi = (hi + Math.imul(ah8, bh8)) | 0;
40448 lo = (lo + Math.imul(al7, bl9)) | 0;
40449 mid = (mid + Math.imul(al7, bh9)) | 0;
40450 mid = (mid + Math.imul(ah7, bl9)) | 0;
40451 hi = (hi + Math.imul(ah7, bh9)) | 0;
40452 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40453 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
40454 w16 &= 0x3ffffff;
40455 /* k = 17 */
40456 lo = Math.imul(al9, bl8);
40457 mid = Math.imul(al9, bh8);
40458 mid = (mid + Math.imul(ah9, bl8)) | 0;
40459 hi = Math.imul(ah9, bh8);
40460 lo = (lo + Math.imul(al8, bl9)) | 0;
40461 mid = (mid + Math.imul(al8, bh9)) | 0;
40462 mid = (mid + Math.imul(ah8, bl9)) | 0;
40463 hi = (hi + Math.imul(ah8, bh9)) | 0;
40464 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40465 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
40466 w17 &= 0x3ffffff;
40467 /* k = 18 */
40468 lo = Math.imul(al9, bl9);
40469 mid = Math.imul(al9, bh9);
40470 mid = (mid + Math.imul(ah9, bl9)) | 0;
40471 hi = Math.imul(ah9, bh9);
40472 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
40473 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
40474 w18 &= 0x3ffffff;
40475 o[0] = w0;
40476 o[1] = w1;
40477 o[2] = w2;
40478 o[3] = w3;
40479 o[4] = w4;
40480 o[5] = w5;
40481 o[6] = w6;
40482 o[7] = w7;
40483 o[8] = w8;
40484 o[9] = w9;
40485 o[10] = w10;
40486 o[11] = w11;
40487 o[12] = w12;
40488 o[13] = w13;
40489 o[14] = w14;
40490 o[15] = w15;
40491 o[16] = w16;
40492 o[17] = w17;
40493 o[18] = w18;
40494 if (c !== 0) {
40495 o[19] = c;
40496 out.length++;
40497 }
40498 return out;
40499 };
40500
40501 // Polyfill comb
40502 if (!Math.imul) {
40503 comb10MulTo = smallMulTo;
40504 }
40505
40506 function bigMulTo (self, num, out) {
40507 out.negative = num.negative ^ self.negative;
40508 out.length = self.length + num.length;
40509
40510 var carry = 0;
40511 var hncarry = 0;
40512 for (var k = 0; k < out.length - 1; k++) {
40513 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
40514 // note that ncarry could be >= 0x3ffffff
40515 var ncarry = hncarry;
40516 hncarry = 0;
40517 var rword = carry & 0x3ffffff;
40518 var maxJ = Math.min(k, num.length - 1);
40519 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
40520 var i = k - j;
40521 var a = self.words[i] | 0;
40522 var b = num.words[j] | 0;
40523 var r = a * b;
40524
40525 var lo = r & 0x3ffffff;
40526 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
40527 lo = (lo + rword) | 0;
40528 rword = lo & 0x3ffffff;
40529 ncarry = (ncarry + (lo >>> 26)) | 0;
40530
40531 hncarry += ncarry >>> 26;
40532 ncarry &= 0x3ffffff;
40533 }
40534 out.words[k] = rword;
40535 carry = ncarry;
40536 ncarry = hncarry;
40537 }
40538 if (carry !== 0) {
40539 out.words[k] = carry;
40540 } else {
40541 out.length--;
40542 }
40543
40544 return out.strip();
40545 }
40546
40547 function jumboMulTo (self, num, out) {
40548 var fftm = new FFTM();
40549 return fftm.mulp(self, num, out);
40550 }
40551
40552 BN.prototype.mulTo = function mulTo (num, out) {
40553 var res;
40554 var len = this.length + num.length;
40555 if (this.length === 10 && num.length === 10) {
40556 res = comb10MulTo(this, num, out);
40557 } else if (len < 63) {
40558 res = smallMulTo(this, num, out);
40559 } else if (len < 1024) {
40560 res = bigMulTo(this, num, out);
40561 } else {
40562 res = jumboMulTo(this, num, out);
40563 }
40564
40565 return res;
40566 };
40567
40568 // Cooley-Tukey algorithm for FFT
40569 // slightly revisited to rely on looping instead of recursion
40570
40571 function FFTM (x, y) {
40572 this.x = x;
40573 this.y = y;
40574 }
40575
40576 FFTM.prototype.makeRBT = function makeRBT (N) {
40577 var t = new Array(N);
40578 var l = BN.prototype._countBits(N) - 1;
40579 for (var i = 0; i < N; i++) {
40580 t[i] = this.revBin(i, l, N);
40581 }
40582
40583 return t;
40584 };
40585
40586 // Returns binary-reversed representation of `x`
40587 FFTM.prototype.revBin = function revBin (x, l, N) {
40588 if (x === 0 || x === N - 1) return x;
40589
40590 var rb = 0;
40591 for (var i = 0; i < l; i++) {
40592 rb |= (x & 1) << (l - i - 1);
40593 x >>= 1;
40594 }
40595
40596 return rb;
40597 };
40598
40599 // Performs "tweedling" phase, therefore 'emulating'
40600 // behaviour of the recursive algorithm
40601 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
40602 for (var i = 0; i < N; i++) {
40603 rtws[i] = rws[rbt[i]];
40604 itws[i] = iws[rbt[i]];
40605 }
40606 };
40607
40608 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
40609 this.permute(rbt, rws, iws, rtws, itws, N);
40610
40611 for (var s = 1; s < N; s <<= 1) {
40612 var l = s << 1;
40613
40614 var rtwdf = Math.cos(2 * Math.PI / l);
40615 var itwdf = Math.sin(2 * Math.PI / l);
40616
40617 for (var p = 0; p < N; p += l) {
40618 var rtwdf_ = rtwdf;
40619 var itwdf_ = itwdf;
40620
40621 for (var j = 0; j < s; j++) {
40622 var re = rtws[p + j];
40623 var ie = itws[p + j];
40624
40625 var ro = rtws[p + j + s];
40626 var io = itws[p + j + s];
40627
40628 var rx = rtwdf_ * ro - itwdf_ * io;
40629
40630 io = rtwdf_ * io + itwdf_ * ro;
40631 ro = rx;
40632
40633 rtws[p + j] = re + ro;
40634 itws[p + j] = ie + io;
40635
40636 rtws[p + j + s] = re - ro;
40637 itws[p + j + s] = ie - io;
40638
40639 /* jshint maxdepth : false */
40640 if (j !== l) {
40641 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
40642
40643 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
40644 rtwdf_ = rx;
40645 }
40646 }
40647 }
40648 }
40649 };
40650
40651 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
40652 var N = Math.max(m, n) | 1;
40653 var odd = N & 1;
40654 var i = 0;
40655 for (N = N / 2 | 0; N; N = N >>> 1) {
40656 i++;
40657 }
40658
40659 return 1 << i + 1 + odd;
40660 };
40661
40662 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
40663 if (N <= 1) return;
40664
40665 for (var i = 0; i < N / 2; i++) {
40666 var t = rws[i];
40667
40668 rws[i] = rws[N - i - 1];
40669 rws[N - i - 1] = t;
40670
40671 t = iws[i];
40672
40673 iws[i] = -iws[N - i - 1];
40674 iws[N - i - 1] = -t;
40675 }
40676 };
40677
40678 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
40679 var carry = 0;
40680 for (var i = 0; i < N / 2; i++) {
40681 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
40682 Math.round(ws[2 * i] / N) +
40683 carry;
40684
40685 ws[i] = w & 0x3ffffff;
40686
40687 if (w < 0x4000000) {
40688 carry = 0;
40689 } else {
40690 carry = w / 0x4000000 | 0;
40691 }
40692 }
40693
40694 return ws;
40695 };
40696
40697 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
40698 var carry = 0;
40699 for (var i = 0; i < len; i++) {
40700 carry = carry + (ws[i] | 0);
40701
40702 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
40703 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
40704 }
40705
40706 // Pad with zeroes
40707 for (i = 2 * len; i < N; ++i) {
40708 rws[i] = 0;
40709 }
40710
40711 assert(carry === 0);
40712 assert((carry & ~0x1fff) === 0);
40713 };
40714
40715 FFTM.prototype.stub = function stub (N) {
40716 var ph = new Array(N);
40717 for (var i = 0; i < N; i++) {
40718 ph[i] = 0;
40719 }
40720
40721 return ph;
40722 };
40723
40724 FFTM.prototype.mulp = function mulp (x, y, out) {
40725 var N = 2 * this.guessLen13b(x.length, y.length);
40726
40727 var rbt = this.makeRBT(N);
40728
40729 var _ = this.stub(N);
40730
40731 var rws = new Array(N);
40732 var rwst = new Array(N);
40733 var iwst = new Array(N);
40734
40735 var nrws = new Array(N);
40736 var nrwst = new Array(N);
40737 var niwst = new Array(N);
40738
40739 var rmws = out.words;
40740 rmws.length = N;
40741
40742 this.convert13b(x.words, x.length, rws, N);
40743 this.convert13b(y.words, y.length, nrws, N);
40744
40745 this.transform(rws, _, rwst, iwst, N, rbt);
40746 this.transform(nrws, _, nrwst, niwst, N, rbt);
40747
40748 for (var i = 0; i < N; i++) {
40749 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
40750 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
40751 rwst[i] = rx;
40752 }
40753
40754 this.conjugate(rwst, iwst, N);
40755 this.transform(rwst, iwst, rmws, _, N, rbt);
40756 this.conjugate(rmws, _, N);
40757 this.normalize13b(rmws, N);
40758
40759 out.negative = x.negative ^ y.negative;
40760 out.length = x.length + y.length;
40761 return out.strip();
40762 };
40763
40764 // Multiply `this` by `num`
40765 BN.prototype.mul = function mul (num) {
40766 var out = new BN(null);
40767 out.words = new Array(this.length + num.length);
40768 return this.mulTo(num, out);
40769 };
40770
40771 // Multiply employing FFT
40772 BN.prototype.mulf = function mulf (num) {
40773 var out = new BN(null);
40774 out.words = new Array(this.length + num.length);
40775 return jumboMulTo(this, num, out);
40776 };
40777
40778 // In-place Multiplication
40779 BN.prototype.imul = function imul (num) {
40780 return this.clone().mulTo(num, this);
40781 };
40782
40783 BN.prototype.imuln = function imuln (num) {
40784 assert(typeof num === 'number');
40785 assert(num < 0x4000000);
40786
40787 // Carry
40788 var carry = 0;
40789 for (var i = 0; i < this.length; i++) {
40790 var w = (this.words[i] | 0) * num;
40791 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
40792 carry >>= 26;
40793 carry += (w / 0x4000000) | 0;
40794 // NOTE: lo is 27bit maximum
40795 carry += lo >>> 26;
40796 this.words[i] = lo & 0x3ffffff;
40797 }
40798
40799 if (carry !== 0) {
40800 this.words[i] = carry;
40801 this.length++;
40802 }
40803
40804 return this;
40805 };
40806
40807 BN.prototype.muln = function muln (num) {
40808 return this.clone().imuln(num);
40809 };
40810
40811 // `this` * `this`
40812 BN.prototype.sqr = function sqr () {
40813 return this.mul(this);
40814 };
40815
40816 // `this` * `this` in-place
40817 BN.prototype.isqr = function isqr () {
40818 return this.imul(this.clone());
40819 };
40820
40821 // Math.pow(`this`, `num`)
40822 BN.prototype.pow = function pow (num) {
40823 var w = toBitArray(num);
40824 if (w.length === 0) return new BN(1);
40825
40826 // Skip leading zeroes
40827 var res = this;
40828 for (var i = 0; i < w.length; i++, res = res.sqr()) {
40829 if (w[i] !== 0) break;
40830 }
40831
40832 if (++i < w.length) {
40833 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
40834 if (w[i] === 0) continue;
40835
40836 res = res.mul(q);
40837 }
40838 }
40839
40840 return res;
40841 };
40842
40843 // Shift-left in-place
40844 BN.prototype.iushln = function iushln (bits) {
40845 assert(typeof bits === 'number' && bits >= 0);
40846 var r = bits % 26;
40847 var s = (bits - r) / 26;
40848 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
40849 var i;
40850
40851 if (r !== 0) {
40852 var carry = 0;
40853
40854 for (i = 0; i < this.length; i++) {
40855 var newCarry = this.words[i] & carryMask;
40856 var c = ((this.words[i] | 0) - newCarry) << r;
40857 this.words[i] = c | carry;
40858 carry = newCarry >>> (26 - r);
40859 }
40860
40861 if (carry) {
40862 this.words[i] = carry;
40863 this.length++;
40864 }
40865 }
40866
40867 if (s !== 0) {
40868 for (i = this.length - 1; i >= 0; i--) {
40869 this.words[i + s] = this.words[i];
40870 }
40871
40872 for (i = 0; i < s; i++) {
40873 this.words[i] = 0;
40874 }
40875
40876 this.length += s;
40877 }
40878
40879 return this.strip();
40880 };
40881
40882 BN.prototype.ishln = function ishln (bits) {
40883 // TODO(indutny): implement me
40884 assert(this.negative === 0);
40885 return this.iushln(bits);
40886 };
40887
40888 // Shift-right in-place
40889 // NOTE: `hint` is a lowest bit before trailing zeroes
40890 // NOTE: if `extended` is present - it will be filled with destroyed bits
40891 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
40892 assert(typeof bits === 'number' && bits >= 0);
40893 var h;
40894 if (hint) {
40895 h = (hint - (hint % 26)) / 26;
40896 } else {
40897 h = 0;
40898 }
40899
40900 var r = bits % 26;
40901 var s = Math.min((bits - r) / 26, this.length);
40902 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
40903 var maskedWords = extended;
40904
40905 h -= s;
40906 h = Math.max(0, h);
40907
40908 // Extended mode, copy masked part
40909 if (maskedWords) {
40910 for (var i = 0; i < s; i++) {
40911 maskedWords.words[i] = this.words[i];
40912 }
40913 maskedWords.length = s;
40914 }
40915
40916 if (s === 0) {
40917 // No-op, we should not move anything at all
40918 } else if (this.length > s) {
40919 this.length -= s;
40920 for (i = 0; i < this.length; i++) {
40921 this.words[i] = this.words[i + s];
40922 }
40923 } else {
40924 this.words[0] = 0;
40925 this.length = 1;
40926 }
40927
40928 var carry = 0;
40929 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
40930 var word = this.words[i] | 0;
40931 this.words[i] = (carry << (26 - r)) | (word >>> r);
40932 carry = word & mask;
40933 }
40934
40935 // Push carried bits as a mask
40936 if (maskedWords && carry !== 0) {
40937 maskedWords.words[maskedWords.length++] = carry;
40938 }
40939
40940 if (this.length === 0) {
40941 this.words[0] = 0;
40942 this.length = 1;
40943 }
40944
40945 return this.strip();
40946 };
40947
40948 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
40949 // TODO(indutny): implement me
40950 assert(this.negative === 0);
40951 return this.iushrn(bits, hint, extended);
40952 };
40953
40954 // Shift-left
40955 BN.prototype.shln = function shln (bits) {
40956 return this.clone().ishln(bits);
40957 };
40958
40959 BN.prototype.ushln = function ushln (bits) {
40960 return this.clone().iushln(bits);
40961 };
40962
40963 // Shift-right
40964 BN.prototype.shrn = function shrn (bits) {
40965 return this.clone().ishrn(bits);
40966 };
40967
40968 BN.prototype.ushrn = function ushrn (bits) {
40969 return this.clone().iushrn(bits);
40970 };
40971
40972 // Test if n bit is set
40973 BN.prototype.testn = function testn (bit) {
40974 assert(typeof bit === 'number' && bit >= 0);
40975 var r = bit % 26;
40976 var s = (bit - r) / 26;
40977 var q = 1 << r;
40978
40979 // Fast case: bit is much higher than all existing words
40980 if (this.length <= s) return false;
40981
40982 // Check bit and return
40983 var w = this.words[s];
40984
40985 return !!(w & q);
40986 };
40987
40988 // Return only lowers bits of number (in-place)
40989 BN.prototype.imaskn = function imaskn (bits) {
40990 assert(typeof bits === 'number' && bits >= 0);
40991 var r = bits % 26;
40992 var s = (bits - r) / 26;
40993
40994 assert(this.negative === 0, 'imaskn works only with positive numbers');
40995
40996 if (this.length <= s) {
40997 return this;
40998 }
40999
41000 if (r !== 0) {
41001 s++;
41002 }
41003 this.length = Math.min(s, this.length);
41004
41005 if (r !== 0) {
41006 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
41007 this.words[this.length - 1] &= mask;
41008 }
41009
41010 return this.strip();
41011 };
41012
41013 // Return only lowers bits of number
41014 BN.prototype.maskn = function maskn (bits) {
41015 return this.clone().imaskn(bits);
41016 };
41017
41018 // Add plain number `num` to `this`
41019 BN.prototype.iaddn = function iaddn (num) {
41020 assert(typeof num === 'number');
41021 assert(num < 0x4000000);
41022 if (num < 0) return this.isubn(-num);
41023
41024 // Possible sign change
41025 if (this.negative !== 0) {
41026 if (this.length === 1 && (this.words[0] | 0) < num) {
41027 this.words[0] = num - (this.words[0] | 0);
41028 this.negative = 0;
41029 return this;
41030 }
41031
41032 this.negative = 0;
41033 this.isubn(num);
41034 this.negative = 1;
41035 return this;
41036 }
41037
41038 // Add without checks
41039 return this._iaddn(num);
41040 };
41041
41042 BN.prototype._iaddn = function _iaddn (num) {
41043 this.words[0] += num;
41044
41045 // Carry
41046 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
41047 this.words[i] -= 0x4000000;
41048 if (i === this.length - 1) {
41049 this.words[i + 1] = 1;
41050 } else {
41051 this.words[i + 1]++;
41052 }
41053 }
41054 this.length = Math.max(this.length, i + 1);
41055
41056 return this;
41057 };
41058
41059 // Subtract plain number `num` from `this`
41060 BN.prototype.isubn = function isubn (num) {
41061 assert(typeof num === 'number');
41062 assert(num < 0x4000000);
41063 if (num < 0) return this.iaddn(-num);
41064
41065 if (this.negative !== 0) {
41066 this.negative = 0;
41067 this.iaddn(num);
41068 this.negative = 1;
41069 return this;
41070 }
41071
41072 this.words[0] -= num;
41073
41074 if (this.length === 1 && this.words[0] < 0) {
41075 this.words[0] = -this.words[0];
41076 this.negative = 1;
41077 } else {
41078 // Carry
41079 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
41080 this.words[i] += 0x4000000;
41081 this.words[i + 1] -= 1;
41082 }
41083 }
41084
41085 return this.strip();
41086 };
41087
41088 BN.prototype.addn = function addn (num) {
41089 return this.clone().iaddn(num);
41090 };
41091
41092 BN.prototype.subn = function subn (num) {
41093 return this.clone().isubn(num);
41094 };
41095
41096 BN.prototype.iabs = function iabs () {
41097 this.negative = 0;
41098
41099 return this;
41100 };
41101
41102 BN.prototype.abs = function abs () {
41103 return this.clone().iabs();
41104 };
41105
41106 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
41107 var len = num.length + shift;
41108 var i;
41109
41110 this._expand(len);
41111
41112 var w;
41113 var carry = 0;
41114 for (i = 0; i < num.length; i++) {
41115 w = (this.words[i + shift] | 0) + carry;
41116 var right = (num.words[i] | 0) * mul;
41117 w -= right & 0x3ffffff;
41118 carry = (w >> 26) - ((right / 0x4000000) | 0);
41119 this.words[i + shift] = w & 0x3ffffff;
41120 }
41121 for (; i < this.length - shift; i++) {
41122 w = (this.words[i + shift] | 0) + carry;
41123 carry = w >> 26;
41124 this.words[i + shift] = w & 0x3ffffff;
41125 }
41126
41127 if (carry === 0) return this.strip();
41128
41129 // Subtraction overflow
41130 assert(carry === -1);
41131 carry = 0;
41132 for (i = 0; i < this.length; i++) {
41133 w = -(this.words[i] | 0) + carry;
41134 carry = w >> 26;
41135 this.words[i] = w & 0x3ffffff;
41136 }
41137 this.negative = 1;
41138
41139 return this.strip();
41140 };
41141
41142 BN.prototype._wordDiv = function _wordDiv (num, mode) {
41143 var shift = this.length - num.length;
41144
41145 var a = this.clone();
41146 var b = num;
41147
41148 // Normalize
41149 var bhi = b.words[b.length - 1] | 0;
41150 var bhiBits = this._countBits(bhi);
41151 shift = 26 - bhiBits;
41152 if (shift !== 0) {
41153 b = b.ushln(shift);
41154 a.iushln(shift);
41155 bhi = b.words[b.length - 1] | 0;
41156 }
41157
41158 // Initialize quotient
41159 var m = a.length - b.length;
41160 var q;
41161
41162 if (mode !== 'mod') {
41163 q = new BN(null);
41164 q.length = m + 1;
41165 q.words = new Array(q.length);
41166 for (var i = 0; i < q.length; i++) {
41167 q.words[i] = 0;
41168 }
41169 }
41170
41171 var diff = a.clone()._ishlnsubmul(b, 1, m);
41172 if (diff.negative === 0) {
41173 a = diff;
41174 if (q) {
41175 q.words[m] = 1;
41176 }
41177 }
41178
41179 for (var j = m - 1; j >= 0; j--) {
41180 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
41181 (a.words[b.length + j - 1] | 0);
41182
41183 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
41184 // (0x7ffffff)
41185 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
41186
41187 a._ishlnsubmul(b, qj, j);
41188 while (a.negative !== 0) {
41189 qj--;
41190 a.negative = 0;
41191 a._ishlnsubmul(b, 1, j);
41192 if (!a.isZero()) {
41193 a.negative ^= 1;
41194 }
41195 }
41196 if (q) {
41197 q.words[j] = qj;
41198 }
41199 }
41200 if (q) {
41201 q.strip();
41202 }
41203 a.strip();
41204
41205 // Denormalize
41206 if (mode !== 'div' && shift !== 0) {
41207 a.iushrn(shift);
41208 }
41209
41210 return {
41211 div: q || null,
41212 mod: a
41213 };
41214 };
41215
41216 // NOTE: 1) `mode` can be set to `mod` to request mod only,
41217 // to `div` to request div only, or be absent to
41218 // request both div & mod
41219 // 2) `positive` is true if unsigned mod is requested
41220 BN.prototype.divmod = function divmod (num, mode, positive) {
41221 assert(!num.isZero());
41222
41223 if (this.isZero()) {
41224 return {
41225 div: new BN(0),
41226 mod: new BN(0)
41227 };
41228 }
41229
41230 var div, mod, res;
41231 if (this.negative !== 0 && num.negative === 0) {
41232 res = this.neg().divmod(num, mode);
41233
41234 if (mode !== 'mod') {
41235 div = res.div.neg();
41236 }
41237
41238 if (mode !== 'div') {
41239 mod = res.mod.neg();
41240 if (positive && mod.negative !== 0) {
41241 mod.iadd(num);
41242 }
41243 }
41244
41245 return {
41246 div: div,
41247 mod: mod
41248 };
41249 }
41250
41251 if (this.negative === 0 && num.negative !== 0) {
41252 res = this.divmod(num.neg(), mode);
41253
41254 if (mode !== 'mod') {
41255 div = res.div.neg();
41256 }
41257
41258 return {
41259 div: div,
41260 mod: res.mod
41261 };
41262 }
41263
41264 if ((this.negative & num.negative) !== 0) {
41265 res = this.neg().divmod(num.neg(), mode);
41266
41267 if (mode !== 'div') {
41268 mod = res.mod.neg();
41269 if (positive && mod.negative !== 0) {
41270 mod.isub(num);
41271 }
41272 }
41273
41274 return {
41275 div: res.div,
41276 mod: mod
41277 };
41278 }
41279
41280 // Both numbers are positive at this point
41281
41282 // Strip both numbers to approximate shift value
41283 if (num.length > this.length || this.cmp(num) < 0) {
41284 return {
41285 div: new BN(0),
41286 mod: this
41287 };
41288 }
41289
41290 // Very short reduction
41291 if (num.length === 1) {
41292 if (mode === 'div') {
41293 return {
41294 div: this.divn(num.words[0]),
41295 mod: null
41296 };
41297 }
41298
41299 if (mode === 'mod') {
41300 return {
41301 div: null,
41302 mod: new BN(this.modn(num.words[0]))
41303 };
41304 }
41305
41306 return {
41307 div: this.divn(num.words[0]),
41308 mod: new BN(this.modn(num.words[0]))
41309 };
41310 }
41311
41312 return this._wordDiv(num, mode);
41313 };
41314
41315 // Find `this` / `num`
41316 BN.prototype.div = function div (num) {
41317 return this.divmod(num, 'div', false).div;
41318 };
41319
41320 // Find `this` % `num`
41321 BN.prototype.mod = function mod (num) {
41322 return this.divmod(num, 'mod', false).mod;
41323 };
41324
41325 BN.prototype.umod = function umod (num) {
41326 return this.divmod(num, 'mod', true).mod;
41327 };
41328
41329 // Find Round(`this` / `num`)
41330 BN.prototype.divRound = function divRound (num) {
41331 var dm = this.divmod(num);
41332
41333 // Fast case - exact division
41334 if (dm.mod.isZero()) return dm.div;
41335
41336 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
41337
41338 var half = num.ushrn(1);
41339 var r2 = num.andln(1);
41340 var cmp = mod.cmp(half);
41341
41342 // Round down
41343 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
41344
41345 // Round up
41346 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
41347 };
41348
41349 BN.prototype.modn = function modn (num) {
41350 assert(num <= 0x3ffffff);
41351 var p = (1 << 26) % num;
41352
41353 var acc = 0;
41354 for (var i = this.length - 1; i >= 0; i--) {
41355 acc = (p * acc + (this.words[i] | 0)) % num;
41356 }
41357
41358 return acc;
41359 };
41360
41361 // In-place division by number
41362 BN.prototype.idivn = function idivn (num) {
41363 assert(num <= 0x3ffffff);
41364
41365 var carry = 0;
41366 for (var i = this.length - 1; i >= 0; i--) {
41367 var w = (this.words[i] | 0) + carry * 0x4000000;
41368 this.words[i] = (w / num) | 0;
41369 carry = w % num;
41370 }
41371
41372 return this.strip();
41373 };
41374
41375 BN.prototype.divn = function divn (num) {
41376 return this.clone().idivn(num);
41377 };
41378
41379 BN.prototype.egcd = function egcd (p) {
41380 assert(p.negative === 0);
41381 assert(!p.isZero());
41382
41383 var x = this;
41384 var y = p.clone();
41385
41386 if (x.negative !== 0) {
41387 x = x.umod(p);
41388 } else {
41389 x = x.clone();
41390 }
41391
41392 // A * x + B * y = x
41393 var A = new BN(1);
41394 var B = new BN(0);
41395
41396 // C * x + D * y = y
41397 var C = new BN(0);
41398 var D = new BN(1);
41399
41400 var g = 0;
41401
41402 while (x.isEven() && y.isEven()) {
41403 x.iushrn(1);
41404 y.iushrn(1);
41405 ++g;
41406 }
41407
41408 var yp = y.clone();
41409 var xp = x.clone();
41410
41411 while (!x.isZero()) {
41412 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
41413 if (i > 0) {
41414 x.iushrn(i);
41415 while (i-- > 0) {
41416 if (A.isOdd() || B.isOdd()) {
41417 A.iadd(yp);
41418 B.isub(xp);
41419 }
41420
41421 A.iushrn(1);
41422 B.iushrn(1);
41423 }
41424 }
41425
41426 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
41427 if (j > 0) {
41428 y.iushrn(j);
41429 while (j-- > 0) {
41430 if (C.isOdd() || D.isOdd()) {
41431 C.iadd(yp);
41432 D.isub(xp);
41433 }
41434
41435 C.iushrn(1);
41436 D.iushrn(1);
41437 }
41438 }
41439
41440 if (x.cmp(y) >= 0) {
41441 x.isub(y);
41442 A.isub(C);
41443 B.isub(D);
41444 } else {
41445 y.isub(x);
41446 C.isub(A);
41447 D.isub(B);
41448 }
41449 }
41450
41451 return {
41452 a: C,
41453 b: D,
41454 gcd: y.iushln(g)
41455 };
41456 };
41457
41458 // This is reduced incarnation of the binary EEA
41459 // above, designated to invert members of the
41460 // _prime_ fields F(p) at a maximal speed
41461 BN.prototype._invmp = function _invmp (p) {
41462 assert(p.negative === 0);
41463 assert(!p.isZero());
41464
41465 var a = this;
41466 var b = p.clone();
41467
41468 if (a.negative !== 0) {
41469 a = a.umod(p);
41470 } else {
41471 a = a.clone();
41472 }
41473
41474 var x1 = new BN(1);
41475 var x2 = new BN(0);
41476
41477 var delta = b.clone();
41478
41479 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
41480 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
41481 if (i > 0) {
41482 a.iushrn(i);
41483 while (i-- > 0) {
41484 if (x1.isOdd()) {
41485 x1.iadd(delta);
41486 }
41487
41488 x1.iushrn(1);
41489 }
41490 }
41491
41492 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
41493 if (j > 0) {
41494 b.iushrn(j);
41495 while (j-- > 0) {
41496 if (x2.isOdd()) {
41497 x2.iadd(delta);
41498 }
41499
41500 x2.iushrn(1);
41501 }
41502 }
41503
41504 if (a.cmp(b) >= 0) {
41505 a.isub(b);
41506 x1.isub(x2);
41507 } else {
41508 b.isub(a);
41509 x2.isub(x1);
41510 }
41511 }
41512
41513 var res;
41514 if (a.cmpn(1) === 0) {
41515 res = x1;
41516 } else {
41517 res = x2;
41518 }
41519
41520 if (res.cmpn(0) < 0) {
41521 res.iadd(p);
41522 }
41523
41524 return res;
41525 };
41526
41527 BN.prototype.gcd = function gcd (num) {
41528 if (this.isZero()) return num.abs();
41529 if (num.isZero()) return this.abs();
41530
41531 var a = this.clone();
41532 var b = num.clone();
41533 a.negative = 0;
41534 b.negative = 0;
41535
41536 // Remove common factor of two
41537 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
41538 a.iushrn(1);
41539 b.iushrn(1);
41540 }
41541
41542 do {
41543 while (a.isEven()) {
41544 a.iushrn(1);
41545 }
41546 while (b.isEven()) {
41547 b.iushrn(1);
41548 }
41549
41550 var r = a.cmp(b);
41551 if (r < 0) {
41552 // Swap `a` and `b` to make `a` always bigger than `b`
41553 var t = a;
41554 a = b;
41555 b = t;
41556 } else if (r === 0 || b.cmpn(1) === 0) {
41557 break;
41558 }
41559
41560 a.isub(b);
41561 } while (true);
41562
41563 return b.iushln(shift);
41564 };
41565
41566 // Invert number in the field F(num)
41567 BN.prototype.invm = function invm (num) {
41568 return this.egcd(num).a.umod(num);
41569 };
41570
41571 BN.prototype.isEven = function isEven () {
41572 return (this.words[0] & 1) === 0;
41573 };
41574
41575 BN.prototype.isOdd = function isOdd () {
41576 return (this.words[0] & 1) === 1;
41577 };
41578
41579 // And first word and num
41580 BN.prototype.andln = function andln (num) {
41581 return this.words[0] & num;
41582 };
41583
41584 // Increment at the bit position in-line
41585 BN.prototype.bincn = function bincn (bit) {
41586 assert(typeof bit === 'number');
41587 var r = bit % 26;
41588 var s = (bit - r) / 26;
41589 var q = 1 << r;
41590
41591 // Fast case: bit is much higher than all existing words
41592 if (this.length <= s) {
41593 this._expand(s + 1);
41594 this.words[s] |= q;
41595 return this;
41596 }
41597
41598 // Add bit and propagate, if needed
41599 var carry = q;
41600 for (var i = s; carry !== 0 && i < this.length; i++) {
41601 var w = this.words[i] | 0;
41602 w += carry;
41603 carry = w >>> 26;
41604 w &= 0x3ffffff;
41605 this.words[i] = w;
41606 }
41607 if (carry !== 0) {
41608 this.words[i] = carry;
41609 this.length++;
41610 }
41611 return this;
41612 };
41613
41614 BN.prototype.isZero = function isZero () {
41615 return this.length === 1 && this.words[0] === 0;
41616 };
41617
41618 BN.prototype.cmpn = function cmpn (num) {
41619 var negative = num < 0;
41620
41621 if (this.negative !== 0 && !negative) return -1;
41622 if (this.negative === 0 && negative) return 1;
41623
41624 this.strip();
41625
41626 var res;
41627 if (this.length > 1) {
41628 res = 1;
41629 } else {
41630 if (negative) {
41631 num = -num;
41632 }
41633
41634 assert(num <= 0x3ffffff, 'Number is too big');
41635
41636 var w = this.words[0] | 0;
41637 res = w === num ? 0 : w < num ? -1 : 1;
41638 }
41639 if (this.negative !== 0) return -res | 0;
41640 return res;
41641 };
41642
41643 // Compare two numbers and return:
41644 // 1 - if `this` > `num`
41645 // 0 - if `this` == `num`
41646 // -1 - if `this` < `num`
41647 BN.prototype.cmp = function cmp (num) {
41648 if (this.negative !== 0 && num.negative === 0) return -1;
41649 if (this.negative === 0 && num.negative !== 0) return 1;
41650
41651 var res = this.ucmp(num);
41652 if (this.negative !== 0) return -res | 0;
41653 return res;
41654 };
41655
41656 // Unsigned comparison
41657 BN.prototype.ucmp = function ucmp (num) {
41658 // At this point both numbers have the same sign
41659 if (this.length > num.length) return 1;
41660 if (this.length < num.length) return -1;
41661
41662 var res = 0;
41663 for (var i = this.length - 1; i >= 0; i--) {
41664 var a = this.words[i] | 0;
41665 var b = num.words[i] | 0;
41666
41667 if (a === b) continue;
41668 if (a < b) {
41669 res = -1;
41670 } else if (a > b) {
41671 res = 1;
41672 }
41673 break;
41674 }
41675 return res;
41676 };
41677
41678 BN.prototype.gtn = function gtn (num) {
41679 return this.cmpn(num) === 1;
41680 };
41681
41682 BN.prototype.gt = function gt (num) {
41683 return this.cmp(num) === 1;
41684 };
41685
41686 BN.prototype.gten = function gten (num) {
41687 return this.cmpn(num) >= 0;
41688 };
41689
41690 BN.prototype.gte = function gte (num) {
41691 return this.cmp(num) >= 0;
41692 };
41693
41694 BN.prototype.ltn = function ltn (num) {
41695 return this.cmpn(num) === -1;
41696 };
41697
41698 BN.prototype.lt = function lt (num) {
41699 return this.cmp(num) === -1;
41700 };
41701
41702 BN.prototype.lten = function lten (num) {
41703 return this.cmpn(num) <= 0;
41704 };
41705
41706 BN.prototype.lte = function lte (num) {
41707 return this.cmp(num) <= 0;
41708 };
41709
41710 BN.prototype.eqn = function eqn (num) {
41711 return this.cmpn(num) === 0;
41712 };
41713
41714 BN.prototype.eq = function eq (num) {
41715 return this.cmp(num) === 0;
41716 };
41717
41718 //
41719 // A reduce context, could be using montgomery or something better, depending
41720 // on the `m` itself.
41721 //
41722 BN.red = function red (num) {
41723 return new Red(num);
41724 };
41725
41726 BN.prototype.toRed = function toRed (ctx) {
41727 assert(!this.red, 'Already a number in reduction context');
41728 assert(this.negative === 0, 'red works only with positives');
41729 return ctx.convertTo(this)._forceRed(ctx);
41730 };
41731
41732 BN.prototype.fromRed = function fromRed () {
41733 assert(this.red, 'fromRed works only with numbers in reduction context');
41734 return this.red.convertFrom(this);
41735 };
41736
41737 BN.prototype._forceRed = function _forceRed (ctx) {
41738 this.red = ctx;
41739 return this;
41740 };
41741
41742 BN.prototype.forceRed = function forceRed (ctx) {
41743 assert(!this.red, 'Already a number in reduction context');
41744 return this._forceRed(ctx);
41745 };
41746
41747 BN.prototype.redAdd = function redAdd (num) {
41748 assert(this.red, 'redAdd works only with red numbers');
41749 return this.red.add(this, num);
41750 };
41751
41752 BN.prototype.redIAdd = function redIAdd (num) {
41753 assert(this.red, 'redIAdd works only with red numbers');
41754 return this.red.iadd(this, num);
41755 };
41756
41757 BN.prototype.redSub = function redSub (num) {
41758 assert(this.red, 'redSub works only with red numbers');
41759 return this.red.sub(this, num);
41760 };
41761
41762 BN.prototype.redISub = function redISub (num) {
41763 assert(this.red, 'redISub works only with red numbers');
41764 return this.red.isub(this, num);
41765 };
41766
41767 BN.prototype.redShl = function redShl (num) {
41768 assert(this.red, 'redShl works only with red numbers');
41769 return this.red.shl(this, num);
41770 };
41771
41772 BN.prototype.redMul = function redMul (num) {
41773 assert(this.red, 'redMul works only with red numbers');
41774 this.red._verify2(this, num);
41775 return this.red.mul(this, num);
41776 };
41777
41778 BN.prototype.redIMul = function redIMul (num) {
41779 assert(this.red, 'redMul works only with red numbers');
41780 this.red._verify2(this, num);
41781 return this.red.imul(this, num);
41782 };
41783
41784 BN.prototype.redSqr = function redSqr () {
41785 assert(this.red, 'redSqr works only with red numbers');
41786 this.red._verify1(this);
41787 return this.red.sqr(this);
41788 };
41789
41790 BN.prototype.redISqr = function redISqr () {
41791 assert(this.red, 'redISqr works only with red numbers');
41792 this.red._verify1(this);
41793 return this.red.isqr(this);
41794 };
41795
41796 // Square root over p
41797 BN.prototype.redSqrt = function redSqrt () {
41798 assert(this.red, 'redSqrt works only with red numbers');
41799 this.red._verify1(this);
41800 return this.red.sqrt(this);
41801 };
41802
41803 BN.prototype.redInvm = function redInvm () {
41804 assert(this.red, 'redInvm works only with red numbers');
41805 this.red._verify1(this);
41806 return this.red.invm(this);
41807 };
41808
41809 // Return negative clone of `this` % `red modulo`
41810 BN.prototype.redNeg = function redNeg () {
41811 assert(this.red, 'redNeg works only with red numbers');
41812 this.red._verify1(this);
41813 return this.red.neg(this);
41814 };
41815
41816 BN.prototype.redPow = function redPow (num) {
41817 assert(this.red && !num.red, 'redPow(normalNum)');
41818 this.red._verify1(this);
41819 return this.red.pow(this, num);
41820 };
41821
41822 // Prime numbers with efficient reduction
41823 var primes = {
41824 k256: null,
41825 p224: null,
41826 p192: null,
41827 p25519: null
41828 };
41829
41830 // Pseudo-Mersenne prime
41831 function MPrime (name, p) {
41832 // P = 2 ^ N - K
41833 this.name = name;
41834 this.p = new BN(p, 16);
41835 this.n = this.p.bitLength();
41836 this.k = new BN(1).iushln(this.n).isub(this.p);
41837
41838 this.tmp = this._tmp();
41839 }
41840
41841 MPrime.prototype._tmp = function _tmp () {
41842 var tmp = new BN(null);
41843 tmp.words = new Array(Math.ceil(this.n / 13));
41844 return tmp;
41845 };
41846
41847 MPrime.prototype.ireduce = function ireduce (num) {
41848 // Assumes that `num` is less than `P^2`
41849 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
41850 var r = num;
41851 var rlen;
41852
41853 do {
41854 this.split(r, this.tmp);
41855 r = this.imulK(r);
41856 r = r.iadd(this.tmp);
41857 rlen = r.bitLength();
41858 } while (rlen > this.n);
41859
41860 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
41861 if (cmp === 0) {
41862 r.words[0] = 0;
41863 r.length = 1;
41864 } else if (cmp > 0) {
41865 r.isub(this.p);
41866 } else {
41867 r.strip();
41868 }
41869
41870 return r;
41871 };
41872
41873 MPrime.prototype.split = function split (input, out) {
41874 input.iushrn(this.n, 0, out);
41875 };
41876
41877 MPrime.prototype.imulK = function imulK (num) {
41878 return num.imul(this.k);
41879 };
41880
41881 function K256 () {
41882 MPrime.call(
41883 this,
41884 'k256',
41885 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
41886 }
41887 inherits(K256, MPrime);
41888
41889 K256.prototype.split = function split (input, output) {
41890 // 256 = 9 * 26 + 22
41891 var mask = 0x3fffff;
41892
41893 var outLen = Math.min(input.length, 9);
41894 for (var i = 0; i < outLen; i++) {
41895 output.words[i] = input.words[i];
41896 }
41897 output.length = outLen;
41898
41899 if (input.length <= 9) {
41900 input.words[0] = 0;
41901 input.length = 1;
41902 return;
41903 }
41904
41905 // Shift by 9 limbs
41906 var prev = input.words[9];
41907 output.words[output.length++] = prev & mask;
41908
41909 for (i = 10; i < input.length; i++) {
41910 var next = input.words[i] | 0;
41911 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
41912 prev = next;
41913 }
41914 prev >>>= 22;
41915 input.words[i - 10] = prev;
41916 if (prev === 0 && input.length > 10) {
41917 input.length -= 10;
41918 } else {
41919 input.length -= 9;
41920 }
41921 };
41922
41923 K256.prototype.imulK = function imulK (num) {
41924 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
41925 num.words[num.length] = 0;
41926 num.words[num.length + 1] = 0;
41927 num.length += 2;
41928
41929 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
41930 var lo = 0;
41931 for (var i = 0; i < num.length; i++) {
41932 var w = num.words[i] | 0;
41933 lo += w * 0x3d1;
41934 num.words[i] = lo & 0x3ffffff;
41935 lo = w * 0x40 + ((lo / 0x4000000) | 0);
41936 }
41937
41938 // Fast length reduction
41939 if (num.words[num.length - 1] === 0) {
41940 num.length--;
41941 if (num.words[num.length - 1] === 0) {
41942 num.length--;
41943 }
41944 }
41945 return num;
41946 };
41947
41948 function P224 () {
41949 MPrime.call(
41950 this,
41951 'p224',
41952 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
41953 }
41954 inherits(P224, MPrime);
41955
41956 function P192 () {
41957 MPrime.call(
41958 this,
41959 'p192',
41960 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
41961 }
41962 inherits(P192, MPrime);
41963
41964 function P25519 () {
41965 // 2 ^ 255 - 19
41966 MPrime.call(
41967 this,
41968 '25519',
41969 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
41970 }
41971 inherits(P25519, MPrime);
41972
41973 P25519.prototype.imulK = function imulK (num) {
41974 // K = 0x13
41975 var carry = 0;
41976 for (var i = 0; i < num.length; i++) {
41977 var hi = (num.words[i] | 0) * 0x13 + carry;
41978 var lo = hi & 0x3ffffff;
41979 hi >>>= 26;
41980
41981 num.words[i] = lo;
41982 carry = hi;
41983 }
41984 if (carry !== 0) {
41985 num.words[num.length++] = carry;
41986 }
41987 return num;
41988 };
41989
41990 // Exported mostly for testing purposes, use plain name instead
41991 BN._prime = function prime (name) {
41992 // Cached version of prime
41993 if (primes[name]) return primes[name];
41994
41995 var prime;
41996 if (name === 'k256') {
41997 prime = new K256();
41998 } else if (name === 'p224') {
41999 prime = new P224();
42000 } else if (name === 'p192') {
42001 prime = new P192();
42002 } else if (name === 'p25519') {
42003 prime = new P25519();
42004 } else {
42005 throw new Error('Unknown prime ' + name);
42006 }
42007 primes[name] = prime;
42008
42009 return prime;
42010 };
42011
42012 //
42013 // Base reduction engine
42014 //
42015 function Red (m) {
42016 if (typeof m === 'string') {
42017 var prime = BN._prime(m);
42018 this.m = prime.p;
42019 this.prime = prime;
42020 } else {
42021 assert(m.gtn(1), 'modulus must be greater than 1');
42022 this.m = m;
42023 this.prime = null;
42024 }
42025 }
42026
42027 Red.prototype._verify1 = function _verify1 (a) {
42028 assert(a.negative === 0, 'red works only with positives');
42029 assert(a.red, 'red works only with red numbers');
42030 };
42031
42032 Red.prototype._verify2 = function _verify2 (a, b) {
42033 assert((a.negative | b.negative) === 0, 'red works only with positives');
42034 assert(a.red && a.red === b.red,
42035 'red works only with red numbers');
42036 };
42037
42038 Red.prototype.imod = function imod (a) {
42039 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
42040 return a.umod(this.m)._forceRed(this);
42041 };
42042
42043 Red.prototype.neg = function neg (a) {
42044 if (a.isZero()) {
42045 return a.clone();
42046 }
42047
42048 return this.m.sub(a)._forceRed(this);
42049 };
42050
42051 Red.prototype.add = function add (a, b) {
42052 this._verify2(a, b);
42053
42054 var res = a.add(b);
42055 if (res.cmp(this.m) >= 0) {
42056 res.isub(this.m);
42057 }
42058 return res._forceRed(this);
42059 };
42060
42061 Red.prototype.iadd = function iadd (a, b) {
42062 this._verify2(a, b);
42063
42064 var res = a.iadd(b);
42065 if (res.cmp(this.m) >= 0) {
42066 res.isub(this.m);
42067 }
42068 return res;
42069 };
42070
42071 Red.prototype.sub = function sub (a, b) {
42072 this._verify2(a, b);
42073
42074 var res = a.sub(b);
42075 if (res.cmpn(0) < 0) {
42076 res.iadd(this.m);
42077 }
42078 return res._forceRed(this);
42079 };
42080
42081 Red.prototype.isub = function isub (a, b) {
42082 this._verify2(a, b);
42083
42084 var res = a.isub(b);
42085 if (res.cmpn(0) < 0) {
42086 res.iadd(this.m);
42087 }
42088 return res;
42089 };
42090
42091 Red.prototype.shl = function shl (a, num) {
42092 this._verify1(a);
42093 return this.imod(a.ushln(num));
42094 };
42095
42096 Red.prototype.imul = function imul (a, b) {
42097 this._verify2(a, b);
42098 return this.imod(a.imul(b));
42099 };
42100
42101 Red.prototype.mul = function mul (a, b) {
42102 this._verify2(a, b);
42103 return this.imod(a.mul(b));
42104 };
42105
42106 Red.prototype.isqr = function isqr (a) {
42107 return this.imul(a, a.clone());
42108 };
42109
42110 Red.prototype.sqr = function sqr (a) {
42111 return this.mul(a, a);
42112 };
42113
42114 Red.prototype.sqrt = function sqrt (a) {
42115 if (a.isZero()) return a.clone();
42116
42117 var mod3 = this.m.andln(3);
42118 assert(mod3 % 2 === 1);
42119
42120 // Fast case
42121 if (mod3 === 3) {
42122 var pow = this.m.add(new BN(1)).iushrn(2);
42123 return this.pow(a, pow);
42124 }
42125
42126 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
42127 //
42128 // Find Q and S, that Q * 2 ^ S = (P - 1)
42129 var q = this.m.subn(1);
42130 var s = 0;
42131 while (!q.isZero() && q.andln(1) === 0) {
42132 s++;
42133 q.iushrn(1);
42134 }
42135 assert(!q.isZero());
42136
42137 var one = new BN(1).toRed(this);
42138 var nOne = one.redNeg();
42139
42140 // Find quadratic non-residue
42141 // NOTE: Max is such because of generalized Riemann hypothesis.
42142 var lpow = this.m.subn(1).iushrn(1);
42143 var z = this.m.bitLength();
42144 z = new BN(2 * z * z).toRed(this);
42145
42146 while (this.pow(z, lpow).cmp(nOne) !== 0) {
42147 z.redIAdd(nOne);
42148 }
42149
42150 var c = this.pow(z, q);
42151 var r = this.pow(a, q.addn(1).iushrn(1));
42152 var t = this.pow(a, q);
42153 var m = s;
42154 while (t.cmp(one) !== 0) {
42155 var tmp = t;
42156 for (var i = 0; tmp.cmp(one) !== 0; i++) {
42157 tmp = tmp.redSqr();
42158 }
42159 assert(i < m);
42160 var b = this.pow(c, new BN(1).iushln(m - i - 1));
42161
42162 r = r.redMul(b);
42163 c = b.redSqr();
42164 t = t.redMul(c);
42165 m = i;
42166 }
42167
42168 return r;
42169 };
42170
42171 Red.prototype.invm = function invm (a) {
42172 var inv = a._invmp(this.m);
42173 if (inv.negative !== 0) {
42174 inv.negative = 0;
42175 return this.imod(inv).redNeg();
42176 } else {
42177 return this.imod(inv);
42178 }
42179 };
42180
42181 Red.prototype.pow = function pow (a, num) {
42182 if (num.isZero()) return new BN(1);
42183 if (num.cmpn(1) === 0) return a.clone();
42184
42185 var windowSize = 4;
42186 var wnd = new Array(1 << windowSize);
42187 wnd[0] = new BN(1).toRed(this);
42188 wnd[1] = a;
42189 for (var i = 2; i < wnd.length; i++) {
42190 wnd[i] = this.mul(wnd[i - 1], a);
42191 }
42192
42193 var res = wnd[0];
42194 var current = 0;
42195 var currentLen = 0;
42196 var start = num.bitLength() % 26;
42197 if (start === 0) {
42198 start = 26;
42199 }
42200
42201 for (i = num.length - 1; i >= 0; i--) {
42202 var word = num.words[i];
42203 for (var j = start - 1; j >= 0; j--) {
42204 var bit = (word >> j) & 1;
42205 if (res !== wnd[0]) {
42206 res = this.sqr(res);
42207 }
42208
42209 if (bit === 0 && current === 0) {
42210 currentLen = 0;
42211 continue;
42212 }
42213
42214 current <<= 1;
42215 current |= bit;
42216 currentLen++;
42217 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
42218
42219 res = this.mul(res, wnd[current]);
42220 currentLen = 0;
42221 current = 0;
42222 }
42223 start = 26;
42224 }
42225
42226 return res;
42227 };
42228
42229 Red.prototype.convertTo = function convertTo (num) {
42230 var r = num.umod(this.m);
42231
42232 return r === num ? r.clone() : r;
42233 };
42234
42235 Red.prototype.convertFrom = function convertFrom (num) {
42236 var res = num.clone();
42237 res.red = null;
42238 return res;
42239 };
42240
42241 //
42242 // Montgomery method engine
42243 //
42244
42245 BN.mont = function mont (num) {
42246 return new Mont(num);
42247 };
42248
42249 function Mont (m) {
42250 Red.call(this, m);
42251
42252 this.shift = this.m.bitLength();
42253 if (this.shift % 26 !== 0) {
42254 this.shift += 26 - (this.shift % 26);
42255 }
42256
42257 this.r = new BN(1).iushln(this.shift);
42258 this.r2 = this.imod(this.r.sqr());
42259 this.rinv = this.r._invmp(this.m);
42260
42261 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
42262 this.minv = this.minv.umod(this.r);
42263 this.minv = this.r.sub(this.minv);
42264 }
42265 inherits(Mont, Red);
42266
42267 Mont.prototype.convertTo = function convertTo (num) {
42268 return this.imod(num.ushln(this.shift));
42269 };
42270
42271 Mont.prototype.convertFrom = function convertFrom (num) {
42272 var r = this.imod(num.mul(this.rinv));
42273 r.red = null;
42274 return r;
42275 };
42276
42277 Mont.prototype.imul = function imul (a, b) {
42278 if (a.isZero() || b.isZero()) {
42279 a.words[0] = 0;
42280 a.length = 1;
42281 return a;
42282 }
42283
42284 var t = a.imul(b);
42285 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
42286 var u = t.isub(c).iushrn(this.shift);
42287 var res = u;
42288
42289 if (u.cmp(this.m) >= 0) {
42290 res = u.isub(this.m);
42291 } else if (u.cmpn(0) < 0) {
42292 res = u.iadd(this.m);
42293 }
42294
42295 return res._forceRed(this);
42296 };
42297
42298 Mont.prototype.mul = function mul (a, b) {
42299 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
42300
42301 var t = a.mul(b);
42302 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
42303 var u = t.isub(c).iushrn(this.shift);
42304 var res = u;
42305 if (u.cmp(this.m) >= 0) {
42306 res = u.isub(this.m);
42307 } else if (u.cmpn(0) < 0) {
42308 res = u.iadd(this.m);
42309 }
42310
42311 return res._forceRed(this);
42312 };
42313
42314 Mont.prototype.invm = function invm (a) {
42315 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
42316 var res = this.imod(a._invmp(this.m).mul(this.r2));
42317 return res._forceRed(this);
42318 };
42319 })(typeof module === 'undefined' || module, this);
42320
42321 },{}],82:[function(require,module,exports){
42322 var r;
42323
42324 module.exports = function rand(len) {
42325 if (!r)
42326 r = new Rand(null);
42327
42328 return r.generate(len);
42329 };
42330
42331 function Rand(rand) {
42332 this.rand = rand;
42333 }
42334 module.exports.Rand = Rand;
42335
42336 Rand.prototype.generate = function generate(len) {
42337 return this._rand(len);
42338 };
42339
42340 // Emulate crypto API using randy
42341 Rand.prototype._rand = function _rand(n) {
42342 if (this.rand.getBytes)
42343 return this.rand.getBytes(n);
42344
42345 var res = new Uint8Array(n);
42346 for (var i = 0; i < res.length; i++)
42347 res[i] = this.rand.getByte();
42348 return res;
42349 };
42350
42351 if (typeof self === 'object') {
42352 if (self.crypto && self.crypto.getRandomValues) {
42353 // Modern browsers
42354 Rand.prototype._rand = function _rand(n) {
42355 var arr = new Uint8Array(n);
42356 self.crypto.getRandomValues(arr);
42357 return arr;
42358 };
42359 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
42360 // IE
42361 Rand.prototype._rand = function _rand(n) {
42362 var arr = new Uint8Array(n);
42363 self.msCrypto.getRandomValues(arr);
42364 return arr;
42365 };
42366
42367 // Safari's WebWorkers do not have `crypto`
42368 } else if (typeof window === 'object') {
42369 // Old junk
42370 Rand.prototype._rand = function() {
42371 throw new Error('Not implemented yet');
42372 };
42373 }
42374 } else {
42375 // Node.js or Web worker with no crypto support
42376 try {
42377 var crypto = require('crypto');
42378 if (typeof crypto.randomBytes !== 'function')
42379 throw new Error('Not supported');
42380
42381 Rand.prototype._rand = function _rand(n) {
42382 return crypto.randomBytes(n);
42383 };
42384 } catch (e) {
42385 }
42386 }
42387
42388 },{"crypto":3}],83:[function(require,module,exports){
42389 var basex = require('base-x')
42390 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
42391
42392 module.exports = basex(ALPHABET)
42393
42394 },{"base-x":35}],84:[function(require,module,exports){
42395 (function (Buffer){
42396 'use strict'
42397
42398 var base58 = require('bs58')
42399
42400 module.exports = function (checksumFn) {
42401 // Encode a buffer as a base58-check encoded string
42402 function encode (payload) {
42403 var checksum = checksumFn(payload)
42404
42405 return base58.encode(Buffer.concat([
42406 payload,
42407 checksum
42408 ], payload.length + 4))
42409 }
42410
42411 function decodeRaw (buffer) {
42412 var payload = buffer.slice(0, -4)
42413 var checksum = buffer.slice(-4)
42414 var newChecksum = checksumFn(payload)
42415
42416 if (checksum[0] ^ newChecksum[0] |
42417 checksum[1] ^ newChecksum[1] |
42418 checksum[2] ^ newChecksum[2] |
42419 checksum[3] ^ newChecksum[3]) return
42420
42421 return payload
42422 }
42423
42424 // Decode a base58-check encoded string to a buffer, no result if checksum is wrong
42425 function decodeUnsafe (string) {
42426 var buffer = base58.decodeUnsafe(string)
42427 if (!buffer) return
42428
42429 return decodeRaw(buffer)
42430 }
42431
42432 function decode (string) {
42433 var buffer = base58.decode(string)
42434 var payload = decodeRaw(buffer, checksumFn)
42435 if (!payload) throw new Error('Invalid checksum')
42436 return payload
42437 }
42438
42439 return {
42440 encode: encode,
42441 decode: decode,
42442 decodeUnsafe: decodeUnsafe
42443 }
42444 }
42445
42446 }).call(this,require("buffer").Buffer)
42447 },{"bs58":83,"buffer":5}],85:[function(require,module,exports){
42448 'use strict'
42449
42450 var createHash = require('create-hash')
42451 var bs58checkBase = require('./base')
42452
42453 // SHA256(SHA256(buffer))
42454 function sha256x2 (buffer) {
42455 var tmp = createHash('sha256').update(buffer).digest()
42456 return createHash('sha256').update(tmp).digest()
42457 }
42458
42459 module.exports = bs58checkBase(sha256x2)
42460
42461 },{"./base":84,"create-hash":87}],86:[function(require,module,exports){
42462 var Buffer = require('safe-buffer').Buffer
42463 var Transform = require('stream').Transform
42464 var StringDecoder = require('string_decoder').StringDecoder
42465 var inherits = require('inherits')
42466
42467 function CipherBase (hashMode) {
42468 Transform.call(this)
42469 this.hashMode = typeof hashMode === 'string'
42470 if (this.hashMode) {
42471 this[hashMode] = this._finalOrDigest
42472 } else {
42473 this.final = this._finalOrDigest
42474 }
42475 if (this._final) {
42476 this.__final = this._final
42477 this._final = null
42478 }
42479 this._decoder = null
42480 this._encoding = null
42481 }
42482 inherits(CipherBase, Transform)
42483
42484 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
42485 if (typeof data === 'string') {
42486 data = Buffer.from(data, inputEnc)
42487 }
42488
42489 var outData = this._update(data)
42490 if (this.hashMode) return this
42491
42492 if (outputEnc) {
42493 outData = this._toString(outData, outputEnc)
42494 }
42495
42496 return outData
42497 }
42498
42499 CipherBase.prototype.setAutoPadding = function () {}
42500 CipherBase.prototype.getAuthTag = function () {
42501 throw new Error('trying to get auth tag in unsupported state')
42502 }
42503
42504 CipherBase.prototype.setAuthTag = function () {
42505 throw new Error('trying to set auth tag in unsupported state')
42506 }
42507
42508 CipherBase.prototype.setAAD = function () {
42509 throw new Error('trying to set aad in unsupported state')
42510 }
42511
42512 CipherBase.prototype._transform = function (data, _, next) {
42513 var err
42514 try {
42515 if (this.hashMode) {
42516 this._update(data)
42517 } else {
42518 this.push(this._update(data))
42519 }
42520 } catch (e) {
42521 err = e
42522 } finally {
42523 next(err)
42524 }
42525 }
42526 CipherBase.prototype._flush = function (done) {
42527 var err
42528 try {
42529 this.push(this.__final())
42530 } catch (e) {
42531 err = e
42532 }
42533
42534 done(err)
42535 }
42536 CipherBase.prototype._finalOrDigest = function (outputEnc) {
42537 var outData = this.__final() || Buffer.alloc(0)
42538 if (outputEnc) {
42539 outData = this._toString(outData, outputEnc, true)
42540 }
42541 return outData
42542 }
42543
42544 CipherBase.prototype._toString = function (value, enc, fin) {
42545 if (!this._decoder) {
42546 this._decoder = new StringDecoder(enc)
42547 this._encoding = enc
42548 }
42549
42550 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
42551
42552 var out = this._decoder.write(value)
42553 if (fin) {
42554 out += this._decoder.end()
42555 }
42556
42557 return out
42558 }
42559
42560 module.exports = CipherBase
42561
42562 },{"inherits":121,"safe-buffer":128,"stream":28,"string_decoder":29}],87:[function(require,module,exports){
42563 (function (Buffer){
42564 'use strict'
42565 var inherits = require('inherits')
42566 var md5 = require('./md5')
42567 var RIPEMD160 = require('ripemd160')
42568 var sha = require('sha.js')
42569
42570 var Base = require('cipher-base')
42571
42572 function HashNoConstructor (hash) {
42573 Base.call(this, 'digest')
42574
42575 this._hash = hash
42576 this.buffers = []
42577 }
42578
42579 inherits(HashNoConstructor, Base)
42580
42581 HashNoConstructor.prototype._update = function (data) {
42582 this.buffers.push(data)
42583 }
42584
42585 HashNoConstructor.prototype._final = function () {
42586 var buf = Buffer.concat(this.buffers)
42587 var r = this._hash(buf)
42588 this.buffers = null
42589
42590 return r
42591 }
42592
42593 function Hash (hash) {
42594 Base.call(this, 'digest')
42595
42596 this._hash = hash
42597 }
42598
42599 inherits(Hash, Base)
42600
42601 Hash.prototype._update = function (data) {
42602 this._hash.update(data)
42603 }
42604
42605 Hash.prototype._final = function () {
42606 return this._hash.digest()
42607 }
42608
42609 module.exports = function createHash (alg) {
42610 alg = alg.toLowerCase()
42611 if (alg === 'md5') return new HashNoConstructor(md5)
42612 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
42613
42614 return new Hash(sha(alg))
42615 }
42616
42617 }).call(this,require("buffer").Buffer)
42618 },{"./md5":89,"buffer":5,"cipher-base":86,"inherits":121,"ripemd160":127,"sha.js":130}],88:[function(require,module,exports){
42619 (function (Buffer){
42620 'use strict'
42621 var intSize = 4
42622 var zeroBuffer = new Buffer(intSize)
42623 zeroBuffer.fill(0)
42624
42625 var charSize = 8
42626 var hashSize = 16
42627
42628 function toArray (buf) {
42629 if ((buf.length % intSize) !== 0) {
42630 var len = buf.length + (intSize - (buf.length % intSize))
42631 buf = Buffer.concat([buf, zeroBuffer], len)
42632 }
42633
42634 var arr = new Array(buf.length >>> 2)
42635 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
42636 arr[j] = buf.readInt32LE(i)
42637 }
42638
42639 return arr
42640 }
42641
42642 module.exports = function hash (buf, fn) {
42643 var arr = fn(toArray(buf), buf.length * charSize)
42644 buf = new Buffer(hashSize)
42645 for (var i = 0; i < arr.length; i++) {
42646 buf.writeInt32LE(arr[i], i << 2, true)
42647 }
42648 return buf
42649 }
42650
42651 }).call(this,require("buffer").Buffer)
42652 },{"buffer":5}],89:[function(require,module,exports){
42653 'use strict'
42654 /*
42655 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
42656 * Digest Algorithm, as defined in RFC 1321.
42657 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
42658 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
42659 * Distributed under the BSD License
42660 * See http://pajhome.org.uk/crypt/md5 for more info.
42661 */
42662
42663 var makeHash = require('./make-hash')
42664
42665 /*
42666 * Calculate the MD5 of an array of little-endian words, and a bit length
42667 */
42668 function core_md5 (x, len) {
42669 /* append padding */
42670 x[len >> 5] |= 0x80 << ((len) % 32)
42671 x[(((len + 64) >>> 9) << 4) + 14] = len
42672
42673 var a = 1732584193
42674 var b = -271733879
42675 var c = -1732584194
42676 var d = 271733878
42677
42678 for (var i = 0; i < x.length; i += 16) {
42679 var olda = a
42680 var oldb = b
42681 var oldc = c
42682 var oldd = d
42683
42684 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
42685 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
42686 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
42687 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
42688 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
42689 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
42690 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
42691 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
42692 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
42693 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
42694 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
42695 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
42696 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
42697 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
42698 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
42699 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
42700
42701 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
42702 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
42703 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
42704 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
42705 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
42706 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
42707 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
42708 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
42709 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
42710 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
42711 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
42712 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
42713 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
42714 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
42715 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
42716 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
42717
42718 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
42719 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
42720 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
42721 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
42722 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
42723 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
42724 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
42725 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
42726 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
42727 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
42728 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
42729 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
42730 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
42731 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
42732 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
42733 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
42734
42735 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
42736 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
42737 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
42738 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
42739 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
42740 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
42741 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
42742 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
42743 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
42744 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
42745 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
42746 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
42747 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
42748 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
42749 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
42750 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
42751
42752 a = safe_add(a, olda)
42753 b = safe_add(b, oldb)
42754 c = safe_add(c, oldc)
42755 d = safe_add(d, oldd)
42756 }
42757
42758 return [a, b, c, d]
42759 }
42760
42761 /*
42762 * These functions implement the four basic operations the algorithm uses.
42763 */
42764 function md5_cmn (q, a, b, x, s, t) {
42765 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
42766 }
42767
42768 function md5_ff (a, b, c, d, x, s, t) {
42769 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
42770 }
42771
42772 function md5_gg (a, b, c, d, x, s, t) {
42773 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
42774 }
42775
42776 function md5_hh (a, b, c, d, x, s, t) {
42777 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
42778 }
42779
42780 function md5_ii (a, b, c, d, x, s, t) {
42781 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
42782 }
42783
42784 /*
42785 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
42786 * to work around bugs in some JS interpreters.
42787 */
42788 function safe_add (x, y) {
42789 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
42790 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
42791 return (msw << 16) | (lsw & 0xFFFF)
42792 }
42793
42794 /*
42795 * Bitwise rotate a 32-bit number to the left.
42796 */
42797 function bit_rol (num, cnt) {
42798 return (num << cnt) | (num >>> (32 - cnt))
42799 }
42800
42801 module.exports = function md5 (buf) {
42802 return makeHash(buf, core_md5)
42803 }
42804
42805 },{"./make-hash":88}],90:[function(require,module,exports){
42806 'use strict'
42807 var inherits = require('inherits')
42808 var Legacy = require('./legacy')
42809 var Base = require('cipher-base')
42810 var Buffer = require('safe-buffer').Buffer
42811 var md5 = require('create-hash/md5')
42812 var RIPEMD160 = require('ripemd160')
42813
42814 var sha = require('sha.js')
42815
42816 var ZEROS = Buffer.alloc(128)
42817
42818 function Hmac (alg, key) {
42819 Base.call(this, 'digest')
42820 if (typeof key === 'string') {
42821 key = Buffer.from(key)
42822 }
42823
42824 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
42825
42826 this._alg = alg
42827 this._key = key
42828 if (key.length > blocksize) {
42829 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
42830 key = hash.update(key).digest()
42831 } else if (key.length < blocksize) {
42832 key = Buffer.concat([key, ZEROS], blocksize)
42833 }
42834
42835 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
42836 var opad = this._opad = Buffer.allocUnsafe(blocksize)
42837
42838 for (var i = 0; i < blocksize; i++) {
42839 ipad[i] = key[i] ^ 0x36
42840 opad[i] = key[i] ^ 0x5C
42841 }
42842 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
42843 this._hash.update(ipad)
42844 }
42845
42846 inherits(Hmac, Base)
42847
42848 Hmac.prototype._update = function (data) {
42849 this._hash.update(data)
42850 }
42851
42852 Hmac.prototype._final = function () {
42853 var h = this._hash.digest()
42854 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
42855 return hash.update(this._opad).update(h).digest()
42856 }
42857
42858 module.exports = function createHmac (alg, key) {
42859 alg = alg.toLowerCase()
42860 if (alg === 'rmd160' || alg === 'ripemd160') {
42861 return new Hmac('rmd160', key)
42862 }
42863 if (alg === 'md5') {
42864 return new Legacy(md5, key)
42865 }
42866 return new Hmac(alg, key)
42867 }
42868
42869 },{"./legacy":91,"cipher-base":86,"create-hash/md5":89,"inherits":121,"ripemd160":127,"safe-buffer":128,"sha.js":130}],91:[function(require,module,exports){
42870 'use strict'
42871 var inherits = require('inherits')
42872 var Buffer = require('safe-buffer').Buffer
42873
42874 var Base = require('cipher-base')
42875
42876 var ZEROS = Buffer.alloc(128)
42877 var blocksize = 64
42878
42879 function Hmac (alg, key) {
42880 Base.call(this, 'digest')
42881 if (typeof key === 'string') {
42882 key = Buffer.from(key)
42883 }
42884
42885 this._alg = alg
42886 this._key = key
42887
42888 if (key.length > blocksize) {
42889 key = alg(key)
42890 } else if (key.length < blocksize) {
42891 key = Buffer.concat([key, ZEROS], blocksize)
42892 }
42893
42894 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
42895 var opad = this._opad = Buffer.allocUnsafe(blocksize)
42896
42897 for (var i = 0; i < blocksize; i++) {
42898 ipad[i] = key[i] ^ 0x36
42899 opad[i] = key[i] ^ 0x5C
42900 }
42901
42902 this._hash = [ipad]
42903 }
42904
42905 inherits(Hmac, Base)
42906
42907 Hmac.prototype._update = function (data) {
42908 this._hash.push(data)
42909 }
42910
42911 Hmac.prototype._final = function () {
42912 var h = this._alg(Buffer.concat(this._hash))
42913 return this._alg(Buffer.concat([this._opad, h]))
42914 }
42915 module.exports = Hmac
42916
42917 },{"cipher-base":86,"inherits":121,"safe-buffer":128}],92:[function(require,module,exports){
42918 var assert = require('assert')
42919 var BigInteger = require('bigi')
42920
42921 var Point = require('./point')
42922
42923 function Curve (p, a, b, Gx, Gy, n, h) {
42924 this.p = p
42925 this.a = a
42926 this.b = b
42927 this.G = Point.fromAffine(this, Gx, Gy)
42928 this.n = n
42929 this.h = h
42930
42931 this.infinity = new Point(this, null, null, BigInteger.ZERO)
42932
42933 // result caching
42934 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
42935
42936 // determine size of p in bytes
42937 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
42938 }
42939
42940 Curve.prototype.pointFromX = function (isOdd, x) {
42941 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
42942 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
42943
42944 var y = beta
42945 if (beta.isEven() ^ !isOdd) {
42946 y = this.p.subtract(y) // -y % p
42947 }
42948
42949 return Point.fromAffine(this, x, y)
42950 }
42951
42952 Curve.prototype.isInfinity = function (Q) {
42953 if (Q === this.infinity) return true
42954
42955 return Q.z.signum() === 0 && Q.y.signum() !== 0
42956 }
42957
42958 Curve.prototype.isOnCurve = function (Q) {
42959 if (this.isInfinity(Q)) return true
42960
42961 var x = Q.affineX
42962 var y = Q.affineY
42963 var a = this.a
42964 var b = this.b
42965 var p = this.p
42966
42967 // Check that xQ and yQ are integers in the interval [0, p - 1]
42968 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
42969 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
42970
42971 // and check that y^2 = x^3 + ax + b (mod p)
42972 var lhs = y.square().mod(p)
42973 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
42974 return lhs.equals(rhs)
42975 }
42976
42977 /**
42978 * Validate an elliptic curve point.
42979 *
42980 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
42981 */
42982 Curve.prototype.validate = function (Q) {
42983 // Check Q != O
42984 assert(!this.isInfinity(Q), 'Point is at infinity')
42985 assert(this.isOnCurve(Q), 'Point is not on the curve')
42986
42987 // Check nQ = O (where Q is a scalar multiple of G)
42988 var nQ = Q.multiply(this.n)
42989 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
42990
42991 return true
42992 }
42993
42994 module.exports = Curve
42995
42996 },{"./point":96,"assert":1,"bigi":39}],93:[function(require,module,exports){
42997 module.exports={
42998 "secp128r1": {
42999 "p": "fffffffdffffffffffffffffffffffff",
43000 "a": "fffffffdfffffffffffffffffffffffc",
43001 "b": "e87579c11079f43dd824993c2cee5ed3",
43002 "n": "fffffffe0000000075a30d1b9038a115",
43003 "h": "01",
43004 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
43005 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
43006 },
43007 "secp160k1": {
43008 "p": "fffffffffffffffffffffffffffffffeffffac73",
43009 "a": "00",
43010 "b": "07",
43011 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
43012 "h": "01",
43013 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
43014 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
43015 },
43016 "secp160r1": {
43017 "p": "ffffffffffffffffffffffffffffffff7fffffff",
43018 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
43019 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
43020 "n": "0100000000000000000001f4c8f927aed3ca752257",
43021 "h": "01",
43022 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
43023 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
43024 },
43025 "secp192k1": {
43026 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
43027 "a": "00",
43028 "b": "03",
43029 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
43030 "h": "01",
43031 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
43032 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
43033 },
43034 "secp192r1": {
43035 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
43036 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
43037 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
43038 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
43039 "h": "01",
43040 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
43041 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
43042 },
43043 "secp256k1": {
43044 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
43045 "a": "00",
43046 "b": "07",
43047 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
43048 "h": "01",
43049 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
43050 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
43051 },
43052 "secp256r1": {
43053 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
43054 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
43055 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
43056 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
43057 "h": "01",
43058 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
43059 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
43060 }
43061 }
43062
43063 },{}],94:[function(require,module,exports){
43064 var Point = require('./point')
43065 var Curve = require('./curve')
43066
43067 var getCurveByName = require('./names')
43068
43069 module.exports = {
43070 Curve: Curve,
43071 Point: Point,
43072 getCurveByName: getCurveByName
43073 }
43074
43075 },{"./curve":92,"./names":95,"./point":96}],95:[function(require,module,exports){
43076 var BigInteger = require('bigi')
43077
43078 var curves = require('./curves.json')
43079 var Curve = require('./curve')
43080
43081 function getCurveByName (name) {
43082 var curve = curves[name]
43083 if (!curve) return null
43084
43085 var p = new BigInteger(curve.p, 16)
43086 var a = new BigInteger(curve.a, 16)
43087 var b = new BigInteger(curve.b, 16)
43088 var n = new BigInteger(curve.n, 16)
43089 var h = new BigInteger(curve.h, 16)
43090 var Gx = new BigInteger(curve.Gx, 16)
43091 var Gy = new BigInteger(curve.Gy, 16)
43092
43093 return new Curve(p, a, b, Gx, Gy, n, h)
43094 }
43095
43096 module.exports = getCurveByName
43097
43098 },{"./curve":92,"./curves.json":93,"bigi":39}],96:[function(require,module,exports){
43099 (function (Buffer){
43100 var assert = require('assert')
43101 var BigInteger = require('bigi')
43102
43103 var THREE = BigInteger.valueOf(3)
43104
43105 function Point (curve, x, y, z) {
43106 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
43107
43108 this.curve = curve
43109 this.x = x
43110 this.y = y
43111 this.z = z
43112 this._zInv = null
43113
43114 this.compressed = true
43115 }
43116
43117 Object.defineProperty(Point.prototype, 'zInv', {
43118 get: function () {
43119 if (this._zInv === null) {
43120 this._zInv = this.z.modInverse(this.curve.p)
43121 }
43122
43123 return this._zInv
43124 }
43125 })
43126
43127 Object.defineProperty(Point.prototype, 'affineX', {
43128 get: function () {
43129 return this.x.multiply(this.zInv).mod(this.curve.p)
43130 }
43131 })
43132
43133 Object.defineProperty(Point.prototype, 'affineY', {
43134 get: function () {
43135 return this.y.multiply(this.zInv).mod(this.curve.p)
43136 }
43137 })
43138
43139 Point.fromAffine = function (curve, x, y) {
43140 return new Point(curve, x, y, BigInteger.ONE)
43141 }
43142
43143 Point.prototype.equals = function (other) {
43144 if (other === this) return true
43145 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
43146 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
43147
43148 // u = Y2 * Z1 - Y1 * Z2
43149 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
43150
43151 if (u.signum() !== 0) return false
43152
43153 // v = X2 * Z1 - X1 * Z2
43154 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
43155
43156 return v.signum() === 0
43157 }
43158
43159 Point.prototype.negate = function () {
43160 var y = this.curve.p.subtract(this.y)
43161
43162 return new Point(this.curve, this.x, y, this.z)
43163 }
43164
43165 Point.prototype.add = function (b) {
43166 if (this.curve.isInfinity(this)) return b
43167 if (this.curve.isInfinity(b)) return this
43168
43169 var x1 = this.x
43170 var y1 = this.y
43171 var x2 = b.x
43172 var y2 = b.y
43173
43174 // u = Y2 * Z1 - Y1 * Z2
43175 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
43176 // v = X2 * Z1 - X1 * Z2
43177 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
43178
43179 if (v.signum() === 0) {
43180 if (u.signum() === 0) {
43181 return this.twice() // this == b, so double
43182 }
43183
43184 return this.curve.infinity // this = -b, so infinity
43185 }
43186
43187 var v2 = v.square()
43188 var v3 = v2.multiply(v)
43189 var x1v2 = x1.multiply(v2)
43190 var zu2 = u.square().multiply(this.z)
43191
43192 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
43193 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
43194 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
43195 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)
43196 // z3 = v^3 * z1 * z2
43197 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
43198
43199 return new Point(this.curve, x3, y3, z3)
43200 }
43201
43202 Point.prototype.twice = function () {
43203 if (this.curve.isInfinity(this)) return this
43204 if (this.y.signum() === 0) return this.curve.infinity
43205
43206 var x1 = this.x
43207 var y1 = this.y
43208
43209 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
43210 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
43211 var a = this.curve.a
43212
43213 // w = 3 * x1^2 + a * z1^2
43214 var w = x1.square().multiply(THREE)
43215
43216 if (a.signum() !== 0) {
43217 w = w.add(this.z.square().multiply(a))
43218 }
43219
43220 w = w.mod(this.curve.p)
43221 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
43222 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
43223 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
43224 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
43225 // z3 = 8 * (y1 * z1)^3
43226 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
43227
43228 return new Point(this.curve, x3, y3, z3)
43229 }
43230
43231 // Simple NAF (Non-Adjacent Form) multiplication algorithm
43232 // TODO: modularize the multiplication algorithm
43233 Point.prototype.multiply = function (k) {
43234 if (this.curve.isInfinity(this)) return this
43235 if (k.signum() === 0) return this.curve.infinity
43236
43237 var e = k
43238 var h = e.multiply(THREE)
43239
43240 var neg = this.negate()
43241 var R = this
43242
43243 for (var i = h.bitLength() - 2; i > 0; --i) {
43244 var hBit = h.testBit(i)
43245 var eBit = e.testBit(i)
43246
43247 R = R.twice()
43248
43249 if (hBit !== eBit) {
43250 R = R.add(hBit ? this : neg)
43251 }
43252 }
43253
43254 return R
43255 }
43256
43257 // Compute this*j + x*k (simultaneous multiplication)
43258 Point.prototype.multiplyTwo = function (j, x, k) {
43259 var i = Math.max(j.bitLength(), k.bitLength()) - 1
43260 var R = this.curve.infinity
43261 var both = this.add(x)
43262
43263 while (i >= 0) {
43264 var jBit = j.testBit(i)
43265 var kBit = k.testBit(i)
43266
43267 R = R.twice()
43268
43269 if (jBit) {
43270 if (kBit) {
43271 R = R.add(both)
43272 } else {
43273 R = R.add(this)
43274 }
43275 } else if (kBit) {
43276 R = R.add(x)
43277 }
43278 --i
43279 }
43280
43281 return R
43282 }
43283
43284 Point.prototype.getEncoded = function (compressed) {
43285 if (compressed == null) compressed = this.compressed
43286 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
43287
43288 var x = this.affineX
43289 var y = this.affineY
43290 var byteLength = this.curve.pLength
43291 var buffer
43292
43293 // 0x02/0x03 | X
43294 if (compressed) {
43295 buffer = new Buffer(1 + byteLength)
43296 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
43297
43298 // 0x04 | X | Y
43299 } else {
43300 buffer = new Buffer(1 + byteLength + byteLength)
43301 buffer.writeUInt8(0x04, 0)
43302
43303 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
43304 }
43305
43306 x.toBuffer(byteLength).copy(buffer, 1)
43307
43308 return buffer
43309 }
43310
43311 Point.decodeFrom = function (curve, buffer) {
43312 var type = buffer.readUInt8(0)
43313 var compressed = (type !== 4)
43314
43315 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
43316 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
43317
43318 var Q
43319 if (compressed) {
43320 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
43321 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
43322
43323 var isOdd = (type === 0x03)
43324 Q = curve.pointFromX(isOdd, x)
43325 } else {
43326 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
43327
43328 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
43329 Q = Point.fromAffine(curve, x, y)
43330 }
43331
43332 Q.compressed = compressed
43333 return Q
43334 }
43335
43336 Point.prototype.toString = function () {
43337 if (this.curve.isInfinity(this)) return '(INFINITY)'
43338
43339 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
43340 }
43341
43342 module.exports = Point
43343
43344 }).call(this,require("buffer").Buffer)
43345 },{"assert":1,"bigi":39,"buffer":5}],97:[function(require,module,exports){
43346 'use strict';
43347
43348 var elliptic = exports;
43349
43350 elliptic.version = require('../package.json').version;
43351 elliptic.utils = require('./elliptic/utils');
43352 elliptic.rand = require('brorand');
43353 elliptic.curve = require('./elliptic/curve');
43354 elliptic.curves = require('./elliptic/curves');
43355
43356 // Protocols
43357 elliptic.ec = require('./elliptic/ec');
43358 elliptic.eddsa = require('./elliptic/eddsa');
43359
43360 },{"../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){
43361 'use strict';
43362
43363 var BN = require('bn.js');
43364 var elliptic = require('../../elliptic');
43365 var utils = elliptic.utils;
43366 var getNAF = utils.getNAF;
43367 var getJSF = utils.getJSF;
43368 var assert = utils.assert;
43369
43370 function BaseCurve(type, conf) {
43371 this.type = type;
43372 this.p = new BN(conf.p, 16);
43373
43374 // Use Montgomery, when there is no fast reduction for the prime
43375 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
43376
43377 // Useful for many curves
43378 this.zero = new BN(0).toRed(this.red);
43379 this.one = new BN(1).toRed(this.red);
43380 this.two = new BN(2).toRed(this.red);
43381
43382 // Curve configuration, optional
43383 this.n = conf.n && new BN(conf.n, 16);
43384 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
43385
43386 // Temporary arrays
43387 this._wnafT1 = new Array(4);
43388 this._wnafT2 = new Array(4);
43389 this._wnafT3 = new Array(4);
43390 this._wnafT4 = new Array(4);
43391
43392 // Generalized Greg Maxwell's trick
43393 var adjustCount = this.n && this.p.div(this.n);
43394 if (!adjustCount || adjustCount.cmpn(100) > 0) {
43395 this.redN = null;
43396 } else {
43397 this._maxwellTrick = true;
43398 this.redN = this.n.toRed(this.red);
43399 }
43400 }
43401 module.exports = BaseCurve;
43402
43403 BaseCurve.prototype.point = function point() {
43404 throw new Error('Not implemented');
43405 };
43406
43407 BaseCurve.prototype.validate = function validate() {
43408 throw new Error('Not implemented');
43409 };
43410
43411 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
43412 assert(p.precomputed);
43413 var doubles = p._getDoubles();
43414
43415 var naf = getNAF(k, 1);
43416 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
43417 I /= 3;
43418
43419 // Translate into more windowed form
43420 var repr = [];
43421 for (var j = 0; j < naf.length; j += doubles.step) {
43422 var nafW = 0;
43423 for (var k = j + doubles.step - 1; k >= j; k--)
43424 nafW = (nafW << 1) + naf[k];
43425 repr.push(nafW);
43426 }
43427
43428 var a = this.jpoint(null, null, null);
43429 var b = this.jpoint(null, null, null);
43430 for (var i = I; i > 0; i--) {
43431 for (var j = 0; j < repr.length; j++) {
43432 var nafW = repr[j];
43433 if (nafW === i)
43434 b = b.mixedAdd(doubles.points[j]);
43435 else if (nafW === -i)
43436 b = b.mixedAdd(doubles.points[j].neg());
43437 }
43438 a = a.add(b);
43439 }
43440 return a.toP();
43441 };
43442
43443 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
43444 var w = 4;
43445
43446 // Precompute window
43447 var nafPoints = p._getNAFPoints(w);
43448 w = nafPoints.wnd;
43449 var wnd = nafPoints.points;
43450
43451 // Get NAF form
43452 var naf = getNAF(k, w);
43453
43454 // Add `this`*(N+1) for every w-NAF index
43455 var acc = this.jpoint(null, null, null);
43456 for (var i = naf.length - 1; i >= 0; i--) {
43457 // Count zeroes
43458 for (var k = 0; i >= 0 && naf[i] === 0; i--)
43459 k++;
43460 if (i >= 0)
43461 k++;
43462 acc = acc.dblp(k);
43463
43464 if (i < 0)
43465 break;
43466 var z = naf[i];
43467 assert(z !== 0);
43468 if (p.type === 'affine') {
43469 // J +- P
43470 if (z > 0)
43471 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
43472 else
43473 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
43474 } else {
43475 // J +- J
43476 if (z > 0)
43477 acc = acc.add(wnd[(z - 1) >> 1]);
43478 else
43479 acc = acc.add(wnd[(-z - 1) >> 1].neg());
43480 }
43481 }
43482 return p.type === 'affine' ? acc.toP() : acc;
43483 };
43484
43485 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
43486 points,
43487 coeffs,
43488 len,
43489 jacobianResult) {
43490 var wndWidth = this._wnafT1;
43491 var wnd = this._wnafT2;
43492 var naf = this._wnafT3;
43493
43494 // Fill all arrays
43495 var max = 0;
43496 for (var i = 0; i < len; i++) {
43497 var p = points[i];
43498 var nafPoints = p._getNAFPoints(defW);
43499 wndWidth[i] = nafPoints.wnd;
43500 wnd[i] = nafPoints.points;
43501 }
43502
43503 // Comb small window NAFs
43504 for (var i = len - 1; i >= 1; i -= 2) {
43505 var a = i - 1;
43506 var b = i;
43507 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
43508 naf[a] = getNAF(coeffs[a], wndWidth[a]);
43509 naf[b] = getNAF(coeffs[b], wndWidth[b]);
43510 max = Math.max(naf[a].length, max);
43511 max = Math.max(naf[b].length, max);
43512 continue;
43513 }
43514
43515 var comb = [
43516 points[a], /* 1 */
43517 null, /* 3 */
43518 null, /* 5 */
43519 points[b] /* 7 */
43520 ];
43521
43522 // Try to avoid Projective points, if possible
43523 if (points[a].y.cmp(points[b].y) === 0) {
43524 comb[1] = points[a].add(points[b]);
43525 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
43526 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
43527 comb[1] = points[a].toJ().mixedAdd(points[b]);
43528 comb[2] = points[a].add(points[b].neg());
43529 } else {
43530 comb[1] = points[a].toJ().mixedAdd(points[b]);
43531 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
43532 }
43533
43534 var index = [
43535 -3, /* -1 -1 */
43536 -1, /* -1 0 */
43537 -5, /* -1 1 */
43538 -7, /* 0 -1 */
43539 0, /* 0 0 */
43540 7, /* 0 1 */
43541 5, /* 1 -1 */
43542 1, /* 1 0 */
43543 3 /* 1 1 */
43544 ];
43545
43546 var jsf = getJSF(coeffs[a], coeffs[b]);
43547 max = Math.max(jsf[0].length, max);
43548 naf[a] = new Array(max);
43549 naf[b] = new Array(max);
43550 for (var j = 0; j < max; j++) {
43551 var ja = jsf[0][j] | 0;
43552 var jb = jsf[1][j] | 0;
43553
43554 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
43555 naf[b][j] = 0;
43556 wnd[a] = comb;
43557 }
43558 }
43559
43560 var acc = this.jpoint(null, null, null);
43561 var tmp = this._wnafT4;
43562 for (var i = max; i >= 0; i--) {
43563 var k = 0;
43564
43565 while (i >= 0) {
43566 var zero = true;
43567 for (var j = 0; j < len; j++) {
43568 tmp[j] = naf[j][i] | 0;
43569 if (tmp[j] !== 0)
43570 zero = false;
43571 }
43572 if (!zero)
43573 break;
43574 k++;
43575 i--;
43576 }
43577 if (i >= 0)
43578 k++;
43579 acc = acc.dblp(k);
43580 if (i < 0)
43581 break;
43582
43583 for (var j = 0; j < len; j++) {
43584 var z = tmp[j];
43585 var p;
43586 if (z === 0)
43587 continue;
43588 else if (z > 0)
43589 p = wnd[j][(z - 1) >> 1];
43590 else if (z < 0)
43591 p = wnd[j][(-z - 1) >> 1].neg();
43592
43593 if (p.type === 'affine')
43594 acc = acc.mixedAdd(p);
43595 else
43596 acc = acc.add(p);
43597 }
43598 }
43599 // Zeroify references
43600 for (var i = 0; i < len; i++)
43601 wnd[i] = null;
43602
43603 if (jacobianResult)
43604 return acc;
43605 else
43606 return acc.toP();
43607 };
43608
43609 function BasePoint(curve, type) {
43610 this.curve = curve;
43611 this.type = type;
43612 this.precomputed = null;
43613 }
43614 BaseCurve.BasePoint = BasePoint;
43615
43616 BasePoint.prototype.eq = function eq(/*other*/) {
43617 throw new Error('Not implemented');
43618 };
43619
43620 BasePoint.prototype.validate = function validate() {
43621 return this.curve.validate(this);
43622 };
43623
43624 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
43625 bytes = utils.toArray(bytes, enc);
43626
43627 var len = this.p.byteLength();
43628
43629 // uncompressed, hybrid-odd, hybrid-even
43630 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
43631 bytes.length - 1 === 2 * len) {
43632 if (bytes[0] === 0x06)
43633 assert(bytes[bytes.length - 1] % 2 === 0);
43634 else if (bytes[0] === 0x07)
43635 assert(bytes[bytes.length - 1] % 2 === 1);
43636
43637 var res = this.point(bytes.slice(1, 1 + len),
43638 bytes.slice(1 + len, 1 + 2 * len));
43639
43640 return res;
43641 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
43642 bytes.length - 1 === len) {
43643 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
43644 }
43645 throw new Error('Unknown point format');
43646 };
43647
43648 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
43649 return this.encode(enc, true);
43650 };
43651
43652 BasePoint.prototype._encode = function _encode(compact) {
43653 var len = this.curve.p.byteLength();
43654 var x = this.getX().toArray('be', len);
43655
43656 if (compact)
43657 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
43658
43659 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
43660 };
43661
43662 BasePoint.prototype.encode = function encode(enc, compact) {
43663 return utils.encode(this._encode(compact), enc);
43664 };
43665
43666 BasePoint.prototype.precompute = function precompute(power) {
43667 if (this.precomputed)
43668 return this;
43669
43670 var precomputed = {
43671 doubles: null,
43672 naf: null,
43673 beta: null
43674 };
43675 precomputed.naf = this._getNAFPoints(8);
43676 precomputed.doubles = this._getDoubles(4, power);
43677 precomputed.beta = this._getBeta();
43678 this.precomputed = precomputed;
43679
43680 return this;
43681 };
43682
43683 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
43684 if (!this.precomputed)
43685 return false;
43686
43687 var doubles = this.precomputed.doubles;
43688 if (!doubles)
43689 return false;
43690
43691 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
43692 };
43693
43694 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
43695 if (this.precomputed && this.precomputed.doubles)
43696 return this.precomputed.doubles;
43697
43698 var doubles = [ this ];
43699 var acc = this;
43700 for (var i = 0; i < power; i += step) {
43701 for (var j = 0; j < step; j++)
43702 acc = acc.dbl();
43703 doubles.push(acc);
43704 }
43705 return {
43706 step: step,
43707 points: doubles
43708 };
43709 };
43710
43711 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
43712 if (this.precomputed && this.precomputed.naf)
43713 return this.precomputed.naf;
43714
43715 var res = [ this ];
43716 var max = (1 << wnd) - 1;
43717 var dbl = max === 1 ? null : this.dbl();
43718 for (var i = 1; i < max; i++)
43719 res[i] = res[i - 1].add(dbl);
43720 return {
43721 wnd: wnd,
43722 points: res
43723 };
43724 };
43725
43726 BasePoint.prototype._getBeta = function _getBeta() {
43727 return null;
43728 };
43729
43730 BasePoint.prototype.dblp = function dblp(k) {
43731 var r = this;
43732 for (var i = 0; i < k; i++)
43733 r = r.dbl();
43734 return r;
43735 };
43736
43737 },{"../../elliptic":97,"bn.js":81}],99:[function(require,module,exports){
43738 'use strict';
43739
43740 var curve = require('../curve');
43741 var elliptic = require('../../elliptic');
43742 var BN = require('bn.js');
43743 var inherits = require('inherits');
43744 var Base = curve.base;
43745
43746 var assert = elliptic.utils.assert;
43747
43748 function EdwardsCurve(conf) {
43749 // NOTE: Important as we are creating point in Base.call()
43750 this.twisted = (conf.a | 0) !== 1;
43751 this.mOneA = this.twisted && (conf.a | 0) === -1;
43752 this.extended = this.mOneA;
43753
43754 Base.call(this, 'edwards', conf);
43755
43756 this.a = new BN(conf.a, 16).umod(this.red.m);
43757 this.a = this.a.toRed(this.red);
43758 this.c = new BN(conf.c, 16).toRed(this.red);
43759 this.c2 = this.c.redSqr();
43760 this.d = new BN(conf.d, 16).toRed(this.red);
43761 this.dd = this.d.redAdd(this.d);
43762
43763 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
43764 this.oneC = (conf.c | 0) === 1;
43765 }
43766 inherits(EdwardsCurve, Base);
43767 module.exports = EdwardsCurve;
43768
43769 EdwardsCurve.prototype._mulA = function _mulA(num) {
43770 if (this.mOneA)
43771 return num.redNeg();
43772 else
43773 return this.a.redMul(num);
43774 };
43775
43776 EdwardsCurve.prototype._mulC = function _mulC(num) {
43777 if (this.oneC)
43778 return num;
43779 else
43780 return this.c.redMul(num);
43781 };
43782
43783 // Just for compatibility with Short curve
43784 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
43785 return this.point(x, y, z, t);
43786 };
43787
43788 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
43789 x = new BN(x, 16);
43790 if (!x.red)
43791 x = x.toRed(this.red);
43792
43793 var x2 = x.redSqr();
43794 var rhs = this.c2.redSub(this.a.redMul(x2));
43795 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
43796
43797 var y2 = rhs.redMul(lhs.redInvm());
43798 var y = y2.redSqrt();
43799 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
43800 throw new Error('invalid point');
43801
43802 var isOdd = y.fromRed().isOdd();
43803 if (odd && !isOdd || !odd && isOdd)
43804 y = y.redNeg();
43805
43806 return this.point(x, y);
43807 };
43808
43809 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
43810 y = new BN(y, 16);
43811 if (!y.red)
43812 y = y.toRed(this.red);
43813
43814 // x^2 = (y^2 - 1) / (d y^2 + 1)
43815 var y2 = y.redSqr();
43816 var lhs = y2.redSub(this.one);
43817 var rhs = y2.redMul(this.d).redAdd(this.one);
43818 var x2 = lhs.redMul(rhs.redInvm());
43819
43820 if (x2.cmp(this.zero) === 0) {
43821 if (odd)
43822 throw new Error('invalid point');
43823 else
43824 return this.point(this.zero, y);
43825 }
43826
43827 var x = x2.redSqrt();
43828 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
43829 throw new Error('invalid point');
43830
43831 if (x.isOdd() !== odd)
43832 x = x.redNeg();
43833
43834 return this.point(x, y);
43835 };
43836
43837 EdwardsCurve.prototype.validate = function validate(point) {
43838 if (point.isInfinity())
43839 return true;
43840
43841 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
43842 point.normalize();
43843
43844 var x2 = point.x.redSqr();
43845 var y2 = point.y.redSqr();
43846 var lhs = x2.redMul(this.a).redAdd(y2);
43847 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
43848
43849 return lhs.cmp(rhs) === 0;
43850 };
43851
43852 function Point(curve, x, y, z, t) {
43853 Base.BasePoint.call(this, curve, 'projective');
43854 if (x === null && y === null && z === null) {
43855 this.x = this.curve.zero;
43856 this.y = this.curve.one;
43857 this.z = this.curve.one;
43858 this.t = this.curve.zero;
43859 this.zOne = true;
43860 } else {
43861 this.x = new BN(x, 16);
43862 this.y = new BN(y, 16);
43863 this.z = z ? new BN(z, 16) : this.curve.one;
43864 this.t = t && new BN(t, 16);
43865 if (!this.x.red)
43866 this.x = this.x.toRed(this.curve.red);
43867 if (!this.y.red)
43868 this.y = this.y.toRed(this.curve.red);
43869 if (!this.z.red)
43870 this.z = this.z.toRed(this.curve.red);
43871 if (this.t && !this.t.red)
43872 this.t = this.t.toRed(this.curve.red);
43873 this.zOne = this.z === this.curve.one;
43874
43875 // Use extended coordinates
43876 if (this.curve.extended && !this.t) {
43877 this.t = this.x.redMul(this.y);
43878 if (!this.zOne)
43879 this.t = this.t.redMul(this.z.redInvm());
43880 }
43881 }
43882 }
43883 inherits(Point, Base.BasePoint);
43884
43885 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
43886 return Point.fromJSON(this, obj);
43887 };
43888
43889 EdwardsCurve.prototype.point = function point(x, y, z, t) {
43890 return new Point(this, x, y, z, t);
43891 };
43892
43893 Point.fromJSON = function fromJSON(curve, obj) {
43894 return new Point(curve, obj[0], obj[1], obj[2]);
43895 };
43896
43897 Point.prototype.inspect = function inspect() {
43898 if (this.isInfinity())
43899 return '<EC Point Infinity>';
43900 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
43901 ' y: ' + this.y.fromRed().toString(16, 2) +
43902 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
43903 };
43904
43905 Point.prototype.isInfinity = function isInfinity() {
43906 // XXX This code assumes that zero is always zero in red
43907 return this.x.cmpn(0) === 0 &&
43908 this.y.cmp(this.z) === 0;
43909 };
43910
43911 Point.prototype._extDbl = function _extDbl() {
43912 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
43913 // #doubling-dbl-2008-hwcd
43914 // 4M + 4S
43915
43916 // A = X1^2
43917 var a = this.x.redSqr();
43918 // B = Y1^2
43919 var b = this.y.redSqr();
43920 // C = 2 * Z1^2
43921 var c = this.z.redSqr();
43922 c = c.redIAdd(c);
43923 // D = a * A
43924 var d = this.curve._mulA(a);
43925 // E = (X1 + Y1)^2 - A - B
43926 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
43927 // G = D + B
43928 var g = d.redAdd(b);
43929 // F = G - C
43930 var f = g.redSub(c);
43931 // H = D - B
43932 var h = d.redSub(b);
43933 // X3 = E * F
43934 var nx = e.redMul(f);
43935 // Y3 = G * H
43936 var ny = g.redMul(h);
43937 // T3 = E * H
43938 var nt = e.redMul(h);
43939 // Z3 = F * G
43940 var nz = f.redMul(g);
43941 return this.curve.point(nx, ny, nz, nt);
43942 };
43943
43944 Point.prototype._projDbl = function _projDbl() {
43945 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
43946 // #doubling-dbl-2008-bbjlp
43947 // #doubling-dbl-2007-bl
43948 // and others
43949 // Generally 3M + 4S or 2M + 4S
43950
43951 // B = (X1 + Y1)^2
43952 var b = this.x.redAdd(this.y).redSqr();
43953 // C = X1^2
43954 var c = this.x.redSqr();
43955 // D = Y1^2
43956 var d = this.y.redSqr();
43957
43958 var nx;
43959 var ny;
43960 var nz;
43961 if (this.curve.twisted) {
43962 // E = a * C
43963 var e = this.curve._mulA(c);
43964 // F = E + D
43965 var f = e.redAdd(d);
43966 if (this.zOne) {
43967 // X3 = (B - C - D) * (F - 2)
43968 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
43969 // Y3 = F * (E - D)
43970 ny = f.redMul(e.redSub(d));
43971 // Z3 = F^2 - 2 * F
43972 nz = f.redSqr().redSub(f).redSub(f);
43973 } else {
43974 // H = Z1^2
43975 var h = this.z.redSqr();
43976 // J = F - 2 * H
43977 var j = f.redSub(h).redISub(h);
43978 // X3 = (B-C-D)*J
43979 nx = b.redSub(c).redISub(d).redMul(j);
43980 // Y3 = F * (E - D)
43981 ny = f.redMul(e.redSub(d));
43982 // Z3 = F * J
43983 nz = f.redMul(j);
43984 }
43985 } else {
43986 // E = C + D
43987 var e = c.redAdd(d);
43988 // H = (c * Z1)^2
43989 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
43990 // J = E - 2 * H
43991 var j = e.redSub(h).redSub(h);
43992 // X3 = c * (B - E) * J
43993 nx = this.curve._mulC(b.redISub(e)).redMul(j);
43994 // Y3 = c * E * (C - D)
43995 ny = this.curve._mulC(e).redMul(c.redISub(d));
43996 // Z3 = E * J
43997 nz = e.redMul(j);
43998 }
43999 return this.curve.point(nx, ny, nz);
44000 };
44001
44002 Point.prototype.dbl = function dbl() {
44003 if (this.isInfinity())
44004 return this;
44005
44006 // Double in extended coordinates
44007 if (this.curve.extended)
44008 return this._extDbl();
44009 else
44010 return this._projDbl();
44011 };
44012
44013 Point.prototype._extAdd = function _extAdd(p) {
44014 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
44015 // #addition-add-2008-hwcd-3
44016 // 8M
44017
44018 // A = (Y1 - X1) * (Y2 - X2)
44019 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
44020 // B = (Y1 + X1) * (Y2 + X2)
44021 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
44022 // C = T1 * k * T2
44023 var c = this.t.redMul(this.curve.dd).redMul(p.t);
44024 // D = Z1 * 2 * Z2
44025 var d = this.z.redMul(p.z.redAdd(p.z));
44026 // E = B - A
44027 var e = b.redSub(a);
44028 // F = D - C
44029 var f = d.redSub(c);
44030 // G = D + C
44031 var g = d.redAdd(c);
44032 // H = B + A
44033 var h = b.redAdd(a);
44034 // X3 = E * F
44035 var nx = e.redMul(f);
44036 // Y3 = G * H
44037 var ny = g.redMul(h);
44038 // T3 = E * H
44039 var nt = e.redMul(h);
44040 // Z3 = F * G
44041 var nz = f.redMul(g);
44042 return this.curve.point(nx, ny, nz, nt);
44043 };
44044
44045 Point.prototype._projAdd = function _projAdd(p) {
44046 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
44047 // #addition-add-2008-bbjlp
44048 // #addition-add-2007-bl
44049 // 10M + 1S
44050
44051 // A = Z1 * Z2
44052 var a = this.z.redMul(p.z);
44053 // B = A^2
44054 var b = a.redSqr();
44055 // C = X1 * X2
44056 var c = this.x.redMul(p.x);
44057 // D = Y1 * Y2
44058 var d = this.y.redMul(p.y);
44059 // E = d * C * D
44060 var e = this.curve.d.redMul(c).redMul(d);
44061 // F = B - E
44062 var f = b.redSub(e);
44063 // G = B + E
44064 var g = b.redAdd(e);
44065 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
44066 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
44067 var nx = a.redMul(f).redMul(tmp);
44068 var ny;
44069 var nz;
44070 if (this.curve.twisted) {
44071 // Y3 = A * G * (D - a * C)
44072 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
44073 // Z3 = F * G
44074 nz = f.redMul(g);
44075 } else {
44076 // Y3 = A * G * (D - C)
44077 ny = a.redMul(g).redMul(d.redSub(c));
44078 // Z3 = c * F * G
44079 nz = this.curve._mulC(f).redMul(g);
44080 }
44081 return this.curve.point(nx, ny, nz);
44082 };
44083
44084 Point.prototype.add = function add(p) {
44085 if (this.isInfinity())
44086 return p;
44087 if (p.isInfinity())
44088 return this;
44089
44090 if (this.curve.extended)
44091 return this._extAdd(p);
44092 else
44093 return this._projAdd(p);
44094 };
44095
44096 Point.prototype.mul = function mul(k) {
44097 if (this._hasDoubles(k))
44098 return this.curve._fixedNafMul(this, k);
44099 else
44100 return this.curve._wnafMul(this, k);
44101 };
44102
44103 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
44104 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
44105 };
44106
44107 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
44108 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
44109 };
44110
44111 Point.prototype.normalize = function normalize() {
44112 if (this.zOne)
44113 return this;
44114
44115 // Normalize coordinates
44116 var zi = this.z.redInvm();
44117 this.x = this.x.redMul(zi);
44118 this.y = this.y.redMul(zi);
44119 if (this.t)
44120 this.t = this.t.redMul(zi);
44121 this.z = this.curve.one;
44122 this.zOne = true;
44123 return this;
44124 };
44125
44126 Point.prototype.neg = function neg() {
44127 return this.curve.point(this.x.redNeg(),
44128 this.y,
44129 this.z,
44130 this.t && this.t.redNeg());
44131 };
44132
44133 Point.prototype.getX = function getX() {
44134 this.normalize();
44135 return this.x.fromRed();
44136 };
44137
44138 Point.prototype.getY = function getY() {
44139 this.normalize();
44140 return this.y.fromRed();
44141 };
44142
44143 Point.prototype.eq = function eq(other) {
44144 return this === other ||
44145 this.getX().cmp(other.getX()) === 0 &&
44146 this.getY().cmp(other.getY()) === 0;
44147 };
44148
44149 Point.prototype.eqXToP = function eqXToP(x) {
44150 var rx = x.toRed(this.curve.red).redMul(this.z);
44151 if (this.x.cmp(rx) === 0)
44152 return true;
44153
44154 var xc = x.clone();
44155 var t = this.curve.redN.redMul(this.z);
44156 for (;;) {
44157 xc.iadd(this.curve.n);
44158 if (xc.cmp(this.curve.p) >= 0)
44159 return false;
44160
44161 rx.redIAdd(t);
44162 if (this.x.cmp(rx) === 0)
44163 return true;
44164 }
44165 return false;
44166 };
44167
44168 // Compatibility with BaseCurve
44169 Point.prototype.toP = Point.prototype.normalize;
44170 Point.prototype.mixedAdd = Point.prototype.add;
44171
44172 },{"../../elliptic":97,"../curve":100,"bn.js":81,"inherits":121}],100:[function(require,module,exports){
44173 'use strict';
44174
44175 var curve = exports;
44176
44177 curve.base = require('./base');
44178 curve.short = require('./short');
44179 curve.mont = require('./mont');
44180 curve.edwards = require('./edwards');
44181
44182 },{"./base":98,"./edwards":99,"./mont":101,"./short":102}],101:[function(require,module,exports){
44183 'use strict';
44184
44185 var curve = require('../curve');
44186 var BN = require('bn.js');
44187 var inherits = require('inherits');
44188 var Base = curve.base;
44189
44190 var elliptic = require('../../elliptic');
44191 var utils = elliptic.utils;
44192
44193 function MontCurve(conf) {
44194 Base.call(this, 'mont', conf);
44195
44196 this.a = new BN(conf.a, 16).toRed(this.red);
44197 this.b = new BN(conf.b, 16).toRed(this.red);
44198 this.i4 = new BN(4).toRed(this.red).redInvm();
44199 this.two = new BN(2).toRed(this.red);
44200 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
44201 }
44202 inherits(MontCurve, Base);
44203 module.exports = MontCurve;
44204
44205 MontCurve.prototype.validate = function validate(point) {
44206 var x = point.normalize().x;
44207 var x2 = x.redSqr();
44208 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
44209 var y = rhs.redSqrt();
44210
44211 return y.redSqr().cmp(rhs) === 0;
44212 };
44213
44214 function Point(curve, x, z) {
44215 Base.BasePoint.call(this, curve, 'projective');
44216 if (x === null && z === null) {
44217 this.x = this.curve.one;
44218 this.z = this.curve.zero;
44219 } else {
44220 this.x = new BN(x, 16);
44221 this.z = new BN(z, 16);
44222 if (!this.x.red)
44223 this.x = this.x.toRed(this.curve.red);
44224 if (!this.z.red)
44225 this.z = this.z.toRed(this.curve.red);
44226 }
44227 }
44228 inherits(Point, Base.BasePoint);
44229
44230 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
44231 return this.point(utils.toArray(bytes, enc), 1);
44232 };
44233
44234 MontCurve.prototype.point = function point(x, z) {
44235 return new Point(this, x, z);
44236 };
44237
44238 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
44239 return Point.fromJSON(this, obj);
44240 };
44241
44242 Point.prototype.precompute = function precompute() {
44243 // No-op
44244 };
44245
44246 Point.prototype._encode = function _encode() {
44247 return this.getX().toArray('be', this.curve.p.byteLength());
44248 };
44249
44250 Point.fromJSON = function fromJSON(curve, obj) {
44251 return new Point(curve, obj[0], obj[1] || curve.one);
44252 };
44253
44254 Point.prototype.inspect = function inspect() {
44255 if (this.isInfinity())
44256 return '<EC Point Infinity>';
44257 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
44258 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
44259 };
44260
44261 Point.prototype.isInfinity = function isInfinity() {
44262 // XXX This code assumes that zero is always zero in red
44263 return this.z.cmpn(0) === 0;
44264 };
44265
44266 Point.prototype.dbl = function dbl() {
44267 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
44268 // 2M + 2S + 4A
44269
44270 // A = X1 + Z1
44271 var a = this.x.redAdd(this.z);
44272 // AA = A^2
44273 var aa = a.redSqr();
44274 // B = X1 - Z1
44275 var b = this.x.redSub(this.z);
44276 // BB = B^2
44277 var bb = b.redSqr();
44278 // C = AA - BB
44279 var c = aa.redSub(bb);
44280 // X3 = AA * BB
44281 var nx = aa.redMul(bb);
44282 // Z3 = C * (BB + A24 * C)
44283 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
44284 return this.curve.point(nx, nz);
44285 };
44286
44287 Point.prototype.add = function add() {
44288 throw new Error('Not supported on Montgomery curve');
44289 };
44290
44291 Point.prototype.diffAdd = function diffAdd(p, diff) {
44292 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
44293 // 4M + 2S + 6A
44294
44295 // A = X2 + Z2
44296 var a = this.x.redAdd(this.z);
44297 // B = X2 - Z2
44298 var b = this.x.redSub(this.z);
44299 // C = X3 + Z3
44300 var c = p.x.redAdd(p.z);
44301 // D = X3 - Z3
44302 var d = p.x.redSub(p.z);
44303 // DA = D * A
44304 var da = d.redMul(a);
44305 // CB = C * B
44306 var cb = c.redMul(b);
44307 // X5 = Z1 * (DA + CB)^2
44308 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
44309 // Z5 = X1 * (DA - CB)^2
44310 var nz = diff.x.redMul(da.redISub(cb).redSqr());
44311 return this.curve.point(nx, nz);
44312 };
44313
44314 Point.prototype.mul = function mul(k) {
44315 var t = k.clone();
44316 var a = this; // (N / 2) * Q + Q
44317 var b = this.curve.point(null, null); // (N / 2) * Q
44318 var c = this; // Q
44319
44320 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
44321 bits.push(t.andln(1));
44322
44323 for (var i = bits.length - 1; i >= 0; i--) {
44324 if (bits[i] === 0) {
44325 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
44326 a = a.diffAdd(b, c);
44327 // N * Q = 2 * ((N / 2) * Q + Q))
44328 b = b.dbl();
44329 } else {
44330 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
44331 b = a.diffAdd(b, c);
44332 // N * Q + Q = 2 * ((N / 2) * Q + Q)
44333 a = a.dbl();
44334 }
44335 }
44336 return b;
44337 };
44338
44339 Point.prototype.mulAdd = function mulAdd() {
44340 throw new Error('Not supported on Montgomery curve');
44341 };
44342
44343 Point.prototype.jumlAdd = function jumlAdd() {
44344 throw new Error('Not supported on Montgomery curve');
44345 };
44346
44347 Point.prototype.eq = function eq(other) {
44348 return this.getX().cmp(other.getX()) === 0;
44349 };
44350
44351 Point.prototype.normalize = function normalize() {
44352 this.x = this.x.redMul(this.z.redInvm());
44353 this.z = this.curve.one;
44354 return this;
44355 };
44356
44357 Point.prototype.getX = function getX() {
44358 // Normalize coordinates
44359 this.normalize();
44360
44361 return this.x.fromRed();
44362 };
44363
44364 },{"../../elliptic":97,"../curve":100,"bn.js":81,"inherits":121}],102:[function(require,module,exports){
44365 'use strict';
44366
44367 var curve = require('../curve');
44368 var elliptic = require('../../elliptic');
44369 var BN = require('bn.js');
44370 var inherits = require('inherits');
44371 var Base = curve.base;
44372
44373 var assert = elliptic.utils.assert;
44374
44375 function ShortCurve(conf) {
44376 Base.call(this, 'short', conf);
44377
44378 this.a = new BN(conf.a, 16).toRed(this.red);
44379 this.b = new BN(conf.b, 16).toRed(this.red);
44380 this.tinv = this.two.redInvm();
44381
44382 this.zeroA = this.a.fromRed().cmpn(0) === 0;
44383 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
44384
44385 // If the curve is endomorphic, precalculate beta and lambda
44386 this.endo = this._getEndomorphism(conf);
44387 this._endoWnafT1 = new Array(4);
44388 this._endoWnafT2 = new Array(4);
44389 }
44390 inherits(ShortCurve, Base);
44391 module.exports = ShortCurve;
44392
44393 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
44394 // No efficient endomorphism
44395 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
44396 return;
44397
44398 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
44399 var beta;
44400 var lambda;
44401 if (conf.beta) {
44402 beta = new BN(conf.beta, 16).toRed(this.red);
44403 } else {
44404 var betas = this._getEndoRoots(this.p);
44405 // Choose the smallest beta
44406 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
44407 beta = beta.toRed(this.red);
44408 }
44409 if (conf.lambda) {
44410 lambda = new BN(conf.lambda, 16);
44411 } else {
44412 // Choose the lambda that is matching selected beta
44413 var lambdas = this._getEndoRoots(this.n);
44414 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
44415 lambda = lambdas[0];
44416 } else {
44417 lambda = lambdas[1];
44418 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
44419 }
44420 }
44421
44422 // Get basis vectors, used for balanced length-two representation
44423 var basis;
44424 if (conf.basis) {
44425 basis = conf.basis.map(function(vec) {
44426 return {
44427 a: new BN(vec.a, 16),
44428 b: new BN(vec.b, 16)
44429 };
44430 });
44431 } else {
44432 basis = this._getEndoBasis(lambda);
44433 }
44434
44435 return {
44436 beta: beta,
44437 lambda: lambda,
44438 basis: basis
44439 };
44440 };
44441
44442 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
44443 // Find roots of for x^2 + x + 1 in F
44444 // Root = (-1 +- Sqrt(-3)) / 2
44445 //
44446 var red = num === this.p ? this.red : BN.mont(num);
44447 var tinv = new BN(2).toRed(red).redInvm();
44448 var ntinv = tinv.redNeg();
44449
44450 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
44451
44452 var l1 = ntinv.redAdd(s).fromRed();
44453 var l2 = ntinv.redSub(s).fromRed();
44454 return [ l1, l2 ];
44455 };
44456
44457 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
44458 // aprxSqrt >= sqrt(this.n)
44459 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
44460
44461 // 3.74
44462 // Run EGCD, until r(L + 1) < aprxSqrt
44463 var u = lambda;
44464 var v = this.n.clone();
44465 var x1 = new BN(1);
44466 var y1 = new BN(0);
44467 var x2 = new BN(0);
44468 var y2 = new BN(1);
44469
44470 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
44471 var a0;
44472 var b0;
44473 // First vector
44474 var a1;
44475 var b1;
44476 // Second vector
44477 var a2;
44478 var b2;
44479
44480 var prevR;
44481 var i = 0;
44482 var r;
44483 var x;
44484 while (u.cmpn(0) !== 0) {
44485 var q = v.div(u);
44486 r = v.sub(q.mul(u));
44487 x = x2.sub(q.mul(x1));
44488 var y = y2.sub(q.mul(y1));
44489
44490 if (!a1 && r.cmp(aprxSqrt) < 0) {
44491 a0 = prevR.neg();
44492 b0 = x1;
44493 a1 = r.neg();
44494 b1 = x;
44495 } else if (a1 && ++i === 2) {
44496 break;
44497 }
44498 prevR = r;
44499
44500 v = u;
44501 u = r;
44502 x2 = x1;
44503 x1 = x;
44504 y2 = y1;
44505 y1 = y;
44506 }
44507 a2 = r.neg();
44508 b2 = x;
44509
44510 var len1 = a1.sqr().add(b1.sqr());
44511 var len2 = a2.sqr().add(b2.sqr());
44512 if (len2.cmp(len1) >= 0) {
44513 a2 = a0;
44514 b2 = b0;
44515 }
44516
44517 // Normalize signs
44518 if (a1.negative) {
44519 a1 = a1.neg();
44520 b1 = b1.neg();
44521 }
44522 if (a2.negative) {
44523 a2 = a2.neg();
44524 b2 = b2.neg();
44525 }
44526
44527 return [
44528 { a: a1, b: b1 },
44529 { a: a2, b: b2 }
44530 ];
44531 };
44532
44533 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
44534 var basis = this.endo.basis;
44535 var v1 = basis[0];
44536 var v2 = basis[1];
44537
44538 var c1 = v2.b.mul(k).divRound(this.n);
44539 var c2 = v1.b.neg().mul(k).divRound(this.n);
44540
44541 var p1 = c1.mul(v1.a);
44542 var p2 = c2.mul(v2.a);
44543 var q1 = c1.mul(v1.b);
44544 var q2 = c2.mul(v2.b);
44545
44546 // Calculate answer
44547 var k1 = k.sub(p1).sub(p2);
44548 var k2 = q1.add(q2).neg();
44549 return { k1: k1, k2: k2 };
44550 };
44551
44552 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
44553 x = new BN(x, 16);
44554 if (!x.red)
44555 x = x.toRed(this.red);
44556
44557 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
44558 var y = y2.redSqrt();
44559 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
44560 throw new Error('invalid point');
44561
44562 // XXX Is there any way to tell if the number is odd without converting it
44563 // to non-red form?
44564 var isOdd = y.fromRed().isOdd();
44565 if (odd && !isOdd || !odd && isOdd)
44566 y = y.redNeg();
44567
44568 return this.point(x, y);
44569 };
44570
44571 ShortCurve.prototype.validate = function validate(point) {
44572 if (point.inf)
44573 return true;
44574
44575 var x = point.x;
44576 var y = point.y;
44577
44578 var ax = this.a.redMul(x);
44579 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
44580 return y.redSqr().redISub(rhs).cmpn(0) === 0;
44581 };
44582
44583 ShortCurve.prototype._endoWnafMulAdd =
44584 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
44585 var npoints = this._endoWnafT1;
44586 var ncoeffs = this._endoWnafT2;
44587 for (var i = 0; i < points.length; i++) {
44588 var split = this._endoSplit(coeffs[i]);
44589 var p = points[i];
44590 var beta = p._getBeta();
44591
44592 if (split.k1.negative) {
44593 split.k1.ineg();
44594 p = p.neg(true);
44595 }
44596 if (split.k2.negative) {
44597 split.k2.ineg();
44598 beta = beta.neg(true);
44599 }
44600
44601 npoints[i * 2] = p;
44602 npoints[i * 2 + 1] = beta;
44603 ncoeffs[i * 2] = split.k1;
44604 ncoeffs[i * 2 + 1] = split.k2;
44605 }
44606 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
44607
44608 // Clean-up references to points and coefficients
44609 for (var j = 0; j < i * 2; j++) {
44610 npoints[j] = null;
44611 ncoeffs[j] = null;
44612 }
44613 return res;
44614 };
44615
44616 function Point(curve, x, y, isRed) {
44617 Base.BasePoint.call(this, curve, 'affine');
44618 if (x === null && y === null) {
44619 this.x = null;
44620 this.y = null;
44621 this.inf = true;
44622 } else {
44623 this.x = new BN(x, 16);
44624 this.y = new BN(y, 16);
44625 // Force redgomery representation when loading from JSON
44626 if (isRed) {
44627 this.x.forceRed(this.curve.red);
44628 this.y.forceRed(this.curve.red);
44629 }
44630 if (!this.x.red)
44631 this.x = this.x.toRed(this.curve.red);
44632 if (!this.y.red)
44633 this.y = this.y.toRed(this.curve.red);
44634 this.inf = false;
44635 }
44636 }
44637 inherits(Point, Base.BasePoint);
44638
44639 ShortCurve.prototype.point = function point(x, y, isRed) {
44640 return new Point(this, x, y, isRed);
44641 };
44642
44643 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
44644 return Point.fromJSON(this, obj, red);
44645 };
44646
44647 Point.prototype._getBeta = function _getBeta() {
44648 if (!this.curve.endo)
44649 return;
44650
44651 var pre = this.precomputed;
44652 if (pre && pre.beta)
44653 return pre.beta;
44654
44655 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
44656 if (pre) {
44657 var curve = this.curve;
44658 var endoMul = function(p) {
44659 return curve.point(p.x.redMul(curve.endo.beta), p.y);
44660 };
44661 pre.beta = beta;
44662 beta.precomputed = {
44663 beta: null,
44664 naf: pre.naf && {
44665 wnd: pre.naf.wnd,
44666 points: pre.naf.points.map(endoMul)
44667 },
44668 doubles: pre.doubles && {
44669 step: pre.doubles.step,
44670 points: pre.doubles.points.map(endoMul)
44671 }
44672 };
44673 }
44674 return beta;
44675 };
44676
44677 Point.prototype.toJSON = function toJSON() {
44678 if (!this.precomputed)
44679 return [ this.x, this.y ];
44680
44681 return [ this.x, this.y, this.precomputed && {
44682 doubles: this.precomputed.doubles && {
44683 step: this.precomputed.doubles.step,
44684 points: this.precomputed.doubles.points.slice(1)
44685 },
44686 naf: this.precomputed.naf && {
44687 wnd: this.precomputed.naf.wnd,
44688 points: this.precomputed.naf.points.slice(1)
44689 }
44690 } ];
44691 };
44692
44693 Point.fromJSON = function fromJSON(curve, obj, red) {
44694 if (typeof obj === 'string')
44695 obj = JSON.parse(obj);
44696 var res = curve.point(obj[0], obj[1], red);
44697 if (!obj[2])
44698 return res;
44699
44700 function obj2point(obj) {
44701 return curve.point(obj[0], obj[1], red);
44702 }
44703
44704 var pre = obj[2];
44705 res.precomputed = {
44706 beta: null,
44707 doubles: pre.doubles && {
44708 step: pre.doubles.step,
44709 points: [ res ].concat(pre.doubles.points.map(obj2point))
44710 },
44711 naf: pre.naf && {
44712 wnd: pre.naf.wnd,
44713 points: [ res ].concat(pre.naf.points.map(obj2point))
44714 }
44715 };
44716 return res;
44717 };
44718
44719 Point.prototype.inspect = function inspect() {
44720 if (this.isInfinity())
44721 return '<EC Point Infinity>';
44722 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
44723 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
44724 };
44725
44726 Point.prototype.isInfinity = function isInfinity() {
44727 return this.inf;
44728 };
44729
44730 Point.prototype.add = function add(p) {
44731 // O + P = P
44732 if (this.inf)
44733 return p;
44734
44735 // P + O = P
44736 if (p.inf)
44737 return this;
44738
44739 // P + P = 2P
44740 if (this.eq(p))
44741 return this.dbl();
44742
44743 // P + (-P) = O
44744 if (this.neg().eq(p))
44745 return this.curve.point(null, null);
44746
44747 // P + Q = O
44748 if (this.x.cmp(p.x) === 0)
44749 return this.curve.point(null, null);
44750
44751 var c = this.y.redSub(p.y);
44752 if (c.cmpn(0) !== 0)
44753 c = c.redMul(this.x.redSub(p.x).redInvm());
44754 var nx = c.redSqr().redISub(this.x).redISub(p.x);
44755 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
44756 return this.curve.point(nx, ny);
44757 };
44758
44759 Point.prototype.dbl = function dbl() {
44760 if (this.inf)
44761 return this;
44762
44763 // 2P = O
44764 var ys1 = this.y.redAdd(this.y);
44765 if (ys1.cmpn(0) === 0)
44766 return this.curve.point(null, null);
44767
44768 var a = this.curve.a;
44769
44770 var x2 = this.x.redSqr();
44771 var dyinv = ys1.redInvm();
44772 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
44773
44774 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
44775 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
44776 return this.curve.point(nx, ny);
44777 };
44778
44779 Point.prototype.getX = function getX() {
44780 return this.x.fromRed();
44781 };
44782
44783 Point.prototype.getY = function getY() {
44784 return this.y.fromRed();
44785 };
44786
44787 Point.prototype.mul = function mul(k) {
44788 k = new BN(k, 16);
44789
44790 if (this._hasDoubles(k))
44791 return this.curve._fixedNafMul(this, k);
44792 else if (this.curve.endo)
44793 return this.curve._endoWnafMulAdd([ this ], [ k ]);
44794 else
44795 return this.curve._wnafMul(this, k);
44796 };
44797
44798 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
44799 var points = [ this, p2 ];
44800 var coeffs = [ k1, k2 ];
44801 if (this.curve.endo)
44802 return this.curve._endoWnafMulAdd(points, coeffs);
44803 else
44804 return this.curve._wnafMulAdd(1, points, coeffs, 2);
44805 };
44806
44807 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
44808 var points = [ this, p2 ];
44809 var coeffs = [ k1, k2 ];
44810 if (this.curve.endo)
44811 return this.curve._endoWnafMulAdd(points, coeffs, true);
44812 else
44813 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
44814 };
44815
44816 Point.prototype.eq = function eq(p) {
44817 return this === p ||
44818 this.inf === p.inf &&
44819 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
44820 };
44821
44822 Point.prototype.neg = function neg(_precompute) {
44823 if (this.inf)
44824 return this;
44825
44826 var res = this.curve.point(this.x, this.y.redNeg());
44827 if (_precompute && this.precomputed) {
44828 var pre = this.precomputed;
44829 var negate = function(p) {
44830 return p.neg();
44831 };
44832 res.precomputed = {
44833 naf: pre.naf && {
44834 wnd: pre.naf.wnd,
44835 points: pre.naf.points.map(negate)
44836 },
44837 doubles: pre.doubles && {
44838 step: pre.doubles.step,
44839 points: pre.doubles.points.map(negate)
44840 }
44841 };
44842 }
44843 return res;
44844 };
44845
44846 Point.prototype.toJ = function toJ() {
44847 if (this.inf)
44848 return this.curve.jpoint(null, null, null);
44849
44850 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
44851 return res;
44852 };
44853
44854 function JPoint(curve, x, y, z) {
44855 Base.BasePoint.call(this, curve, 'jacobian');
44856 if (x === null && y === null && z === null) {
44857 this.x = this.curve.one;
44858 this.y = this.curve.one;
44859 this.z = new BN(0);
44860 } else {
44861 this.x = new BN(x, 16);
44862 this.y = new BN(y, 16);
44863 this.z = new BN(z, 16);
44864 }
44865 if (!this.x.red)
44866 this.x = this.x.toRed(this.curve.red);
44867 if (!this.y.red)
44868 this.y = this.y.toRed(this.curve.red);
44869 if (!this.z.red)
44870 this.z = this.z.toRed(this.curve.red);
44871
44872 this.zOne = this.z === this.curve.one;
44873 }
44874 inherits(JPoint, Base.BasePoint);
44875
44876 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
44877 return new JPoint(this, x, y, z);
44878 };
44879
44880 JPoint.prototype.toP = function toP() {
44881 if (this.isInfinity())
44882 return this.curve.point(null, null);
44883
44884 var zinv = this.z.redInvm();
44885 var zinv2 = zinv.redSqr();
44886 var ax = this.x.redMul(zinv2);
44887 var ay = this.y.redMul(zinv2).redMul(zinv);
44888
44889 return this.curve.point(ax, ay);
44890 };
44891
44892 JPoint.prototype.neg = function neg() {
44893 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
44894 };
44895
44896 JPoint.prototype.add = function add(p) {
44897 // O + P = P
44898 if (this.isInfinity())
44899 return p;
44900
44901 // P + O = P
44902 if (p.isInfinity())
44903 return this;
44904
44905 // 12M + 4S + 7A
44906 var pz2 = p.z.redSqr();
44907 var z2 = this.z.redSqr();
44908 var u1 = this.x.redMul(pz2);
44909 var u2 = p.x.redMul(z2);
44910 var s1 = this.y.redMul(pz2.redMul(p.z));
44911 var s2 = p.y.redMul(z2.redMul(this.z));
44912
44913 var h = u1.redSub(u2);
44914 var r = s1.redSub(s2);
44915 if (h.cmpn(0) === 0) {
44916 if (r.cmpn(0) !== 0)
44917 return this.curve.jpoint(null, null, null);
44918 else
44919 return this.dbl();
44920 }
44921
44922 var h2 = h.redSqr();
44923 var h3 = h2.redMul(h);
44924 var v = u1.redMul(h2);
44925
44926 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
44927 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
44928 var nz = this.z.redMul(p.z).redMul(h);
44929
44930 return this.curve.jpoint(nx, ny, nz);
44931 };
44932
44933 JPoint.prototype.mixedAdd = function mixedAdd(p) {
44934 // O + P = P
44935 if (this.isInfinity())
44936 return p.toJ();
44937
44938 // P + O = P
44939 if (p.isInfinity())
44940 return this;
44941
44942 // 8M + 3S + 7A
44943 var z2 = this.z.redSqr();
44944 var u1 = this.x;
44945 var u2 = p.x.redMul(z2);
44946 var s1 = this.y;
44947 var s2 = p.y.redMul(z2).redMul(this.z);
44948
44949 var h = u1.redSub(u2);
44950 var r = s1.redSub(s2);
44951 if (h.cmpn(0) === 0) {
44952 if (r.cmpn(0) !== 0)
44953 return this.curve.jpoint(null, null, null);
44954 else
44955 return this.dbl();
44956 }
44957
44958 var h2 = h.redSqr();
44959 var h3 = h2.redMul(h);
44960 var v = u1.redMul(h2);
44961
44962 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
44963 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
44964 var nz = this.z.redMul(h);
44965
44966 return this.curve.jpoint(nx, ny, nz);
44967 };
44968
44969 JPoint.prototype.dblp = function dblp(pow) {
44970 if (pow === 0)
44971 return this;
44972 if (this.isInfinity())
44973 return this;
44974 if (!pow)
44975 return this.dbl();
44976
44977 if (this.curve.zeroA || this.curve.threeA) {
44978 var r = this;
44979 for (var i = 0; i < pow; i++)
44980 r = r.dbl();
44981 return r;
44982 }
44983
44984 // 1M + 2S + 1A + N * (4S + 5M + 8A)
44985 // N = 1 => 6M + 6S + 9A
44986 var a = this.curve.a;
44987 var tinv = this.curve.tinv;
44988
44989 var jx = this.x;
44990 var jy = this.y;
44991 var jz = this.z;
44992 var jz4 = jz.redSqr().redSqr();
44993
44994 // Reuse results
44995 var jyd = jy.redAdd(jy);
44996 for (var i = 0; i < pow; i++) {
44997 var jx2 = jx.redSqr();
44998 var jyd2 = jyd.redSqr();
44999 var jyd4 = jyd2.redSqr();
45000 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
45001
45002 var t1 = jx.redMul(jyd2);
45003 var nx = c.redSqr().redISub(t1.redAdd(t1));
45004 var t2 = t1.redISub(nx);
45005 var dny = c.redMul(t2);
45006 dny = dny.redIAdd(dny).redISub(jyd4);
45007 var nz = jyd.redMul(jz);
45008 if (i + 1 < pow)
45009 jz4 = jz4.redMul(jyd4);
45010
45011 jx = nx;
45012 jz = nz;
45013 jyd = dny;
45014 }
45015
45016 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
45017 };
45018
45019 JPoint.prototype.dbl = function dbl() {
45020 if (this.isInfinity())
45021 return this;
45022
45023 if (this.curve.zeroA)
45024 return this._zeroDbl();
45025 else if (this.curve.threeA)
45026 return this._threeDbl();
45027 else
45028 return this._dbl();
45029 };
45030
45031 JPoint.prototype._zeroDbl = function _zeroDbl() {
45032 var nx;
45033 var ny;
45034 var nz;
45035 // Z = 1
45036 if (this.zOne) {
45037 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
45038 // #doubling-mdbl-2007-bl
45039 // 1M + 5S + 14A
45040
45041 // XX = X1^2
45042 var xx = this.x.redSqr();
45043 // YY = Y1^2
45044 var yy = this.y.redSqr();
45045 // YYYY = YY^2
45046 var yyyy = yy.redSqr();
45047 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
45048 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
45049 s = s.redIAdd(s);
45050 // M = 3 * XX + a; a = 0
45051 var m = xx.redAdd(xx).redIAdd(xx);
45052 // T = M ^ 2 - 2*S
45053 var t = m.redSqr().redISub(s).redISub(s);
45054
45055 // 8 * YYYY
45056 var yyyy8 = yyyy.redIAdd(yyyy);
45057 yyyy8 = yyyy8.redIAdd(yyyy8);
45058 yyyy8 = yyyy8.redIAdd(yyyy8);
45059
45060 // X3 = T
45061 nx = t;
45062 // Y3 = M * (S - T) - 8 * YYYY
45063 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
45064 // Z3 = 2*Y1
45065 nz = this.y.redAdd(this.y);
45066 } else {
45067 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
45068 // #doubling-dbl-2009-l
45069 // 2M + 5S + 13A
45070
45071 // A = X1^2
45072 var a = this.x.redSqr();
45073 // B = Y1^2
45074 var b = this.y.redSqr();
45075 // C = B^2
45076 var c = b.redSqr();
45077 // D = 2 * ((X1 + B)^2 - A - C)
45078 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
45079 d = d.redIAdd(d);
45080 // E = 3 * A
45081 var e = a.redAdd(a).redIAdd(a);
45082 // F = E^2
45083 var f = e.redSqr();
45084
45085 // 8 * C
45086 var c8 = c.redIAdd(c);
45087 c8 = c8.redIAdd(c8);
45088 c8 = c8.redIAdd(c8);
45089
45090 // X3 = F - 2 * D
45091 nx = f.redISub(d).redISub(d);
45092 // Y3 = E * (D - X3) - 8 * C
45093 ny = e.redMul(d.redISub(nx)).redISub(c8);
45094 // Z3 = 2 * Y1 * Z1
45095 nz = this.y.redMul(this.z);
45096 nz = nz.redIAdd(nz);
45097 }
45098
45099 return this.curve.jpoint(nx, ny, nz);
45100 };
45101
45102 JPoint.prototype._threeDbl = function _threeDbl() {
45103 var nx;
45104 var ny;
45105 var nz;
45106 // Z = 1
45107 if (this.zOne) {
45108 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
45109 // #doubling-mdbl-2007-bl
45110 // 1M + 5S + 15A
45111
45112 // XX = X1^2
45113 var xx = this.x.redSqr();
45114 // YY = Y1^2
45115 var yy = this.y.redSqr();
45116 // YYYY = YY^2
45117 var yyyy = yy.redSqr();
45118 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
45119 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
45120 s = s.redIAdd(s);
45121 // M = 3 * XX + a
45122 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
45123 // T = M^2 - 2 * S
45124 var t = m.redSqr().redISub(s).redISub(s);
45125 // X3 = T
45126 nx = t;
45127 // Y3 = M * (S - T) - 8 * YYYY
45128 var yyyy8 = yyyy.redIAdd(yyyy);
45129 yyyy8 = yyyy8.redIAdd(yyyy8);
45130 yyyy8 = yyyy8.redIAdd(yyyy8);
45131 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
45132 // Z3 = 2 * Y1
45133 nz = this.y.redAdd(this.y);
45134 } else {
45135 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
45136 // 3M + 5S
45137
45138 // delta = Z1^2
45139 var delta = this.z.redSqr();
45140 // gamma = Y1^2
45141 var gamma = this.y.redSqr();
45142 // beta = X1 * gamma
45143 var beta = this.x.redMul(gamma);
45144 // alpha = 3 * (X1 - delta) * (X1 + delta)
45145 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
45146 alpha = alpha.redAdd(alpha).redIAdd(alpha);
45147 // X3 = alpha^2 - 8 * beta
45148 var beta4 = beta.redIAdd(beta);
45149 beta4 = beta4.redIAdd(beta4);
45150 var beta8 = beta4.redAdd(beta4);
45151 nx = alpha.redSqr().redISub(beta8);
45152 // Z3 = (Y1 + Z1)^2 - gamma - delta
45153 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
45154 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
45155 var ggamma8 = gamma.redSqr();
45156 ggamma8 = ggamma8.redIAdd(ggamma8);
45157 ggamma8 = ggamma8.redIAdd(ggamma8);
45158 ggamma8 = ggamma8.redIAdd(ggamma8);
45159 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
45160 }
45161
45162 return this.curve.jpoint(nx, ny, nz);
45163 };
45164
45165 JPoint.prototype._dbl = function _dbl() {
45166 var a = this.curve.a;
45167
45168 // 4M + 6S + 10A
45169 var jx = this.x;
45170 var jy = this.y;
45171 var jz = this.z;
45172 var jz4 = jz.redSqr().redSqr();
45173
45174 var jx2 = jx.redSqr();
45175 var jy2 = jy.redSqr();
45176
45177 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
45178
45179 var jxd4 = jx.redAdd(jx);
45180 jxd4 = jxd4.redIAdd(jxd4);
45181 var t1 = jxd4.redMul(jy2);
45182 var nx = c.redSqr().redISub(t1.redAdd(t1));
45183 var t2 = t1.redISub(nx);
45184
45185 var jyd8 = jy2.redSqr();
45186 jyd8 = jyd8.redIAdd(jyd8);
45187 jyd8 = jyd8.redIAdd(jyd8);
45188 jyd8 = jyd8.redIAdd(jyd8);
45189 var ny = c.redMul(t2).redISub(jyd8);
45190 var nz = jy.redAdd(jy).redMul(jz);
45191
45192 return this.curve.jpoint(nx, ny, nz);
45193 };
45194
45195 JPoint.prototype.trpl = function trpl() {
45196 if (!this.curve.zeroA)
45197 return this.dbl().add(this);
45198
45199 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
45200 // 5M + 10S + ...
45201
45202 // XX = X1^2
45203 var xx = this.x.redSqr();
45204 // YY = Y1^2
45205 var yy = this.y.redSqr();
45206 // ZZ = Z1^2
45207 var zz = this.z.redSqr();
45208 // YYYY = YY^2
45209 var yyyy = yy.redSqr();
45210 // M = 3 * XX + a * ZZ2; a = 0
45211 var m = xx.redAdd(xx).redIAdd(xx);
45212 // MM = M^2
45213 var mm = m.redSqr();
45214 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
45215 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
45216 e = e.redIAdd(e);
45217 e = e.redAdd(e).redIAdd(e);
45218 e = e.redISub(mm);
45219 // EE = E^2
45220 var ee = e.redSqr();
45221 // T = 16*YYYY
45222 var t = yyyy.redIAdd(yyyy);
45223 t = t.redIAdd(t);
45224 t = t.redIAdd(t);
45225 t = t.redIAdd(t);
45226 // U = (M + E)^2 - MM - EE - T
45227 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
45228 // X3 = 4 * (X1 * EE - 4 * YY * U)
45229 var yyu4 = yy.redMul(u);
45230 yyu4 = yyu4.redIAdd(yyu4);
45231 yyu4 = yyu4.redIAdd(yyu4);
45232 var nx = this.x.redMul(ee).redISub(yyu4);
45233 nx = nx.redIAdd(nx);
45234 nx = nx.redIAdd(nx);
45235 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
45236 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
45237 ny = ny.redIAdd(ny);
45238 ny = ny.redIAdd(ny);
45239 ny = ny.redIAdd(ny);
45240 // Z3 = (Z1 + E)^2 - ZZ - EE
45241 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
45242
45243 return this.curve.jpoint(nx, ny, nz);
45244 };
45245
45246 JPoint.prototype.mul = function mul(k, kbase) {
45247 k = new BN(k, kbase);
45248
45249 return this.curve._wnafMul(this, k);
45250 };
45251
45252 JPoint.prototype.eq = function eq(p) {
45253 if (p.type === 'affine')
45254 return this.eq(p.toJ());
45255
45256 if (this === p)
45257 return true;
45258
45259 // x1 * z2^2 == x2 * z1^2
45260 var z2 = this.z.redSqr();
45261 var pz2 = p.z.redSqr();
45262 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
45263 return false;
45264
45265 // y1 * z2^3 == y2 * z1^3
45266 var z3 = z2.redMul(this.z);
45267 var pz3 = pz2.redMul(p.z);
45268 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
45269 };
45270
45271 JPoint.prototype.eqXToP = function eqXToP(x) {
45272 var zs = this.z.redSqr();
45273 var rx = x.toRed(this.curve.red).redMul(zs);
45274 if (this.x.cmp(rx) === 0)
45275 return true;
45276
45277 var xc = x.clone();
45278 var t = this.curve.redN.redMul(zs);
45279 for (;;) {
45280 xc.iadd(this.curve.n);
45281 if (xc.cmp(this.curve.p) >= 0)
45282 return false;
45283
45284 rx.redIAdd(t);
45285 if (this.x.cmp(rx) === 0)
45286 return true;
45287 }
45288 return false;
45289 };
45290
45291 JPoint.prototype.inspect = function inspect() {
45292 if (this.isInfinity())
45293 return '<EC JPoint Infinity>';
45294 return '<EC JPoint x: ' + this.x.toString(16, 2) +
45295 ' y: ' + this.y.toString(16, 2) +
45296 ' z: ' + this.z.toString(16, 2) + '>';
45297 };
45298
45299 JPoint.prototype.isInfinity = function isInfinity() {
45300 // XXX This code assumes that zero is always zero in red
45301 return this.z.cmpn(0) === 0;
45302 };
45303
45304 },{"../../elliptic":97,"../curve":100,"bn.js":81,"inherits":121}],103:[function(require,module,exports){
45305 'use strict';
45306
45307 var curves = exports;
45308
45309 var hash = require('hash.js');
45310 var elliptic = require('../elliptic');
45311
45312 var assert = elliptic.utils.assert;
45313
45314 function PresetCurve(options) {
45315 if (options.type === 'short')
45316 this.curve = new elliptic.curve.short(options);
45317 else if (options.type === 'edwards')
45318 this.curve = new elliptic.curve.edwards(options);
45319 else
45320 this.curve = new elliptic.curve.mont(options);
45321 this.g = this.curve.g;
45322 this.n = this.curve.n;
45323 this.hash = options.hash;
45324
45325 assert(this.g.validate(), 'Invalid curve');
45326 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
45327 }
45328 curves.PresetCurve = PresetCurve;
45329
45330 function defineCurve(name, options) {
45331 Object.defineProperty(curves, name, {
45332 configurable: true,
45333 enumerable: true,
45334 get: function() {
45335 var curve = new PresetCurve(options);
45336 Object.defineProperty(curves, name, {
45337 configurable: true,
45338 enumerable: true,
45339 value: curve
45340 });
45341 return curve;
45342 }
45343 });
45344 }
45345
45346 defineCurve('p192', {
45347 type: 'short',
45348 prime: 'p192',
45349 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
45350 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
45351 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
45352 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
45353 hash: hash.sha256,
45354 gRed: false,
45355 g: [
45356 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
45357 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
45358 ]
45359 });
45360
45361 defineCurve('p224', {
45362 type: 'short',
45363 prime: 'p224',
45364 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
45365 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
45366 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
45367 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
45368 hash: hash.sha256,
45369 gRed: false,
45370 g: [
45371 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
45372 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
45373 ]
45374 });
45375
45376 defineCurve('p256', {
45377 type: 'short',
45378 prime: null,
45379 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
45380 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
45381 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
45382 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
45383 hash: hash.sha256,
45384 gRed: false,
45385 g: [
45386 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
45387 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
45388 ]
45389 });
45390
45391 defineCurve('p384', {
45392 type: 'short',
45393 prime: null,
45394 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45395 'fffffffe ffffffff 00000000 00000000 ffffffff',
45396 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45397 'fffffffe ffffffff 00000000 00000000 fffffffc',
45398 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
45399 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
45400 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
45401 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
45402 hash: hash.sha384,
45403 gRed: false,
45404 g: [
45405 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
45406 '5502f25d bf55296c 3a545e38 72760ab7',
45407 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
45408 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
45409 ]
45410 });
45411
45412 defineCurve('p521', {
45413 type: 'short',
45414 prime: null,
45415 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45416 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45417 'ffffffff ffffffff ffffffff ffffffff ffffffff',
45418 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45419 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45420 'ffffffff ffffffff ffffffff ffffffff fffffffc',
45421 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
45422 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
45423 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
45424 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
45425 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
45426 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
45427 hash: hash.sha512,
45428 gRed: false,
45429 g: [
45430 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
45431 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
45432 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
45433 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
45434 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
45435 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
45436 ]
45437 });
45438
45439 defineCurve('curve25519', {
45440 type: 'mont',
45441 prime: 'p25519',
45442 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
45443 a: '76d06',
45444 b: '1',
45445 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
45446 hash: hash.sha256,
45447 gRed: false,
45448 g: [
45449 '9'
45450 ]
45451 });
45452
45453 defineCurve('ed25519', {
45454 type: 'edwards',
45455 prime: 'p25519',
45456 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
45457 a: '-1',
45458 c: '1',
45459 // -121665 * (121666^(-1)) (mod P)
45460 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
45461 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
45462 hash: hash.sha256,
45463 gRed: false,
45464 g: [
45465 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
45466
45467 // 4/5
45468 '6666666666666666666666666666666666666666666666666666666666666658'
45469 ]
45470 });
45471
45472 var pre;
45473 try {
45474 pre = require('./precomputed/secp256k1');
45475 } catch (e) {
45476 pre = undefined;
45477 }
45478
45479 defineCurve('secp256k1', {
45480 type: 'short',
45481 prime: 'k256',
45482 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
45483 a: '0',
45484 b: '7',
45485 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
45486 h: '1',
45487 hash: hash.sha256,
45488
45489 // Precomputed endomorphism
45490 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
45491 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
45492 basis: [
45493 {
45494 a: '3086d221a7d46bcde86c90e49284eb15',
45495 b: '-e4437ed6010e88286f547fa90abfe4c3'
45496 },
45497 {
45498 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
45499 b: '3086d221a7d46bcde86c90e49284eb15'
45500 }
45501 ],
45502
45503 gRed: false,
45504 g: [
45505 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
45506 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
45507 pre
45508 ]
45509 });
45510
45511 },{"../elliptic":97,"./precomputed/secp256k1":110,"hash.js":114}],104:[function(require,module,exports){
45512 'use strict';
45513
45514 var BN = require('bn.js');
45515 var HmacDRBG = require('hmac-drbg');
45516 var elliptic = require('../../elliptic');
45517 var utils = elliptic.utils;
45518 var assert = utils.assert;
45519
45520 var KeyPair = require('./key');
45521 var Signature = require('./signature');
45522
45523 function EC(options) {
45524 if (!(this instanceof EC))
45525 return new EC(options);
45526
45527 // Shortcut `elliptic.ec(curve-name)`
45528 if (typeof options === 'string') {
45529 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
45530
45531 options = elliptic.curves[options];
45532 }
45533
45534 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
45535 if (options instanceof elliptic.curves.PresetCurve)
45536 options = { curve: options };
45537
45538 this.curve = options.curve.curve;
45539 this.n = this.curve.n;
45540 this.nh = this.n.ushrn(1);
45541 this.g = this.curve.g;
45542
45543 // Point on curve
45544 this.g = options.curve.g;
45545 this.g.precompute(options.curve.n.bitLength() + 1);
45546
45547 // Hash for function for DRBG
45548 this.hash = options.hash || options.curve.hash;
45549 }
45550 module.exports = EC;
45551
45552 EC.prototype.keyPair = function keyPair(options) {
45553 return new KeyPair(this, options);
45554 };
45555
45556 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
45557 return KeyPair.fromPrivate(this, priv, enc);
45558 };
45559
45560 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
45561 return KeyPair.fromPublic(this, pub, enc);
45562 };
45563
45564 EC.prototype.genKeyPair = function genKeyPair(options) {
45565 if (!options)
45566 options = {};
45567
45568 // Instantiate Hmac_DRBG
45569 var drbg = new HmacDRBG({
45570 hash: this.hash,
45571 pers: options.pers,
45572 persEnc: options.persEnc || 'utf8',
45573 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
45574 entropyEnc: options.entropy && options.entropyEnc || 'utf8',
45575 nonce: this.n.toArray()
45576 });
45577
45578 var bytes = this.n.byteLength();
45579 var ns2 = this.n.sub(new BN(2));
45580 do {
45581 var priv = new BN(drbg.generate(bytes));
45582 if (priv.cmp(ns2) > 0)
45583 continue;
45584
45585 priv.iaddn(1);
45586 return this.keyFromPrivate(priv);
45587 } while (true);
45588 };
45589
45590 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
45591 var delta = msg.byteLength() * 8 - this.n.bitLength();
45592 if (delta > 0)
45593 msg = msg.ushrn(delta);
45594 if (!truncOnly && msg.cmp(this.n) >= 0)
45595 return msg.sub(this.n);
45596 else
45597 return msg;
45598 };
45599
45600 EC.prototype.sign = function sign(msg, key, enc, options) {
45601 if (typeof enc === 'object') {
45602 options = enc;
45603 enc = null;
45604 }
45605 if (!options)
45606 options = {};
45607
45608 key = this.keyFromPrivate(key, enc);
45609 msg = this._truncateToN(new BN(msg, 16));
45610
45611 // Zero-extend key to provide enough entropy
45612 var bytes = this.n.byteLength();
45613 var bkey = key.getPrivate().toArray('be', bytes);
45614
45615 // Zero-extend nonce to have the same byte size as N
45616 var nonce = msg.toArray('be', bytes);
45617
45618 // Instantiate Hmac_DRBG
45619 var drbg = new HmacDRBG({
45620 hash: this.hash,
45621 entropy: bkey,
45622 nonce: nonce,
45623 pers: options.pers,
45624 persEnc: options.persEnc || 'utf8'
45625 });
45626
45627 // Number of bytes to generate
45628 var ns1 = this.n.sub(new BN(1));
45629
45630 for (var iter = 0; true; iter++) {
45631 var k = options.k ?
45632 options.k(iter) :
45633 new BN(drbg.generate(this.n.byteLength()));
45634 k = this._truncateToN(k, true);
45635 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
45636 continue;
45637
45638 var kp = this.g.mul(k);
45639 if (kp.isInfinity())
45640 continue;
45641
45642 var kpX = kp.getX();
45643 var r = kpX.umod(this.n);
45644 if (r.cmpn(0) === 0)
45645 continue;
45646
45647 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
45648 s = s.umod(this.n);
45649 if (s.cmpn(0) === 0)
45650 continue;
45651
45652 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
45653 (kpX.cmp(r) !== 0 ? 2 : 0);
45654
45655 // Use complement of `s`, if it is > `n / 2`
45656 if (options.canonical && s.cmp(this.nh) > 0) {
45657 s = this.n.sub(s);
45658 recoveryParam ^= 1;
45659 }
45660
45661 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
45662 }
45663 };
45664
45665 EC.prototype.verify = function verify(msg, signature, key, enc) {
45666 msg = this._truncateToN(new BN(msg, 16));
45667 key = this.keyFromPublic(key, enc);
45668 signature = new Signature(signature, 'hex');
45669
45670 // Perform primitive values validation
45671 var r = signature.r;
45672 var s = signature.s;
45673 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
45674 return false;
45675 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
45676 return false;
45677
45678 // Validate signature
45679 var sinv = s.invm(this.n);
45680 var u1 = sinv.mul(msg).umod(this.n);
45681 var u2 = sinv.mul(r).umod(this.n);
45682
45683 if (!this.curve._maxwellTrick) {
45684 var p = this.g.mulAdd(u1, key.getPublic(), u2);
45685 if (p.isInfinity())
45686 return false;
45687
45688 return p.getX().umod(this.n).cmp(r) === 0;
45689 }
45690
45691 // NOTE: Greg Maxwell's trick, inspired by:
45692 // https://git.io/vad3K
45693
45694 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
45695 if (p.isInfinity())
45696 return false;
45697
45698 // Compare `p.x` of Jacobian point with `r`,
45699 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
45700 // inverse of `p.z^2`
45701 return p.eqXToP(r);
45702 };
45703
45704 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
45705 assert((3 & j) === j, 'The recovery param is more than two bits');
45706 signature = new Signature(signature, enc);
45707
45708 var n = this.n;
45709 var e = new BN(msg);
45710 var r = signature.r;
45711 var s = signature.s;
45712
45713 // A set LSB signifies that the y-coordinate is odd
45714 var isYOdd = j & 1;
45715 var isSecondKey = j >> 1;
45716 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
45717 throw new Error('Unable to find sencond key candinate');
45718
45719 // 1.1. Let x = r + jn.
45720 if (isSecondKey)
45721 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
45722 else
45723 r = this.curve.pointFromX(r, isYOdd);
45724
45725 var rInv = signature.r.invm(n);
45726 var s1 = n.sub(e).mul(rInv).umod(n);
45727 var s2 = s.mul(rInv).umod(n);
45728
45729 // 1.6.1 Compute Q = r^-1 (sR - eG)
45730 // Q = r^-1 (sR + -eG)
45731 return this.g.mulAdd(s1, r, s2);
45732 };
45733
45734 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
45735 signature = new Signature(signature, enc);
45736 if (signature.recoveryParam !== null)
45737 return signature.recoveryParam;
45738
45739 for (var i = 0; i < 4; i++) {
45740 var Qprime;
45741 try {
45742 Qprime = this.recoverPubKey(e, signature, i);
45743 } catch (e) {
45744 continue;
45745 }
45746
45747 if (Qprime.eq(Q))
45748 return i;
45749 }
45750 throw new Error('Unable to find valid recovery factor');
45751 };
45752
45753 },{"../../elliptic":97,"./key":105,"./signature":106,"bn.js":81,"hmac-drbg":120}],105:[function(require,module,exports){
45754 'use strict';
45755
45756 var BN = require('bn.js');
45757 var elliptic = require('../../elliptic');
45758 var utils = elliptic.utils;
45759 var assert = utils.assert;
45760
45761 function KeyPair(ec, options) {
45762 this.ec = ec;
45763 this.priv = null;
45764 this.pub = null;
45765
45766 // KeyPair(ec, { priv: ..., pub: ... })
45767 if (options.priv)
45768 this._importPrivate(options.priv, options.privEnc);
45769 if (options.pub)
45770 this._importPublic(options.pub, options.pubEnc);
45771 }
45772 module.exports = KeyPair;
45773
45774 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
45775 if (pub instanceof KeyPair)
45776 return pub;
45777
45778 return new KeyPair(ec, {
45779 pub: pub,
45780 pubEnc: enc
45781 });
45782 };
45783
45784 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
45785 if (priv instanceof KeyPair)
45786 return priv;
45787
45788 return new KeyPair(ec, {
45789 priv: priv,
45790 privEnc: enc
45791 });
45792 };
45793
45794 KeyPair.prototype.validate = function validate() {
45795 var pub = this.getPublic();
45796
45797 if (pub.isInfinity())
45798 return { result: false, reason: 'Invalid public key' };
45799 if (!pub.validate())
45800 return { result: false, reason: 'Public key is not a point' };
45801 if (!pub.mul(this.ec.curve.n).isInfinity())
45802 return { result: false, reason: 'Public key * N != O' };
45803
45804 return { result: true, reason: null };
45805 };
45806
45807 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
45808 // compact is optional argument
45809 if (typeof compact === 'string') {
45810 enc = compact;
45811 compact = null;
45812 }
45813
45814 if (!this.pub)
45815 this.pub = this.ec.g.mul(this.priv);
45816
45817 if (!enc)
45818 return this.pub;
45819
45820 return this.pub.encode(enc, compact);
45821 };
45822
45823 KeyPair.prototype.getPrivate = function getPrivate(enc) {
45824 if (enc === 'hex')
45825 return this.priv.toString(16, 2);
45826 else
45827 return this.priv;
45828 };
45829
45830 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
45831 this.priv = new BN(key, enc || 16);
45832
45833 // Ensure that the priv won't be bigger than n, otherwise we may fail
45834 // in fixed multiplication method
45835 this.priv = this.priv.umod(this.ec.curve.n);
45836 };
45837
45838 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
45839 if (key.x || key.y) {
45840 // Montgomery points only have an `x` coordinate.
45841 // Weierstrass/Edwards points on the other hand have both `x` and
45842 // `y` coordinates.
45843 if (this.ec.curve.type === 'mont') {
45844 assert(key.x, 'Need x coordinate');
45845 } else if (this.ec.curve.type === 'short' ||
45846 this.ec.curve.type === 'edwards') {
45847 assert(key.x && key.y, 'Need both x and y coordinate');
45848 }
45849 this.pub = this.ec.curve.point(key.x, key.y);
45850 return;
45851 }
45852 this.pub = this.ec.curve.decodePoint(key, enc);
45853 };
45854
45855 // ECDH
45856 KeyPair.prototype.derive = function derive(pub) {
45857 return pub.mul(this.priv).getX();
45858 };
45859
45860 // ECDSA
45861 KeyPair.prototype.sign = function sign(msg, enc, options) {
45862 return this.ec.sign(msg, this, enc, options);
45863 };
45864
45865 KeyPair.prototype.verify = function verify(msg, signature) {
45866 return this.ec.verify(msg, signature, this);
45867 };
45868
45869 KeyPair.prototype.inspect = function inspect() {
45870 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
45871 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
45872 };
45873
45874 },{"../../elliptic":97,"bn.js":81}],106:[function(require,module,exports){
45875 'use strict';
45876
45877 var BN = require('bn.js');
45878
45879 var elliptic = require('../../elliptic');
45880 var utils = elliptic.utils;
45881 var assert = utils.assert;
45882
45883 function Signature(options, enc) {
45884 if (options instanceof Signature)
45885 return options;
45886
45887 if (this._importDER(options, enc))
45888 return;
45889
45890 assert(options.r && options.s, 'Signature without r or s');
45891 this.r = new BN(options.r, 16);
45892 this.s = new BN(options.s, 16);
45893 if (options.recoveryParam === undefined)
45894 this.recoveryParam = null;
45895 else
45896 this.recoveryParam = options.recoveryParam;
45897 }
45898 module.exports = Signature;
45899
45900 function Position() {
45901 this.place = 0;
45902 }
45903
45904 function getLength(buf, p) {
45905 var initial = buf[p.place++];
45906 if (!(initial & 0x80)) {
45907 return initial;
45908 }
45909 var octetLen = initial & 0xf;
45910 var val = 0;
45911 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
45912 val <<= 8;
45913 val |= buf[off];
45914 }
45915 p.place = off;
45916 return val;
45917 }
45918
45919 function rmPadding(buf) {
45920 var i = 0;
45921 var len = buf.length - 1;
45922 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
45923 i++;
45924 }
45925 if (i === 0) {
45926 return buf;
45927 }
45928 return buf.slice(i);
45929 }
45930
45931 Signature.prototype._importDER = function _importDER(data, enc) {
45932 data = utils.toArray(data, enc);
45933 var p = new Position();
45934 if (data[p.place++] !== 0x30) {
45935 return false;
45936 }
45937 var len = getLength(data, p);
45938 if ((len + p.place) !== data.length) {
45939 return false;
45940 }
45941 if (data[p.place++] !== 0x02) {
45942 return false;
45943 }
45944 var rlen = getLength(data, p);
45945 var r = data.slice(p.place, rlen + p.place);
45946 p.place += rlen;
45947 if (data[p.place++] !== 0x02) {
45948 return false;
45949 }
45950 var slen = getLength(data, p);
45951 if (data.length !== slen + p.place) {
45952 return false;
45953 }
45954 var s = data.slice(p.place, slen + p.place);
45955 if (r[0] === 0 && (r[1] & 0x80)) {
45956 r = r.slice(1);
45957 }
45958 if (s[0] === 0 && (s[1] & 0x80)) {
45959 s = s.slice(1);
45960 }
45961
45962 this.r = new BN(r);
45963 this.s = new BN(s);
45964 this.recoveryParam = null;
45965
45966 return true;
45967 };
45968
45969 function constructLength(arr, len) {
45970 if (len < 0x80) {
45971 arr.push(len);
45972 return;
45973 }
45974 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
45975 arr.push(octets | 0x80);
45976 while (--octets) {
45977 arr.push((len >>> (octets << 3)) & 0xff);
45978 }
45979 arr.push(len);
45980 }
45981
45982 Signature.prototype.toDER = function toDER(enc) {
45983 var r = this.r.toArray();
45984 var s = this.s.toArray();
45985
45986 // Pad values
45987 if (r[0] & 0x80)
45988 r = [ 0 ].concat(r);
45989 // Pad values
45990 if (s[0] & 0x80)
45991 s = [ 0 ].concat(s);
45992
45993 r = rmPadding(r);
45994 s = rmPadding(s);
45995
45996 while (!s[0] && !(s[1] & 0x80)) {
45997 s = s.slice(1);
45998 }
45999 var arr = [ 0x02 ];
46000 constructLength(arr, r.length);
46001 arr = arr.concat(r);
46002 arr.push(0x02);
46003 constructLength(arr, s.length);
46004 var backHalf = arr.concat(s);
46005 var res = [ 0x30 ];
46006 constructLength(res, backHalf.length);
46007 res = res.concat(backHalf);
46008 return utils.encode(res, enc);
46009 };
46010
46011 },{"../../elliptic":97,"bn.js":81}],107:[function(require,module,exports){
46012 'use strict';
46013
46014 var hash = require('hash.js');
46015 var elliptic = require('../../elliptic');
46016 var utils = elliptic.utils;
46017 var assert = utils.assert;
46018 var parseBytes = utils.parseBytes;
46019 var KeyPair = require('./key');
46020 var Signature = require('./signature');
46021
46022 function EDDSA(curve) {
46023 assert(curve === 'ed25519', 'only tested with ed25519 so far');
46024
46025 if (!(this instanceof EDDSA))
46026 return new EDDSA(curve);
46027
46028 var curve = elliptic.curves[curve].curve;
46029 this.curve = curve;
46030 this.g = curve.g;
46031 this.g.precompute(curve.n.bitLength() + 1);
46032
46033 this.pointClass = curve.point().constructor;
46034 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
46035 this.hash = hash.sha512;
46036 }
46037
46038 module.exports = EDDSA;
46039
46040 /**
46041 * @param {Array|String} message - message bytes
46042 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
46043 * @returns {Signature} - signature
46044 */
46045 EDDSA.prototype.sign = function sign(message, secret) {
46046 message = parseBytes(message);
46047 var key = this.keyFromSecret(secret);
46048 var r = this.hashInt(key.messagePrefix(), message);
46049 var R = this.g.mul(r);
46050 var Rencoded = this.encodePoint(R);
46051 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
46052 .mul(key.priv());
46053 var S = r.add(s_).umod(this.curve.n);
46054 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
46055 };
46056
46057 /**
46058 * @param {Array} message - message bytes
46059 * @param {Array|String|Signature} sig - sig bytes
46060 * @param {Array|String|Point|KeyPair} pub - public key
46061 * @returns {Boolean} - true if public key matches sig of message
46062 */
46063 EDDSA.prototype.verify = function verify(message, sig, pub) {
46064 message = parseBytes(message);
46065 sig = this.makeSignature(sig);
46066 var key = this.keyFromPublic(pub);
46067 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
46068 var SG = this.g.mul(sig.S());
46069 var RplusAh = sig.R().add(key.pub().mul(h));
46070 return RplusAh.eq(SG);
46071 };
46072
46073 EDDSA.prototype.hashInt = function hashInt() {
46074 var hash = this.hash();
46075 for (var i = 0; i < arguments.length; i++)
46076 hash.update(arguments[i]);
46077 return utils.intFromLE(hash.digest()).umod(this.curve.n);
46078 };
46079
46080 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
46081 return KeyPair.fromPublic(this, pub);
46082 };
46083
46084 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
46085 return KeyPair.fromSecret(this, secret);
46086 };
46087
46088 EDDSA.prototype.makeSignature = function makeSignature(sig) {
46089 if (sig instanceof Signature)
46090 return sig;
46091 return new Signature(this, sig);
46092 };
46093
46094 /**
46095 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
46096 *
46097 * EDDSA defines methods for encoding and decoding points and integers. These are
46098 * helper convenience methods, that pass along to utility functions implied
46099 * parameters.
46100 *
46101 */
46102 EDDSA.prototype.encodePoint = function encodePoint(point) {
46103 var enc = point.getY().toArray('le', this.encodingLength);
46104 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
46105 return enc;
46106 };
46107
46108 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
46109 bytes = utils.parseBytes(bytes);
46110
46111 var lastIx = bytes.length - 1;
46112 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
46113 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
46114
46115 var y = utils.intFromLE(normed);
46116 return this.curve.pointFromY(y, xIsOdd);
46117 };
46118
46119 EDDSA.prototype.encodeInt = function encodeInt(num) {
46120 return num.toArray('le', this.encodingLength);
46121 };
46122
46123 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
46124 return utils.intFromLE(bytes);
46125 };
46126
46127 EDDSA.prototype.isPoint = function isPoint(val) {
46128 return val instanceof this.pointClass;
46129 };
46130
46131 },{"../../elliptic":97,"./key":108,"./signature":109,"hash.js":114}],108:[function(require,module,exports){
46132 'use strict';
46133
46134 var elliptic = require('../../elliptic');
46135 var utils = elliptic.utils;
46136 var assert = utils.assert;
46137 var parseBytes = utils.parseBytes;
46138 var cachedProperty = utils.cachedProperty;
46139
46140 /**
46141 * @param {EDDSA} eddsa - instance
46142 * @param {Object} params - public/private key parameters
46143 *
46144 * @param {Array<Byte>} [params.secret] - secret seed bytes
46145 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
46146 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
46147 *
46148 */
46149 function KeyPair(eddsa, params) {
46150 this.eddsa = eddsa;
46151 this._secret = parseBytes(params.secret);
46152 if (eddsa.isPoint(params.pub))
46153 this._pub = params.pub;
46154 else
46155 this._pubBytes = parseBytes(params.pub);
46156 }
46157
46158 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
46159 if (pub instanceof KeyPair)
46160 return pub;
46161 return new KeyPair(eddsa, { pub: pub });
46162 };
46163
46164 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
46165 if (secret instanceof KeyPair)
46166 return secret;
46167 return new KeyPair(eddsa, { secret: secret });
46168 };
46169
46170 KeyPair.prototype.secret = function secret() {
46171 return this._secret;
46172 };
46173
46174 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
46175 return this.eddsa.encodePoint(this.pub());
46176 });
46177
46178 cachedProperty(KeyPair, 'pub', function pub() {
46179 if (this._pubBytes)
46180 return this.eddsa.decodePoint(this._pubBytes);
46181 return this.eddsa.g.mul(this.priv());
46182 });
46183
46184 cachedProperty(KeyPair, 'privBytes', function privBytes() {
46185 var eddsa = this.eddsa;
46186 var hash = this.hash();
46187 var lastIx = eddsa.encodingLength - 1;
46188
46189 var a = hash.slice(0, eddsa.encodingLength);
46190 a[0] &= 248;
46191 a[lastIx] &= 127;
46192 a[lastIx] |= 64;
46193
46194 return a;
46195 });
46196
46197 cachedProperty(KeyPair, 'priv', function priv() {
46198 return this.eddsa.decodeInt(this.privBytes());
46199 });
46200
46201 cachedProperty(KeyPair, 'hash', function hash() {
46202 return this.eddsa.hash().update(this.secret()).digest();
46203 });
46204
46205 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
46206 return this.hash().slice(this.eddsa.encodingLength);
46207 });
46208
46209 KeyPair.prototype.sign = function sign(message) {
46210 assert(this._secret, 'KeyPair can only verify');
46211 return this.eddsa.sign(message, this);
46212 };
46213
46214 KeyPair.prototype.verify = function verify(message, sig) {
46215 return this.eddsa.verify(message, sig, this);
46216 };
46217
46218 KeyPair.prototype.getSecret = function getSecret(enc) {
46219 assert(this._secret, 'KeyPair is public only');
46220 return utils.encode(this.secret(), enc);
46221 };
46222
46223 KeyPair.prototype.getPublic = function getPublic(enc) {
46224 return utils.encode(this.pubBytes(), enc);
46225 };
46226
46227 module.exports = KeyPair;
46228
46229 },{"../../elliptic":97}],109:[function(require,module,exports){
46230 'use strict';
46231
46232 var BN = require('bn.js');
46233 var elliptic = require('../../elliptic');
46234 var utils = elliptic.utils;
46235 var assert = utils.assert;
46236 var cachedProperty = utils.cachedProperty;
46237 var parseBytes = utils.parseBytes;
46238
46239 /**
46240 * @param {EDDSA} eddsa - eddsa instance
46241 * @param {Array<Bytes>|Object} sig -
46242 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
46243 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
46244 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
46245 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
46246 */
46247 function Signature(eddsa, sig) {
46248 this.eddsa = eddsa;
46249
46250 if (typeof sig !== 'object')
46251 sig = parseBytes(sig);
46252
46253 if (Array.isArray(sig)) {
46254 sig = {
46255 R: sig.slice(0, eddsa.encodingLength),
46256 S: sig.slice(eddsa.encodingLength)
46257 };
46258 }
46259
46260 assert(sig.R && sig.S, 'Signature without R or S');
46261
46262 if (eddsa.isPoint(sig.R))
46263 this._R = sig.R;
46264 if (sig.S instanceof BN)
46265 this._S = sig.S;
46266
46267 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
46268 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
46269 }
46270
46271 cachedProperty(Signature, 'S', function S() {
46272 return this.eddsa.decodeInt(this.Sencoded());
46273 });
46274
46275 cachedProperty(Signature, 'R', function R() {
46276 return this.eddsa.decodePoint(this.Rencoded());
46277 });
46278
46279 cachedProperty(Signature, 'Rencoded', function Rencoded() {
46280 return this.eddsa.encodePoint(this.R());
46281 });
46282
46283 cachedProperty(Signature, 'Sencoded', function Sencoded() {
46284 return this.eddsa.encodeInt(this.S());
46285 });
46286
46287 Signature.prototype.toBytes = function toBytes() {
46288 return this.Rencoded().concat(this.Sencoded());
46289 };
46290
46291 Signature.prototype.toHex = function toHex() {
46292 return utils.encode(this.toBytes(), 'hex').toUpperCase();
46293 };
46294
46295 module.exports = Signature;
46296
46297 },{"../../elliptic":97,"bn.js":81}],110:[function(require,module,exports){
46298 module.exports = {
46299 doubles: {
46300 step: 4,
46301 points: [
46302 [
46303 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
46304 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
46305 ],
46306 [
46307 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
46308 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
46309 ],
46310 [
46311 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
46312 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
46313 ],
46314 [
46315 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
46316 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
46317 ],
46318 [
46319 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
46320 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
46321 ],
46322 [
46323 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
46324 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
46325 ],
46326 [
46327 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
46328 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
46329 ],
46330 [
46331 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
46332 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
46333 ],
46334 [
46335 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
46336 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
46337 ],
46338 [
46339 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
46340 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
46341 ],
46342 [
46343 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
46344 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
46345 ],
46346 [
46347 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
46348 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
46349 ],
46350 [
46351 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
46352 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
46353 ],
46354 [
46355 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
46356 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
46357 ],
46358 [
46359 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
46360 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
46361 ],
46362 [
46363 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
46364 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
46365 ],
46366 [
46367 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
46368 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
46369 ],
46370 [
46371 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
46372 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
46373 ],
46374 [
46375 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
46376 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
46377 ],
46378 [
46379 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
46380 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
46381 ],
46382 [
46383 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
46384 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
46385 ],
46386 [
46387 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
46388 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
46389 ],
46390 [
46391 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
46392 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
46393 ],
46394 [
46395 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
46396 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
46397 ],
46398 [
46399 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
46400 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
46401 ],
46402 [
46403 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
46404 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
46405 ],
46406 [
46407 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
46408 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
46409 ],
46410 [
46411 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
46412 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
46413 ],
46414 [
46415 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
46416 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
46417 ],
46418 [
46419 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
46420 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
46421 ],
46422 [
46423 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
46424 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
46425 ],
46426 [
46427 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
46428 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
46429 ],
46430 [
46431 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
46432 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
46433 ],
46434 [
46435 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
46436 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
46437 ],
46438 [
46439 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
46440 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
46441 ],
46442 [
46443 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
46444 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
46445 ],
46446 [
46447 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
46448 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
46449 ],
46450 [
46451 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
46452 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
46453 ],
46454 [
46455 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
46456 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
46457 ],
46458 [
46459 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
46460 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
46461 ],
46462 [
46463 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
46464 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
46465 ],
46466 [
46467 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
46468 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
46469 ],
46470 [
46471 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
46472 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
46473 ],
46474 [
46475 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
46476 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
46477 ],
46478 [
46479 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
46480 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
46481 ],
46482 [
46483 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
46484 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
46485 ],
46486 [
46487 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
46488 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
46489 ],
46490 [
46491 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
46492 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
46493 ],
46494 [
46495 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
46496 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
46497 ],
46498 [
46499 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
46500 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
46501 ],
46502 [
46503 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
46504 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
46505 ],
46506 [
46507 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
46508 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
46509 ],
46510 [
46511 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
46512 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
46513 ],
46514 [
46515 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
46516 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
46517 ],
46518 [
46519 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
46520 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
46521 ],
46522 [
46523 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
46524 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
46525 ],
46526 [
46527 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
46528 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
46529 ],
46530 [
46531 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
46532 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
46533 ],
46534 [
46535 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
46536 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
46537 ],
46538 [
46539 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
46540 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
46541 ],
46542 [
46543 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
46544 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
46545 ],
46546 [
46547 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
46548 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
46549 ],
46550 [
46551 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
46552 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
46553 ],
46554 [
46555 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
46556 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
46557 ],
46558 [
46559 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
46560 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
46561 ]
46562 ]
46563 },
46564 naf: {
46565 wnd: 7,
46566 points: [
46567 [
46568 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
46569 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
46570 ],
46571 [
46572 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
46573 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
46574 ],
46575 [
46576 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
46577 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
46578 ],
46579 [
46580 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
46581 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
46582 ],
46583 [
46584 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
46585 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
46586 ],
46587 [
46588 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
46589 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
46590 ],
46591 [
46592 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
46593 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
46594 ],
46595 [
46596 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
46597 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
46598 ],
46599 [
46600 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
46601 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
46602 ],
46603 [
46604 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
46605 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
46606 ],
46607 [
46608 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
46609 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
46610 ],
46611 [
46612 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
46613 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
46614 ],
46615 [
46616 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
46617 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
46618 ],
46619 [
46620 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
46621 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
46622 ],
46623 [
46624 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
46625 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
46626 ],
46627 [
46628 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
46629 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
46630 ],
46631 [
46632 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
46633 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
46634 ],
46635 [
46636 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
46637 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
46638 ],
46639 [
46640 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
46641 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
46642 ],
46643 [
46644 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
46645 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
46646 ],
46647 [
46648 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
46649 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
46650 ],
46651 [
46652 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
46653 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
46654 ],
46655 [
46656 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
46657 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
46658 ],
46659 [
46660 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
46661 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
46662 ],
46663 [
46664 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
46665 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
46666 ],
46667 [
46668 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
46669 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
46670 ],
46671 [
46672 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
46673 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
46674 ],
46675 [
46676 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
46677 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
46678 ],
46679 [
46680 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
46681 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
46682 ],
46683 [
46684 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
46685 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
46686 ],
46687 [
46688 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
46689 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
46690 ],
46691 [
46692 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
46693 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
46694 ],
46695 [
46696 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
46697 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
46698 ],
46699 [
46700 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
46701 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
46702 ],
46703 [
46704 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
46705 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
46706 ],
46707 [
46708 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
46709 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
46710 ],
46711 [
46712 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
46713 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
46714 ],
46715 [
46716 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
46717 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
46718 ],
46719 [
46720 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
46721 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
46722 ],
46723 [
46724 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
46725 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
46726 ],
46727 [
46728 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
46729 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
46730 ],
46731 [
46732 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
46733 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
46734 ],
46735 [
46736 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
46737 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
46738 ],
46739 [
46740 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
46741 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
46742 ],
46743 [
46744 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
46745 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
46746 ],
46747 [
46748 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
46749 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
46750 ],
46751 [
46752 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
46753 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
46754 ],
46755 [
46756 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
46757 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
46758 ],
46759 [
46760 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
46761 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
46762 ],
46763 [
46764 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
46765 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
46766 ],
46767 [
46768 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
46769 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
46770 ],
46771 [
46772 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
46773 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
46774 ],
46775 [
46776 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
46777 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
46778 ],
46779 [
46780 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
46781 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
46782 ],
46783 [
46784 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
46785 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
46786 ],
46787 [
46788 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
46789 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
46790 ],
46791 [
46792 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
46793 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
46794 ],
46795 [
46796 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
46797 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
46798 ],
46799 [
46800 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
46801 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
46802 ],
46803 [
46804 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
46805 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
46806 ],
46807 [
46808 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
46809 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
46810 ],
46811 [
46812 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
46813 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
46814 ],
46815 [
46816 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
46817 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
46818 ],
46819 [
46820 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
46821 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
46822 ],
46823 [
46824 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
46825 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
46826 ],
46827 [
46828 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
46829 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
46830 ],
46831 [
46832 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
46833 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
46834 ],
46835 [
46836 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
46837 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
46838 ],
46839 [
46840 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
46841 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
46842 ],
46843 [
46844 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
46845 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
46846 ],
46847 [
46848 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
46849 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
46850 ],
46851 [
46852 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
46853 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
46854 ],
46855 [
46856 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
46857 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
46858 ],
46859 [
46860 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
46861 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
46862 ],
46863 [
46864 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
46865 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
46866 ],
46867 [
46868 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
46869 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
46870 ],
46871 [
46872 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
46873 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
46874 ],
46875 [
46876 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
46877 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
46878 ],
46879 [
46880 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
46881 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
46882 ],
46883 [
46884 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
46885 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
46886 ],
46887 [
46888 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
46889 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
46890 ],
46891 [
46892 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
46893 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
46894 ],
46895 [
46896 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
46897 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
46898 ],
46899 [
46900 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
46901 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
46902 ],
46903 [
46904 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
46905 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
46906 ],
46907 [
46908 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
46909 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
46910 ],
46911 [
46912 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
46913 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
46914 ],
46915 [
46916 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
46917 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
46918 ],
46919 [
46920 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
46921 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
46922 ],
46923 [
46924 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
46925 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
46926 ],
46927 [
46928 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
46929 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
46930 ],
46931 [
46932 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
46933 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
46934 ],
46935 [
46936 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
46937 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
46938 ],
46939 [
46940 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
46941 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
46942 ],
46943 [
46944 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
46945 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
46946 ],
46947 [
46948 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
46949 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
46950 ],
46951 [
46952 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
46953 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
46954 ],
46955 [
46956 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
46957 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
46958 ],
46959 [
46960 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
46961 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
46962 ],
46963 [
46964 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
46965 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
46966 ],
46967 [
46968 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
46969 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
46970 ],
46971 [
46972 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
46973 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
46974 ],
46975 [
46976 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
46977 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
46978 ],
46979 [
46980 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
46981 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
46982 ],
46983 [
46984 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
46985 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
46986 ],
46987 [
46988 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
46989 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
46990 ],
46991 [
46992 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
46993 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
46994 ],
46995 [
46996 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
46997 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
46998 ],
46999 [
47000 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
47001 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
47002 ],
47003 [
47004 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
47005 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
47006 ],
47007 [
47008 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
47009 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
47010 ],
47011 [
47012 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
47013 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
47014 ],
47015 [
47016 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
47017 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
47018 ],
47019 [
47020 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
47021 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
47022 ],
47023 [
47024 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
47025 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
47026 ],
47027 [
47028 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
47029 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
47030 ],
47031 [
47032 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
47033 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
47034 ],
47035 [
47036 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
47037 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
47038 ],
47039 [
47040 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
47041 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
47042 ],
47043 [
47044 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
47045 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
47046 ],
47047 [
47048 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
47049 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
47050 ],
47051 [
47052 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
47053 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
47054 ],
47055 [
47056 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
47057 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
47058 ],
47059 [
47060 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
47061 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
47062 ],
47063 [
47064 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
47065 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
47066 ],
47067 [
47068 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
47069 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
47070 ],
47071 [
47072 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
47073 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
47074 ]
47075 ]
47076 }
47077 };
47078
47079 },{}],111:[function(require,module,exports){
47080 'use strict';
47081
47082 var utils = exports;
47083 var BN = require('bn.js');
47084 var minAssert = require('minimalistic-assert');
47085 var minUtils = require('minimalistic-crypto-utils');
47086
47087 utils.assert = minAssert;
47088 utils.toArray = minUtils.toArray;
47089 utils.zero2 = minUtils.zero2;
47090 utils.toHex = minUtils.toHex;
47091 utils.encode = minUtils.encode;
47092
47093 // Represent num in a w-NAF form
47094 function getNAF(num, w) {
47095 var naf = [];
47096 var ws = 1 << (w + 1);
47097 var k = num.clone();
47098 while (k.cmpn(1) >= 0) {
47099 var z;
47100 if (k.isOdd()) {
47101 var mod = k.andln(ws - 1);
47102 if (mod > (ws >> 1) - 1)
47103 z = (ws >> 1) - mod;
47104 else
47105 z = mod;
47106 k.isubn(z);
47107 } else {
47108 z = 0;
47109 }
47110 naf.push(z);
47111
47112 // Optimization, shift by word if possible
47113 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
47114 for (var i = 1; i < shift; i++)
47115 naf.push(0);
47116 k.iushrn(shift);
47117 }
47118
47119 return naf;
47120 }
47121 utils.getNAF = getNAF;
47122
47123 // Represent k1, k2 in a Joint Sparse Form
47124 function getJSF(k1, k2) {
47125 var jsf = [
47126 [],
47127 []
47128 ];
47129
47130 k1 = k1.clone();
47131 k2 = k2.clone();
47132 var d1 = 0;
47133 var d2 = 0;
47134 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
47135
47136 // First phase
47137 var m14 = (k1.andln(3) + d1) & 3;
47138 var m24 = (k2.andln(3) + d2) & 3;
47139 if (m14 === 3)
47140 m14 = -1;
47141 if (m24 === 3)
47142 m24 = -1;
47143 var u1;
47144 if ((m14 & 1) === 0) {
47145 u1 = 0;
47146 } else {
47147 var m8 = (k1.andln(7) + d1) & 7;
47148 if ((m8 === 3 || m8 === 5) && m24 === 2)
47149 u1 = -m14;
47150 else
47151 u1 = m14;
47152 }
47153 jsf[0].push(u1);
47154
47155 var u2;
47156 if ((m24 & 1) === 0) {
47157 u2 = 0;
47158 } else {
47159 var m8 = (k2.andln(7) + d2) & 7;
47160 if ((m8 === 3 || m8 === 5) && m14 === 2)
47161 u2 = -m24;
47162 else
47163 u2 = m24;
47164 }
47165 jsf[1].push(u2);
47166
47167 // Second phase
47168 if (2 * d1 === u1 + 1)
47169 d1 = 1 - d1;
47170 if (2 * d2 === u2 + 1)
47171 d2 = 1 - d2;
47172 k1.iushrn(1);
47173 k2.iushrn(1);
47174 }
47175
47176 return jsf;
47177 }
47178 utils.getJSF = getJSF;
47179
47180 function cachedProperty(obj, name, computer) {
47181 var key = '_' + name;
47182 obj.prototype[name] = function cachedProperty() {
47183 return this[key] !== undefined ? this[key] :
47184 this[key] = computer.call(this);
47185 };
47186 }
47187 utils.cachedProperty = cachedProperty;
47188
47189 function parseBytes(bytes) {
47190 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
47191 bytes;
47192 }
47193 utils.parseBytes = parseBytes;
47194
47195 function intFromLE(bytes) {
47196 return new BN(bytes, 'hex', 'le');
47197 }
47198 utils.intFromLE = intFromLE;
47199
47200
47201 },{"bn.js":81,"minimalistic-assert":123,"minimalistic-crypto-utils":124}],112:[function(require,module,exports){
47202 module.exports={
47203 "_args": [
47204 [
47205 "elliptic",
47206 "/home/ian/git/bitcoin/bitcoinjs-lib-browser"
47207 ]
47208 ],
47209 "_from": "elliptic@latest",
47210 "_id": "elliptic@6.4.0",
47211 "_inCache": true,
47212 "_installable": true,
47213 "_location": "/elliptic",
47214 "_nodeVersion": "7.0.0",
47215 "_npmOperationalInternal": {
47216 "host": "packages-18-east.internal.npmjs.com",
47217 "tmp": "tmp/elliptic-6.4.0.tgz_1487798866428_0.30510620190761983"
47218 },
47219 "_npmUser": {
47220 "email": "fedor@indutny.com",
47221 "name": "indutny"
47222 },
47223 "_npmVersion": "3.10.8",
47224 "_phantomChildren": {},
47225 "_requested": {
47226 "name": "elliptic",
47227 "raw": "elliptic",
47228 "rawSpec": "",
47229 "scope": null,
47230 "spec": "latest",
47231 "type": "tag"
47232 },
47233 "_requiredBy": [
47234 "#USER"
47235 ],
47236 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
47237 "_shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
47238 "_shrinkwrap": null,
47239 "_spec": "elliptic",
47240 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser",
47241 "author": {
47242 "email": "fedor@indutny.com",
47243 "name": "Fedor Indutny"
47244 },
47245 "bugs": {
47246 "url": "https://github.com/indutny/elliptic/issues"
47247 },
47248 "dependencies": {
47249 "bn.js": "^4.4.0",
47250 "brorand": "^1.0.1",
47251 "hash.js": "^1.0.0",
47252 "hmac-drbg": "^1.0.0",
47253 "inherits": "^2.0.1",
47254 "minimalistic-assert": "^1.0.0",
47255 "minimalistic-crypto-utils": "^1.0.0"
47256 },
47257 "description": "EC cryptography",
47258 "devDependencies": {
47259 "brfs": "^1.4.3",
47260 "coveralls": "^2.11.3",
47261 "grunt": "^0.4.5",
47262 "grunt-browserify": "^5.0.0",
47263 "grunt-cli": "^1.2.0",
47264 "grunt-contrib-connect": "^1.0.0",
47265 "grunt-contrib-copy": "^1.0.0",
47266 "grunt-contrib-uglify": "^1.0.1",
47267 "grunt-mocha-istanbul": "^3.0.1",
47268 "grunt-saucelabs": "^8.6.2",
47269 "istanbul": "^0.4.2",
47270 "jscs": "^2.9.0",
47271 "jshint": "^2.6.0",
47272 "mocha": "^2.1.0"
47273 },
47274 "directories": {},
47275 "dist": {
47276 "shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
47277 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz"
47278 },
47279 "files": [
47280 "lib"
47281 ],
47282 "gitHead": "6b0d2b76caae91471649c8e21f0b1d3ba0f96090",
47283 "homepage": "https://github.com/indutny/elliptic",
47284 "keywords": [
47285 "EC",
47286 "Elliptic",
47287 "curve",
47288 "Cryptography"
47289 ],
47290 "license": "MIT",
47291 "main": "lib/elliptic.js",
47292 "maintainers": [
47293 {
47294 "email": "fedor@indutny.com",
47295 "name": "indutny"
47296 }
47297 ],
47298 "name": "elliptic",
47299 "optionalDependencies": {},
47300 "readme": "ERROR: No README data found!",
47301 "repository": {
47302 "type": "git",
47303 "url": "git+ssh://git@github.com/indutny/elliptic.git"
47304 },
47305 "scripts": {
47306 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
47307 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
47308 "lint": "npm run jscs && npm run jshint",
47309 "test": "npm run lint && npm run unit",
47310 "unit": "istanbul test _mocha --reporter=spec test/index.js",
47311 "version": "grunt dist && git add dist/"
47312 },
47313 "version": "6.4.0"
47314 }
47315
47316 },{}],113:[function(require,module,exports){
47317 (function (Buffer){
47318 'use strict'
47319 var Transform = require('stream').Transform
47320 var inherits = require('inherits')
47321
47322 function HashBase (blockSize) {
47323 Transform.call(this)
47324
47325 this._block = new Buffer(blockSize)
47326 this._blockSize = blockSize
47327 this._blockOffset = 0
47328 this._length = [0, 0, 0, 0]
47329
47330 this._finalized = false
47331 }
47332
47333 inherits(HashBase, Transform)
47334
47335 HashBase.prototype._transform = function (chunk, encoding, callback) {
47336 var error = null
47337 try {
47338 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
47339 this.update(chunk)
47340 } catch (err) {
47341 error = err
47342 }
47343
47344 callback(error)
47345 }
47346
47347 HashBase.prototype._flush = function (callback) {
47348 var error = null
47349 try {
47350 this.push(this._digest())
47351 } catch (err) {
47352 error = err
47353 }
47354
47355 callback(error)
47356 }
47357
47358 HashBase.prototype.update = function (data, encoding) {
47359 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
47360 if (this._finalized) throw new Error('Digest already called')
47361 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
47362
47363 // consume data
47364 var block = this._block
47365 var offset = 0
47366 while (this._blockOffset + data.length - offset >= this._blockSize) {
47367 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
47368 this._update()
47369 this._blockOffset = 0
47370 }
47371 while (offset < data.length) block[this._blockOffset++] = data[offset++]
47372
47373 // update length
47374 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
47375 this._length[j] += carry
47376 carry = (this._length[j] / 0x0100000000) | 0
47377 if (carry > 0) this._length[j] -= 0x0100000000 * carry
47378 }
47379
47380 return this
47381 }
47382
47383 HashBase.prototype._update = function (data) {
47384 throw new Error('_update is not implemented')
47385 }
47386
47387 HashBase.prototype.digest = function (encoding) {
47388 if (this._finalized) throw new Error('Digest already called')
47389 this._finalized = true
47390
47391 var digest = this._digest()
47392 if (encoding !== undefined) digest = digest.toString(encoding)
47393 return digest
47394 }
47395
47396 HashBase.prototype._digest = function () {
47397 throw new Error('_digest is not implemented')
47398 }
47399
47400 module.exports = HashBase
47401
47402 }).call(this,require("buffer").Buffer)
47403 },{"buffer":5,"inherits":121,"stream":28}],114:[function(require,module,exports){
47404 var hash = exports;
47405
47406 hash.utils = require('./hash/utils');
47407 hash.common = require('./hash/common');
47408 hash.sha = require('./hash/sha');
47409 hash.ripemd = require('./hash/ripemd');
47410 hash.hmac = require('./hash/hmac');
47411
47412 // Proxy hash functions to the main object
47413 hash.sha1 = hash.sha.sha1;
47414 hash.sha256 = hash.sha.sha256;
47415 hash.sha224 = hash.sha.sha224;
47416 hash.sha384 = hash.sha.sha384;
47417 hash.sha512 = hash.sha.sha512;
47418 hash.ripemd160 = hash.ripemd.ripemd160;
47419
47420 },{"./hash/common":115,"./hash/hmac":116,"./hash/ripemd":117,"./hash/sha":118,"./hash/utils":119}],115:[function(require,module,exports){
47421 var hash = require('../hash');
47422 var utils = hash.utils;
47423 var assert = utils.assert;
47424
47425 function BlockHash() {
47426 this.pending = null;
47427 this.pendingTotal = 0;
47428 this.blockSize = this.constructor.blockSize;
47429 this.outSize = this.constructor.outSize;
47430 this.hmacStrength = this.constructor.hmacStrength;
47431 this.padLength = this.constructor.padLength / 8;
47432 this.endian = 'big';
47433
47434 this._delta8 = this.blockSize / 8;
47435 this._delta32 = this.blockSize / 32;
47436 }
47437 exports.BlockHash = BlockHash;
47438
47439 BlockHash.prototype.update = function update(msg, enc) {
47440 // Convert message to array, pad it, and join into 32bit blocks
47441 msg = utils.toArray(msg, enc);
47442 if (!this.pending)
47443 this.pending = msg;
47444 else
47445 this.pending = this.pending.concat(msg);
47446 this.pendingTotal += msg.length;
47447
47448 // Enough data, try updating
47449 if (this.pending.length >= this._delta8) {
47450 msg = this.pending;
47451
47452 // Process pending data in blocks
47453 var r = msg.length % this._delta8;
47454 this.pending = msg.slice(msg.length - r, msg.length);
47455 if (this.pending.length === 0)
47456 this.pending = null;
47457
47458 msg = utils.join32(msg, 0, msg.length - r, this.endian);
47459 for (var i = 0; i < msg.length; i += this._delta32)
47460 this._update(msg, i, i + this._delta32);
47461 }
47462
47463 return this;
47464 };
47465
47466 BlockHash.prototype.digest = function digest(enc) {
47467 this.update(this._pad());
47468 assert(this.pending === null);
47469
47470 return this._digest(enc);
47471 };
47472
47473 BlockHash.prototype._pad = function pad() {
47474 var len = this.pendingTotal;
47475 var bytes = this._delta8;
47476 var k = bytes - ((len + this.padLength) % bytes);
47477 var res = new Array(k + this.padLength);
47478 res[0] = 0x80;
47479 for (var i = 1; i < k; i++)
47480 res[i] = 0;
47481
47482 // Append length
47483 len <<= 3;
47484 if (this.endian === 'big') {
47485 for (var t = 8; t < this.padLength; t++)
47486 res[i++] = 0;
47487
47488 res[i++] = 0;
47489 res[i++] = 0;
47490 res[i++] = 0;
47491 res[i++] = 0;
47492 res[i++] = (len >>> 24) & 0xff;
47493 res[i++] = (len >>> 16) & 0xff;
47494 res[i++] = (len >>> 8) & 0xff;
47495 res[i++] = len & 0xff;
47496 } else {
47497 res[i++] = len & 0xff;
47498 res[i++] = (len >>> 8) & 0xff;
47499 res[i++] = (len >>> 16) & 0xff;
47500 res[i++] = (len >>> 24) & 0xff;
47501 res[i++] = 0;
47502 res[i++] = 0;
47503 res[i++] = 0;
47504 res[i++] = 0;
47505
47506 for (var t = 8; t < this.padLength; t++)
47507 res[i++] = 0;
47508 }
47509
47510 return res;
47511 };
47512
47513 },{"../hash":114}],116:[function(require,module,exports){
47514 var hmac = exports;
47515
47516 var hash = require('../hash');
47517 var utils = hash.utils;
47518 var assert = utils.assert;
47519
47520 function Hmac(hash, key, enc) {
47521 if (!(this instanceof Hmac))
47522 return new Hmac(hash, key, enc);
47523 this.Hash = hash;
47524 this.blockSize = hash.blockSize / 8;
47525 this.outSize = hash.outSize / 8;
47526 this.inner = null;
47527 this.outer = null;
47528
47529 this._init(utils.toArray(key, enc));
47530 }
47531 module.exports = Hmac;
47532
47533 Hmac.prototype._init = function init(key) {
47534 // Shorten key, if needed
47535 if (key.length > this.blockSize)
47536 key = new this.Hash().update(key).digest();
47537 assert(key.length <= this.blockSize);
47538
47539 // Add padding to key
47540 for (var i = key.length; i < this.blockSize; i++)
47541 key.push(0);
47542
47543 for (var i = 0; i < key.length; i++)
47544 key[i] ^= 0x36;
47545 this.inner = new this.Hash().update(key);
47546
47547 // 0x36 ^ 0x5c = 0x6a
47548 for (var i = 0; i < key.length; i++)
47549 key[i] ^= 0x6a;
47550 this.outer = new this.Hash().update(key);
47551 };
47552
47553 Hmac.prototype.update = function update(msg, enc) {
47554 this.inner.update(msg, enc);
47555 return this;
47556 };
47557
47558 Hmac.prototype.digest = function digest(enc) {
47559 this.outer.update(this.inner.digest());
47560 return this.outer.digest(enc);
47561 };
47562
47563 },{"../hash":114}],117:[function(require,module,exports){
47564 var hash = require('../hash');
47565 var utils = hash.utils;
47566
47567 var rotl32 = utils.rotl32;
47568 var sum32 = utils.sum32;
47569 var sum32_3 = utils.sum32_3;
47570 var sum32_4 = utils.sum32_4;
47571 var BlockHash = hash.common.BlockHash;
47572
47573 function RIPEMD160() {
47574 if (!(this instanceof RIPEMD160))
47575 return new RIPEMD160();
47576
47577 BlockHash.call(this);
47578
47579 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
47580 this.endian = 'little';
47581 }
47582 utils.inherits(RIPEMD160, BlockHash);
47583 exports.ripemd160 = RIPEMD160;
47584
47585 RIPEMD160.blockSize = 512;
47586 RIPEMD160.outSize = 160;
47587 RIPEMD160.hmacStrength = 192;
47588 RIPEMD160.padLength = 64;
47589
47590 RIPEMD160.prototype._update = function update(msg, start) {
47591 var A = this.h[0];
47592 var B = this.h[1];
47593 var C = this.h[2];
47594 var D = this.h[3];
47595 var E = this.h[4];
47596 var Ah = A;
47597 var Bh = B;
47598 var Ch = C;
47599 var Dh = D;
47600 var Eh = E;
47601 for (var j = 0; j < 80; j++) {
47602 var T = sum32(
47603 rotl32(
47604 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
47605 s[j]),
47606 E);
47607 A = E;
47608 E = D;
47609 D = rotl32(C, 10);
47610 C = B;
47611 B = T;
47612 T = sum32(
47613 rotl32(
47614 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
47615 sh[j]),
47616 Eh);
47617 Ah = Eh;
47618 Eh = Dh;
47619 Dh = rotl32(Ch, 10);
47620 Ch = Bh;
47621 Bh = T;
47622 }
47623 T = sum32_3(this.h[1], C, Dh);
47624 this.h[1] = sum32_3(this.h[2], D, Eh);
47625 this.h[2] = sum32_3(this.h[3], E, Ah);
47626 this.h[3] = sum32_3(this.h[4], A, Bh);
47627 this.h[4] = sum32_3(this.h[0], B, Ch);
47628 this.h[0] = T;
47629 };
47630
47631 RIPEMD160.prototype._digest = function digest(enc) {
47632 if (enc === 'hex')
47633 return utils.toHex32(this.h, 'little');
47634 else
47635 return utils.split32(this.h, 'little');
47636 };
47637
47638 function f(j, x, y, z) {
47639 if (j <= 15)
47640 return x ^ y ^ z;
47641 else if (j <= 31)
47642 return (x & y) | ((~x) & z);
47643 else if (j <= 47)
47644 return (x | (~y)) ^ z;
47645 else if (j <= 63)
47646 return (x & z) | (y & (~z));
47647 else
47648 return x ^ (y | (~z));
47649 }
47650
47651 function K(j) {
47652 if (j <= 15)
47653 return 0x00000000;
47654 else if (j <= 31)
47655 return 0x5a827999;
47656 else if (j <= 47)
47657 return 0x6ed9eba1;
47658 else if (j <= 63)
47659 return 0x8f1bbcdc;
47660 else
47661 return 0xa953fd4e;
47662 }
47663
47664 function Kh(j) {
47665 if (j <= 15)
47666 return 0x50a28be6;
47667 else if (j <= 31)
47668 return 0x5c4dd124;
47669 else if (j <= 47)
47670 return 0x6d703ef3;
47671 else if (j <= 63)
47672 return 0x7a6d76e9;
47673 else
47674 return 0x00000000;
47675 }
47676
47677 var r = [
47678 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
47679 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
47680 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
47681 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
47682 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
47683 ];
47684
47685 var rh = [
47686 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
47687 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
47688 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
47689 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
47690 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
47691 ];
47692
47693 var s = [
47694 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
47695 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
47696 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
47697 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
47698 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
47699 ];
47700
47701 var sh = [
47702 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
47703 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
47704 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
47705 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
47706 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
47707 ];
47708
47709 },{"../hash":114}],118:[function(require,module,exports){
47710 var hash = require('../hash');
47711 var utils = hash.utils;
47712 var assert = utils.assert;
47713
47714 var rotr32 = utils.rotr32;
47715 var rotl32 = utils.rotl32;
47716 var sum32 = utils.sum32;
47717 var sum32_4 = utils.sum32_4;
47718 var sum32_5 = utils.sum32_5;
47719 var rotr64_hi = utils.rotr64_hi;
47720 var rotr64_lo = utils.rotr64_lo;
47721 var shr64_hi = utils.shr64_hi;
47722 var shr64_lo = utils.shr64_lo;
47723 var sum64 = utils.sum64;
47724 var sum64_hi = utils.sum64_hi;
47725 var sum64_lo = utils.sum64_lo;
47726 var sum64_4_hi = utils.sum64_4_hi;
47727 var sum64_4_lo = utils.sum64_4_lo;
47728 var sum64_5_hi = utils.sum64_5_hi;
47729 var sum64_5_lo = utils.sum64_5_lo;
47730 var BlockHash = hash.common.BlockHash;
47731
47732 var sha256_K = [
47733 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
47734 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
47735 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
47736 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
47737 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
47738 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
47739 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
47740 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
47741 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
47742 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
47743 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
47744 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
47745 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
47746 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
47747 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
47748 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
47749 ];
47750
47751 var sha512_K = [
47752 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
47753 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
47754 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
47755 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
47756 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
47757 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
47758 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
47759 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
47760 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
47761 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
47762 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
47763 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
47764 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
47765 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
47766 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
47767 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
47768 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
47769 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
47770 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
47771 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
47772 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
47773 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
47774 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
47775 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
47776 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
47777 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
47778 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
47779 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
47780 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
47781 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
47782 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
47783 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
47784 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
47785 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
47786 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
47787 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
47788 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
47789 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
47790 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
47791 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
47792 ];
47793
47794 var sha1_K = [
47795 0x5A827999, 0x6ED9EBA1,
47796 0x8F1BBCDC, 0xCA62C1D6
47797 ];
47798
47799 function SHA256() {
47800 if (!(this instanceof SHA256))
47801 return new SHA256();
47802
47803 BlockHash.call(this);
47804 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
47805 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
47806 this.k = sha256_K;
47807 this.W = new Array(64);
47808 }
47809 utils.inherits(SHA256, BlockHash);
47810 exports.sha256 = SHA256;
47811
47812 SHA256.blockSize = 512;
47813 SHA256.outSize = 256;
47814 SHA256.hmacStrength = 192;
47815 SHA256.padLength = 64;
47816
47817 SHA256.prototype._update = function _update(msg, start) {
47818 var W = this.W;
47819
47820 for (var i = 0; i < 16; i++)
47821 W[i] = msg[start + i];
47822 for (; i < W.length; i++)
47823 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
47824
47825 var a = this.h[0];
47826 var b = this.h[1];
47827 var c = this.h[2];
47828 var d = this.h[3];
47829 var e = this.h[4];
47830 var f = this.h[5];
47831 var g = this.h[6];
47832 var h = this.h[7];
47833
47834 assert(this.k.length === W.length);
47835 for (var i = 0; i < W.length; i++) {
47836 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
47837 var T2 = sum32(s0_256(a), maj32(a, b, c));
47838 h = g;
47839 g = f;
47840 f = e;
47841 e = sum32(d, T1);
47842 d = c;
47843 c = b;
47844 b = a;
47845 a = sum32(T1, T2);
47846 }
47847
47848 this.h[0] = sum32(this.h[0], a);
47849 this.h[1] = sum32(this.h[1], b);
47850 this.h[2] = sum32(this.h[2], c);
47851 this.h[3] = sum32(this.h[3], d);
47852 this.h[4] = sum32(this.h[4], e);
47853 this.h[5] = sum32(this.h[5], f);
47854 this.h[6] = sum32(this.h[6], g);
47855 this.h[7] = sum32(this.h[7], h);
47856 };
47857
47858 SHA256.prototype._digest = function digest(enc) {
47859 if (enc === 'hex')
47860 return utils.toHex32(this.h, 'big');
47861 else
47862 return utils.split32(this.h, 'big');
47863 };
47864
47865 function SHA224() {
47866 if (!(this instanceof SHA224))
47867 return new SHA224();
47868
47869 SHA256.call(this);
47870 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
47871 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
47872 }
47873 utils.inherits(SHA224, SHA256);
47874 exports.sha224 = SHA224;
47875
47876 SHA224.blockSize = 512;
47877 SHA224.outSize = 224;
47878 SHA224.hmacStrength = 192;
47879 SHA224.padLength = 64;
47880
47881 SHA224.prototype._digest = function digest(enc) {
47882 // Just truncate output
47883 if (enc === 'hex')
47884 return utils.toHex32(this.h.slice(0, 7), 'big');
47885 else
47886 return utils.split32(this.h.slice(0, 7), 'big');
47887 };
47888
47889 function SHA512() {
47890 if (!(this instanceof SHA512))
47891 return new SHA512();
47892
47893 BlockHash.call(this);
47894 this.h = [ 0x6a09e667, 0xf3bcc908,
47895 0xbb67ae85, 0x84caa73b,
47896 0x3c6ef372, 0xfe94f82b,
47897 0xa54ff53a, 0x5f1d36f1,
47898 0x510e527f, 0xade682d1,
47899 0x9b05688c, 0x2b3e6c1f,
47900 0x1f83d9ab, 0xfb41bd6b,
47901 0x5be0cd19, 0x137e2179 ];
47902 this.k = sha512_K;
47903 this.W = new Array(160);
47904 }
47905 utils.inherits(SHA512, BlockHash);
47906 exports.sha512 = SHA512;
47907
47908 SHA512.blockSize = 1024;
47909 SHA512.outSize = 512;
47910 SHA512.hmacStrength = 192;
47911 SHA512.padLength = 128;
47912
47913 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
47914 var W = this.W;
47915
47916 // 32 x 32bit words
47917 for (var i = 0; i < 32; i++)
47918 W[i] = msg[start + i];
47919 for (; i < W.length; i += 2) {
47920 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
47921 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
47922 var c1_hi = W[i - 14]; // i - 7
47923 var c1_lo = W[i - 13];
47924 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
47925 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
47926 var c3_hi = W[i - 32]; // i - 16
47927 var c3_lo = W[i - 31];
47928
47929 W[i] = sum64_4_hi(c0_hi, c0_lo,
47930 c1_hi, c1_lo,
47931 c2_hi, c2_lo,
47932 c3_hi, c3_lo);
47933 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
47934 c1_hi, c1_lo,
47935 c2_hi, c2_lo,
47936 c3_hi, c3_lo);
47937 }
47938 };
47939
47940 SHA512.prototype._update = function _update(msg, start) {
47941 this._prepareBlock(msg, start);
47942
47943 var W = this.W;
47944
47945 var ah = this.h[0];
47946 var al = this.h[1];
47947 var bh = this.h[2];
47948 var bl = this.h[3];
47949 var ch = this.h[4];
47950 var cl = this.h[5];
47951 var dh = this.h[6];
47952 var dl = this.h[7];
47953 var eh = this.h[8];
47954 var el = this.h[9];
47955 var fh = this.h[10];
47956 var fl = this.h[11];
47957 var gh = this.h[12];
47958 var gl = this.h[13];
47959 var hh = this.h[14];
47960 var hl = this.h[15];
47961
47962 assert(this.k.length === W.length);
47963 for (var i = 0; i < W.length; i += 2) {
47964 var c0_hi = hh;
47965 var c0_lo = hl;
47966 var c1_hi = s1_512_hi(eh, el);
47967 var c1_lo = s1_512_lo(eh, el);
47968 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
47969 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
47970 var c3_hi = this.k[i];
47971 var c3_lo = this.k[i + 1];
47972 var c4_hi = W[i];
47973 var c4_lo = W[i + 1];
47974
47975 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
47976 c1_hi, c1_lo,
47977 c2_hi, c2_lo,
47978 c3_hi, c3_lo,
47979 c4_hi, c4_lo);
47980 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
47981 c1_hi, c1_lo,
47982 c2_hi, c2_lo,
47983 c3_hi, c3_lo,
47984 c4_hi, c4_lo);
47985
47986 var c0_hi = s0_512_hi(ah, al);
47987 var c0_lo = s0_512_lo(ah, al);
47988 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
47989 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
47990
47991 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
47992 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
47993
47994 hh = gh;
47995 hl = gl;
47996
47997 gh = fh;
47998 gl = fl;
47999
48000 fh = eh;
48001 fl = el;
48002
48003 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
48004 el = sum64_lo(dl, dl, T1_hi, T1_lo);
48005
48006 dh = ch;
48007 dl = cl;
48008
48009 ch = bh;
48010 cl = bl;
48011
48012 bh = ah;
48013 bl = al;
48014
48015 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
48016 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
48017 }
48018
48019 sum64(this.h, 0, ah, al);
48020 sum64(this.h, 2, bh, bl);
48021 sum64(this.h, 4, ch, cl);
48022 sum64(this.h, 6, dh, dl);
48023 sum64(this.h, 8, eh, el);
48024 sum64(this.h, 10, fh, fl);
48025 sum64(this.h, 12, gh, gl);
48026 sum64(this.h, 14, hh, hl);
48027 };
48028
48029 SHA512.prototype._digest = function digest(enc) {
48030 if (enc === 'hex')
48031 return utils.toHex32(this.h, 'big');
48032 else
48033 return utils.split32(this.h, 'big');
48034 };
48035
48036 function SHA384() {
48037 if (!(this instanceof SHA384))
48038 return new SHA384();
48039
48040 SHA512.call(this);
48041 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
48042 0x629a292a, 0x367cd507,
48043 0x9159015a, 0x3070dd17,
48044 0x152fecd8, 0xf70e5939,
48045 0x67332667, 0xffc00b31,
48046 0x8eb44a87, 0x68581511,
48047 0xdb0c2e0d, 0x64f98fa7,
48048 0x47b5481d, 0xbefa4fa4 ];
48049 }
48050 utils.inherits(SHA384, SHA512);
48051 exports.sha384 = SHA384;
48052
48053 SHA384.blockSize = 1024;
48054 SHA384.outSize = 384;
48055 SHA384.hmacStrength = 192;
48056 SHA384.padLength = 128;
48057
48058 SHA384.prototype._digest = function digest(enc) {
48059 if (enc === 'hex')
48060 return utils.toHex32(this.h.slice(0, 12), 'big');
48061 else
48062 return utils.split32(this.h.slice(0, 12), 'big');
48063 };
48064
48065 function SHA1() {
48066 if (!(this instanceof SHA1))
48067 return new SHA1();
48068
48069 BlockHash.call(this);
48070 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
48071 0x10325476, 0xc3d2e1f0 ];
48072 this.W = new Array(80);
48073 }
48074
48075 utils.inherits(SHA1, BlockHash);
48076 exports.sha1 = SHA1;
48077
48078 SHA1.blockSize = 512;
48079 SHA1.outSize = 160;
48080 SHA1.hmacStrength = 80;
48081 SHA1.padLength = 64;
48082
48083 SHA1.prototype._update = function _update(msg, start) {
48084 var W = this.W;
48085
48086 for (var i = 0; i < 16; i++)
48087 W[i] = msg[start + i];
48088
48089 for(; i < W.length; i++)
48090 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
48091
48092 var a = this.h[0];
48093 var b = this.h[1];
48094 var c = this.h[2];
48095 var d = this.h[3];
48096 var e = this.h[4];
48097
48098 for (var i = 0; i < W.length; i++) {
48099 var s = ~~(i / 20);
48100 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
48101 e = d;
48102 d = c;
48103 c = rotl32(b, 30);
48104 b = a;
48105 a = t;
48106 }
48107
48108 this.h[0] = sum32(this.h[0], a);
48109 this.h[1] = sum32(this.h[1], b);
48110 this.h[2] = sum32(this.h[2], c);
48111 this.h[3] = sum32(this.h[3], d);
48112 this.h[4] = sum32(this.h[4], e);
48113 };
48114
48115 SHA1.prototype._digest = function digest(enc) {
48116 if (enc === 'hex')
48117 return utils.toHex32(this.h, 'big');
48118 else
48119 return utils.split32(this.h, 'big');
48120 };
48121
48122 function ch32(x, y, z) {
48123 return (x & y) ^ ((~x) & z);
48124 }
48125
48126 function maj32(x, y, z) {
48127 return (x & y) ^ (x & z) ^ (y & z);
48128 }
48129
48130 function p32(x, y, z) {
48131 return x ^ y ^ z;
48132 }
48133
48134 function s0_256(x) {
48135 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
48136 }
48137
48138 function s1_256(x) {
48139 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
48140 }
48141
48142 function g0_256(x) {
48143 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
48144 }
48145
48146 function g1_256(x) {
48147 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
48148 }
48149
48150 function ft_1(s, x, y, z) {
48151 if (s === 0)
48152 return ch32(x, y, z);
48153 if (s === 1 || s === 3)
48154 return p32(x, y, z);
48155 if (s === 2)
48156 return maj32(x, y, z);
48157 }
48158
48159 function ch64_hi(xh, xl, yh, yl, zh, zl) {
48160 var r = (xh & yh) ^ ((~xh) & zh);
48161 if (r < 0)
48162 r += 0x100000000;
48163 return r;
48164 }
48165
48166 function ch64_lo(xh, xl, yh, yl, zh, zl) {
48167 var r = (xl & yl) ^ ((~xl) & zl);
48168 if (r < 0)
48169 r += 0x100000000;
48170 return r;
48171 }
48172
48173 function maj64_hi(xh, xl, yh, yl, zh, zl) {
48174 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
48175 if (r < 0)
48176 r += 0x100000000;
48177 return r;
48178 }
48179
48180 function maj64_lo(xh, xl, yh, yl, zh, zl) {
48181 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
48182 if (r < 0)
48183 r += 0x100000000;
48184 return r;
48185 }
48186
48187 function s0_512_hi(xh, xl) {
48188 var c0_hi = rotr64_hi(xh, xl, 28);
48189 var c1_hi = rotr64_hi(xl, xh, 2); // 34
48190 var c2_hi = rotr64_hi(xl, xh, 7); // 39
48191
48192 var r = c0_hi ^ c1_hi ^ c2_hi;
48193 if (r < 0)
48194 r += 0x100000000;
48195 return r;
48196 }
48197
48198 function s0_512_lo(xh, xl) {
48199 var c0_lo = rotr64_lo(xh, xl, 28);
48200 var c1_lo = rotr64_lo(xl, xh, 2); // 34
48201 var c2_lo = rotr64_lo(xl, xh, 7); // 39
48202
48203 var r = c0_lo ^ c1_lo ^ c2_lo;
48204 if (r < 0)
48205 r += 0x100000000;
48206 return r;
48207 }
48208
48209 function s1_512_hi(xh, xl) {
48210 var c0_hi = rotr64_hi(xh, xl, 14);
48211 var c1_hi = rotr64_hi(xh, xl, 18);
48212 var c2_hi = rotr64_hi(xl, xh, 9); // 41
48213
48214 var r = c0_hi ^ c1_hi ^ c2_hi;
48215 if (r < 0)
48216 r += 0x100000000;
48217 return r;
48218 }
48219
48220 function s1_512_lo(xh, xl) {
48221 var c0_lo = rotr64_lo(xh, xl, 14);
48222 var c1_lo = rotr64_lo(xh, xl, 18);
48223 var c2_lo = rotr64_lo(xl, xh, 9); // 41
48224
48225 var r = c0_lo ^ c1_lo ^ c2_lo;
48226 if (r < 0)
48227 r += 0x100000000;
48228 return r;
48229 }
48230
48231 function g0_512_hi(xh, xl) {
48232 var c0_hi = rotr64_hi(xh, xl, 1);
48233 var c1_hi = rotr64_hi(xh, xl, 8);
48234 var c2_hi = shr64_hi(xh, xl, 7);
48235
48236 var r = c0_hi ^ c1_hi ^ c2_hi;
48237 if (r < 0)
48238 r += 0x100000000;
48239 return r;
48240 }
48241
48242 function g0_512_lo(xh, xl) {
48243 var c0_lo = rotr64_lo(xh, xl, 1);
48244 var c1_lo = rotr64_lo(xh, xl, 8);
48245 var c2_lo = shr64_lo(xh, xl, 7);
48246
48247 var r = c0_lo ^ c1_lo ^ c2_lo;
48248 if (r < 0)
48249 r += 0x100000000;
48250 return r;
48251 }
48252
48253 function g1_512_hi(xh, xl) {
48254 var c0_hi = rotr64_hi(xh, xl, 19);
48255 var c1_hi = rotr64_hi(xl, xh, 29); // 61
48256 var c2_hi = shr64_hi(xh, xl, 6);
48257
48258 var r = c0_hi ^ c1_hi ^ c2_hi;
48259 if (r < 0)
48260 r += 0x100000000;
48261 return r;
48262 }
48263
48264 function g1_512_lo(xh, xl) {
48265 var c0_lo = rotr64_lo(xh, xl, 19);
48266 var c1_lo = rotr64_lo(xl, xh, 29); // 61
48267 var c2_lo = shr64_lo(xh, xl, 6);
48268
48269 var r = c0_lo ^ c1_lo ^ c2_lo;
48270 if (r < 0)
48271 r += 0x100000000;
48272 return r;
48273 }
48274
48275 },{"../hash":114}],119:[function(require,module,exports){
48276 var utils = exports;
48277 var inherits = require('inherits');
48278
48279 function toArray(msg, enc) {
48280 if (Array.isArray(msg))
48281 return msg.slice();
48282 if (!msg)
48283 return [];
48284 var res = [];
48285 if (typeof msg === 'string') {
48286 if (!enc) {
48287 for (var i = 0; i < msg.length; i++) {
48288 var c = msg.charCodeAt(i);
48289 var hi = c >> 8;
48290 var lo = c & 0xff;
48291 if (hi)
48292 res.push(hi, lo);
48293 else
48294 res.push(lo);
48295 }
48296 } else if (enc === 'hex') {
48297 msg = msg.replace(/[^a-z0-9]+/ig, '');
48298 if (msg.length % 2 !== 0)
48299 msg = '0' + msg;
48300 for (var i = 0; i < msg.length; i += 2)
48301 res.push(parseInt(msg[i] + msg[i + 1], 16));
48302 }
48303 } else {
48304 for (var i = 0; i < msg.length; i++)
48305 res[i] = msg[i] | 0;
48306 }
48307 return res;
48308 }
48309 utils.toArray = toArray;
48310
48311 function toHex(msg) {
48312 var res = '';
48313 for (var i = 0; i < msg.length; i++)
48314 res += zero2(msg[i].toString(16));
48315 return res;
48316 }
48317 utils.toHex = toHex;
48318
48319 function htonl(w) {
48320 var res = (w >>> 24) |
48321 ((w >>> 8) & 0xff00) |
48322 ((w << 8) & 0xff0000) |
48323 ((w & 0xff) << 24);
48324 return res >>> 0;
48325 }
48326 utils.htonl = htonl;
48327
48328 function toHex32(msg, endian) {
48329 var res = '';
48330 for (var i = 0; i < msg.length; i++) {
48331 var w = msg[i];
48332 if (endian === 'little')
48333 w = htonl(w);
48334 res += zero8(w.toString(16));
48335 }
48336 return res;
48337 }
48338 utils.toHex32 = toHex32;
48339
48340 function zero2(word) {
48341 if (word.length === 1)
48342 return '0' + word;
48343 else
48344 return word;
48345 }
48346 utils.zero2 = zero2;
48347
48348 function zero8(word) {
48349 if (word.length === 7)
48350 return '0' + word;
48351 else if (word.length === 6)
48352 return '00' + word;
48353 else if (word.length === 5)
48354 return '000' + word;
48355 else if (word.length === 4)
48356 return '0000' + word;
48357 else if (word.length === 3)
48358 return '00000' + word;
48359 else if (word.length === 2)
48360 return '000000' + word;
48361 else if (word.length === 1)
48362 return '0000000' + word;
48363 else
48364 return word;
48365 }
48366 utils.zero8 = zero8;
48367
48368 function join32(msg, start, end, endian) {
48369 var len = end - start;
48370 assert(len % 4 === 0);
48371 var res = new Array(len / 4);
48372 for (var i = 0, k = start; i < res.length; i++, k += 4) {
48373 var w;
48374 if (endian === 'big')
48375 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
48376 else
48377 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
48378 res[i] = w >>> 0;
48379 }
48380 return res;
48381 }
48382 utils.join32 = join32;
48383
48384 function split32(msg, endian) {
48385 var res = new Array(msg.length * 4);
48386 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
48387 var m = msg[i];
48388 if (endian === 'big') {
48389 res[k] = m >>> 24;
48390 res[k + 1] = (m >>> 16) & 0xff;
48391 res[k + 2] = (m >>> 8) & 0xff;
48392 res[k + 3] = m & 0xff;
48393 } else {
48394 res[k + 3] = m >>> 24;
48395 res[k + 2] = (m >>> 16) & 0xff;
48396 res[k + 1] = (m >>> 8) & 0xff;
48397 res[k] = m & 0xff;
48398 }
48399 }
48400 return res;
48401 }
48402 utils.split32 = split32;
48403
48404 function rotr32(w, b) {
48405 return (w >>> b) | (w << (32 - b));
48406 }
48407 utils.rotr32 = rotr32;
48408
48409 function rotl32(w, b) {
48410 return (w << b) | (w >>> (32 - b));
48411 }
48412 utils.rotl32 = rotl32;
48413
48414 function sum32(a, b) {
48415 return (a + b) >>> 0;
48416 }
48417 utils.sum32 = sum32;
48418
48419 function sum32_3(a, b, c) {
48420 return (a + b + c) >>> 0;
48421 }
48422 utils.sum32_3 = sum32_3;
48423
48424 function sum32_4(a, b, c, d) {
48425 return (a + b + c + d) >>> 0;
48426 }
48427 utils.sum32_4 = sum32_4;
48428
48429 function sum32_5(a, b, c, d, e) {
48430 return (a + b + c + d + e) >>> 0;
48431 }
48432 utils.sum32_5 = sum32_5;
48433
48434 function assert(cond, msg) {
48435 if (!cond)
48436 throw new Error(msg || 'Assertion failed');
48437 }
48438 utils.assert = assert;
48439
48440 utils.inherits = inherits;
48441
48442 function sum64(buf, pos, ah, al) {
48443 var bh = buf[pos];
48444 var bl = buf[pos + 1];
48445
48446 var lo = (al + bl) >>> 0;
48447 var hi = (lo < al ? 1 : 0) + ah + bh;
48448 buf[pos] = hi >>> 0;
48449 buf[pos + 1] = lo;
48450 }
48451 exports.sum64 = sum64;
48452
48453 function sum64_hi(ah, al, bh, bl) {
48454 var lo = (al + bl) >>> 0;
48455 var hi = (lo < al ? 1 : 0) + ah + bh;
48456 return hi >>> 0;
48457 };
48458 exports.sum64_hi = sum64_hi;
48459
48460 function sum64_lo(ah, al, bh, bl) {
48461 var lo = al + bl;
48462 return lo >>> 0;
48463 };
48464 exports.sum64_lo = sum64_lo;
48465
48466 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
48467 var carry = 0;
48468 var lo = al;
48469 lo = (lo + bl) >>> 0;
48470 carry += lo < al ? 1 : 0;
48471 lo = (lo + cl) >>> 0;
48472 carry += lo < cl ? 1 : 0;
48473 lo = (lo + dl) >>> 0;
48474 carry += lo < dl ? 1 : 0;
48475
48476 var hi = ah + bh + ch + dh + carry;
48477 return hi >>> 0;
48478 };
48479 exports.sum64_4_hi = sum64_4_hi;
48480
48481 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
48482 var lo = al + bl + cl + dl;
48483 return lo >>> 0;
48484 };
48485 exports.sum64_4_lo = sum64_4_lo;
48486
48487 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
48488 var carry = 0;
48489 var lo = al;
48490 lo = (lo + bl) >>> 0;
48491 carry += lo < al ? 1 : 0;
48492 lo = (lo + cl) >>> 0;
48493 carry += lo < cl ? 1 : 0;
48494 lo = (lo + dl) >>> 0;
48495 carry += lo < dl ? 1 : 0;
48496 lo = (lo + el) >>> 0;
48497 carry += lo < el ? 1 : 0;
48498
48499 var hi = ah + bh + ch + dh + eh + carry;
48500 return hi >>> 0;
48501 };
48502 exports.sum64_5_hi = sum64_5_hi;
48503
48504 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
48505 var lo = al + bl + cl + dl + el;
48506
48507 return lo >>> 0;
48508 };
48509 exports.sum64_5_lo = sum64_5_lo;
48510
48511 function rotr64_hi(ah, al, num) {
48512 var r = (al << (32 - num)) | (ah >>> num);
48513 return r >>> 0;
48514 };
48515 exports.rotr64_hi = rotr64_hi;
48516
48517 function rotr64_lo(ah, al, num) {
48518 var r = (ah << (32 - num)) | (al >>> num);
48519 return r >>> 0;
48520 };
48521 exports.rotr64_lo = rotr64_lo;
48522
48523 function shr64_hi(ah, al, num) {
48524 return ah >>> num;
48525 };
48526 exports.shr64_hi = shr64_hi;
48527
48528 function shr64_lo(ah, al, num) {
48529 var r = (ah << (32 - num)) | (al >>> num);
48530 return r >>> 0;
48531 };
48532 exports.shr64_lo = shr64_lo;
48533
48534 },{"inherits":121}],120:[function(require,module,exports){
48535 'use strict';
48536
48537 var hash = require('hash.js');
48538 var utils = require('minimalistic-crypto-utils');
48539 var assert = require('minimalistic-assert');
48540
48541 function HmacDRBG(options) {
48542 if (!(this instanceof HmacDRBG))
48543 return new HmacDRBG(options);
48544 this.hash = options.hash;
48545 this.predResist = !!options.predResist;
48546
48547 this.outLen = this.hash.outSize;
48548 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
48549
48550 this._reseed = null;
48551 this.reseedInterval = null;
48552 this.K = null;
48553 this.V = null;
48554
48555 var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');
48556 var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');
48557 var pers = utils.toArray(options.pers, options.persEnc || 'hex');
48558 assert(entropy.length >= (this.minEntropy / 8),
48559 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
48560 this._init(entropy, nonce, pers);
48561 }
48562 module.exports = HmacDRBG;
48563
48564 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
48565 var seed = entropy.concat(nonce).concat(pers);
48566
48567 this.K = new Array(this.outLen / 8);
48568 this.V = new Array(this.outLen / 8);
48569 for (var i = 0; i < this.V.length; i++) {
48570 this.K[i] = 0x00;
48571 this.V[i] = 0x01;
48572 }
48573
48574 this._update(seed);
48575 this._reseed = 1;
48576 this.reseedInterval = 0x1000000000000; // 2^48
48577 };
48578
48579 HmacDRBG.prototype._hmac = function hmac() {
48580 return new hash.hmac(this.hash, this.K);
48581 };
48582
48583 HmacDRBG.prototype._update = function update(seed) {
48584 var kmac = this._hmac()
48585 .update(this.V)
48586 .update([ 0x00 ]);
48587 if (seed)
48588 kmac = kmac.update(seed);
48589 this.K = kmac.digest();
48590 this.V = this._hmac().update(this.V).digest();
48591 if (!seed)
48592 return;
48593
48594 this.K = this._hmac()
48595 .update(this.V)
48596 .update([ 0x01 ])
48597 .update(seed)
48598 .digest();
48599 this.V = this._hmac().update(this.V).digest();
48600 };
48601
48602 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
48603 // Optional entropy enc
48604 if (typeof entropyEnc !== 'string') {
48605 addEnc = add;
48606 add = entropyEnc;
48607 entropyEnc = null;
48608 }
48609
48610 entropy = utils.toArray(entropy, entropyEnc);
48611 add = utils.toArray(add, addEnc);
48612
48613 assert(entropy.length >= (this.minEntropy / 8),
48614 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
48615
48616 this._update(entropy.concat(add || []));
48617 this._reseed = 1;
48618 };
48619
48620 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
48621 if (this._reseed > this.reseedInterval)
48622 throw new Error('Reseed is required');
48623
48624 // Optional encoding
48625 if (typeof enc !== 'string') {
48626 addEnc = add;
48627 add = enc;
48628 enc = null;
48629 }
48630
48631 // Optional additional data
48632 if (add) {
48633 add = utils.toArray(add, addEnc || 'hex');
48634 this._update(add);
48635 }
48636
48637 var temp = [];
48638 while (temp.length < len) {
48639 this.V = this._hmac().update(this.V).digest();
48640 temp = temp.concat(this.V);
48641 }
48642
48643 var res = temp.slice(0, len);
48644 this._update(add);
48645 this._reseed++;
48646 return utils.encode(res, enc);
48647 };
48648
48649 },{"hash.js":114,"minimalistic-assert":123,"minimalistic-crypto-utils":124}],121:[function(require,module,exports){
48650 arguments[4][9][0].apply(exports,arguments)
48651 },{"dup":9}],122:[function(require,module,exports){
48652 (function (Buffer){
48653 // constant-space merkle root calculation algorithm
48654 module.exports = function fastRoot (values, digestFn) {
48655 if (!Array.isArray(values)) throw TypeError('Expected values Array')
48656 if (typeof digestFn !== 'function') throw TypeError('Expected digest Function')
48657
48658 var length = values.length
48659 var results = values.concat()
48660
48661 while (length > 1) {
48662 var j = 0
48663
48664 for (var i = 0; i < length; i += 2, ++j) {
48665 var left = results[i]
48666 var right = i + 1 === length ? left : results[i + 1]
48667 var data = Buffer.concat([left, right])
48668
48669 results[j] = digestFn(data)
48670 }
48671
48672 length = j
48673 }
48674
48675 return results[0]
48676 }
48677
48678 }).call(this,require("buffer").Buffer)
48679 },{"buffer":5}],123:[function(require,module,exports){
48680 module.exports = assert;
48681
48682 function assert(val, msg) {
48683 if (!val)
48684 throw new Error(msg || 'Assertion failed');
48685 }
48686
48687 assert.equal = function assertEqual(l, r, msg) {
48688 if (l != r)
48689 throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
48690 };
48691
48692 },{}],124:[function(require,module,exports){
48693 'use strict';
48694
48695 var utils = exports;
48696
48697 function toArray(msg, enc) {
48698 if (Array.isArray(msg))
48699 return msg.slice();
48700 if (!msg)
48701 return [];
48702 var res = [];
48703 if (typeof msg !== 'string') {
48704 for (var i = 0; i < msg.length; i++)
48705 res[i] = msg[i] | 0;
48706 return res;
48707 }
48708 if (enc === 'hex') {
48709 msg = msg.replace(/[^a-z0-9]+/ig, '');
48710 if (msg.length % 2 !== 0)
48711 msg = '0' + msg;
48712 for (var i = 0; i < msg.length; i += 2)
48713 res.push(parseInt(msg[i] + msg[i + 1], 16));
48714 } else {
48715 for (var i = 0; i < msg.length; i++) {
48716 var c = msg.charCodeAt(i);
48717 var hi = c >> 8;
48718 var lo = c & 0xff;
48719 if (hi)
48720 res.push(hi, lo);
48721 else
48722 res.push(lo);
48723 }
48724 }
48725 return res;
48726 }
48727 utils.toArray = toArray;
48728
48729 function zero2(word) {
48730 if (word.length === 1)
48731 return '0' + word;
48732 else
48733 return word;
48734 }
48735 utils.zero2 = zero2;
48736
48737 function toHex(msg) {
48738 var res = '';
48739 for (var i = 0; i < msg.length; i++)
48740 res += zero2(msg[i].toString(16));
48741 return res;
48742 }
48743 utils.toHex = toHex;
48744
48745 utils.encode = function encode(arr, enc) {
48746 if (enc === 'hex')
48747 return toHex(arr);
48748 else
48749 return arr;
48750 };
48751
48752 },{}],125:[function(require,module,exports){
48753 var OPS = require('bitcoin-ops')
48754
48755 function encodingLength (i) {
48756 return i < OPS.OP_PUSHDATA1 ? 1
48757 : i <= 0xff ? 2
48758 : i <= 0xffff ? 3
48759 : 5
48760 }
48761
48762 function encode (buffer, number, offset) {
48763 var size = encodingLength(number)
48764
48765 // ~6 bit
48766 if (size === 1) {
48767 buffer.writeUInt8(number, offset)
48768
48769 // 8 bit
48770 } else if (size === 2) {
48771 buffer.writeUInt8(OPS.OP_PUSHDATA1, offset)
48772 buffer.writeUInt8(number, offset + 1)
48773
48774 // 16 bit
48775 } else if (size === 3) {
48776 buffer.writeUInt8(OPS.OP_PUSHDATA2, offset)
48777 buffer.writeUInt16LE(number, offset + 1)
48778
48779 // 32 bit
48780 } else {
48781 buffer.writeUInt8(OPS.OP_PUSHDATA4, offset)
48782 buffer.writeUInt32LE(number, offset + 1)
48783 }
48784
48785 return size
48786 }
48787
48788 function decode (buffer, offset) {
48789 var opcode = buffer.readUInt8(offset)
48790 var number, size
48791
48792 // ~6 bit
48793 if (opcode < OPS.OP_PUSHDATA1) {
48794 number = opcode
48795 size = 1
48796
48797 // 8 bit
48798 } else if (opcode === OPS.OP_PUSHDATA1) {
48799 if (offset + 2 > buffer.length) return null
48800 number = buffer.readUInt8(offset + 1)
48801 size = 2
48802
48803 // 16 bit
48804 } else if (opcode === OPS.OP_PUSHDATA2) {
48805 if (offset + 3 > buffer.length) return null
48806 number = buffer.readUInt16LE(offset + 1)
48807 size = 3
48808
48809 // 32 bit
48810 } else {
48811 if (offset + 5 > buffer.length) return null
48812 if (opcode !== OPS.OP_PUSHDATA4) throw new Error('Unexpected opcode')
48813
48814 number = buffer.readUInt32LE(offset + 1)
48815 size = 5
48816 }
48817
48818 return {
48819 opcode: opcode,
48820 number: number,
48821 size: size
48822 }
48823 }
48824
48825 module.exports = {
48826 encodingLength: encodingLength,
48827 encode: encode,
48828 decode: decode
48829 }
48830
48831 },{"bitcoin-ops":42}],126:[function(require,module,exports){
48832 (function (process,global){
48833 'use strict'
48834
48835 function oldBrowser () {
48836 throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
48837 }
48838
48839 var Buffer = require('safe-buffer').Buffer
48840 var crypto = global.crypto || global.msCrypto
48841
48842 if (crypto && crypto.getRandomValues) {
48843 module.exports = randomBytes
48844 } else {
48845 module.exports = oldBrowser
48846 }
48847
48848 function randomBytes (size, cb) {
48849 // phantomjs needs to throw
48850 if (size > 65536) throw new Error('requested too many random bytes')
48851 // in case browserify isn't using the Uint8Array version
48852 var rawBytes = new global.Uint8Array(size)
48853
48854 // This will not work in older browsers.
48855 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
48856 if (size > 0) { // getRandomValues fails on IE if size == 0
48857 crypto.getRandomValues(rawBytes)
48858 }
48859
48860 // XXX: phantomjs doesn't like a buffer being passed here
48861 var bytes = Buffer.from(rawBytes.buffer)
48862
48863 if (typeof cb === 'function') {
48864 return process.nextTick(function () {
48865 cb(null, bytes)
48866 })
48867 }
48868
48869 return bytes
48870 }
48871
48872 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
48873 },{"_process":13,"safe-buffer":128}],127:[function(require,module,exports){
48874 (function (Buffer){
48875 'use strict'
48876 var inherits = require('inherits')
48877 var HashBase = require('hash-base')
48878
48879 function RIPEMD160 () {
48880 HashBase.call(this, 64)
48881
48882 // state
48883 this._a = 0x67452301
48884 this._b = 0xefcdab89
48885 this._c = 0x98badcfe
48886 this._d = 0x10325476
48887 this._e = 0xc3d2e1f0
48888 }
48889
48890 inherits(RIPEMD160, HashBase)
48891
48892 RIPEMD160.prototype._update = function () {
48893 var m = new Array(16)
48894 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
48895
48896 var al = this._a
48897 var bl = this._b
48898 var cl = this._c
48899 var dl = this._d
48900 var el = this._e
48901
48902 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
48903 // K = 0x00000000
48904 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
48905 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
48906 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
48907 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
48908 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
48909 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
48910 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
48911 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
48912 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
48913 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
48914 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
48915 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
48916 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
48917 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
48918 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
48919 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
48920 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
48921
48922 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
48923 // K = 0x5a827999
48924 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
48925 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
48926 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
48927 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
48928 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
48929 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
48930 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
48931 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
48932 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
48933 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
48934 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
48935 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
48936 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
48937 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
48938 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
48939 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
48940 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
48941
48942 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
48943 // K = 0x6ed9eba1
48944 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
48945 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
48946 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
48947 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
48948 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
48949 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
48950 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
48951 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
48952 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
48953 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
48954 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
48955 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
48956 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
48957 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
48958 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
48959 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
48960 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
48961
48962 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
48963 // K = 0x8f1bbcdc
48964 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
48965 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
48966 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
48967 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
48968 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
48969 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
48970 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
48971 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
48972 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
48973 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
48974 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
48975 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
48976 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
48977 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
48978 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
48979 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
48980 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
48981
48982 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
48983 // K = 0xa953fd4e
48984 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
48985 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
48986 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
48987 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
48988 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
48989 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
48990 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
48991 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
48992 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
48993 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
48994 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
48995 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
48996 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
48997 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
48998 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
48999 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
49000 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
49001
49002 var ar = this._a
49003 var br = this._b
49004 var cr = this._c
49005 var dr = this._d
49006 var er = this._e
49007
49008 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
49009 // K' = 0x50a28be6
49010 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
49011 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
49012 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
49013 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
49014 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
49015 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
49016 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
49017 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
49018 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
49019 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
49020 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
49021 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
49022 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
49023 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
49024 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
49025 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
49026 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
49027
49028 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
49029 // K' = 0x5c4dd124
49030 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
49031 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
49032 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
49033 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
49034 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
49035 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
49036 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
49037 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
49038 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
49039 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
49040 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
49041 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
49042 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
49043 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
49044 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
49045 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
49046 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
49047
49048 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
49049 // K' = 0x6d703ef3
49050 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
49051 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
49052 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
49053 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
49054 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
49055 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
49056 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
49057 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
49058 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
49059 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
49060 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
49061 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
49062 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
49063 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
49064 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
49065 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
49066 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
49067
49068 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
49069 // K' = 0x7a6d76e9
49070 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
49071 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
49072 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
49073 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
49074 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
49075 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
49076 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
49077 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
49078 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
49079 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
49080 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
49081 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
49082 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
49083 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
49084 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
49085 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
49086 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
49087
49088 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
49089 // K' = 0x00000000
49090 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
49091 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
49092 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
49093 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
49094 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
49095 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
49096 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
49097 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
49098 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
49099 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
49100 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
49101 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
49102 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
49103 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
49104 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
49105 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
49106 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
49107
49108 // change state
49109 var t = (this._b + cl + dr) | 0
49110 this._b = (this._c + dl + er) | 0
49111 this._c = (this._d + el + ar) | 0
49112 this._d = (this._e + al + br) | 0
49113 this._e = (this._a + bl + cr) | 0
49114 this._a = t
49115 }
49116
49117 RIPEMD160.prototype._digest = function () {
49118 // create padding and handle blocks
49119 this._block[this._blockOffset++] = 0x80
49120 if (this._blockOffset > 56) {
49121 this._block.fill(0, this._blockOffset, 64)
49122 this._update()
49123 this._blockOffset = 0
49124 }
49125
49126 this._block.fill(0, this._blockOffset, 56)
49127 this._block.writeUInt32LE(this._length[0], 56)
49128 this._block.writeUInt32LE(this._length[1], 60)
49129 this._update()
49130
49131 // produce result
49132 var buffer = new Buffer(20)
49133 buffer.writeInt32LE(this._a, 0)
49134 buffer.writeInt32LE(this._b, 4)
49135 buffer.writeInt32LE(this._c, 8)
49136 buffer.writeInt32LE(this._d, 12)
49137 buffer.writeInt32LE(this._e, 16)
49138 return buffer
49139 }
49140
49141 function rotl (x, n) {
49142 return (x << n) | (x >>> (32 - n))
49143 }
49144
49145 function fn1 (a, b, c, d, e, m, k, s) {
49146 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
49147 }
49148
49149 function fn2 (a, b, c, d, e, m, k, s) {
49150 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
49151 }
49152
49153 function fn3 (a, b, c, d, e, m, k, s) {
49154 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
49155 }
49156
49157 function fn4 (a, b, c, d, e, m, k, s) {
49158 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
49159 }
49160
49161 function fn5 (a, b, c, d, e, m, k, s) {
49162 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
49163 }
49164
49165 module.exports = RIPEMD160
49166
49167 }).call(this,require("buffer").Buffer)
49168 },{"buffer":5,"hash-base":113,"inherits":121}],128:[function(require,module,exports){
49169 /* eslint-disable node/no-deprecated-api */
49170 var buffer = require('buffer')
49171 var Buffer = buffer.Buffer
49172
49173 // alternative to using Object.keys for old browsers
49174 function copyProps (src, dst) {
49175 for (var key in src) {
49176 dst[key] = src[key]
49177 }
49178 }
49179 if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
49180 module.exports = buffer
49181 } else {
49182 // Copy properties from require('buffer')
49183 copyProps(buffer, exports)
49184 exports.Buffer = SafeBuffer
49185 }
49186
49187 function SafeBuffer (arg, encodingOrOffset, length) {
49188 return Buffer(arg, encodingOrOffset, length)
49189 }
49190
49191 // Copy static methods from Buffer
49192 copyProps(Buffer, SafeBuffer)
49193
49194 SafeBuffer.from = function (arg, encodingOrOffset, length) {
49195 if (typeof arg === 'number') {
49196 throw new TypeError('Argument must not be a number')
49197 }
49198 return Buffer(arg, encodingOrOffset, length)
49199 }
49200
49201 SafeBuffer.alloc = function (size, fill, encoding) {
49202 if (typeof size !== 'number') {
49203 throw new TypeError('Argument must be a number')
49204 }
49205 var buf = Buffer(size)
49206 if (fill !== undefined) {
49207 if (typeof encoding === 'string') {
49208 buf.fill(fill, encoding)
49209 } else {
49210 buf.fill(fill)
49211 }
49212 } else {
49213 buf.fill(0)
49214 }
49215 return buf
49216 }
49217
49218 SafeBuffer.allocUnsafe = function (size) {
49219 if (typeof size !== 'number') {
49220 throw new TypeError('Argument must be a number')
49221 }
49222 return Buffer(size)
49223 }
49224
49225 SafeBuffer.allocUnsafeSlow = function (size) {
49226 if (typeof size !== 'number') {
49227 throw new TypeError('Argument must be a number')
49228 }
49229 return buffer.SlowBuffer(size)
49230 }
49231
49232 },{"buffer":5}],129:[function(require,module,exports){
49233 var Buffer = require('safe-buffer').Buffer
49234
49235 // prototype class for hash functions
49236 function Hash (blockSize, finalSize) {
49237 this._block = Buffer.alloc(blockSize)
49238 this._finalSize = finalSize
49239 this._blockSize = blockSize
49240 this._len = 0
49241 }
49242
49243 Hash.prototype.update = function (data, enc) {
49244 if (typeof data === 'string') {
49245 enc = enc || 'utf8'
49246 data = Buffer.from(data, enc)
49247 }
49248
49249 var block = this._block
49250 var blockSize = this._blockSize
49251 var length = data.length
49252 var accum = this._len
49253
49254 for (var offset = 0; offset < length;) {
49255 var assigned = accum % blockSize
49256 var remainder = Math.min(length - offset, blockSize - assigned)
49257
49258 for (var i = 0; i < remainder; i++) {
49259 block[assigned + i] = data[offset + i]
49260 }
49261
49262 accum += remainder
49263 offset += remainder
49264
49265 if ((accum % blockSize) === 0) {
49266 this._update(block)
49267 }
49268 }
49269
49270 this._len += length
49271 return this
49272 }
49273
49274 Hash.prototype.digest = function (enc) {
49275 var rem = this._len % this._blockSize
49276
49277 this._block[rem] = 0x80
49278
49279 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
49280 // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
49281 this._block.fill(0, rem + 1)
49282
49283 if (rem >= this._finalSize) {
49284 this._update(this._block)
49285 this._block.fill(0)
49286 }
49287
49288 var bits = this._len * 8
49289
49290 // uint32
49291 if (bits <= 0xffffffff) {
49292 this._block.writeUInt32BE(bits, this._blockSize - 4)
49293
49294 // uint64
49295 } else {
49296 var lowBits = bits & 0xffffffff
49297 var highBits = (bits - lowBits) / 0x100000000
49298
49299 this._block.writeUInt32BE(highBits, this._blockSize - 8)
49300 this._block.writeUInt32BE(lowBits, this._blockSize - 4)
49301 }
49302
49303 this._update(this._block)
49304 var hash = this._hash()
49305
49306 return enc ? hash.toString(enc) : hash
49307 }
49308
49309 Hash.prototype._update = function () {
49310 throw new Error('_update must be implemented by subclass')
49311 }
49312
49313 module.exports = Hash
49314
49315 },{"safe-buffer":128}],130:[function(require,module,exports){
49316 var exports = module.exports = function SHA (algorithm) {
49317 algorithm = algorithm.toLowerCase()
49318
49319 var Algorithm = exports[algorithm]
49320 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
49321
49322 return new Algorithm()
49323 }
49324
49325 exports.sha = require('./sha')
49326 exports.sha1 = require('./sha1')
49327 exports.sha224 = require('./sha224')
49328 exports.sha256 = require('./sha256')
49329 exports.sha384 = require('./sha384')
49330 exports.sha512 = require('./sha512')
49331
49332 },{"./sha":131,"./sha1":132,"./sha224":133,"./sha256":134,"./sha384":135,"./sha512":136}],131:[function(require,module,exports){
49333 /*
49334 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
49335 * in FIPS PUB 180-1
49336 * This source code is derived from sha1.js of the same repository.
49337 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
49338 * operation was added.
49339 */
49340
49341 var inherits = require('inherits')
49342 var Hash = require('./hash')
49343 var Buffer = require('safe-buffer').Buffer
49344
49345 var K = [
49346 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
49347 ]
49348
49349 var W = new Array(80)
49350
49351 function Sha () {
49352 this.init()
49353 this._w = W
49354
49355 Hash.call(this, 64, 56)
49356 }
49357
49358 inherits(Sha, Hash)
49359
49360 Sha.prototype.init = function () {
49361 this._a = 0x67452301
49362 this._b = 0xefcdab89
49363 this._c = 0x98badcfe
49364 this._d = 0x10325476
49365 this._e = 0xc3d2e1f0
49366
49367 return this
49368 }
49369
49370 function rotl5 (num) {
49371 return (num << 5) | (num >>> 27)
49372 }
49373
49374 function rotl30 (num) {
49375 return (num << 30) | (num >>> 2)
49376 }
49377
49378 function ft (s, b, c, d) {
49379 if (s === 0) return (b & c) | ((~b) & d)
49380 if (s === 2) return (b & c) | (b & d) | (c & d)
49381 return b ^ c ^ d
49382 }
49383
49384 Sha.prototype._update = function (M) {
49385 var W = this._w
49386
49387 var a = this._a | 0
49388 var b = this._b | 0
49389 var c = this._c | 0
49390 var d = this._d | 0
49391 var e = this._e | 0
49392
49393 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
49394 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
49395
49396 for (var j = 0; j < 80; ++j) {
49397 var s = ~~(j / 20)
49398 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
49399
49400 e = d
49401 d = c
49402 c = rotl30(b)
49403 b = a
49404 a = t
49405 }
49406
49407 this._a = (a + this._a) | 0
49408 this._b = (b + this._b) | 0
49409 this._c = (c + this._c) | 0
49410 this._d = (d + this._d) | 0
49411 this._e = (e + this._e) | 0
49412 }
49413
49414 Sha.prototype._hash = function () {
49415 var H = Buffer.allocUnsafe(20)
49416
49417 H.writeInt32BE(this._a | 0, 0)
49418 H.writeInt32BE(this._b | 0, 4)
49419 H.writeInt32BE(this._c | 0, 8)
49420 H.writeInt32BE(this._d | 0, 12)
49421 H.writeInt32BE(this._e | 0, 16)
49422
49423 return H
49424 }
49425
49426 module.exports = Sha
49427
49428 },{"./hash":129,"inherits":121,"safe-buffer":128}],132:[function(require,module,exports){
49429 /*
49430 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
49431 * in FIPS PUB 180-1
49432 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
49433 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
49434 * Distributed under the BSD License
49435 * See http://pajhome.org.uk/crypt/md5 for details.
49436 */
49437
49438 var inherits = require('inherits')
49439 var Hash = require('./hash')
49440 var Buffer = require('safe-buffer').Buffer
49441
49442 var K = [
49443 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
49444 ]
49445
49446 var W = new Array(80)
49447
49448 function Sha1 () {
49449 this.init()
49450 this._w = W
49451
49452 Hash.call(this, 64, 56)
49453 }
49454
49455 inherits(Sha1, Hash)
49456
49457 Sha1.prototype.init = function () {
49458 this._a = 0x67452301
49459 this._b = 0xefcdab89
49460 this._c = 0x98badcfe
49461 this._d = 0x10325476
49462 this._e = 0xc3d2e1f0
49463
49464 return this
49465 }
49466
49467 function rotl1 (num) {
49468 return (num << 1) | (num >>> 31)
49469 }
49470
49471 function rotl5 (num) {
49472 return (num << 5) | (num >>> 27)
49473 }
49474
49475 function rotl30 (num) {
49476 return (num << 30) | (num >>> 2)
49477 }
49478
49479 function ft (s, b, c, d) {
49480 if (s === 0) return (b & c) | ((~b) & d)
49481 if (s === 2) return (b & c) | (b & d) | (c & d)
49482 return b ^ c ^ d
49483 }
49484
49485 Sha1.prototype._update = function (M) {
49486 var W = this._w
49487
49488 var a = this._a | 0
49489 var b = this._b | 0
49490 var c = this._c | 0
49491 var d = this._d | 0
49492 var e = this._e | 0
49493
49494 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
49495 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
49496
49497 for (var j = 0; j < 80; ++j) {
49498 var s = ~~(j / 20)
49499 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
49500
49501 e = d
49502 d = c
49503 c = rotl30(b)
49504 b = a
49505 a = t
49506 }
49507
49508 this._a = (a + this._a) | 0
49509 this._b = (b + this._b) | 0
49510 this._c = (c + this._c) | 0
49511 this._d = (d + this._d) | 0
49512 this._e = (e + this._e) | 0
49513 }
49514
49515 Sha1.prototype._hash = function () {
49516 var H = Buffer.allocUnsafe(20)
49517
49518 H.writeInt32BE(this._a | 0, 0)
49519 H.writeInt32BE(this._b | 0, 4)
49520 H.writeInt32BE(this._c | 0, 8)
49521 H.writeInt32BE(this._d | 0, 12)
49522 H.writeInt32BE(this._e | 0, 16)
49523
49524 return H
49525 }
49526
49527 module.exports = Sha1
49528
49529 },{"./hash":129,"inherits":121,"safe-buffer":128}],133:[function(require,module,exports){
49530 /**
49531 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
49532 * in FIPS 180-2
49533 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
49534 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
49535 *
49536 */
49537
49538 var inherits = require('inherits')
49539 var Sha256 = require('./sha256')
49540 var Hash = require('./hash')
49541 var Buffer = require('safe-buffer').Buffer
49542
49543 var W = new Array(64)
49544
49545 function Sha224 () {
49546 this.init()
49547
49548 this._w = W // new Array(64)
49549
49550 Hash.call(this, 64, 56)
49551 }
49552
49553 inherits(Sha224, Sha256)
49554
49555 Sha224.prototype.init = function () {
49556 this._a = 0xc1059ed8
49557 this._b = 0x367cd507
49558 this._c = 0x3070dd17
49559 this._d = 0xf70e5939
49560 this._e = 0xffc00b31
49561 this._f = 0x68581511
49562 this._g = 0x64f98fa7
49563 this._h = 0xbefa4fa4
49564
49565 return this
49566 }
49567
49568 Sha224.prototype._hash = function () {
49569 var H = Buffer.allocUnsafe(28)
49570
49571 H.writeInt32BE(this._a, 0)
49572 H.writeInt32BE(this._b, 4)
49573 H.writeInt32BE(this._c, 8)
49574 H.writeInt32BE(this._d, 12)
49575 H.writeInt32BE(this._e, 16)
49576 H.writeInt32BE(this._f, 20)
49577 H.writeInt32BE(this._g, 24)
49578
49579 return H
49580 }
49581
49582 module.exports = Sha224
49583
49584 },{"./hash":129,"./sha256":134,"inherits":121,"safe-buffer":128}],134:[function(require,module,exports){
49585 /**
49586 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
49587 * in FIPS 180-2
49588 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
49589 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
49590 *
49591 */
49592
49593 var inherits = require('inherits')
49594 var Hash = require('./hash')
49595 var Buffer = require('safe-buffer').Buffer
49596
49597 var K = [
49598 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
49599 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
49600 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
49601 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
49602 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
49603 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
49604 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
49605 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
49606 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
49607 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
49608 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
49609 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
49610 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
49611 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
49612 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
49613 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
49614 ]
49615
49616 var W = new Array(64)
49617
49618 function Sha256 () {
49619 this.init()
49620
49621 this._w = W // new Array(64)
49622
49623 Hash.call(this, 64, 56)
49624 }
49625
49626 inherits(Sha256, Hash)
49627
49628 Sha256.prototype.init = function () {
49629 this._a = 0x6a09e667
49630 this._b = 0xbb67ae85
49631 this._c = 0x3c6ef372
49632 this._d = 0xa54ff53a
49633 this._e = 0x510e527f
49634 this._f = 0x9b05688c
49635 this._g = 0x1f83d9ab
49636 this._h = 0x5be0cd19
49637
49638 return this
49639 }
49640
49641 function ch (x, y, z) {
49642 return z ^ (x & (y ^ z))
49643 }
49644
49645 function maj (x, y, z) {
49646 return (x & y) | (z & (x | y))
49647 }
49648
49649 function sigma0 (x) {
49650 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
49651 }
49652
49653 function sigma1 (x) {
49654 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
49655 }
49656
49657 function gamma0 (x) {
49658 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
49659 }
49660
49661 function gamma1 (x) {
49662 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
49663 }
49664
49665 Sha256.prototype._update = function (M) {
49666 var W = this._w
49667
49668 var a = this._a | 0
49669 var b = this._b | 0
49670 var c = this._c | 0
49671 var d = this._d | 0
49672 var e = this._e | 0
49673 var f = this._f | 0
49674 var g = this._g | 0
49675 var h = this._h | 0
49676
49677 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
49678 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
49679
49680 for (var j = 0; j < 64; ++j) {
49681 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
49682 var T2 = (sigma0(a) + maj(a, b, c)) | 0
49683
49684 h = g
49685 g = f
49686 f = e
49687 e = (d + T1) | 0
49688 d = c
49689 c = b
49690 b = a
49691 a = (T1 + T2) | 0
49692 }
49693
49694 this._a = (a + this._a) | 0
49695 this._b = (b + this._b) | 0
49696 this._c = (c + this._c) | 0
49697 this._d = (d + this._d) | 0
49698 this._e = (e + this._e) | 0
49699 this._f = (f + this._f) | 0
49700 this._g = (g + this._g) | 0
49701 this._h = (h + this._h) | 0
49702 }
49703
49704 Sha256.prototype._hash = function () {
49705 var H = Buffer.allocUnsafe(32)
49706
49707 H.writeInt32BE(this._a, 0)
49708 H.writeInt32BE(this._b, 4)
49709 H.writeInt32BE(this._c, 8)
49710 H.writeInt32BE(this._d, 12)
49711 H.writeInt32BE(this._e, 16)
49712 H.writeInt32BE(this._f, 20)
49713 H.writeInt32BE(this._g, 24)
49714 H.writeInt32BE(this._h, 28)
49715
49716 return H
49717 }
49718
49719 module.exports = Sha256
49720
49721 },{"./hash":129,"inherits":121,"safe-buffer":128}],135:[function(require,module,exports){
49722 var inherits = require('inherits')
49723 var SHA512 = require('./sha512')
49724 var Hash = require('./hash')
49725 var Buffer = require('safe-buffer').Buffer
49726
49727 var W = new Array(160)
49728
49729 function Sha384 () {
49730 this.init()
49731 this._w = W
49732
49733 Hash.call(this, 128, 112)
49734 }
49735
49736 inherits(Sha384, SHA512)
49737
49738 Sha384.prototype.init = function () {
49739 this._ah = 0xcbbb9d5d
49740 this._bh = 0x629a292a
49741 this._ch = 0x9159015a
49742 this._dh = 0x152fecd8
49743 this._eh = 0x67332667
49744 this._fh = 0x8eb44a87
49745 this._gh = 0xdb0c2e0d
49746 this._hh = 0x47b5481d
49747
49748 this._al = 0xc1059ed8
49749 this._bl = 0x367cd507
49750 this._cl = 0x3070dd17
49751 this._dl = 0xf70e5939
49752 this._el = 0xffc00b31
49753 this._fl = 0x68581511
49754 this._gl = 0x64f98fa7
49755 this._hl = 0xbefa4fa4
49756
49757 return this
49758 }
49759
49760 Sha384.prototype._hash = function () {
49761 var H = Buffer.allocUnsafe(48)
49762
49763 function writeInt64BE (h, l, offset) {
49764 H.writeInt32BE(h, offset)
49765 H.writeInt32BE(l, offset + 4)
49766 }
49767
49768 writeInt64BE(this._ah, this._al, 0)
49769 writeInt64BE(this._bh, this._bl, 8)
49770 writeInt64BE(this._ch, this._cl, 16)
49771 writeInt64BE(this._dh, this._dl, 24)
49772 writeInt64BE(this._eh, this._el, 32)
49773 writeInt64BE(this._fh, this._fl, 40)
49774
49775 return H
49776 }
49777
49778 module.exports = Sha384
49779
49780 },{"./hash":129,"./sha512":136,"inherits":121,"safe-buffer":128}],136:[function(require,module,exports){
49781 var inherits = require('inherits')
49782 var Hash = require('./hash')
49783 var Buffer = require('safe-buffer').Buffer
49784
49785 var K = [
49786 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
49787 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
49788 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
49789 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
49790 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
49791 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
49792 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
49793 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
49794 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
49795 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
49796 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
49797 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
49798 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
49799 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
49800 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
49801 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
49802 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
49803 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
49804 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
49805 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
49806 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
49807 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
49808 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
49809 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
49810 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
49811 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
49812 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
49813 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
49814 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
49815 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
49816 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
49817 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
49818 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
49819 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
49820 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
49821 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
49822 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
49823 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
49824 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
49825 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
49826 ]
49827
49828 var W = new Array(160)
49829
49830 function Sha512 () {
49831 this.init()
49832 this._w = W
49833
49834 Hash.call(this, 128, 112)
49835 }
49836
49837 inherits(Sha512, Hash)
49838
49839 Sha512.prototype.init = function () {
49840 this._ah = 0x6a09e667
49841 this._bh = 0xbb67ae85
49842 this._ch = 0x3c6ef372
49843 this._dh = 0xa54ff53a
49844 this._eh = 0x510e527f
49845 this._fh = 0x9b05688c
49846 this._gh = 0x1f83d9ab
49847 this._hh = 0x5be0cd19
49848
49849 this._al = 0xf3bcc908
49850 this._bl = 0x84caa73b
49851 this._cl = 0xfe94f82b
49852 this._dl = 0x5f1d36f1
49853 this._el = 0xade682d1
49854 this._fl = 0x2b3e6c1f
49855 this._gl = 0xfb41bd6b
49856 this._hl = 0x137e2179
49857
49858 return this
49859 }
49860
49861 function Ch (x, y, z) {
49862 return z ^ (x & (y ^ z))
49863 }
49864
49865 function maj (x, y, z) {
49866 return (x & y) | (z & (x | y))
49867 }
49868
49869 function sigma0 (x, xl) {
49870 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
49871 }
49872
49873 function sigma1 (x, xl) {
49874 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
49875 }
49876
49877 function Gamma0 (x, xl) {
49878 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
49879 }
49880
49881 function Gamma0l (x, xl) {
49882 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
49883 }
49884
49885 function Gamma1 (x, xl) {
49886 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
49887 }
49888
49889 function Gamma1l (x, xl) {
49890 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
49891 }
49892
49893 function getCarry (a, b) {
49894 return (a >>> 0) < (b >>> 0) ? 1 : 0
49895 }
49896
49897 Sha512.prototype._update = function (M) {
49898 var W = this._w
49899
49900 var ah = this._ah | 0
49901 var bh = this._bh | 0
49902 var ch = this._ch | 0
49903 var dh = this._dh | 0
49904 var eh = this._eh | 0
49905 var fh = this._fh | 0
49906 var gh = this._gh | 0
49907 var hh = this._hh | 0
49908
49909 var al = this._al | 0
49910 var bl = this._bl | 0
49911 var cl = this._cl | 0
49912 var dl = this._dl | 0
49913 var el = this._el | 0
49914 var fl = this._fl | 0
49915 var gl = this._gl | 0
49916 var hl = this._hl | 0
49917
49918 for (var i = 0; i < 32; i += 2) {
49919 W[i] = M.readInt32BE(i * 4)
49920 W[i + 1] = M.readInt32BE(i * 4 + 4)
49921 }
49922 for (; i < 160; i += 2) {
49923 var xh = W[i - 15 * 2]
49924 var xl = W[i - 15 * 2 + 1]
49925 var gamma0 = Gamma0(xh, xl)
49926 var gamma0l = Gamma0l(xl, xh)
49927
49928 xh = W[i - 2 * 2]
49929 xl = W[i - 2 * 2 + 1]
49930 var gamma1 = Gamma1(xh, xl)
49931 var gamma1l = Gamma1l(xl, xh)
49932
49933 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
49934 var Wi7h = W[i - 7 * 2]
49935 var Wi7l = W[i - 7 * 2 + 1]
49936
49937 var Wi16h = W[i - 16 * 2]
49938 var Wi16l = W[i - 16 * 2 + 1]
49939
49940 var Wil = (gamma0l + Wi7l) | 0
49941 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
49942 Wil = (Wil + gamma1l) | 0
49943 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
49944 Wil = (Wil + Wi16l) | 0
49945 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
49946
49947 W[i] = Wih
49948 W[i + 1] = Wil
49949 }
49950
49951 for (var j = 0; j < 160; j += 2) {
49952 Wih = W[j]
49953 Wil = W[j + 1]
49954
49955 var majh = maj(ah, bh, ch)
49956 var majl = maj(al, bl, cl)
49957
49958 var sigma0h = sigma0(ah, al)
49959 var sigma0l = sigma0(al, ah)
49960 var sigma1h = sigma1(eh, el)
49961 var sigma1l = sigma1(el, eh)
49962
49963 // t1 = h + sigma1 + ch + K[j] + W[j]
49964 var Kih = K[j]
49965 var Kil = K[j + 1]
49966
49967 var chh = Ch(eh, fh, gh)
49968 var chl = Ch(el, fl, gl)
49969
49970 var t1l = (hl + sigma1l) | 0
49971 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
49972 t1l = (t1l + chl) | 0
49973 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
49974 t1l = (t1l + Kil) | 0
49975 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
49976 t1l = (t1l + Wil) | 0
49977 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
49978
49979 // t2 = sigma0 + maj
49980 var t2l = (sigma0l + majl) | 0
49981 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
49982
49983 hh = gh
49984 hl = gl
49985 gh = fh
49986 gl = fl
49987 fh = eh
49988 fl = el
49989 el = (dl + t1l) | 0
49990 eh = (dh + t1h + getCarry(el, dl)) | 0
49991 dh = ch
49992 dl = cl
49993 ch = bh
49994 cl = bl
49995 bh = ah
49996 bl = al
49997 al = (t1l + t2l) | 0
49998 ah = (t1h + t2h + getCarry(al, t1l)) | 0
49999 }
50000
50001 this._al = (this._al + al) | 0
50002 this._bl = (this._bl + bl) | 0
50003 this._cl = (this._cl + cl) | 0
50004 this._dl = (this._dl + dl) | 0
50005 this._el = (this._el + el) | 0
50006 this._fl = (this._fl + fl) | 0
50007 this._gl = (this._gl + gl) | 0
50008 this._hl = (this._hl + hl) | 0
50009
50010 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
50011 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
50012 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
50013 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
50014 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
50015 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
50016 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
50017 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
50018 }
50019
50020 Sha512.prototype._hash = function () {
50021 var H = Buffer.allocUnsafe(64)
50022
50023 function writeInt64BE (h, l, offset) {
50024 H.writeInt32BE(h, offset)
50025 H.writeInt32BE(l, offset + 4)
50026 }
50027
50028 writeInt64BE(this._ah, this._al, 0)
50029 writeInt64BE(this._bh, this._bl, 8)
50030 writeInt64BE(this._ch, this._cl, 16)
50031 writeInt64BE(this._dh, this._dl, 24)
50032 writeInt64BE(this._eh, this._el, 32)
50033 writeInt64BE(this._fh, this._fl, 40)
50034 writeInt64BE(this._gh, this._gl, 48)
50035 writeInt64BE(this._hh, this._hl, 56)
50036
50037 return H
50038 }
50039
50040 module.exports = Sha512
50041
50042 },{"./hash":129,"inherits":121,"safe-buffer":128}],137:[function(require,module,exports){
50043 var native = require('./native')
50044
50045 function getTypeName (fn) {
50046 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1]
50047 }
50048
50049 function getValueTypeName (value) {
50050 return native.Nil(value) ? '' : getTypeName(value.constructor)
50051 }
50052
50053 function getValue (value) {
50054 if (native.Function(value)) return ''
50055 if (native.String(value)) return JSON.stringify(value)
50056 if (value && native.Object(value)) return ''
50057 return value
50058 }
50059
50060 function tfJSON (type) {
50061 if (native.Function(type)) return type.toJSON ? type.toJSON() : getTypeName(type)
50062 if (native.Array(type)) return 'Array'
50063 if (type && native.Object(type)) return 'Object'
50064
50065 return type !== undefined ? type : ''
50066 }
50067
50068 function tfErrorString (type, value, valueTypeName) {
50069 var valueJson = getValue(value)
50070
50071 return 'Expected ' + tfJSON(type) + ', got' +
50072 (valueTypeName !== '' ? ' ' + valueTypeName : '') +
50073 (valueJson !== '' ? ' ' + valueJson : '')
50074 }
50075
50076 function TfTypeError (type, value, valueTypeName) {
50077 valueTypeName = valueTypeName || getValueTypeName(value)
50078 this.message = tfErrorString(type, value, valueTypeName)
50079
50080 Error.captureStackTrace(this, TfTypeError)
50081 this.__type = type
50082 this.__value = value
50083 this.__valueTypeName = valueTypeName
50084 }
50085
50086 TfTypeError.prototype = Object.create(Error.prototype)
50087 TfTypeError.prototype.constructor = TfTypeError
50088
50089 function tfPropertyErrorString (type, label, name, value, valueTypeName) {
50090 var description = '" of type '
50091 if (label === 'key') description = '" with key type '
50092
50093 return tfErrorString('property "' + tfJSON(name) + description + tfJSON(type), value, valueTypeName)
50094 }
50095
50096 function TfPropertyTypeError (type, property, label, value, valueTypeName) {
50097 if (type) {
50098 valueTypeName = valueTypeName || getValueTypeName(value)
50099 this.message = tfPropertyErrorString(type, label, property, value, valueTypeName)
50100 } else {
50101 this.message = 'Unexpected property "' + property + '"'
50102 }
50103
50104 Error.captureStackTrace(this, TfTypeError)
50105 this.__label = label
50106 this.__property = property
50107 this.__type = type
50108 this.__value = value
50109 this.__valueTypeName = valueTypeName
50110 }
50111
50112 TfPropertyTypeError.prototype = Object.create(Error.prototype)
50113 TfPropertyTypeError.prototype.constructor = TfTypeError
50114
50115 function tfCustomError (expected, actual) {
50116 return new TfTypeError(expected, {}, actual)
50117 }
50118
50119 function tfSubError (e, property, label) {
50120 // sub child?
50121 if (e instanceof TfPropertyTypeError) {
50122 property = property + '.' + e.__property
50123
50124 e = new TfPropertyTypeError(
50125 e.__type, property, e.__label, e.__value, e.__valueTypeName
50126 )
50127
50128 // child?
50129 } else if (e instanceof TfTypeError) {
50130 e = new TfPropertyTypeError(
50131 e.__type, property, label, e.__value, e.__valueTypeName
50132 )
50133 }
50134
50135 Error.captureStackTrace(e)
50136 return e
50137 }
50138
50139 module.exports = {
50140 TfTypeError: TfTypeError,
50141 TfPropertyTypeError: TfPropertyTypeError,
50142 tfCustomError: tfCustomError,
50143 tfSubError: tfSubError,
50144 tfJSON: tfJSON,
50145 getValueTypeName: getValueTypeName
50146 }
50147
50148 },{"./native":140}],138:[function(require,module,exports){
50149 (function (Buffer){
50150 var NATIVE = require('./native')
50151 var ERRORS = require('./errors')
50152
50153 function _Buffer (value) {
50154 return Buffer.isBuffer(value)
50155 }
50156
50157 function Hex (value) {
50158 return typeof value === 'string' && /^([0-9a-f]{2})+$/i.test(value)
50159 }
50160
50161 function _LengthN (type, length) {
50162 var name = type.toJSON()
50163
50164 function Length (value) {
50165 if (!type(value)) return false
50166 if (value.length === length) return true
50167
50168 throw ERRORS.tfCustomError(name + '(Length: ' + length + ')', name + '(Length: ' + value.length + ')')
50169 }
50170 Length.toJSON = function () { return name }
50171
50172 return Length
50173 }
50174
50175 var _ArrayN = _LengthN.bind(null, NATIVE.Array)
50176 var _BufferN = _LengthN.bind(null, _Buffer)
50177 var _HexN = _LengthN.bind(null, Hex)
50178 var _StringN = _LengthN.bind(null, NATIVE.String)
50179
50180 var UINT53_MAX = Math.pow(2, 53) - 1
50181
50182 function Finite (value) {
50183 return typeof value === 'number' && isFinite(value)
50184 }
50185 function Int8 (value) { return ((value << 24) >> 24) === value }
50186 function Int16 (value) { return ((value << 16) >> 16) === value }
50187 function Int32 (value) { return (value | 0) === value }
50188 function UInt8 (value) { return (value & 0xff) === value }
50189 function UInt16 (value) { return (value & 0xffff) === value }
50190 function UInt32 (value) { return (value >>> 0) === value }
50191 function UInt53 (value) {
50192 return typeof value === 'number' &&
50193 value >= 0 &&
50194 value <= UINT53_MAX &&
50195 Math.floor(value) === value
50196 }
50197
50198 var types = {
50199 ArrayN: _ArrayN,
50200 Buffer: _Buffer,
50201 BufferN: _BufferN,
50202 Finite: Finite,
50203 Hex: Hex,
50204 HexN: _HexN,
50205 Int8: Int8,
50206 Int16: Int16,
50207 Int32: Int32,
50208 StringN: _StringN,
50209 UInt8: UInt8,
50210 UInt16: UInt16,
50211 UInt32: UInt32,
50212 UInt53: UInt53
50213 }
50214
50215 for (var typeName in types) {
50216 types[typeName].toJSON = function (t) {
50217 return t
50218 }.bind(null, typeName)
50219 }
50220
50221 module.exports = types
50222
50223 }).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
50224 },{"../../../../../.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){
50225 var ERRORS = require('./errors')
50226 var NATIVE = require('./native')
50227
50228 // short-hand
50229 var tfJSON = ERRORS.tfJSON
50230 var TfTypeError = ERRORS.TfTypeError
50231 var TfPropertyTypeError = ERRORS.TfPropertyTypeError
50232 var tfSubError = ERRORS.tfSubError
50233 var getValueTypeName = ERRORS.getValueTypeName
50234
50235 var TYPES = {
50236 arrayOf: function arrayOf (type) {
50237 type = compile(type)
50238
50239 function _arrayOf (array, strict) {
50240 if (!NATIVE.Array(array)) return false
50241 if (NATIVE.Nil(array)) return false
50242
50243 return array.every(function (value, i) {
50244 try {
50245 return typeforce(type, value, strict)
50246 } catch (e) {
50247 throw tfSubError(e, i)
50248 }
50249 })
50250 }
50251 _arrayOf.toJSON = function () { return '[' + tfJSON(type) + ']' }
50252
50253 return _arrayOf
50254 },
50255
50256 maybe: function maybe (type) {
50257 type = compile(type)
50258
50259 function _maybe (value, strict) {
50260 return NATIVE.Nil(value) || type(value, strict, maybe)
50261 }
50262 _maybe.toJSON = function () { return '?' + tfJSON(type) }
50263
50264 return _maybe
50265 },
50266
50267 map: function map (propertyType, propertyKeyType) {
50268 propertyType = compile(propertyType)
50269 if (propertyKeyType) propertyKeyType = compile(propertyKeyType)
50270
50271 function _map (value, strict) {
50272 if (!NATIVE.Object(value)) return false
50273 if (NATIVE.Nil(value)) return false
50274
50275 for (var propertyName in value) {
50276 try {
50277 if (propertyKeyType) {
50278 typeforce(propertyKeyType, propertyName, strict)
50279 }
50280 } catch (e) {
50281 throw tfSubError(e, propertyName, 'key')
50282 }
50283
50284 try {
50285 var propertyValue = value[propertyName]
50286 typeforce(propertyType, propertyValue, strict)
50287 } catch (e) {
50288 throw tfSubError(e, propertyName)
50289 }
50290 }
50291
50292 return true
50293 }
50294
50295 if (propertyKeyType) {
50296 _map.toJSON = function () {
50297 return '{' + tfJSON(propertyKeyType) + ': ' + tfJSON(propertyType) + '}'
50298 }
50299 } else {
50300 _map.toJSON = function () { return '{' + tfJSON(propertyType) + '}' }
50301 }
50302
50303 return _map
50304 },
50305
50306 object: function object (uncompiled) {
50307 var type = {}
50308
50309 for (var typePropertyName in uncompiled) {
50310 type[typePropertyName] = compile(uncompiled[typePropertyName])
50311 }
50312
50313 function _object (value, strict) {
50314 if (!NATIVE.Object(value)) return false
50315 if (NATIVE.Nil(value)) return false
50316
50317 var propertyName
50318
50319 try {
50320 for (propertyName in type) {
50321 var propertyType = type[propertyName]
50322 var propertyValue = value[propertyName]
50323
50324 typeforce(propertyType, propertyValue, strict)
50325 }
50326 } catch (e) {
50327 throw tfSubError(e, propertyName)
50328 }
50329
50330 if (strict) {
50331 for (propertyName in value) {
50332 if (type[propertyName]) continue
50333
50334 throw new TfPropertyTypeError(undefined, propertyName)
50335 }
50336 }
50337
50338 return true
50339 }
50340 _object.toJSON = function () { return tfJSON(type) }
50341
50342 return _object
50343 },
50344
50345 oneOf: function oneOf () {
50346 var types = [].slice.call(arguments).map(compile)
50347
50348 function _oneOf (value, strict) {
50349 return types.some(function (type) {
50350 try {
50351 return typeforce(type, value, strict)
50352 } catch (e) {
50353 return false
50354 }
50355 })
50356 }
50357 _oneOf.toJSON = function () { return types.map(tfJSON).join('|') }
50358
50359 return _oneOf
50360 },
50361
50362 quacksLike: function quacksLike (type) {
50363 function _quacksLike (value) {
50364 return type === getValueTypeName(value)
50365 }
50366 _quacksLike.toJSON = function () { return type }
50367
50368 return _quacksLike
50369 },
50370
50371 tuple: function tuple () {
50372 var types = [].slice.call(arguments).map(compile)
50373
50374 function _tuple (values, strict) {
50375 if (NATIVE.Nil(values)) return false
50376 if (NATIVE.Nil(values.length)) return false
50377 if (strict && (values.length !== types.length)) return false
50378
50379 return types.every(function (type, i) {
50380 try {
50381 return typeforce(type, values[i], strict)
50382 } catch (e) {
50383 throw tfSubError(e, i)
50384 }
50385 })
50386 }
50387 _tuple.toJSON = function () { return '(' + types.map(tfJSON).join(', ') + ')' }
50388
50389 return _tuple
50390 },
50391
50392 value: function value (expected) {
50393 function _value (actual) {
50394 return actual === expected
50395 }
50396 _value.toJSON = function () { return expected }
50397
50398 return _value
50399 }
50400 }
50401
50402 function compile (type) {
50403 if (NATIVE.String(type)) {
50404 if (type[0] === '?') return TYPES.maybe(type.slice(1))
50405
50406 return NATIVE[type] || TYPES.quacksLike(type)
50407 } else if (type && NATIVE.Object(type)) {
50408 if (NATIVE.Array(type)) return TYPES.arrayOf(type[0])
50409
50410 return TYPES.object(type)
50411 } else if (NATIVE.Function(type)) {
50412 return type
50413 }
50414
50415 return TYPES.value(type)
50416 }
50417
50418 function typeforce (type, value, strict, surrogate) {
50419 if (NATIVE.Function(type)) {
50420 if (type(value, strict)) return true
50421
50422 throw new TfTypeError(surrogate || type, value)
50423 }
50424
50425 // JIT
50426 return typeforce(compile(type), value, strict)
50427 }
50428
50429 // assign types to typeforce function
50430 for (var typeName in NATIVE) {
50431 typeforce[typeName] = NATIVE[typeName]
50432 }
50433
50434 for (typeName in TYPES) {
50435 typeforce[typeName] = TYPES[typeName]
50436 }
50437
50438 var EXTRA = require('./extra')
50439 for (typeName in EXTRA) {
50440 typeforce[typeName] = EXTRA[typeName]
50441 }
50442
50443 // async wrapper
50444 function __async (type, value, strict, callback) {
50445 // default to falsy strict if using shorthand overload
50446 if (typeof strict === 'function') return __async(type, value, false, strict)
50447
50448 try {
50449 typeforce(type, value, strict)
50450 } catch (e) {
50451 return callback(e)
50452 }
50453
50454 callback()
50455 }
50456
50457 typeforce.async = __async
50458 typeforce.compile = compile
50459 typeforce.TfTypeError = TfTypeError
50460 typeforce.TfPropertyTypeError = TfPropertyTypeError
50461
50462 module.exports = typeforce
50463
50464 },{"./errors":137,"./extra":138,"./native":140}],140:[function(require,module,exports){
50465 var types = {
50466 Array: function (value) { return value !== null && value !== undefined && value.constructor === Array },
50467 Boolean: function (value) { return typeof value === 'boolean' },
50468 Function: function (value) { return typeof value === 'function' },
50469 Nil: function (value) { return value === undefined || value === null },
50470 Number: function (value) { return typeof value === 'number' },
50471 Object: function (value) { return typeof value === 'object' },
50472 String: function (value) { return typeof value === 'string' },
50473 '': function () { return true }
50474 }
50475
50476 // TODO: deprecate
50477 types.Null = types.Nil
50478
50479 for (var typeName in types) {
50480 types[typeName].toJSON = function (t) {
50481 return t
50482 }.bind(null, typeName)
50483 }
50484
50485 module.exports = types
50486
50487 },{}],141:[function(require,module,exports){
50488 (function (Buffer){
50489 'use strict'
50490
50491 // Number.MAX_SAFE_INTEGER
50492 var MAX_SAFE_INTEGER = 9007199254740991
50493
50494 function checkUInt53 (n) {
50495 if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range')
50496 }
50497
50498 function encode (number, buffer, offset) {
50499 checkUInt53(number)
50500
50501 if (!buffer) buffer = new Buffer(encodingLength(number))
50502 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
50503 if (!offset) offset = 0
50504
50505 // 8 bit
50506 if (number < 0xfd) {
50507 buffer.writeUInt8(number, offset)
50508 encode.bytes = 1
50509
50510 // 16 bit
50511 } else if (number <= 0xffff) {
50512 buffer.writeUInt8(0xfd, offset)
50513 buffer.writeUInt16LE(number, offset + 1)
50514 encode.bytes = 3
50515
50516 // 32 bit
50517 } else if (number <= 0xffffffff) {
50518 buffer.writeUInt8(0xfe, offset)
50519 buffer.writeUInt32LE(number, offset + 1)
50520 encode.bytes = 5
50521
50522 // 64 bit
50523 } else {
50524 buffer.writeUInt8(0xff, offset)
50525 buffer.writeUInt32LE(number >>> 0, offset + 1)
50526 buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5)
50527 encode.bytes = 9
50528 }
50529
50530 return buffer
50531 }
50532
50533 function decode (buffer, offset) {
50534 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
50535 if (!offset) offset = 0
50536
50537 var first = buffer.readUInt8(offset)
50538
50539 // 8 bit
50540 if (first < 0xfd) {
50541 decode.bytes = 1
50542 return first
50543
50544 // 16 bit
50545 } else if (first === 0xfd) {
50546 decode.bytes = 3
50547 return buffer.readUInt16LE(offset + 1)
50548
50549 // 32 bit
50550 } else if (first === 0xfe) {
50551 decode.bytes = 5
50552 return buffer.readUInt32LE(offset + 1)
50553
50554 // 64 bit
50555 } else {
50556 decode.bytes = 9
50557 var lo = buffer.readUInt32LE(offset + 1)
50558 var hi = buffer.readUInt32LE(offset + 5)
50559 var number = hi * 0x0100000000 + lo
50560 checkUInt53(number)
50561
50562 return number
50563 }
50564 }
50565
50566 function encodingLength (number) {
50567 checkUInt53(number)
50568
50569 return (
50570 number < 0xfd ? 1
50571 : number <= 0xffff ? 3
50572 : number <= 0xffffffff ? 5
50573 : 9
50574 )
50575 }
50576
50577 module.exports = { encode: encode, decode: decode, encodingLength: encodingLength }
50578
50579 }).call(this,require("buffer").Buffer)
50580 },{"buffer":5}],142:[function(require,module,exports){
50581 (function (Buffer){
50582 var bs58check = require('bs58check')
50583
50584 function decodeRaw (buffer, version) {
50585 // check version only if defined
50586 if (version !== undefined && buffer[0] !== version) throw new Error('Invalid network version')
50587
50588 // uncompressed
50589 if (buffer.length === 33) {
50590 return {
50591 version: buffer[0],
50592 privateKey: buffer.slice(1, 33),
50593 compressed: false
50594 }
50595 }
50596
50597 // invalid length
50598 if (buffer.length !== 34) throw new Error('Invalid WIF length')
50599
50600 // invalid compression flag
50601 if (buffer[33] !== 0x01) throw new Error('Invalid compression flag')
50602
50603 return {
50604 version: buffer[0],
50605 privateKey: buffer.slice(1, 33),
50606 compressed: true
50607 }
50608 }
50609
50610 function encodeRaw (version, privateKey, compressed) {
50611 var result = new Buffer(compressed ? 34 : 33)
50612
50613 result.writeUInt8(version, 0)
50614 privateKey.copy(result, 1)
50615
50616 if (compressed) {
50617 result[33] = 0x01
50618 }
50619
50620 return result
50621 }
50622
50623 function decode (string, version) {
50624 return decodeRaw(bs58check.decode(string), version)
50625 }
50626
50627 function encode (version, privateKey, compressed) {
50628 if (typeof version === 'number') return bs58check.encode(encodeRaw(version, privateKey, compressed))
50629
50630 return bs58check.encode(
50631 encodeRaw(
50632 version.version,
50633 version.privateKey,
50634 version.compressed
50635 )
50636 )
50637 }
50638
50639 module.exports = {
50640 decode: decode,
50641 decodeRaw: decodeRaw,
50642 encode: encode,
50643 encodeRaw: encodeRaw
50644 }
50645
50646 }).call(this,require("buffer").Buffer)
50647 },{"bs58check":85,"buffer":5}]},{},[34])(34)
50648 });</script>
50649 <script>bitcoinjs.bitcoin.networks.shadow = {
50650 messagePrefix: 'unused',
50651 bip32: {
50652 public: 0xEE80286A,
50653 private: 0xEE8031E8
50654 },
50655 pubKeyHash: 0x3f,
50656 scriptHash: 0x7d,
50657 wif: 0xbf
50658 };
50659
50660 bitcoinjs.bitcoin.networks.shadowtn = {
50661 messagePrefix: 'unused',
50662 bip32: {
50663 public: 0x76C0FDFB,
50664 private: 0x76C1077A
50665 },
50666 pubKeyHash: 0x7f,
50667 scriptHash: 0xc4,
50668 wif: 0xff
50669 };
50670
50671 bitcoinjs.bitcoin.networks.clam = {
50672 messagePrefix: 'unused',
50673 bip32: {
50674 public: 0xa8c26d64,
50675 private: 0xa8c17826
50676 },
50677 pubKeyHash: 0x89,
50678 scriptHash: 0x00, // TODO set this correctly
50679 wif: 0x85
50680 };
50681
50682 bitcoinjs.bitcoin.networks.crown = {
50683 messagePrefix: 'unused',
50684 bip32: {
50685 public: 0x0488b21e,
50686 private: 0x0488ade4
50687 },
50688 pubKeyHash: 0x00,
50689 scriptHash: 0x05,
50690 wif: 0x80
50691 };
50692
50693 bitcoinjs.bitcoin.networks.dash = {
50694 messagePrefix: 'unused',
50695 bip32: {
50696 public: 0x0488b21e,
50697 private: 0x0488ade4
50698 },
50699 pubKeyHash: 0x4c,
50700 scriptHash: 0x10,
50701 wif: 0xcc
50702 };
50703
50704 bitcoinjs.bitcoin.networks.maza = {
50705 messagePrefix: 'unused',
50706 bip32: {
50707 public: 0x0488b21e,
50708 private: 0x0488ade4
50709 },
50710 pubKeyHash: 0x32,
50711 scriptHash: 0x09,
50712 wif: 0xe0
50713 };
50714
50715 bitcoinjs.bitcoin.networks.dashtn = {
50716 messagePrefix: 'unused',
50717 bip32: {
50718 public: 0x043587cf,
50719 private: 0x04358394
50720 },
50721 pubKeyHash: 0x8c,
50722 scriptHash: 0x13,
50723 wif: 0xef
50724 };
50725
50726 bitcoinjs.bitcoin.networks.game = {
50727 messagePrefix: 'unused',
50728 bip32: {
50729 public: 0x0488b21e,
50730 private: 0x0488ade4
50731 },
50732 pubKeyHash: 0x26,
50733 scriptHash: 0x05,
50734 wif: 0xa6
50735 };
50736
50737 bitcoinjs.bitcoin.networks.namecoin = {
50738 messagePrefix: 'unused',
50739 bip32: {
50740 public: 0x0488b21e,
50741 private: 0x0488ade4
50742 },
50743 pubKeyHash: 0x34,
50744 scriptHash: 0x00, // TODO set this correctly
50745 wif: 0x80
50746 };
50747
50748 bitcoinjs.bitcoin.networks.peercoin = {
50749 messagePrefix: 'unused',
50750 bip32: {
50751 public: 0x0488b21e,
50752 private: 0x0488ade4
50753 },
50754 pubKeyHash: 0x37,
50755 scriptHash: 0x00, // TODO set this correctly
50756 wif: 0xb7
50757 };
50758
50759 bitcoinjs.bitcoin.networks.slimcoin = {
50760 messagePrefix: 'unused',
50761 bip32: {
50762 public: 0xef6adf10,
50763 private: 0xef69ea80
50764 },
50765 pubKeyHash: 0x3f,
50766 scriptHash: 0x7d,
50767 wif: 0x46
50768 };
50769
50770 bitcoinjs.bitcoin.networks.slimcointn = {
50771 messagePrefix: 'unused',
50772 bip32: {
50773 public: 0x043587CF,
50774 private: 0x04358394
50775 },
50776 pubKeyHash: 0x6f,
50777 scriptHash: 0xc4,
50778 wif: 0x57
50779 };
50780
50781 bitcoinjs.bitcoin.networks.dogecoin = {
50782 messagePrefix: '\x19Dogecoin Signed Message:\n',
50783 bip32: {
50784 public: 0x02facafd,
50785 private: 0x02fac398
50786 },
50787 pubKeyHash: 0x1e,
50788 scriptHash: 0x16,
50789 wif: 0x9e
50790 };
50791
50792 bitcoinjs.bitcoin.networks.viacoin = {
50793 messagePrefix: '\x18Viacoin Signed Message:\n',
50794 bip32: {
50795 public: 0x0488b21e,
50796 private: 0x0488ade4
50797 },
50798 pubKeyHash: 0x47,
50799 scriptHash: 0x21,
50800 wif: 0xc7
50801 };
50802
50803 bitcoinjs.bitcoin.networks.viacointestnet = {
50804 messagePrefix: '\x18Viacoin Signed Message:\n',
50805 bip32: {
50806 public: 0x043587cf,
50807 private: 0x04358394
50808 },
50809 pubKeyHash: 0x7f,
50810 scriptHash: 0xc4,
50811 wif: 0xff
50812 };
50813
50814 bitcoinjs.bitcoin.networks.gamerscoin = {
50815 messagePrefix: '\x19Gamerscoin Signed Message:\n',
50816 bip32: {
50817 public: 0x019da462,
50818 private: 0x019d9cfe
50819 },
50820 pubKeyHash: 0x26,
50821 scriptHash: 0x05,
50822 wif: 0xA6
50823 };
50824
50825 bitcoinjs.bitcoin.networks.jumbucks = {
50826 messagePrefix: '\x19Jumbucks Signed Message:\n',
50827 bip32: {
50828 public: 0x037a689a,
50829 private: 0x037a6460
50830 },
50831 pubKeyHash: 0x2b,
50832 scriptHash: 0x05,
50833 wif: 0xab
50834 };
50835
50836 bitcoinjs.bitcoin.networks.zetacoin = {
50837 messagePrefix: '\x18Zetacoin Signed Message:\n',
50838 bip32: {
50839 public: 0x0488b21e,
50840 private: 0x0488ade4
50841 },
50842 pubKeyHash: 0x50,
50843 scriptHash: 0x09,
50844 wif: 0xe0
50845 };
50846
50847 bitcoinjs.bitcoin.networks.myriadcoin = {
50848 messagePrefix: 'unused',
50849 bip32: {
50850 public: 0x0488b21e,
50851 private: 0x0488ade4
50852 },
50853 pubKeyHash: 0x32,
50854 scriptHash: 0x00, // TODO set this correctly
50855 wif: 0xb2
50856 };
50857
50858 bitcoinjs.bitcoin.networks.pivx = {
50859 messagePrefix: 'unused',
50860 bip32: {
50861 public: 0x022d2533,
50862 private: 0x0221312b
50863 },
50864 pubKeyHash: 0x1e,
50865 scriptHash: 0x0d,
50866 wif: 0xd4
50867 };
50868
50869 bitcoinjs.bitcoin.networks.pivxtestnet = {
50870 messagePrefix: 'unused',
50871 bip32: {
50872 public: 0x3a8061a0,
50873 private: 0x3a805837
50874 },
50875 pubKeyHash: 0x8b,
50876 scriptHash: 0x13,
50877 wif: 0xef
50878 };
50879
50880 bitcoinjs.bitcoin.networks.fujicoin = {
50881 messagePrefix: '\x19FujiCoin Signed Message:\n',
50882 bip32: {
50883 public: 0x0488b21e,
50884 private: 0x0488ade4
50885 },
50886 pubKeyHash: 0x24,
50887 scriptHash: 0x10,
50888 wif: 0xa4
50889 };
50890
50891 bitcoinjs.bitcoin.networks.nubits = {
50892 messagePrefix: '\x18Nu Signed Message:\n',
50893 bip32: {
50894 public: 0x0488b21e,
50895 private: 0x0488ade4
50896 },
50897 pubKeyHash: 0x19,
50898 scriptHash: 0x1a,
50899 wif: 0x96,
50900 };
50901
50902 bitcoinjs.bitcoin.networks.bgold = {
50903 messagePrefix: 'unused',
50904 bip32: {
50905 public: 0x0488b21e,
50906 private: 0x0488ade4
50907 },
50908 pubKeyHash: 38,
50909 scriptHash: 23,
50910 wif: 128
50911 };
50912
50913 bitcoinjs.bitcoin.networks.bitcoinCashBitbpay = {
50914 messagePrefix: '\x18Bitcoin Signed Message:\n',
50915 bip32: {
50916 public: 0x0488b21e,
50917 private: 0x0488ade4
50918 },
50919 pubKeyHash: 0x1c,
50920 scriptHash: 0x28,
50921 wif: 0x80
50922 };
50923
50924 bitcoinjs.bitcoin.networks.monacoin = {
50925 messagePrefix: '\x18Monacoin Signed Message:\n',
50926 bip32: {
50927 public: 0x0488b21e,
50928 private: 0x0488ade4
50929 },
50930 pubKeyHash: 0x32,
50931 scriptHash: 0x37,
50932 wif: 0xb0
50933 };
50934
50935 bitcoinjs.bitcoin.networks.litecoinXprv = {
50936 messagePrefix: '\x19Litecoin Signed Message:\n',
50937 bip32: {
50938 public: 0x0488b21e,
50939 private: 0x0488ade4,
50940 },
50941 pubKeyHash: 0x30,
50942 scriptHash: 0x32,
50943 wif: 0xb0
50944 };
50945 </script>
50946 <script>(function() {
50947
50948 // p2wpkh
50949
50950 bitcoinjs.bitcoin.networks.bitcoin.p2wpkh = {
50951 baseNetwork: "bitcoin",
50952 messagePrefix: '\x18Bitcoin Signed Message:\n',
50953 bech32: 'bc',
50954 bip32: {
50955 public: 0x04b24746,
50956 private: 0x04b2430c
50957 },
50958 pubKeyHash: 0x00,
50959 scriptHash: 0x05,
50960 wif: 0x80
50961 };
50962
50963 // p2wpkh in p2sh
50964
50965 bitcoinjs.bitcoin.networks.bitcoin.p2wpkhInP2sh = {
50966 baseNetwork: "bitcoin",
50967 messagePrefix: '\x18Bitcoin Signed Message:\n',
50968 bech32: 'bc',
50969 bip32: {
50970 public: 0x049d7cb2,
50971 private: 0x049d7878
50972 },
50973 pubKeyHash: 0x00,
50974 scriptHash: 0x05,
50975 wif: 0x80
50976 };
50977
50978 bitcoinjs.bitcoin.networks.testnet.p2wpkhInP2sh = {
50979 baseNetwork: "testnet",
50980 messagePrefix: '\x18Bitcoin Signed Message:\n',
50981 bech32: 'tb',
50982 bip32: {
50983 public: 0x044a5262,
50984 private: 0x044a4e28
50985 },
50986 pubKeyHash: 0x6f,
50987 scriptHash: 0xc4,
50988 wif: 0xef
50989 };
50990
50991 bitcoinjs.bitcoin.networks.litecoin.p2wpkhInP2sh = {
50992 baseNetwork: "litecoin",
50993 messagePrefix: '\x19Litecoin Signed Message:\n',
50994 bip32: {
50995 public: 0x01b26ef6,
50996 private: 0x01b26792
50997 },
50998 pubKeyHash: 0x30,
50999 scriptHash: 0x32,
51000 wif: 0xb0
51001 };
51002
51003 })();
51004 </script>
51005 <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){
51006 (function (global){
51007 'use strict';
51008
51009 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
51010 // original notice:
51011
51012 /*!
51013 * The buffer module from node.js, for the browser.
51014 *
51015 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
51016 * @license MIT
51017 */
51018 function compare(a, b) {
51019 if (a === b) {
51020 return 0;
51021 }
51022
51023 var x = a.length;
51024 var y = b.length;
51025
51026 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
51027 if (a[i] !== b[i]) {
51028 x = a[i];
51029 y = b[i];
51030 break;
51031 }
51032 }
51033
51034 if (x < y) {
51035 return -1;
51036 }
51037 if (y < x) {
51038 return 1;
51039 }
51040 return 0;
51041 }
51042 function isBuffer(b) {
51043 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
51044 return global.Buffer.isBuffer(b);
51045 }
51046 return !!(b != null && b._isBuffer);
51047 }
51048
51049 // based on node assert, original notice:
51050
51051 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
51052 //
51053 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
51054 //
51055 // Originally from narwhal.js (http://narwhaljs.org)
51056 // Copyright (c) 2009 Thomas Robinson <280north.com>
51057 //
51058 // Permission is hereby granted, free of charge, to any person obtaining a copy
51059 // of this software and associated documentation files (the 'Software'), to
51060 // deal in the Software without restriction, including without limitation the
51061 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
51062 // sell copies of the Software, and to permit persons to whom the Software is
51063 // furnished to do so, subject to the following conditions:
51064 //
51065 // The above copyright notice and this permission notice shall be included in
51066 // all copies or substantial portions of the Software.
51067 //
51068 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
51069 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
51070 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
51071 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
51072 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
51073 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
51074
51075 var util = require('util/');
51076 var hasOwn = Object.prototype.hasOwnProperty;
51077 var pSlice = Array.prototype.slice;
51078 var functionsHaveNames = (function () {
51079 return function foo() {}.name === 'foo';
51080 }());
51081 function pToString (obj) {
51082 return Object.prototype.toString.call(obj);
51083 }
51084 function isView(arrbuf) {
51085 if (isBuffer(arrbuf)) {
51086 return false;
51087 }
51088 if (typeof global.ArrayBuffer !== 'function') {
51089 return false;
51090 }
51091 if (typeof ArrayBuffer.isView === 'function') {
51092 return ArrayBuffer.isView(arrbuf);
51093 }
51094 if (!arrbuf) {
51095 return false;
51096 }
51097 if (arrbuf instanceof DataView) {
51098 return true;
51099 }
51100 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
51101 return true;
51102 }
51103 return false;
51104 }
51105 // 1. The assert module provides functions that throw
51106 // AssertionError's when particular conditions are not met. The
51107 // assert module must conform to the following interface.
51108
51109 var assert = module.exports = ok;
51110
51111 // 2. The AssertionError is defined in assert.
51112 // new assert.AssertionError({ message: message,
51113 // actual: actual,
51114 // expected: expected })
51115
51116 var regex = /\s*function\s+([^\(\s]*)\s*/;
51117 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
51118 function getName(func) {
51119 if (!util.isFunction(func)) {
51120 return;
51121 }
51122 if (functionsHaveNames) {
51123 return func.name;
51124 }
51125 var str = func.toString();
51126 var match = str.match(regex);
51127 return match && match[1];
51128 }
51129 assert.AssertionError = function AssertionError(options) {
51130 this.name = 'AssertionError';
51131 this.actual = options.actual;
51132 this.expected = options.expected;
51133 this.operator = options.operator;
51134 if (options.message) {
51135 this.message = options.message;
51136 this.generatedMessage = false;
51137 } else {
51138 this.message = getMessage(this);
51139 this.generatedMessage = true;
51140 }
51141 var stackStartFunction = options.stackStartFunction || fail;
51142 if (Error.captureStackTrace) {
51143 Error.captureStackTrace(this, stackStartFunction);
51144 } else {
51145 // non v8 browsers so we can have a stacktrace
51146 var err = new Error();
51147 if (err.stack) {
51148 var out = err.stack;
51149
51150 // try to strip useless frames
51151 var fn_name = getName(stackStartFunction);
51152 var idx = out.indexOf('\n' + fn_name);
51153 if (idx >= 0) {
51154 // once we have located the function frame
51155 // we need to strip out everything before it (and its line)
51156 var next_line = out.indexOf('\n', idx + 1);
51157 out = out.substring(next_line + 1);
51158 }
51159
51160 this.stack = out;
51161 }
51162 }
51163 };
51164
51165 // assert.AssertionError instanceof Error
51166 util.inherits(assert.AssertionError, Error);
51167
51168 function truncate(s, n) {
51169 if (typeof s === 'string') {
51170 return s.length < n ? s : s.slice(0, n);
51171 } else {
51172 return s;
51173 }
51174 }
51175 function inspect(something) {
51176 if (functionsHaveNames || !util.isFunction(something)) {
51177 return util.inspect(something);
51178 }
51179 var rawname = getName(something);
51180 var name = rawname ? ': ' + rawname : '';
51181 return '[Function' + name + ']';
51182 }
51183 function getMessage(self) {
51184 return truncate(inspect(self.actual), 128) + ' ' +
51185 self.operator + ' ' +
51186 truncate(inspect(self.expected), 128);
51187 }
51188
51189 // At present only the three keys mentioned above are used and
51190 // understood by the spec. Implementations or sub modules can pass
51191 // other keys to the AssertionError's constructor - they will be
51192 // ignored.
51193
51194 // 3. All of the following functions must throw an AssertionError
51195 // when a corresponding condition is not met, with a message that
51196 // may be undefined if not provided. All assertion methods provide
51197 // both the actual and expected values to the assertion error for
51198 // display purposes.
51199
51200 function fail(actual, expected, message, operator, stackStartFunction) {
51201 throw new assert.AssertionError({
51202 message: message,
51203 actual: actual,
51204 expected: expected,
51205 operator: operator,
51206 stackStartFunction: stackStartFunction
51207 });
51208 }
51209
51210 // EXTENSION! allows for well behaved errors defined elsewhere.
51211 assert.fail = fail;
51212
51213 // 4. Pure assertion tests whether a value is truthy, as determined
51214 // by !!guard.
51215 // assert.ok(guard, message_opt);
51216 // This statement is equivalent to assert.equal(true, !!guard,
51217 // message_opt);. To test strictly for the value true, use
51218 // assert.strictEqual(true, guard, message_opt);.
51219
51220 function ok(value, message) {
51221 if (!value) fail(value, true, message, '==', assert.ok);
51222 }
51223 assert.ok = ok;
51224
51225 // 5. The equality assertion tests shallow, coercive equality with
51226 // ==.
51227 // assert.equal(actual, expected, message_opt);
51228
51229 assert.equal = function equal(actual, expected, message) {
51230 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
51231 };
51232
51233 // 6. The non-equality assertion tests for whether two objects are not equal
51234 // with != assert.notEqual(actual, expected, message_opt);
51235
51236 assert.notEqual = function notEqual(actual, expected, message) {
51237 if (actual == expected) {
51238 fail(actual, expected, message, '!=', assert.notEqual);
51239 }
51240 };
51241
51242 // 7. The equivalence assertion tests a deep equality relation.
51243 // assert.deepEqual(actual, expected, message_opt);
51244
51245 assert.deepEqual = function deepEqual(actual, expected, message) {
51246 if (!_deepEqual(actual, expected, false)) {
51247 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
51248 }
51249 };
51250
51251 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
51252 if (!_deepEqual(actual, expected, true)) {
51253 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
51254 }
51255 };
51256
51257 function _deepEqual(actual, expected, strict, memos) {
51258 // 7.1. All identical values are equivalent, as determined by ===.
51259 if (actual === expected) {
51260 return true;
51261 } else if (isBuffer(actual) && isBuffer(expected)) {
51262 return compare(actual, expected) === 0;
51263
51264 // 7.2. If the expected value is a Date object, the actual value is
51265 // equivalent if it is also a Date object that refers to the same time.
51266 } else if (util.isDate(actual) && util.isDate(expected)) {
51267 return actual.getTime() === expected.getTime();
51268
51269 // 7.3 If the expected value is a RegExp object, the actual value is
51270 // equivalent if it is also a RegExp object with the same source and
51271 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
51272 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
51273 return actual.source === expected.source &&
51274 actual.global === expected.global &&
51275 actual.multiline === expected.multiline &&
51276 actual.lastIndex === expected.lastIndex &&
51277 actual.ignoreCase === expected.ignoreCase;
51278
51279 // 7.4. Other pairs that do not both pass typeof value == 'object',
51280 // equivalence is determined by ==.
51281 } else if ((actual === null || typeof actual !== 'object') &&
51282 (expected === null || typeof expected !== 'object')) {
51283 return strict ? actual === expected : actual == expected;
51284
51285 // If both values are instances of typed arrays, wrap their underlying
51286 // ArrayBuffers in a Buffer each to increase performance
51287 // This optimization requires the arrays to have the same type as checked by
51288 // Object.prototype.toString (aka pToString). Never perform binary
51289 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
51290 // bit patterns are not identical.
51291 } else if (isView(actual) && isView(expected) &&
51292 pToString(actual) === pToString(expected) &&
51293 !(actual instanceof Float32Array ||
51294 actual instanceof Float64Array)) {
51295 return compare(new Uint8Array(actual.buffer),
51296 new Uint8Array(expected.buffer)) === 0;
51297
51298 // 7.5 For all other Object pairs, including Array objects, equivalence is
51299 // determined by having the same number of owned properties (as verified
51300 // with Object.prototype.hasOwnProperty.call), the same set of keys
51301 // (although not necessarily the same order), equivalent values for every
51302 // corresponding key, and an identical 'prototype' property. Note: this
51303 // accounts for both named and indexed properties on Arrays.
51304 } else if (isBuffer(actual) !== isBuffer(expected)) {
51305 return false;
51306 } else {
51307 memos = memos || {actual: [], expected: []};
51308
51309 var actualIndex = memos.actual.indexOf(actual);
51310 if (actualIndex !== -1) {
51311 if (actualIndex === memos.expected.indexOf(expected)) {
51312 return true;
51313 }
51314 }
51315
51316 memos.actual.push(actual);
51317 memos.expected.push(expected);
51318
51319 return objEquiv(actual, expected, strict, memos);
51320 }
51321 }
51322
51323 function isArguments(object) {
51324 return Object.prototype.toString.call(object) == '[object Arguments]';
51325 }
51326
51327 function objEquiv(a, b, strict, actualVisitedObjects) {
51328 if (a === null || a === undefined || b === null || b === undefined)
51329 return false;
51330 // if one is a primitive, the other must be same
51331 if (util.isPrimitive(a) || util.isPrimitive(b))
51332 return a === b;
51333 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
51334 return false;
51335 var aIsArgs = isArguments(a);
51336 var bIsArgs = isArguments(b);
51337 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
51338 return false;
51339 if (aIsArgs) {
51340 a = pSlice.call(a);
51341 b = pSlice.call(b);
51342 return _deepEqual(a, b, strict);
51343 }
51344 var ka = objectKeys(a);
51345 var kb = objectKeys(b);
51346 var key, i;
51347 // having the same number of owned properties (keys incorporates
51348 // hasOwnProperty)
51349 if (ka.length !== kb.length)
51350 return false;
51351 //the same set of keys (although not necessarily the same order),
51352 ka.sort();
51353 kb.sort();
51354 //~~~cheap key test
51355 for (i = ka.length - 1; i >= 0; i--) {
51356 if (ka[i] !== kb[i])
51357 return false;
51358 }
51359 //equivalent values for every corresponding key, and
51360 //~~~possibly expensive deep test
51361 for (i = ka.length - 1; i >= 0; i--) {
51362 key = ka[i];
51363 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
51364 return false;
51365 }
51366 return true;
51367 }
51368
51369 // 8. The non-equivalence assertion tests for any deep inequality.
51370 // assert.notDeepEqual(actual, expected, message_opt);
51371
51372 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
51373 if (_deepEqual(actual, expected, false)) {
51374 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
51375 }
51376 };
51377
51378 assert.notDeepStrictEqual = notDeepStrictEqual;
51379 function notDeepStrictEqual(actual, expected, message) {
51380 if (_deepEqual(actual, expected, true)) {
51381 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
51382 }
51383 }
51384
51385
51386 // 9. The strict equality assertion tests strict equality, as determined by ===.
51387 // assert.strictEqual(actual, expected, message_opt);
51388
51389 assert.strictEqual = function strictEqual(actual, expected, message) {
51390 if (actual !== expected) {
51391 fail(actual, expected, message, '===', assert.strictEqual);
51392 }
51393 };
51394
51395 // 10. The strict non-equality assertion tests for strict inequality, as
51396 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
51397
51398 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
51399 if (actual === expected) {
51400 fail(actual, expected, message, '!==', assert.notStrictEqual);
51401 }
51402 };
51403
51404 function expectedException(actual, expected) {
51405 if (!actual || !expected) {
51406 return false;
51407 }
51408
51409 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
51410 return expected.test(actual);
51411 }
51412
51413 try {
51414 if (actual instanceof expected) {
51415 return true;
51416 }
51417 } catch (e) {
51418 // Ignore. The instanceof check doesn't work for arrow functions.
51419 }
51420
51421 if (Error.isPrototypeOf(expected)) {
51422 return false;
51423 }
51424
51425 return expected.call({}, actual) === true;
51426 }
51427
51428 function _tryBlock(block) {
51429 var error;
51430 try {
51431 block();
51432 } catch (e) {
51433 error = e;
51434 }
51435 return error;
51436 }
51437
51438 function _throws(shouldThrow, block, expected, message) {
51439 var actual;
51440
51441 if (typeof block !== 'function') {
51442 throw new TypeError('"block" argument must be a function');
51443 }
51444
51445 if (typeof expected === 'string') {
51446 message = expected;
51447 expected = null;
51448 }
51449
51450 actual = _tryBlock(block);
51451
51452 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
51453 (message ? ' ' + message : '.');
51454
51455 if (shouldThrow && !actual) {
51456 fail(actual, expected, 'Missing expected exception' + message);
51457 }
51458
51459 var userProvidedMessage = typeof message === 'string';
51460 var isUnwantedException = !shouldThrow && util.isError(actual);
51461 var isUnexpectedException = !shouldThrow && actual && !expected;
51462
51463 if ((isUnwantedException &&
51464 userProvidedMessage &&
51465 expectedException(actual, expected)) ||
51466 isUnexpectedException) {
51467 fail(actual, expected, 'Got unwanted exception' + message);
51468 }
51469
51470 if ((shouldThrow && actual && expected &&
51471 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
51472 throw actual;
51473 }
51474 }
51475
51476 // 11. Expected to throw an error:
51477 // assert.throws(block, Error_opt, message_opt);
51478
51479 assert.throws = function(block, /*optional*/error, /*optional*/message) {
51480 _throws(true, block, error, message);
51481 };
51482
51483 // EXTENSION! This is annoying to write outside this module.
51484 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
51485 _throws(false, block, error, message);
51486 };
51487
51488 assert.ifError = function(err) { if (err) throw err; };
51489
51490 var objectKeys = Object.keys || function (obj) {
51491 var keys = [];
51492 for (var key in obj) {
51493 if (hasOwn.call(obj, key)) keys.push(key);
51494 }
51495 return keys;
51496 };
51497
51498 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
51499 },{"util/":30}],2:[function(require,module,exports){
51500 'use strict'
51501
51502 exports.byteLength = byteLength
51503 exports.toByteArray = toByteArray
51504 exports.fromByteArray = fromByteArray
51505
51506 var lookup = []
51507 var revLookup = []
51508 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
51509
51510 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
51511 for (var i = 0, len = code.length; i < len; ++i) {
51512 lookup[i] = code[i]
51513 revLookup[code.charCodeAt(i)] = i
51514 }
51515
51516 revLookup['-'.charCodeAt(0)] = 62
51517 revLookup['_'.charCodeAt(0)] = 63
51518
51519 function placeHoldersCount (b64) {
51520 var len = b64.length
51521 if (len % 4 > 0) {
51522 throw new Error('Invalid string. Length must be a multiple of 4')
51523 }
51524
51525 // the number of equal signs (place holders)
51526 // if there are two placeholders, than the two characters before it
51527 // represent one byte
51528 // if there is only one, then the three characters before it represent 2 bytes
51529 // this is just a cheap hack to not do indexOf twice
51530 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
51531 }
51532
51533 function byteLength (b64) {
51534 // base64 is 4/3 + up to two characters of the original data
51535 return b64.length * 3 / 4 - placeHoldersCount(b64)
51536 }
51537
51538 function toByteArray (b64) {
51539 var i, j, l, tmp, placeHolders, arr
51540 var len = b64.length
51541 placeHolders = placeHoldersCount(b64)
51542
51543 arr = new Arr(len * 3 / 4 - placeHolders)
51544
51545 // if there are placeholders, only get up to the last complete 4 chars
51546 l = placeHolders > 0 ? len - 4 : len
51547
51548 var L = 0
51549
51550 for (i = 0, j = 0; i < l; i += 4, j += 3) {
51551 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
51552 arr[L++] = (tmp >> 16) & 0xFF
51553 arr[L++] = (tmp >> 8) & 0xFF
51554 arr[L++] = tmp & 0xFF
51555 }
51556
51557 if (placeHolders === 2) {
51558 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
51559 arr[L++] = tmp & 0xFF
51560 } else if (placeHolders === 1) {
51561 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
51562 arr[L++] = (tmp >> 8) & 0xFF
51563 arr[L++] = tmp & 0xFF
51564 }
51565
51566 return arr
51567 }
51568
51569 function tripletToBase64 (num) {
51570 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
51571 }
51572
51573 function encodeChunk (uint8, start, end) {
51574 var tmp
51575 var output = []
51576 for (var i = start; i < end; i += 3) {
51577 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
51578 output.push(tripletToBase64(tmp))
51579 }
51580 return output.join('')
51581 }
51582
51583 function fromByteArray (uint8) {
51584 var tmp
51585 var len = uint8.length
51586 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
51587 var output = ''
51588 var parts = []
51589 var maxChunkLength = 16383 // must be multiple of 3
51590
51591 // go through the array every three bytes, we'll deal with trailing stuff later
51592 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
51593 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
51594 }
51595
51596 // pad the end with zeros, but make sure to not forget the extra bytes
51597 if (extraBytes === 1) {
51598 tmp = uint8[len - 1]
51599 output += lookup[tmp >> 2]
51600 output += lookup[(tmp << 4) & 0x3F]
51601 output += '=='
51602 } else if (extraBytes === 2) {
51603 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
51604 output += lookup[tmp >> 10]
51605 output += lookup[(tmp >> 4) & 0x3F]
51606 output += lookup[(tmp << 2) & 0x3F]
51607 output += '='
51608 }
51609
51610 parts.push(output)
51611
51612 return parts.join('')
51613 }
51614
51615 },{}],3:[function(require,module,exports){
51616
51617 },{}],4:[function(require,module,exports){
51618 (function (global){
51619 'use strict';
51620
51621 var buffer = require('buffer');
51622 var Buffer = buffer.Buffer;
51623 var SlowBuffer = buffer.SlowBuffer;
51624 var MAX_LEN = buffer.kMaxLength || 2147483647;
51625 exports.alloc = function alloc(size, fill, encoding) {
51626 if (typeof Buffer.alloc === 'function') {
51627 return Buffer.alloc(size, fill, encoding);
51628 }
51629 if (typeof encoding === 'number') {
51630 throw new TypeError('encoding must not be number');
51631 }
51632 if (typeof size !== 'number') {
51633 throw new TypeError('size must be a number');
51634 }
51635 if (size > MAX_LEN) {
51636 throw new RangeError('size is too large');
51637 }
51638 var enc = encoding;
51639 var _fill = fill;
51640 if (_fill === undefined) {
51641 enc = undefined;
51642 _fill = 0;
51643 }
51644 var buf = new Buffer(size);
51645 if (typeof _fill === 'string') {
51646 var fillBuf = new Buffer(_fill, enc);
51647 var flen = fillBuf.length;
51648 var i = -1;
51649 while (++i < size) {
51650 buf[i] = fillBuf[i % flen];
51651 }
51652 } else {
51653 buf.fill(_fill);
51654 }
51655 return buf;
51656 }
51657 exports.allocUnsafe = function allocUnsafe(size) {
51658 if (typeof Buffer.allocUnsafe === 'function') {
51659 return Buffer.allocUnsafe(size);
51660 }
51661 if (typeof size !== 'number') {
51662 throw new TypeError('size must be a number');
51663 }
51664 if (size > MAX_LEN) {
51665 throw new RangeError('size is too large');
51666 }
51667 return new Buffer(size);
51668 }
51669 exports.from = function from(value, encodingOrOffset, length) {
51670 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
51671 return Buffer.from(value, encodingOrOffset, length);
51672 }
51673 if (typeof value === 'number') {
51674 throw new TypeError('"value" argument must not be a number');
51675 }
51676 if (typeof value === 'string') {
51677 return new Buffer(value, encodingOrOffset);
51678 }
51679 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
51680 var offset = encodingOrOffset;
51681 if (arguments.length === 1) {
51682 return new Buffer(value);
51683 }
51684 if (typeof offset === 'undefined') {
51685 offset = 0;
51686 }
51687 var len = length;
51688 if (typeof len === 'undefined') {
51689 len = value.byteLength - offset;
51690 }
51691 if (offset >= value.byteLength) {
51692 throw new RangeError('\'offset\' is out of bounds');
51693 }
51694 if (len > value.byteLength - offset) {
51695 throw new RangeError('\'length\' is out of bounds');
51696 }
51697 return new Buffer(value.slice(offset, offset + len));
51698 }
51699 if (Buffer.isBuffer(value)) {
51700 var out = new Buffer(value.length);
51701 value.copy(out, 0, 0, value.length);
51702 return out;
51703 }
51704 if (value) {
51705 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
51706 return new Buffer(value);
51707 }
51708 if (value.type === 'Buffer' && Array.isArray(value.data)) {
51709 return new Buffer(value.data);
51710 }
51711 }
51712
51713 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
51714 }
51715 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
51716 if (typeof Buffer.allocUnsafeSlow === 'function') {
51717 return Buffer.allocUnsafeSlow(size);
51718 }
51719 if (typeof size !== 'number') {
51720 throw new TypeError('size must be a number');
51721 }
51722 if (size >= MAX_LEN) {
51723 throw new RangeError('size is too large');
51724 }
51725 return new SlowBuffer(size);
51726 }
51727
51728 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
51729 },{"buffer":5}],5:[function(require,module,exports){
51730 /*!
51731 * The buffer module from node.js, for the browser.
51732 *
51733 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
51734 * @license MIT
51735 */
51736 /* eslint-disable no-proto */
51737
51738 'use strict'
51739
51740 var base64 = require('base64-js')
51741 var ieee754 = require('ieee754')
51742
51743 exports.Buffer = Buffer
51744 exports.SlowBuffer = SlowBuffer
51745 exports.INSPECT_MAX_BYTES = 50
51746
51747 var K_MAX_LENGTH = 0x7fffffff
51748 exports.kMaxLength = K_MAX_LENGTH
51749
51750 /**
51751 * If `Buffer.TYPED_ARRAY_SUPPORT`:
51752 * === true Use Uint8Array implementation (fastest)
51753 * === false Print warning and recommend using `buffer` v4.x which has an Object
51754 * implementation (most compatible, even IE6)
51755 *
51756 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
51757 * Opera 11.6+, iOS 4.2+.
51758 *
51759 * We report that the browser does not support typed arrays if the are not subclassable
51760 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
51761 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
51762 * for __proto__ and has a buggy typed array implementation.
51763 */
51764 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
51765
51766 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
51767 typeof console.error === 'function') {
51768 console.error(
51769 'This browser lacks typed array (Uint8Array) support which is required by ' +
51770 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
51771 )
51772 }
51773
51774 function typedArraySupport () {
51775 // Can typed array instances can be augmented?
51776 try {
51777 var arr = new Uint8Array(1)
51778 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
51779 return arr.foo() === 42
51780 } catch (e) {
51781 return false
51782 }
51783 }
51784
51785 function createBuffer (length) {
51786 if (length > K_MAX_LENGTH) {
51787 throw new RangeError('Invalid typed array length')
51788 }
51789 // Return an augmented `Uint8Array` instance
51790 var buf = new Uint8Array(length)
51791 buf.__proto__ = Buffer.prototype
51792 return buf
51793 }
51794
51795 /**
51796 * The Buffer constructor returns instances of `Uint8Array` that have their
51797 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
51798 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
51799 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
51800 * returns a single octet.
51801 *
51802 * The `Uint8Array` prototype remains unmodified.
51803 */
51804
51805 function Buffer (arg, encodingOrOffset, length) {
51806 // Common case.
51807 if (typeof arg === 'number') {
51808 if (typeof encodingOrOffset === 'string') {
51809 throw new Error(
51810 'If encoding is specified then the first argument must be a string'
51811 )
51812 }
51813 return allocUnsafe(arg)
51814 }
51815 return from(arg, encodingOrOffset, length)
51816 }
51817
51818 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
51819 if (typeof Symbol !== 'undefined' && Symbol.species &&
51820 Buffer[Symbol.species] === Buffer) {
51821 Object.defineProperty(Buffer, Symbol.species, {
51822 value: null,
51823 configurable: true,
51824 enumerable: false,
51825 writable: false
51826 })
51827 }
51828
51829 Buffer.poolSize = 8192 // not used by this implementation
51830
51831 function from (value, encodingOrOffset, length) {
51832 if (typeof value === 'number') {
51833 throw new TypeError('"value" argument must not be a number')
51834 }
51835
51836 if (value instanceof ArrayBuffer) {
51837 return fromArrayBuffer(value, encodingOrOffset, length)
51838 }
51839
51840 if (typeof value === 'string') {
51841 return fromString(value, encodingOrOffset)
51842 }
51843
51844 return fromObject(value)
51845 }
51846
51847 /**
51848 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
51849 * if value is a number.
51850 * Buffer.from(str[, encoding])
51851 * Buffer.from(array)
51852 * Buffer.from(buffer)
51853 * Buffer.from(arrayBuffer[, byteOffset[, length]])
51854 **/
51855 Buffer.from = function (value, encodingOrOffset, length) {
51856 return from(value, encodingOrOffset, length)
51857 }
51858
51859 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
51860 // https://github.com/feross/buffer/pull/148
51861 Buffer.prototype.__proto__ = Uint8Array.prototype
51862 Buffer.__proto__ = Uint8Array
51863
51864 function assertSize (size) {
51865 if (typeof size !== 'number') {
51866 throw new TypeError('"size" argument must be a number')
51867 } else if (size < 0) {
51868 throw new RangeError('"size" argument must not be negative')
51869 }
51870 }
51871
51872 function alloc (size, fill, encoding) {
51873 assertSize(size)
51874 if (size <= 0) {
51875 return createBuffer(size)
51876 }
51877 if (fill !== undefined) {
51878 // Only pay attention to encoding if it's a string. This
51879 // prevents accidentally sending in a number that would
51880 // be interpretted as a start offset.
51881 return typeof encoding === 'string'
51882 ? createBuffer(size).fill(fill, encoding)
51883 : createBuffer(size).fill(fill)
51884 }
51885 return createBuffer(size)
51886 }
51887
51888 /**
51889 * Creates a new filled Buffer instance.
51890 * alloc(size[, fill[, encoding]])
51891 **/
51892 Buffer.alloc = function (size, fill, encoding) {
51893 return alloc(size, fill, encoding)
51894 }
51895
51896 function allocUnsafe (size) {
51897 assertSize(size)
51898 return createBuffer(size < 0 ? 0 : checked(size) | 0)
51899 }
51900
51901 /**
51902 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
51903 * */
51904 Buffer.allocUnsafe = function (size) {
51905 return allocUnsafe(size)
51906 }
51907 /**
51908 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
51909 */
51910 Buffer.allocUnsafeSlow = function (size) {
51911 return allocUnsafe(size)
51912 }
51913
51914 function fromString (string, encoding) {
51915 if (typeof encoding !== 'string' || encoding === '') {
51916 encoding = 'utf8'
51917 }
51918
51919 if (!Buffer.isEncoding(encoding)) {
51920 throw new TypeError('"encoding" must be a valid string encoding')
51921 }
51922
51923 var length = byteLength(string, encoding) | 0
51924 var buf = createBuffer(length)
51925
51926 var actual = buf.write(string, encoding)
51927
51928 if (actual !== length) {
51929 // Writing a hex string, for example, that contains invalid characters will
51930 // cause everything after the first invalid character to be ignored. (e.g.
51931 // 'abxxcd' will be treated as 'ab')
51932 buf = buf.slice(0, actual)
51933 }
51934
51935 return buf
51936 }
51937
51938 function fromArrayLike (array) {
51939 var length = array.length < 0 ? 0 : checked(array.length) | 0
51940 var buf = createBuffer(length)
51941 for (var i = 0; i < length; i += 1) {
51942 buf[i] = array[i] & 255
51943 }
51944 return buf
51945 }
51946
51947 function fromArrayBuffer (array, byteOffset, length) {
51948 if (byteOffset < 0 || array.byteLength < byteOffset) {
51949 throw new RangeError('\'offset\' is out of bounds')
51950 }
51951
51952 if (array.byteLength < byteOffset + (length || 0)) {
51953 throw new RangeError('\'length\' is out of bounds')
51954 }
51955
51956 var buf
51957 if (byteOffset === undefined && length === undefined) {
51958 buf = new Uint8Array(array)
51959 } else if (length === undefined) {
51960 buf = new Uint8Array(array, byteOffset)
51961 } else {
51962 buf = new Uint8Array(array, byteOffset, length)
51963 }
51964
51965 // Return an augmented `Uint8Array` instance
51966 buf.__proto__ = Buffer.prototype
51967 return buf
51968 }
51969
51970 function fromObject (obj) {
51971 if (Buffer.isBuffer(obj)) {
51972 var len = checked(obj.length) | 0
51973 var buf = createBuffer(len)
51974
51975 if (buf.length === 0) {
51976 return buf
51977 }
51978
51979 obj.copy(buf, 0, 0, len)
51980 return buf
51981 }
51982
51983 if (obj) {
51984 if (ArrayBuffer.isView(obj) || 'length' in obj) {
51985 if (typeof obj.length !== 'number' || isnan(obj.length)) {
51986 return createBuffer(0)
51987 }
51988 return fromArrayLike(obj)
51989 }
51990
51991 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
51992 return fromArrayLike(obj.data)
51993 }
51994 }
51995
51996 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
51997 }
51998
51999 function checked (length) {
52000 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
52001 // length is NaN (which is otherwise coerced to zero.)
52002 if (length >= K_MAX_LENGTH) {
52003 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
52004 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
52005 }
52006 return length | 0
52007 }
52008
52009 function SlowBuffer (length) {
52010 if (+length != length) { // eslint-disable-line eqeqeq
52011 length = 0
52012 }
52013 return Buffer.alloc(+length)
52014 }
52015
52016 Buffer.isBuffer = function isBuffer (b) {
52017 return b != null && b._isBuffer === true
52018 }
52019
52020 Buffer.compare = function compare (a, b) {
52021 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
52022 throw new TypeError('Arguments must be Buffers')
52023 }
52024
52025 if (a === b) return 0
52026
52027 var x = a.length
52028 var y = b.length
52029
52030 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
52031 if (a[i] !== b[i]) {
52032 x = a[i]
52033 y = b[i]
52034 break
52035 }
52036 }
52037
52038 if (x < y) return -1
52039 if (y < x) return 1
52040 return 0
52041 }
52042
52043 Buffer.isEncoding = function isEncoding (encoding) {
52044 switch (String(encoding).toLowerCase()) {
52045 case 'hex':
52046 case 'utf8':
52047 case 'utf-8':
52048 case 'ascii':
52049 case 'latin1':
52050 case 'binary':
52051 case 'base64':
52052 case 'ucs2':
52053 case 'ucs-2':
52054 case 'utf16le':
52055 case 'utf-16le':
52056 return true
52057 default:
52058 return false
52059 }
52060 }
52061
52062 Buffer.concat = function concat (list, length) {
52063 if (!Array.isArray(list)) {
52064 throw new TypeError('"list" argument must be an Array of Buffers')
52065 }
52066
52067 if (list.length === 0) {
52068 return Buffer.alloc(0)
52069 }
52070
52071 var i
52072 if (length === undefined) {
52073 length = 0
52074 for (i = 0; i < list.length; ++i) {
52075 length += list[i].length
52076 }
52077 }
52078
52079 var buffer = Buffer.allocUnsafe(length)
52080 var pos = 0
52081 for (i = 0; i < list.length; ++i) {
52082 var buf = list[i]
52083 if (!Buffer.isBuffer(buf)) {
52084 throw new TypeError('"list" argument must be an Array of Buffers')
52085 }
52086 buf.copy(buffer, pos)
52087 pos += buf.length
52088 }
52089 return buffer
52090 }
52091
52092 function byteLength (string, encoding) {
52093 if (Buffer.isBuffer(string)) {
52094 return string.length
52095 }
52096 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
52097 return string.byteLength
52098 }
52099 if (typeof string !== 'string') {
52100 string = '' + string
52101 }
52102
52103 var len = string.length
52104 if (len === 0) return 0
52105
52106 // Use a for loop to avoid recursion
52107 var loweredCase = false
52108 for (;;) {
52109 switch (encoding) {
52110 case 'ascii':
52111 case 'latin1':
52112 case 'binary':
52113 return len
52114 case 'utf8':
52115 case 'utf-8':
52116 case undefined:
52117 return utf8ToBytes(string).length
52118 case 'ucs2':
52119 case 'ucs-2':
52120 case 'utf16le':
52121 case 'utf-16le':
52122 return len * 2
52123 case 'hex':
52124 return len >>> 1
52125 case 'base64':
52126 return base64ToBytes(string).length
52127 default:
52128 if (loweredCase) return utf8ToBytes(string).length // assume utf8
52129 encoding = ('' + encoding).toLowerCase()
52130 loweredCase = true
52131 }
52132 }
52133 }
52134 Buffer.byteLength = byteLength
52135
52136 function slowToString (encoding, start, end) {
52137 var loweredCase = false
52138
52139 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
52140 // property of a typed array.
52141
52142 // This behaves neither like String nor Uint8Array in that we set start/end
52143 // to their upper/lower bounds if the value passed is out of range.
52144 // undefined is handled specially as per ECMA-262 6th Edition,
52145 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
52146 if (start === undefined || start < 0) {
52147 start = 0
52148 }
52149 // Return early if start > this.length. Done here to prevent potential uint32
52150 // coercion fail below.
52151 if (start > this.length) {
52152 return ''
52153 }
52154
52155 if (end === undefined || end > this.length) {
52156 end = this.length
52157 }
52158
52159 if (end <= 0) {
52160 return ''
52161 }
52162
52163 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
52164 end >>>= 0
52165 start >>>= 0
52166
52167 if (end <= start) {
52168 return ''
52169 }
52170
52171 if (!encoding) encoding = 'utf8'
52172
52173 while (true) {
52174 switch (encoding) {
52175 case 'hex':
52176 return hexSlice(this, start, end)
52177
52178 case 'utf8':
52179 case 'utf-8':
52180 return utf8Slice(this, start, end)
52181
52182 case 'ascii':
52183 return asciiSlice(this, start, end)
52184
52185 case 'latin1':
52186 case 'binary':
52187 return latin1Slice(this, start, end)
52188
52189 case 'base64':
52190 return base64Slice(this, start, end)
52191
52192 case 'ucs2':
52193 case 'ucs-2':
52194 case 'utf16le':
52195 case 'utf-16le':
52196 return utf16leSlice(this, start, end)
52197
52198 default:
52199 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
52200 encoding = (encoding + '').toLowerCase()
52201 loweredCase = true
52202 }
52203 }
52204 }
52205
52206 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
52207 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
52208 // reliably in a browserify context because there could be multiple different
52209 // copies of the 'buffer' package in use. This method works even for Buffer
52210 // instances that were created from another copy of the `buffer` package.
52211 // See: https://github.com/feross/buffer/issues/154
52212 Buffer.prototype._isBuffer = true
52213
52214 function swap (b, n, m) {
52215 var i = b[n]
52216 b[n] = b[m]
52217 b[m] = i
52218 }
52219
52220 Buffer.prototype.swap16 = function swap16 () {
52221 var len = this.length
52222 if (len % 2 !== 0) {
52223 throw new RangeError('Buffer size must be a multiple of 16-bits')
52224 }
52225 for (var i = 0; i < len; i += 2) {
52226 swap(this, i, i + 1)
52227 }
52228 return this
52229 }
52230
52231 Buffer.prototype.swap32 = function swap32 () {
52232 var len = this.length
52233 if (len % 4 !== 0) {
52234 throw new RangeError('Buffer size must be a multiple of 32-bits')
52235 }
52236 for (var i = 0; i < len; i += 4) {
52237 swap(this, i, i + 3)
52238 swap(this, i + 1, i + 2)
52239 }
52240 return this
52241 }
52242
52243 Buffer.prototype.swap64 = function swap64 () {
52244 var len = this.length
52245 if (len % 8 !== 0) {
52246 throw new RangeError('Buffer size must be a multiple of 64-bits')
52247 }
52248 for (var i = 0; i < len; i += 8) {
52249 swap(this, i, i + 7)
52250 swap(this, i + 1, i + 6)
52251 swap(this, i + 2, i + 5)
52252 swap(this, i + 3, i + 4)
52253 }
52254 return this
52255 }
52256
52257 Buffer.prototype.toString = function toString () {
52258 var length = this.length
52259 if (length === 0) return ''
52260 if (arguments.length === 0) return utf8Slice(this, 0, length)
52261 return slowToString.apply(this, arguments)
52262 }
52263
52264 Buffer.prototype.equals = function equals (b) {
52265 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
52266 if (this === b) return true
52267 return Buffer.compare(this, b) === 0
52268 }
52269
52270 Buffer.prototype.inspect = function inspect () {
52271 var str = ''
52272 var max = exports.INSPECT_MAX_BYTES
52273 if (this.length > 0) {
52274 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
52275 if (this.length > max) str += ' ... '
52276 }
52277 return '<Buffer ' + str + '>'
52278 }
52279
52280 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
52281 if (!Buffer.isBuffer(target)) {
52282 throw new TypeError('Argument must be a Buffer')
52283 }
52284
52285 if (start === undefined) {
52286 start = 0
52287 }
52288 if (end === undefined) {
52289 end = target ? target.length : 0
52290 }
52291 if (thisStart === undefined) {
52292 thisStart = 0
52293 }
52294 if (thisEnd === undefined) {
52295 thisEnd = this.length
52296 }
52297
52298 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
52299 throw new RangeError('out of range index')
52300 }
52301
52302 if (thisStart >= thisEnd && start >= end) {
52303 return 0
52304 }
52305 if (thisStart >= thisEnd) {
52306 return -1
52307 }
52308 if (start >= end) {
52309 return 1
52310 }
52311
52312 start >>>= 0
52313 end >>>= 0
52314 thisStart >>>= 0
52315 thisEnd >>>= 0
52316
52317 if (this === target) return 0
52318
52319 var x = thisEnd - thisStart
52320 var y = end - start
52321 var len = Math.min(x, y)
52322
52323 var thisCopy = this.slice(thisStart, thisEnd)
52324 var targetCopy = target.slice(start, end)
52325
52326 for (var i = 0; i < len; ++i) {
52327 if (thisCopy[i] !== targetCopy[i]) {
52328 x = thisCopy[i]
52329 y = targetCopy[i]
52330 break
52331 }
52332 }
52333
52334 if (x < y) return -1
52335 if (y < x) return 1
52336 return 0
52337 }
52338
52339 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
52340 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
52341 //
52342 // Arguments:
52343 // - buffer - a Buffer to search
52344 // - val - a string, Buffer, or number
52345 // - byteOffset - an index into `buffer`; will be clamped to an int32
52346 // - encoding - an optional encoding, relevant is val is a string
52347 // - dir - true for indexOf, false for lastIndexOf
52348 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
52349 // Empty buffer means no match
52350 if (buffer.length === 0) return -1
52351
52352 // Normalize byteOffset
52353 if (typeof byteOffset === 'string') {
52354 encoding = byteOffset
52355 byteOffset = 0
52356 } else if (byteOffset > 0x7fffffff) {
52357 byteOffset = 0x7fffffff
52358 } else if (byteOffset < -0x80000000) {
52359 byteOffset = -0x80000000
52360 }
52361 byteOffset = +byteOffset // Coerce to Number.
52362 if (isNaN(byteOffset)) {
52363 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
52364 byteOffset = dir ? 0 : (buffer.length - 1)
52365 }
52366
52367 // Normalize byteOffset: negative offsets start from the end of the buffer
52368 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
52369 if (byteOffset >= buffer.length) {
52370 if (dir) return -1
52371 else byteOffset = buffer.length - 1
52372 } else if (byteOffset < 0) {
52373 if (dir) byteOffset = 0
52374 else return -1
52375 }
52376
52377 // Normalize val
52378 if (typeof val === 'string') {
52379 val = Buffer.from(val, encoding)
52380 }
52381
52382 // Finally, search either indexOf (if dir is true) or lastIndexOf
52383 if (Buffer.isBuffer(val)) {
52384 // Special case: looking for empty string/buffer always fails
52385 if (val.length === 0) {
52386 return -1
52387 }
52388 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
52389 } else if (typeof val === 'number') {
52390 val = val & 0xFF // Search for a byte value [0-255]
52391 if (typeof Uint8Array.prototype.indexOf === 'function') {
52392 if (dir) {
52393 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
52394 } else {
52395 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
52396 }
52397 }
52398 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
52399 }
52400
52401 throw new TypeError('val must be string, number or Buffer')
52402 }
52403
52404 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
52405 var indexSize = 1
52406 var arrLength = arr.length
52407 var valLength = val.length
52408
52409 if (encoding !== undefined) {
52410 encoding = String(encoding).toLowerCase()
52411 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
52412 encoding === 'utf16le' || encoding === 'utf-16le') {
52413 if (arr.length < 2 || val.length < 2) {
52414 return -1
52415 }
52416 indexSize = 2
52417 arrLength /= 2
52418 valLength /= 2
52419 byteOffset /= 2
52420 }
52421 }
52422
52423 function read (buf, i) {
52424 if (indexSize === 1) {
52425 return buf[i]
52426 } else {
52427 return buf.readUInt16BE(i * indexSize)
52428 }
52429 }
52430
52431 var i
52432 if (dir) {
52433 var foundIndex = -1
52434 for (i = byteOffset; i < arrLength; i++) {
52435 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
52436 if (foundIndex === -1) foundIndex = i
52437 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
52438 } else {
52439 if (foundIndex !== -1) i -= i - foundIndex
52440 foundIndex = -1
52441 }
52442 }
52443 } else {
52444 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
52445 for (i = byteOffset; i >= 0; i--) {
52446 var found = true
52447 for (var j = 0; j < valLength; j++) {
52448 if (read(arr, i + j) !== read(val, j)) {
52449 found = false
52450 break
52451 }
52452 }
52453 if (found) return i
52454 }
52455 }
52456
52457 return -1
52458 }
52459
52460 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
52461 return this.indexOf(val, byteOffset, encoding) !== -1
52462 }
52463
52464 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
52465 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
52466 }
52467
52468 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
52469 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
52470 }
52471
52472 function hexWrite (buf, string, offset, length) {
52473 offset = Number(offset) || 0
52474 var remaining = buf.length - offset
52475 if (!length) {
52476 length = remaining
52477 } else {
52478 length = Number(length)
52479 if (length > remaining) {
52480 length = remaining
52481 }
52482 }
52483
52484 // must be an even number of digits
52485 var strLen = string.length
52486 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
52487
52488 if (length > strLen / 2) {
52489 length = strLen / 2
52490 }
52491 for (var i = 0; i < length; ++i) {
52492 var parsed = parseInt(string.substr(i * 2, 2), 16)
52493 if (isNaN(parsed)) return i
52494 buf[offset + i] = parsed
52495 }
52496 return i
52497 }
52498
52499 function utf8Write (buf, string, offset, length) {
52500 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
52501 }
52502
52503 function asciiWrite (buf, string, offset, length) {
52504 return blitBuffer(asciiToBytes(string), buf, offset, length)
52505 }
52506
52507 function latin1Write (buf, string, offset, length) {
52508 return asciiWrite(buf, string, offset, length)
52509 }
52510
52511 function base64Write (buf, string, offset, length) {
52512 return blitBuffer(base64ToBytes(string), buf, offset, length)
52513 }
52514
52515 function ucs2Write (buf, string, offset, length) {
52516 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
52517 }
52518
52519 Buffer.prototype.write = function write (string, offset, length, encoding) {
52520 // Buffer#write(string)
52521 if (offset === undefined) {
52522 encoding = 'utf8'
52523 length = this.length
52524 offset = 0
52525 // Buffer#write(string, encoding)
52526 } else if (length === undefined && typeof offset === 'string') {
52527 encoding = offset
52528 length = this.length
52529 offset = 0
52530 // Buffer#write(string, offset[, length][, encoding])
52531 } else if (isFinite(offset)) {
52532 offset = offset >>> 0
52533 if (isFinite(length)) {
52534 length = length >>> 0
52535 if (encoding === undefined) encoding = 'utf8'
52536 } else {
52537 encoding = length
52538 length = undefined
52539 }
52540 } else {
52541 throw new Error(
52542 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
52543 )
52544 }
52545
52546 var remaining = this.length - offset
52547 if (length === undefined || length > remaining) length = remaining
52548
52549 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
52550 throw new RangeError('Attempt to write outside buffer bounds')
52551 }
52552
52553 if (!encoding) encoding = 'utf8'
52554
52555 var loweredCase = false
52556 for (;;) {
52557 switch (encoding) {
52558 case 'hex':
52559 return hexWrite(this, string, offset, length)
52560
52561 case 'utf8':
52562 case 'utf-8':
52563 return utf8Write(this, string, offset, length)
52564
52565 case 'ascii':
52566 return asciiWrite(this, string, offset, length)
52567
52568 case 'latin1':
52569 case 'binary':
52570 return latin1Write(this, string, offset, length)
52571
52572 case 'base64':
52573 // Warning: maxLength not taken into account in base64Write
52574 return base64Write(this, string, offset, length)
52575
52576 case 'ucs2':
52577 case 'ucs-2':
52578 case 'utf16le':
52579 case 'utf-16le':
52580 return ucs2Write(this, string, offset, length)
52581
52582 default:
52583 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
52584 encoding = ('' + encoding).toLowerCase()
52585 loweredCase = true
52586 }
52587 }
52588 }
52589
52590 Buffer.prototype.toJSON = function toJSON () {
52591 return {
52592 type: 'Buffer',
52593 data: Array.prototype.slice.call(this._arr || this, 0)
52594 }
52595 }
52596
52597 function base64Slice (buf, start, end) {
52598 if (start === 0 && end === buf.length) {
52599 return base64.fromByteArray(buf)
52600 } else {
52601 return base64.fromByteArray(buf.slice(start, end))
52602 }
52603 }
52604
52605 function utf8Slice (buf, start, end) {
52606 end = Math.min(buf.length, end)
52607 var res = []
52608
52609 var i = start
52610 while (i < end) {
52611 var firstByte = buf[i]
52612 var codePoint = null
52613 var bytesPerSequence = (firstByte > 0xEF) ? 4
52614 : (firstByte > 0xDF) ? 3
52615 : (firstByte > 0xBF) ? 2
52616 : 1
52617
52618 if (i + bytesPerSequence <= end) {
52619 var secondByte, thirdByte, fourthByte, tempCodePoint
52620
52621 switch (bytesPerSequence) {
52622 case 1:
52623 if (firstByte < 0x80) {
52624 codePoint = firstByte
52625 }
52626 break
52627 case 2:
52628 secondByte = buf[i + 1]
52629 if ((secondByte & 0xC0) === 0x80) {
52630 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
52631 if (tempCodePoint > 0x7F) {
52632 codePoint = tempCodePoint
52633 }
52634 }
52635 break
52636 case 3:
52637 secondByte = buf[i + 1]
52638 thirdByte = buf[i + 2]
52639 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
52640 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
52641 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
52642 codePoint = tempCodePoint
52643 }
52644 }
52645 break
52646 case 4:
52647 secondByte = buf[i + 1]
52648 thirdByte = buf[i + 2]
52649 fourthByte = buf[i + 3]
52650 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
52651 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
52652 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
52653 codePoint = tempCodePoint
52654 }
52655 }
52656 }
52657 }
52658
52659 if (codePoint === null) {
52660 // we did not generate a valid codePoint so insert a
52661 // replacement char (U+FFFD) and advance only 1 byte
52662 codePoint = 0xFFFD
52663 bytesPerSequence = 1
52664 } else if (codePoint > 0xFFFF) {
52665 // encode to utf16 (surrogate pair dance)
52666 codePoint -= 0x10000
52667 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
52668 codePoint = 0xDC00 | codePoint & 0x3FF
52669 }
52670
52671 res.push(codePoint)
52672 i += bytesPerSequence
52673 }
52674
52675 return decodeCodePointsArray(res)
52676 }
52677
52678 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
52679 // the lowest limit is Chrome, with 0x10000 args.
52680 // We go 1 magnitude less, for safety
52681 var MAX_ARGUMENTS_LENGTH = 0x1000
52682
52683 function decodeCodePointsArray (codePoints) {
52684 var len = codePoints.length
52685 if (len <= MAX_ARGUMENTS_LENGTH) {
52686 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
52687 }
52688
52689 // Decode in chunks to avoid "call stack size exceeded".
52690 var res = ''
52691 var i = 0
52692 while (i < len) {
52693 res += String.fromCharCode.apply(
52694 String,
52695 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
52696 )
52697 }
52698 return res
52699 }
52700
52701 function asciiSlice (buf, start, end) {
52702 var ret = ''
52703 end = Math.min(buf.length, end)
52704
52705 for (var i = start; i < end; ++i) {
52706 ret += String.fromCharCode(buf[i] & 0x7F)
52707 }
52708 return ret
52709 }
52710
52711 function latin1Slice (buf, start, end) {
52712 var ret = ''
52713 end = Math.min(buf.length, end)
52714
52715 for (var i = start; i < end; ++i) {
52716 ret += String.fromCharCode(buf[i])
52717 }
52718 return ret
52719 }
52720
52721 function hexSlice (buf, start, end) {
52722 var len = buf.length
52723
52724 if (!start || start < 0) start = 0
52725 if (!end || end < 0 || end > len) end = len
52726
52727 var out = ''
52728 for (var i = start; i < end; ++i) {
52729 out += toHex(buf[i])
52730 }
52731 return out
52732 }
52733
52734 function utf16leSlice (buf, start, end) {
52735 var bytes = buf.slice(start, end)
52736 var res = ''
52737 for (var i = 0; i < bytes.length; i += 2) {
52738 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
52739 }
52740 return res
52741 }
52742
52743 Buffer.prototype.slice = function slice (start, end) {
52744 var len = this.length
52745 start = ~~start
52746 end = end === undefined ? len : ~~end
52747
52748 if (start < 0) {
52749 start += len
52750 if (start < 0) start = 0
52751 } else if (start > len) {
52752 start = len
52753 }
52754
52755 if (end < 0) {
52756 end += len
52757 if (end < 0) end = 0
52758 } else if (end > len) {
52759 end = len
52760 }
52761
52762 if (end < start) end = start
52763
52764 var newBuf = this.subarray(start, end)
52765 // Return an augmented `Uint8Array` instance
52766 newBuf.__proto__ = Buffer.prototype
52767 return newBuf
52768 }
52769
52770 /*
52771 * Need to make sure that buffer isn't trying to write out of bounds.
52772 */
52773 function checkOffset (offset, ext, length) {
52774 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
52775 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
52776 }
52777
52778 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
52779 offset = offset >>> 0
52780 byteLength = byteLength >>> 0
52781 if (!noAssert) checkOffset(offset, byteLength, this.length)
52782
52783 var val = this[offset]
52784 var mul = 1
52785 var i = 0
52786 while (++i < byteLength && (mul *= 0x100)) {
52787 val += this[offset + i] * mul
52788 }
52789
52790 return val
52791 }
52792
52793 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
52794 offset = offset >>> 0
52795 byteLength = byteLength >>> 0
52796 if (!noAssert) {
52797 checkOffset(offset, byteLength, this.length)
52798 }
52799
52800 var val = this[offset + --byteLength]
52801 var mul = 1
52802 while (byteLength > 0 && (mul *= 0x100)) {
52803 val += this[offset + --byteLength] * mul
52804 }
52805
52806 return val
52807 }
52808
52809 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
52810 offset = offset >>> 0
52811 if (!noAssert) checkOffset(offset, 1, this.length)
52812 return this[offset]
52813 }
52814
52815 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
52816 offset = offset >>> 0
52817 if (!noAssert) checkOffset(offset, 2, this.length)
52818 return this[offset] | (this[offset + 1] << 8)
52819 }
52820
52821 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
52822 offset = offset >>> 0
52823 if (!noAssert) checkOffset(offset, 2, this.length)
52824 return (this[offset] << 8) | this[offset + 1]
52825 }
52826
52827 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
52828 offset = offset >>> 0
52829 if (!noAssert) checkOffset(offset, 4, this.length)
52830
52831 return ((this[offset]) |
52832 (this[offset + 1] << 8) |
52833 (this[offset + 2] << 16)) +
52834 (this[offset + 3] * 0x1000000)
52835 }
52836
52837 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
52838 offset = offset >>> 0
52839 if (!noAssert) checkOffset(offset, 4, this.length)
52840
52841 return (this[offset] * 0x1000000) +
52842 ((this[offset + 1] << 16) |
52843 (this[offset + 2] << 8) |
52844 this[offset + 3])
52845 }
52846
52847 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
52848 offset = offset >>> 0
52849 byteLength = byteLength >>> 0
52850 if (!noAssert) checkOffset(offset, byteLength, this.length)
52851
52852 var val = this[offset]
52853 var mul = 1
52854 var i = 0
52855 while (++i < byteLength && (mul *= 0x100)) {
52856 val += this[offset + i] * mul
52857 }
52858 mul *= 0x80
52859
52860 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
52861
52862 return val
52863 }
52864
52865 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
52866 offset = offset >>> 0
52867 byteLength = byteLength >>> 0
52868 if (!noAssert) checkOffset(offset, byteLength, this.length)
52869
52870 var i = byteLength
52871 var mul = 1
52872 var val = this[offset + --i]
52873 while (i > 0 && (mul *= 0x100)) {
52874 val += this[offset + --i] * mul
52875 }
52876 mul *= 0x80
52877
52878 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
52879
52880 return val
52881 }
52882
52883 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
52884 offset = offset >>> 0
52885 if (!noAssert) checkOffset(offset, 1, this.length)
52886 if (!(this[offset] & 0x80)) return (this[offset])
52887 return ((0xff - this[offset] + 1) * -1)
52888 }
52889
52890 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
52891 offset = offset >>> 0
52892 if (!noAssert) checkOffset(offset, 2, this.length)
52893 var val = this[offset] | (this[offset + 1] << 8)
52894 return (val & 0x8000) ? val | 0xFFFF0000 : val
52895 }
52896
52897 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
52898 offset = offset >>> 0
52899 if (!noAssert) checkOffset(offset, 2, this.length)
52900 var val = this[offset + 1] | (this[offset] << 8)
52901 return (val & 0x8000) ? val | 0xFFFF0000 : val
52902 }
52903
52904 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
52905 offset = offset >>> 0
52906 if (!noAssert) checkOffset(offset, 4, this.length)
52907
52908 return (this[offset]) |
52909 (this[offset + 1] << 8) |
52910 (this[offset + 2] << 16) |
52911 (this[offset + 3] << 24)
52912 }
52913
52914 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
52915 offset = offset >>> 0
52916 if (!noAssert) checkOffset(offset, 4, this.length)
52917
52918 return (this[offset] << 24) |
52919 (this[offset + 1] << 16) |
52920 (this[offset + 2] << 8) |
52921 (this[offset + 3])
52922 }
52923
52924 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
52925 offset = offset >>> 0
52926 if (!noAssert) checkOffset(offset, 4, this.length)
52927 return ieee754.read(this, offset, true, 23, 4)
52928 }
52929
52930 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
52931 offset = offset >>> 0
52932 if (!noAssert) checkOffset(offset, 4, this.length)
52933 return ieee754.read(this, offset, false, 23, 4)
52934 }
52935
52936 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
52937 offset = offset >>> 0
52938 if (!noAssert) checkOffset(offset, 8, this.length)
52939 return ieee754.read(this, offset, true, 52, 8)
52940 }
52941
52942 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
52943 offset = offset >>> 0
52944 if (!noAssert) checkOffset(offset, 8, this.length)
52945 return ieee754.read(this, offset, false, 52, 8)
52946 }
52947
52948 function checkInt (buf, value, offset, ext, max, min) {
52949 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
52950 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
52951 if (offset + ext > buf.length) throw new RangeError('Index out of range')
52952 }
52953
52954 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
52955 value = +value
52956 offset = offset >>> 0
52957 byteLength = byteLength >>> 0
52958 if (!noAssert) {
52959 var maxBytes = Math.pow(2, 8 * byteLength) - 1
52960 checkInt(this, value, offset, byteLength, maxBytes, 0)
52961 }
52962
52963 var mul = 1
52964 var i = 0
52965 this[offset] = value & 0xFF
52966 while (++i < byteLength && (mul *= 0x100)) {
52967 this[offset + i] = (value / mul) & 0xFF
52968 }
52969
52970 return offset + byteLength
52971 }
52972
52973 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
52974 value = +value
52975 offset = offset >>> 0
52976 byteLength = byteLength >>> 0
52977 if (!noAssert) {
52978 var maxBytes = Math.pow(2, 8 * byteLength) - 1
52979 checkInt(this, value, offset, byteLength, maxBytes, 0)
52980 }
52981
52982 var i = byteLength - 1
52983 var mul = 1
52984 this[offset + i] = value & 0xFF
52985 while (--i >= 0 && (mul *= 0x100)) {
52986 this[offset + i] = (value / mul) & 0xFF
52987 }
52988
52989 return offset + byteLength
52990 }
52991
52992 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
52993 value = +value
52994 offset = offset >>> 0
52995 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
52996 this[offset] = (value & 0xff)
52997 return offset + 1
52998 }
52999
53000 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
53001 value = +value
53002 offset = offset >>> 0
53003 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
53004 this[offset] = (value & 0xff)
53005 this[offset + 1] = (value >>> 8)
53006 return offset + 2
53007 }
53008
53009 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
53010 value = +value
53011 offset = offset >>> 0
53012 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
53013 this[offset] = (value >>> 8)
53014 this[offset + 1] = (value & 0xff)
53015 return offset + 2
53016 }
53017
53018 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
53019 value = +value
53020 offset = offset >>> 0
53021 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
53022 this[offset + 3] = (value >>> 24)
53023 this[offset + 2] = (value >>> 16)
53024 this[offset + 1] = (value >>> 8)
53025 this[offset] = (value & 0xff)
53026 return offset + 4
53027 }
53028
53029 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
53030 value = +value
53031 offset = offset >>> 0
53032 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
53033 this[offset] = (value >>> 24)
53034 this[offset + 1] = (value >>> 16)
53035 this[offset + 2] = (value >>> 8)
53036 this[offset + 3] = (value & 0xff)
53037 return offset + 4
53038 }
53039
53040 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
53041 value = +value
53042 offset = offset >>> 0
53043 if (!noAssert) {
53044 var limit = Math.pow(2, (8 * byteLength) - 1)
53045
53046 checkInt(this, value, offset, byteLength, limit - 1, -limit)
53047 }
53048
53049 var i = 0
53050 var mul = 1
53051 var sub = 0
53052 this[offset] = value & 0xFF
53053 while (++i < byteLength && (mul *= 0x100)) {
53054 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
53055 sub = 1
53056 }
53057 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
53058 }
53059
53060 return offset + byteLength
53061 }
53062
53063 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
53064 value = +value
53065 offset = offset >>> 0
53066 if (!noAssert) {
53067 var limit = Math.pow(2, (8 * byteLength) - 1)
53068
53069 checkInt(this, value, offset, byteLength, limit - 1, -limit)
53070 }
53071
53072 var i = byteLength - 1
53073 var mul = 1
53074 var sub = 0
53075 this[offset + i] = value & 0xFF
53076 while (--i >= 0 && (mul *= 0x100)) {
53077 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
53078 sub = 1
53079 }
53080 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
53081 }
53082
53083 return offset + byteLength
53084 }
53085
53086 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
53087 value = +value
53088 offset = offset >>> 0
53089 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
53090 if (value < 0) value = 0xff + value + 1
53091 this[offset] = (value & 0xff)
53092 return offset + 1
53093 }
53094
53095 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
53096 value = +value
53097 offset = offset >>> 0
53098 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
53099 this[offset] = (value & 0xff)
53100 this[offset + 1] = (value >>> 8)
53101 return offset + 2
53102 }
53103
53104 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
53105 value = +value
53106 offset = offset >>> 0
53107 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
53108 this[offset] = (value >>> 8)
53109 this[offset + 1] = (value & 0xff)
53110 return offset + 2
53111 }
53112
53113 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
53114 value = +value
53115 offset = offset >>> 0
53116 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
53117 this[offset] = (value & 0xff)
53118 this[offset + 1] = (value >>> 8)
53119 this[offset + 2] = (value >>> 16)
53120 this[offset + 3] = (value >>> 24)
53121 return offset + 4
53122 }
53123
53124 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
53125 value = +value
53126 offset = offset >>> 0
53127 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
53128 if (value < 0) value = 0xffffffff + value + 1
53129 this[offset] = (value >>> 24)
53130 this[offset + 1] = (value >>> 16)
53131 this[offset + 2] = (value >>> 8)
53132 this[offset + 3] = (value & 0xff)
53133 return offset + 4
53134 }
53135
53136 function checkIEEE754 (buf, value, offset, ext, max, min) {
53137 if (offset + ext > buf.length) throw new RangeError('Index out of range')
53138 if (offset < 0) throw new RangeError('Index out of range')
53139 }
53140
53141 function writeFloat (buf, value, offset, littleEndian, noAssert) {
53142 value = +value
53143 offset = offset >>> 0
53144 if (!noAssert) {
53145 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
53146 }
53147 ieee754.write(buf, value, offset, littleEndian, 23, 4)
53148 return offset + 4
53149 }
53150
53151 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
53152 return writeFloat(this, value, offset, true, noAssert)
53153 }
53154
53155 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
53156 return writeFloat(this, value, offset, false, noAssert)
53157 }
53158
53159 function writeDouble (buf, value, offset, littleEndian, noAssert) {
53160 value = +value
53161 offset = offset >>> 0
53162 if (!noAssert) {
53163 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
53164 }
53165 ieee754.write(buf, value, offset, littleEndian, 52, 8)
53166 return offset + 8
53167 }
53168
53169 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
53170 return writeDouble(this, value, offset, true, noAssert)
53171 }
53172
53173 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
53174 return writeDouble(this, value, offset, false, noAssert)
53175 }
53176
53177 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
53178 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
53179 if (!start) start = 0
53180 if (!end && end !== 0) end = this.length
53181 if (targetStart >= target.length) targetStart = target.length
53182 if (!targetStart) targetStart = 0
53183 if (end > 0 && end < start) end = start
53184
53185 // Copy 0 bytes; we're done
53186 if (end === start) return 0
53187 if (target.length === 0 || this.length === 0) return 0
53188
53189 // Fatal error conditions
53190 if (targetStart < 0) {
53191 throw new RangeError('targetStart out of bounds')
53192 }
53193 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
53194 if (end < 0) throw new RangeError('sourceEnd out of bounds')
53195
53196 // Are we oob?
53197 if (end > this.length) end = this.length
53198 if (target.length - targetStart < end - start) {
53199 end = target.length - targetStart + start
53200 }
53201
53202 var len = end - start
53203 var i
53204
53205 if (this === target && start < targetStart && targetStart < end) {
53206 // descending copy from end
53207 for (i = len - 1; i >= 0; --i) {
53208 target[i + targetStart] = this[i + start]
53209 }
53210 } else if (len < 1000) {
53211 // ascending copy from start
53212 for (i = 0; i < len; ++i) {
53213 target[i + targetStart] = this[i + start]
53214 }
53215 } else {
53216 Uint8Array.prototype.set.call(
53217 target,
53218 this.subarray(start, start + len),
53219 targetStart
53220 )
53221 }
53222
53223 return len
53224 }
53225
53226 // Usage:
53227 // buffer.fill(number[, offset[, end]])
53228 // buffer.fill(buffer[, offset[, end]])
53229 // buffer.fill(string[, offset[, end]][, encoding])
53230 Buffer.prototype.fill = function fill (val, start, end, encoding) {
53231 // Handle string cases:
53232 if (typeof val === 'string') {
53233 if (typeof start === 'string') {
53234 encoding = start
53235 start = 0
53236 end = this.length
53237 } else if (typeof end === 'string') {
53238 encoding = end
53239 end = this.length
53240 }
53241 if (val.length === 1) {
53242 var code = val.charCodeAt(0)
53243 if (code < 256) {
53244 val = code
53245 }
53246 }
53247 if (encoding !== undefined && typeof encoding !== 'string') {
53248 throw new TypeError('encoding must be a string')
53249 }
53250 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
53251 throw new TypeError('Unknown encoding: ' + encoding)
53252 }
53253 } else if (typeof val === 'number') {
53254 val = val & 255
53255 }
53256
53257 // Invalid ranges are not set to a default, so can range check early.
53258 if (start < 0 || this.length < start || this.length < end) {
53259 throw new RangeError('Out of range index')
53260 }
53261
53262 if (end <= start) {
53263 return this
53264 }
53265
53266 start = start >>> 0
53267 end = end === undefined ? this.length : end >>> 0
53268
53269 if (!val) val = 0
53270
53271 var i
53272 if (typeof val === 'number') {
53273 for (i = start; i < end; ++i) {
53274 this[i] = val
53275 }
53276 } else {
53277 var bytes = Buffer.isBuffer(val)
53278 ? val
53279 : new Buffer(val, encoding)
53280 var len = bytes.length
53281 for (i = 0; i < end - start; ++i) {
53282 this[i + start] = bytes[i % len]
53283 }
53284 }
53285
53286 return this
53287 }
53288
53289 // HELPER FUNCTIONS
53290 // ================
53291
53292 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
53293
53294 function base64clean (str) {
53295 // Node strips out invalid characters like \n and \t from the string, base64-js does not
53296 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
53297 // Node converts strings with length < 2 to ''
53298 if (str.length < 2) return ''
53299 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
53300 while (str.length % 4 !== 0) {
53301 str = str + '='
53302 }
53303 return str
53304 }
53305
53306 function stringtrim (str) {
53307 if (str.trim) return str.trim()
53308 return str.replace(/^\s+|\s+$/g, '')
53309 }
53310
53311 function toHex (n) {
53312 if (n < 16) return '0' + n.toString(16)
53313 return n.toString(16)
53314 }
53315
53316 function utf8ToBytes (string, units) {
53317 units = units || Infinity
53318 var codePoint
53319 var length = string.length
53320 var leadSurrogate = null
53321 var bytes = []
53322
53323 for (var i = 0; i < length; ++i) {
53324 codePoint = string.charCodeAt(i)
53325
53326 // is surrogate component
53327 if (codePoint > 0xD7FF && codePoint < 0xE000) {
53328 // last char was a lead
53329 if (!leadSurrogate) {
53330 // no lead yet
53331 if (codePoint > 0xDBFF) {
53332 // unexpected trail
53333 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
53334 continue
53335 } else if (i + 1 === length) {
53336 // unpaired lead
53337 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
53338 continue
53339 }
53340
53341 // valid lead
53342 leadSurrogate = codePoint
53343
53344 continue
53345 }
53346
53347 // 2 leads in a row
53348 if (codePoint < 0xDC00) {
53349 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
53350 leadSurrogate = codePoint
53351 continue
53352 }
53353
53354 // valid surrogate pair
53355 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
53356 } else if (leadSurrogate) {
53357 // valid bmp char, but last char was a lead
53358 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
53359 }
53360
53361 leadSurrogate = null
53362
53363 // encode utf8
53364 if (codePoint < 0x80) {
53365 if ((units -= 1) < 0) break
53366 bytes.push(codePoint)
53367 } else if (codePoint < 0x800) {
53368 if ((units -= 2) < 0) break
53369 bytes.push(
53370 codePoint >> 0x6 | 0xC0,
53371 codePoint & 0x3F | 0x80
53372 )
53373 } else if (codePoint < 0x10000) {
53374 if ((units -= 3) < 0) break
53375 bytes.push(
53376 codePoint >> 0xC | 0xE0,
53377 codePoint >> 0x6 & 0x3F | 0x80,
53378 codePoint & 0x3F | 0x80
53379 )
53380 } else if (codePoint < 0x110000) {
53381 if ((units -= 4) < 0) break
53382 bytes.push(
53383 codePoint >> 0x12 | 0xF0,
53384 codePoint >> 0xC & 0x3F | 0x80,
53385 codePoint >> 0x6 & 0x3F | 0x80,
53386 codePoint & 0x3F | 0x80
53387 )
53388 } else {
53389 throw new Error('Invalid code point')
53390 }
53391 }
53392
53393 return bytes
53394 }
53395
53396 function asciiToBytes (str) {
53397 var byteArray = []
53398 for (var i = 0; i < str.length; ++i) {
53399 // Node's code seems to be doing this and not & 0x7F..
53400 byteArray.push(str.charCodeAt(i) & 0xFF)
53401 }
53402 return byteArray
53403 }
53404
53405 function utf16leToBytes (str, units) {
53406 var c, hi, lo
53407 var byteArray = []
53408 for (var i = 0; i < str.length; ++i) {
53409 if ((units -= 2) < 0) break
53410
53411 c = str.charCodeAt(i)
53412 hi = c >> 8
53413 lo = c % 256
53414 byteArray.push(lo)
53415 byteArray.push(hi)
53416 }
53417
53418 return byteArray
53419 }
53420
53421 function base64ToBytes (str) {
53422 return base64.toByteArray(base64clean(str))
53423 }
53424
53425 function blitBuffer (src, dst, offset, length) {
53426 for (var i = 0; i < length; ++i) {
53427 if ((i + offset >= dst.length) || (i >= src.length)) break
53428 dst[i + offset] = src[i]
53429 }
53430 return i
53431 }
53432
53433 function isnan (val) {
53434 return val !== val // eslint-disable-line no-self-compare
53435 }
53436
53437 },{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
53438 (function (Buffer){
53439 // Copyright Joyent, Inc. and other Node contributors.
53440 //
53441 // Permission is hereby granted, free of charge, to any person obtaining a
53442 // copy of this software and associated documentation files (the
53443 // "Software"), to deal in the Software without restriction, including
53444 // without limitation the rights to use, copy, modify, merge, publish,
53445 // distribute, sublicense, and/or sell copies of the Software, and to permit
53446 // persons to whom the Software is furnished to do so, subject to the
53447 // following conditions:
53448 //
53449 // The above copyright notice and this permission notice shall be included
53450 // in all copies or substantial portions of the Software.
53451 //
53452 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
53453 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
53454 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
53455 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
53456 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
53457 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
53458 // USE OR OTHER DEALINGS IN THE SOFTWARE.
53459
53460 // NOTE: These type checking functions intentionally don't use `instanceof`
53461 // because it is fragile and can be easily faked with `Object.create()`.
53462
53463 function isArray(arg) {
53464 if (Array.isArray) {
53465 return Array.isArray(arg);
53466 }
53467 return objectToString(arg) === '[object Array]';
53468 }
53469 exports.isArray = isArray;
53470
53471 function isBoolean(arg) {
53472 return typeof arg === 'boolean';
53473 }
53474 exports.isBoolean = isBoolean;
53475
53476 function isNull(arg) {
53477 return arg === null;
53478 }
53479 exports.isNull = isNull;
53480
53481 function isNullOrUndefined(arg) {
53482 return arg == null;
53483 }
53484 exports.isNullOrUndefined = isNullOrUndefined;
53485
53486 function isNumber(arg) {
53487 return typeof arg === 'number';
53488 }
53489 exports.isNumber = isNumber;
53490
53491 function isString(arg) {
53492 return typeof arg === 'string';
53493 }
53494 exports.isString = isString;
53495
53496 function isSymbol(arg) {
53497 return typeof arg === 'symbol';
53498 }
53499 exports.isSymbol = isSymbol;
53500
53501 function isUndefined(arg) {
53502 return arg === void 0;
53503 }
53504 exports.isUndefined = isUndefined;
53505
53506 function isRegExp(re) {
53507 return objectToString(re) === '[object RegExp]';
53508 }
53509 exports.isRegExp = isRegExp;
53510
53511 function isObject(arg) {
53512 return typeof arg === 'object' && arg !== null;
53513 }
53514 exports.isObject = isObject;
53515
53516 function isDate(d) {
53517 return objectToString(d) === '[object Date]';
53518 }
53519 exports.isDate = isDate;
53520
53521 function isError(e) {
53522 return (objectToString(e) === '[object Error]' || e instanceof Error);
53523 }
53524 exports.isError = isError;
53525
53526 function isFunction(arg) {
53527 return typeof arg === 'function';
53528 }
53529 exports.isFunction = isFunction;
53530
53531 function isPrimitive(arg) {
53532 return arg === null ||
53533 typeof arg === 'boolean' ||
53534 typeof arg === 'number' ||
53535 typeof arg === 'string' ||
53536 typeof arg === 'symbol' || // ES6 symbol
53537 typeof arg === 'undefined';
53538 }
53539 exports.isPrimitive = isPrimitive;
53540
53541 exports.isBuffer = Buffer.isBuffer;
53542
53543 function objectToString(o) {
53544 return Object.prototype.toString.call(o);
53545 }
53546
53547 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
53548 },{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
53549 // Copyright Joyent, Inc. and other Node contributors.
53550 //
53551 // Permission is hereby granted, free of charge, to any person obtaining a
53552 // copy of this software and associated documentation files (the
53553 // "Software"), to deal in the Software without restriction, including
53554 // without limitation the rights to use, copy, modify, merge, publish,
53555 // distribute, sublicense, and/or sell copies of the Software, and to permit
53556 // persons to whom the Software is furnished to do so, subject to the
53557 // following conditions:
53558 //
53559 // The above copyright notice and this permission notice shall be included
53560 // in all copies or substantial portions of the Software.
53561 //
53562 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
53563 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
53564 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
53565 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
53566 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
53567 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
53568 // USE OR OTHER DEALINGS IN THE SOFTWARE.
53569
53570 function EventEmitter() {
53571 this._events = this._events || {};
53572 this._maxListeners = this._maxListeners || undefined;
53573 }
53574 module.exports = EventEmitter;
53575
53576 // Backwards-compat with node 0.10.x
53577 EventEmitter.EventEmitter = EventEmitter;
53578
53579 EventEmitter.prototype._events = undefined;
53580 EventEmitter.prototype._maxListeners = undefined;
53581
53582 // By default EventEmitters will print a warning if more than 10 listeners are
53583 // added to it. This is a useful default which helps finding memory leaks.
53584 EventEmitter.defaultMaxListeners = 10;
53585
53586 // Obviously not all Emitters should be limited to 10. This function allows
53587 // that to be increased. Set to zero for unlimited.
53588 EventEmitter.prototype.setMaxListeners = function(n) {
53589 if (!isNumber(n) || n < 0 || isNaN(n))
53590 throw TypeError('n must be a positive number');
53591 this._maxListeners = n;
53592 return this;
53593 };
53594
53595 EventEmitter.prototype.emit = function(type) {
53596 var er, handler, len, args, i, listeners;
53597
53598 if (!this._events)
53599 this._events = {};
53600
53601 // If there is no 'error' event listener then throw.
53602 if (type === 'error') {
53603 if (!this._events.error ||
53604 (isObject(this._events.error) && !this._events.error.length)) {
53605 er = arguments[1];
53606 if (er instanceof Error) {
53607 throw er; // Unhandled 'error' event
53608 } else {
53609 // At least give some kind of context to the user
53610 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
53611 err.context = er;
53612 throw err;
53613 }
53614 }
53615 }
53616
53617 handler = this._events[type];
53618
53619 if (isUndefined(handler))
53620 return false;
53621
53622 if (isFunction(handler)) {
53623 switch (arguments.length) {
53624 // fast cases
53625 case 1:
53626 handler.call(this);
53627 break;
53628 case 2:
53629 handler.call(this, arguments[1]);
53630 break;
53631 case 3:
53632 handler.call(this, arguments[1], arguments[2]);
53633 break;
53634 // slower
53635 default:
53636 args = Array.prototype.slice.call(arguments, 1);
53637 handler.apply(this, args);
53638 }
53639 } else if (isObject(handler)) {
53640 args = Array.prototype.slice.call(arguments, 1);
53641 listeners = handler.slice();
53642 len = listeners.length;
53643 for (i = 0; i < len; i++)
53644 listeners[i].apply(this, args);
53645 }
53646
53647 return true;
53648 };
53649
53650 EventEmitter.prototype.addListener = function(type, listener) {
53651 var m;
53652
53653 if (!isFunction(listener))
53654 throw TypeError('listener must be a function');
53655
53656 if (!this._events)
53657 this._events = {};
53658
53659 // To avoid recursion in the case that type === "newListener"! Before
53660 // adding it to the listeners, first emit "newListener".
53661 if (this._events.newListener)
53662 this.emit('newListener', type,
53663 isFunction(listener.listener) ?
53664 listener.listener : listener);
53665
53666 if (!this._events[type])
53667 // Optimize the case of one listener. Don't need the extra array object.
53668 this._events[type] = listener;
53669 else if (isObject(this._events[type]))
53670 // If we've already got an array, just append.
53671 this._events[type].push(listener);
53672 else
53673 // Adding the second element, need to change to array.
53674 this._events[type] = [this._events[type], listener];
53675
53676 // Check for listener leak
53677 if (isObject(this._events[type]) && !this._events[type].warned) {
53678 if (!isUndefined(this._maxListeners)) {
53679 m = this._maxListeners;
53680 } else {
53681 m = EventEmitter.defaultMaxListeners;
53682 }
53683
53684 if (m && m > 0 && this._events[type].length > m) {
53685 this._events[type].warned = true;
53686 console.error('(node) warning: possible EventEmitter memory ' +
53687 'leak detected. %d listeners added. ' +
53688 'Use emitter.setMaxListeners() to increase limit.',
53689 this._events[type].length);
53690 if (typeof console.trace === 'function') {
53691 // not supported in IE 10
53692 console.trace();
53693 }
53694 }
53695 }
53696
53697 return this;
53698 };
53699
53700 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
53701
53702 EventEmitter.prototype.once = function(type, listener) {
53703 if (!isFunction(listener))
53704 throw TypeError('listener must be a function');
53705
53706 var fired = false;
53707
53708 function g() {
53709 this.removeListener(type, g);
53710
53711 if (!fired) {
53712 fired = true;
53713 listener.apply(this, arguments);
53714 }
53715 }
53716
53717 g.listener = listener;
53718 this.on(type, g);
53719
53720 return this;
53721 };
53722
53723 // emits a 'removeListener' event iff the listener was removed
53724 EventEmitter.prototype.removeListener = function(type, listener) {
53725 var list, position, length, i;
53726
53727 if (!isFunction(listener))
53728 throw TypeError('listener must be a function');
53729
53730 if (!this._events || !this._events[type])
53731 return this;
53732
53733 list = this._events[type];
53734 length = list.length;
53735 position = -1;
53736
53737 if (list === listener ||
53738 (isFunction(list.listener) && list.listener === listener)) {
53739 delete this._events[type];
53740 if (this._events.removeListener)
53741 this.emit('removeListener', type, listener);
53742
53743 } else if (isObject(list)) {
53744 for (i = length; i-- > 0;) {
53745 if (list[i] === listener ||
53746 (list[i].listener && list[i].listener === listener)) {
53747 position = i;
53748 break;
53749 }
53750 }
53751
53752 if (position < 0)
53753 return this;
53754
53755 if (list.length === 1) {
53756 list.length = 0;
53757 delete this._events[type];
53758 } else {
53759 list.splice(position, 1);
53760 }
53761
53762 if (this._events.removeListener)
53763 this.emit('removeListener', type, listener);
53764 }
53765
53766 return this;
53767 };
53768
53769 EventEmitter.prototype.removeAllListeners = function(type) {
53770 var key, listeners;
53771
53772 if (!this._events)
53773 return this;
53774
53775 // not listening for removeListener, no need to emit
53776 if (!this._events.removeListener) {
53777 if (arguments.length === 0)
53778 this._events = {};
53779 else if (this._events[type])
53780 delete this._events[type];
53781 return this;
53782 }
53783
53784 // emit removeListener for all listeners on all events
53785 if (arguments.length === 0) {
53786 for (key in this._events) {
53787 if (key === 'removeListener') continue;
53788 this.removeAllListeners(key);
53789 }
53790 this.removeAllListeners('removeListener');
53791 this._events = {};
53792 return this;
53793 }
53794
53795 listeners = this._events[type];
53796
53797 if (isFunction(listeners)) {
53798 this.removeListener(type, listeners);
53799 } else if (listeners) {
53800 // LIFO order
53801 while (listeners.length)
53802 this.removeListener(type, listeners[listeners.length - 1]);
53803 }
53804 delete this._events[type];
53805
53806 return this;
53807 };
53808
53809 EventEmitter.prototype.listeners = function(type) {
53810 var ret;
53811 if (!this._events || !this._events[type])
53812 ret = [];
53813 else if (isFunction(this._events[type]))
53814 ret = [this._events[type]];
53815 else
53816 ret = this._events[type].slice();
53817 return ret;
53818 };
53819
53820 EventEmitter.prototype.listenerCount = function(type) {
53821 if (this._events) {
53822 var evlistener = this._events[type];
53823
53824 if (isFunction(evlistener))
53825 return 1;
53826 else if (evlistener)
53827 return evlistener.length;
53828 }
53829 return 0;
53830 };
53831
53832 EventEmitter.listenerCount = function(emitter, type) {
53833 return emitter.listenerCount(type);
53834 };
53835
53836 function isFunction(arg) {
53837 return typeof arg === 'function';
53838 }
53839
53840 function isNumber(arg) {
53841 return typeof arg === 'number';
53842 }
53843
53844 function isObject(arg) {
53845 return typeof arg === 'object' && arg !== null;
53846 }
53847
53848 function isUndefined(arg) {
53849 return arg === void 0;
53850 }
53851
53852 },{}],8:[function(require,module,exports){
53853 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
53854 var e, m
53855 var eLen = nBytes * 8 - mLen - 1
53856 var eMax = (1 << eLen) - 1
53857 var eBias = eMax >> 1
53858 var nBits = -7
53859 var i = isLE ? (nBytes - 1) : 0
53860 var d = isLE ? -1 : 1
53861 var s = buffer[offset + i]
53862
53863 i += d
53864
53865 e = s & ((1 << (-nBits)) - 1)
53866 s >>= (-nBits)
53867 nBits += eLen
53868 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
53869
53870 m = e & ((1 << (-nBits)) - 1)
53871 e >>= (-nBits)
53872 nBits += mLen
53873 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
53874
53875 if (e === 0) {
53876 e = 1 - eBias
53877 } else if (e === eMax) {
53878 return m ? NaN : ((s ? -1 : 1) * Infinity)
53879 } else {
53880 m = m + Math.pow(2, mLen)
53881 e = e - eBias
53882 }
53883 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
53884 }
53885
53886 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
53887 var e, m, c
53888 var eLen = nBytes * 8 - mLen - 1
53889 var eMax = (1 << eLen) - 1
53890 var eBias = eMax >> 1
53891 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
53892 var i = isLE ? 0 : (nBytes - 1)
53893 var d = isLE ? 1 : -1
53894 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
53895
53896 value = Math.abs(value)
53897
53898 if (isNaN(value) || value === Infinity) {
53899 m = isNaN(value) ? 1 : 0
53900 e = eMax
53901 } else {
53902 e = Math.floor(Math.log(value) / Math.LN2)
53903 if (value * (c = Math.pow(2, -e)) < 1) {
53904 e--
53905 c *= 2
53906 }
53907 if (e + eBias >= 1) {
53908 value += rt / c
53909 } else {
53910 value += rt * Math.pow(2, 1 - eBias)
53911 }
53912 if (value * c >= 2) {
53913 e++
53914 c /= 2
53915 }
53916
53917 if (e + eBias >= eMax) {
53918 m = 0
53919 e = eMax
53920 } else if (e + eBias >= 1) {
53921 m = (value * c - 1) * Math.pow(2, mLen)
53922 e = e + eBias
53923 } else {
53924 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
53925 e = 0
53926 }
53927 }
53928
53929 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
53930
53931 e = (e << mLen) | m
53932 eLen += mLen
53933 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
53934
53935 buffer[offset + i - d] |= s * 128
53936 }
53937
53938 },{}],9:[function(require,module,exports){
53939 if (typeof Object.create === 'function') {
53940 // implementation from standard node.js 'util' module
53941 module.exports = function inherits(ctor, superCtor) {
53942 ctor.super_ = superCtor
53943 ctor.prototype = Object.create(superCtor.prototype, {
53944 constructor: {
53945 value: ctor,
53946 enumerable: false,
53947 writable: true,
53948 configurable: true
53949 }
53950 });
53951 };
53952 } else {
53953 // old school shim for old browsers
53954 module.exports = function inherits(ctor, superCtor) {
53955 ctor.super_ = superCtor
53956 var TempCtor = function () {}
53957 TempCtor.prototype = superCtor.prototype
53958 ctor.prototype = new TempCtor()
53959 ctor.prototype.constructor = ctor
53960 }
53961 }
53962
53963 },{}],10:[function(require,module,exports){
53964 /*!
53965 * Determine if an object is a Buffer
53966 *
53967 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
53968 * @license MIT
53969 */
53970
53971 // The _isBuffer check is for Safari 5-7 support, because it's missing
53972 // Object.prototype.constructor. Remove this eventually
53973 module.exports = function (obj) {
53974 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
53975 }
53976
53977 function isBuffer (obj) {
53978 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
53979 }
53980
53981 // For Node v0.10 support. Remove this eventually.
53982 function isSlowBuffer (obj) {
53983 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
53984 }
53985
53986 },{}],11:[function(require,module,exports){
53987 var toString = {}.toString;
53988
53989 module.exports = Array.isArray || function (arr) {
53990 return toString.call(arr) == '[object Array]';
53991 };
53992
53993 },{}],12:[function(require,module,exports){
53994 (function (process){
53995 'use strict';
53996
53997 if (!process.version ||
53998 process.version.indexOf('v0.') === 0 ||
53999 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
54000 module.exports = nextTick;
54001 } else {
54002 module.exports = process.nextTick;
54003 }
54004
54005 function nextTick(fn, arg1, arg2, arg3) {
54006 if (typeof fn !== 'function') {
54007 throw new TypeError('"callback" argument must be a function');
54008 }
54009 var len = arguments.length;
54010 var args, i;
54011 switch (len) {
54012 case 0:
54013 case 1:
54014 return process.nextTick(fn);
54015 case 2:
54016 return process.nextTick(function afterTickOne() {
54017 fn.call(null, arg1);
54018 });
54019 case 3:
54020 return process.nextTick(function afterTickTwo() {
54021 fn.call(null, arg1, arg2);
54022 });
54023 case 4:
54024 return process.nextTick(function afterTickThree() {
54025 fn.call(null, arg1, arg2, arg3);
54026 });
54027 default:
54028 args = new Array(len - 1);
54029 i = 0;
54030 while (i < args.length) {
54031 args[i++] = arguments[i];
54032 }
54033 return process.nextTick(function afterTick() {
54034 fn.apply(null, args);
54035 });
54036 }
54037 }
54038
54039 }).call(this,require('_process'))
54040 },{"_process":13}],13:[function(require,module,exports){
54041 // shim for using process in browser
54042 var process = module.exports = {};
54043
54044 // cached from whatever global is present so that test runners that stub it
54045 // don't break things. But we need to wrap it in a try catch in case it is
54046 // wrapped in strict mode code which doesn't define any globals. It's inside a
54047 // function because try/catches deoptimize in certain engines.
54048
54049 var cachedSetTimeout;
54050 var cachedClearTimeout;
54051
54052 function defaultSetTimout() {
54053 throw new Error('setTimeout has not been defined');
54054 }
54055 function defaultClearTimeout () {
54056 throw new Error('clearTimeout has not been defined');
54057 }
54058 (function () {
54059 try {
54060 if (typeof setTimeout === 'function') {
54061 cachedSetTimeout = setTimeout;
54062 } else {
54063 cachedSetTimeout = defaultSetTimout;
54064 }
54065 } catch (e) {
54066 cachedSetTimeout = defaultSetTimout;
54067 }
54068 try {
54069 if (typeof clearTimeout === 'function') {
54070 cachedClearTimeout = clearTimeout;
54071 } else {
54072 cachedClearTimeout = defaultClearTimeout;
54073 }
54074 } catch (e) {
54075 cachedClearTimeout = defaultClearTimeout;
54076 }
54077 } ())
54078 function runTimeout(fun) {
54079 if (cachedSetTimeout === setTimeout) {
54080 //normal enviroments in sane situations
54081 return setTimeout(fun, 0);
54082 }
54083 // if setTimeout wasn't available but was latter defined
54084 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
54085 cachedSetTimeout = setTimeout;
54086 return setTimeout(fun, 0);
54087 }
54088 try {
54089 // when when somebody has screwed with setTimeout but no I.E. maddness
54090 return cachedSetTimeout(fun, 0);
54091 } catch(e){
54092 try {
54093 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
54094 return cachedSetTimeout.call(null, fun, 0);
54095 } catch(e){
54096 // 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
54097 return cachedSetTimeout.call(this, fun, 0);
54098 }
54099 }
54100
54101
54102 }
54103 function runClearTimeout(marker) {
54104 if (cachedClearTimeout === clearTimeout) {
54105 //normal enviroments in sane situations
54106 return clearTimeout(marker);
54107 }
54108 // if clearTimeout wasn't available but was latter defined
54109 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
54110 cachedClearTimeout = clearTimeout;
54111 return clearTimeout(marker);
54112 }
54113 try {
54114 // when when somebody has screwed with setTimeout but no I.E. maddness
54115 return cachedClearTimeout(marker);
54116 } catch (e){
54117 try {
54118 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
54119 return cachedClearTimeout.call(null, marker);
54120 } catch (e){
54121 // 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.
54122 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
54123 return cachedClearTimeout.call(this, marker);
54124 }
54125 }
54126
54127
54128
54129 }
54130 var queue = [];
54131 var draining = false;
54132 var currentQueue;
54133 var queueIndex = -1;
54134
54135 function cleanUpNextTick() {
54136 if (!draining || !currentQueue) {
54137 return;
54138 }
54139 draining = false;
54140 if (currentQueue.length) {
54141 queue = currentQueue.concat(queue);
54142 } else {
54143 queueIndex = -1;
54144 }
54145 if (queue.length) {
54146 drainQueue();
54147 }
54148 }
54149
54150 function drainQueue() {
54151 if (draining) {
54152 return;
54153 }
54154 var timeout = runTimeout(cleanUpNextTick);
54155 draining = true;
54156
54157 var len = queue.length;
54158 while(len) {
54159 currentQueue = queue;
54160 queue = [];
54161 while (++queueIndex < len) {
54162 if (currentQueue) {
54163 currentQueue[queueIndex].run();
54164 }
54165 }
54166 queueIndex = -1;
54167 len = queue.length;
54168 }
54169 currentQueue = null;
54170 draining = false;
54171 runClearTimeout(timeout);
54172 }
54173
54174 process.nextTick = function (fun) {
54175 var args = new Array(arguments.length - 1);
54176 if (arguments.length > 1) {
54177 for (var i = 1; i < arguments.length; i++) {
54178 args[i - 1] = arguments[i];
54179 }
54180 }
54181 queue.push(new Item(fun, args));
54182 if (queue.length === 1 && !draining) {
54183 runTimeout(drainQueue);
54184 }
54185 };
54186
54187 // v8 likes predictible objects
54188 function Item(fun, array) {
54189 this.fun = fun;
54190 this.array = array;
54191 }
54192 Item.prototype.run = function () {
54193 this.fun.apply(null, this.array);
54194 };
54195 process.title = 'browser';
54196 process.browser = true;
54197 process.env = {};
54198 process.argv = [];
54199 process.version = ''; // empty string to avoid regexp issues
54200 process.versions = {};
54201
54202 function noop() {}
54203
54204 process.on = noop;
54205 process.addListener = noop;
54206 process.once = noop;
54207 process.off = noop;
54208 process.removeListener = noop;
54209 process.removeAllListeners = noop;
54210 process.emit = noop;
54211
54212 process.binding = function (name) {
54213 throw new Error('process.binding is not supported');
54214 };
54215
54216 process.cwd = function () { return '/' };
54217 process.chdir = function (dir) {
54218 throw new Error('process.chdir is not supported');
54219 };
54220 process.umask = function() { return 0; };
54221
54222 },{}],14:[function(require,module,exports){
54223 module.exports = require("./lib/_stream_duplex.js")
54224
54225 },{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
54226 // a duplex stream is just a stream that is both readable and writable.
54227 // Since JS doesn't have multiple prototypal inheritance, this class
54228 // prototypally inherits from Readable, and then parasitically from
54229 // Writable.
54230
54231 'use strict';
54232
54233 /*<replacement>*/
54234
54235 var objectKeys = Object.keys || function (obj) {
54236 var keys = [];
54237 for (var key in obj) {
54238 keys.push(key);
54239 }return keys;
54240 };
54241 /*</replacement>*/
54242
54243 module.exports = Duplex;
54244
54245 /*<replacement>*/
54246 var processNextTick = require('process-nextick-args');
54247 /*</replacement>*/
54248
54249 /*<replacement>*/
54250 var util = require('core-util-is');
54251 util.inherits = require('inherits');
54252 /*</replacement>*/
54253
54254 var Readable = require('./_stream_readable');
54255 var Writable = require('./_stream_writable');
54256
54257 util.inherits(Duplex, Readable);
54258
54259 var keys = objectKeys(Writable.prototype);
54260 for (var v = 0; v < keys.length; v++) {
54261 var method = keys[v];
54262 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
54263 }
54264
54265 function Duplex(options) {
54266 if (!(this instanceof Duplex)) return new Duplex(options);
54267
54268 Readable.call(this, options);
54269 Writable.call(this, options);
54270
54271 if (options && options.readable === false) this.readable = false;
54272
54273 if (options && options.writable === false) this.writable = false;
54274
54275 this.allowHalfOpen = true;
54276 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
54277
54278 this.once('end', onend);
54279 }
54280
54281 // the no-half-open enforcer
54282 function onend() {
54283 // if we allow half-open state, or if the writable side ended,
54284 // then we're ok.
54285 if (this.allowHalfOpen || this._writableState.ended) return;
54286
54287 // no more data can be written.
54288 // But allow more writes to happen in this tick.
54289 processNextTick(onEndNT, this);
54290 }
54291
54292 function onEndNT(self) {
54293 self.end();
54294 }
54295
54296 function forEach(xs, f) {
54297 for (var i = 0, l = xs.length; i < l; i++) {
54298 f(xs[i], i);
54299 }
54300 }
54301 },{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
54302 // a passthrough stream.
54303 // basically just the most minimal sort of Transform stream.
54304 // Every written chunk gets output as-is.
54305
54306 'use strict';
54307
54308 module.exports = PassThrough;
54309
54310 var Transform = require('./_stream_transform');
54311
54312 /*<replacement>*/
54313 var util = require('core-util-is');
54314 util.inherits = require('inherits');
54315 /*</replacement>*/
54316
54317 util.inherits(PassThrough, Transform);
54318
54319 function PassThrough(options) {
54320 if (!(this instanceof PassThrough)) return new PassThrough(options);
54321
54322 Transform.call(this, options);
54323 }
54324
54325 PassThrough.prototype._transform = function (chunk, encoding, cb) {
54326 cb(null, chunk);
54327 };
54328 },{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
54329 (function (process){
54330 'use strict';
54331
54332 module.exports = Readable;
54333
54334 /*<replacement>*/
54335 var processNextTick = require('process-nextick-args');
54336 /*</replacement>*/
54337
54338 /*<replacement>*/
54339 var isArray = require('isarray');
54340 /*</replacement>*/
54341
54342 /*<replacement>*/
54343 var Duplex;
54344 /*</replacement>*/
54345
54346 Readable.ReadableState = ReadableState;
54347
54348 /*<replacement>*/
54349 var EE = require('events').EventEmitter;
54350
54351 var EElistenerCount = function (emitter, type) {
54352 return emitter.listeners(type).length;
54353 };
54354 /*</replacement>*/
54355
54356 /*<replacement>*/
54357 var Stream;
54358 (function () {
54359 try {
54360 Stream = require('st' + 'ream');
54361 } catch (_) {} finally {
54362 if (!Stream) Stream = require('events').EventEmitter;
54363 }
54364 })();
54365 /*</replacement>*/
54366
54367 var Buffer = require('buffer').Buffer;
54368 /*<replacement>*/
54369 var bufferShim = require('buffer-shims');
54370 /*</replacement>*/
54371
54372 /*<replacement>*/
54373 var util = require('core-util-is');
54374 util.inherits = require('inherits');
54375 /*</replacement>*/
54376
54377 /*<replacement>*/
54378 var debugUtil = require('util');
54379 var debug = void 0;
54380 if (debugUtil && debugUtil.debuglog) {
54381 debug = debugUtil.debuglog('stream');
54382 } else {
54383 debug = function () {};
54384 }
54385 /*</replacement>*/
54386
54387 var BufferList = require('./internal/streams/BufferList');
54388 var StringDecoder;
54389
54390 util.inherits(Readable, Stream);
54391
54392 function prependListener(emitter, event, fn) {
54393 // Sadly this is not cacheable as some libraries bundle their own
54394 // event emitter implementation with them.
54395 if (typeof emitter.prependListener === 'function') {
54396 return emitter.prependListener(event, fn);
54397 } else {
54398 // This is a hack to make sure that our error handler is attached before any
54399 // userland ones. NEVER DO THIS. This is here only because this code needs
54400 // to continue to work with older versions of Node.js that do not include
54401 // the prependListener() method. The goal is to eventually remove this hack.
54402 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]];
54403 }
54404 }
54405
54406 function ReadableState(options, stream) {
54407 Duplex = Duplex || require('./_stream_duplex');
54408
54409 options = options || {};
54410
54411 // object stream flag. Used to make read(n) ignore n and to
54412 // make all the buffer merging and length checks go away
54413 this.objectMode = !!options.objectMode;
54414
54415 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
54416
54417 // the point at which it stops calling _read() to fill the buffer
54418 // Note: 0 is a valid value, means "don't call _read preemptively ever"
54419 var hwm = options.highWaterMark;
54420 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
54421 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
54422
54423 // cast to ints.
54424 this.highWaterMark = ~ ~this.highWaterMark;
54425
54426 // A linked list is used to store data chunks instead of an array because the
54427 // linked list can remove elements from the beginning faster than
54428 // array.shift()
54429 this.buffer = new BufferList();
54430 this.length = 0;
54431 this.pipes = null;
54432 this.pipesCount = 0;
54433 this.flowing = null;
54434 this.ended = false;
54435 this.endEmitted = false;
54436 this.reading = false;
54437
54438 // a flag to be able to tell if the onwrite cb is called immediately,
54439 // or on a later tick. We set this to true at first, because any
54440 // actions that shouldn't happen until "later" should generally also
54441 // not happen before the first write call.
54442 this.sync = true;
54443
54444 // whenever we return null, then we set a flag to say
54445 // that we're awaiting a 'readable' event emission.
54446 this.needReadable = false;
54447 this.emittedReadable = false;
54448 this.readableListening = false;
54449 this.resumeScheduled = false;
54450
54451 // Crypto is kind of old and crusty. Historically, its default string
54452 // encoding is 'binary' so we have to make this configurable.
54453 // Everything else in the universe uses 'utf8', though.
54454 this.defaultEncoding = options.defaultEncoding || 'utf8';
54455
54456 // when piping, we only care about 'readable' events that happen
54457 // after read()ing all the bytes and not getting any pushback.
54458 this.ranOut = false;
54459
54460 // the number of writers that are awaiting a drain event in .pipe()s
54461 this.awaitDrain = 0;
54462
54463 // if true, a maybeReadMore has been scheduled
54464 this.readingMore = false;
54465
54466 this.decoder = null;
54467 this.encoding = null;
54468 if (options.encoding) {
54469 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
54470 this.decoder = new StringDecoder(options.encoding);
54471 this.encoding = options.encoding;
54472 }
54473 }
54474
54475 function Readable(options) {
54476 Duplex = Duplex || require('./_stream_duplex');
54477
54478 if (!(this instanceof Readable)) return new Readable(options);
54479
54480 this._readableState = new ReadableState(options, this);
54481
54482 // legacy
54483 this.readable = true;
54484
54485 if (options && typeof options.read === 'function') this._read = options.read;
54486
54487 Stream.call(this);
54488 }
54489
54490 // Manually shove something into the read() buffer.
54491 // This returns true if the highWaterMark has not been hit yet,
54492 // similar to how Writable.write() returns true if you should
54493 // write() some more.
54494 Readable.prototype.push = function (chunk, encoding) {
54495 var state = this._readableState;
54496
54497 if (!state.objectMode && typeof chunk === 'string') {
54498 encoding = encoding || state.defaultEncoding;
54499 if (encoding !== state.encoding) {
54500 chunk = bufferShim.from(chunk, encoding);
54501 encoding = '';
54502 }
54503 }
54504
54505 return readableAddChunk(this, state, chunk, encoding, false);
54506 };
54507
54508 // Unshift should *always* be something directly out of read()
54509 Readable.prototype.unshift = function (chunk) {
54510 var state = this._readableState;
54511 return readableAddChunk(this, state, chunk, '', true);
54512 };
54513
54514 Readable.prototype.isPaused = function () {
54515 return this._readableState.flowing === false;
54516 };
54517
54518 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
54519 var er = chunkInvalid(state, chunk);
54520 if (er) {
54521 stream.emit('error', er);
54522 } else if (chunk === null) {
54523 state.reading = false;
54524 onEofChunk(stream, state);
54525 } else if (state.objectMode || chunk && chunk.length > 0) {
54526 if (state.ended && !addToFront) {
54527 var e = new Error('stream.push() after EOF');
54528 stream.emit('error', e);
54529 } else if (state.endEmitted && addToFront) {
54530 var _e = new Error('stream.unshift() after end event');
54531 stream.emit('error', _e);
54532 } else {
54533 var skipAdd;
54534 if (state.decoder && !addToFront && !encoding) {
54535 chunk = state.decoder.write(chunk);
54536 skipAdd = !state.objectMode && chunk.length === 0;
54537 }
54538
54539 if (!addToFront) state.reading = false;
54540
54541 // Don't add to the buffer if we've decoded to an empty string chunk and
54542 // we're not in object mode
54543 if (!skipAdd) {
54544 // if we want the data now, just emit it.
54545 if (state.flowing && state.length === 0 && !state.sync) {
54546 stream.emit('data', chunk);
54547 stream.read(0);
54548 } else {
54549 // update the buffer info.
54550 state.length += state.objectMode ? 1 : chunk.length;
54551 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
54552
54553 if (state.needReadable) emitReadable(stream);
54554 }
54555 }
54556
54557 maybeReadMore(stream, state);
54558 }
54559 } else if (!addToFront) {
54560 state.reading = false;
54561 }
54562
54563 return needMoreData(state);
54564 }
54565
54566 // if it's past the high water mark, we can push in some more.
54567 // Also, if we have no data yet, we can stand some
54568 // more bytes. This is to work around cases where hwm=0,
54569 // such as the repl. Also, if the push() triggered a
54570 // readable event, and the user called read(largeNumber) such that
54571 // needReadable was set, then we ought to push more, so that another
54572 // 'readable' event will be triggered.
54573 function needMoreData(state) {
54574 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
54575 }
54576
54577 // backwards compatibility.
54578 Readable.prototype.setEncoding = function (enc) {
54579 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
54580 this._readableState.decoder = new StringDecoder(enc);
54581 this._readableState.encoding = enc;
54582 return this;
54583 };
54584
54585 // Don't raise the hwm > 8MB
54586 var MAX_HWM = 0x800000;
54587 function computeNewHighWaterMark(n) {
54588 if (n >= MAX_HWM) {
54589 n = MAX_HWM;
54590 } else {
54591 // Get the next highest power of 2 to prevent increasing hwm excessively in
54592 // tiny amounts
54593 n--;
54594 n |= n >>> 1;
54595 n |= n >>> 2;
54596 n |= n >>> 4;
54597 n |= n >>> 8;
54598 n |= n >>> 16;
54599 n++;
54600 }
54601 return n;
54602 }
54603
54604 // This function is designed to be inlinable, so please take care when making
54605 // changes to the function body.
54606 function howMuchToRead(n, state) {
54607 if (n <= 0 || state.length === 0 && state.ended) return 0;
54608 if (state.objectMode) return 1;
54609 if (n !== n) {
54610 // Only flow one buffer at a time
54611 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
54612 }
54613 // If we're asking for more than the current hwm, then raise the hwm.
54614 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
54615 if (n <= state.length) return n;
54616 // Don't have enough
54617 if (!state.ended) {
54618 state.needReadable = true;
54619 return 0;
54620 }
54621 return state.length;
54622 }
54623
54624 // you can override either this method, or the async _read(n) below.
54625 Readable.prototype.read = function (n) {
54626 debug('read', n);
54627 n = parseInt(n, 10);
54628 var state = this._readableState;
54629 var nOrig = n;
54630
54631 if (n !== 0) state.emittedReadable = false;
54632
54633 // if we're doing read(0) to trigger a readable event, but we
54634 // already have a bunch of data in the buffer, then just trigger
54635 // the 'readable' event and move on.
54636 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
54637 debug('read: emitReadable', state.length, state.ended);
54638 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
54639 return null;
54640 }
54641
54642 n = howMuchToRead(n, state);
54643
54644 // if we've ended, and we're now clear, then finish it up.
54645 if (n === 0 && state.ended) {
54646 if (state.length === 0) endReadable(this);
54647 return null;
54648 }
54649
54650 // All the actual chunk generation logic needs to be
54651 // *below* the call to _read. The reason is that in certain
54652 // synthetic stream cases, such as passthrough streams, _read
54653 // may be a completely synchronous operation which may change
54654 // the state of the read buffer, providing enough data when
54655 // before there was *not* enough.
54656 //
54657 // So, the steps are:
54658 // 1. Figure out what the state of things will be after we do
54659 // a read from the buffer.
54660 //
54661 // 2. If that resulting state will trigger a _read, then call _read.
54662 // Note that this may be asynchronous, or synchronous. Yes, it is
54663 // deeply ugly to write APIs this way, but that still doesn't mean
54664 // that the Readable class should behave improperly, as streams are
54665 // designed to be sync/async agnostic.
54666 // Take note if the _read call is sync or async (ie, if the read call
54667 // has returned yet), so that we know whether or not it's safe to emit
54668 // 'readable' etc.
54669 //
54670 // 3. Actually pull the requested chunks out of the buffer and return.
54671
54672 // if we need a readable event, then we need to do some reading.
54673 var doRead = state.needReadable;
54674 debug('need readable', doRead);
54675
54676 // if we currently have less than the highWaterMark, then also read some
54677 if (state.length === 0 || state.length - n < state.highWaterMark) {
54678 doRead = true;
54679 debug('length less than watermark', doRead);
54680 }
54681
54682 // however, if we've ended, then there's no point, and if we're already
54683 // reading, then it's unnecessary.
54684 if (state.ended || state.reading) {
54685 doRead = false;
54686 debug('reading or ended', doRead);
54687 } else if (doRead) {
54688 debug('do read');
54689 state.reading = true;
54690 state.sync = true;
54691 // if the length is currently zero, then we *need* a readable event.
54692 if (state.length === 0) state.needReadable = true;
54693 // call internal read method
54694 this._read(state.highWaterMark);
54695 state.sync = false;
54696 // If _read pushed data synchronously, then `reading` will be false,
54697 // and we need to re-evaluate how much data we can return to the user.
54698 if (!state.reading) n = howMuchToRead(nOrig, state);
54699 }
54700
54701 var ret;
54702 if (n > 0) ret = fromList(n, state);else ret = null;
54703
54704 if (ret === null) {
54705 state.needReadable = true;
54706 n = 0;
54707 } else {
54708 state.length -= n;
54709 }
54710
54711 if (state.length === 0) {
54712 // If we have nothing in the buffer, then we want to know
54713 // as soon as we *do* get something into the buffer.
54714 if (!state.ended) state.needReadable = true;
54715
54716 // If we tried to read() past the EOF, then emit end on the next tick.
54717 if (nOrig !== n && state.ended) endReadable(this);
54718 }
54719
54720 if (ret !== null) this.emit('data', ret);
54721
54722 return ret;
54723 };
54724
54725 function chunkInvalid(state, chunk) {
54726 var er = null;
54727 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
54728 er = new TypeError('Invalid non-string/buffer chunk');
54729 }
54730 return er;
54731 }
54732
54733 function onEofChunk(stream, state) {
54734 if (state.ended) return;
54735 if (state.decoder) {
54736 var chunk = state.decoder.end();
54737 if (chunk && chunk.length) {
54738 state.buffer.push(chunk);
54739 state.length += state.objectMode ? 1 : chunk.length;
54740 }
54741 }
54742 state.ended = true;
54743
54744 // emit 'readable' now to make sure it gets picked up.
54745 emitReadable(stream);
54746 }
54747
54748 // Don't emit readable right away in sync mode, because this can trigger
54749 // another read() call => stack overflow. This way, it might trigger
54750 // a nextTick recursion warning, but that's not so bad.
54751 function emitReadable(stream) {
54752 var state = stream._readableState;
54753 state.needReadable = false;
54754 if (!state.emittedReadable) {
54755 debug('emitReadable', state.flowing);
54756 state.emittedReadable = true;
54757 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
54758 }
54759 }
54760
54761 function emitReadable_(stream) {
54762 debug('emit readable');
54763 stream.emit('readable');
54764 flow(stream);
54765 }
54766
54767 // at this point, the user has presumably seen the 'readable' event,
54768 // and called read() to consume some data. that may have triggered
54769 // in turn another _read(n) call, in which case reading = true if
54770 // it's in progress.
54771 // However, if we're not ended, or reading, and the length < hwm,
54772 // then go ahead and try to read some more preemptively.
54773 function maybeReadMore(stream, state) {
54774 if (!state.readingMore) {
54775 state.readingMore = true;
54776 processNextTick(maybeReadMore_, stream, state);
54777 }
54778 }
54779
54780 function maybeReadMore_(stream, state) {
54781 var len = state.length;
54782 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
54783 debug('maybeReadMore read 0');
54784 stream.read(0);
54785 if (len === state.length)
54786 // didn't get any data, stop spinning.
54787 break;else len = state.length;
54788 }
54789 state.readingMore = false;
54790 }
54791
54792 // abstract method. to be overridden in specific implementation classes.
54793 // call cb(er, data) where data is <= n in length.
54794 // for virtual (non-string, non-buffer) streams, "length" is somewhat
54795 // arbitrary, and perhaps not very meaningful.
54796 Readable.prototype._read = function (n) {
54797 this.emit('error', new Error('_read() is not implemented'));
54798 };
54799
54800 Readable.prototype.pipe = function (dest, pipeOpts) {
54801 var src = this;
54802 var state = this._readableState;
54803
54804 switch (state.pipesCount) {
54805 case 0:
54806 state.pipes = dest;
54807 break;
54808 case 1:
54809 state.pipes = [state.pipes, dest];
54810 break;
54811 default:
54812 state.pipes.push(dest);
54813 break;
54814 }
54815 state.pipesCount += 1;
54816 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
54817
54818 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
54819
54820 var endFn = doEnd ? onend : cleanup;
54821 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
54822
54823 dest.on('unpipe', onunpipe);
54824 function onunpipe(readable) {
54825 debug('onunpipe');
54826 if (readable === src) {
54827 cleanup();
54828 }
54829 }
54830
54831 function onend() {
54832 debug('onend');
54833 dest.end();
54834 }
54835
54836 // when the dest drains, it reduces the awaitDrain counter
54837 // on the source. This would be more elegant with a .once()
54838 // handler in flow(), but adding and removing repeatedly is
54839 // too slow.
54840 var ondrain = pipeOnDrain(src);
54841 dest.on('drain', ondrain);
54842
54843 var cleanedUp = false;
54844 function cleanup() {
54845 debug('cleanup');
54846 // cleanup event handlers once the pipe is broken
54847 dest.removeListener('close', onclose);
54848 dest.removeListener('finish', onfinish);
54849 dest.removeListener('drain', ondrain);
54850 dest.removeListener('error', onerror);
54851 dest.removeListener('unpipe', onunpipe);
54852 src.removeListener('end', onend);
54853 src.removeListener('end', cleanup);
54854 src.removeListener('data', ondata);
54855
54856 cleanedUp = true;
54857
54858 // if the reader is waiting for a drain event from this
54859 // specific writer, then it would cause it to never start
54860 // flowing again.
54861 // So, if this is awaiting a drain, then we just call it now.
54862 // If we don't know, then assume that we are waiting for one.
54863 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
54864 }
54865
54866 // If the user pushes more data while we're writing to dest then we'll end up
54867 // in ondata again. However, we only want to increase awaitDrain once because
54868 // dest will only emit one 'drain' event for the multiple writes.
54869 // => Introduce a guard on increasing awaitDrain.
54870 var increasedAwaitDrain = false;
54871 src.on('data', ondata);
54872 function ondata(chunk) {
54873 debug('ondata');
54874 increasedAwaitDrain = false;
54875 var ret = dest.write(chunk);
54876 if (false === ret && !increasedAwaitDrain) {
54877 // If the user unpiped during `dest.write()`, it is possible
54878 // to get stuck in a permanently paused state if that write
54879 // also returned false.
54880 // => Check whether `dest` is still a piping destination.
54881 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
54882 debug('false write response, pause', src._readableState.awaitDrain);
54883 src._readableState.awaitDrain++;
54884 increasedAwaitDrain = true;
54885 }
54886 src.pause();
54887 }
54888 }
54889
54890 // if the dest has an error, then stop piping into it.
54891 // however, don't suppress the throwing behavior for this.
54892 function onerror(er) {
54893 debug('onerror', er);
54894 unpipe();
54895 dest.removeListener('error', onerror);
54896 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
54897 }
54898
54899 // Make sure our error handler is attached before userland ones.
54900 prependListener(dest, 'error', onerror);
54901
54902 // Both close and finish should trigger unpipe, but only once.
54903 function onclose() {
54904 dest.removeListener('finish', onfinish);
54905 unpipe();
54906 }
54907 dest.once('close', onclose);
54908 function onfinish() {
54909 debug('onfinish');
54910 dest.removeListener('close', onclose);
54911 unpipe();
54912 }
54913 dest.once('finish', onfinish);
54914
54915 function unpipe() {
54916 debug('unpipe');
54917 src.unpipe(dest);
54918 }
54919
54920 // tell the dest that it's being piped to
54921 dest.emit('pipe', src);
54922
54923 // start the flow if it hasn't been started already.
54924 if (!state.flowing) {
54925 debug('pipe resume');
54926 src.resume();
54927 }
54928
54929 return dest;
54930 };
54931
54932 function pipeOnDrain(src) {
54933 return function () {
54934 var state = src._readableState;
54935 debug('pipeOnDrain', state.awaitDrain);
54936 if (state.awaitDrain) state.awaitDrain--;
54937 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
54938 state.flowing = true;
54939 flow(src);
54940 }
54941 };
54942 }
54943
54944 Readable.prototype.unpipe = function (dest) {
54945 var state = this._readableState;
54946
54947 // if we're not piping anywhere, then do nothing.
54948 if (state.pipesCount === 0) return this;
54949
54950 // just one destination. most common case.
54951 if (state.pipesCount === 1) {
54952 // passed in one, but it's not the right one.
54953 if (dest && dest !== state.pipes) return this;
54954
54955 if (!dest) dest = state.pipes;
54956
54957 // got a match.
54958 state.pipes = null;
54959 state.pipesCount = 0;
54960 state.flowing = false;
54961 if (dest) dest.emit('unpipe', this);
54962 return this;
54963 }
54964
54965 // slow case. multiple pipe destinations.
54966
54967 if (!dest) {
54968 // remove all.
54969 var dests = state.pipes;
54970 var len = state.pipesCount;
54971 state.pipes = null;
54972 state.pipesCount = 0;
54973 state.flowing = false;
54974
54975 for (var i = 0; i < len; i++) {
54976 dests[i].emit('unpipe', this);
54977 }return this;
54978 }
54979
54980 // try to find the right one.
54981 var index = indexOf(state.pipes, dest);
54982 if (index === -1) return this;
54983
54984 state.pipes.splice(index, 1);
54985 state.pipesCount -= 1;
54986 if (state.pipesCount === 1) state.pipes = state.pipes[0];
54987
54988 dest.emit('unpipe', this);
54989
54990 return this;
54991 };
54992
54993 // set up data events if they are asked for
54994 // Ensure readable listeners eventually get something
54995 Readable.prototype.on = function (ev, fn) {
54996 var res = Stream.prototype.on.call(this, ev, fn);
54997
54998 if (ev === 'data') {
54999 // Start flowing on next tick if stream isn't explicitly paused
55000 if (this._readableState.flowing !== false) this.resume();
55001 } else if (ev === 'readable') {
55002 var state = this._readableState;
55003 if (!state.endEmitted && !state.readableListening) {
55004 state.readableListening = state.needReadable = true;
55005 state.emittedReadable = false;
55006 if (!state.reading) {
55007 processNextTick(nReadingNextTick, this);
55008 } else if (state.length) {
55009 emitReadable(this, state);
55010 }
55011 }
55012 }
55013
55014 return res;
55015 };
55016 Readable.prototype.addListener = Readable.prototype.on;
55017
55018 function nReadingNextTick(self) {
55019 debug('readable nexttick read 0');
55020 self.read(0);
55021 }
55022
55023 // pause() and resume() are remnants of the legacy readable stream API
55024 // If the user uses them, then switch into old mode.
55025 Readable.prototype.resume = function () {
55026 var state = this._readableState;
55027 if (!state.flowing) {
55028 debug('resume');
55029 state.flowing = true;
55030 resume(this, state);
55031 }
55032 return this;
55033 };
55034
55035 function resume(stream, state) {
55036 if (!state.resumeScheduled) {
55037 state.resumeScheduled = true;
55038 processNextTick(resume_, stream, state);
55039 }
55040 }
55041
55042 function resume_(stream, state) {
55043 if (!state.reading) {
55044 debug('resume read 0');
55045 stream.read(0);
55046 }
55047
55048 state.resumeScheduled = false;
55049 state.awaitDrain = 0;
55050 stream.emit('resume');
55051 flow(stream);
55052 if (state.flowing && !state.reading) stream.read(0);
55053 }
55054
55055 Readable.prototype.pause = function () {
55056 debug('call pause flowing=%j', this._readableState.flowing);
55057 if (false !== this._readableState.flowing) {
55058 debug('pause');
55059 this._readableState.flowing = false;
55060 this.emit('pause');
55061 }
55062 return this;
55063 };
55064
55065 function flow(stream) {
55066 var state = stream._readableState;
55067 debug('flow', state.flowing);
55068 while (state.flowing && stream.read() !== null) {}
55069 }
55070
55071 // wrap an old-style stream as the async data source.
55072 // This is *not* part of the readable stream interface.
55073 // It is an ugly unfortunate mess of history.
55074 Readable.prototype.wrap = function (stream) {
55075 var state = this._readableState;
55076 var paused = false;
55077
55078 var self = this;
55079 stream.on('end', function () {
55080 debug('wrapped end');
55081 if (state.decoder && !state.ended) {
55082 var chunk = state.decoder.end();
55083 if (chunk && chunk.length) self.push(chunk);
55084 }
55085
55086 self.push(null);
55087 });
55088
55089 stream.on('data', function (chunk) {
55090 debug('wrapped data');
55091 if (state.decoder) chunk = state.decoder.write(chunk);
55092
55093 // don't skip over falsy values in objectMode
55094 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
55095
55096 var ret = self.push(chunk);
55097 if (!ret) {
55098 paused = true;
55099 stream.pause();
55100 }
55101 });
55102
55103 // proxy all the other methods.
55104 // important when wrapping filters and duplexes.
55105 for (var i in stream) {
55106 if (this[i] === undefined && typeof stream[i] === 'function') {
55107 this[i] = function (method) {
55108 return function () {
55109 return stream[method].apply(stream, arguments);
55110 };
55111 }(i);
55112 }
55113 }
55114
55115 // proxy certain important events.
55116 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
55117 forEach(events, function (ev) {
55118 stream.on(ev, self.emit.bind(self, ev));
55119 });
55120
55121 // when we try to consume some more bytes, simply unpause the
55122 // underlying stream.
55123 self._read = function (n) {
55124 debug('wrapped _read', n);
55125 if (paused) {
55126 paused = false;
55127 stream.resume();
55128 }
55129 };
55130
55131 return self;
55132 };
55133
55134 // exposed for testing purposes only.
55135 Readable._fromList = fromList;
55136
55137 // Pluck off n bytes from an array of buffers.
55138 // Length is the combined lengths of all the buffers in the list.
55139 // This function is designed to be inlinable, so please take care when making
55140 // changes to the function body.
55141 function fromList(n, state) {
55142 // nothing buffered
55143 if (state.length === 0) return null;
55144
55145 var ret;
55146 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
55147 // read it all, truncate the list
55148 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);
55149 state.buffer.clear();
55150 } else {
55151 // read part of list
55152 ret = fromListPartial(n, state.buffer, state.decoder);
55153 }
55154
55155 return ret;
55156 }
55157
55158 // Extracts only enough buffered data to satisfy the amount requested.
55159 // This function is designed to be inlinable, so please take care when making
55160 // changes to the function body.
55161 function fromListPartial(n, list, hasStrings) {
55162 var ret;
55163 if (n < list.head.data.length) {
55164 // slice is the same for buffers and strings
55165 ret = list.head.data.slice(0, n);
55166 list.head.data = list.head.data.slice(n);
55167 } else if (n === list.head.data.length) {
55168 // first chunk is a perfect match
55169 ret = list.shift();
55170 } else {
55171 // result spans more than one buffer
55172 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
55173 }
55174 return ret;
55175 }
55176
55177 // Copies a specified amount of characters from the list of buffered data
55178 // chunks.
55179 // This function is designed to be inlinable, so please take care when making
55180 // changes to the function body.
55181 function copyFromBufferString(n, list) {
55182 var p = list.head;
55183 var c = 1;
55184 var ret = p.data;
55185 n -= ret.length;
55186 while (p = p.next) {
55187 var str = p.data;
55188 var nb = n > str.length ? str.length : n;
55189 if (nb === str.length) ret += str;else ret += str.slice(0, n);
55190 n -= nb;
55191 if (n === 0) {
55192 if (nb === str.length) {
55193 ++c;
55194 if (p.next) list.head = p.next;else list.head = list.tail = null;
55195 } else {
55196 list.head = p;
55197 p.data = str.slice(nb);
55198 }
55199 break;
55200 }
55201 ++c;
55202 }
55203 list.length -= c;
55204 return ret;
55205 }
55206
55207 // Copies a specified amount of bytes from the list of buffered data chunks.
55208 // This function is designed to be inlinable, so please take care when making
55209 // changes to the function body.
55210 function copyFromBuffer(n, list) {
55211 var ret = bufferShim.allocUnsafe(n);
55212 var p = list.head;
55213 var c = 1;
55214 p.data.copy(ret);
55215 n -= p.data.length;
55216 while (p = p.next) {
55217 var buf = p.data;
55218 var nb = n > buf.length ? buf.length : n;
55219 buf.copy(ret, ret.length - n, 0, nb);
55220 n -= nb;
55221 if (n === 0) {
55222 if (nb === buf.length) {
55223 ++c;
55224 if (p.next) list.head = p.next;else list.head = list.tail = null;
55225 } else {
55226 list.head = p;
55227 p.data = buf.slice(nb);
55228 }
55229 break;
55230 }
55231 ++c;
55232 }
55233 list.length -= c;
55234 return ret;
55235 }
55236
55237 function endReadable(stream) {
55238 var state = stream._readableState;
55239
55240 // If we get here before consuming all the bytes, then that is a
55241 // bug in node. Should never happen.
55242 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
55243
55244 if (!state.endEmitted) {
55245 state.ended = true;
55246 processNextTick(endReadableNT, state, stream);
55247 }
55248 }
55249
55250 function endReadableNT(state, stream) {
55251 // Check that we didn't get one last unshift.
55252 if (!state.endEmitted && state.length === 0) {
55253 state.endEmitted = true;
55254 stream.readable = false;
55255 stream.emit('end');
55256 }
55257 }
55258
55259 function forEach(xs, f) {
55260 for (var i = 0, l = xs.length; i < l; i++) {
55261 f(xs[i], i);
55262 }
55263 }
55264
55265 function indexOf(xs, x) {
55266 for (var i = 0, l = xs.length; i < l; i++) {
55267 if (xs[i] === x) return i;
55268 }
55269 return -1;
55270 }
55271 }).call(this,require('_process'))
55272 },{"./_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){
55273 // a transform stream is a readable/writable stream where you do
55274 // something with the data. Sometimes it's called a "filter",
55275 // but that's not a great name for it, since that implies a thing where
55276 // some bits pass through, and others are simply ignored. (That would
55277 // be a valid example of a transform, of course.)
55278 //
55279 // While the output is causally related to the input, it's not a
55280 // necessarily symmetric or synchronous transformation. For example,
55281 // a zlib stream might take multiple plain-text writes(), and then
55282 // emit a single compressed chunk some time in the future.
55283 //
55284 // Here's how this works:
55285 //
55286 // The Transform stream has all the aspects of the readable and writable
55287 // stream classes. When you write(chunk), that calls _write(chunk,cb)
55288 // internally, and returns false if there's a lot of pending writes
55289 // buffered up. When you call read(), that calls _read(n) until
55290 // there's enough pending readable data buffered up.
55291 //
55292 // In a transform stream, the written data is placed in a buffer. When
55293 // _read(n) is called, it transforms the queued up data, calling the
55294 // buffered _write cb's as it consumes chunks. If consuming a single
55295 // written chunk would result in multiple output chunks, then the first
55296 // outputted bit calls the readcb, and subsequent chunks just go into
55297 // the read buffer, and will cause it to emit 'readable' if necessary.
55298 //
55299 // This way, back-pressure is actually determined by the reading side,
55300 // since _read has to be called to start processing a new chunk. However,
55301 // a pathological inflate type of transform can cause excessive buffering
55302 // here. For example, imagine a stream where every byte of input is
55303 // interpreted as an integer from 0-255, and then results in that many
55304 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
55305 // 1kb of data being output. In this case, you could write a very small
55306 // amount of input, and end up with a very large amount of output. In
55307 // such a pathological inflating mechanism, there'd be no way to tell
55308 // the system to stop doing the transform. A single 4MB write could
55309 // cause the system to run out of memory.
55310 //
55311 // However, even in such a pathological case, only a single written chunk
55312 // would be consumed, and then the rest would wait (un-transformed) until
55313 // the results of the previous transformed chunk were consumed.
55314
55315 'use strict';
55316
55317 module.exports = Transform;
55318
55319 var Duplex = require('./_stream_duplex');
55320
55321 /*<replacement>*/
55322 var util = require('core-util-is');
55323 util.inherits = require('inherits');
55324 /*</replacement>*/
55325
55326 util.inherits(Transform, Duplex);
55327
55328 function TransformState(stream) {
55329 this.afterTransform = function (er, data) {
55330 return afterTransform(stream, er, data);
55331 };
55332
55333 this.needTransform = false;
55334 this.transforming = false;
55335 this.writecb = null;
55336 this.writechunk = null;
55337 this.writeencoding = null;
55338 }
55339
55340 function afterTransform(stream, er, data) {
55341 var ts = stream._transformState;
55342 ts.transforming = false;
55343
55344 var cb = ts.writecb;
55345
55346 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
55347
55348 ts.writechunk = null;
55349 ts.writecb = null;
55350
55351 if (data !== null && data !== undefined) stream.push(data);
55352
55353 cb(er);
55354
55355 var rs = stream._readableState;
55356 rs.reading = false;
55357 if (rs.needReadable || rs.length < rs.highWaterMark) {
55358 stream._read(rs.highWaterMark);
55359 }
55360 }
55361
55362 function Transform(options) {
55363 if (!(this instanceof Transform)) return new Transform(options);
55364
55365 Duplex.call(this, options);
55366
55367 this._transformState = new TransformState(this);
55368
55369 var stream = this;
55370
55371 // start out asking for a readable event once data is transformed.
55372 this._readableState.needReadable = true;
55373
55374 // we have implemented the _read method, and done the other things
55375 // that Readable wants before the first _read call, so unset the
55376 // sync guard flag.
55377 this._readableState.sync = false;
55378
55379 if (options) {
55380 if (typeof options.transform === 'function') this._transform = options.transform;
55381
55382 if (typeof options.flush === 'function') this._flush = options.flush;
55383 }
55384
55385 // When the writable side finishes, then flush out anything remaining.
55386 this.once('prefinish', function () {
55387 if (typeof this._flush === 'function') this._flush(function (er, data) {
55388 done(stream, er, data);
55389 });else done(stream);
55390 });
55391 }
55392
55393 Transform.prototype.push = function (chunk, encoding) {
55394 this._transformState.needTransform = false;
55395 return Duplex.prototype.push.call(this, chunk, encoding);
55396 };
55397
55398 // This is the part where you do stuff!
55399 // override this function in implementation classes.
55400 // 'chunk' is an input chunk.
55401 //
55402 // Call `push(newChunk)` to pass along transformed output
55403 // to the readable side. You may call 'push' zero or more times.
55404 //
55405 // Call `cb(err)` when you are done with this chunk. If you pass
55406 // an error, then that'll put the hurt on the whole operation. If you
55407 // never call cb(), then you'll never get another chunk.
55408 Transform.prototype._transform = function (chunk, encoding, cb) {
55409 throw new Error('_transform() is not implemented');
55410 };
55411
55412 Transform.prototype._write = function (chunk, encoding, cb) {
55413 var ts = this._transformState;
55414 ts.writecb = cb;
55415 ts.writechunk = chunk;
55416 ts.writeencoding = encoding;
55417 if (!ts.transforming) {
55418 var rs = this._readableState;
55419 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
55420 }
55421 };
55422
55423 // Doesn't matter what the args are here.
55424 // _transform does all the work.
55425 // That we got here means that the readable side wants more data.
55426 Transform.prototype._read = function (n) {
55427 var ts = this._transformState;
55428
55429 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
55430 ts.transforming = true;
55431 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
55432 } else {
55433 // mark that we need a transform, so that any data that comes in
55434 // will get processed, now that we've asked for it.
55435 ts.needTransform = true;
55436 }
55437 };
55438
55439 function done(stream, er, data) {
55440 if (er) return stream.emit('error', er);
55441
55442 if (data !== null && data !== undefined) stream.push(data);
55443
55444 // if there's nothing in the write buffer, then that means
55445 // that nothing more will ever be provided
55446 var ws = stream._writableState;
55447 var ts = stream._transformState;
55448
55449 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
55450
55451 if (ts.transforming) throw new Error('Calling transform done when still transforming');
55452
55453 return stream.push(null);
55454 }
55455 },{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
55456 (function (process){
55457 // A bit simpler than readable streams.
55458 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
55459 // the drain event emission and buffering.
55460
55461 'use strict';
55462
55463 module.exports = Writable;
55464
55465 /*<replacement>*/
55466 var processNextTick = require('process-nextick-args');
55467 /*</replacement>*/
55468
55469 /*<replacement>*/
55470 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
55471 /*</replacement>*/
55472
55473 /*<replacement>*/
55474 var Duplex;
55475 /*</replacement>*/
55476
55477 Writable.WritableState = WritableState;
55478
55479 /*<replacement>*/
55480 var util = require('core-util-is');
55481 util.inherits = require('inherits');
55482 /*</replacement>*/
55483
55484 /*<replacement>*/
55485 var internalUtil = {
55486 deprecate: require('util-deprecate')
55487 };
55488 /*</replacement>*/
55489
55490 /*<replacement>*/
55491 var Stream;
55492 (function () {
55493 try {
55494 Stream = require('st' + 'ream');
55495 } catch (_) {} finally {
55496 if (!Stream) Stream = require('events').EventEmitter;
55497 }
55498 })();
55499 /*</replacement>*/
55500
55501 var Buffer = require('buffer').Buffer;
55502 /*<replacement>*/
55503 var bufferShim = require('buffer-shims');
55504 /*</replacement>*/
55505
55506 util.inherits(Writable, Stream);
55507
55508 function nop() {}
55509
55510 function WriteReq(chunk, encoding, cb) {
55511 this.chunk = chunk;
55512 this.encoding = encoding;
55513 this.callback = cb;
55514 this.next = null;
55515 }
55516
55517 function WritableState(options, stream) {
55518 Duplex = Duplex || require('./_stream_duplex');
55519
55520 options = options || {};
55521
55522 // object stream flag to indicate whether or not this stream
55523 // contains buffers or objects.
55524 this.objectMode = !!options.objectMode;
55525
55526 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
55527
55528 // the point at which write() starts returning false
55529 // Note: 0 is a valid value, means that we always return false if
55530 // the entire buffer is not flushed immediately on write()
55531 var hwm = options.highWaterMark;
55532 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
55533 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
55534
55535 // cast to ints.
55536 this.highWaterMark = ~ ~this.highWaterMark;
55537
55538 // drain event flag.
55539 this.needDrain = false;
55540 // at the start of calling end()
55541 this.ending = false;
55542 // when end() has been called, and returned
55543 this.ended = false;
55544 // when 'finish' is emitted
55545 this.finished = false;
55546
55547 // should we decode strings into buffers before passing to _write?
55548 // this is here so that some node-core streams can optimize string
55549 // handling at a lower level.
55550 var noDecode = options.decodeStrings === false;
55551 this.decodeStrings = !noDecode;
55552
55553 // Crypto is kind of old and crusty. Historically, its default string
55554 // encoding is 'binary' so we have to make this configurable.
55555 // Everything else in the universe uses 'utf8', though.
55556 this.defaultEncoding = options.defaultEncoding || 'utf8';
55557
55558 // not an actual buffer we keep track of, but a measurement
55559 // of how much we're waiting to get pushed to some underlying
55560 // socket or file.
55561 this.length = 0;
55562
55563 // a flag to see when we're in the middle of a write.
55564 this.writing = false;
55565
55566 // when true all writes will be buffered until .uncork() call
55567 this.corked = 0;
55568
55569 // a flag to be able to tell if the onwrite cb is called immediately,
55570 // or on a later tick. We set this to true at first, because any
55571 // actions that shouldn't happen until "later" should generally also
55572 // not happen before the first write call.
55573 this.sync = true;
55574
55575 // a flag to know if we're processing previously buffered items, which
55576 // may call the _write() callback in the same tick, so that we don't
55577 // end up in an overlapped onwrite situation.
55578 this.bufferProcessing = false;
55579
55580 // the callback that's passed to _write(chunk,cb)
55581 this.onwrite = function (er) {
55582 onwrite(stream, er);
55583 };
55584
55585 // the callback that the user supplies to write(chunk,encoding,cb)
55586 this.writecb = null;
55587
55588 // the amount that is being written when _write is called.
55589 this.writelen = 0;
55590
55591 this.bufferedRequest = null;
55592 this.lastBufferedRequest = null;
55593
55594 // number of pending user-supplied write callbacks
55595 // this must be 0 before 'finish' can be emitted
55596 this.pendingcb = 0;
55597
55598 // emit prefinish if the only thing we're waiting for is _write cbs
55599 // This is relevant for synchronous Transform streams
55600 this.prefinished = false;
55601
55602 // True if the error was already emitted and should not be thrown again
55603 this.errorEmitted = false;
55604
55605 // count buffered requests
55606 this.bufferedRequestCount = 0;
55607
55608 // allocate the first CorkedRequest, there is always
55609 // one allocated and free to use, and we maintain at most two
55610 this.corkedRequestsFree = new CorkedRequest(this);
55611 }
55612
55613 WritableState.prototype.getBuffer = function getBuffer() {
55614 var current = this.bufferedRequest;
55615 var out = [];
55616 while (current) {
55617 out.push(current);
55618 current = current.next;
55619 }
55620 return out;
55621 };
55622
55623 (function () {
55624 try {
55625 Object.defineProperty(WritableState.prototype, 'buffer', {
55626 get: internalUtil.deprecate(function () {
55627 return this.getBuffer();
55628 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
55629 });
55630 } catch (_) {}
55631 })();
55632
55633 // Test _writableState for inheritance to account for Duplex streams,
55634 // whose prototype chain only points to Readable.
55635 var realHasInstance;
55636 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
55637 realHasInstance = Function.prototype[Symbol.hasInstance];
55638 Object.defineProperty(Writable, Symbol.hasInstance, {
55639 value: function (object) {
55640 if (realHasInstance.call(this, object)) return true;
55641
55642 return object && object._writableState instanceof WritableState;
55643 }
55644 });
55645 } else {
55646 realHasInstance = function (object) {
55647 return object instanceof this;
55648 };
55649 }
55650
55651 function Writable(options) {
55652 Duplex = Duplex || require('./_stream_duplex');
55653
55654 // Writable ctor is applied to Duplexes, too.
55655 // `realHasInstance` is necessary because using plain `instanceof`
55656 // would return false, as no `_writableState` property is attached.
55657
55658 // Trying to use the custom `instanceof` for Writable here will also break the
55659 // Node.js LazyTransform implementation, which has a non-trivial getter for
55660 // `_writableState` that would lead to infinite recursion.
55661 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
55662 return new Writable(options);
55663 }
55664
55665 this._writableState = new WritableState(options, this);
55666
55667 // legacy.
55668 this.writable = true;
55669
55670 if (options) {
55671 if (typeof options.write === 'function') this._write = options.write;
55672
55673 if (typeof options.writev === 'function') this._writev = options.writev;
55674 }
55675
55676 Stream.call(this);
55677 }
55678
55679 // Otherwise people can pipe Writable streams, which is just wrong.
55680 Writable.prototype.pipe = function () {
55681 this.emit('error', new Error('Cannot pipe, not readable'));
55682 };
55683
55684 function writeAfterEnd(stream, cb) {
55685 var er = new Error('write after end');
55686 // TODO: defer error events consistently everywhere, not just the cb
55687 stream.emit('error', er);
55688 processNextTick(cb, er);
55689 }
55690
55691 // If we get something that is not a buffer, string, null, or undefined,
55692 // and we're not in objectMode, then that's an error.
55693 // Otherwise stream chunks are all considered to be of length=1, and the
55694 // watermarks determine how many objects to keep in the buffer, rather than
55695 // how many bytes or characters.
55696 function validChunk(stream, state, chunk, cb) {
55697 var valid = true;
55698 var er = false;
55699 // Always throw error if a null is written
55700 // if we are not in object mode then throw
55701 // if it is not a buffer, string, or undefined.
55702 if (chunk === null) {
55703 er = new TypeError('May not write null values to stream');
55704 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
55705 er = new TypeError('Invalid non-string/buffer chunk');
55706 }
55707 if (er) {
55708 stream.emit('error', er);
55709 processNextTick(cb, er);
55710 valid = false;
55711 }
55712 return valid;
55713 }
55714
55715 Writable.prototype.write = function (chunk, encoding, cb) {
55716 var state = this._writableState;
55717 var ret = false;
55718
55719 if (typeof encoding === 'function') {
55720 cb = encoding;
55721 encoding = null;
55722 }
55723
55724 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
55725
55726 if (typeof cb !== 'function') cb = nop;
55727
55728 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
55729 state.pendingcb++;
55730 ret = writeOrBuffer(this, state, chunk, encoding, cb);
55731 }
55732
55733 return ret;
55734 };
55735
55736 Writable.prototype.cork = function () {
55737 var state = this._writableState;
55738
55739 state.corked++;
55740 };
55741
55742 Writable.prototype.uncork = function () {
55743 var state = this._writableState;
55744
55745 if (state.corked) {
55746 state.corked--;
55747
55748 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
55749 }
55750 };
55751
55752 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
55753 // node::ParseEncoding() requires lower case.
55754 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
55755 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);
55756 this._writableState.defaultEncoding = encoding;
55757 return this;
55758 };
55759
55760 function decodeChunk(state, chunk, encoding) {
55761 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
55762 chunk = bufferShim.from(chunk, encoding);
55763 }
55764 return chunk;
55765 }
55766
55767 // if we're already writing something, then just put this
55768 // in the queue, and wait our turn. Otherwise, call _write
55769 // If we return false, then we need a drain event, so set that flag.
55770 function writeOrBuffer(stream, state, chunk, encoding, cb) {
55771 chunk = decodeChunk(state, chunk, encoding);
55772
55773 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
55774 var len = state.objectMode ? 1 : chunk.length;
55775
55776 state.length += len;
55777
55778 var ret = state.length < state.highWaterMark;
55779 // we must ensure that previous needDrain will not be reset to false.
55780 if (!ret) state.needDrain = true;
55781
55782 if (state.writing || state.corked) {
55783 var last = state.lastBufferedRequest;
55784 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
55785 if (last) {
55786 last.next = state.lastBufferedRequest;
55787 } else {
55788 state.bufferedRequest = state.lastBufferedRequest;
55789 }
55790 state.bufferedRequestCount += 1;
55791 } else {
55792 doWrite(stream, state, false, len, chunk, encoding, cb);
55793 }
55794
55795 return ret;
55796 }
55797
55798 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
55799 state.writelen = len;
55800 state.writecb = cb;
55801 state.writing = true;
55802 state.sync = true;
55803 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
55804 state.sync = false;
55805 }
55806
55807 function onwriteError(stream, state, sync, er, cb) {
55808 --state.pendingcb;
55809 if (sync) processNextTick(cb, er);else cb(er);
55810
55811 stream._writableState.errorEmitted = true;
55812 stream.emit('error', er);
55813 }
55814
55815 function onwriteStateUpdate(state) {
55816 state.writing = false;
55817 state.writecb = null;
55818 state.length -= state.writelen;
55819 state.writelen = 0;
55820 }
55821
55822 function onwrite(stream, er) {
55823 var state = stream._writableState;
55824 var sync = state.sync;
55825 var cb = state.writecb;
55826
55827 onwriteStateUpdate(state);
55828
55829 if (er) onwriteError(stream, state, sync, er, cb);else {
55830 // Check if we're actually ready to finish, but don't emit yet
55831 var finished = needFinish(state);
55832
55833 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
55834 clearBuffer(stream, state);
55835 }
55836
55837 if (sync) {
55838 /*<replacement>*/
55839 asyncWrite(afterWrite, stream, state, finished, cb);
55840 /*</replacement>*/
55841 } else {
55842 afterWrite(stream, state, finished, cb);
55843 }
55844 }
55845 }
55846
55847 function afterWrite(stream, state, finished, cb) {
55848 if (!finished) onwriteDrain(stream, state);
55849 state.pendingcb--;
55850 cb();
55851 finishMaybe(stream, state);
55852 }
55853
55854 // Must force callback to be called on nextTick, so that we don't
55855 // emit 'drain' before the write() consumer gets the 'false' return
55856 // value, and has a chance to attach a 'drain' listener.
55857 function onwriteDrain(stream, state) {
55858 if (state.length === 0 && state.needDrain) {
55859 state.needDrain = false;
55860 stream.emit('drain');
55861 }
55862 }
55863
55864 // if there's something in the buffer waiting, then process it
55865 function clearBuffer(stream, state) {
55866 state.bufferProcessing = true;
55867 var entry = state.bufferedRequest;
55868
55869 if (stream._writev && entry && entry.next) {
55870 // Fast case, write everything using _writev()
55871 var l = state.bufferedRequestCount;
55872 var buffer = new Array(l);
55873 var holder = state.corkedRequestsFree;
55874 holder.entry = entry;
55875
55876 var count = 0;
55877 while (entry) {
55878 buffer[count] = entry;
55879 entry = entry.next;
55880 count += 1;
55881 }
55882
55883 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
55884
55885 // doWrite is almost always async, defer these to save a bit of time
55886 // as the hot path ends with doWrite
55887 state.pendingcb++;
55888 state.lastBufferedRequest = null;
55889 if (holder.next) {
55890 state.corkedRequestsFree = holder.next;
55891 holder.next = null;
55892 } else {
55893 state.corkedRequestsFree = new CorkedRequest(state);
55894 }
55895 } else {
55896 // Slow case, write chunks one-by-one
55897 while (entry) {
55898 var chunk = entry.chunk;
55899 var encoding = entry.encoding;
55900 var cb = entry.callback;
55901 var len = state.objectMode ? 1 : chunk.length;
55902
55903 doWrite(stream, state, false, len, chunk, encoding, cb);
55904 entry = entry.next;
55905 // if we didn't call the onwrite immediately, then
55906 // it means that we need to wait until it does.
55907 // also, that means that the chunk and cb are currently
55908 // being processed, so move the buffer counter past them.
55909 if (state.writing) {
55910 break;
55911 }
55912 }
55913
55914 if (entry === null) state.lastBufferedRequest = null;
55915 }
55916
55917 state.bufferedRequestCount = 0;
55918 state.bufferedRequest = entry;
55919 state.bufferProcessing = false;
55920 }
55921
55922 Writable.prototype._write = function (chunk, encoding, cb) {
55923 cb(new Error('_write() is not implemented'));
55924 };
55925
55926 Writable.prototype._writev = null;
55927
55928 Writable.prototype.end = function (chunk, encoding, cb) {
55929 var state = this._writableState;
55930
55931 if (typeof chunk === 'function') {
55932 cb = chunk;
55933 chunk = null;
55934 encoding = null;
55935 } else if (typeof encoding === 'function') {
55936 cb = encoding;
55937 encoding = null;
55938 }
55939
55940 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
55941
55942 // .end() fully uncorks
55943 if (state.corked) {
55944 state.corked = 1;
55945 this.uncork();
55946 }
55947
55948 // ignore unnecessary end() calls.
55949 if (!state.ending && !state.finished) endWritable(this, state, cb);
55950 };
55951
55952 function needFinish(state) {
55953 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
55954 }
55955
55956 function prefinish(stream, state) {
55957 if (!state.prefinished) {
55958 state.prefinished = true;
55959 stream.emit('prefinish');
55960 }
55961 }
55962
55963 function finishMaybe(stream, state) {
55964 var need = needFinish(state);
55965 if (need) {
55966 if (state.pendingcb === 0) {
55967 prefinish(stream, state);
55968 state.finished = true;
55969 stream.emit('finish');
55970 } else {
55971 prefinish(stream, state);
55972 }
55973 }
55974 return need;
55975 }
55976
55977 function endWritable(stream, state, cb) {
55978 state.ending = true;
55979 finishMaybe(stream, state);
55980 if (cb) {
55981 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
55982 }
55983 state.ended = true;
55984 stream.writable = false;
55985 }
55986
55987 // It seems a linked list but it is not
55988 // there will be only 2 of these for each stream
55989 function CorkedRequest(state) {
55990 var _this = this;
55991
55992 this.next = null;
55993 this.entry = null;
55994
55995 this.finish = function (err) {
55996 var entry = _this.entry;
55997 _this.entry = null;
55998 while (entry) {
55999 var cb = entry.callback;
56000 state.pendingcb--;
56001 cb(err);
56002 entry = entry.next;
56003 }
56004 if (state.corkedRequestsFree) {
56005 state.corkedRequestsFree.next = _this;
56006 } else {
56007 state.corkedRequestsFree = _this;
56008 }
56009 };
56010 }
56011 }).call(this,require('_process'))
56012 },{"./_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){
56013 'use strict';
56014
56015 var Buffer = require('buffer').Buffer;
56016 /*<replacement>*/
56017 var bufferShim = require('buffer-shims');
56018 /*</replacement>*/
56019
56020 module.exports = BufferList;
56021
56022 function BufferList() {
56023 this.head = null;
56024 this.tail = null;
56025 this.length = 0;
56026 }
56027
56028 BufferList.prototype.push = function (v) {
56029 var entry = { data: v, next: null };
56030 if (this.length > 0) this.tail.next = entry;else this.head = entry;
56031 this.tail = entry;
56032 ++this.length;
56033 };
56034
56035 BufferList.prototype.unshift = function (v) {
56036 var entry = { data: v, next: this.head };
56037 if (this.length === 0) this.tail = entry;
56038 this.head = entry;
56039 ++this.length;
56040 };
56041
56042 BufferList.prototype.shift = function () {
56043 if (this.length === 0) return;
56044 var ret = this.head.data;
56045 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
56046 --this.length;
56047 return ret;
56048 };
56049
56050 BufferList.prototype.clear = function () {
56051 this.head = this.tail = null;
56052 this.length = 0;
56053 };
56054
56055 BufferList.prototype.join = function (s) {
56056 if (this.length === 0) return '';
56057 var p = this.head;
56058 var ret = '' + p.data;
56059 while (p = p.next) {
56060 ret += s + p.data;
56061 }return ret;
56062 };
56063
56064 BufferList.prototype.concat = function (n) {
56065 if (this.length === 0) return bufferShim.alloc(0);
56066 if (this.length === 1) return this.head.data;
56067 var ret = bufferShim.allocUnsafe(n >>> 0);
56068 var p = this.head;
56069 var i = 0;
56070 while (p) {
56071 p.data.copy(ret, i);
56072 i += p.data.length;
56073 p = p.next;
56074 }
56075 return ret;
56076 };
56077 },{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
56078 module.exports = require("./lib/_stream_passthrough.js")
56079
56080 },{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
56081 (function (process){
56082 var Stream = (function (){
56083 try {
56084 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
56085 } catch(_){}
56086 }());
56087 exports = module.exports = require('./lib/_stream_readable.js');
56088 exports.Stream = Stream || exports;
56089 exports.Readable = exports;
56090 exports.Writable = require('./lib/_stream_writable.js');
56091 exports.Duplex = require('./lib/_stream_duplex.js');
56092 exports.Transform = require('./lib/_stream_transform.js');
56093 exports.PassThrough = require('./lib/_stream_passthrough.js');
56094
56095 if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
56096 module.exports = Stream;
56097 }
56098
56099 }).call(this,require('_process'))
56100 },{"./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){
56101 module.exports = require("./lib/_stream_transform.js")
56102
56103 },{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
56104 module.exports = require("./lib/_stream_writable.js")
56105
56106 },{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
56107 // Copyright Joyent, Inc. and other Node contributors.
56108 //
56109 // Permission is hereby granted, free of charge, to any person obtaining a
56110 // copy of this software and associated documentation files (the
56111 // "Software"), to deal in the Software without restriction, including
56112 // without limitation the rights to use, copy, modify, merge, publish,
56113 // distribute, sublicense, and/or sell copies of the Software, and to permit
56114 // persons to whom the Software is furnished to do so, subject to the
56115 // following conditions:
56116 //
56117 // The above copyright notice and this permission notice shall be included
56118 // in all copies or substantial portions of the Software.
56119 //
56120 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
56121 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
56122 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
56123 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
56124 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
56125 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
56126 // USE OR OTHER DEALINGS IN THE SOFTWARE.
56127
56128 module.exports = Stream;
56129
56130 var EE = require('events').EventEmitter;
56131 var inherits = require('inherits');
56132
56133 inherits(Stream, EE);
56134 Stream.Readable = require('readable-stream/readable.js');
56135 Stream.Writable = require('readable-stream/writable.js');
56136 Stream.Duplex = require('readable-stream/duplex.js');
56137 Stream.Transform = require('readable-stream/transform.js');
56138 Stream.PassThrough = require('readable-stream/passthrough.js');
56139
56140 // Backwards-compat with node 0.4.x
56141 Stream.Stream = Stream;
56142
56143
56144
56145 // old-style streams. Note that the pipe method (the only relevant
56146 // part of this class) is overridden in the Readable class.
56147
56148 function Stream() {
56149 EE.call(this);
56150 }
56151
56152 Stream.prototype.pipe = function(dest, options) {
56153 var source = this;
56154
56155 function ondata(chunk) {
56156 if (dest.writable) {
56157 if (false === dest.write(chunk) && source.pause) {
56158 source.pause();
56159 }
56160 }
56161 }
56162
56163 source.on('data', ondata);
56164
56165 function ondrain() {
56166 if (source.readable && source.resume) {
56167 source.resume();
56168 }
56169 }
56170
56171 dest.on('drain', ondrain);
56172
56173 // If the 'end' option is not supplied, dest.end() will be called when
56174 // source gets the 'end' or 'close' events. Only dest.end() once.
56175 if (!dest._isStdio && (!options || options.end !== false)) {
56176 source.on('end', onend);
56177 source.on('close', onclose);
56178 }
56179
56180 var didOnEnd = false;
56181 function onend() {
56182 if (didOnEnd) return;
56183 didOnEnd = true;
56184
56185 dest.end();
56186 }
56187
56188
56189 function onclose() {
56190 if (didOnEnd) return;
56191 didOnEnd = true;
56192
56193 if (typeof dest.destroy === 'function') dest.destroy();
56194 }
56195
56196 // don't leave dangling pipes when there are errors.
56197 function onerror(er) {
56198 cleanup();
56199 if (EE.listenerCount(this, 'error') === 0) {
56200 throw er; // Unhandled stream error in pipe.
56201 }
56202 }
56203
56204 source.on('error', onerror);
56205 dest.on('error', onerror);
56206
56207 // remove all the event listeners that were added.
56208 function cleanup() {
56209 source.removeListener('data', ondata);
56210 dest.removeListener('drain', ondrain);
56211
56212 source.removeListener('end', onend);
56213 source.removeListener('close', onclose);
56214
56215 source.removeListener('error', onerror);
56216 dest.removeListener('error', onerror);
56217
56218 source.removeListener('end', cleanup);
56219 source.removeListener('close', cleanup);
56220
56221 dest.removeListener('close', cleanup);
56222 }
56223
56224 source.on('end', cleanup);
56225 source.on('close', cleanup);
56226
56227 dest.on('close', cleanup);
56228
56229 dest.emit('pipe', source);
56230
56231 // Allow for unix-like usage: A.pipe(B).pipe(C)
56232 return dest;
56233 };
56234
56235 },{"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){
56236 // Copyright Joyent, Inc. and other Node contributors.
56237 //
56238 // Permission is hereby granted, free of charge, to any person obtaining a
56239 // copy of this software and associated documentation files (the
56240 // "Software"), to deal in the Software without restriction, including
56241 // without limitation the rights to use, copy, modify, merge, publish,
56242 // distribute, sublicense, and/or sell copies of the Software, and to permit
56243 // persons to whom the Software is furnished to do so, subject to the
56244 // following conditions:
56245 //
56246 // The above copyright notice and this permission notice shall be included
56247 // in all copies or substantial portions of the Software.
56248 //
56249 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
56250 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
56251 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
56252 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
56253 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
56254 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
56255 // USE OR OTHER DEALINGS IN THE SOFTWARE.
56256
56257 var Buffer = require('buffer').Buffer;
56258
56259 var isBufferEncoding = Buffer.isEncoding
56260 || function(encoding) {
56261 switch (encoding && encoding.toLowerCase()) {
56262 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;
56263 default: return false;
56264 }
56265 }
56266
56267
56268 function assertEncoding(encoding) {
56269 if (encoding && !isBufferEncoding(encoding)) {
56270 throw new Error('Unknown encoding: ' + encoding);
56271 }
56272 }
56273
56274 // StringDecoder provides an interface for efficiently splitting a series of
56275 // buffers into a series of JS strings without breaking apart multi-byte
56276 // characters. CESU-8 is handled as part of the UTF-8 encoding.
56277 //
56278 // @TODO Handling all encodings inside a single object makes it very difficult
56279 // to reason about this code, so it should be split up in the future.
56280 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
56281 // points as used by CESU-8.
56282 var StringDecoder = exports.StringDecoder = function(encoding) {
56283 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
56284 assertEncoding(encoding);
56285 switch (this.encoding) {
56286 case 'utf8':
56287 // CESU-8 represents each of Surrogate Pair by 3-bytes
56288 this.surrogateSize = 3;
56289 break;
56290 case 'ucs2':
56291 case 'utf16le':
56292 // UTF-16 represents each of Surrogate Pair by 2-bytes
56293 this.surrogateSize = 2;
56294 this.detectIncompleteChar = utf16DetectIncompleteChar;
56295 break;
56296 case 'base64':
56297 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
56298 this.surrogateSize = 3;
56299 this.detectIncompleteChar = base64DetectIncompleteChar;
56300 break;
56301 default:
56302 this.write = passThroughWrite;
56303 return;
56304 }
56305
56306 // Enough space to store all bytes of a single character. UTF-8 needs 4
56307 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
56308 this.charBuffer = new Buffer(6);
56309 // Number of bytes received for the current incomplete multi-byte character.
56310 this.charReceived = 0;
56311 // Number of bytes expected for the current incomplete multi-byte character.
56312 this.charLength = 0;
56313 };
56314
56315
56316 // write decodes the given buffer and returns it as JS string that is
56317 // guaranteed to not contain any partial multi-byte characters. Any partial
56318 // character found at the end of the buffer is buffered up, and will be
56319 // returned when calling write again with the remaining bytes.
56320 //
56321 // Note: Converting a Buffer containing an orphan surrogate to a String
56322 // currently works, but converting a String to a Buffer (via `new Buffer`, or
56323 // Buffer#write) will replace incomplete surrogates with the unicode
56324 // replacement character. See https://codereview.chromium.org/121173009/ .
56325 StringDecoder.prototype.write = function(buffer) {
56326 var charStr = '';
56327 // if our last write ended with an incomplete multibyte character
56328 while (this.charLength) {
56329 // determine how many remaining bytes this buffer has to offer for this char
56330 var available = (buffer.length >= this.charLength - this.charReceived) ?
56331 this.charLength - this.charReceived :
56332 buffer.length;
56333
56334 // add the new bytes to the char buffer
56335 buffer.copy(this.charBuffer, this.charReceived, 0, available);
56336 this.charReceived += available;
56337
56338 if (this.charReceived < this.charLength) {
56339 // still not enough chars in this buffer? wait for more ...
56340 return '';
56341 }
56342
56343 // remove bytes belonging to the current character from the buffer
56344 buffer = buffer.slice(available, buffer.length);
56345
56346 // get the character that was split
56347 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
56348
56349 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
56350 var charCode = charStr.charCodeAt(charStr.length - 1);
56351 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
56352 this.charLength += this.surrogateSize;
56353 charStr = '';
56354 continue;
56355 }
56356 this.charReceived = this.charLength = 0;
56357
56358 // if there are no more bytes in this buffer, just emit our char
56359 if (buffer.length === 0) {
56360 return charStr;
56361 }
56362 break;
56363 }
56364
56365 // determine and set charLength / charReceived
56366 this.detectIncompleteChar(buffer);
56367
56368 var end = buffer.length;
56369 if (this.charLength) {
56370 // buffer the incomplete character bytes we got
56371 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
56372 end -= this.charReceived;
56373 }
56374
56375 charStr += buffer.toString(this.encoding, 0, end);
56376
56377 var end = charStr.length - 1;
56378 var charCode = charStr.charCodeAt(end);
56379 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
56380 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
56381 var size = this.surrogateSize;
56382 this.charLength += size;
56383 this.charReceived += size;
56384 this.charBuffer.copy(this.charBuffer, size, 0, size);
56385 buffer.copy(this.charBuffer, 0, 0, size);
56386 return charStr.substring(0, end);
56387 }
56388
56389 // or just emit the charStr
56390 return charStr;
56391 };
56392
56393 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
56394 // the end of the given buffer. If so, it sets this.charLength to the byte
56395 // length that character, and sets this.charReceived to the number of bytes
56396 // that are available for this character.
56397 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
56398 // determine how many bytes we have to check at the end of this buffer
56399 var i = (buffer.length >= 3) ? 3 : buffer.length;
56400
56401 // Figure out if one of the last i bytes of our buffer announces an
56402 // incomplete char.
56403 for (; i > 0; i--) {
56404 var c = buffer[buffer.length - i];
56405
56406 // See http://en.wikipedia.org/wiki/UTF-8#Description
56407
56408 // 110XXXXX
56409 if (i == 1 && c >> 5 == 0x06) {
56410 this.charLength = 2;
56411 break;
56412 }
56413
56414 // 1110XXXX
56415 if (i <= 2 && c >> 4 == 0x0E) {
56416 this.charLength = 3;
56417 break;
56418 }
56419
56420 // 11110XXX
56421 if (i <= 3 && c >> 3 == 0x1E) {
56422 this.charLength = 4;
56423 break;
56424 }
56425 }
56426 this.charReceived = i;
56427 };
56428
56429 StringDecoder.prototype.end = function(buffer) {
56430 var res = '';
56431 if (buffer && buffer.length)
56432 res = this.write(buffer);
56433
56434 if (this.charReceived) {
56435 var cr = this.charReceived;
56436 var buf = this.charBuffer;
56437 var enc = this.encoding;
56438 res += buf.slice(0, cr).toString(enc);
56439 }
56440
56441 return res;
56442 };
56443
56444 function passThroughWrite(buffer) {
56445 return buffer.toString(this.encoding);
56446 }
56447
56448 function utf16DetectIncompleteChar(buffer) {
56449 this.charReceived = buffer.length % 2;
56450 this.charLength = this.charReceived ? 2 : 0;
56451 }
56452
56453 function base64DetectIncompleteChar(buffer) {
56454 this.charReceived = buffer.length % 3;
56455 this.charLength = this.charReceived ? 3 : 0;
56456 }
56457
56458 },{"buffer":5}],27:[function(require,module,exports){
56459 (function (global){
56460
56461 /**
56462 * Module exports.
56463 */
56464
56465 module.exports = deprecate;
56466
56467 /**
56468 * Mark that a method should not be used.
56469 * Returns a modified function which warns once by default.
56470 *
56471 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
56472 *
56473 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
56474 * will throw an Error when invoked.
56475 *
56476 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
56477 * will invoke `console.trace()` instead of `console.error()`.
56478 *
56479 * @param {Function} fn - the function to deprecate
56480 * @param {String} msg - the string to print to the console when `fn` is invoked
56481 * @returns {Function} a new "deprecated" version of `fn`
56482 * @api public
56483 */
56484
56485 function deprecate (fn, msg) {
56486 if (config('noDeprecation')) {
56487 return fn;
56488 }
56489
56490 var warned = false;
56491 function deprecated() {
56492 if (!warned) {
56493 if (config('throwDeprecation')) {
56494 throw new Error(msg);
56495 } else if (config('traceDeprecation')) {
56496 console.trace(msg);
56497 } else {
56498 console.warn(msg);
56499 }
56500 warned = true;
56501 }
56502 return fn.apply(this, arguments);
56503 }
56504
56505 return deprecated;
56506 }
56507
56508 /**
56509 * Checks `localStorage` for boolean values for the given `name`.
56510 *
56511 * @param {String} name
56512 * @returns {Boolean}
56513 * @api private
56514 */
56515
56516 function config (name) {
56517 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
56518 try {
56519 if (!global.localStorage) return false;
56520 } catch (_) {
56521 return false;
56522 }
56523 var val = global.localStorage[name];
56524 if (null == val) return false;
56525 return String(val).toLowerCase() === 'true';
56526 }
56527
56528 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
56529 },{}],28:[function(require,module,exports){
56530 arguments[4][9][0].apply(exports,arguments)
56531 },{"dup":9}],29:[function(require,module,exports){
56532 module.exports = function isBuffer(arg) {
56533 return arg && typeof arg === 'object'
56534 && typeof arg.copy === 'function'
56535 && typeof arg.fill === 'function'
56536 && typeof arg.readUInt8 === 'function';
56537 }
56538 },{}],30:[function(require,module,exports){
56539 (function (process,global){
56540 // Copyright Joyent, Inc. and other Node contributors.
56541 //
56542 // Permission is hereby granted, free of charge, to any person obtaining a
56543 // copy of this software and associated documentation files (the
56544 // "Software"), to deal in the Software without restriction, including
56545 // without limitation the rights to use, copy, modify, merge, publish,
56546 // distribute, sublicense, and/or sell copies of the Software, and to permit
56547 // persons to whom the Software is furnished to do so, subject to the
56548 // following conditions:
56549 //
56550 // The above copyright notice and this permission notice shall be included
56551 // in all copies or substantial portions of the Software.
56552 //
56553 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
56554 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
56555 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
56556 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
56557 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
56558 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
56559 // USE OR OTHER DEALINGS IN THE SOFTWARE.
56560
56561 var formatRegExp = /%[sdj%]/g;
56562 exports.format = function(f) {
56563 if (!isString(f)) {
56564 var objects = [];
56565 for (var i = 0; i < arguments.length; i++) {
56566 objects.push(inspect(arguments[i]));
56567 }
56568 return objects.join(' ');
56569 }
56570
56571 var i = 1;
56572 var args = arguments;
56573 var len = args.length;
56574 var str = String(f).replace(formatRegExp, function(x) {
56575 if (x === '%%') return '%';
56576 if (i >= len) return x;
56577 switch (x) {
56578 case '%s': return String(args[i++]);
56579 case '%d': return Number(args[i++]);
56580 case '%j':
56581 try {
56582 return JSON.stringify(args[i++]);
56583 } catch (_) {
56584 return '[Circular]';
56585 }
56586 default:
56587 return x;
56588 }
56589 });
56590 for (var x = args[i]; i < len; x = args[++i]) {
56591 if (isNull(x) || !isObject(x)) {
56592 str += ' ' + x;
56593 } else {
56594 str += ' ' + inspect(x);
56595 }
56596 }
56597 return str;
56598 };
56599
56600
56601 // Mark that a method should not be used.
56602 // Returns a modified function which warns once by default.
56603 // If --no-deprecation is set, then it is a no-op.
56604 exports.deprecate = function(fn, msg) {
56605 // Allow for deprecating things in the process of starting up.
56606 if (isUndefined(global.process)) {
56607 return function() {
56608 return exports.deprecate(fn, msg).apply(this, arguments);
56609 };
56610 }
56611
56612 if (process.noDeprecation === true) {
56613 return fn;
56614 }
56615
56616 var warned = false;
56617 function deprecated() {
56618 if (!warned) {
56619 if (process.throwDeprecation) {
56620 throw new Error(msg);
56621 } else if (process.traceDeprecation) {
56622 console.trace(msg);
56623 } else {
56624 console.error(msg);
56625 }
56626 warned = true;
56627 }
56628 return fn.apply(this, arguments);
56629 }
56630
56631 return deprecated;
56632 };
56633
56634
56635 var debugs = {};
56636 var debugEnviron;
56637 exports.debuglog = function(set) {
56638 if (isUndefined(debugEnviron))
56639 debugEnviron = process.env.NODE_DEBUG || '';
56640 set = set.toUpperCase();
56641 if (!debugs[set]) {
56642 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
56643 var pid = process.pid;
56644 debugs[set] = function() {
56645 var msg = exports.format.apply(exports, arguments);
56646 console.error('%s %d: %s', set, pid, msg);
56647 };
56648 } else {
56649 debugs[set] = function() {};
56650 }
56651 }
56652 return debugs[set];
56653 };
56654
56655
56656 /**
56657 * Echos the value of a value. Trys to print the value out
56658 * in the best way possible given the different types.
56659 *
56660 * @param {Object} obj The object to print out.
56661 * @param {Object} opts Optional options object that alters the output.
56662 */
56663 /* legacy: obj, showHidden, depth, colors*/
56664 function inspect(obj, opts) {
56665 // default options
56666 var ctx = {
56667 seen: [],
56668 stylize: stylizeNoColor
56669 };
56670 // legacy...
56671 if (arguments.length >= 3) ctx.depth = arguments[2];
56672 if (arguments.length >= 4) ctx.colors = arguments[3];
56673 if (isBoolean(opts)) {
56674 // legacy...
56675 ctx.showHidden = opts;
56676 } else if (opts) {
56677 // got an "options" object
56678 exports._extend(ctx, opts);
56679 }
56680 // set default options
56681 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
56682 if (isUndefined(ctx.depth)) ctx.depth = 2;
56683 if (isUndefined(ctx.colors)) ctx.colors = false;
56684 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
56685 if (ctx.colors) ctx.stylize = stylizeWithColor;
56686 return formatValue(ctx, obj, ctx.depth);
56687 }
56688 exports.inspect = inspect;
56689
56690
56691 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
56692 inspect.colors = {
56693 'bold' : [1, 22],
56694 'italic' : [3, 23],
56695 'underline' : [4, 24],
56696 'inverse' : [7, 27],
56697 'white' : [37, 39],
56698 'grey' : [90, 39],
56699 'black' : [30, 39],
56700 'blue' : [34, 39],
56701 'cyan' : [36, 39],
56702 'green' : [32, 39],
56703 'magenta' : [35, 39],
56704 'red' : [31, 39],
56705 'yellow' : [33, 39]
56706 };
56707
56708 // Don't use 'blue' not visible on cmd.exe
56709 inspect.styles = {
56710 'special': 'cyan',
56711 'number': 'yellow',
56712 'boolean': 'yellow',
56713 'undefined': 'grey',
56714 'null': 'bold',
56715 'string': 'green',
56716 'date': 'magenta',
56717 // "name": intentionally not styling
56718 'regexp': 'red'
56719 };
56720
56721
56722 function stylizeWithColor(str, styleType) {
56723 var style = inspect.styles[styleType];
56724
56725 if (style) {
56726 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
56727 '\u001b[' + inspect.colors[style][1] + 'm';
56728 } else {
56729 return str;
56730 }
56731 }
56732
56733
56734 function stylizeNoColor(str, styleType) {
56735 return str;
56736 }
56737
56738
56739 function arrayToHash(array) {
56740 var hash = {};
56741
56742 array.forEach(function(val, idx) {
56743 hash[val] = true;
56744 });
56745
56746 return hash;
56747 }
56748
56749
56750 function formatValue(ctx, value, recurseTimes) {
56751 // Provide a hook for user-specified inspect functions.
56752 // Check that value is an object with an inspect function on it
56753 if (ctx.customInspect &&
56754 value &&
56755 isFunction(value.inspect) &&
56756 // Filter out the util module, it's inspect function is special
56757 value.inspect !== exports.inspect &&
56758 // Also filter out any prototype objects using the circular check.
56759 !(value.constructor && value.constructor.prototype === value)) {
56760 var ret = value.inspect(recurseTimes, ctx);
56761 if (!isString(ret)) {
56762 ret = formatValue(ctx, ret, recurseTimes);
56763 }
56764 return ret;
56765 }
56766
56767 // Primitive types cannot have properties
56768 var primitive = formatPrimitive(ctx, value);
56769 if (primitive) {
56770 return primitive;
56771 }
56772
56773 // Look up the keys of the object.
56774 var keys = Object.keys(value);
56775 var visibleKeys = arrayToHash(keys);
56776
56777 if (ctx.showHidden) {
56778 keys = Object.getOwnPropertyNames(value);
56779 }
56780
56781 // IE doesn't make error fields non-enumerable
56782 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
56783 if (isError(value)
56784 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
56785 return formatError(value);
56786 }
56787
56788 // Some type of object without properties can be shortcutted.
56789 if (keys.length === 0) {
56790 if (isFunction(value)) {
56791 var name = value.name ? ': ' + value.name : '';
56792 return ctx.stylize('[Function' + name + ']', 'special');
56793 }
56794 if (isRegExp(value)) {
56795 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
56796 }
56797 if (isDate(value)) {
56798 return ctx.stylize(Date.prototype.toString.call(value), 'date');
56799 }
56800 if (isError(value)) {
56801 return formatError(value);
56802 }
56803 }
56804
56805 var base = '', array = false, braces = ['{', '}'];
56806
56807 // Make Array say that they are Array
56808 if (isArray(value)) {
56809 array = true;
56810 braces = ['[', ']'];
56811 }
56812
56813 // Make functions say that they are functions
56814 if (isFunction(value)) {
56815 var n = value.name ? ': ' + value.name : '';
56816 base = ' [Function' + n + ']';
56817 }
56818
56819 // Make RegExps say that they are RegExps
56820 if (isRegExp(value)) {
56821 base = ' ' + RegExp.prototype.toString.call(value);
56822 }
56823
56824 // Make dates with properties first say the date
56825 if (isDate(value)) {
56826 base = ' ' + Date.prototype.toUTCString.call(value);
56827 }
56828
56829 // Make error with message first say the error
56830 if (isError(value)) {
56831 base = ' ' + formatError(value);
56832 }
56833
56834 if (keys.length === 0 && (!array || value.length == 0)) {
56835 return braces[0] + base + braces[1];
56836 }
56837
56838 if (recurseTimes < 0) {
56839 if (isRegExp(value)) {
56840 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
56841 } else {
56842 return ctx.stylize('[Object]', 'special');
56843 }
56844 }
56845
56846 ctx.seen.push(value);
56847
56848 var output;
56849 if (array) {
56850 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
56851 } else {
56852 output = keys.map(function(key) {
56853 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
56854 });
56855 }
56856
56857 ctx.seen.pop();
56858
56859 return reduceToSingleString(output, base, braces);
56860 }
56861
56862
56863 function formatPrimitive(ctx, value) {
56864 if (isUndefined(value))
56865 return ctx.stylize('undefined', 'undefined');
56866 if (isString(value)) {
56867 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
56868 .replace(/'/g, "\\'")
56869 .replace(/\\"/g, '"') + '\'';
56870 return ctx.stylize(simple, 'string');
56871 }
56872 if (isNumber(value))
56873 return ctx.stylize('' + value, 'number');
56874 if (isBoolean(value))
56875 return ctx.stylize('' + value, 'boolean');
56876 // For some reason typeof null is "object", so special case here.
56877 if (isNull(value))
56878 return ctx.stylize('null', 'null');
56879 }
56880
56881
56882 function formatError(value) {
56883 return '[' + Error.prototype.toString.call(value) + ']';
56884 }
56885
56886
56887 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
56888 var output = [];
56889 for (var i = 0, l = value.length; i < l; ++i) {
56890 if (hasOwnProperty(value, String(i))) {
56891 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
56892 String(i), true));
56893 } else {
56894 output.push('');
56895 }
56896 }
56897 keys.forEach(function(key) {
56898 if (!key.match(/^\d+$/)) {
56899 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
56900 key, true));
56901 }
56902 });
56903 return output;
56904 }
56905
56906
56907 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
56908 var name, str, desc;
56909 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
56910 if (desc.get) {
56911 if (desc.set) {
56912 str = ctx.stylize('[Getter/Setter]', 'special');
56913 } else {
56914 str = ctx.stylize('[Getter]', 'special');
56915 }
56916 } else {
56917 if (desc.set) {
56918 str = ctx.stylize('[Setter]', 'special');
56919 }
56920 }
56921 if (!hasOwnProperty(visibleKeys, key)) {
56922 name = '[' + key + ']';
56923 }
56924 if (!str) {
56925 if (ctx.seen.indexOf(desc.value) < 0) {
56926 if (isNull(recurseTimes)) {
56927 str = formatValue(ctx, desc.value, null);
56928 } else {
56929 str = formatValue(ctx, desc.value, recurseTimes - 1);
56930 }
56931 if (str.indexOf('\n') > -1) {
56932 if (array) {
56933 str = str.split('\n').map(function(line) {
56934 return ' ' + line;
56935 }).join('\n').substr(2);
56936 } else {
56937 str = '\n' + str.split('\n').map(function(line) {
56938 return ' ' + line;
56939 }).join('\n');
56940 }
56941 }
56942 } else {
56943 str = ctx.stylize('[Circular]', 'special');
56944 }
56945 }
56946 if (isUndefined(name)) {
56947 if (array && key.match(/^\d+$/)) {
56948 return str;
56949 }
56950 name = JSON.stringify('' + key);
56951 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
56952 name = name.substr(1, name.length - 2);
56953 name = ctx.stylize(name, 'name');
56954 } else {
56955 name = name.replace(/'/g, "\\'")
56956 .replace(/\\"/g, '"')
56957 .replace(/(^"|"$)/g, "'");
56958 name = ctx.stylize(name, 'string');
56959 }
56960 }
56961
56962 return name + ': ' + str;
56963 }
56964
56965
56966 function reduceToSingleString(output, base, braces) {
56967 var numLinesEst = 0;
56968 var length = output.reduce(function(prev, cur) {
56969 numLinesEst++;
56970 if (cur.indexOf('\n') >= 0) numLinesEst++;
56971 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
56972 }, 0);
56973
56974 if (length > 60) {
56975 return braces[0] +
56976 (base === '' ? '' : base + '\n ') +
56977 ' ' +
56978 output.join(',\n ') +
56979 ' ' +
56980 braces[1];
56981 }
56982
56983 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
56984 }
56985
56986
56987 // NOTE: These type checking functions intentionally don't use `instanceof`
56988 // because it is fragile and can be easily faked with `Object.create()`.
56989 function isArray(ar) {
56990 return Array.isArray(ar);
56991 }
56992 exports.isArray = isArray;
56993
56994 function isBoolean(arg) {
56995 return typeof arg === 'boolean';
56996 }
56997 exports.isBoolean = isBoolean;
56998
56999 function isNull(arg) {
57000 return arg === null;
57001 }
57002 exports.isNull = isNull;
57003
57004 function isNullOrUndefined(arg) {
57005 return arg == null;
57006 }
57007 exports.isNullOrUndefined = isNullOrUndefined;
57008
57009 function isNumber(arg) {
57010 return typeof arg === 'number';
57011 }
57012 exports.isNumber = isNumber;
57013
57014 function isString(arg) {
57015 return typeof arg === 'string';
57016 }
57017 exports.isString = isString;
57018
57019 function isSymbol(arg) {
57020 return typeof arg === 'symbol';
57021 }
57022 exports.isSymbol = isSymbol;
57023
57024 function isUndefined(arg) {
57025 return arg === void 0;
57026 }
57027 exports.isUndefined = isUndefined;
57028
57029 function isRegExp(re) {
57030 return isObject(re) && objectToString(re) === '[object RegExp]';
57031 }
57032 exports.isRegExp = isRegExp;
57033
57034 function isObject(arg) {
57035 return typeof arg === 'object' && arg !== null;
57036 }
57037 exports.isObject = isObject;
57038
57039 function isDate(d) {
57040 return isObject(d) && objectToString(d) === '[object Date]';
57041 }
57042 exports.isDate = isDate;
57043
57044 function isError(e) {
57045 return isObject(e) &&
57046 (objectToString(e) === '[object Error]' || e instanceof Error);
57047 }
57048 exports.isError = isError;
57049
57050 function isFunction(arg) {
57051 return typeof arg === 'function';
57052 }
57053 exports.isFunction = isFunction;
57054
57055 function isPrimitive(arg) {
57056 return arg === null ||
57057 typeof arg === 'boolean' ||
57058 typeof arg === 'number' ||
57059 typeof arg === 'string' ||
57060 typeof arg === 'symbol' || // ES6 symbol
57061 typeof arg === 'undefined';
57062 }
57063 exports.isPrimitive = isPrimitive;
57064
57065 exports.isBuffer = require('./support/isBuffer');
57066
57067 function objectToString(o) {
57068 return Object.prototype.toString.call(o);
57069 }
57070
57071
57072 function pad(n) {
57073 return n < 10 ? '0' + n.toString(10) : n.toString(10);
57074 }
57075
57076
57077 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
57078 'Oct', 'Nov', 'Dec'];
57079
57080 // 26 Feb 16:19:34
57081 function timestamp() {
57082 var d = new Date();
57083 var time = [pad(d.getHours()),
57084 pad(d.getMinutes()),
57085 pad(d.getSeconds())].join(':');
57086 return [d.getDate(), months[d.getMonth()], time].join(' ');
57087 }
57088
57089
57090 // log is just a thin wrapper to console.log that prepends a timestamp
57091 exports.log = function() {
57092 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
57093 };
57094
57095
57096 /**
57097 * Inherit the prototype methods from one constructor into another.
57098 *
57099 * The Function.prototype.inherits from lang.js rewritten as a standalone
57100 * function (not on Function.prototype). NOTE: If this file is to be loaded
57101 * during bootstrapping this function needs to be rewritten using some native
57102 * functions as prototype setup using normal JavaScript does not work as
57103 * expected during bootstrapping (see mirror.js in r114903).
57104 *
57105 * @param {function} ctor Constructor function which needs to inherit the
57106 * prototype.
57107 * @param {function} superCtor Constructor function to inherit prototype from.
57108 */
57109 exports.inherits = require('inherits');
57110
57111 exports._extend = function(origin, add) {
57112 // Don't do anything if add isn't an object
57113 if (!add || !isObject(add)) return origin;
57114
57115 var keys = Object.keys(add);
57116 var i = keys.length;
57117 while (i--) {
57118 origin[keys[i]] = add[keys[i]];
57119 }
57120 return origin;
57121 };
57122
57123 function hasOwnProperty(obj, prop) {
57124 return Object.prototype.hasOwnProperty.call(obj, prop);
57125 }
57126
57127 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
57128 },{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
57129 (function (Buffer){
57130 const createKeccakHash = require('keccak')
57131 const secp256k1 = require('secp256k1')
57132 const assert = require('assert')
57133 const rlp = require('rlp')
57134 const BN = require('bn.js')
57135 const createHash = require('create-hash')
57136 Object.assign(exports, require('ethjs-util'))
57137
57138 /**
57139 * the max integer that this VM can handle (a ```BN```)
57140 * @var {BN} MAX_INTEGER
57141 */
57142 exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
57143
57144 /**
57145 * 2^256 (a ```BN```)
57146 * @var {BN} TWO_POW256
57147 */
57148 exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
57149
57150 /**
57151 * SHA3-256 hash of null (a ```String```)
57152 * @var {String} SHA3_NULL_S
57153 */
57154 exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
57155
57156 /**
57157 * SHA3-256 hash of null (a ```Buffer```)
57158 * @var {Buffer} SHA3_NULL
57159 */
57160 exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
57161
57162 /**
57163 * SHA3-256 of an RLP of an empty array (a ```String```)
57164 * @var {String} SHA3_RLP_ARRAY_S
57165 */
57166 exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
57167
57168 /**
57169 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
57170 * @var {Buffer} SHA3_RLP_ARRAY
57171 */
57172 exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
57173
57174 /**
57175 * SHA3-256 hash of the RLP of null (a ```String```)
57176 * @var {String} SHA3_RLP_S
57177 */
57178 exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
57179
57180 /**
57181 * SHA3-256 hash of the RLP of null (a ```Buffer```)
57182 * @var {Buffer} SHA3_RLP
57183 */
57184 exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
57185
57186 /**
57187 * [`BN`](https://github.com/indutny/bn.js)
57188 * @var {Function}
57189 */
57190 exports.BN = BN
57191
57192 /**
57193 * [`rlp`](https://github.com/ethereumjs/rlp)
57194 * @var {Function}
57195 */
57196 exports.rlp = rlp
57197
57198 /**
57199 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
57200 * @var {Object}
57201 */
57202 exports.secp256k1 = secp256k1
57203
57204 /**
57205 * Returns a buffer filled with 0s
57206 * @method zeros
57207 * @param {Number} bytes the number of bytes the buffer should be
57208 * @return {Buffer}
57209 */
57210 exports.zeros = function (bytes) {
57211 return Buffer.allocUnsafe(bytes).fill(0)
57212 }
57213
57214 /**
57215 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
57216 * Or it truncates the beginning if it exceeds.
57217 * @method lsetLength
57218 * @param {Buffer|Array} msg the value to pad
57219 * @param {Number} length the number of bytes the output should be
57220 * @param {Boolean} [right=false] whether to start padding form the left or right
57221 * @return {Buffer|Array}
57222 */
57223 exports.setLengthLeft = exports.setLength = function (msg, length, right) {
57224 var buf = exports.zeros(length)
57225 msg = exports.toBuffer(msg)
57226 if (right) {
57227 if (msg.length < length) {
57228 msg.copy(buf)
57229 return buf
57230 }
57231 return msg.slice(0, length)
57232 } else {
57233 if (msg.length < length) {
57234 msg.copy(buf, length - msg.length)
57235 return buf
57236 }
57237 return msg.slice(-length)
57238 }
57239 }
57240
57241 /**
57242 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
57243 * Or it truncates the beginning if it exceeds.
57244 * @param {Buffer|Array} msg the value to pad
57245 * @param {Number} length the number of bytes the output should be
57246 * @return {Buffer|Array}
57247 */
57248 exports.setLengthRight = function (msg, length) {
57249 return exports.setLength(msg, length, true)
57250 }
57251
57252 /**
57253 * Trims leading zeros from a `Buffer` or an `Array`
57254 * @param {Buffer|Array|String} a
57255 * @return {Buffer|Array|String}
57256 */
57257 exports.unpad = exports.stripZeros = function (a) {
57258 a = exports.stripHexPrefix(a)
57259 var first = a[0]
57260 while (a.length > 0 && first.toString() === '0') {
57261 a = a.slice(1)
57262 first = a[0]
57263 }
57264 return a
57265 }
57266 /**
57267 * 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.
57268 * @param {*} v the value
57269 */
57270 exports.toBuffer = function (v) {
57271 if (!Buffer.isBuffer(v)) {
57272 if (Array.isArray(v)) {
57273 v = Buffer.from(v)
57274 } else if (typeof v === 'string') {
57275 if (exports.isHexPrefixed(v)) {
57276 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
57277 } else {
57278 v = Buffer.from(v)
57279 }
57280 } else if (typeof v === 'number') {
57281 v = exports.intToBuffer(v)
57282 } else if (v === null || v === undefined) {
57283 v = Buffer.allocUnsafe(0)
57284 } else if (v.toArray) {
57285 // converts a BN to a Buffer
57286 v = Buffer.from(v.toArray())
57287 } else {
57288 throw new Error('invalid type')
57289 }
57290 }
57291 return v
57292 }
57293
57294 /**
57295 * Converts a `Buffer` to a `Number`
57296 * @param {Buffer} buf
57297 * @return {Number}
57298 * @throws If the input number exceeds 53 bits.
57299 */
57300 exports.bufferToInt = function (buf) {
57301 return new BN(exports.toBuffer(buf)).toNumber()
57302 }
57303
57304 /**
57305 * Converts a `Buffer` into a hex `String`
57306 * @param {Buffer} buf
57307 * @return {String}
57308 */
57309 exports.bufferToHex = function (buf) {
57310 buf = exports.toBuffer(buf)
57311 return '0x' + buf.toString('hex')
57312 }
57313
57314 /**
57315 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
57316 * @param {Buffer} num
57317 * @return {BN}
57318 */
57319 exports.fromSigned = function (num) {
57320 return new BN(num).fromTwos(256)
57321 }
57322
57323 /**
57324 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
57325 * @param {BN} num
57326 * @return {Buffer}
57327 */
57328 exports.toUnsigned = function (num) {
57329 return Buffer.from(num.toTwos(256).toArray())
57330 }
57331
57332 /**
57333 * Creates SHA-3 hash of the input
57334 * @param {Buffer|Array|String|Number} a the input data
57335 * @param {Number} [bits=256] the SHA width
57336 * @return {Buffer}
57337 */
57338 exports.sha3 = function (a, bits) {
57339 a = exports.toBuffer(a)
57340 if (!bits) bits = 256
57341
57342 return createKeccakHash('keccak' + bits).update(a).digest()
57343 }
57344
57345 /**
57346 * Creates SHA256 hash of the input
57347 * @param {Buffer|Array|String|Number} a the input data
57348 * @return {Buffer}
57349 */
57350 exports.sha256 = function (a) {
57351 a = exports.toBuffer(a)
57352 return createHash('sha256').update(a).digest()
57353 }
57354
57355 /**
57356 * Creates RIPEMD160 hash of the input
57357 * @param {Buffer|Array|String|Number} a the input data
57358 * @param {Boolean} padded whether it should be padded to 256 bits or not
57359 * @return {Buffer}
57360 */
57361 exports.ripemd160 = function (a, padded) {
57362 a = exports.toBuffer(a)
57363 var hash = createHash('rmd160').update(a).digest()
57364 if (padded === true) {
57365 return exports.setLength(hash, 32)
57366 } else {
57367 return hash
57368 }
57369 }
57370
57371 /**
57372 * Creates SHA-3 hash of the RLP encoded version of the input
57373 * @param {Buffer|Array|String|Number} a the input data
57374 * @return {Buffer}
57375 */
57376 exports.rlphash = function (a) {
57377 return exports.sha3(rlp.encode(a))
57378 }
57379
57380 /**
57381 * Checks if the private key satisfies the rules of the curve secp256k1.
57382 * @param {Buffer} privateKey
57383 * @return {Boolean}
57384 */
57385 exports.isValidPrivate = function (privateKey) {
57386 return secp256k1.privateKeyVerify(privateKey)
57387 }
57388
57389 /**
57390 * Checks if the public key satisfies the rules of the curve secp256k1
57391 * and the requirements of Ethereum.
57392 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
57393 * @param {Boolean} [sanitize=false] Accept public keys in other formats
57394 * @return {Boolean}
57395 */
57396 exports.isValidPublic = function (publicKey, sanitize) {
57397 if (publicKey.length === 64) {
57398 // Convert to SEC1 for secp256k1
57399 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
57400 }
57401
57402 if (!sanitize) {
57403 return false
57404 }
57405
57406 return secp256k1.publicKeyVerify(publicKey)
57407 }
57408
57409 /**
57410 * Returns the ethereum address of a given public key.
57411 * Accepts "Ethereum public keys" and SEC1 encoded keys.
57412 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
57413 * @param {Boolean} [sanitize=false] Accept public keys in other formats
57414 * @return {Buffer}
57415 */
57416 exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
57417 pubKey = exports.toBuffer(pubKey)
57418 if (sanitize && (pubKey.length !== 64)) {
57419 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
57420 }
57421 assert(pubKey.length === 64)
57422 // Only take the lower 160bits of the hash
57423 return exports.sha3(pubKey).slice(-20)
57424 }
57425
57426 /**
57427 * Returns the ethereum public key of a given private key
57428 * @param {Buffer} privateKey A private key must be 256 bits wide
57429 * @return {Buffer}
57430 */
57431 var privateToPublic = exports.privateToPublic = function (privateKey) {
57432 privateKey = exports.toBuffer(privateKey)
57433 // skip the type flag and use the X, Y points
57434 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
57435 }
57436
57437 /**
57438 * Converts a public key to the Ethereum format.
57439 * @param {Buffer} publicKey
57440 * @return {Buffer}
57441 */
57442 exports.importPublic = function (publicKey) {
57443 publicKey = exports.toBuffer(publicKey)
57444 if (publicKey.length !== 64) {
57445 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
57446 }
57447 return publicKey
57448 }
57449
57450 /**
57451 * ECDSA sign
57452 * @param {Buffer} msgHash
57453 * @param {Buffer} privateKey
57454 * @return {Object}
57455 */
57456 exports.ecsign = function (msgHash, privateKey) {
57457 var sig = secp256k1.sign(msgHash, privateKey)
57458
57459 var ret = {}
57460 ret.r = sig.signature.slice(0, 32)
57461 ret.s = sig.signature.slice(32, 64)
57462 ret.v = sig.recovery + 27
57463 return ret
57464 }
57465
57466 /**
57467 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
57468 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
57469 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
57470 * used to produce the signature.
57471 * @param message
57472 * @returns {Buffer} hash
57473 */
57474 exports.hashPersonalMessage = function (message) {
57475 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
57476 return exports.sha3(Buffer.concat([prefix, message]))
57477 }
57478
57479 /**
57480 * ECDSA public key recovery from signature
57481 * @param {Buffer} msgHash
57482 * @param {Number} v
57483 * @param {Buffer} r
57484 * @param {Buffer} s
57485 * @return {Buffer} publicKey
57486 */
57487 exports.ecrecover = function (msgHash, v, r, s) {
57488 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
57489 var recovery = v - 27
57490 if (recovery !== 0 && recovery !== 1) {
57491 throw new Error('Invalid signature v value')
57492 }
57493 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
57494 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
57495 }
57496
57497 /**
57498 * Convert signature parameters into the format of `eth_sign` RPC method
57499 * @param {Number} v
57500 * @param {Buffer} r
57501 * @param {Buffer} s
57502 * @return {String} sig
57503 */
57504 exports.toRpcSig = function (v, r, s) {
57505 // NOTE: with potential introduction of chainId this might need to be updated
57506 if (v !== 27 && v !== 28) {
57507 throw new Error('Invalid recovery id')
57508 }
57509
57510 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
57511 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
57512 return exports.bufferToHex(Buffer.concat([
57513 exports.setLengthLeft(r, 32),
57514 exports.setLengthLeft(s, 32),
57515 exports.toBuffer(v - 27)
57516 ]))
57517 }
57518
57519 /**
57520 * Convert signature format of the `eth_sign` RPC method to signature parameters
57521 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
57522 * @param {String} sig
57523 * @return {Object}
57524 */
57525 exports.fromRpcSig = function (sig) {
57526 sig = exports.toBuffer(sig)
57527
57528 // NOTE: with potential introduction of chainId this might need to be updated
57529 if (sig.length !== 65) {
57530 throw new Error('Invalid signature length')
57531 }
57532
57533 var v = sig[64]
57534 // support both versions of `eth_sign` responses
57535 if (v < 27) {
57536 v += 27
57537 }
57538
57539 return {
57540 v: v,
57541 r: sig.slice(0, 32),
57542 s: sig.slice(32, 64)
57543 }
57544 }
57545
57546 /**
57547 * Returns the ethereum address of a given private key
57548 * @param {Buffer} privateKey A private key must be 256 bits wide
57549 * @return {Buffer}
57550 */
57551 exports.privateToAddress = function (privateKey) {
57552 return exports.publicToAddress(privateToPublic(privateKey))
57553 }
57554
57555 /**
57556 * Checks if the address is a valid. Accepts checksummed addresses too
57557 * @param {String} address
57558 * @return {Boolean}
57559 */
57560 exports.isValidAddress = function (address) {
57561 return /^0x[0-9a-fA-F]{40}$/i.test(address)
57562 }
57563
57564 /**
57565 * Returns a checksummed address
57566 * @param {String} address
57567 * @return {String}
57568 */
57569 exports.toChecksumAddress = function (address) {
57570 address = exports.stripHexPrefix(address).toLowerCase()
57571 var hash = exports.sha3(address).toString('hex')
57572 var ret = '0x'
57573
57574 for (var i = 0; i < address.length; i++) {
57575 if (parseInt(hash[i], 16) >= 8) {
57576 ret += address[i].toUpperCase()
57577 } else {
57578 ret += address[i]
57579 }
57580 }
57581
57582 return ret
57583 }
57584
57585 /**
57586 * Checks if the address is a valid checksummed address
57587 * @param {Buffer} address
57588 * @return {Boolean}
57589 */
57590 exports.isValidChecksumAddress = function (address) {
57591 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
57592 }
57593
57594 /**
57595 * Generates an address of a newly created contract
57596 * @param {Buffer} from the address which is creating this new address
57597 * @param {Buffer} nonce the nonce of the from account
57598 * @return {Buffer}
57599 */
57600 exports.generateAddress = function (from, nonce) {
57601 from = exports.toBuffer(from)
57602 nonce = new BN(nonce)
57603
57604 if (nonce.isZero()) {
57605 // in RLP we want to encode null in the case of zero nonce
57606 // read the RLP documentation for an answer if you dare
57607 nonce = null
57608 } else {
57609 nonce = Buffer.from(nonce.toArray())
57610 }
57611
57612 // Only take the lower 160bits of the hash
57613 return exports.rlphash([from, nonce]).slice(-20)
57614 }
57615
57616 /**
57617 * Returns true if the supplied address belongs to a precompiled account
57618 * @param {Buffer|String} address
57619 * @return {Boolean}
57620 */
57621 exports.isPrecompiled = function (address) {
57622 var a = exports.unpad(address)
57623 return a.length === 1 && a[0] > 0 && a[0] < 5
57624 }
57625
57626 /**
57627 * Adds "0x" to a given `String` if it does not already start with "0x"
57628 * @param {String} str
57629 * @return {String}
57630 */
57631 exports.addHexPrefix = function (str) {
57632 if (typeof str !== 'string') {
57633 return str
57634 }
57635
57636 return exports.isHexPrefixed(str) ? str : '0x' + str
57637 }
57638
57639 /**
57640 * Validate ECDSA signature
57641 * @method isValidSignature
57642 * @param {Buffer} v
57643 * @param {Buffer} r
57644 * @param {Buffer} s
57645 * @param {Boolean} [homestead=true]
57646 * @return {Boolean}
57647 */
57648
57649 exports.isValidSignature = function (v, r, s, homestead) {
57650 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
57651 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
57652
57653 if (r.length !== 32 || s.length !== 32) {
57654 return false
57655 }
57656
57657 if (v !== 27 && v !== 28) {
57658 return false
57659 }
57660
57661 r = new BN(r)
57662 s = new BN(s)
57663
57664 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
57665 return false
57666 }
57667
57668 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
57669 return false
57670 }
57671
57672 return true
57673 }
57674
57675 /**
57676 * Converts a `Buffer` or `Array` to JSON
57677 * @param {Buffer|Array} ba
57678 * @return {Array|String|null}
57679 */
57680 exports.baToJSON = function (ba) {
57681 if (Buffer.isBuffer(ba)) {
57682 return '0x' + ba.toString('hex')
57683 } else if (ba instanceof Array) {
57684 var array = []
57685 for (var i = 0; i < ba.length; i++) {
57686 array.push(exports.baToJSON(ba[i]))
57687 }
57688 return array
57689 }
57690 }
57691
57692 /**
57693 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
57694 * @param {Object} self the `Object` to define properties on
57695 * @param {Array} fields an array fields to define. Fields can contain:
57696 * * `name` - the name of the properties
57697 * * `length` - the number of bytes the field can have
57698 * * `allowLess` - if the field can be less than the length
57699 * * `allowEmpty`
57700 * @param {*} data data to be validated against the definitions
57701 */
57702 exports.defineProperties = function (self, fields, data) {
57703 self.raw = []
57704 self._fields = []
57705
57706 // attach the `toJSON`
57707 self.toJSON = function (label) {
57708 if (label) {
57709 var obj = {}
57710 self._fields.forEach(function (field) {
57711 obj[field] = '0x' + self[field].toString('hex')
57712 })
57713 return obj
57714 }
57715 return exports.baToJSON(this.raw)
57716 }
57717
57718 self.serialize = function serialize () {
57719 return rlp.encode(self.raw)
57720 }
57721
57722 fields.forEach(function (field, i) {
57723 self._fields.push(field.name)
57724 function getter () {
57725 return self.raw[i]
57726 }
57727 function setter (v) {
57728 v = exports.toBuffer(v)
57729
57730 if (v.toString('hex') === '00' && !field.allowZero) {
57731 v = Buffer.allocUnsafe(0)
57732 }
57733
57734 if (field.allowLess && field.length) {
57735 v = exports.stripZeros(v)
57736 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
57737 } else if (!(field.allowZero && v.length === 0) && field.length) {
57738 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
57739 }
57740
57741 self.raw[i] = v
57742 }
57743
57744 Object.defineProperty(self, field.name, {
57745 enumerable: true,
57746 configurable: true,
57747 get: getter,
57748 set: setter
57749 })
57750
57751 if (field.default) {
57752 self[field.name] = field.default
57753 }
57754
57755 // attach alias
57756 if (field.alias) {
57757 Object.defineProperty(self, field.alias, {
57758 enumerable: false,
57759 configurable: true,
57760 set: setter,
57761 get: getter
57762 })
57763 }
57764 })
57765
57766 // if the constuctor is passed data
57767 if (data) {
57768 if (typeof data === 'string') {
57769 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
57770 }
57771
57772 if (Buffer.isBuffer(data)) {
57773 data = rlp.decode(data)
57774 }
57775
57776 if (Array.isArray(data)) {
57777 if (data.length > self._fields.length) {
57778 throw (new Error('wrong number of fields in data'))
57779 }
57780
57781 // make sure all the items are buffers
57782 data.forEach(function (d, i) {
57783 self[self._fields[i]] = exports.toBuffer(d)
57784 })
57785 } else if (typeof data === 'object') {
57786 const keys = Object.keys(data)
57787 fields.forEach(function (field) {
57788 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
57789 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
57790 })
57791 } else {
57792 throw new Error('invalid data')
57793 }
57794 }
57795 }
57796
57797 }).call(this,require("buffer").Buffer)
57798 },{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
57799 (function (Buffer){
57800 // Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
57801 // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
57802 // NOTE: SIGHASH byte ignored AND restricted, truncate before use
57803
57804 function check (buffer) {
57805 if (buffer.length < 8) return false
57806 if (buffer.length > 72) return false
57807 if (buffer[0] !== 0x30) return false
57808 if (buffer[1] !== buffer.length - 2) return false
57809 if (buffer[2] !== 0x02) return false
57810
57811 var lenR = buffer[3]
57812 if (lenR === 0) return false
57813 if (5 + lenR >= buffer.length) return false
57814 if (buffer[4 + lenR] !== 0x02) return false
57815
57816 var lenS = buffer[5 + lenR]
57817 if (lenS === 0) return false
57818 if ((6 + lenR + lenS) !== buffer.length) return false
57819
57820 if (buffer[4] & 0x80) return false
57821 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
57822
57823 if (buffer[lenR + 6] & 0x80) return false
57824 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
57825 return true
57826 }
57827
57828 function decode (buffer) {
57829 if (buffer.length < 8) throw new Error('DER sequence length is too short')
57830 if (buffer.length > 72) throw new Error('DER sequence length is too long')
57831 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
57832 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
57833 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
57834
57835 var lenR = buffer[3]
57836 if (lenR === 0) throw new Error('R length is zero')
57837 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
57838 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
57839
57840 var lenS = buffer[5 + lenR]
57841 if (lenS === 0) throw new Error('S length is zero')
57842 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
57843
57844 if (buffer[4] & 0x80) throw new Error('R value is negative')
57845 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
57846
57847 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
57848 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
57849
57850 // non-BIP66 - extract R, S values
57851 return {
57852 r: buffer.slice(4, 4 + lenR),
57853 s: buffer.slice(6 + lenR)
57854 }
57855 }
57856
57857 /*
57858 * Expects r and s to be positive DER integers.
57859 *
57860 * The DER format uses the most significant bit as a sign bit (& 0x80).
57861 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
57862 *
57863 * Examples:
57864 *
57865 * 0 => 0x00
57866 * 1 => 0x01
57867 * -1 => 0xff
57868 * 127 => 0x7f
57869 * -127 => 0x81
57870 * 128 => 0x0080
57871 * -128 => 0x80
57872 * 255 => 0x00ff
57873 * -255 => 0xff01
57874 * 16300 => 0x3fac
57875 * -16300 => 0xc054
57876 * 62300 => 0x00f35c
57877 * -62300 => 0xff0ca4
57878 */
57879 function encode (r, s) {
57880 var lenR = r.length
57881 var lenS = s.length
57882 if (lenR === 0) throw new Error('R length is zero')
57883 if (lenS === 0) throw new Error('S length is zero')
57884 if (lenR > 33) throw new Error('R length is too long')
57885 if (lenS > 33) throw new Error('S length is too long')
57886 if (r[0] & 0x80) throw new Error('R value is negative')
57887 if (s[0] & 0x80) throw new Error('S value is negative')
57888 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
57889 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
57890
57891 var signature = new Buffer(6 + lenR + lenS)
57892
57893 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
57894 signature[0] = 0x30
57895 signature[1] = signature.length - 2
57896 signature[2] = 0x02
57897 signature[3] = r.length
57898 r.copy(signature, 4)
57899 signature[4 + lenR] = 0x02
57900 signature[5 + lenR] = s.length
57901 s.copy(signature, 6 + lenR)
57902
57903 return signature
57904 }
57905
57906 module.exports = {
57907 check: check,
57908 decode: decode,
57909 encode: encode
57910 }
57911
57912 }).call(this,require("buffer").Buffer)
57913 },{"buffer":5}],33:[function(require,module,exports){
57914 (function (module, exports) {
57915 'use strict';
57916
57917 // Utils
57918 function assert (val, msg) {
57919 if (!val) throw new Error(msg || 'Assertion failed');
57920 }
57921
57922 // Could use `inherits` module, but don't want to move from single file
57923 // architecture yet.
57924 function inherits (ctor, superCtor) {
57925 ctor.super_ = superCtor;
57926 var TempCtor = function () {};
57927 TempCtor.prototype = superCtor.prototype;
57928 ctor.prototype = new TempCtor();
57929 ctor.prototype.constructor = ctor;
57930 }
57931
57932 // BN
57933
57934 function BN (number, base, endian) {
57935 if (BN.isBN(number)) {
57936 return number;
57937 }
57938
57939 this.negative = 0;
57940 this.words = null;
57941 this.length = 0;
57942
57943 // Reduction context
57944 this.red = null;
57945
57946 if (number !== null) {
57947 if (base === 'le' || base === 'be') {
57948 endian = base;
57949 base = 10;
57950 }
57951
57952 this._init(number || 0, base || 10, endian || 'be');
57953 }
57954 }
57955 if (typeof module === 'object') {
57956 module.exports = BN;
57957 } else {
57958 exports.BN = BN;
57959 }
57960
57961 BN.BN = BN;
57962 BN.wordSize = 26;
57963
57964 var Buffer;
57965 try {
57966 Buffer = require('buf' + 'fer').Buffer;
57967 } catch (e) {
57968 }
57969
57970 BN.isBN = function isBN (num) {
57971 if (num instanceof BN) {
57972 return true;
57973 }
57974
57975 return num !== null && typeof num === 'object' &&
57976 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
57977 };
57978
57979 BN.max = function max (left, right) {
57980 if (left.cmp(right) > 0) return left;
57981 return right;
57982 };
57983
57984 BN.min = function min (left, right) {
57985 if (left.cmp(right) < 0) return left;
57986 return right;
57987 };
57988
57989 BN.prototype._init = function init (number, base, endian) {
57990 if (typeof number === 'number') {
57991 return this._initNumber(number, base, endian);
57992 }
57993
57994 if (typeof number === 'object') {
57995 return this._initArray(number, base, endian);
57996 }
57997
57998 if (base === 'hex') {
57999 base = 16;
58000 }
58001 assert(base === (base | 0) && base >= 2 && base <= 36);
58002
58003 number = number.toString().replace(/\s+/g, '');
58004 var start = 0;
58005 if (number[0] === '-') {
58006 start++;
58007 }
58008
58009 if (base === 16) {
58010 this._parseHex(number, start);
58011 } else {
58012 this._parseBase(number, base, start);
58013 }
58014
58015 if (number[0] === '-') {
58016 this.negative = 1;
58017 }
58018
58019 this.strip();
58020
58021 if (endian !== 'le') return;
58022
58023 this._initArray(this.toArray(), base, endian);
58024 };
58025
58026 BN.prototype._initNumber = function _initNumber (number, base, endian) {
58027 if (number < 0) {
58028 this.negative = 1;
58029 number = -number;
58030 }
58031 if (number < 0x4000000) {
58032 this.words = [ number & 0x3ffffff ];
58033 this.length = 1;
58034 } else if (number < 0x10000000000000) {
58035 this.words = [
58036 number & 0x3ffffff,
58037 (number / 0x4000000) & 0x3ffffff
58038 ];
58039 this.length = 2;
58040 } else {
58041 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
58042 this.words = [
58043 number & 0x3ffffff,
58044 (number / 0x4000000) & 0x3ffffff,
58045 1
58046 ];
58047 this.length = 3;
58048 }
58049
58050 if (endian !== 'le') return;
58051
58052 // Reverse the bytes
58053 this._initArray(this.toArray(), base, endian);
58054 };
58055
58056 BN.prototype._initArray = function _initArray (number, base, endian) {
58057 // Perhaps a Uint8Array
58058 assert(typeof number.length === 'number');
58059 if (number.length <= 0) {
58060 this.words = [ 0 ];
58061 this.length = 1;
58062 return this;
58063 }
58064
58065 this.length = Math.ceil(number.length / 3);
58066 this.words = new Array(this.length);
58067 for (var i = 0; i < this.length; i++) {
58068 this.words[i] = 0;
58069 }
58070
58071 var j, w;
58072 var off = 0;
58073 if (endian === 'be') {
58074 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
58075 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
58076 this.words[j] |= (w << off) & 0x3ffffff;
58077 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
58078 off += 24;
58079 if (off >= 26) {
58080 off -= 26;
58081 j++;
58082 }
58083 }
58084 } else if (endian === 'le') {
58085 for (i = 0, j = 0; i < number.length; i += 3) {
58086 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
58087 this.words[j] |= (w << off) & 0x3ffffff;
58088 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
58089 off += 24;
58090 if (off >= 26) {
58091 off -= 26;
58092 j++;
58093 }
58094 }
58095 }
58096 return this.strip();
58097 };
58098
58099 function parseHex (str, start, end) {
58100 var r = 0;
58101 var len = Math.min(str.length, end);
58102 for (var i = start; i < len; i++) {
58103 var c = str.charCodeAt(i) - 48;
58104
58105 r <<= 4;
58106
58107 // 'a' - 'f'
58108 if (c >= 49 && c <= 54) {
58109 r |= c - 49 + 0xa;
58110
58111 // 'A' - 'F'
58112 } else if (c >= 17 && c <= 22) {
58113 r |= c - 17 + 0xa;
58114
58115 // '0' - '9'
58116 } else {
58117 r |= c & 0xf;
58118 }
58119 }
58120 return r;
58121 }
58122
58123 BN.prototype._parseHex = function _parseHex (number, start) {
58124 // Create possibly bigger array to ensure that it fits the number
58125 this.length = Math.ceil((number.length - start) / 6);
58126 this.words = new Array(this.length);
58127 for (var i = 0; i < this.length; i++) {
58128 this.words[i] = 0;
58129 }
58130
58131 var j, w;
58132 // Scan 24-bit chunks and add them to the number
58133 var off = 0;
58134 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
58135 w = parseHex(number, i, i + 6);
58136 this.words[j] |= (w << off) & 0x3ffffff;
58137 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
58138 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
58139 off += 24;
58140 if (off >= 26) {
58141 off -= 26;
58142 j++;
58143 }
58144 }
58145 if (i + 6 !== start) {
58146 w = parseHex(number, start, i + 6);
58147 this.words[j] |= (w << off) & 0x3ffffff;
58148 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
58149 }
58150 this.strip();
58151 };
58152
58153 function parseBase (str, start, end, mul) {
58154 var r = 0;
58155 var len = Math.min(str.length, end);
58156 for (var i = start; i < len; i++) {
58157 var c = str.charCodeAt(i) - 48;
58158
58159 r *= mul;
58160
58161 // 'a'
58162 if (c >= 49) {
58163 r += c - 49 + 0xa;
58164
58165 // 'A'
58166 } else if (c >= 17) {
58167 r += c - 17 + 0xa;
58168
58169 // '0' - '9'
58170 } else {
58171 r += c;
58172 }
58173 }
58174 return r;
58175 }
58176
58177 BN.prototype._parseBase = function _parseBase (number, base, start) {
58178 // Initialize as zero
58179 this.words = [ 0 ];
58180 this.length = 1;
58181
58182 // Find length of limb in base
58183 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
58184 limbLen++;
58185 }
58186 limbLen--;
58187 limbPow = (limbPow / base) | 0;
58188
58189 var total = number.length - start;
58190 var mod = total % limbLen;
58191 var end = Math.min(total, total - mod) + start;
58192
58193 var word = 0;
58194 for (var i = start; i < end; i += limbLen) {
58195 word = parseBase(number, i, i + limbLen, base);
58196
58197 this.imuln(limbPow);
58198 if (this.words[0] + word < 0x4000000) {
58199 this.words[0] += word;
58200 } else {
58201 this._iaddn(word);
58202 }
58203 }
58204
58205 if (mod !== 0) {
58206 var pow = 1;
58207 word = parseBase(number, i, number.length, base);
58208
58209 for (i = 0; i < mod; i++) {
58210 pow *= base;
58211 }
58212
58213 this.imuln(pow);
58214 if (this.words[0] + word < 0x4000000) {
58215 this.words[0] += word;
58216 } else {
58217 this._iaddn(word);
58218 }
58219 }
58220 };
58221
58222 BN.prototype.copy = function copy (dest) {
58223 dest.words = new Array(this.length);
58224 for (var i = 0; i < this.length; i++) {
58225 dest.words[i] = this.words[i];
58226 }
58227 dest.length = this.length;
58228 dest.negative = this.negative;
58229 dest.red = this.red;
58230 };
58231
58232 BN.prototype.clone = function clone () {
58233 var r = new BN(null);
58234 this.copy(r);
58235 return r;
58236 };
58237
58238 BN.prototype._expand = function _expand (size) {
58239 while (this.length < size) {
58240 this.words[this.length++] = 0;
58241 }
58242 return this;
58243 };
58244
58245 // Remove leading `0` from `this`
58246 BN.prototype.strip = function strip () {
58247 while (this.length > 1 && this.words[this.length - 1] === 0) {
58248 this.length--;
58249 }
58250 return this._normSign();
58251 };
58252
58253 BN.prototype._normSign = function _normSign () {
58254 // -0 = 0
58255 if (this.length === 1 && this.words[0] === 0) {
58256 this.negative = 0;
58257 }
58258 return this;
58259 };
58260
58261 BN.prototype.inspect = function inspect () {
58262 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
58263 };
58264
58265 /*
58266
58267 var zeros = [];
58268 var groupSizes = [];
58269 var groupBases = [];
58270
58271 var s = '';
58272 var i = -1;
58273 while (++i < BN.wordSize) {
58274 zeros[i] = s;
58275 s += '0';
58276 }
58277 groupSizes[0] = 0;
58278 groupSizes[1] = 0;
58279 groupBases[0] = 0;
58280 groupBases[1] = 0;
58281 var base = 2 - 1;
58282 while (++base < 36 + 1) {
58283 var groupSize = 0;
58284 var groupBase = 1;
58285 while (groupBase < (1 << BN.wordSize) / base) {
58286 groupBase *= base;
58287 groupSize += 1;
58288 }
58289 groupSizes[base] = groupSize;
58290 groupBases[base] = groupBase;
58291 }
58292
58293 */
58294
58295 var zeros = [
58296 '',
58297 '0',
58298 '00',
58299 '000',
58300 '0000',
58301 '00000',
58302 '000000',
58303 '0000000',
58304 '00000000',
58305 '000000000',
58306 '0000000000',
58307 '00000000000',
58308 '000000000000',
58309 '0000000000000',
58310 '00000000000000',
58311 '000000000000000',
58312 '0000000000000000',
58313 '00000000000000000',
58314 '000000000000000000',
58315 '0000000000000000000',
58316 '00000000000000000000',
58317 '000000000000000000000',
58318 '0000000000000000000000',
58319 '00000000000000000000000',
58320 '000000000000000000000000',
58321 '0000000000000000000000000'
58322 ];
58323
58324 var groupSizes = [
58325 0, 0,
58326 25, 16, 12, 11, 10, 9, 8,
58327 8, 7, 7, 7, 7, 6, 6,
58328 6, 6, 6, 6, 6, 5, 5,
58329 5, 5, 5, 5, 5, 5, 5,
58330 5, 5, 5, 5, 5, 5, 5
58331 ];
58332
58333 var groupBases = [
58334 0, 0,
58335 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
58336 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
58337 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
58338 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
58339 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
58340 ];
58341
58342 BN.prototype.toString = function toString (base, padding) {
58343 base = base || 10;
58344 padding = padding | 0 || 1;
58345
58346 var out;
58347 if (base === 16 || base === 'hex') {
58348 out = '';
58349 var off = 0;
58350 var carry = 0;
58351 for (var i = 0; i < this.length; i++) {
58352 var w = this.words[i];
58353 var word = (((w << off) | carry) & 0xffffff).toString(16);
58354 carry = (w >>> (24 - off)) & 0xffffff;
58355 if (carry !== 0 || i !== this.length - 1) {
58356 out = zeros[6 - word.length] + word + out;
58357 } else {
58358 out = word + out;
58359 }
58360 off += 2;
58361 if (off >= 26) {
58362 off -= 26;
58363 i--;
58364 }
58365 }
58366 if (carry !== 0) {
58367 out = carry.toString(16) + out;
58368 }
58369 while (out.length % padding !== 0) {
58370 out = '0' + out;
58371 }
58372 if (this.negative !== 0) {
58373 out = '-' + out;
58374 }
58375 return out;
58376 }
58377
58378 if (base === (base | 0) && base >= 2 && base <= 36) {
58379 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
58380 var groupSize = groupSizes[base];
58381 // var groupBase = Math.pow(base, groupSize);
58382 var groupBase = groupBases[base];
58383 out = '';
58384 var c = this.clone();
58385 c.negative = 0;
58386 while (!c.isZero()) {
58387 var r = c.modn(groupBase).toString(base);
58388 c = c.idivn(groupBase);
58389
58390 if (!c.isZero()) {
58391 out = zeros[groupSize - r.length] + r + out;
58392 } else {
58393 out = r + out;
58394 }
58395 }
58396 if (this.isZero()) {
58397 out = '0' + out;
58398 }
58399 while (out.length % padding !== 0) {
58400 out = '0' + out;
58401 }
58402 if (this.negative !== 0) {
58403 out = '-' + out;
58404 }
58405 return out;
58406 }
58407
58408 assert(false, 'Base should be between 2 and 36');
58409 };
58410
58411 BN.prototype.toNumber = function toNumber () {
58412 var ret = this.words[0];
58413 if (this.length === 2) {
58414 ret += this.words[1] * 0x4000000;
58415 } else if (this.length === 3 && this.words[2] === 0x01) {
58416 // NOTE: at this stage it is known that the top bit is set
58417 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
58418 } else if (this.length > 2) {
58419 assert(false, 'Number can only safely store up to 53 bits');
58420 }
58421 return (this.negative !== 0) ? -ret : ret;
58422 };
58423
58424 BN.prototype.toJSON = function toJSON () {
58425 return this.toString(16);
58426 };
58427
58428 BN.prototype.toBuffer = function toBuffer (endian, length) {
58429 assert(typeof Buffer !== 'undefined');
58430 return this.toArrayLike(Buffer, endian, length);
58431 };
58432
58433 BN.prototype.toArray = function toArray (endian, length) {
58434 return this.toArrayLike(Array, endian, length);
58435 };
58436
58437 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
58438 var byteLength = this.byteLength();
58439 var reqLength = length || Math.max(1, byteLength);
58440 assert(byteLength <= reqLength, 'byte array longer than desired length');
58441 assert(reqLength > 0, 'Requested array length <= 0');
58442
58443 this.strip();
58444 var littleEndian = endian === 'le';
58445 var res = new ArrayType(reqLength);
58446
58447 var b, i;
58448 var q = this.clone();
58449 if (!littleEndian) {
58450 // Assume big-endian
58451 for (i = 0; i < reqLength - byteLength; i++) {
58452 res[i] = 0;
58453 }
58454
58455 for (i = 0; !q.isZero(); i++) {
58456 b = q.andln(0xff);
58457 q.iushrn(8);
58458
58459 res[reqLength - i - 1] = b;
58460 }
58461 } else {
58462 for (i = 0; !q.isZero(); i++) {
58463 b = q.andln(0xff);
58464 q.iushrn(8);
58465
58466 res[i] = b;
58467 }
58468
58469 for (; i < reqLength; i++) {
58470 res[i] = 0;
58471 }
58472 }
58473
58474 return res;
58475 };
58476
58477 if (Math.clz32) {
58478 BN.prototype._countBits = function _countBits (w) {
58479 return 32 - Math.clz32(w);
58480 };
58481 } else {
58482 BN.prototype._countBits = function _countBits (w) {
58483 var t = w;
58484 var r = 0;
58485 if (t >= 0x1000) {
58486 r += 13;
58487 t >>>= 13;
58488 }
58489 if (t >= 0x40) {
58490 r += 7;
58491 t >>>= 7;
58492 }
58493 if (t >= 0x8) {
58494 r += 4;
58495 t >>>= 4;
58496 }
58497 if (t >= 0x02) {
58498 r += 2;
58499 t >>>= 2;
58500 }
58501 return r + t;
58502 };
58503 }
58504
58505 BN.prototype._zeroBits = function _zeroBits (w) {
58506 // Short-cut
58507 if (w === 0) return 26;
58508
58509 var t = w;
58510 var r = 0;
58511 if ((t & 0x1fff) === 0) {
58512 r += 13;
58513 t >>>= 13;
58514 }
58515 if ((t & 0x7f) === 0) {
58516 r += 7;
58517 t >>>= 7;
58518 }
58519 if ((t & 0xf) === 0) {
58520 r += 4;
58521 t >>>= 4;
58522 }
58523 if ((t & 0x3) === 0) {
58524 r += 2;
58525 t >>>= 2;
58526 }
58527 if ((t & 0x1) === 0) {
58528 r++;
58529 }
58530 return r;
58531 };
58532
58533 // Return number of used bits in a BN
58534 BN.prototype.bitLength = function bitLength () {
58535 var w = this.words[this.length - 1];
58536 var hi = this._countBits(w);
58537 return (this.length - 1) * 26 + hi;
58538 };
58539
58540 function toBitArray (num) {
58541 var w = new Array(num.bitLength());
58542
58543 for (var bit = 0; bit < w.length; bit++) {
58544 var off = (bit / 26) | 0;
58545 var wbit = bit % 26;
58546
58547 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
58548 }
58549
58550 return w;
58551 }
58552
58553 // Number of trailing zero bits
58554 BN.prototype.zeroBits = function zeroBits () {
58555 if (this.isZero()) return 0;
58556
58557 var r = 0;
58558 for (var i = 0; i < this.length; i++) {
58559 var b = this._zeroBits(this.words[i]);
58560 r += b;
58561 if (b !== 26) break;
58562 }
58563 return r;
58564 };
58565
58566 BN.prototype.byteLength = function byteLength () {
58567 return Math.ceil(this.bitLength() / 8);
58568 };
58569
58570 BN.prototype.toTwos = function toTwos (width) {
58571 if (this.negative !== 0) {
58572 return this.abs().inotn(width).iaddn(1);
58573 }
58574 return this.clone();
58575 };
58576
58577 BN.prototype.fromTwos = function fromTwos (width) {
58578 if (this.testn(width - 1)) {
58579 return this.notn(width).iaddn(1).ineg();
58580 }
58581 return this.clone();
58582 };
58583
58584 BN.prototype.isNeg = function isNeg () {
58585 return this.negative !== 0;
58586 };
58587
58588 // Return negative clone of `this`
58589 BN.prototype.neg = function neg () {
58590 return this.clone().ineg();
58591 };
58592
58593 BN.prototype.ineg = function ineg () {
58594 if (!this.isZero()) {
58595 this.negative ^= 1;
58596 }
58597
58598 return this;
58599 };
58600
58601 // Or `num` with `this` in-place
58602 BN.prototype.iuor = function iuor (num) {
58603 while (this.length < num.length) {
58604 this.words[this.length++] = 0;
58605 }
58606
58607 for (var i = 0; i < num.length; i++) {
58608 this.words[i] = this.words[i] | num.words[i];
58609 }
58610
58611 return this.strip();
58612 };
58613
58614 BN.prototype.ior = function ior (num) {
58615 assert((this.negative | num.negative) === 0);
58616 return this.iuor(num);
58617 };
58618
58619 // Or `num` with `this`
58620 BN.prototype.or = function or (num) {
58621 if (this.length > num.length) return this.clone().ior(num);
58622 return num.clone().ior(this);
58623 };
58624
58625 BN.prototype.uor = function uor (num) {
58626 if (this.length > num.length) return this.clone().iuor(num);
58627 return num.clone().iuor(this);
58628 };
58629
58630 // And `num` with `this` in-place
58631 BN.prototype.iuand = function iuand (num) {
58632 // b = min-length(num, this)
58633 var b;
58634 if (this.length > num.length) {
58635 b = num;
58636 } else {
58637 b = this;
58638 }
58639
58640 for (var i = 0; i < b.length; i++) {
58641 this.words[i] = this.words[i] & num.words[i];
58642 }
58643
58644 this.length = b.length;
58645
58646 return this.strip();
58647 };
58648
58649 BN.prototype.iand = function iand (num) {
58650 assert((this.negative | num.negative) === 0);
58651 return this.iuand(num);
58652 };
58653
58654 // And `num` with `this`
58655 BN.prototype.and = function and (num) {
58656 if (this.length > num.length) return this.clone().iand(num);
58657 return num.clone().iand(this);
58658 };
58659
58660 BN.prototype.uand = function uand (num) {
58661 if (this.length > num.length) return this.clone().iuand(num);
58662 return num.clone().iuand(this);
58663 };
58664
58665 // Xor `num` with `this` in-place
58666 BN.prototype.iuxor = function iuxor (num) {
58667 // a.length > b.length
58668 var a;
58669 var b;
58670 if (this.length > num.length) {
58671 a = this;
58672 b = num;
58673 } else {
58674 a = num;
58675 b = this;
58676 }
58677
58678 for (var i = 0; i < b.length; i++) {
58679 this.words[i] = a.words[i] ^ b.words[i];
58680 }
58681
58682 if (this !== a) {
58683 for (; i < a.length; i++) {
58684 this.words[i] = a.words[i];
58685 }
58686 }
58687
58688 this.length = a.length;
58689
58690 return this.strip();
58691 };
58692
58693 BN.prototype.ixor = function ixor (num) {
58694 assert((this.negative | num.negative) === 0);
58695 return this.iuxor(num);
58696 };
58697
58698 // Xor `num` with `this`
58699 BN.prototype.xor = function xor (num) {
58700 if (this.length > num.length) return this.clone().ixor(num);
58701 return num.clone().ixor(this);
58702 };
58703
58704 BN.prototype.uxor = function uxor (num) {
58705 if (this.length > num.length) return this.clone().iuxor(num);
58706 return num.clone().iuxor(this);
58707 };
58708
58709 // Not ``this`` with ``width`` bitwidth
58710 BN.prototype.inotn = function inotn (width) {
58711 assert(typeof width === 'number' && width >= 0);
58712
58713 var bytesNeeded = Math.ceil(width / 26) | 0;
58714 var bitsLeft = width % 26;
58715
58716 // Extend the buffer with leading zeroes
58717 this._expand(bytesNeeded);
58718
58719 if (bitsLeft > 0) {
58720 bytesNeeded--;
58721 }
58722
58723 // Handle complete words
58724 for (var i = 0; i < bytesNeeded; i++) {
58725 this.words[i] = ~this.words[i] & 0x3ffffff;
58726 }
58727
58728 // Handle the residue
58729 if (bitsLeft > 0) {
58730 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
58731 }
58732
58733 // And remove leading zeroes
58734 return this.strip();
58735 };
58736
58737 BN.prototype.notn = function notn (width) {
58738 return this.clone().inotn(width);
58739 };
58740
58741 // Set `bit` of `this`
58742 BN.prototype.setn = function setn (bit, val) {
58743 assert(typeof bit === 'number' && bit >= 0);
58744
58745 var off = (bit / 26) | 0;
58746 var wbit = bit % 26;
58747
58748 this._expand(off + 1);
58749
58750 if (val) {
58751 this.words[off] = this.words[off] | (1 << wbit);
58752 } else {
58753 this.words[off] = this.words[off] & ~(1 << wbit);
58754 }
58755
58756 return this.strip();
58757 };
58758
58759 // Add `num` to `this` in-place
58760 BN.prototype.iadd = function iadd (num) {
58761 var r;
58762
58763 // negative + positive
58764 if (this.negative !== 0 && num.negative === 0) {
58765 this.negative = 0;
58766 r = this.isub(num);
58767 this.negative ^= 1;
58768 return this._normSign();
58769
58770 // positive + negative
58771 } else if (this.negative === 0 && num.negative !== 0) {
58772 num.negative = 0;
58773 r = this.isub(num);
58774 num.negative = 1;
58775 return r._normSign();
58776 }
58777
58778 // a.length > b.length
58779 var a, b;
58780 if (this.length > num.length) {
58781 a = this;
58782 b = num;
58783 } else {
58784 a = num;
58785 b = this;
58786 }
58787
58788 var carry = 0;
58789 for (var i = 0; i < b.length; i++) {
58790 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
58791 this.words[i] = r & 0x3ffffff;
58792 carry = r >>> 26;
58793 }
58794 for (; carry !== 0 && i < a.length; i++) {
58795 r = (a.words[i] | 0) + carry;
58796 this.words[i] = r & 0x3ffffff;
58797 carry = r >>> 26;
58798 }
58799
58800 this.length = a.length;
58801 if (carry !== 0) {
58802 this.words[this.length] = carry;
58803 this.length++;
58804 // Copy the rest of the words
58805 } else if (a !== this) {
58806 for (; i < a.length; i++) {
58807 this.words[i] = a.words[i];
58808 }
58809 }
58810
58811 return this;
58812 };
58813
58814 // Add `num` to `this`
58815 BN.prototype.add = function add (num) {
58816 var res;
58817 if (num.negative !== 0 && this.negative === 0) {
58818 num.negative = 0;
58819 res = this.sub(num);
58820 num.negative ^= 1;
58821 return res;
58822 } else if (num.negative === 0 && this.negative !== 0) {
58823 this.negative = 0;
58824 res = num.sub(this);
58825 this.negative = 1;
58826 return res;
58827 }
58828
58829 if (this.length > num.length) return this.clone().iadd(num);
58830
58831 return num.clone().iadd(this);
58832 };
58833
58834 // Subtract `num` from `this` in-place
58835 BN.prototype.isub = function isub (num) {
58836 // this - (-num) = this + num
58837 if (num.negative !== 0) {
58838 num.negative = 0;
58839 var r = this.iadd(num);
58840 num.negative = 1;
58841 return r._normSign();
58842
58843 // -this - num = -(this + num)
58844 } else if (this.negative !== 0) {
58845 this.negative = 0;
58846 this.iadd(num);
58847 this.negative = 1;
58848 return this._normSign();
58849 }
58850
58851 // At this point both numbers are positive
58852 var cmp = this.cmp(num);
58853
58854 // Optimization - zeroify
58855 if (cmp === 0) {
58856 this.negative = 0;
58857 this.length = 1;
58858 this.words[0] = 0;
58859 return this;
58860 }
58861
58862 // a > b
58863 var a, b;
58864 if (cmp > 0) {
58865 a = this;
58866 b = num;
58867 } else {
58868 a = num;
58869 b = this;
58870 }
58871
58872 var carry = 0;
58873 for (var i = 0; i < b.length; i++) {
58874 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
58875 carry = r >> 26;
58876 this.words[i] = r & 0x3ffffff;
58877 }
58878 for (; carry !== 0 && i < a.length; i++) {
58879 r = (a.words[i] | 0) + carry;
58880 carry = r >> 26;
58881 this.words[i] = r & 0x3ffffff;
58882 }
58883
58884 // Copy rest of the words
58885 if (carry === 0 && i < a.length && a !== this) {
58886 for (; i < a.length; i++) {
58887 this.words[i] = a.words[i];
58888 }
58889 }
58890
58891 this.length = Math.max(this.length, i);
58892
58893 if (a !== this) {
58894 this.negative = 1;
58895 }
58896
58897 return this.strip();
58898 };
58899
58900 // Subtract `num` from `this`
58901 BN.prototype.sub = function sub (num) {
58902 return this.clone().isub(num);
58903 };
58904
58905 function smallMulTo (self, num, out) {
58906 out.negative = num.negative ^ self.negative;
58907 var len = (self.length + num.length) | 0;
58908 out.length = len;
58909 len = (len - 1) | 0;
58910
58911 // Peel one iteration (compiler can't do it, because of code complexity)
58912 var a = self.words[0] | 0;
58913 var b = num.words[0] | 0;
58914 var r = a * b;
58915
58916 var lo = r & 0x3ffffff;
58917 var carry = (r / 0x4000000) | 0;
58918 out.words[0] = lo;
58919
58920 for (var k = 1; k < len; k++) {
58921 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
58922 // note that ncarry could be >= 0x3ffffff
58923 var ncarry = carry >>> 26;
58924 var rword = carry & 0x3ffffff;
58925 var maxJ = Math.min(k, num.length - 1);
58926 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
58927 var i = (k - j) | 0;
58928 a = self.words[i] | 0;
58929 b = num.words[j] | 0;
58930 r = a * b + rword;
58931 ncarry += (r / 0x4000000) | 0;
58932 rword = r & 0x3ffffff;
58933 }
58934 out.words[k] = rword | 0;
58935 carry = ncarry | 0;
58936 }
58937 if (carry !== 0) {
58938 out.words[k] = carry | 0;
58939 } else {
58940 out.length--;
58941 }
58942
58943 return out.strip();
58944 }
58945
58946 // TODO(indutny): it may be reasonable to omit it for users who don't need
58947 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
58948 // multiplication (like elliptic secp256k1).
58949 var comb10MulTo = function comb10MulTo (self, num, out) {
58950 var a = self.words;
58951 var b = num.words;
58952 var o = out.words;
58953 var c = 0;
58954 var lo;
58955 var mid;
58956 var hi;
58957 var a0 = a[0] | 0;
58958 var al0 = a0 & 0x1fff;
58959 var ah0 = a0 >>> 13;
58960 var a1 = a[1] | 0;
58961 var al1 = a1 & 0x1fff;
58962 var ah1 = a1 >>> 13;
58963 var a2 = a[2] | 0;
58964 var al2 = a2 & 0x1fff;
58965 var ah2 = a2 >>> 13;
58966 var a3 = a[3] | 0;
58967 var al3 = a3 & 0x1fff;
58968 var ah3 = a3 >>> 13;
58969 var a4 = a[4] | 0;
58970 var al4 = a4 & 0x1fff;
58971 var ah4 = a4 >>> 13;
58972 var a5 = a[5] | 0;
58973 var al5 = a5 & 0x1fff;
58974 var ah5 = a5 >>> 13;
58975 var a6 = a[6] | 0;
58976 var al6 = a6 & 0x1fff;
58977 var ah6 = a6 >>> 13;
58978 var a7 = a[7] | 0;
58979 var al7 = a7 & 0x1fff;
58980 var ah7 = a7 >>> 13;
58981 var a8 = a[8] | 0;
58982 var al8 = a8 & 0x1fff;
58983 var ah8 = a8 >>> 13;
58984 var a9 = a[9] | 0;
58985 var al9 = a9 & 0x1fff;
58986 var ah9 = a9 >>> 13;
58987 var b0 = b[0] | 0;
58988 var bl0 = b0 & 0x1fff;
58989 var bh0 = b0 >>> 13;
58990 var b1 = b[1] | 0;
58991 var bl1 = b1 & 0x1fff;
58992 var bh1 = b1 >>> 13;
58993 var b2 = b[2] | 0;
58994 var bl2 = b2 & 0x1fff;
58995 var bh2 = b2 >>> 13;
58996 var b3 = b[3] | 0;
58997 var bl3 = b3 & 0x1fff;
58998 var bh3 = b3 >>> 13;
58999 var b4 = b[4] | 0;
59000 var bl4 = b4 & 0x1fff;
59001 var bh4 = b4 >>> 13;
59002 var b5 = b[5] | 0;
59003 var bl5 = b5 & 0x1fff;
59004 var bh5 = b5 >>> 13;
59005 var b6 = b[6] | 0;
59006 var bl6 = b6 & 0x1fff;
59007 var bh6 = b6 >>> 13;
59008 var b7 = b[7] | 0;
59009 var bl7 = b7 & 0x1fff;
59010 var bh7 = b7 >>> 13;
59011 var b8 = b[8] | 0;
59012 var bl8 = b8 & 0x1fff;
59013 var bh8 = b8 >>> 13;
59014 var b9 = b[9] | 0;
59015 var bl9 = b9 & 0x1fff;
59016 var bh9 = b9 >>> 13;
59017
59018 out.negative = self.negative ^ num.negative;
59019 out.length = 19;
59020 /* k = 0 */
59021 lo = Math.imul(al0, bl0);
59022 mid = Math.imul(al0, bh0);
59023 mid = (mid + Math.imul(ah0, bl0)) | 0;
59024 hi = Math.imul(ah0, bh0);
59025 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59026 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
59027 w0 &= 0x3ffffff;
59028 /* k = 1 */
59029 lo = Math.imul(al1, bl0);
59030 mid = Math.imul(al1, bh0);
59031 mid = (mid + Math.imul(ah1, bl0)) | 0;
59032 hi = Math.imul(ah1, bh0);
59033 lo = (lo + Math.imul(al0, bl1)) | 0;
59034 mid = (mid + Math.imul(al0, bh1)) | 0;
59035 mid = (mid + Math.imul(ah0, bl1)) | 0;
59036 hi = (hi + Math.imul(ah0, bh1)) | 0;
59037 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59038 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
59039 w1 &= 0x3ffffff;
59040 /* k = 2 */
59041 lo = Math.imul(al2, bl0);
59042 mid = Math.imul(al2, bh0);
59043 mid = (mid + Math.imul(ah2, bl0)) | 0;
59044 hi = Math.imul(ah2, bh0);
59045 lo = (lo + Math.imul(al1, bl1)) | 0;
59046 mid = (mid + Math.imul(al1, bh1)) | 0;
59047 mid = (mid + Math.imul(ah1, bl1)) | 0;
59048 hi = (hi + Math.imul(ah1, bh1)) | 0;
59049 lo = (lo + Math.imul(al0, bl2)) | 0;
59050 mid = (mid + Math.imul(al0, bh2)) | 0;
59051 mid = (mid + Math.imul(ah0, bl2)) | 0;
59052 hi = (hi + Math.imul(ah0, bh2)) | 0;
59053 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59054 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
59055 w2 &= 0x3ffffff;
59056 /* k = 3 */
59057 lo = Math.imul(al3, bl0);
59058 mid = Math.imul(al3, bh0);
59059 mid = (mid + Math.imul(ah3, bl0)) | 0;
59060 hi = Math.imul(ah3, bh0);
59061 lo = (lo + Math.imul(al2, bl1)) | 0;
59062 mid = (mid + Math.imul(al2, bh1)) | 0;
59063 mid = (mid + Math.imul(ah2, bl1)) | 0;
59064 hi = (hi + Math.imul(ah2, bh1)) | 0;
59065 lo = (lo + Math.imul(al1, bl2)) | 0;
59066 mid = (mid + Math.imul(al1, bh2)) | 0;
59067 mid = (mid + Math.imul(ah1, bl2)) | 0;
59068 hi = (hi + Math.imul(ah1, bh2)) | 0;
59069 lo = (lo + Math.imul(al0, bl3)) | 0;
59070 mid = (mid + Math.imul(al0, bh3)) | 0;
59071 mid = (mid + Math.imul(ah0, bl3)) | 0;
59072 hi = (hi + Math.imul(ah0, bh3)) | 0;
59073 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59074 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
59075 w3 &= 0x3ffffff;
59076 /* k = 4 */
59077 lo = Math.imul(al4, bl0);
59078 mid = Math.imul(al4, bh0);
59079 mid = (mid + Math.imul(ah4, bl0)) | 0;
59080 hi = Math.imul(ah4, bh0);
59081 lo = (lo + Math.imul(al3, bl1)) | 0;
59082 mid = (mid + Math.imul(al3, bh1)) | 0;
59083 mid = (mid + Math.imul(ah3, bl1)) | 0;
59084 hi = (hi + Math.imul(ah3, bh1)) | 0;
59085 lo = (lo + Math.imul(al2, bl2)) | 0;
59086 mid = (mid + Math.imul(al2, bh2)) | 0;
59087 mid = (mid + Math.imul(ah2, bl2)) | 0;
59088 hi = (hi + Math.imul(ah2, bh2)) | 0;
59089 lo = (lo + Math.imul(al1, bl3)) | 0;
59090 mid = (mid + Math.imul(al1, bh3)) | 0;
59091 mid = (mid + Math.imul(ah1, bl3)) | 0;
59092 hi = (hi + Math.imul(ah1, bh3)) | 0;
59093 lo = (lo + Math.imul(al0, bl4)) | 0;
59094 mid = (mid + Math.imul(al0, bh4)) | 0;
59095 mid = (mid + Math.imul(ah0, bl4)) | 0;
59096 hi = (hi + Math.imul(ah0, bh4)) | 0;
59097 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59098 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
59099 w4 &= 0x3ffffff;
59100 /* k = 5 */
59101 lo = Math.imul(al5, bl0);
59102 mid = Math.imul(al5, bh0);
59103 mid = (mid + Math.imul(ah5, bl0)) | 0;
59104 hi = Math.imul(ah5, bh0);
59105 lo = (lo + Math.imul(al4, bl1)) | 0;
59106 mid = (mid + Math.imul(al4, bh1)) | 0;
59107 mid = (mid + Math.imul(ah4, bl1)) | 0;
59108 hi = (hi + Math.imul(ah4, bh1)) | 0;
59109 lo = (lo + Math.imul(al3, bl2)) | 0;
59110 mid = (mid + Math.imul(al3, bh2)) | 0;
59111 mid = (mid + Math.imul(ah3, bl2)) | 0;
59112 hi = (hi + Math.imul(ah3, bh2)) | 0;
59113 lo = (lo + Math.imul(al2, bl3)) | 0;
59114 mid = (mid + Math.imul(al2, bh3)) | 0;
59115 mid = (mid + Math.imul(ah2, bl3)) | 0;
59116 hi = (hi + Math.imul(ah2, bh3)) | 0;
59117 lo = (lo + Math.imul(al1, bl4)) | 0;
59118 mid = (mid + Math.imul(al1, bh4)) | 0;
59119 mid = (mid + Math.imul(ah1, bl4)) | 0;
59120 hi = (hi + Math.imul(ah1, bh4)) | 0;
59121 lo = (lo + Math.imul(al0, bl5)) | 0;
59122 mid = (mid + Math.imul(al0, bh5)) | 0;
59123 mid = (mid + Math.imul(ah0, bl5)) | 0;
59124 hi = (hi + Math.imul(ah0, bh5)) | 0;
59125 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59126 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
59127 w5 &= 0x3ffffff;
59128 /* k = 6 */
59129 lo = Math.imul(al6, bl0);
59130 mid = Math.imul(al6, bh0);
59131 mid = (mid + Math.imul(ah6, bl0)) | 0;
59132 hi = Math.imul(ah6, bh0);
59133 lo = (lo + Math.imul(al5, bl1)) | 0;
59134 mid = (mid + Math.imul(al5, bh1)) | 0;
59135 mid = (mid + Math.imul(ah5, bl1)) | 0;
59136 hi = (hi + Math.imul(ah5, bh1)) | 0;
59137 lo = (lo + Math.imul(al4, bl2)) | 0;
59138 mid = (mid + Math.imul(al4, bh2)) | 0;
59139 mid = (mid + Math.imul(ah4, bl2)) | 0;
59140 hi = (hi + Math.imul(ah4, bh2)) | 0;
59141 lo = (lo + Math.imul(al3, bl3)) | 0;
59142 mid = (mid + Math.imul(al3, bh3)) | 0;
59143 mid = (mid + Math.imul(ah3, bl3)) | 0;
59144 hi = (hi + Math.imul(ah3, bh3)) | 0;
59145 lo = (lo + Math.imul(al2, bl4)) | 0;
59146 mid = (mid + Math.imul(al2, bh4)) | 0;
59147 mid = (mid + Math.imul(ah2, bl4)) | 0;
59148 hi = (hi + Math.imul(ah2, bh4)) | 0;
59149 lo = (lo + Math.imul(al1, bl5)) | 0;
59150 mid = (mid + Math.imul(al1, bh5)) | 0;
59151 mid = (mid + Math.imul(ah1, bl5)) | 0;
59152 hi = (hi + Math.imul(ah1, bh5)) | 0;
59153 lo = (lo + Math.imul(al0, bl6)) | 0;
59154 mid = (mid + Math.imul(al0, bh6)) | 0;
59155 mid = (mid + Math.imul(ah0, bl6)) | 0;
59156 hi = (hi + Math.imul(ah0, bh6)) | 0;
59157 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59158 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
59159 w6 &= 0x3ffffff;
59160 /* k = 7 */
59161 lo = Math.imul(al7, bl0);
59162 mid = Math.imul(al7, bh0);
59163 mid = (mid + Math.imul(ah7, bl0)) | 0;
59164 hi = Math.imul(ah7, bh0);
59165 lo = (lo + Math.imul(al6, bl1)) | 0;
59166 mid = (mid + Math.imul(al6, bh1)) | 0;
59167 mid = (mid + Math.imul(ah6, bl1)) | 0;
59168 hi = (hi + Math.imul(ah6, bh1)) | 0;
59169 lo = (lo + Math.imul(al5, bl2)) | 0;
59170 mid = (mid + Math.imul(al5, bh2)) | 0;
59171 mid = (mid + Math.imul(ah5, bl2)) | 0;
59172 hi = (hi + Math.imul(ah5, bh2)) | 0;
59173 lo = (lo + Math.imul(al4, bl3)) | 0;
59174 mid = (mid + Math.imul(al4, bh3)) | 0;
59175 mid = (mid + Math.imul(ah4, bl3)) | 0;
59176 hi = (hi + Math.imul(ah4, bh3)) | 0;
59177 lo = (lo + Math.imul(al3, bl4)) | 0;
59178 mid = (mid + Math.imul(al3, bh4)) | 0;
59179 mid = (mid + Math.imul(ah3, bl4)) | 0;
59180 hi = (hi + Math.imul(ah3, bh4)) | 0;
59181 lo = (lo + Math.imul(al2, bl5)) | 0;
59182 mid = (mid + Math.imul(al2, bh5)) | 0;
59183 mid = (mid + Math.imul(ah2, bl5)) | 0;
59184 hi = (hi + Math.imul(ah2, bh5)) | 0;
59185 lo = (lo + Math.imul(al1, bl6)) | 0;
59186 mid = (mid + Math.imul(al1, bh6)) | 0;
59187 mid = (mid + Math.imul(ah1, bl6)) | 0;
59188 hi = (hi + Math.imul(ah1, bh6)) | 0;
59189 lo = (lo + Math.imul(al0, bl7)) | 0;
59190 mid = (mid + Math.imul(al0, bh7)) | 0;
59191 mid = (mid + Math.imul(ah0, bl7)) | 0;
59192 hi = (hi + Math.imul(ah0, bh7)) | 0;
59193 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59194 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
59195 w7 &= 0x3ffffff;
59196 /* k = 8 */
59197 lo = Math.imul(al8, bl0);
59198 mid = Math.imul(al8, bh0);
59199 mid = (mid + Math.imul(ah8, bl0)) | 0;
59200 hi = Math.imul(ah8, bh0);
59201 lo = (lo + Math.imul(al7, bl1)) | 0;
59202 mid = (mid + Math.imul(al7, bh1)) | 0;
59203 mid = (mid + Math.imul(ah7, bl1)) | 0;
59204 hi = (hi + Math.imul(ah7, bh1)) | 0;
59205 lo = (lo + Math.imul(al6, bl2)) | 0;
59206 mid = (mid + Math.imul(al6, bh2)) | 0;
59207 mid = (mid + Math.imul(ah6, bl2)) | 0;
59208 hi = (hi + Math.imul(ah6, bh2)) | 0;
59209 lo = (lo + Math.imul(al5, bl3)) | 0;
59210 mid = (mid + Math.imul(al5, bh3)) | 0;
59211 mid = (mid + Math.imul(ah5, bl3)) | 0;
59212 hi = (hi + Math.imul(ah5, bh3)) | 0;
59213 lo = (lo + Math.imul(al4, bl4)) | 0;
59214 mid = (mid + Math.imul(al4, bh4)) | 0;
59215 mid = (mid + Math.imul(ah4, bl4)) | 0;
59216 hi = (hi + Math.imul(ah4, bh4)) | 0;
59217 lo = (lo + Math.imul(al3, bl5)) | 0;
59218 mid = (mid + Math.imul(al3, bh5)) | 0;
59219 mid = (mid + Math.imul(ah3, bl5)) | 0;
59220 hi = (hi + Math.imul(ah3, bh5)) | 0;
59221 lo = (lo + Math.imul(al2, bl6)) | 0;
59222 mid = (mid + Math.imul(al2, bh6)) | 0;
59223 mid = (mid + Math.imul(ah2, bl6)) | 0;
59224 hi = (hi + Math.imul(ah2, bh6)) | 0;
59225 lo = (lo + Math.imul(al1, bl7)) | 0;
59226 mid = (mid + Math.imul(al1, bh7)) | 0;
59227 mid = (mid + Math.imul(ah1, bl7)) | 0;
59228 hi = (hi + Math.imul(ah1, bh7)) | 0;
59229 lo = (lo + Math.imul(al0, bl8)) | 0;
59230 mid = (mid + Math.imul(al0, bh8)) | 0;
59231 mid = (mid + Math.imul(ah0, bl8)) | 0;
59232 hi = (hi + Math.imul(ah0, bh8)) | 0;
59233 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59234 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
59235 w8 &= 0x3ffffff;
59236 /* k = 9 */
59237 lo = Math.imul(al9, bl0);
59238 mid = Math.imul(al9, bh0);
59239 mid = (mid + Math.imul(ah9, bl0)) | 0;
59240 hi = Math.imul(ah9, bh0);
59241 lo = (lo + Math.imul(al8, bl1)) | 0;
59242 mid = (mid + Math.imul(al8, bh1)) | 0;
59243 mid = (mid + Math.imul(ah8, bl1)) | 0;
59244 hi = (hi + Math.imul(ah8, bh1)) | 0;
59245 lo = (lo + Math.imul(al7, bl2)) | 0;
59246 mid = (mid + Math.imul(al7, bh2)) | 0;
59247 mid = (mid + Math.imul(ah7, bl2)) | 0;
59248 hi = (hi + Math.imul(ah7, bh2)) | 0;
59249 lo = (lo + Math.imul(al6, bl3)) | 0;
59250 mid = (mid + Math.imul(al6, bh3)) | 0;
59251 mid = (mid + Math.imul(ah6, bl3)) | 0;
59252 hi = (hi + Math.imul(ah6, bh3)) | 0;
59253 lo = (lo + Math.imul(al5, bl4)) | 0;
59254 mid = (mid + Math.imul(al5, bh4)) | 0;
59255 mid = (mid + Math.imul(ah5, bl4)) | 0;
59256 hi = (hi + Math.imul(ah5, bh4)) | 0;
59257 lo = (lo + Math.imul(al4, bl5)) | 0;
59258 mid = (mid + Math.imul(al4, bh5)) | 0;
59259 mid = (mid + Math.imul(ah4, bl5)) | 0;
59260 hi = (hi + Math.imul(ah4, bh5)) | 0;
59261 lo = (lo + Math.imul(al3, bl6)) | 0;
59262 mid = (mid + Math.imul(al3, bh6)) | 0;
59263 mid = (mid + Math.imul(ah3, bl6)) | 0;
59264 hi = (hi + Math.imul(ah3, bh6)) | 0;
59265 lo = (lo + Math.imul(al2, bl7)) | 0;
59266 mid = (mid + Math.imul(al2, bh7)) | 0;
59267 mid = (mid + Math.imul(ah2, bl7)) | 0;
59268 hi = (hi + Math.imul(ah2, bh7)) | 0;
59269 lo = (lo + Math.imul(al1, bl8)) | 0;
59270 mid = (mid + Math.imul(al1, bh8)) | 0;
59271 mid = (mid + Math.imul(ah1, bl8)) | 0;
59272 hi = (hi + Math.imul(ah1, bh8)) | 0;
59273 lo = (lo + Math.imul(al0, bl9)) | 0;
59274 mid = (mid + Math.imul(al0, bh9)) | 0;
59275 mid = (mid + Math.imul(ah0, bl9)) | 0;
59276 hi = (hi + Math.imul(ah0, bh9)) | 0;
59277 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59278 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
59279 w9 &= 0x3ffffff;
59280 /* k = 10 */
59281 lo = Math.imul(al9, bl1);
59282 mid = Math.imul(al9, bh1);
59283 mid = (mid + Math.imul(ah9, bl1)) | 0;
59284 hi = Math.imul(ah9, bh1);
59285 lo = (lo + Math.imul(al8, bl2)) | 0;
59286 mid = (mid + Math.imul(al8, bh2)) | 0;
59287 mid = (mid + Math.imul(ah8, bl2)) | 0;
59288 hi = (hi + Math.imul(ah8, bh2)) | 0;
59289 lo = (lo + Math.imul(al7, bl3)) | 0;
59290 mid = (mid + Math.imul(al7, bh3)) | 0;
59291 mid = (mid + Math.imul(ah7, bl3)) | 0;
59292 hi = (hi + Math.imul(ah7, bh3)) | 0;
59293 lo = (lo + Math.imul(al6, bl4)) | 0;
59294 mid = (mid + Math.imul(al6, bh4)) | 0;
59295 mid = (mid + Math.imul(ah6, bl4)) | 0;
59296 hi = (hi + Math.imul(ah6, bh4)) | 0;
59297 lo = (lo + Math.imul(al5, bl5)) | 0;
59298 mid = (mid + Math.imul(al5, bh5)) | 0;
59299 mid = (mid + Math.imul(ah5, bl5)) | 0;
59300 hi = (hi + Math.imul(ah5, bh5)) | 0;
59301 lo = (lo + Math.imul(al4, bl6)) | 0;
59302 mid = (mid + Math.imul(al4, bh6)) | 0;
59303 mid = (mid + Math.imul(ah4, bl6)) | 0;
59304 hi = (hi + Math.imul(ah4, bh6)) | 0;
59305 lo = (lo + Math.imul(al3, bl7)) | 0;
59306 mid = (mid + Math.imul(al3, bh7)) | 0;
59307 mid = (mid + Math.imul(ah3, bl7)) | 0;
59308 hi = (hi + Math.imul(ah3, bh7)) | 0;
59309 lo = (lo + Math.imul(al2, bl8)) | 0;
59310 mid = (mid + Math.imul(al2, bh8)) | 0;
59311 mid = (mid + Math.imul(ah2, bl8)) | 0;
59312 hi = (hi + Math.imul(ah2, bh8)) | 0;
59313 lo = (lo + Math.imul(al1, bl9)) | 0;
59314 mid = (mid + Math.imul(al1, bh9)) | 0;
59315 mid = (mid + Math.imul(ah1, bl9)) | 0;
59316 hi = (hi + Math.imul(ah1, bh9)) | 0;
59317 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59318 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
59319 w10 &= 0x3ffffff;
59320 /* k = 11 */
59321 lo = Math.imul(al9, bl2);
59322 mid = Math.imul(al9, bh2);
59323 mid = (mid + Math.imul(ah9, bl2)) | 0;
59324 hi = Math.imul(ah9, bh2);
59325 lo = (lo + Math.imul(al8, bl3)) | 0;
59326 mid = (mid + Math.imul(al8, bh3)) | 0;
59327 mid = (mid + Math.imul(ah8, bl3)) | 0;
59328 hi = (hi + Math.imul(ah8, bh3)) | 0;
59329 lo = (lo + Math.imul(al7, bl4)) | 0;
59330 mid = (mid + Math.imul(al7, bh4)) | 0;
59331 mid = (mid + Math.imul(ah7, bl4)) | 0;
59332 hi = (hi + Math.imul(ah7, bh4)) | 0;
59333 lo = (lo + Math.imul(al6, bl5)) | 0;
59334 mid = (mid + Math.imul(al6, bh5)) | 0;
59335 mid = (mid + Math.imul(ah6, bl5)) | 0;
59336 hi = (hi + Math.imul(ah6, bh5)) | 0;
59337 lo = (lo + Math.imul(al5, bl6)) | 0;
59338 mid = (mid + Math.imul(al5, bh6)) | 0;
59339 mid = (mid + Math.imul(ah5, bl6)) | 0;
59340 hi = (hi + Math.imul(ah5, bh6)) | 0;
59341 lo = (lo + Math.imul(al4, bl7)) | 0;
59342 mid = (mid + Math.imul(al4, bh7)) | 0;
59343 mid = (mid + Math.imul(ah4, bl7)) | 0;
59344 hi = (hi + Math.imul(ah4, bh7)) | 0;
59345 lo = (lo + Math.imul(al3, bl8)) | 0;
59346 mid = (mid + Math.imul(al3, bh8)) | 0;
59347 mid = (mid + Math.imul(ah3, bl8)) | 0;
59348 hi = (hi + Math.imul(ah3, bh8)) | 0;
59349 lo = (lo + Math.imul(al2, bl9)) | 0;
59350 mid = (mid + Math.imul(al2, bh9)) | 0;
59351 mid = (mid + Math.imul(ah2, bl9)) | 0;
59352 hi = (hi + Math.imul(ah2, bh9)) | 0;
59353 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59354 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
59355 w11 &= 0x3ffffff;
59356 /* k = 12 */
59357 lo = Math.imul(al9, bl3);
59358 mid = Math.imul(al9, bh3);
59359 mid = (mid + Math.imul(ah9, bl3)) | 0;
59360 hi = Math.imul(ah9, bh3);
59361 lo = (lo + Math.imul(al8, bl4)) | 0;
59362 mid = (mid + Math.imul(al8, bh4)) | 0;
59363 mid = (mid + Math.imul(ah8, bl4)) | 0;
59364 hi = (hi + Math.imul(ah8, bh4)) | 0;
59365 lo = (lo + Math.imul(al7, bl5)) | 0;
59366 mid = (mid + Math.imul(al7, bh5)) | 0;
59367 mid = (mid + Math.imul(ah7, bl5)) | 0;
59368 hi = (hi + Math.imul(ah7, bh5)) | 0;
59369 lo = (lo + Math.imul(al6, bl6)) | 0;
59370 mid = (mid + Math.imul(al6, bh6)) | 0;
59371 mid = (mid + Math.imul(ah6, bl6)) | 0;
59372 hi = (hi + Math.imul(ah6, bh6)) | 0;
59373 lo = (lo + Math.imul(al5, bl7)) | 0;
59374 mid = (mid + Math.imul(al5, bh7)) | 0;
59375 mid = (mid + Math.imul(ah5, bl7)) | 0;
59376 hi = (hi + Math.imul(ah5, bh7)) | 0;
59377 lo = (lo + Math.imul(al4, bl8)) | 0;
59378 mid = (mid + Math.imul(al4, bh8)) | 0;
59379 mid = (mid + Math.imul(ah4, bl8)) | 0;
59380 hi = (hi + Math.imul(ah4, bh8)) | 0;
59381 lo = (lo + Math.imul(al3, bl9)) | 0;
59382 mid = (mid + Math.imul(al3, bh9)) | 0;
59383 mid = (mid + Math.imul(ah3, bl9)) | 0;
59384 hi = (hi + Math.imul(ah3, bh9)) | 0;
59385 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59386 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
59387 w12 &= 0x3ffffff;
59388 /* k = 13 */
59389 lo = Math.imul(al9, bl4);
59390 mid = Math.imul(al9, bh4);
59391 mid = (mid + Math.imul(ah9, bl4)) | 0;
59392 hi = Math.imul(ah9, bh4);
59393 lo = (lo + Math.imul(al8, bl5)) | 0;
59394 mid = (mid + Math.imul(al8, bh5)) | 0;
59395 mid = (mid + Math.imul(ah8, bl5)) | 0;
59396 hi = (hi + Math.imul(ah8, bh5)) | 0;
59397 lo = (lo + Math.imul(al7, bl6)) | 0;
59398 mid = (mid + Math.imul(al7, bh6)) | 0;
59399 mid = (mid + Math.imul(ah7, bl6)) | 0;
59400 hi = (hi + Math.imul(ah7, bh6)) | 0;
59401 lo = (lo + Math.imul(al6, bl7)) | 0;
59402 mid = (mid + Math.imul(al6, bh7)) | 0;
59403 mid = (mid + Math.imul(ah6, bl7)) | 0;
59404 hi = (hi + Math.imul(ah6, bh7)) | 0;
59405 lo = (lo + Math.imul(al5, bl8)) | 0;
59406 mid = (mid + Math.imul(al5, bh8)) | 0;
59407 mid = (mid + Math.imul(ah5, bl8)) | 0;
59408 hi = (hi + Math.imul(ah5, bh8)) | 0;
59409 lo = (lo + Math.imul(al4, bl9)) | 0;
59410 mid = (mid + Math.imul(al4, bh9)) | 0;
59411 mid = (mid + Math.imul(ah4, bl9)) | 0;
59412 hi = (hi + Math.imul(ah4, bh9)) | 0;
59413 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59414 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
59415 w13 &= 0x3ffffff;
59416 /* k = 14 */
59417 lo = Math.imul(al9, bl5);
59418 mid = Math.imul(al9, bh5);
59419 mid = (mid + Math.imul(ah9, bl5)) | 0;
59420 hi = Math.imul(ah9, bh5);
59421 lo = (lo + Math.imul(al8, bl6)) | 0;
59422 mid = (mid + Math.imul(al8, bh6)) | 0;
59423 mid = (mid + Math.imul(ah8, bl6)) | 0;
59424 hi = (hi + Math.imul(ah8, bh6)) | 0;
59425 lo = (lo + Math.imul(al7, bl7)) | 0;
59426 mid = (mid + Math.imul(al7, bh7)) | 0;
59427 mid = (mid + Math.imul(ah7, bl7)) | 0;
59428 hi = (hi + Math.imul(ah7, bh7)) | 0;
59429 lo = (lo + Math.imul(al6, bl8)) | 0;
59430 mid = (mid + Math.imul(al6, bh8)) | 0;
59431 mid = (mid + Math.imul(ah6, bl8)) | 0;
59432 hi = (hi + Math.imul(ah6, bh8)) | 0;
59433 lo = (lo + Math.imul(al5, bl9)) | 0;
59434 mid = (mid + Math.imul(al5, bh9)) | 0;
59435 mid = (mid + Math.imul(ah5, bl9)) | 0;
59436 hi = (hi + Math.imul(ah5, bh9)) | 0;
59437 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59438 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
59439 w14 &= 0x3ffffff;
59440 /* k = 15 */
59441 lo = Math.imul(al9, bl6);
59442 mid = Math.imul(al9, bh6);
59443 mid = (mid + Math.imul(ah9, bl6)) | 0;
59444 hi = Math.imul(ah9, bh6);
59445 lo = (lo + Math.imul(al8, bl7)) | 0;
59446 mid = (mid + Math.imul(al8, bh7)) | 0;
59447 mid = (mid + Math.imul(ah8, bl7)) | 0;
59448 hi = (hi + Math.imul(ah8, bh7)) | 0;
59449 lo = (lo + Math.imul(al7, bl8)) | 0;
59450 mid = (mid + Math.imul(al7, bh8)) | 0;
59451 mid = (mid + Math.imul(ah7, bl8)) | 0;
59452 hi = (hi + Math.imul(ah7, bh8)) | 0;
59453 lo = (lo + Math.imul(al6, bl9)) | 0;
59454 mid = (mid + Math.imul(al6, bh9)) | 0;
59455 mid = (mid + Math.imul(ah6, bl9)) | 0;
59456 hi = (hi + Math.imul(ah6, bh9)) | 0;
59457 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59458 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
59459 w15 &= 0x3ffffff;
59460 /* k = 16 */
59461 lo = Math.imul(al9, bl7);
59462 mid = Math.imul(al9, bh7);
59463 mid = (mid + Math.imul(ah9, bl7)) | 0;
59464 hi = Math.imul(ah9, bh7);
59465 lo = (lo + Math.imul(al8, bl8)) | 0;
59466 mid = (mid + Math.imul(al8, bh8)) | 0;
59467 mid = (mid + Math.imul(ah8, bl8)) | 0;
59468 hi = (hi + Math.imul(ah8, bh8)) | 0;
59469 lo = (lo + Math.imul(al7, bl9)) | 0;
59470 mid = (mid + Math.imul(al7, bh9)) | 0;
59471 mid = (mid + Math.imul(ah7, bl9)) | 0;
59472 hi = (hi + Math.imul(ah7, bh9)) | 0;
59473 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59474 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
59475 w16 &= 0x3ffffff;
59476 /* k = 17 */
59477 lo = Math.imul(al9, bl8);
59478 mid = Math.imul(al9, bh8);
59479 mid = (mid + Math.imul(ah9, bl8)) | 0;
59480 hi = Math.imul(ah9, bh8);
59481 lo = (lo + Math.imul(al8, bl9)) | 0;
59482 mid = (mid + Math.imul(al8, bh9)) | 0;
59483 mid = (mid + Math.imul(ah8, bl9)) | 0;
59484 hi = (hi + Math.imul(ah8, bh9)) | 0;
59485 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59486 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
59487 w17 &= 0x3ffffff;
59488 /* k = 18 */
59489 lo = Math.imul(al9, bl9);
59490 mid = Math.imul(al9, bh9);
59491 mid = (mid + Math.imul(ah9, bl9)) | 0;
59492 hi = Math.imul(ah9, bh9);
59493 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
59494 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
59495 w18 &= 0x3ffffff;
59496 o[0] = w0;
59497 o[1] = w1;
59498 o[2] = w2;
59499 o[3] = w3;
59500 o[4] = w4;
59501 o[5] = w5;
59502 o[6] = w6;
59503 o[7] = w7;
59504 o[8] = w8;
59505 o[9] = w9;
59506 o[10] = w10;
59507 o[11] = w11;
59508 o[12] = w12;
59509 o[13] = w13;
59510 o[14] = w14;
59511 o[15] = w15;
59512 o[16] = w16;
59513 o[17] = w17;
59514 o[18] = w18;
59515 if (c !== 0) {
59516 o[19] = c;
59517 out.length++;
59518 }
59519 return out;
59520 };
59521
59522 // Polyfill comb
59523 if (!Math.imul) {
59524 comb10MulTo = smallMulTo;
59525 }
59526
59527 function bigMulTo (self, num, out) {
59528 out.negative = num.negative ^ self.negative;
59529 out.length = self.length + num.length;
59530
59531 var carry = 0;
59532 var hncarry = 0;
59533 for (var k = 0; k < out.length - 1; k++) {
59534 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
59535 // note that ncarry could be >= 0x3ffffff
59536 var ncarry = hncarry;
59537 hncarry = 0;
59538 var rword = carry & 0x3ffffff;
59539 var maxJ = Math.min(k, num.length - 1);
59540 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
59541 var i = k - j;
59542 var a = self.words[i] | 0;
59543 var b = num.words[j] | 0;
59544 var r = a * b;
59545
59546 var lo = r & 0x3ffffff;
59547 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
59548 lo = (lo + rword) | 0;
59549 rword = lo & 0x3ffffff;
59550 ncarry = (ncarry + (lo >>> 26)) | 0;
59551
59552 hncarry += ncarry >>> 26;
59553 ncarry &= 0x3ffffff;
59554 }
59555 out.words[k] = rword;
59556 carry = ncarry;
59557 ncarry = hncarry;
59558 }
59559 if (carry !== 0) {
59560 out.words[k] = carry;
59561 } else {
59562 out.length--;
59563 }
59564
59565 return out.strip();
59566 }
59567
59568 function jumboMulTo (self, num, out) {
59569 var fftm = new FFTM();
59570 return fftm.mulp(self, num, out);
59571 }
59572
59573 BN.prototype.mulTo = function mulTo (num, out) {
59574 var res;
59575 var len = this.length + num.length;
59576 if (this.length === 10 && num.length === 10) {
59577 res = comb10MulTo(this, num, out);
59578 } else if (len < 63) {
59579 res = smallMulTo(this, num, out);
59580 } else if (len < 1024) {
59581 res = bigMulTo(this, num, out);
59582 } else {
59583 res = jumboMulTo(this, num, out);
59584 }
59585
59586 return res;
59587 };
59588
59589 // Cooley-Tukey algorithm for FFT
59590 // slightly revisited to rely on looping instead of recursion
59591
59592 function FFTM (x, y) {
59593 this.x = x;
59594 this.y = y;
59595 }
59596
59597 FFTM.prototype.makeRBT = function makeRBT (N) {
59598 var t = new Array(N);
59599 var l = BN.prototype._countBits(N) - 1;
59600 for (var i = 0; i < N; i++) {
59601 t[i] = this.revBin(i, l, N);
59602 }
59603
59604 return t;
59605 };
59606
59607 // Returns binary-reversed representation of `x`
59608 FFTM.prototype.revBin = function revBin (x, l, N) {
59609 if (x === 0 || x === N - 1) return x;
59610
59611 var rb = 0;
59612 for (var i = 0; i < l; i++) {
59613 rb |= (x & 1) << (l - i - 1);
59614 x >>= 1;
59615 }
59616
59617 return rb;
59618 };
59619
59620 // Performs "tweedling" phase, therefore 'emulating'
59621 // behaviour of the recursive algorithm
59622 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
59623 for (var i = 0; i < N; i++) {
59624 rtws[i] = rws[rbt[i]];
59625 itws[i] = iws[rbt[i]];
59626 }
59627 };
59628
59629 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
59630 this.permute(rbt, rws, iws, rtws, itws, N);
59631
59632 for (var s = 1; s < N; s <<= 1) {
59633 var l = s << 1;
59634
59635 var rtwdf = Math.cos(2 * Math.PI / l);
59636 var itwdf = Math.sin(2 * Math.PI / l);
59637
59638 for (var p = 0; p < N; p += l) {
59639 var rtwdf_ = rtwdf;
59640 var itwdf_ = itwdf;
59641
59642 for (var j = 0; j < s; j++) {
59643 var re = rtws[p + j];
59644 var ie = itws[p + j];
59645
59646 var ro = rtws[p + j + s];
59647 var io = itws[p + j + s];
59648
59649 var rx = rtwdf_ * ro - itwdf_ * io;
59650
59651 io = rtwdf_ * io + itwdf_ * ro;
59652 ro = rx;
59653
59654 rtws[p + j] = re + ro;
59655 itws[p + j] = ie + io;
59656
59657 rtws[p + j + s] = re - ro;
59658 itws[p + j + s] = ie - io;
59659
59660 /* jshint maxdepth : false */
59661 if (j !== l) {
59662 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
59663
59664 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
59665 rtwdf_ = rx;
59666 }
59667 }
59668 }
59669 }
59670 };
59671
59672 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
59673 var N = Math.max(m, n) | 1;
59674 var odd = N & 1;
59675 var i = 0;
59676 for (N = N / 2 | 0; N; N = N >>> 1) {
59677 i++;
59678 }
59679
59680 return 1 << i + 1 + odd;
59681 };
59682
59683 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
59684 if (N <= 1) return;
59685
59686 for (var i = 0; i < N / 2; i++) {
59687 var t = rws[i];
59688
59689 rws[i] = rws[N - i - 1];
59690 rws[N - i - 1] = t;
59691
59692 t = iws[i];
59693
59694 iws[i] = -iws[N - i - 1];
59695 iws[N - i - 1] = -t;
59696 }
59697 };
59698
59699 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
59700 var carry = 0;
59701 for (var i = 0; i < N / 2; i++) {
59702 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
59703 Math.round(ws[2 * i] / N) +
59704 carry;
59705
59706 ws[i] = w & 0x3ffffff;
59707
59708 if (w < 0x4000000) {
59709 carry = 0;
59710 } else {
59711 carry = w / 0x4000000 | 0;
59712 }
59713 }
59714
59715 return ws;
59716 };
59717
59718 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
59719 var carry = 0;
59720 for (var i = 0; i < len; i++) {
59721 carry = carry + (ws[i] | 0);
59722
59723 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
59724 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
59725 }
59726
59727 // Pad with zeroes
59728 for (i = 2 * len; i < N; ++i) {
59729 rws[i] = 0;
59730 }
59731
59732 assert(carry === 0);
59733 assert((carry & ~0x1fff) === 0);
59734 };
59735
59736 FFTM.prototype.stub = function stub (N) {
59737 var ph = new Array(N);
59738 for (var i = 0; i < N; i++) {
59739 ph[i] = 0;
59740 }
59741
59742 return ph;
59743 };
59744
59745 FFTM.prototype.mulp = function mulp (x, y, out) {
59746 var N = 2 * this.guessLen13b(x.length, y.length);
59747
59748 var rbt = this.makeRBT(N);
59749
59750 var _ = this.stub(N);
59751
59752 var rws = new Array(N);
59753 var rwst = new Array(N);
59754 var iwst = new Array(N);
59755
59756 var nrws = new Array(N);
59757 var nrwst = new Array(N);
59758 var niwst = new Array(N);
59759
59760 var rmws = out.words;
59761 rmws.length = N;
59762
59763 this.convert13b(x.words, x.length, rws, N);
59764 this.convert13b(y.words, y.length, nrws, N);
59765
59766 this.transform(rws, _, rwst, iwst, N, rbt);
59767 this.transform(nrws, _, nrwst, niwst, N, rbt);
59768
59769 for (var i = 0; i < N; i++) {
59770 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
59771 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
59772 rwst[i] = rx;
59773 }
59774
59775 this.conjugate(rwst, iwst, N);
59776 this.transform(rwst, iwst, rmws, _, N, rbt);
59777 this.conjugate(rmws, _, N);
59778 this.normalize13b(rmws, N);
59779
59780 out.negative = x.negative ^ y.negative;
59781 out.length = x.length + y.length;
59782 return out.strip();
59783 };
59784
59785 // Multiply `this` by `num`
59786 BN.prototype.mul = function mul (num) {
59787 var out = new BN(null);
59788 out.words = new Array(this.length + num.length);
59789 return this.mulTo(num, out);
59790 };
59791
59792 // Multiply employing FFT
59793 BN.prototype.mulf = function mulf (num) {
59794 var out = new BN(null);
59795 out.words = new Array(this.length + num.length);
59796 return jumboMulTo(this, num, out);
59797 };
59798
59799 // In-place Multiplication
59800 BN.prototype.imul = function imul (num) {
59801 return this.clone().mulTo(num, this);
59802 };
59803
59804 BN.prototype.imuln = function imuln (num) {
59805 assert(typeof num === 'number');
59806 assert(num < 0x4000000);
59807
59808 // Carry
59809 var carry = 0;
59810 for (var i = 0; i < this.length; i++) {
59811 var w = (this.words[i] | 0) * num;
59812 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
59813 carry >>= 26;
59814 carry += (w / 0x4000000) | 0;
59815 // NOTE: lo is 27bit maximum
59816 carry += lo >>> 26;
59817 this.words[i] = lo & 0x3ffffff;
59818 }
59819
59820 if (carry !== 0) {
59821 this.words[i] = carry;
59822 this.length++;
59823 }
59824
59825 return this;
59826 };
59827
59828 BN.prototype.muln = function muln (num) {
59829 return this.clone().imuln(num);
59830 };
59831
59832 // `this` * `this`
59833 BN.prototype.sqr = function sqr () {
59834 return this.mul(this);
59835 };
59836
59837 // `this` * `this` in-place
59838 BN.prototype.isqr = function isqr () {
59839 return this.imul(this.clone());
59840 };
59841
59842 // Math.pow(`this`, `num`)
59843 BN.prototype.pow = function pow (num) {
59844 var w = toBitArray(num);
59845 if (w.length === 0) return new BN(1);
59846
59847 // Skip leading zeroes
59848 var res = this;
59849 for (var i = 0; i < w.length; i++, res = res.sqr()) {
59850 if (w[i] !== 0) break;
59851 }
59852
59853 if (++i < w.length) {
59854 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
59855 if (w[i] === 0) continue;
59856
59857 res = res.mul(q);
59858 }
59859 }
59860
59861 return res;
59862 };
59863
59864 // Shift-left in-place
59865 BN.prototype.iushln = function iushln (bits) {
59866 assert(typeof bits === 'number' && bits >= 0);
59867 var r = bits % 26;
59868 var s = (bits - r) / 26;
59869 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
59870 var i;
59871
59872 if (r !== 0) {
59873 var carry = 0;
59874
59875 for (i = 0; i < this.length; i++) {
59876 var newCarry = this.words[i] & carryMask;
59877 var c = ((this.words[i] | 0) - newCarry) << r;
59878 this.words[i] = c | carry;
59879 carry = newCarry >>> (26 - r);
59880 }
59881
59882 if (carry) {
59883 this.words[i] = carry;
59884 this.length++;
59885 }
59886 }
59887
59888 if (s !== 0) {
59889 for (i = this.length - 1; i >= 0; i--) {
59890 this.words[i + s] = this.words[i];
59891 }
59892
59893 for (i = 0; i < s; i++) {
59894 this.words[i] = 0;
59895 }
59896
59897 this.length += s;
59898 }
59899
59900 return this.strip();
59901 };
59902
59903 BN.prototype.ishln = function ishln (bits) {
59904 // TODO(indutny): implement me
59905 assert(this.negative === 0);
59906 return this.iushln(bits);
59907 };
59908
59909 // Shift-right in-place
59910 // NOTE: `hint` is a lowest bit before trailing zeroes
59911 // NOTE: if `extended` is present - it will be filled with destroyed bits
59912 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
59913 assert(typeof bits === 'number' && bits >= 0);
59914 var h;
59915 if (hint) {
59916 h = (hint - (hint % 26)) / 26;
59917 } else {
59918 h = 0;
59919 }
59920
59921 var r = bits % 26;
59922 var s = Math.min((bits - r) / 26, this.length);
59923 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
59924 var maskedWords = extended;
59925
59926 h -= s;
59927 h = Math.max(0, h);
59928
59929 // Extended mode, copy masked part
59930 if (maskedWords) {
59931 for (var i = 0; i < s; i++) {
59932 maskedWords.words[i] = this.words[i];
59933 }
59934 maskedWords.length = s;
59935 }
59936
59937 if (s === 0) {
59938 // No-op, we should not move anything at all
59939 } else if (this.length > s) {
59940 this.length -= s;
59941 for (i = 0; i < this.length; i++) {
59942 this.words[i] = this.words[i + s];
59943 }
59944 } else {
59945 this.words[0] = 0;
59946 this.length = 1;
59947 }
59948
59949 var carry = 0;
59950 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
59951 var word = this.words[i] | 0;
59952 this.words[i] = (carry << (26 - r)) | (word >>> r);
59953 carry = word & mask;
59954 }
59955
59956 // Push carried bits as a mask
59957 if (maskedWords && carry !== 0) {
59958 maskedWords.words[maskedWords.length++] = carry;
59959 }
59960
59961 if (this.length === 0) {
59962 this.words[0] = 0;
59963 this.length = 1;
59964 }
59965
59966 return this.strip();
59967 };
59968
59969 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
59970 // TODO(indutny): implement me
59971 assert(this.negative === 0);
59972 return this.iushrn(bits, hint, extended);
59973 };
59974
59975 // Shift-left
59976 BN.prototype.shln = function shln (bits) {
59977 return this.clone().ishln(bits);
59978 };
59979
59980 BN.prototype.ushln = function ushln (bits) {
59981 return this.clone().iushln(bits);
59982 };
59983
59984 // Shift-right
59985 BN.prototype.shrn = function shrn (bits) {
59986 return this.clone().ishrn(bits);
59987 };
59988
59989 BN.prototype.ushrn = function ushrn (bits) {
59990 return this.clone().iushrn(bits);
59991 };
59992
59993 // Test if n bit is set
59994 BN.prototype.testn = function testn (bit) {
59995 assert(typeof bit === 'number' && bit >= 0);
59996 var r = bit % 26;
59997 var s = (bit - r) / 26;
59998 var q = 1 << r;
59999
60000 // Fast case: bit is much higher than all existing words
60001 if (this.length <= s) return false;
60002
60003 // Check bit and return
60004 var w = this.words[s];
60005
60006 return !!(w & q);
60007 };
60008
60009 // Return only lowers bits of number (in-place)
60010 BN.prototype.imaskn = function imaskn (bits) {
60011 assert(typeof bits === 'number' && bits >= 0);
60012 var r = bits % 26;
60013 var s = (bits - r) / 26;
60014
60015 assert(this.negative === 0, 'imaskn works only with positive numbers');
60016
60017 if (this.length <= s) {
60018 return this;
60019 }
60020
60021 if (r !== 0) {
60022 s++;
60023 }
60024 this.length = Math.min(s, this.length);
60025
60026 if (r !== 0) {
60027 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
60028 this.words[this.length - 1] &= mask;
60029 }
60030
60031 return this.strip();
60032 };
60033
60034 // Return only lowers bits of number
60035 BN.prototype.maskn = function maskn (bits) {
60036 return this.clone().imaskn(bits);
60037 };
60038
60039 // Add plain number `num` to `this`
60040 BN.prototype.iaddn = function iaddn (num) {
60041 assert(typeof num === 'number');
60042 assert(num < 0x4000000);
60043 if (num < 0) return this.isubn(-num);
60044
60045 // Possible sign change
60046 if (this.negative !== 0) {
60047 if (this.length === 1 && (this.words[0] | 0) < num) {
60048 this.words[0] = num - (this.words[0] | 0);
60049 this.negative = 0;
60050 return this;
60051 }
60052
60053 this.negative = 0;
60054 this.isubn(num);
60055 this.negative = 1;
60056 return this;
60057 }
60058
60059 // Add without checks
60060 return this._iaddn(num);
60061 };
60062
60063 BN.prototype._iaddn = function _iaddn (num) {
60064 this.words[0] += num;
60065
60066 // Carry
60067 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
60068 this.words[i] -= 0x4000000;
60069 if (i === this.length - 1) {
60070 this.words[i + 1] = 1;
60071 } else {
60072 this.words[i + 1]++;
60073 }
60074 }
60075 this.length = Math.max(this.length, i + 1);
60076
60077 return this;
60078 };
60079
60080 // Subtract plain number `num` from `this`
60081 BN.prototype.isubn = function isubn (num) {
60082 assert(typeof num === 'number');
60083 assert(num < 0x4000000);
60084 if (num < 0) return this.iaddn(-num);
60085
60086 if (this.negative !== 0) {
60087 this.negative = 0;
60088 this.iaddn(num);
60089 this.negative = 1;
60090 return this;
60091 }
60092
60093 this.words[0] -= num;
60094
60095 if (this.length === 1 && this.words[0] < 0) {
60096 this.words[0] = -this.words[0];
60097 this.negative = 1;
60098 } else {
60099 // Carry
60100 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
60101 this.words[i] += 0x4000000;
60102 this.words[i + 1] -= 1;
60103 }
60104 }
60105
60106 return this.strip();
60107 };
60108
60109 BN.prototype.addn = function addn (num) {
60110 return this.clone().iaddn(num);
60111 };
60112
60113 BN.prototype.subn = function subn (num) {
60114 return this.clone().isubn(num);
60115 };
60116
60117 BN.prototype.iabs = function iabs () {
60118 this.negative = 0;
60119
60120 return this;
60121 };
60122
60123 BN.prototype.abs = function abs () {
60124 return this.clone().iabs();
60125 };
60126
60127 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
60128 var len = num.length + shift;
60129 var i;
60130
60131 this._expand(len);
60132
60133 var w;
60134 var carry = 0;
60135 for (i = 0; i < num.length; i++) {
60136 w = (this.words[i + shift] | 0) + carry;
60137 var right = (num.words[i] | 0) * mul;
60138 w -= right & 0x3ffffff;
60139 carry = (w >> 26) - ((right / 0x4000000) | 0);
60140 this.words[i + shift] = w & 0x3ffffff;
60141 }
60142 for (; i < this.length - shift; i++) {
60143 w = (this.words[i + shift] | 0) + carry;
60144 carry = w >> 26;
60145 this.words[i + shift] = w & 0x3ffffff;
60146 }
60147
60148 if (carry === 0) return this.strip();
60149
60150 // Subtraction overflow
60151 assert(carry === -1);
60152 carry = 0;
60153 for (i = 0; i < this.length; i++) {
60154 w = -(this.words[i] | 0) + carry;
60155 carry = w >> 26;
60156 this.words[i] = w & 0x3ffffff;
60157 }
60158 this.negative = 1;
60159
60160 return this.strip();
60161 };
60162
60163 BN.prototype._wordDiv = function _wordDiv (num, mode) {
60164 var shift = this.length - num.length;
60165
60166 var a = this.clone();
60167 var b = num;
60168
60169 // Normalize
60170 var bhi = b.words[b.length - 1] | 0;
60171 var bhiBits = this._countBits(bhi);
60172 shift = 26 - bhiBits;
60173 if (shift !== 0) {
60174 b = b.ushln(shift);
60175 a.iushln(shift);
60176 bhi = b.words[b.length - 1] | 0;
60177 }
60178
60179 // Initialize quotient
60180 var m = a.length - b.length;
60181 var q;
60182
60183 if (mode !== 'mod') {
60184 q = new BN(null);
60185 q.length = m + 1;
60186 q.words = new Array(q.length);
60187 for (var i = 0; i < q.length; i++) {
60188 q.words[i] = 0;
60189 }
60190 }
60191
60192 var diff = a.clone()._ishlnsubmul(b, 1, m);
60193 if (diff.negative === 0) {
60194 a = diff;
60195 if (q) {
60196 q.words[m] = 1;
60197 }
60198 }
60199
60200 for (var j = m - 1; j >= 0; j--) {
60201 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
60202 (a.words[b.length + j - 1] | 0);
60203
60204 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
60205 // (0x7ffffff)
60206 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
60207
60208 a._ishlnsubmul(b, qj, j);
60209 while (a.negative !== 0) {
60210 qj--;
60211 a.negative = 0;
60212 a._ishlnsubmul(b, 1, j);
60213 if (!a.isZero()) {
60214 a.negative ^= 1;
60215 }
60216 }
60217 if (q) {
60218 q.words[j] = qj;
60219 }
60220 }
60221 if (q) {
60222 q.strip();
60223 }
60224 a.strip();
60225
60226 // Denormalize
60227 if (mode !== 'div' && shift !== 0) {
60228 a.iushrn(shift);
60229 }
60230
60231 return {
60232 div: q || null,
60233 mod: a
60234 };
60235 };
60236
60237 // NOTE: 1) `mode` can be set to `mod` to request mod only,
60238 // to `div` to request div only, or be absent to
60239 // request both div & mod
60240 // 2) `positive` is true if unsigned mod is requested
60241 BN.prototype.divmod = function divmod (num, mode, positive) {
60242 assert(!num.isZero());
60243
60244 if (this.isZero()) {
60245 return {
60246 div: new BN(0),
60247 mod: new BN(0)
60248 };
60249 }
60250
60251 var div, mod, res;
60252 if (this.negative !== 0 && num.negative === 0) {
60253 res = this.neg().divmod(num, mode);
60254
60255 if (mode !== 'mod') {
60256 div = res.div.neg();
60257 }
60258
60259 if (mode !== 'div') {
60260 mod = res.mod.neg();
60261 if (positive && mod.negative !== 0) {
60262 mod.iadd(num);
60263 }
60264 }
60265
60266 return {
60267 div: div,
60268 mod: mod
60269 };
60270 }
60271
60272 if (this.negative === 0 && num.negative !== 0) {
60273 res = this.divmod(num.neg(), mode);
60274
60275 if (mode !== 'mod') {
60276 div = res.div.neg();
60277 }
60278
60279 return {
60280 div: div,
60281 mod: res.mod
60282 };
60283 }
60284
60285 if ((this.negative & num.negative) !== 0) {
60286 res = this.neg().divmod(num.neg(), mode);
60287
60288 if (mode !== 'div') {
60289 mod = res.mod.neg();
60290 if (positive && mod.negative !== 0) {
60291 mod.isub(num);
60292 }
60293 }
60294
60295 return {
60296 div: res.div,
60297 mod: mod
60298 };
60299 }
60300
60301 // Both numbers are positive at this point
60302
60303 // Strip both numbers to approximate shift value
60304 if (num.length > this.length || this.cmp(num) < 0) {
60305 return {
60306 div: new BN(0),
60307 mod: this
60308 };
60309 }
60310
60311 // Very short reduction
60312 if (num.length === 1) {
60313 if (mode === 'div') {
60314 return {
60315 div: this.divn(num.words[0]),
60316 mod: null
60317 };
60318 }
60319
60320 if (mode === 'mod') {
60321 return {
60322 div: null,
60323 mod: new BN(this.modn(num.words[0]))
60324 };
60325 }
60326
60327 return {
60328 div: this.divn(num.words[0]),
60329 mod: new BN(this.modn(num.words[0]))
60330 };
60331 }
60332
60333 return this._wordDiv(num, mode);
60334 };
60335
60336 // Find `this` / `num`
60337 BN.prototype.div = function div (num) {
60338 return this.divmod(num, 'div', false).div;
60339 };
60340
60341 // Find `this` % `num`
60342 BN.prototype.mod = function mod (num) {
60343 return this.divmod(num, 'mod', false).mod;
60344 };
60345
60346 BN.prototype.umod = function umod (num) {
60347 return this.divmod(num, 'mod', true).mod;
60348 };
60349
60350 // Find Round(`this` / `num`)
60351 BN.prototype.divRound = function divRound (num) {
60352 var dm = this.divmod(num);
60353
60354 // Fast case - exact division
60355 if (dm.mod.isZero()) return dm.div;
60356
60357 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
60358
60359 var half = num.ushrn(1);
60360 var r2 = num.andln(1);
60361 var cmp = mod.cmp(half);
60362
60363 // Round down
60364 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
60365
60366 // Round up
60367 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
60368 };
60369
60370 BN.prototype.modn = function modn (num) {
60371 assert(num <= 0x3ffffff);
60372 var p = (1 << 26) % num;
60373
60374 var acc = 0;
60375 for (var i = this.length - 1; i >= 0; i--) {
60376 acc = (p * acc + (this.words[i] | 0)) % num;
60377 }
60378
60379 return acc;
60380 };
60381
60382 // In-place division by number
60383 BN.prototype.idivn = function idivn (num) {
60384 assert(num <= 0x3ffffff);
60385
60386 var carry = 0;
60387 for (var i = this.length - 1; i >= 0; i--) {
60388 var w = (this.words[i] | 0) + carry * 0x4000000;
60389 this.words[i] = (w / num) | 0;
60390 carry = w % num;
60391 }
60392
60393 return this.strip();
60394 };
60395
60396 BN.prototype.divn = function divn (num) {
60397 return this.clone().idivn(num);
60398 };
60399
60400 BN.prototype.egcd = function egcd (p) {
60401 assert(p.negative === 0);
60402 assert(!p.isZero());
60403
60404 var x = this;
60405 var y = p.clone();
60406
60407 if (x.negative !== 0) {
60408 x = x.umod(p);
60409 } else {
60410 x = x.clone();
60411 }
60412
60413 // A * x + B * y = x
60414 var A = new BN(1);
60415 var B = new BN(0);
60416
60417 // C * x + D * y = y
60418 var C = new BN(0);
60419 var D = new BN(1);
60420
60421 var g = 0;
60422
60423 while (x.isEven() && y.isEven()) {
60424 x.iushrn(1);
60425 y.iushrn(1);
60426 ++g;
60427 }
60428
60429 var yp = y.clone();
60430 var xp = x.clone();
60431
60432 while (!x.isZero()) {
60433 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
60434 if (i > 0) {
60435 x.iushrn(i);
60436 while (i-- > 0) {
60437 if (A.isOdd() || B.isOdd()) {
60438 A.iadd(yp);
60439 B.isub(xp);
60440 }
60441
60442 A.iushrn(1);
60443 B.iushrn(1);
60444 }
60445 }
60446
60447 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
60448 if (j > 0) {
60449 y.iushrn(j);
60450 while (j-- > 0) {
60451 if (C.isOdd() || D.isOdd()) {
60452 C.iadd(yp);
60453 D.isub(xp);
60454 }
60455
60456 C.iushrn(1);
60457 D.iushrn(1);
60458 }
60459 }
60460
60461 if (x.cmp(y) >= 0) {
60462 x.isub(y);
60463 A.isub(C);
60464 B.isub(D);
60465 } else {
60466 y.isub(x);
60467 C.isub(A);
60468 D.isub(B);
60469 }
60470 }
60471
60472 return {
60473 a: C,
60474 b: D,
60475 gcd: y.iushln(g)
60476 };
60477 };
60478
60479 // This is reduced incarnation of the binary EEA
60480 // above, designated to invert members of the
60481 // _prime_ fields F(p) at a maximal speed
60482 BN.prototype._invmp = function _invmp (p) {
60483 assert(p.negative === 0);
60484 assert(!p.isZero());
60485
60486 var a = this;
60487 var b = p.clone();
60488
60489 if (a.negative !== 0) {
60490 a = a.umod(p);
60491 } else {
60492 a = a.clone();
60493 }
60494
60495 var x1 = new BN(1);
60496 var x2 = new BN(0);
60497
60498 var delta = b.clone();
60499
60500 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
60501 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
60502 if (i > 0) {
60503 a.iushrn(i);
60504 while (i-- > 0) {
60505 if (x1.isOdd()) {
60506 x1.iadd(delta);
60507 }
60508
60509 x1.iushrn(1);
60510 }
60511 }
60512
60513 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
60514 if (j > 0) {
60515 b.iushrn(j);
60516 while (j-- > 0) {
60517 if (x2.isOdd()) {
60518 x2.iadd(delta);
60519 }
60520
60521 x2.iushrn(1);
60522 }
60523 }
60524
60525 if (a.cmp(b) >= 0) {
60526 a.isub(b);
60527 x1.isub(x2);
60528 } else {
60529 b.isub(a);
60530 x2.isub(x1);
60531 }
60532 }
60533
60534 var res;
60535 if (a.cmpn(1) === 0) {
60536 res = x1;
60537 } else {
60538 res = x2;
60539 }
60540
60541 if (res.cmpn(0) < 0) {
60542 res.iadd(p);
60543 }
60544
60545 return res;
60546 };
60547
60548 BN.prototype.gcd = function gcd (num) {
60549 if (this.isZero()) return num.abs();
60550 if (num.isZero()) return this.abs();
60551
60552 var a = this.clone();
60553 var b = num.clone();
60554 a.negative = 0;
60555 b.negative = 0;
60556
60557 // Remove common factor of two
60558 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
60559 a.iushrn(1);
60560 b.iushrn(1);
60561 }
60562
60563 do {
60564 while (a.isEven()) {
60565 a.iushrn(1);
60566 }
60567 while (b.isEven()) {
60568 b.iushrn(1);
60569 }
60570
60571 var r = a.cmp(b);
60572 if (r < 0) {
60573 // Swap `a` and `b` to make `a` always bigger than `b`
60574 var t = a;
60575 a = b;
60576 b = t;
60577 } else if (r === 0 || b.cmpn(1) === 0) {
60578 break;
60579 }
60580
60581 a.isub(b);
60582 } while (true);
60583
60584 return b.iushln(shift);
60585 };
60586
60587 // Invert number in the field F(num)
60588 BN.prototype.invm = function invm (num) {
60589 return this.egcd(num).a.umod(num);
60590 };
60591
60592 BN.prototype.isEven = function isEven () {
60593 return (this.words[0] & 1) === 0;
60594 };
60595
60596 BN.prototype.isOdd = function isOdd () {
60597 return (this.words[0] & 1) === 1;
60598 };
60599
60600 // And first word and num
60601 BN.prototype.andln = function andln (num) {
60602 return this.words[0] & num;
60603 };
60604
60605 // Increment at the bit position in-line
60606 BN.prototype.bincn = function bincn (bit) {
60607 assert(typeof bit === 'number');
60608 var r = bit % 26;
60609 var s = (bit - r) / 26;
60610 var q = 1 << r;
60611
60612 // Fast case: bit is much higher than all existing words
60613 if (this.length <= s) {
60614 this._expand(s + 1);
60615 this.words[s] |= q;
60616 return this;
60617 }
60618
60619 // Add bit and propagate, if needed
60620 var carry = q;
60621 for (var i = s; carry !== 0 && i < this.length; i++) {
60622 var w = this.words[i] | 0;
60623 w += carry;
60624 carry = w >>> 26;
60625 w &= 0x3ffffff;
60626 this.words[i] = w;
60627 }
60628 if (carry !== 0) {
60629 this.words[i] = carry;
60630 this.length++;
60631 }
60632 return this;
60633 };
60634
60635 BN.prototype.isZero = function isZero () {
60636 return this.length === 1 && this.words[0] === 0;
60637 };
60638
60639 BN.prototype.cmpn = function cmpn (num) {
60640 var negative = num < 0;
60641
60642 if (this.negative !== 0 && !negative) return -1;
60643 if (this.negative === 0 && negative) return 1;
60644
60645 this.strip();
60646
60647 var res;
60648 if (this.length > 1) {
60649 res = 1;
60650 } else {
60651 if (negative) {
60652 num = -num;
60653 }
60654
60655 assert(num <= 0x3ffffff, 'Number is too big');
60656
60657 var w = this.words[0] | 0;
60658 res = w === num ? 0 : w < num ? -1 : 1;
60659 }
60660 if (this.negative !== 0) return -res | 0;
60661 return res;
60662 };
60663
60664 // Compare two numbers and return:
60665 // 1 - if `this` > `num`
60666 // 0 - if `this` == `num`
60667 // -1 - if `this` < `num`
60668 BN.prototype.cmp = function cmp (num) {
60669 if (this.negative !== 0 && num.negative === 0) return -1;
60670 if (this.negative === 0 && num.negative !== 0) return 1;
60671
60672 var res = this.ucmp(num);
60673 if (this.negative !== 0) return -res | 0;
60674 return res;
60675 };
60676
60677 // Unsigned comparison
60678 BN.prototype.ucmp = function ucmp (num) {
60679 // At this point both numbers have the same sign
60680 if (this.length > num.length) return 1;
60681 if (this.length < num.length) return -1;
60682
60683 var res = 0;
60684 for (var i = this.length - 1; i >= 0; i--) {
60685 var a = this.words[i] | 0;
60686 var b = num.words[i] | 0;
60687
60688 if (a === b) continue;
60689 if (a < b) {
60690 res = -1;
60691 } else if (a > b) {
60692 res = 1;
60693 }
60694 break;
60695 }
60696 return res;
60697 };
60698
60699 BN.prototype.gtn = function gtn (num) {
60700 return this.cmpn(num) === 1;
60701 };
60702
60703 BN.prototype.gt = function gt (num) {
60704 return this.cmp(num) === 1;
60705 };
60706
60707 BN.prototype.gten = function gten (num) {
60708 return this.cmpn(num) >= 0;
60709 };
60710
60711 BN.prototype.gte = function gte (num) {
60712 return this.cmp(num) >= 0;
60713 };
60714
60715 BN.prototype.ltn = function ltn (num) {
60716 return this.cmpn(num) === -1;
60717 };
60718
60719 BN.prototype.lt = function lt (num) {
60720 return this.cmp(num) === -1;
60721 };
60722
60723 BN.prototype.lten = function lten (num) {
60724 return this.cmpn(num) <= 0;
60725 };
60726
60727 BN.prototype.lte = function lte (num) {
60728 return this.cmp(num) <= 0;
60729 };
60730
60731 BN.prototype.eqn = function eqn (num) {
60732 return this.cmpn(num) === 0;
60733 };
60734
60735 BN.prototype.eq = function eq (num) {
60736 return this.cmp(num) === 0;
60737 };
60738
60739 //
60740 // A reduce context, could be using montgomery or something better, depending
60741 // on the `m` itself.
60742 //
60743 BN.red = function red (num) {
60744 return new Red(num);
60745 };
60746
60747 BN.prototype.toRed = function toRed (ctx) {
60748 assert(!this.red, 'Already a number in reduction context');
60749 assert(this.negative === 0, 'red works only with positives');
60750 return ctx.convertTo(this)._forceRed(ctx);
60751 };
60752
60753 BN.prototype.fromRed = function fromRed () {
60754 assert(this.red, 'fromRed works only with numbers in reduction context');
60755 return this.red.convertFrom(this);
60756 };
60757
60758 BN.prototype._forceRed = function _forceRed (ctx) {
60759 this.red = ctx;
60760 return this;
60761 };
60762
60763 BN.prototype.forceRed = function forceRed (ctx) {
60764 assert(!this.red, 'Already a number in reduction context');
60765 return this._forceRed(ctx);
60766 };
60767
60768 BN.prototype.redAdd = function redAdd (num) {
60769 assert(this.red, 'redAdd works only with red numbers');
60770 return this.red.add(this, num);
60771 };
60772
60773 BN.prototype.redIAdd = function redIAdd (num) {
60774 assert(this.red, 'redIAdd works only with red numbers');
60775 return this.red.iadd(this, num);
60776 };
60777
60778 BN.prototype.redSub = function redSub (num) {
60779 assert(this.red, 'redSub works only with red numbers');
60780 return this.red.sub(this, num);
60781 };
60782
60783 BN.prototype.redISub = function redISub (num) {
60784 assert(this.red, 'redISub works only with red numbers');
60785 return this.red.isub(this, num);
60786 };
60787
60788 BN.prototype.redShl = function redShl (num) {
60789 assert(this.red, 'redShl works only with red numbers');
60790 return this.red.shl(this, num);
60791 };
60792
60793 BN.prototype.redMul = function redMul (num) {
60794 assert(this.red, 'redMul works only with red numbers');
60795 this.red._verify2(this, num);
60796 return this.red.mul(this, num);
60797 };
60798
60799 BN.prototype.redIMul = function redIMul (num) {
60800 assert(this.red, 'redMul works only with red numbers');
60801 this.red._verify2(this, num);
60802 return this.red.imul(this, num);
60803 };
60804
60805 BN.prototype.redSqr = function redSqr () {
60806 assert(this.red, 'redSqr works only with red numbers');
60807 this.red._verify1(this);
60808 return this.red.sqr(this);
60809 };
60810
60811 BN.prototype.redISqr = function redISqr () {
60812 assert(this.red, 'redISqr works only with red numbers');
60813 this.red._verify1(this);
60814 return this.red.isqr(this);
60815 };
60816
60817 // Square root over p
60818 BN.prototype.redSqrt = function redSqrt () {
60819 assert(this.red, 'redSqrt works only with red numbers');
60820 this.red._verify1(this);
60821 return this.red.sqrt(this);
60822 };
60823
60824 BN.prototype.redInvm = function redInvm () {
60825 assert(this.red, 'redInvm works only with red numbers');
60826 this.red._verify1(this);
60827 return this.red.invm(this);
60828 };
60829
60830 // Return negative clone of `this` % `red modulo`
60831 BN.prototype.redNeg = function redNeg () {
60832 assert(this.red, 'redNeg works only with red numbers');
60833 this.red._verify1(this);
60834 return this.red.neg(this);
60835 };
60836
60837 BN.prototype.redPow = function redPow (num) {
60838 assert(this.red && !num.red, 'redPow(normalNum)');
60839 this.red._verify1(this);
60840 return this.red.pow(this, num);
60841 };
60842
60843 // Prime numbers with efficient reduction
60844 var primes = {
60845 k256: null,
60846 p224: null,
60847 p192: null,
60848 p25519: null
60849 };
60850
60851 // Pseudo-Mersenne prime
60852 function MPrime (name, p) {
60853 // P = 2 ^ N - K
60854 this.name = name;
60855 this.p = new BN(p, 16);
60856 this.n = this.p.bitLength();
60857 this.k = new BN(1).iushln(this.n).isub(this.p);
60858
60859 this.tmp = this._tmp();
60860 }
60861
60862 MPrime.prototype._tmp = function _tmp () {
60863 var tmp = new BN(null);
60864 tmp.words = new Array(Math.ceil(this.n / 13));
60865 return tmp;
60866 };
60867
60868 MPrime.prototype.ireduce = function ireduce (num) {
60869 // Assumes that `num` is less than `P^2`
60870 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
60871 var r = num;
60872 var rlen;
60873
60874 do {
60875 this.split(r, this.tmp);
60876 r = this.imulK(r);
60877 r = r.iadd(this.tmp);
60878 rlen = r.bitLength();
60879 } while (rlen > this.n);
60880
60881 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
60882 if (cmp === 0) {
60883 r.words[0] = 0;
60884 r.length = 1;
60885 } else if (cmp > 0) {
60886 r.isub(this.p);
60887 } else {
60888 r.strip();
60889 }
60890
60891 return r;
60892 };
60893
60894 MPrime.prototype.split = function split (input, out) {
60895 input.iushrn(this.n, 0, out);
60896 };
60897
60898 MPrime.prototype.imulK = function imulK (num) {
60899 return num.imul(this.k);
60900 };
60901
60902 function K256 () {
60903 MPrime.call(
60904 this,
60905 'k256',
60906 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
60907 }
60908 inherits(K256, MPrime);
60909
60910 K256.prototype.split = function split (input, output) {
60911 // 256 = 9 * 26 + 22
60912 var mask = 0x3fffff;
60913
60914 var outLen = Math.min(input.length, 9);
60915 for (var i = 0; i < outLen; i++) {
60916 output.words[i] = input.words[i];
60917 }
60918 output.length = outLen;
60919
60920 if (input.length <= 9) {
60921 input.words[0] = 0;
60922 input.length = 1;
60923 return;
60924 }
60925
60926 // Shift by 9 limbs
60927 var prev = input.words[9];
60928 output.words[output.length++] = prev & mask;
60929
60930 for (i = 10; i < input.length; i++) {
60931 var next = input.words[i] | 0;
60932 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
60933 prev = next;
60934 }
60935 prev >>>= 22;
60936 input.words[i - 10] = prev;
60937 if (prev === 0 && input.length > 10) {
60938 input.length -= 10;
60939 } else {
60940 input.length -= 9;
60941 }
60942 };
60943
60944 K256.prototype.imulK = function imulK (num) {
60945 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
60946 num.words[num.length] = 0;
60947 num.words[num.length + 1] = 0;
60948 num.length += 2;
60949
60950 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
60951 var lo = 0;
60952 for (var i = 0; i < num.length; i++) {
60953 var w = num.words[i] | 0;
60954 lo += w * 0x3d1;
60955 num.words[i] = lo & 0x3ffffff;
60956 lo = w * 0x40 + ((lo / 0x4000000) | 0);
60957 }
60958
60959 // Fast length reduction
60960 if (num.words[num.length - 1] === 0) {
60961 num.length--;
60962 if (num.words[num.length - 1] === 0) {
60963 num.length--;
60964 }
60965 }
60966 return num;
60967 };
60968
60969 function P224 () {
60970 MPrime.call(
60971 this,
60972 'p224',
60973 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
60974 }
60975 inherits(P224, MPrime);
60976
60977 function P192 () {
60978 MPrime.call(
60979 this,
60980 'p192',
60981 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
60982 }
60983 inherits(P192, MPrime);
60984
60985 function P25519 () {
60986 // 2 ^ 255 - 19
60987 MPrime.call(
60988 this,
60989 '25519',
60990 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
60991 }
60992 inherits(P25519, MPrime);
60993
60994 P25519.prototype.imulK = function imulK (num) {
60995 // K = 0x13
60996 var carry = 0;
60997 for (var i = 0; i < num.length; i++) {
60998 var hi = (num.words[i] | 0) * 0x13 + carry;
60999 var lo = hi & 0x3ffffff;
61000 hi >>>= 26;
61001
61002 num.words[i] = lo;
61003 carry = hi;
61004 }
61005 if (carry !== 0) {
61006 num.words[num.length++] = carry;
61007 }
61008 return num;
61009 };
61010
61011 // Exported mostly for testing purposes, use plain name instead
61012 BN._prime = function prime (name) {
61013 // Cached version of prime
61014 if (primes[name]) return primes[name];
61015
61016 var prime;
61017 if (name === 'k256') {
61018 prime = new K256();
61019 } else if (name === 'p224') {
61020 prime = new P224();
61021 } else if (name === 'p192') {
61022 prime = new P192();
61023 } else if (name === 'p25519') {
61024 prime = new P25519();
61025 } else {
61026 throw new Error('Unknown prime ' + name);
61027 }
61028 primes[name] = prime;
61029
61030 return prime;
61031 };
61032
61033 //
61034 // Base reduction engine
61035 //
61036 function Red (m) {
61037 if (typeof m === 'string') {
61038 var prime = BN._prime(m);
61039 this.m = prime.p;
61040 this.prime = prime;
61041 } else {
61042 assert(m.gtn(1), 'modulus must be greater than 1');
61043 this.m = m;
61044 this.prime = null;
61045 }
61046 }
61047
61048 Red.prototype._verify1 = function _verify1 (a) {
61049 assert(a.negative === 0, 'red works only with positives');
61050 assert(a.red, 'red works only with red numbers');
61051 };
61052
61053 Red.prototype._verify2 = function _verify2 (a, b) {
61054 assert((a.negative | b.negative) === 0, 'red works only with positives');
61055 assert(a.red && a.red === b.red,
61056 'red works only with red numbers');
61057 };
61058
61059 Red.prototype.imod = function imod (a) {
61060 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
61061 return a.umod(this.m)._forceRed(this);
61062 };
61063
61064 Red.prototype.neg = function neg (a) {
61065 if (a.isZero()) {
61066 return a.clone();
61067 }
61068
61069 return this.m.sub(a)._forceRed(this);
61070 };
61071
61072 Red.prototype.add = function add (a, b) {
61073 this._verify2(a, b);
61074
61075 var res = a.add(b);
61076 if (res.cmp(this.m) >= 0) {
61077 res.isub(this.m);
61078 }
61079 return res._forceRed(this);
61080 };
61081
61082 Red.prototype.iadd = function iadd (a, b) {
61083 this._verify2(a, b);
61084
61085 var res = a.iadd(b);
61086 if (res.cmp(this.m) >= 0) {
61087 res.isub(this.m);
61088 }
61089 return res;
61090 };
61091
61092 Red.prototype.sub = function sub (a, b) {
61093 this._verify2(a, b);
61094
61095 var res = a.sub(b);
61096 if (res.cmpn(0) < 0) {
61097 res.iadd(this.m);
61098 }
61099 return res._forceRed(this);
61100 };
61101
61102 Red.prototype.isub = function isub (a, b) {
61103 this._verify2(a, b);
61104
61105 var res = a.isub(b);
61106 if (res.cmpn(0) < 0) {
61107 res.iadd(this.m);
61108 }
61109 return res;
61110 };
61111
61112 Red.prototype.shl = function shl (a, num) {
61113 this._verify1(a);
61114 return this.imod(a.ushln(num));
61115 };
61116
61117 Red.prototype.imul = function imul (a, b) {
61118 this._verify2(a, b);
61119 return this.imod(a.imul(b));
61120 };
61121
61122 Red.prototype.mul = function mul (a, b) {
61123 this._verify2(a, b);
61124 return this.imod(a.mul(b));
61125 };
61126
61127 Red.prototype.isqr = function isqr (a) {
61128 return this.imul(a, a.clone());
61129 };
61130
61131 Red.prototype.sqr = function sqr (a) {
61132 return this.mul(a, a);
61133 };
61134
61135 Red.prototype.sqrt = function sqrt (a) {
61136 if (a.isZero()) return a.clone();
61137
61138 var mod3 = this.m.andln(3);
61139 assert(mod3 % 2 === 1);
61140
61141 // Fast case
61142 if (mod3 === 3) {
61143 var pow = this.m.add(new BN(1)).iushrn(2);
61144 return this.pow(a, pow);
61145 }
61146
61147 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
61148 //
61149 // Find Q and S, that Q * 2 ^ S = (P - 1)
61150 var q = this.m.subn(1);
61151 var s = 0;
61152 while (!q.isZero() && q.andln(1) === 0) {
61153 s++;
61154 q.iushrn(1);
61155 }
61156 assert(!q.isZero());
61157
61158 var one = new BN(1).toRed(this);
61159 var nOne = one.redNeg();
61160
61161 // Find quadratic non-residue
61162 // NOTE: Max is such because of generalized Riemann hypothesis.
61163 var lpow = this.m.subn(1).iushrn(1);
61164 var z = this.m.bitLength();
61165 z = new BN(2 * z * z).toRed(this);
61166
61167 while (this.pow(z, lpow).cmp(nOne) !== 0) {
61168 z.redIAdd(nOne);
61169 }
61170
61171 var c = this.pow(z, q);
61172 var r = this.pow(a, q.addn(1).iushrn(1));
61173 var t = this.pow(a, q);
61174 var m = s;
61175 while (t.cmp(one) !== 0) {
61176 var tmp = t;
61177 for (var i = 0; tmp.cmp(one) !== 0; i++) {
61178 tmp = tmp.redSqr();
61179 }
61180 assert(i < m);
61181 var b = this.pow(c, new BN(1).iushln(m - i - 1));
61182
61183 r = r.redMul(b);
61184 c = b.redSqr();
61185 t = t.redMul(c);
61186 m = i;
61187 }
61188
61189 return r;
61190 };
61191
61192 Red.prototype.invm = function invm (a) {
61193 var inv = a._invmp(this.m);
61194 if (inv.negative !== 0) {
61195 inv.negative = 0;
61196 return this.imod(inv).redNeg();
61197 } else {
61198 return this.imod(inv);
61199 }
61200 };
61201
61202 Red.prototype.pow = function pow (a, num) {
61203 if (num.isZero()) return new BN(1);
61204 if (num.cmpn(1) === 0) return a.clone();
61205
61206 var windowSize = 4;
61207 var wnd = new Array(1 << windowSize);
61208 wnd[0] = new BN(1).toRed(this);
61209 wnd[1] = a;
61210 for (var i = 2; i < wnd.length; i++) {
61211 wnd[i] = this.mul(wnd[i - 1], a);
61212 }
61213
61214 var res = wnd[0];
61215 var current = 0;
61216 var currentLen = 0;
61217 var start = num.bitLength() % 26;
61218 if (start === 0) {
61219 start = 26;
61220 }
61221
61222 for (i = num.length - 1; i >= 0; i--) {
61223 var word = num.words[i];
61224 for (var j = start - 1; j >= 0; j--) {
61225 var bit = (word >> j) & 1;
61226 if (res !== wnd[0]) {
61227 res = this.sqr(res);
61228 }
61229
61230 if (bit === 0 && current === 0) {
61231 currentLen = 0;
61232 continue;
61233 }
61234
61235 current <<= 1;
61236 current |= bit;
61237 currentLen++;
61238 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
61239
61240 res = this.mul(res, wnd[current]);
61241 currentLen = 0;
61242 current = 0;
61243 }
61244 start = 26;
61245 }
61246
61247 return res;
61248 };
61249
61250 Red.prototype.convertTo = function convertTo (num) {
61251 var r = num.umod(this.m);
61252
61253 return r === num ? r.clone() : r;
61254 };
61255
61256 Red.prototype.convertFrom = function convertFrom (num) {
61257 var res = num.clone();
61258 res.red = null;
61259 return res;
61260 };
61261
61262 //
61263 // Montgomery method engine
61264 //
61265
61266 BN.mont = function mont (num) {
61267 return new Mont(num);
61268 };
61269
61270 function Mont (m) {
61271 Red.call(this, m);
61272
61273 this.shift = this.m.bitLength();
61274 if (this.shift % 26 !== 0) {
61275 this.shift += 26 - (this.shift % 26);
61276 }
61277
61278 this.r = new BN(1).iushln(this.shift);
61279 this.r2 = this.imod(this.r.sqr());
61280 this.rinv = this.r._invmp(this.m);
61281
61282 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
61283 this.minv = this.minv.umod(this.r);
61284 this.minv = this.r.sub(this.minv);
61285 }
61286 inherits(Mont, Red);
61287
61288 Mont.prototype.convertTo = function convertTo (num) {
61289 return this.imod(num.ushln(this.shift));
61290 };
61291
61292 Mont.prototype.convertFrom = function convertFrom (num) {
61293 var r = this.imod(num.mul(this.rinv));
61294 r.red = null;
61295 return r;
61296 };
61297
61298 Mont.prototype.imul = function imul (a, b) {
61299 if (a.isZero() || b.isZero()) {
61300 a.words[0] = 0;
61301 a.length = 1;
61302 return a;
61303 }
61304
61305 var t = a.imul(b);
61306 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
61307 var u = t.isub(c).iushrn(this.shift);
61308 var res = u;
61309
61310 if (u.cmp(this.m) >= 0) {
61311 res = u.isub(this.m);
61312 } else if (u.cmpn(0) < 0) {
61313 res = u.iadd(this.m);
61314 }
61315
61316 return res._forceRed(this);
61317 };
61318
61319 Mont.prototype.mul = function mul (a, b) {
61320 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
61321
61322 var t = a.mul(b);
61323 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
61324 var u = t.isub(c).iushrn(this.shift);
61325 var res = u;
61326 if (u.cmp(this.m) >= 0) {
61327 res = u.isub(this.m);
61328 } else if (u.cmpn(0) < 0) {
61329 res = u.iadd(this.m);
61330 }
61331
61332 return res._forceRed(this);
61333 };
61334
61335 Mont.prototype.invm = function invm (a) {
61336 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
61337 var res = this.imod(a._invmp(this.m).mul(this.r2));
61338 return res._forceRed(this);
61339 };
61340 })(typeof module === 'undefined' || module, this);
61341
61342 },{}],34:[function(require,module,exports){
61343 var r;
61344
61345 module.exports = function rand(len) {
61346 if (!r)
61347 r = new Rand(null);
61348
61349 return r.generate(len);
61350 };
61351
61352 function Rand(rand) {
61353 this.rand = rand;
61354 }
61355 module.exports.Rand = Rand;
61356
61357 Rand.prototype.generate = function generate(len) {
61358 return this._rand(len);
61359 };
61360
61361 if (typeof self === 'object') {
61362 if (self.crypto && self.crypto.getRandomValues) {
61363 // Modern browsers
61364 Rand.prototype._rand = function _rand(n) {
61365 var arr = new Uint8Array(n);
61366 self.crypto.getRandomValues(arr);
61367 return arr;
61368 };
61369 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
61370 // IE
61371 Rand.prototype._rand = function _rand(n) {
61372 var arr = new Uint8Array(n);
61373 self.msCrypto.getRandomValues(arr);
61374 return arr;
61375 };
61376 } else {
61377 // Old junk
61378 Rand.prototype._rand = function() {
61379 throw new Error('Not implemented yet');
61380 };
61381 }
61382 } else {
61383 // Node.js or Web worker with no crypto support
61384 try {
61385 var crypto = require('crypto');
61386
61387 Rand.prototype._rand = function _rand(n) {
61388 return crypto.randomBytes(n);
61389 };
61390 } catch (e) {
61391 // Emulate crypto API using randy
61392 Rand.prototype._rand = function _rand(n) {
61393 var res = new Uint8Array(n);
61394 for (var i = 0; i < res.length; i++)
61395 res[i] = this.rand.getByte();
61396 return res;
61397 };
61398 }
61399 }
61400
61401 },{"crypto":3}],35:[function(require,module,exports){
61402 (function (Buffer){
61403 var Transform = require('stream').Transform
61404 var inherits = require('inherits')
61405 var StringDecoder = require('string_decoder').StringDecoder
61406 module.exports = CipherBase
61407 inherits(CipherBase, Transform)
61408 function CipherBase (hashMode) {
61409 Transform.call(this)
61410 this.hashMode = typeof hashMode === 'string'
61411 if (this.hashMode) {
61412 this[hashMode] = this._finalOrDigest
61413 } else {
61414 this.final = this._finalOrDigest
61415 }
61416 this._decoder = null
61417 this._encoding = null
61418 }
61419 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
61420 if (typeof data === 'string') {
61421 data = new Buffer(data, inputEnc)
61422 }
61423 var outData = this._update(data)
61424 if (this.hashMode) {
61425 return this
61426 }
61427 if (outputEnc) {
61428 outData = this._toString(outData, outputEnc)
61429 }
61430 return outData
61431 }
61432
61433 CipherBase.prototype.setAutoPadding = function () {}
61434
61435 CipherBase.prototype.getAuthTag = function () {
61436 throw new Error('trying to get auth tag in unsupported state')
61437 }
61438
61439 CipherBase.prototype.setAuthTag = function () {
61440 throw new Error('trying to set auth tag in unsupported state')
61441 }
61442
61443 CipherBase.prototype.setAAD = function () {
61444 throw new Error('trying to set aad in unsupported state')
61445 }
61446
61447 CipherBase.prototype._transform = function (data, _, next) {
61448 var err
61449 try {
61450 if (this.hashMode) {
61451 this._update(data)
61452 } else {
61453 this.push(this._update(data))
61454 }
61455 } catch (e) {
61456 err = e
61457 } finally {
61458 next(err)
61459 }
61460 }
61461 CipherBase.prototype._flush = function (done) {
61462 var err
61463 try {
61464 this.push(this._final())
61465 } catch (e) {
61466 err = e
61467 } finally {
61468 done(err)
61469 }
61470 }
61471 CipherBase.prototype._finalOrDigest = function (outputEnc) {
61472 var outData = this._final() || new Buffer('')
61473 if (outputEnc) {
61474 outData = this._toString(outData, outputEnc, true)
61475 }
61476 return outData
61477 }
61478
61479 CipherBase.prototype._toString = function (value, enc, fin) {
61480 if (!this._decoder) {
61481 this._decoder = new StringDecoder(enc)
61482 this._encoding = enc
61483 }
61484 if (this._encoding !== enc) {
61485 throw new Error('can\'t switch encodings')
61486 }
61487 var out = this._decoder.write(value)
61488 if (fin) {
61489 out += this._decoder.end()
61490 }
61491 return out
61492 }
61493
61494 }).call(this,require("buffer").Buffer)
61495 },{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
61496 (function (Buffer){
61497 'use strict';
61498 var inherits = require('inherits')
61499 var md5 = require('./md5')
61500 var rmd160 = require('ripemd160')
61501 var sha = require('sha.js')
61502
61503 var Base = require('cipher-base')
61504
61505 function HashNoConstructor(hash) {
61506 Base.call(this, 'digest')
61507
61508 this._hash = hash
61509 this.buffers = []
61510 }
61511
61512 inherits(HashNoConstructor, Base)
61513
61514 HashNoConstructor.prototype._update = function (data) {
61515 this.buffers.push(data)
61516 }
61517
61518 HashNoConstructor.prototype._final = function () {
61519 var buf = Buffer.concat(this.buffers)
61520 var r = this._hash(buf)
61521 this.buffers = null
61522
61523 return r
61524 }
61525
61526 function Hash(hash) {
61527 Base.call(this, 'digest')
61528
61529 this._hash = hash
61530 }
61531
61532 inherits(Hash, Base)
61533
61534 Hash.prototype._update = function (data) {
61535 this._hash.update(data)
61536 }
61537
61538 Hash.prototype._final = function () {
61539 return this._hash.digest()
61540 }
61541
61542 module.exports = function createHash (alg) {
61543 alg = alg.toLowerCase()
61544 if ('md5' === alg) return new HashNoConstructor(md5)
61545 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
61546
61547 return new Hash(sha(alg))
61548 }
61549
61550 }).call(this,require("buffer").Buffer)
61551 },{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
61552 (function (Buffer){
61553 'use strict';
61554 var intSize = 4;
61555 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
61556 var chrsz = 8;
61557
61558 function toArray(buf, bigEndian) {
61559 if ((buf.length % intSize) !== 0) {
61560 var len = buf.length + (intSize - (buf.length % intSize));
61561 buf = Buffer.concat([buf, zeroBuffer], len);
61562 }
61563
61564 var arr = [];
61565 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
61566 for (var i = 0; i < buf.length; i += intSize) {
61567 arr.push(fn.call(buf, i));
61568 }
61569 return arr;
61570 }
61571
61572 function toBuffer(arr, size, bigEndian) {
61573 var buf = new Buffer(size);
61574 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
61575 for (var i = 0; i < arr.length; i++) {
61576 fn.call(buf, arr[i], i * 4, true);
61577 }
61578 return buf;
61579 }
61580
61581 function hash(buf, fn, hashSize, bigEndian) {
61582 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
61583 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
61584 return toBuffer(arr, hashSize, bigEndian);
61585 }
61586 exports.hash = hash;
61587 }).call(this,require("buffer").Buffer)
61588 },{"buffer":5}],38:[function(require,module,exports){
61589 'use strict';
61590 /*
61591 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
61592 * Digest Algorithm, as defined in RFC 1321.
61593 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
61594 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
61595 * Distributed under the BSD License
61596 * See http://pajhome.org.uk/crypt/md5 for more info.
61597 */
61598
61599 var helpers = require('./helpers');
61600
61601 /*
61602 * Calculate the MD5 of an array of little-endian words, and a bit length
61603 */
61604 function core_md5(x, len)
61605 {
61606 /* append padding */
61607 x[len >> 5] |= 0x80 << ((len) % 32);
61608 x[(((len + 64) >>> 9) << 4) + 14] = len;
61609
61610 var a = 1732584193;
61611 var b = -271733879;
61612 var c = -1732584194;
61613 var d = 271733878;
61614
61615 for(var i = 0; i < x.length; i += 16)
61616 {
61617 var olda = a;
61618 var oldb = b;
61619 var oldc = c;
61620 var oldd = d;
61621
61622 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
61623 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
61624 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
61625 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
61626 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
61627 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
61628 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
61629 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
61630 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
61631 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
61632 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
61633 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
61634 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
61635 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
61636 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
61637 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
61638
61639 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
61640 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
61641 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
61642 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
61643 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
61644 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
61645 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
61646 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
61647 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
61648 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
61649 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
61650 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
61651 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
61652 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
61653 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
61654 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
61655
61656 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
61657 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
61658 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
61659 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
61660 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
61661 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
61662 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
61663 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
61664 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
61665 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
61666 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
61667 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
61668 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
61669 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
61670 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
61671 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
61672
61673 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
61674 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
61675 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
61676 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
61677 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
61678 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
61679 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
61680 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
61681 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
61682 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
61683 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
61684 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
61685 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
61686 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
61687 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
61688 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
61689
61690 a = safe_add(a, olda);
61691 b = safe_add(b, oldb);
61692 c = safe_add(c, oldc);
61693 d = safe_add(d, oldd);
61694 }
61695 return Array(a, b, c, d);
61696
61697 }
61698
61699 /*
61700 * These functions implement the four basic operations the algorithm uses.
61701 */
61702 function md5_cmn(q, a, b, x, s, t)
61703 {
61704 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
61705 }
61706 function md5_ff(a, b, c, d, x, s, t)
61707 {
61708 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
61709 }
61710 function md5_gg(a, b, c, d, x, s, t)
61711 {
61712 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
61713 }
61714 function md5_hh(a, b, c, d, x, s, t)
61715 {
61716 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
61717 }
61718 function md5_ii(a, b, c, d, x, s, t)
61719 {
61720 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
61721 }
61722
61723 /*
61724 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
61725 * to work around bugs in some JS interpreters.
61726 */
61727 function safe_add(x, y)
61728 {
61729 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
61730 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
61731 return (msw << 16) | (lsw & 0xFFFF);
61732 }
61733
61734 /*
61735 * Bitwise rotate a 32-bit number to the left.
61736 */
61737 function bit_rol(num, cnt)
61738 {
61739 return (num << cnt) | (num >>> (32 - cnt));
61740 }
61741
61742 module.exports = function md5(buf) {
61743 return helpers.hash(buf, core_md5, 16);
61744 };
61745 },{"./helpers":37}],39:[function(require,module,exports){
61746 'use strict';
61747
61748 var elliptic = exports;
61749
61750 elliptic.version = require('../package.json').version;
61751 elliptic.utils = require('./elliptic/utils');
61752 elliptic.rand = require('brorand');
61753 elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
61754 elliptic.curve = require('./elliptic/curve');
61755 elliptic.curves = require('./elliptic/curves');
61756
61757 // Protocols
61758 elliptic.ec = require('./elliptic/ec');
61759 elliptic.eddsa = require('./elliptic/eddsa');
61760
61761 },{"../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){
61762 'use strict';
61763
61764 var BN = require('bn.js');
61765 var elliptic = require('../../elliptic');
61766 var utils = elliptic.utils;
61767 var getNAF = utils.getNAF;
61768 var getJSF = utils.getJSF;
61769 var assert = utils.assert;
61770
61771 function BaseCurve(type, conf) {
61772 this.type = type;
61773 this.p = new BN(conf.p, 16);
61774
61775 // Use Montgomery, when there is no fast reduction for the prime
61776 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
61777
61778 // Useful for many curves
61779 this.zero = new BN(0).toRed(this.red);
61780 this.one = new BN(1).toRed(this.red);
61781 this.two = new BN(2).toRed(this.red);
61782
61783 // Curve configuration, optional
61784 this.n = conf.n && new BN(conf.n, 16);
61785 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
61786
61787 // Temporary arrays
61788 this._wnafT1 = new Array(4);
61789 this._wnafT2 = new Array(4);
61790 this._wnafT3 = new Array(4);
61791 this._wnafT4 = new Array(4);
61792
61793 // Generalized Greg Maxwell's trick
61794 var adjustCount = this.n && this.p.div(this.n);
61795 if (!adjustCount || adjustCount.cmpn(100) > 0) {
61796 this.redN = null;
61797 } else {
61798 this._maxwellTrick = true;
61799 this.redN = this.n.toRed(this.red);
61800 }
61801 }
61802 module.exports = BaseCurve;
61803
61804 BaseCurve.prototype.point = function point() {
61805 throw new Error('Not implemented');
61806 };
61807
61808 BaseCurve.prototype.validate = function validate() {
61809 throw new Error('Not implemented');
61810 };
61811
61812 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
61813 assert(p.precomputed);
61814 var doubles = p._getDoubles();
61815
61816 var naf = getNAF(k, 1);
61817 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
61818 I /= 3;
61819
61820 // Translate into more windowed form
61821 var repr = [];
61822 for (var j = 0; j < naf.length; j += doubles.step) {
61823 var nafW = 0;
61824 for (var k = j + doubles.step - 1; k >= j; k--)
61825 nafW = (nafW << 1) + naf[k];
61826 repr.push(nafW);
61827 }
61828
61829 var a = this.jpoint(null, null, null);
61830 var b = this.jpoint(null, null, null);
61831 for (var i = I; i > 0; i--) {
61832 for (var j = 0; j < repr.length; j++) {
61833 var nafW = repr[j];
61834 if (nafW === i)
61835 b = b.mixedAdd(doubles.points[j]);
61836 else if (nafW === -i)
61837 b = b.mixedAdd(doubles.points[j].neg());
61838 }
61839 a = a.add(b);
61840 }
61841 return a.toP();
61842 };
61843
61844 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
61845 var w = 4;
61846
61847 // Precompute window
61848 var nafPoints = p._getNAFPoints(w);
61849 w = nafPoints.wnd;
61850 var wnd = nafPoints.points;
61851
61852 // Get NAF form
61853 var naf = getNAF(k, w);
61854
61855 // Add `this`*(N+1) for every w-NAF index
61856 var acc = this.jpoint(null, null, null);
61857 for (var i = naf.length - 1; i >= 0; i--) {
61858 // Count zeroes
61859 for (var k = 0; i >= 0 && naf[i] === 0; i--)
61860 k++;
61861 if (i >= 0)
61862 k++;
61863 acc = acc.dblp(k);
61864
61865 if (i < 0)
61866 break;
61867 var z = naf[i];
61868 assert(z !== 0);
61869 if (p.type === 'affine') {
61870 // J +- P
61871 if (z > 0)
61872 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
61873 else
61874 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
61875 } else {
61876 // J +- J
61877 if (z > 0)
61878 acc = acc.add(wnd[(z - 1) >> 1]);
61879 else
61880 acc = acc.add(wnd[(-z - 1) >> 1].neg());
61881 }
61882 }
61883 return p.type === 'affine' ? acc.toP() : acc;
61884 };
61885
61886 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
61887 points,
61888 coeffs,
61889 len,
61890 jacobianResult) {
61891 var wndWidth = this._wnafT1;
61892 var wnd = this._wnafT2;
61893 var naf = this._wnafT3;
61894
61895 // Fill all arrays
61896 var max = 0;
61897 for (var i = 0; i < len; i++) {
61898 var p = points[i];
61899 var nafPoints = p._getNAFPoints(defW);
61900 wndWidth[i] = nafPoints.wnd;
61901 wnd[i] = nafPoints.points;
61902 }
61903
61904 // Comb small window NAFs
61905 for (var i = len - 1; i >= 1; i -= 2) {
61906 var a = i - 1;
61907 var b = i;
61908 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
61909 naf[a] = getNAF(coeffs[a], wndWidth[a]);
61910 naf[b] = getNAF(coeffs[b], wndWidth[b]);
61911 max = Math.max(naf[a].length, max);
61912 max = Math.max(naf[b].length, max);
61913 continue;
61914 }
61915
61916 var comb = [
61917 points[a], /* 1 */
61918 null, /* 3 */
61919 null, /* 5 */
61920 points[b] /* 7 */
61921 ];
61922
61923 // Try to avoid Projective points, if possible
61924 if (points[a].y.cmp(points[b].y) === 0) {
61925 comb[1] = points[a].add(points[b]);
61926 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
61927 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
61928 comb[1] = points[a].toJ().mixedAdd(points[b]);
61929 comb[2] = points[a].add(points[b].neg());
61930 } else {
61931 comb[1] = points[a].toJ().mixedAdd(points[b]);
61932 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
61933 }
61934
61935 var index = [
61936 -3, /* -1 -1 */
61937 -1, /* -1 0 */
61938 -5, /* -1 1 */
61939 -7, /* 0 -1 */
61940 0, /* 0 0 */
61941 7, /* 0 1 */
61942 5, /* 1 -1 */
61943 1, /* 1 0 */
61944 3 /* 1 1 */
61945 ];
61946
61947 var jsf = getJSF(coeffs[a], coeffs[b]);
61948 max = Math.max(jsf[0].length, max);
61949 naf[a] = new Array(max);
61950 naf[b] = new Array(max);
61951 for (var j = 0; j < max; j++) {
61952 var ja = jsf[0][j] | 0;
61953 var jb = jsf[1][j] | 0;
61954
61955 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
61956 naf[b][j] = 0;
61957 wnd[a] = comb;
61958 }
61959 }
61960
61961 var acc = this.jpoint(null, null, null);
61962 var tmp = this._wnafT4;
61963 for (var i = max; i >= 0; i--) {
61964 var k = 0;
61965
61966 while (i >= 0) {
61967 var zero = true;
61968 for (var j = 0; j < len; j++) {
61969 tmp[j] = naf[j][i] | 0;
61970 if (tmp[j] !== 0)
61971 zero = false;
61972 }
61973 if (!zero)
61974 break;
61975 k++;
61976 i--;
61977 }
61978 if (i >= 0)
61979 k++;
61980 acc = acc.dblp(k);
61981 if (i < 0)
61982 break;
61983
61984 for (var j = 0; j < len; j++) {
61985 var z = tmp[j];
61986 var p;
61987 if (z === 0)
61988 continue;
61989 else if (z > 0)
61990 p = wnd[j][(z - 1) >> 1];
61991 else if (z < 0)
61992 p = wnd[j][(-z - 1) >> 1].neg();
61993
61994 if (p.type === 'affine')
61995 acc = acc.mixedAdd(p);
61996 else
61997 acc = acc.add(p);
61998 }
61999 }
62000 // Zeroify references
62001 for (var i = 0; i < len; i++)
62002 wnd[i] = null;
62003
62004 if (jacobianResult)
62005 return acc;
62006 else
62007 return acc.toP();
62008 };
62009
62010 function BasePoint(curve, type) {
62011 this.curve = curve;
62012 this.type = type;
62013 this.precomputed = null;
62014 }
62015 BaseCurve.BasePoint = BasePoint;
62016
62017 BasePoint.prototype.eq = function eq(/*other*/) {
62018 throw new Error('Not implemented');
62019 };
62020
62021 BasePoint.prototype.validate = function validate() {
62022 return this.curve.validate(this);
62023 };
62024
62025 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
62026 bytes = utils.toArray(bytes, enc);
62027
62028 var len = this.p.byteLength();
62029
62030 // uncompressed, hybrid-odd, hybrid-even
62031 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
62032 bytes.length - 1 === 2 * len) {
62033 if (bytes[0] === 0x06)
62034 assert(bytes[bytes.length - 1] % 2 === 0);
62035 else if (bytes[0] === 0x07)
62036 assert(bytes[bytes.length - 1] % 2 === 1);
62037
62038 var res = this.point(bytes.slice(1, 1 + len),
62039 bytes.slice(1 + len, 1 + 2 * len));
62040
62041 return res;
62042 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
62043 bytes.length - 1 === len) {
62044 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
62045 }
62046 throw new Error('Unknown point format');
62047 };
62048
62049 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
62050 return this.encode(enc, true);
62051 };
62052
62053 BasePoint.prototype._encode = function _encode(compact) {
62054 var len = this.curve.p.byteLength();
62055 var x = this.getX().toArray('be', len);
62056
62057 if (compact)
62058 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
62059
62060 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
62061 };
62062
62063 BasePoint.prototype.encode = function encode(enc, compact) {
62064 return utils.encode(this._encode(compact), enc);
62065 };
62066
62067 BasePoint.prototype.precompute = function precompute(power) {
62068 if (this.precomputed)
62069 return this;
62070
62071 var precomputed = {
62072 doubles: null,
62073 naf: null,
62074 beta: null
62075 };
62076 precomputed.naf = this._getNAFPoints(8);
62077 precomputed.doubles = this._getDoubles(4, power);
62078 precomputed.beta = this._getBeta();
62079 this.precomputed = precomputed;
62080
62081 return this;
62082 };
62083
62084 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
62085 if (!this.precomputed)
62086 return false;
62087
62088 var doubles = this.precomputed.doubles;
62089 if (!doubles)
62090 return false;
62091
62092 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
62093 };
62094
62095 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
62096 if (this.precomputed && this.precomputed.doubles)
62097 return this.precomputed.doubles;
62098
62099 var doubles = [ this ];
62100 var acc = this;
62101 for (var i = 0; i < power; i += step) {
62102 for (var j = 0; j < step; j++)
62103 acc = acc.dbl();
62104 doubles.push(acc);
62105 }
62106 return {
62107 step: step,
62108 points: doubles
62109 };
62110 };
62111
62112 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
62113 if (this.precomputed && this.precomputed.naf)
62114 return this.precomputed.naf;
62115
62116 var res = [ this ];
62117 var max = (1 << wnd) - 1;
62118 var dbl = max === 1 ? null : this.dbl();
62119 for (var i = 1; i < max; i++)
62120 res[i] = res[i - 1].add(dbl);
62121 return {
62122 wnd: wnd,
62123 points: res
62124 };
62125 };
62126
62127 BasePoint.prototype._getBeta = function _getBeta() {
62128 return null;
62129 };
62130
62131 BasePoint.prototype.dblp = function dblp(k) {
62132 var r = this;
62133 for (var i = 0; i < k; i++)
62134 r = r.dbl();
62135 return r;
62136 };
62137
62138 },{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
62139 'use strict';
62140
62141 var curve = require('../curve');
62142 var elliptic = require('../../elliptic');
62143 var BN = require('bn.js');
62144 var inherits = require('inherits');
62145 var Base = curve.base;
62146
62147 var assert = elliptic.utils.assert;
62148
62149 function EdwardsCurve(conf) {
62150 // NOTE: Important as we are creating point in Base.call()
62151 this.twisted = (conf.a | 0) !== 1;
62152 this.mOneA = this.twisted && (conf.a | 0) === -1;
62153 this.extended = this.mOneA;
62154
62155 Base.call(this, 'edwards', conf);
62156
62157 this.a = new BN(conf.a, 16).umod(this.red.m);
62158 this.a = this.a.toRed(this.red);
62159 this.c = new BN(conf.c, 16).toRed(this.red);
62160 this.c2 = this.c.redSqr();
62161 this.d = new BN(conf.d, 16).toRed(this.red);
62162 this.dd = this.d.redAdd(this.d);
62163
62164 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
62165 this.oneC = (conf.c | 0) === 1;
62166 }
62167 inherits(EdwardsCurve, Base);
62168 module.exports = EdwardsCurve;
62169
62170 EdwardsCurve.prototype._mulA = function _mulA(num) {
62171 if (this.mOneA)
62172 return num.redNeg();
62173 else
62174 return this.a.redMul(num);
62175 };
62176
62177 EdwardsCurve.prototype._mulC = function _mulC(num) {
62178 if (this.oneC)
62179 return num;
62180 else
62181 return this.c.redMul(num);
62182 };
62183
62184 // Just for compatibility with Short curve
62185 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
62186 return this.point(x, y, z, t);
62187 };
62188
62189 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
62190 x = new BN(x, 16);
62191 if (!x.red)
62192 x = x.toRed(this.red);
62193
62194 var x2 = x.redSqr();
62195 var rhs = this.c2.redSub(this.a.redMul(x2));
62196 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
62197
62198 var y2 = rhs.redMul(lhs.redInvm());
62199 var y = y2.redSqrt();
62200 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
62201 throw new Error('invalid point');
62202
62203 var isOdd = y.fromRed().isOdd();
62204 if (odd && !isOdd || !odd && isOdd)
62205 y = y.redNeg();
62206
62207 return this.point(x, y);
62208 };
62209
62210 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
62211 y = new BN(y, 16);
62212 if (!y.red)
62213 y = y.toRed(this.red);
62214
62215 // x^2 = (y^2 - 1) / (d y^2 + 1)
62216 var y2 = y.redSqr();
62217 var lhs = y2.redSub(this.one);
62218 var rhs = y2.redMul(this.d).redAdd(this.one);
62219 var x2 = lhs.redMul(rhs.redInvm());
62220
62221 if (x2.cmp(this.zero) === 0) {
62222 if (odd)
62223 throw new Error('invalid point');
62224 else
62225 return this.point(this.zero, y);
62226 }
62227
62228 var x = x2.redSqrt();
62229 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
62230 throw new Error('invalid point');
62231
62232 if (x.isOdd() !== odd)
62233 x = x.redNeg();
62234
62235 return this.point(x, y);
62236 };
62237
62238 EdwardsCurve.prototype.validate = function validate(point) {
62239 if (point.isInfinity())
62240 return true;
62241
62242 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
62243 point.normalize();
62244
62245 var x2 = point.x.redSqr();
62246 var y2 = point.y.redSqr();
62247 var lhs = x2.redMul(this.a).redAdd(y2);
62248 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
62249
62250 return lhs.cmp(rhs) === 0;
62251 };
62252
62253 function Point(curve, x, y, z, t) {
62254 Base.BasePoint.call(this, curve, 'projective');
62255 if (x === null && y === null && z === null) {
62256 this.x = this.curve.zero;
62257 this.y = this.curve.one;
62258 this.z = this.curve.one;
62259 this.t = this.curve.zero;
62260 this.zOne = true;
62261 } else {
62262 this.x = new BN(x, 16);
62263 this.y = new BN(y, 16);
62264 this.z = z ? new BN(z, 16) : this.curve.one;
62265 this.t = t && new BN(t, 16);
62266 if (!this.x.red)
62267 this.x = this.x.toRed(this.curve.red);
62268 if (!this.y.red)
62269 this.y = this.y.toRed(this.curve.red);
62270 if (!this.z.red)
62271 this.z = this.z.toRed(this.curve.red);
62272 if (this.t && !this.t.red)
62273 this.t = this.t.toRed(this.curve.red);
62274 this.zOne = this.z === this.curve.one;
62275
62276 // Use extended coordinates
62277 if (this.curve.extended && !this.t) {
62278 this.t = this.x.redMul(this.y);
62279 if (!this.zOne)
62280 this.t = this.t.redMul(this.z.redInvm());
62281 }
62282 }
62283 }
62284 inherits(Point, Base.BasePoint);
62285
62286 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
62287 return Point.fromJSON(this, obj);
62288 };
62289
62290 EdwardsCurve.prototype.point = function point(x, y, z, t) {
62291 return new Point(this, x, y, z, t);
62292 };
62293
62294 Point.fromJSON = function fromJSON(curve, obj) {
62295 return new Point(curve, obj[0], obj[1], obj[2]);
62296 };
62297
62298 Point.prototype.inspect = function inspect() {
62299 if (this.isInfinity())
62300 return '<EC Point Infinity>';
62301 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
62302 ' y: ' + this.y.fromRed().toString(16, 2) +
62303 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
62304 };
62305
62306 Point.prototype.isInfinity = function isInfinity() {
62307 // XXX This code assumes that zero is always zero in red
62308 return this.x.cmpn(0) === 0 &&
62309 this.y.cmp(this.z) === 0;
62310 };
62311
62312 Point.prototype._extDbl = function _extDbl() {
62313 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
62314 // #doubling-dbl-2008-hwcd
62315 // 4M + 4S
62316
62317 // A = X1^2
62318 var a = this.x.redSqr();
62319 // B = Y1^2
62320 var b = this.y.redSqr();
62321 // C = 2 * Z1^2
62322 var c = this.z.redSqr();
62323 c = c.redIAdd(c);
62324 // D = a * A
62325 var d = this.curve._mulA(a);
62326 // E = (X1 + Y1)^2 - A - B
62327 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
62328 // G = D + B
62329 var g = d.redAdd(b);
62330 // F = G - C
62331 var f = g.redSub(c);
62332 // H = D - B
62333 var h = d.redSub(b);
62334 // X3 = E * F
62335 var nx = e.redMul(f);
62336 // Y3 = G * H
62337 var ny = g.redMul(h);
62338 // T3 = E * H
62339 var nt = e.redMul(h);
62340 // Z3 = F * G
62341 var nz = f.redMul(g);
62342 return this.curve.point(nx, ny, nz, nt);
62343 };
62344
62345 Point.prototype._projDbl = function _projDbl() {
62346 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
62347 // #doubling-dbl-2008-bbjlp
62348 // #doubling-dbl-2007-bl
62349 // and others
62350 // Generally 3M + 4S or 2M + 4S
62351
62352 // B = (X1 + Y1)^2
62353 var b = this.x.redAdd(this.y).redSqr();
62354 // C = X1^2
62355 var c = this.x.redSqr();
62356 // D = Y1^2
62357 var d = this.y.redSqr();
62358
62359 var nx;
62360 var ny;
62361 var nz;
62362 if (this.curve.twisted) {
62363 // E = a * C
62364 var e = this.curve._mulA(c);
62365 // F = E + D
62366 var f = e.redAdd(d);
62367 if (this.zOne) {
62368 // X3 = (B - C - D) * (F - 2)
62369 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
62370 // Y3 = F * (E - D)
62371 ny = f.redMul(e.redSub(d));
62372 // Z3 = F^2 - 2 * F
62373 nz = f.redSqr().redSub(f).redSub(f);
62374 } else {
62375 // H = Z1^2
62376 var h = this.z.redSqr();
62377 // J = F - 2 * H
62378 var j = f.redSub(h).redISub(h);
62379 // X3 = (B-C-D)*J
62380 nx = b.redSub(c).redISub(d).redMul(j);
62381 // Y3 = F * (E - D)
62382 ny = f.redMul(e.redSub(d));
62383 // Z3 = F * J
62384 nz = f.redMul(j);
62385 }
62386 } else {
62387 // E = C + D
62388 var e = c.redAdd(d);
62389 // H = (c * Z1)^2
62390 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
62391 // J = E - 2 * H
62392 var j = e.redSub(h).redSub(h);
62393 // X3 = c * (B - E) * J
62394 nx = this.curve._mulC(b.redISub(e)).redMul(j);
62395 // Y3 = c * E * (C - D)
62396 ny = this.curve._mulC(e).redMul(c.redISub(d));
62397 // Z3 = E * J
62398 nz = e.redMul(j);
62399 }
62400 return this.curve.point(nx, ny, nz);
62401 };
62402
62403 Point.prototype.dbl = function dbl() {
62404 if (this.isInfinity())
62405 return this;
62406
62407 // Double in extended coordinates
62408 if (this.curve.extended)
62409 return this._extDbl();
62410 else
62411 return this._projDbl();
62412 };
62413
62414 Point.prototype._extAdd = function _extAdd(p) {
62415 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
62416 // #addition-add-2008-hwcd-3
62417 // 8M
62418
62419 // A = (Y1 - X1) * (Y2 - X2)
62420 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
62421 // B = (Y1 + X1) * (Y2 + X2)
62422 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
62423 // C = T1 * k * T2
62424 var c = this.t.redMul(this.curve.dd).redMul(p.t);
62425 // D = Z1 * 2 * Z2
62426 var d = this.z.redMul(p.z.redAdd(p.z));
62427 // E = B - A
62428 var e = b.redSub(a);
62429 // F = D - C
62430 var f = d.redSub(c);
62431 // G = D + C
62432 var g = d.redAdd(c);
62433 // H = B + A
62434 var h = b.redAdd(a);
62435 // X3 = E * F
62436 var nx = e.redMul(f);
62437 // Y3 = G * H
62438 var ny = g.redMul(h);
62439 // T3 = E * H
62440 var nt = e.redMul(h);
62441 // Z3 = F * G
62442 var nz = f.redMul(g);
62443 return this.curve.point(nx, ny, nz, nt);
62444 };
62445
62446 Point.prototype._projAdd = function _projAdd(p) {
62447 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
62448 // #addition-add-2008-bbjlp
62449 // #addition-add-2007-bl
62450 // 10M + 1S
62451
62452 // A = Z1 * Z2
62453 var a = this.z.redMul(p.z);
62454 // B = A^2
62455 var b = a.redSqr();
62456 // C = X1 * X2
62457 var c = this.x.redMul(p.x);
62458 // D = Y1 * Y2
62459 var d = this.y.redMul(p.y);
62460 // E = d * C * D
62461 var e = this.curve.d.redMul(c).redMul(d);
62462 // F = B - E
62463 var f = b.redSub(e);
62464 // G = B + E
62465 var g = b.redAdd(e);
62466 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
62467 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
62468 var nx = a.redMul(f).redMul(tmp);
62469 var ny;
62470 var nz;
62471 if (this.curve.twisted) {
62472 // Y3 = A * G * (D - a * C)
62473 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
62474 // Z3 = F * G
62475 nz = f.redMul(g);
62476 } else {
62477 // Y3 = A * G * (D - C)
62478 ny = a.redMul(g).redMul(d.redSub(c));
62479 // Z3 = c * F * G
62480 nz = this.curve._mulC(f).redMul(g);
62481 }
62482 return this.curve.point(nx, ny, nz);
62483 };
62484
62485 Point.prototype.add = function add(p) {
62486 if (this.isInfinity())
62487 return p;
62488 if (p.isInfinity())
62489 return this;
62490
62491 if (this.curve.extended)
62492 return this._extAdd(p);
62493 else
62494 return this._projAdd(p);
62495 };
62496
62497 Point.prototype.mul = function mul(k) {
62498 if (this._hasDoubles(k))
62499 return this.curve._fixedNafMul(this, k);
62500 else
62501 return this.curve._wnafMul(this, k);
62502 };
62503
62504 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
62505 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
62506 };
62507
62508 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
62509 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
62510 };
62511
62512 Point.prototype.normalize = function normalize() {
62513 if (this.zOne)
62514 return this;
62515
62516 // Normalize coordinates
62517 var zi = this.z.redInvm();
62518 this.x = this.x.redMul(zi);
62519 this.y = this.y.redMul(zi);
62520 if (this.t)
62521 this.t = this.t.redMul(zi);
62522 this.z = this.curve.one;
62523 this.zOne = true;
62524 return this;
62525 };
62526
62527 Point.prototype.neg = function neg() {
62528 return this.curve.point(this.x.redNeg(),
62529 this.y,
62530 this.z,
62531 this.t && this.t.redNeg());
62532 };
62533
62534 Point.prototype.getX = function getX() {
62535 this.normalize();
62536 return this.x.fromRed();
62537 };
62538
62539 Point.prototype.getY = function getY() {
62540 this.normalize();
62541 return this.y.fromRed();
62542 };
62543
62544 Point.prototype.eq = function eq(other) {
62545 return this === other ||
62546 this.getX().cmp(other.getX()) === 0 &&
62547 this.getY().cmp(other.getY()) === 0;
62548 };
62549
62550 Point.prototype.eqXToP = function eqXToP(x) {
62551 var rx = x.toRed(this.curve.red).redMul(this.z);
62552 if (this.x.cmp(rx) === 0)
62553 return true;
62554
62555 var xc = x.clone();
62556 var t = this.curve.redN.redMul(this.z);
62557 for (;;) {
62558 xc.iadd(this.curve.n);
62559 if (xc.cmp(this.curve.p) >= 0)
62560 return false;
62561
62562 rx.redIAdd(t);
62563 if (this.x.cmp(rx) === 0)
62564 return true;
62565 }
62566 return false;
62567 };
62568
62569 // Compatibility with BaseCurve
62570 Point.prototype.toP = Point.prototype.normalize;
62571 Point.prototype.mixedAdd = Point.prototype.add;
62572
62573 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
62574 'use strict';
62575
62576 var curve = exports;
62577
62578 curve.base = require('./base');
62579 curve.short = require('./short');
62580 curve.mont = require('./mont');
62581 curve.edwards = require('./edwards');
62582
62583 },{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
62584 'use strict';
62585
62586 var curve = require('../curve');
62587 var BN = require('bn.js');
62588 var inherits = require('inherits');
62589 var Base = curve.base;
62590
62591 var elliptic = require('../../elliptic');
62592 var utils = elliptic.utils;
62593
62594 function MontCurve(conf) {
62595 Base.call(this, 'mont', conf);
62596
62597 this.a = new BN(conf.a, 16).toRed(this.red);
62598 this.b = new BN(conf.b, 16).toRed(this.red);
62599 this.i4 = new BN(4).toRed(this.red).redInvm();
62600 this.two = new BN(2).toRed(this.red);
62601 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
62602 }
62603 inherits(MontCurve, Base);
62604 module.exports = MontCurve;
62605
62606 MontCurve.prototype.validate = function validate(point) {
62607 var x = point.normalize().x;
62608 var x2 = x.redSqr();
62609 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
62610 var y = rhs.redSqrt();
62611
62612 return y.redSqr().cmp(rhs) === 0;
62613 };
62614
62615 function Point(curve, x, z) {
62616 Base.BasePoint.call(this, curve, 'projective');
62617 if (x === null && z === null) {
62618 this.x = this.curve.one;
62619 this.z = this.curve.zero;
62620 } else {
62621 this.x = new BN(x, 16);
62622 this.z = new BN(z, 16);
62623 if (!this.x.red)
62624 this.x = this.x.toRed(this.curve.red);
62625 if (!this.z.red)
62626 this.z = this.z.toRed(this.curve.red);
62627 }
62628 }
62629 inherits(Point, Base.BasePoint);
62630
62631 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
62632 return this.point(utils.toArray(bytes, enc), 1);
62633 };
62634
62635 MontCurve.prototype.point = function point(x, z) {
62636 return new Point(this, x, z);
62637 };
62638
62639 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
62640 return Point.fromJSON(this, obj);
62641 };
62642
62643 Point.prototype.precompute = function precompute() {
62644 // No-op
62645 };
62646
62647 Point.prototype._encode = function _encode() {
62648 return this.getX().toArray('be', this.curve.p.byteLength());
62649 };
62650
62651 Point.fromJSON = function fromJSON(curve, obj) {
62652 return new Point(curve, obj[0], obj[1] || curve.one);
62653 };
62654
62655 Point.prototype.inspect = function inspect() {
62656 if (this.isInfinity())
62657 return '<EC Point Infinity>';
62658 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
62659 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
62660 };
62661
62662 Point.prototype.isInfinity = function isInfinity() {
62663 // XXX This code assumes that zero is always zero in red
62664 return this.z.cmpn(0) === 0;
62665 };
62666
62667 Point.prototype.dbl = function dbl() {
62668 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
62669 // 2M + 2S + 4A
62670
62671 // A = X1 + Z1
62672 var a = this.x.redAdd(this.z);
62673 // AA = A^2
62674 var aa = a.redSqr();
62675 // B = X1 - Z1
62676 var b = this.x.redSub(this.z);
62677 // BB = B^2
62678 var bb = b.redSqr();
62679 // C = AA - BB
62680 var c = aa.redSub(bb);
62681 // X3 = AA * BB
62682 var nx = aa.redMul(bb);
62683 // Z3 = C * (BB + A24 * C)
62684 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
62685 return this.curve.point(nx, nz);
62686 };
62687
62688 Point.prototype.add = function add() {
62689 throw new Error('Not supported on Montgomery curve');
62690 };
62691
62692 Point.prototype.diffAdd = function diffAdd(p, diff) {
62693 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
62694 // 4M + 2S + 6A
62695
62696 // A = X2 + Z2
62697 var a = this.x.redAdd(this.z);
62698 // B = X2 - Z2
62699 var b = this.x.redSub(this.z);
62700 // C = X3 + Z3
62701 var c = p.x.redAdd(p.z);
62702 // D = X3 - Z3
62703 var d = p.x.redSub(p.z);
62704 // DA = D * A
62705 var da = d.redMul(a);
62706 // CB = C * B
62707 var cb = c.redMul(b);
62708 // X5 = Z1 * (DA + CB)^2
62709 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
62710 // Z5 = X1 * (DA - CB)^2
62711 var nz = diff.x.redMul(da.redISub(cb).redSqr());
62712 return this.curve.point(nx, nz);
62713 };
62714
62715 Point.prototype.mul = function mul(k) {
62716 var t = k.clone();
62717 var a = this; // (N / 2) * Q + Q
62718 var b = this.curve.point(null, null); // (N / 2) * Q
62719 var c = this; // Q
62720
62721 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
62722 bits.push(t.andln(1));
62723
62724 for (var i = bits.length - 1; i >= 0; i--) {
62725 if (bits[i] === 0) {
62726 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
62727 a = a.diffAdd(b, c);
62728 // N * Q = 2 * ((N / 2) * Q + Q))
62729 b = b.dbl();
62730 } else {
62731 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
62732 b = a.diffAdd(b, c);
62733 // N * Q + Q = 2 * ((N / 2) * Q + Q)
62734 a = a.dbl();
62735 }
62736 }
62737 return b;
62738 };
62739
62740 Point.prototype.mulAdd = function mulAdd() {
62741 throw new Error('Not supported on Montgomery curve');
62742 };
62743
62744 Point.prototype.jumlAdd = function jumlAdd() {
62745 throw new Error('Not supported on Montgomery curve');
62746 };
62747
62748 Point.prototype.eq = function eq(other) {
62749 return this.getX().cmp(other.getX()) === 0;
62750 };
62751
62752 Point.prototype.normalize = function normalize() {
62753 this.x = this.x.redMul(this.z.redInvm());
62754 this.z = this.curve.one;
62755 return this;
62756 };
62757
62758 Point.prototype.getX = function getX() {
62759 // Normalize coordinates
62760 this.normalize();
62761
62762 return this.x.fromRed();
62763 };
62764
62765 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
62766 'use strict';
62767
62768 var curve = require('../curve');
62769 var elliptic = require('../../elliptic');
62770 var BN = require('bn.js');
62771 var inherits = require('inherits');
62772 var Base = curve.base;
62773
62774 var assert = elliptic.utils.assert;
62775
62776 function ShortCurve(conf) {
62777 Base.call(this, 'short', conf);
62778
62779 this.a = new BN(conf.a, 16).toRed(this.red);
62780 this.b = new BN(conf.b, 16).toRed(this.red);
62781 this.tinv = this.two.redInvm();
62782
62783 this.zeroA = this.a.fromRed().cmpn(0) === 0;
62784 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
62785
62786 // If the curve is endomorphic, precalculate beta and lambda
62787 this.endo = this._getEndomorphism(conf);
62788 this._endoWnafT1 = new Array(4);
62789 this._endoWnafT2 = new Array(4);
62790 }
62791 inherits(ShortCurve, Base);
62792 module.exports = ShortCurve;
62793
62794 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
62795 // No efficient endomorphism
62796 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
62797 return;
62798
62799 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
62800 var beta;
62801 var lambda;
62802 if (conf.beta) {
62803 beta = new BN(conf.beta, 16).toRed(this.red);
62804 } else {
62805 var betas = this._getEndoRoots(this.p);
62806 // Choose the smallest beta
62807 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
62808 beta = beta.toRed(this.red);
62809 }
62810 if (conf.lambda) {
62811 lambda = new BN(conf.lambda, 16);
62812 } else {
62813 // Choose the lambda that is matching selected beta
62814 var lambdas = this._getEndoRoots(this.n);
62815 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
62816 lambda = lambdas[0];
62817 } else {
62818 lambda = lambdas[1];
62819 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
62820 }
62821 }
62822
62823 // Get basis vectors, used for balanced length-two representation
62824 var basis;
62825 if (conf.basis) {
62826 basis = conf.basis.map(function(vec) {
62827 return {
62828 a: new BN(vec.a, 16),
62829 b: new BN(vec.b, 16)
62830 };
62831 });
62832 } else {
62833 basis = this._getEndoBasis(lambda);
62834 }
62835
62836 return {
62837 beta: beta,
62838 lambda: lambda,
62839 basis: basis
62840 };
62841 };
62842
62843 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
62844 // Find roots of for x^2 + x + 1 in F
62845 // Root = (-1 +- Sqrt(-3)) / 2
62846 //
62847 var red = num === this.p ? this.red : BN.mont(num);
62848 var tinv = new BN(2).toRed(red).redInvm();
62849 var ntinv = tinv.redNeg();
62850
62851 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
62852
62853 var l1 = ntinv.redAdd(s).fromRed();
62854 var l2 = ntinv.redSub(s).fromRed();
62855 return [ l1, l2 ];
62856 };
62857
62858 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
62859 // aprxSqrt >= sqrt(this.n)
62860 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
62861
62862 // 3.74
62863 // Run EGCD, until r(L + 1) < aprxSqrt
62864 var u = lambda;
62865 var v = this.n.clone();
62866 var x1 = new BN(1);
62867 var y1 = new BN(0);
62868 var x2 = new BN(0);
62869 var y2 = new BN(1);
62870
62871 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
62872 var a0;
62873 var b0;
62874 // First vector
62875 var a1;
62876 var b1;
62877 // Second vector
62878 var a2;
62879 var b2;
62880
62881 var prevR;
62882 var i = 0;
62883 var r;
62884 var x;
62885 while (u.cmpn(0) !== 0) {
62886 var q = v.div(u);
62887 r = v.sub(q.mul(u));
62888 x = x2.sub(q.mul(x1));
62889 var y = y2.sub(q.mul(y1));
62890
62891 if (!a1 && r.cmp(aprxSqrt) < 0) {
62892 a0 = prevR.neg();
62893 b0 = x1;
62894 a1 = r.neg();
62895 b1 = x;
62896 } else if (a1 && ++i === 2) {
62897 break;
62898 }
62899 prevR = r;
62900
62901 v = u;
62902 u = r;
62903 x2 = x1;
62904 x1 = x;
62905 y2 = y1;
62906 y1 = y;
62907 }
62908 a2 = r.neg();
62909 b2 = x;
62910
62911 var len1 = a1.sqr().add(b1.sqr());
62912 var len2 = a2.sqr().add(b2.sqr());
62913 if (len2.cmp(len1) >= 0) {
62914 a2 = a0;
62915 b2 = b0;
62916 }
62917
62918 // Normalize signs
62919 if (a1.negative) {
62920 a1 = a1.neg();
62921 b1 = b1.neg();
62922 }
62923 if (a2.negative) {
62924 a2 = a2.neg();
62925 b2 = b2.neg();
62926 }
62927
62928 return [
62929 { a: a1, b: b1 },
62930 { a: a2, b: b2 }
62931 ];
62932 };
62933
62934 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
62935 var basis = this.endo.basis;
62936 var v1 = basis[0];
62937 var v2 = basis[1];
62938
62939 var c1 = v2.b.mul(k).divRound(this.n);
62940 var c2 = v1.b.neg().mul(k).divRound(this.n);
62941
62942 var p1 = c1.mul(v1.a);
62943 var p2 = c2.mul(v2.a);
62944 var q1 = c1.mul(v1.b);
62945 var q2 = c2.mul(v2.b);
62946
62947 // Calculate answer
62948 var k1 = k.sub(p1).sub(p2);
62949 var k2 = q1.add(q2).neg();
62950 return { k1: k1, k2: k2 };
62951 };
62952
62953 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
62954 x = new BN(x, 16);
62955 if (!x.red)
62956 x = x.toRed(this.red);
62957
62958 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
62959 var y = y2.redSqrt();
62960 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
62961 throw new Error('invalid point');
62962
62963 // XXX Is there any way to tell if the number is odd without converting it
62964 // to non-red form?
62965 var isOdd = y.fromRed().isOdd();
62966 if (odd && !isOdd || !odd && isOdd)
62967 y = y.redNeg();
62968
62969 return this.point(x, y);
62970 };
62971
62972 ShortCurve.prototype.validate = function validate(point) {
62973 if (point.inf)
62974 return true;
62975
62976 var x = point.x;
62977 var y = point.y;
62978
62979 var ax = this.a.redMul(x);
62980 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
62981 return y.redSqr().redISub(rhs).cmpn(0) === 0;
62982 };
62983
62984 ShortCurve.prototype._endoWnafMulAdd =
62985 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
62986 var npoints = this._endoWnafT1;
62987 var ncoeffs = this._endoWnafT2;
62988 for (var i = 0; i < points.length; i++) {
62989 var split = this._endoSplit(coeffs[i]);
62990 var p = points[i];
62991 var beta = p._getBeta();
62992
62993 if (split.k1.negative) {
62994 split.k1.ineg();
62995 p = p.neg(true);
62996 }
62997 if (split.k2.negative) {
62998 split.k2.ineg();
62999 beta = beta.neg(true);
63000 }
63001
63002 npoints[i * 2] = p;
63003 npoints[i * 2 + 1] = beta;
63004 ncoeffs[i * 2] = split.k1;
63005 ncoeffs[i * 2 + 1] = split.k2;
63006 }
63007 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
63008
63009 // Clean-up references to points and coefficients
63010 for (var j = 0; j < i * 2; j++) {
63011 npoints[j] = null;
63012 ncoeffs[j] = null;
63013 }
63014 return res;
63015 };
63016
63017 function Point(curve, x, y, isRed) {
63018 Base.BasePoint.call(this, curve, 'affine');
63019 if (x === null && y === null) {
63020 this.x = null;
63021 this.y = null;
63022 this.inf = true;
63023 } else {
63024 this.x = new BN(x, 16);
63025 this.y = new BN(y, 16);
63026 // Force redgomery representation when loading from JSON
63027 if (isRed) {
63028 this.x.forceRed(this.curve.red);
63029 this.y.forceRed(this.curve.red);
63030 }
63031 if (!this.x.red)
63032 this.x = this.x.toRed(this.curve.red);
63033 if (!this.y.red)
63034 this.y = this.y.toRed(this.curve.red);
63035 this.inf = false;
63036 }
63037 }
63038 inherits(Point, Base.BasePoint);
63039
63040 ShortCurve.prototype.point = function point(x, y, isRed) {
63041 return new Point(this, x, y, isRed);
63042 };
63043
63044 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
63045 return Point.fromJSON(this, obj, red);
63046 };
63047
63048 Point.prototype._getBeta = function _getBeta() {
63049 if (!this.curve.endo)
63050 return;
63051
63052 var pre = this.precomputed;
63053 if (pre && pre.beta)
63054 return pre.beta;
63055
63056 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
63057 if (pre) {
63058 var curve = this.curve;
63059 var endoMul = function(p) {
63060 return curve.point(p.x.redMul(curve.endo.beta), p.y);
63061 };
63062 pre.beta = beta;
63063 beta.precomputed = {
63064 beta: null,
63065 naf: pre.naf && {
63066 wnd: pre.naf.wnd,
63067 points: pre.naf.points.map(endoMul)
63068 },
63069 doubles: pre.doubles && {
63070 step: pre.doubles.step,
63071 points: pre.doubles.points.map(endoMul)
63072 }
63073 };
63074 }
63075 return beta;
63076 };
63077
63078 Point.prototype.toJSON = function toJSON() {
63079 if (!this.precomputed)
63080 return [ this.x, this.y ];
63081
63082 return [ this.x, this.y, this.precomputed && {
63083 doubles: this.precomputed.doubles && {
63084 step: this.precomputed.doubles.step,
63085 points: this.precomputed.doubles.points.slice(1)
63086 },
63087 naf: this.precomputed.naf && {
63088 wnd: this.precomputed.naf.wnd,
63089 points: this.precomputed.naf.points.slice(1)
63090 }
63091 } ];
63092 };
63093
63094 Point.fromJSON = function fromJSON(curve, obj, red) {
63095 if (typeof obj === 'string')
63096 obj = JSON.parse(obj);
63097 var res = curve.point(obj[0], obj[1], red);
63098 if (!obj[2])
63099 return res;
63100
63101 function obj2point(obj) {
63102 return curve.point(obj[0], obj[1], red);
63103 }
63104
63105 var pre = obj[2];
63106 res.precomputed = {
63107 beta: null,
63108 doubles: pre.doubles && {
63109 step: pre.doubles.step,
63110 points: [ res ].concat(pre.doubles.points.map(obj2point))
63111 },
63112 naf: pre.naf && {
63113 wnd: pre.naf.wnd,
63114 points: [ res ].concat(pre.naf.points.map(obj2point))
63115 }
63116 };
63117 return res;
63118 };
63119
63120 Point.prototype.inspect = function inspect() {
63121 if (this.isInfinity())
63122 return '<EC Point Infinity>';
63123 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
63124 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
63125 };
63126
63127 Point.prototype.isInfinity = function isInfinity() {
63128 return this.inf;
63129 };
63130
63131 Point.prototype.add = function add(p) {
63132 // O + P = P
63133 if (this.inf)
63134 return p;
63135
63136 // P + O = P
63137 if (p.inf)
63138 return this;
63139
63140 // P + P = 2P
63141 if (this.eq(p))
63142 return this.dbl();
63143
63144 // P + (-P) = O
63145 if (this.neg().eq(p))
63146 return this.curve.point(null, null);
63147
63148 // P + Q = O
63149 if (this.x.cmp(p.x) === 0)
63150 return this.curve.point(null, null);
63151
63152 var c = this.y.redSub(p.y);
63153 if (c.cmpn(0) !== 0)
63154 c = c.redMul(this.x.redSub(p.x).redInvm());
63155 var nx = c.redSqr().redISub(this.x).redISub(p.x);
63156 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
63157 return this.curve.point(nx, ny);
63158 };
63159
63160 Point.prototype.dbl = function dbl() {
63161 if (this.inf)
63162 return this;
63163
63164 // 2P = O
63165 var ys1 = this.y.redAdd(this.y);
63166 if (ys1.cmpn(0) === 0)
63167 return this.curve.point(null, null);
63168
63169 var a = this.curve.a;
63170
63171 var x2 = this.x.redSqr();
63172 var dyinv = ys1.redInvm();
63173 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
63174
63175 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
63176 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
63177 return this.curve.point(nx, ny);
63178 };
63179
63180 Point.prototype.getX = function getX() {
63181 return this.x.fromRed();
63182 };
63183
63184 Point.prototype.getY = function getY() {
63185 return this.y.fromRed();
63186 };
63187
63188 Point.prototype.mul = function mul(k) {
63189 k = new BN(k, 16);
63190
63191 if (this._hasDoubles(k))
63192 return this.curve._fixedNafMul(this, k);
63193 else if (this.curve.endo)
63194 return this.curve._endoWnafMulAdd([ this ], [ k ]);
63195 else
63196 return this.curve._wnafMul(this, k);
63197 };
63198
63199 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
63200 var points = [ this, p2 ];
63201 var coeffs = [ k1, k2 ];
63202 if (this.curve.endo)
63203 return this.curve._endoWnafMulAdd(points, coeffs);
63204 else
63205 return this.curve._wnafMulAdd(1, points, coeffs, 2);
63206 };
63207
63208 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
63209 var points = [ this, p2 ];
63210 var coeffs = [ k1, k2 ];
63211 if (this.curve.endo)
63212 return this.curve._endoWnafMulAdd(points, coeffs, true);
63213 else
63214 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
63215 };
63216
63217 Point.prototype.eq = function eq(p) {
63218 return this === p ||
63219 this.inf === p.inf &&
63220 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
63221 };
63222
63223 Point.prototype.neg = function neg(_precompute) {
63224 if (this.inf)
63225 return this;
63226
63227 var res = this.curve.point(this.x, this.y.redNeg());
63228 if (_precompute && this.precomputed) {
63229 var pre = this.precomputed;
63230 var negate = function(p) {
63231 return p.neg();
63232 };
63233 res.precomputed = {
63234 naf: pre.naf && {
63235 wnd: pre.naf.wnd,
63236 points: pre.naf.points.map(negate)
63237 },
63238 doubles: pre.doubles && {
63239 step: pre.doubles.step,
63240 points: pre.doubles.points.map(negate)
63241 }
63242 };
63243 }
63244 return res;
63245 };
63246
63247 Point.prototype.toJ = function toJ() {
63248 if (this.inf)
63249 return this.curve.jpoint(null, null, null);
63250
63251 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
63252 return res;
63253 };
63254
63255 function JPoint(curve, x, y, z) {
63256 Base.BasePoint.call(this, curve, 'jacobian');
63257 if (x === null && y === null && z === null) {
63258 this.x = this.curve.one;
63259 this.y = this.curve.one;
63260 this.z = new BN(0);
63261 } else {
63262 this.x = new BN(x, 16);
63263 this.y = new BN(y, 16);
63264 this.z = new BN(z, 16);
63265 }
63266 if (!this.x.red)
63267 this.x = this.x.toRed(this.curve.red);
63268 if (!this.y.red)
63269 this.y = this.y.toRed(this.curve.red);
63270 if (!this.z.red)
63271 this.z = this.z.toRed(this.curve.red);
63272
63273 this.zOne = this.z === this.curve.one;
63274 }
63275 inherits(JPoint, Base.BasePoint);
63276
63277 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
63278 return new JPoint(this, x, y, z);
63279 };
63280
63281 JPoint.prototype.toP = function toP() {
63282 if (this.isInfinity())
63283 return this.curve.point(null, null);
63284
63285 var zinv = this.z.redInvm();
63286 var zinv2 = zinv.redSqr();
63287 var ax = this.x.redMul(zinv2);
63288 var ay = this.y.redMul(zinv2).redMul(zinv);
63289
63290 return this.curve.point(ax, ay);
63291 };
63292
63293 JPoint.prototype.neg = function neg() {
63294 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
63295 };
63296
63297 JPoint.prototype.add = function add(p) {
63298 // O + P = P
63299 if (this.isInfinity())
63300 return p;
63301
63302 // P + O = P
63303 if (p.isInfinity())
63304 return this;
63305
63306 // 12M + 4S + 7A
63307 var pz2 = p.z.redSqr();
63308 var z2 = this.z.redSqr();
63309 var u1 = this.x.redMul(pz2);
63310 var u2 = p.x.redMul(z2);
63311 var s1 = this.y.redMul(pz2.redMul(p.z));
63312 var s2 = p.y.redMul(z2.redMul(this.z));
63313
63314 var h = u1.redSub(u2);
63315 var r = s1.redSub(s2);
63316 if (h.cmpn(0) === 0) {
63317 if (r.cmpn(0) !== 0)
63318 return this.curve.jpoint(null, null, null);
63319 else
63320 return this.dbl();
63321 }
63322
63323 var h2 = h.redSqr();
63324 var h3 = h2.redMul(h);
63325 var v = u1.redMul(h2);
63326
63327 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
63328 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
63329 var nz = this.z.redMul(p.z).redMul(h);
63330
63331 return this.curve.jpoint(nx, ny, nz);
63332 };
63333
63334 JPoint.prototype.mixedAdd = function mixedAdd(p) {
63335 // O + P = P
63336 if (this.isInfinity())
63337 return p.toJ();
63338
63339 // P + O = P
63340 if (p.isInfinity())
63341 return this;
63342
63343 // 8M + 3S + 7A
63344 var z2 = this.z.redSqr();
63345 var u1 = this.x;
63346 var u2 = p.x.redMul(z2);
63347 var s1 = this.y;
63348 var s2 = p.y.redMul(z2).redMul(this.z);
63349
63350 var h = u1.redSub(u2);
63351 var r = s1.redSub(s2);
63352 if (h.cmpn(0) === 0) {
63353 if (r.cmpn(0) !== 0)
63354 return this.curve.jpoint(null, null, null);
63355 else
63356 return this.dbl();
63357 }
63358
63359 var h2 = h.redSqr();
63360 var h3 = h2.redMul(h);
63361 var v = u1.redMul(h2);
63362
63363 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
63364 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
63365 var nz = this.z.redMul(h);
63366
63367 return this.curve.jpoint(nx, ny, nz);
63368 };
63369
63370 JPoint.prototype.dblp = function dblp(pow) {
63371 if (pow === 0)
63372 return this;
63373 if (this.isInfinity())
63374 return this;
63375 if (!pow)
63376 return this.dbl();
63377
63378 if (this.curve.zeroA || this.curve.threeA) {
63379 var r = this;
63380 for (var i = 0; i < pow; i++)
63381 r = r.dbl();
63382 return r;
63383 }
63384
63385 // 1M + 2S + 1A + N * (4S + 5M + 8A)
63386 // N = 1 => 6M + 6S + 9A
63387 var a = this.curve.a;
63388 var tinv = this.curve.tinv;
63389
63390 var jx = this.x;
63391 var jy = this.y;
63392 var jz = this.z;
63393 var jz4 = jz.redSqr().redSqr();
63394
63395 // Reuse results
63396 var jyd = jy.redAdd(jy);
63397 for (var i = 0; i < pow; i++) {
63398 var jx2 = jx.redSqr();
63399 var jyd2 = jyd.redSqr();
63400 var jyd4 = jyd2.redSqr();
63401 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
63402
63403 var t1 = jx.redMul(jyd2);
63404 var nx = c.redSqr().redISub(t1.redAdd(t1));
63405 var t2 = t1.redISub(nx);
63406 var dny = c.redMul(t2);
63407 dny = dny.redIAdd(dny).redISub(jyd4);
63408 var nz = jyd.redMul(jz);
63409 if (i + 1 < pow)
63410 jz4 = jz4.redMul(jyd4);
63411
63412 jx = nx;
63413 jz = nz;
63414 jyd = dny;
63415 }
63416
63417 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
63418 };
63419
63420 JPoint.prototype.dbl = function dbl() {
63421 if (this.isInfinity())
63422 return this;
63423
63424 if (this.curve.zeroA)
63425 return this._zeroDbl();
63426 else if (this.curve.threeA)
63427 return this._threeDbl();
63428 else
63429 return this._dbl();
63430 };
63431
63432 JPoint.prototype._zeroDbl = function _zeroDbl() {
63433 var nx;
63434 var ny;
63435 var nz;
63436 // Z = 1
63437 if (this.zOne) {
63438 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
63439 // #doubling-mdbl-2007-bl
63440 // 1M + 5S + 14A
63441
63442 // XX = X1^2
63443 var xx = this.x.redSqr();
63444 // YY = Y1^2
63445 var yy = this.y.redSqr();
63446 // YYYY = YY^2
63447 var yyyy = yy.redSqr();
63448 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
63449 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
63450 s = s.redIAdd(s);
63451 // M = 3 * XX + a; a = 0
63452 var m = xx.redAdd(xx).redIAdd(xx);
63453 // T = M ^ 2 - 2*S
63454 var t = m.redSqr().redISub(s).redISub(s);
63455
63456 // 8 * YYYY
63457 var yyyy8 = yyyy.redIAdd(yyyy);
63458 yyyy8 = yyyy8.redIAdd(yyyy8);
63459 yyyy8 = yyyy8.redIAdd(yyyy8);
63460
63461 // X3 = T
63462 nx = t;
63463 // Y3 = M * (S - T) - 8 * YYYY
63464 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
63465 // Z3 = 2*Y1
63466 nz = this.y.redAdd(this.y);
63467 } else {
63468 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
63469 // #doubling-dbl-2009-l
63470 // 2M + 5S + 13A
63471
63472 // A = X1^2
63473 var a = this.x.redSqr();
63474 // B = Y1^2
63475 var b = this.y.redSqr();
63476 // C = B^2
63477 var c = b.redSqr();
63478 // D = 2 * ((X1 + B)^2 - A - C)
63479 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
63480 d = d.redIAdd(d);
63481 // E = 3 * A
63482 var e = a.redAdd(a).redIAdd(a);
63483 // F = E^2
63484 var f = e.redSqr();
63485
63486 // 8 * C
63487 var c8 = c.redIAdd(c);
63488 c8 = c8.redIAdd(c8);
63489 c8 = c8.redIAdd(c8);
63490
63491 // X3 = F - 2 * D
63492 nx = f.redISub(d).redISub(d);
63493 // Y3 = E * (D - X3) - 8 * C
63494 ny = e.redMul(d.redISub(nx)).redISub(c8);
63495 // Z3 = 2 * Y1 * Z1
63496 nz = this.y.redMul(this.z);
63497 nz = nz.redIAdd(nz);
63498 }
63499
63500 return this.curve.jpoint(nx, ny, nz);
63501 };
63502
63503 JPoint.prototype._threeDbl = function _threeDbl() {
63504 var nx;
63505 var ny;
63506 var nz;
63507 // Z = 1
63508 if (this.zOne) {
63509 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
63510 // #doubling-mdbl-2007-bl
63511 // 1M + 5S + 15A
63512
63513 // XX = X1^2
63514 var xx = this.x.redSqr();
63515 // YY = Y1^2
63516 var yy = this.y.redSqr();
63517 // YYYY = YY^2
63518 var yyyy = yy.redSqr();
63519 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
63520 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
63521 s = s.redIAdd(s);
63522 // M = 3 * XX + a
63523 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
63524 // T = M^2 - 2 * S
63525 var t = m.redSqr().redISub(s).redISub(s);
63526 // X3 = T
63527 nx = t;
63528 // Y3 = M * (S - T) - 8 * YYYY
63529 var yyyy8 = yyyy.redIAdd(yyyy);
63530 yyyy8 = yyyy8.redIAdd(yyyy8);
63531 yyyy8 = yyyy8.redIAdd(yyyy8);
63532 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
63533 // Z3 = 2 * Y1
63534 nz = this.y.redAdd(this.y);
63535 } else {
63536 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
63537 // 3M + 5S
63538
63539 // delta = Z1^2
63540 var delta = this.z.redSqr();
63541 // gamma = Y1^2
63542 var gamma = this.y.redSqr();
63543 // beta = X1 * gamma
63544 var beta = this.x.redMul(gamma);
63545 // alpha = 3 * (X1 - delta) * (X1 + delta)
63546 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
63547 alpha = alpha.redAdd(alpha).redIAdd(alpha);
63548 // X3 = alpha^2 - 8 * beta
63549 var beta4 = beta.redIAdd(beta);
63550 beta4 = beta4.redIAdd(beta4);
63551 var beta8 = beta4.redAdd(beta4);
63552 nx = alpha.redSqr().redISub(beta8);
63553 // Z3 = (Y1 + Z1)^2 - gamma - delta
63554 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
63555 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
63556 var ggamma8 = gamma.redSqr();
63557 ggamma8 = ggamma8.redIAdd(ggamma8);
63558 ggamma8 = ggamma8.redIAdd(ggamma8);
63559 ggamma8 = ggamma8.redIAdd(ggamma8);
63560 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
63561 }
63562
63563 return this.curve.jpoint(nx, ny, nz);
63564 };
63565
63566 JPoint.prototype._dbl = function _dbl() {
63567 var a = this.curve.a;
63568
63569 // 4M + 6S + 10A
63570 var jx = this.x;
63571 var jy = this.y;
63572 var jz = this.z;
63573 var jz4 = jz.redSqr().redSqr();
63574
63575 var jx2 = jx.redSqr();
63576 var jy2 = jy.redSqr();
63577
63578 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
63579
63580 var jxd4 = jx.redAdd(jx);
63581 jxd4 = jxd4.redIAdd(jxd4);
63582 var t1 = jxd4.redMul(jy2);
63583 var nx = c.redSqr().redISub(t1.redAdd(t1));
63584 var t2 = t1.redISub(nx);
63585
63586 var jyd8 = jy2.redSqr();
63587 jyd8 = jyd8.redIAdd(jyd8);
63588 jyd8 = jyd8.redIAdd(jyd8);
63589 jyd8 = jyd8.redIAdd(jyd8);
63590 var ny = c.redMul(t2).redISub(jyd8);
63591 var nz = jy.redAdd(jy).redMul(jz);
63592
63593 return this.curve.jpoint(nx, ny, nz);
63594 };
63595
63596 JPoint.prototype.trpl = function trpl() {
63597 if (!this.curve.zeroA)
63598 return this.dbl().add(this);
63599
63600 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
63601 // 5M + 10S + ...
63602
63603 // XX = X1^2
63604 var xx = this.x.redSqr();
63605 // YY = Y1^2
63606 var yy = this.y.redSqr();
63607 // ZZ = Z1^2
63608 var zz = this.z.redSqr();
63609 // YYYY = YY^2
63610 var yyyy = yy.redSqr();
63611 // M = 3 * XX + a * ZZ2; a = 0
63612 var m = xx.redAdd(xx).redIAdd(xx);
63613 // MM = M^2
63614 var mm = m.redSqr();
63615 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
63616 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
63617 e = e.redIAdd(e);
63618 e = e.redAdd(e).redIAdd(e);
63619 e = e.redISub(mm);
63620 // EE = E^2
63621 var ee = e.redSqr();
63622 // T = 16*YYYY
63623 var t = yyyy.redIAdd(yyyy);
63624 t = t.redIAdd(t);
63625 t = t.redIAdd(t);
63626 t = t.redIAdd(t);
63627 // U = (M + E)^2 - MM - EE - T
63628 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
63629 // X3 = 4 * (X1 * EE - 4 * YY * U)
63630 var yyu4 = yy.redMul(u);
63631 yyu4 = yyu4.redIAdd(yyu4);
63632 yyu4 = yyu4.redIAdd(yyu4);
63633 var nx = this.x.redMul(ee).redISub(yyu4);
63634 nx = nx.redIAdd(nx);
63635 nx = nx.redIAdd(nx);
63636 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
63637 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
63638 ny = ny.redIAdd(ny);
63639 ny = ny.redIAdd(ny);
63640 ny = ny.redIAdd(ny);
63641 // Z3 = (Z1 + E)^2 - ZZ - EE
63642 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
63643
63644 return this.curve.jpoint(nx, ny, nz);
63645 };
63646
63647 JPoint.prototype.mul = function mul(k, kbase) {
63648 k = new BN(k, kbase);
63649
63650 return this.curve._wnafMul(this, k);
63651 };
63652
63653 JPoint.prototype.eq = function eq(p) {
63654 if (p.type === 'affine')
63655 return this.eq(p.toJ());
63656
63657 if (this === p)
63658 return true;
63659
63660 // x1 * z2^2 == x2 * z1^2
63661 var z2 = this.z.redSqr();
63662 var pz2 = p.z.redSqr();
63663 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
63664 return false;
63665
63666 // y1 * z2^3 == y2 * z1^3
63667 var z3 = z2.redMul(this.z);
63668 var pz3 = pz2.redMul(p.z);
63669 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
63670 };
63671
63672 JPoint.prototype.eqXToP = function eqXToP(x) {
63673 var zs = this.z.redSqr();
63674 var rx = x.toRed(this.curve.red).redMul(zs);
63675 if (this.x.cmp(rx) === 0)
63676 return true;
63677
63678 var xc = x.clone();
63679 var t = this.curve.redN.redMul(zs);
63680 for (;;) {
63681 xc.iadd(this.curve.n);
63682 if (xc.cmp(this.curve.p) >= 0)
63683 return false;
63684
63685 rx.redIAdd(t);
63686 if (this.x.cmp(rx) === 0)
63687 return true;
63688 }
63689 return false;
63690 };
63691
63692 JPoint.prototype.inspect = function inspect() {
63693 if (this.isInfinity())
63694 return '<EC JPoint Infinity>';
63695 return '<EC JPoint x: ' + this.x.toString(16, 2) +
63696 ' y: ' + this.y.toString(16, 2) +
63697 ' z: ' + this.z.toString(16, 2) + '>';
63698 };
63699
63700 JPoint.prototype.isInfinity = function isInfinity() {
63701 // XXX This code assumes that zero is always zero in red
63702 return this.z.cmpn(0) === 0;
63703 };
63704
63705 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
63706 'use strict';
63707
63708 var curves = exports;
63709
63710 var hash = require('hash.js');
63711 var elliptic = require('../elliptic');
63712
63713 var assert = elliptic.utils.assert;
63714
63715 function PresetCurve(options) {
63716 if (options.type === 'short')
63717 this.curve = new elliptic.curve.short(options);
63718 else if (options.type === 'edwards')
63719 this.curve = new elliptic.curve.edwards(options);
63720 else
63721 this.curve = new elliptic.curve.mont(options);
63722 this.g = this.curve.g;
63723 this.n = this.curve.n;
63724 this.hash = options.hash;
63725
63726 assert(this.g.validate(), 'Invalid curve');
63727 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
63728 }
63729 curves.PresetCurve = PresetCurve;
63730
63731 function defineCurve(name, options) {
63732 Object.defineProperty(curves, name, {
63733 configurable: true,
63734 enumerable: true,
63735 get: function() {
63736 var curve = new PresetCurve(options);
63737 Object.defineProperty(curves, name, {
63738 configurable: true,
63739 enumerable: true,
63740 value: curve
63741 });
63742 return curve;
63743 }
63744 });
63745 }
63746
63747 defineCurve('p192', {
63748 type: 'short',
63749 prime: 'p192',
63750 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
63751 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
63752 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
63753 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
63754 hash: hash.sha256,
63755 gRed: false,
63756 g: [
63757 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
63758 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
63759 ]
63760 });
63761
63762 defineCurve('p224', {
63763 type: 'short',
63764 prime: 'p224',
63765 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
63766 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
63767 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
63768 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
63769 hash: hash.sha256,
63770 gRed: false,
63771 g: [
63772 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
63773 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
63774 ]
63775 });
63776
63777 defineCurve('p256', {
63778 type: 'short',
63779 prime: null,
63780 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
63781 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
63782 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
63783 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
63784 hash: hash.sha256,
63785 gRed: false,
63786 g: [
63787 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
63788 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
63789 ]
63790 });
63791
63792 defineCurve('p384', {
63793 type: 'short',
63794 prime: null,
63795 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
63796 'fffffffe ffffffff 00000000 00000000 ffffffff',
63797 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
63798 'fffffffe ffffffff 00000000 00000000 fffffffc',
63799 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
63800 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
63801 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
63802 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
63803 hash: hash.sha384,
63804 gRed: false,
63805 g: [
63806 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
63807 '5502f25d bf55296c 3a545e38 72760ab7',
63808 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
63809 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
63810 ]
63811 });
63812
63813 defineCurve('p521', {
63814 type: 'short',
63815 prime: null,
63816 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
63817 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
63818 'ffffffff ffffffff ffffffff ffffffff ffffffff',
63819 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
63820 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
63821 'ffffffff ffffffff ffffffff ffffffff fffffffc',
63822 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
63823 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
63824 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
63825 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
63826 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
63827 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
63828 hash: hash.sha512,
63829 gRed: false,
63830 g: [
63831 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
63832 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
63833 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
63834 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
63835 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
63836 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
63837 ]
63838 });
63839
63840 defineCurve('curve25519', {
63841 type: 'mont',
63842 prime: 'p25519',
63843 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
63844 a: '76d06',
63845 b: '1',
63846 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
63847 hash: hash.sha256,
63848 gRed: false,
63849 g: [
63850 '9'
63851 ]
63852 });
63853
63854 defineCurve('ed25519', {
63855 type: 'edwards',
63856 prime: 'p25519',
63857 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
63858 a: '-1',
63859 c: '1',
63860 // -121665 * (121666^(-1)) (mod P)
63861 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
63862 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
63863 hash: hash.sha256,
63864 gRed: false,
63865 g: [
63866 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
63867
63868 // 4/5
63869 '6666666666666666666666666666666666666666666666666666666666666658'
63870 ]
63871 });
63872
63873 var pre;
63874 try {
63875 pre = require('./precomputed/secp256k1');
63876 } catch (e) {
63877 pre = undefined;
63878 }
63879
63880 defineCurve('secp256k1', {
63881 type: 'short',
63882 prime: 'k256',
63883 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
63884 a: '0',
63885 b: '7',
63886 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
63887 h: '1',
63888 hash: hash.sha256,
63889
63890 // Precomputed endomorphism
63891 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
63892 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
63893 basis: [
63894 {
63895 a: '3086d221a7d46bcde86c90e49284eb15',
63896 b: '-e4437ed6010e88286f547fa90abfe4c3'
63897 },
63898 {
63899 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
63900 b: '3086d221a7d46bcde86c90e49284eb15'
63901 }
63902 ],
63903
63904 gRed: false,
63905 g: [
63906 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
63907 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
63908 pre
63909 ]
63910 });
63911
63912 },{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
63913 'use strict';
63914
63915 var BN = require('bn.js');
63916 var elliptic = require('../../elliptic');
63917 var utils = elliptic.utils;
63918 var assert = utils.assert;
63919
63920 var KeyPair = require('./key');
63921 var Signature = require('./signature');
63922
63923 function EC(options) {
63924 if (!(this instanceof EC))
63925 return new EC(options);
63926
63927 // Shortcut `elliptic.ec(curve-name)`
63928 if (typeof options === 'string') {
63929 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
63930
63931 options = elliptic.curves[options];
63932 }
63933
63934 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
63935 if (options instanceof elliptic.curves.PresetCurve)
63936 options = { curve: options };
63937
63938 this.curve = options.curve.curve;
63939 this.n = this.curve.n;
63940 this.nh = this.n.ushrn(1);
63941 this.g = this.curve.g;
63942
63943 // Point on curve
63944 this.g = options.curve.g;
63945 this.g.precompute(options.curve.n.bitLength() + 1);
63946
63947 // Hash for function for DRBG
63948 this.hash = options.hash || options.curve.hash;
63949 }
63950 module.exports = EC;
63951
63952 EC.prototype.keyPair = function keyPair(options) {
63953 return new KeyPair(this, options);
63954 };
63955
63956 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
63957 return KeyPair.fromPrivate(this, priv, enc);
63958 };
63959
63960 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
63961 return KeyPair.fromPublic(this, pub, enc);
63962 };
63963
63964 EC.prototype.genKeyPair = function genKeyPair(options) {
63965 if (!options)
63966 options = {};
63967
63968 // Instantiate Hmac_DRBG
63969 var drbg = new elliptic.hmacDRBG({
63970 hash: this.hash,
63971 pers: options.pers,
63972 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
63973 nonce: this.n.toArray()
63974 });
63975
63976 var bytes = this.n.byteLength();
63977 var ns2 = this.n.sub(new BN(2));
63978 do {
63979 var priv = new BN(drbg.generate(bytes));
63980 if (priv.cmp(ns2) > 0)
63981 continue;
63982
63983 priv.iaddn(1);
63984 return this.keyFromPrivate(priv);
63985 } while (true);
63986 };
63987
63988 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
63989 var delta = msg.byteLength() * 8 - this.n.bitLength();
63990 if (delta > 0)
63991 msg = msg.ushrn(delta);
63992 if (!truncOnly && msg.cmp(this.n) >= 0)
63993 return msg.sub(this.n);
63994 else
63995 return msg;
63996 };
63997
63998 EC.prototype.sign = function sign(msg, key, enc, options) {
63999 if (typeof enc === 'object') {
64000 options = enc;
64001 enc = null;
64002 }
64003 if (!options)
64004 options = {};
64005
64006 key = this.keyFromPrivate(key, enc);
64007 msg = this._truncateToN(new BN(msg, 16));
64008
64009 // Zero-extend key to provide enough entropy
64010 var bytes = this.n.byteLength();
64011 var bkey = key.getPrivate().toArray('be', bytes);
64012
64013 // Zero-extend nonce to have the same byte size as N
64014 var nonce = msg.toArray('be', bytes);
64015
64016 // Instantiate Hmac_DRBG
64017 var drbg = new elliptic.hmacDRBG({
64018 hash: this.hash,
64019 entropy: bkey,
64020 nonce: nonce,
64021 pers: options.pers,
64022 persEnc: options.persEnc
64023 });
64024
64025 // Number of bytes to generate
64026 var ns1 = this.n.sub(new BN(1));
64027
64028 for (var iter = 0; true; iter++) {
64029 var k = options.k ?
64030 options.k(iter) :
64031 new BN(drbg.generate(this.n.byteLength()));
64032 k = this._truncateToN(k, true);
64033 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
64034 continue;
64035
64036 var kp = this.g.mul(k);
64037 if (kp.isInfinity())
64038 continue;
64039
64040 var kpX = kp.getX();
64041 var r = kpX.umod(this.n);
64042 if (r.cmpn(0) === 0)
64043 continue;
64044
64045 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
64046 s = s.umod(this.n);
64047 if (s.cmpn(0) === 0)
64048 continue;
64049
64050 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
64051 (kpX.cmp(r) !== 0 ? 2 : 0);
64052
64053 // Use complement of `s`, if it is > `n / 2`
64054 if (options.canonical && s.cmp(this.nh) > 0) {
64055 s = this.n.sub(s);
64056 recoveryParam ^= 1;
64057 }
64058
64059 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
64060 }
64061 };
64062
64063 EC.prototype.verify = function verify(msg, signature, key, enc) {
64064 msg = this._truncateToN(new BN(msg, 16));
64065 key = this.keyFromPublic(key, enc);
64066 signature = new Signature(signature, 'hex');
64067
64068 // Perform primitive values validation
64069 var r = signature.r;
64070 var s = signature.s;
64071 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
64072 return false;
64073 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
64074 return false;
64075
64076 // Validate signature
64077 var sinv = s.invm(this.n);
64078 var u1 = sinv.mul(msg).umod(this.n);
64079 var u2 = sinv.mul(r).umod(this.n);
64080
64081 if (!this.curve._maxwellTrick) {
64082 var p = this.g.mulAdd(u1, key.getPublic(), u2);
64083 if (p.isInfinity())
64084 return false;
64085
64086 return p.getX().umod(this.n).cmp(r) === 0;
64087 }
64088
64089 // NOTE: Greg Maxwell's trick, inspired by:
64090 // https://git.io/vad3K
64091
64092 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
64093 if (p.isInfinity())
64094 return false;
64095
64096 // Compare `p.x` of Jacobian point with `r`,
64097 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
64098 // inverse of `p.z^2`
64099 return p.eqXToP(r);
64100 };
64101
64102 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
64103 assert((3 & j) === j, 'The recovery param is more than two bits');
64104 signature = new Signature(signature, enc);
64105
64106 var n = this.n;
64107 var e = new BN(msg);
64108 var r = signature.r;
64109 var s = signature.s;
64110
64111 // A set LSB signifies that the y-coordinate is odd
64112 var isYOdd = j & 1;
64113 var isSecondKey = j >> 1;
64114 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
64115 throw new Error('Unable to find sencond key candinate');
64116
64117 // 1.1. Let x = r + jn.
64118 if (isSecondKey)
64119 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
64120 else
64121 r = this.curve.pointFromX(r, isYOdd);
64122
64123 var rInv = signature.r.invm(n);
64124 var s1 = n.sub(e).mul(rInv).umod(n);
64125 var s2 = s.mul(rInv).umod(n);
64126
64127 // 1.6.1 Compute Q = r^-1 (sR - eG)
64128 // Q = r^-1 (sR + -eG)
64129 return this.g.mulAdd(s1, r, s2);
64130 };
64131
64132 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
64133 signature = new Signature(signature, enc);
64134 if (signature.recoveryParam !== null)
64135 return signature.recoveryParam;
64136
64137 for (var i = 0; i < 4; i++) {
64138 var Qprime;
64139 try {
64140 Qprime = this.recoverPubKey(e, signature, i);
64141 } catch (e) {
64142 continue;
64143 }
64144
64145 if (Qprime.eq(Q))
64146 return i;
64147 }
64148 throw new Error('Unable to find valid recovery factor');
64149 };
64150
64151 },{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
64152 'use strict';
64153
64154 var BN = require('bn.js');
64155 var elliptic = require('../../elliptic');
64156 var utils = elliptic.utils;
64157 var assert = utils.assert;
64158
64159 function KeyPair(ec, options) {
64160 this.ec = ec;
64161 this.priv = null;
64162 this.pub = null;
64163
64164 // KeyPair(ec, { priv: ..., pub: ... })
64165 if (options.priv)
64166 this._importPrivate(options.priv, options.privEnc);
64167 if (options.pub)
64168 this._importPublic(options.pub, options.pubEnc);
64169 }
64170 module.exports = KeyPair;
64171
64172 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
64173 if (pub instanceof KeyPair)
64174 return pub;
64175
64176 return new KeyPair(ec, {
64177 pub: pub,
64178 pubEnc: enc
64179 });
64180 };
64181
64182 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
64183 if (priv instanceof KeyPair)
64184 return priv;
64185
64186 return new KeyPair(ec, {
64187 priv: priv,
64188 privEnc: enc
64189 });
64190 };
64191
64192 KeyPair.prototype.validate = function validate() {
64193 var pub = this.getPublic();
64194
64195 if (pub.isInfinity())
64196 return { result: false, reason: 'Invalid public key' };
64197 if (!pub.validate())
64198 return { result: false, reason: 'Public key is not a point' };
64199 if (!pub.mul(this.ec.curve.n).isInfinity())
64200 return { result: false, reason: 'Public key * N != O' };
64201
64202 return { result: true, reason: null };
64203 };
64204
64205 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
64206 // compact is optional argument
64207 if (typeof compact === 'string') {
64208 enc = compact;
64209 compact = null;
64210 }
64211
64212 if (!this.pub)
64213 this.pub = this.ec.g.mul(this.priv);
64214
64215 if (!enc)
64216 return this.pub;
64217
64218 return this.pub.encode(enc, compact);
64219 };
64220
64221 KeyPair.prototype.getPrivate = function getPrivate(enc) {
64222 if (enc === 'hex')
64223 return this.priv.toString(16, 2);
64224 else
64225 return this.priv;
64226 };
64227
64228 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
64229 this.priv = new BN(key, enc || 16);
64230
64231 // Ensure that the priv won't be bigger than n, otherwise we may fail
64232 // in fixed multiplication method
64233 this.priv = this.priv.umod(this.ec.curve.n);
64234 };
64235
64236 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
64237 if (key.x || key.y) {
64238 // Montgomery points only have an `x` coordinate.
64239 // Weierstrass/Edwards points on the other hand have both `x` and
64240 // `y` coordinates.
64241 if (this.ec.curve.type === 'mont') {
64242 assert(key.x, 'Need x coordinate');
64243 } else if (this.ec.curve.type === 'short' ||
64244 this.ec.curve.type === 'edwards') {
64245 assert(key.x && key.y, 'Need both x and y coordinate');
64246 }
64247 this.pub = this.ec.curve.point(key.x, key.y);
64248 return;
64249 }
64250 this.pub = this.ec.curve.decodePoint(key, enc);
64251 };
64252
64253 // ECDH
64254 KeyPair.prototype.derive = function derive(pub) {
64255 return pub.mul(this.priv).getX();
64256 };
64257
64258 // ECDSA
64259 KeyPair.prototype.sign = function sign(msg, enc, options) {
64260 return this.ec.sign(msg, this, enc, options);
64261 };
64262
64263 KeyPair.prototype.verify = function verify(msg, signature) {
64264 return this.ec.verify(msg, signature, this);
64265 };
64266
64267 KeyPair.prototype.inspect = function inspect() {
64268 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
64269 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
64270 };
64271
64272 },{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
64273 'use strict';
64274
64275 var BN = require('bn.js');
64276
64277 var elliptic = require('../../elliptic');
64278 var utils = elliptic.utils;
64279 var assert = utils.assert;
64280
64281 function Signature(options, enc) {
64282 if (options instanceof Signature)
64283 return options;
64284
64285 if (this._importDER(options, enc))
64286 return;
64287
64288 assert(options.r && options.s, 'Signature without r or s');
64289 this.r = new BN(options.r, 16);
64290 this.s = new BN(options.s, 16);
64291 if (options.recoveryParam === undefined)
64292 this.recoveryParam = null;
64293 else
64294 this.recoveryParam = options.recoveryParam;
64295 }
64296 module.exports = Signature;
64297
64298 function Position() {
64299 this.place = 0;
64300 }
64301
64302 function getLength(buf, p) {
64303 var initial = buf[p.place++];
64304 if (!(initial & 0x80)) {
64305 return initial;
64306 }
64307 var octetLen = initial & 0xf;
64308 var val = 0;
64309 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
64310 val <<= 8;
64311 val |= buf[off];
64312 }
64313 p.place = off;
64314 return val;
64315 }
64316
64317 function rmPadding(buf) {
64318 var i = 0;
64319 var len = buf.length - 1;
64320 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
64321 i++;
64322 }
64323 if (i === 0) {
64324 return buf;
64325 }
64326 return buf.slice(i);
64327 }
64328
64329 Signature.prototype._importDER = function _importDER(data, enc) {
64330 data = utils.toArray(data, enc);
64331 var p = new Position();
64332 if (data[p.place++] !== 0x30) {
64333 return false;
64334 }
64335 var len = getLength(data, p);
64336 if ((len + p.place) !== data.length) {
64337 return false;
64338 }
64339 if (data[p.place++] !== 0x02) {
64340 return false;
64341 }
64342 var rlen = getLength(data, p);
64343 var r = data.slice(p.place, rlen + p.place);
64344 p.place += rlen;
64345 if (data[p.place++] !== 0x02) {
64346 return false;
64347 }
64348 var slen = getLength(data, p);
64349 if (data.length !== slen + p.place) {
64350 return false;
64351 }
64352 var s = data.slice(p.place, slen + p.place);
64353 if (r[0] === 0 && (r[1] & 0x80)) {
64354 r = r.slice(1);
64355 }
64356 if (s[0] === 0 && (s[1] & 0x80)) {
64357 s = s.slice(1);
64358 }
64359
64360 this.r = new BN(r);
64361 this.s = new BN(s);
64362 this.recoveryParam = null;
64363
64364 return true;
64365 };
64366
64367 function constructLength(arr, len) {
64368 if (len < 0x80) {
64369 arr.push(len);
64370 return;
64371 }
64372 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
64373 arr.push(octets | 0x80);
64374 while (--octets) {
64375 arr.push((len >>> (octets << 3)) & 0xff);
64376 }
64377 arr.push(len);
64378 }
64379
64380 Signature.prototype.toDER = function toDER(enc) {
64381 var r = this.r.toArray();
64382 var s = this.s.toArray();
64383
64384 // Pad values
64385 if (r[0] & 0x80)
64386 r = [ 0 ].concat(r);
64387 // Pad values
64388 if (s[0] & 0x80)
64389 s = [ 0 ].concat(s);
64390
64391 r = rmPadding(r);
64392 s = rmPadding(s);
64393
64394 while (!s[0] && !(s[1] & 0x80)) {
64395 s = s.slice(1);
64396 }
64397 var arr = [ 0x02 ];
64398 constructLength(arr, r.length);
64399 arr = arr.concat(r);
64400 arr.push(0x02);
64401 constructLength(arr, s.length);
64402 var backHalf = arr.concat(s);
64403 var res = [ 0x30 ];
64404 constructLength(res, backHalf.length);
64405 res = res.concat(backHalf);
64406 return utils.encode(res, enc);
64407 };
64408
64409 },{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
64410 'use strict';
64411
64412 var hash = require('hash.js');
64413 var elliptic = require('../../elliptic');
64414 var utils = elliptic.utils;
64415 var assert = utils.assert;
64416 var parseBytes = utils.parseBytes;
64417 var KeyPair = require('./key');
64418 var Signature = require('./signature');
64419
64420 function EDDSA(curve) {
64421 assert(curve === 'ed25519', 'only tested with ed25519 so far');
64422
64423 if (!(this instanceof EDDSA))
64424 return new EDDSA(curve);
64425
64426 var curve = elliptic.curves[curve].curve;
64427 this.curve = curve;
64428 this.g = curve.g;
64429 this.g.precompute(curve.n.bitLength() + 1);
64430
64431 this.pointClass = curve.point().constructor;
64432 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
64433 this.hash = hash.sha512;
64434 }
64435
64436 module.exports = EDDSA;
64437
64438 /**
64439 * @param {Array|String} message - message bytes
64440 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
64441 * @returns {Signature} - signature
64442 */
64443 EDDSA.prototype.sign = function sign(message, secret) {
64444 message = parseBytes(message);
64445 var key = this.keyFromSecret(secret);
64446 var r = this.hashInt(key.messagePrefix(), message);
64447 var R = this.g.mul(r);
64448 var Rencoded = this.encodePoint(R);
64449 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
64450 .mul(key.priv());
64451 var S = r.add(s_).umod(this.curve.n);
64452 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
64453 };
64454
64455 /**
64456 * @param {Array} message - message bytes
64457 * @param {Array|String|Signature} sig - sig bytes
64458 * @param {Array|String|Point|KeyPair} pub - public key
64459 * @returns {Boolean} - true if public key matches sig of message
64460 */
64461 EDDSA.prototype.verify = function verify(message, sig, pub) {
64462 message = parseBytes(message);
64463 sig = this.makeSignature(sig);
64464 var key = this.keyFromPublic(pub);
64465 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
64466 var SG = this.g.mul(sig.S());
64467 var RplusAh = sig.R().add(key.pub().mul(h));
64468 return RplusAh.eq(SG);
64469 };
64470
64471 EDDSA.prototype.hashInt = function hashInt() {
64472 var hash = this.hash();
64473 for (var i = 0; i < arguments.length; i++)
64474 hash.update(arguments[i]);
64475 return utils.intFromLE(hash.digest()).umod(this.curve.n);
64476 };
64477
64478 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
64479 return KeyPair.fromPublic(this, pub);
64480 };
64481
64482 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
64483 return KeyPair.fromSecret(this, secret);
64484 };
64485
64486 EDDSA.prototype.makeSignature = function makeSignature(sig) {
64487 if (sig instanceof Signature)
64488 return sig;
64489 return new Signature(this, sig);
64490 };
64491
64492 /**
64493 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
64494 *
64495 * EDDSA defines methods for encoding and decoding points and integers. These are
64496 * helper convenience methods, that pass along to utility functions implied
64497 * parameters.
64498 *
64499 */
64500 EDDSA.prototype.encodePoint = function encodePoint(point) {
64501 var enc = point.getY().toArray('le', this.encodingLength);
64502 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
64503 return enc;
64504 };
64505
64506 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
64507 bytes = utils.parseBytes(bytes);
64508
64509 var lastIx = bytes.length - 1;
64510 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
64511 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
64512
64513 var y = utils.intFromLE(normed);
64514 return this.curve.pointFromY(y, xIsOdd);
64515 };
64516
64517 EDDSA.prototype.encodeInt = function encodeInt(num) {
64518 return num.toArray('le', this.encodingLength);
64519 };
64520
64521 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
64522 return utils.intFromLE(bytes);
64523 };
64524
64525 EDDSA.prototype.isPoint = function isPoint(val) {
64526 return val instanceof this.pointClass;
64527 };
64528
64529 },{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
64530 'use strict';
64531
64532 var elliptic = require('../../elliptic');
64533 var utils = elliptic.utils;
64534 var assert = utils.assert;
64535 var parseBytes = utils.parseBytes;
64536 var cachedProperty = utils.cachedProperty;
64537
64538 /**
64539 * @param {EDDSA} eddsa - instance
64540 * @param {Object} params - public/private key parameters
64541 *
64542 * @param {Array<Byte>} [params.secret] - secret seed bytes
64543 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
64544 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
64545 *
64546 */
64547 function KeyPair(eddsa, params) {
64548 this.eddsa = eddsa;
64549 this._secret = parseBytes(params.secret);
64550 if (eddsa.isPoint(params.pub))
64551 this._pub = params.pub;
64552 else
64553 this._pubBytes = parseBytes(params.pub);
64554 }
64555
64556 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
64557 if (pub instanceof KeyPair)
64558 return pub;
64559 return new KeyPair(eddsa, { pub: pub });
64560 };
64561
64562 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
64563 if (secret instanceof KeyPair)
64564 return secret;
64565 return new KeyPair(eddsa, { secret: secret });
64566 };
64567
64568 KeyPair.prototype.secret = function secret() {
64569 return this._secret;
64570 };
64571
64572 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
64573 return this.eddsa.encodePoint(this.pub());
64574 });
64575
64576 cachedProperty(KeyPair, 'pub', function pub() {
64577 if (this._pubBytes)
64578 return this.eddsa.decodePoint(this._pubBytes);
64579 return this.eddsa.g.mul(this.priv());
64580 });
64581
64582 cachedProperty(KeyPair, 'privBytes', function privBytes() {
64583 var eddsa = this.eddsa;
64584 var hash = this.hash();
64585 var lastIx = eddsa.encodingLength - 1;
64586
64587 var a = hash.slice(0, eddsa.encodingLength);
64588 a[0] &= 248;
64589 a[lastIx] &= 127;
64590 a[lastIx] |= 64;
64591
64592 return a;
64593 });
64594
64595 cachedProperty(KeyPair, 'priv', function priv() {
64596 return this.eddsa.decodeInt(this.privBytes());
64597 });
64598
64599 cachedProperty(KeyPair, 'hash', function hash() {
64600 return this.eddsa.hash().update(this.secret()).digest();
64601 });
64602
64603 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
64604 return this.hash().slice(this.eddsa.encodingLength);
64605 });
64606
64607 KeyPair.prototype.sign = function sign(message) {
64608 assert(this._secret, 'KeyPair can only verify');
64609 return this.eddsa.sign(message, this);
64610 };
64611
64612 KeyPair.prototype.verify = function verify(message, sig) {
64613 return this.eddsa.verify(message, sig, this);
64614 };
64615
64616 KeyPair.prototype.getSecret = function getSecret(enc) {
64617 assert(this._secret, 'KeyPair is public only');
64618 return utils.encode(this.secret(), enc);
64619 };
64620
64621 KeyPair.prototype.getPublic = function getPublic(enc) {
64622 return utils.encode(this.pubBytes(), enc);
64623 };
64624
64625 module.exports = KeyPair;
64626
64627 },{"../../elliptic":39}],51:[function(require,module,exports){
64628 'use strict';
64629
64630 var BN = require('bn.js');
64631 var elliptic = require('../../elliptic');
64632 var utils = elliptic.utils;
64633 var assert = utils.assert;
64634 var cachedProperty = utils.cachedProperty;
64635 var parseBytes = utils.parseBytes;
64636
64637 /**
64638 * @param {EDDSA} eddsa - eddsa instance
64639 * @param {Array<Bytes>|Object} sig -
64640 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
64641 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
64642 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
64643 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
64644 */
64645 function Signature(eddsa, sig) {
64646 this.eddsa = eddsa;
64647
64648 if (typeof sig !== 'object')
64649 sig = parseBytes(sig);
64650
64651 if (Array.isArray(sig)) {
64652 sig = {
64653 R: sig.slice(0, eddsa.encodingLength),
64654 S: sig.slice(eddsa.encodingLength)
64655 };
64656 }
64657
64658 assert(sig.R && sig.S, 'Signature without R or S');
64659
64660 if (eddsa.isPoint(sig.R))
64661 this._R = sig.R;
64662 if (sig.S instanceof BN)
64663 this._S = sig.S;
64664
64665 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
64666 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
64667 }
64668
64669 cachedProperty(Signature, 'S', function S() {
64670 return this.eddsa.decodeInt(this.Sencoded());
64671 });
64672
64673 cachedProperty(Signature, 'R', function R() {
64674 return this.eddsa.decodePoint(this.Rencoded());
64675 });
64676
64677 cachedProperty(Signature, 'Rencoded', function Rencoded() {
64678 return this.eddsa.encodePoint(this.R());
64679 });
64680
64681 cachedProperty(Signature, 'Sencoded', function Sencoded() {
64682 return this.eddsa.encodeInt(this.S());
64683 });
64684
64685 Signature.prototype.toBytes = function toBytes() {
64686 return this.Rencoded().concat(this.Sencoded());
64687 };
64688
64689 Signature.prototype.toHex = function toHex() {
64690 return utils.encode(this.toBytes(), 'hex').toUpperCase();
64691 };
64692
64693 module.exports = Signature;
64694
64695 },{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
64696 'use strict';
64697
64698 var hash = require('hash.js');
64699 var elliptic = require('../elliptic');
64700 var utils = elliptic.utils;
64701 var assert = utils.assert;
64702
64703 function HmacDRBG(options) {
64704 if (!(this instanceof HmacDRBG))
64705 return new HmacDRBG(options);
64706 this.hash = options.hash;
64707 this.predResist = !!options.predResist;
64708
64709 this.outLen = this.hash.outSize;
64710 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
64711
64712 this.reseed = null;
64713 this.reseedInterval = null;
64714 this.K = null;
64715 this.V = null;
64716
64717 var entropy = utils.toArray(options.entropy, options.entropyEnc);
64718 var nonce = utils.toArray(options.nonce, options.nonceEnc);
64719 var pers = utils.toArray(options.pers, options.persEnc);
64720 assert(entropy.length >= (this.minEntropy / 8),
64721 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
64722 this._init(entropy, nonce, pers);
64723 }
64724 module.exports = HmacDRBG;
64725
64726 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
64727 var seed = entropy.concat(nonce).concat(pers);
64728
64729 this.K = new Array(this.outLen / 8);
64730 this.V = new Array(this.outLen / 8);
64731 for (var i = 0; i < this.V.length; i++) {
64732 this.K[i] = 0x00;
64733 this.V[i] = 0x01;
64734 }
64735
64736 this._update(seed);
64737 this.reseed = 1;
64738 this.reseedInterval = 0x1000000000000; // 2^48
64739 };
64740
64741 HmacDRBG.prototype._hmac = function hmac() {
64742 return new hash.hmac(this.hash, this.K);
64743 };
64744
64745 HmacDRBG.prototype._update = function update(seed) {
64746 var kmac = this._hmac()
64747 .update(this.V)
64748 .update([ 0x00 ]);
64749 if (seed)
64750 kmac = kmac.update(seed);
64751 this.K = kmac.digest();
64752 this.V = this._hmac().update(this.V).digest();
64753 if (!seed)
64754 return;
64755
64756 this.K = this._hmac()
64757 .update(this.V)
64758 .update([ 0x01 ])
64759 .update(seed)
64760 .digest();
64761 this.V = this._hmac().update(this.V).digest();
64762 };
64763
64764 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
64765 // Optional entropy enc
64766 if (typeof entropyEnc !== 'string') {
64767 addEnc = add;
64768 add = entropyEnc;
64769 entropyEnc = null;
64770 }
64771
64772 entropy = utils.toBuffer(entropy, entropyEnc);
64773 add = utils.toBuffer(add, addEnc);
64774
64775 assert(entropy.length >= (this.minEntropy / 8),
64776 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
64777
64778 this._update(entropy.concat(add || []));
64779 this.reseed = 1;
64780 };
64781
64782 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
64783 if (this.reseed > this.reseedInterval)
64784 throw new Error('Reseed is required');
64785
64786 // Optional encoding
64787 if (typeof enc !== 'string') {
64788 addEnc = add;
64789 add = enc;
64790 enc = null;
64791 }
64792
64793 // Optional additional data
64794 if (add) {
64795 add = utils.toArray(add, addEnc);
64796 this._update(add);
64797 }
64798
64799 var temp = [];
64800 while (temp.length < len) {
64801 this.V = this._hmac().update(this.V).digest();
64802 temp = temp.concat(this.V);
64803 }
64804
64805 var res = temp.slice(0, len);
64806 this._update(add);
64807 this.reseed++;
64808 return utils.encode(res, enc);
64809 };
64810
64811 },{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
64812 module.exports = {
64813 doubles: {
64814 step: 4,
64815 points: [
64816 [
64817 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
64818 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
64819 ],
64820 [
64821 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
64822 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
64823 ],
64824 [
64825 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
64826 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
64827 ],
64828 [
64829 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
64830 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
64831 ],
64832 [
64833 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
64834 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
64835 ],
64836 [
64837 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
64838 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
64839 ],
64840 [
64841 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
64842 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
64843 ],
64844 [
64845 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
64846 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
64847 ],
64848 [
64849 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
64850 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
64851 ],
64852 [
64853 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
64854 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
64855 ],
64856 [
64857 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
64858 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
64859 ],
64860 [
64861 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
64862 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
64863 ],
64864 [
64865 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
64866 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
64867 ],
64868 [
64869 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
64870 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
64871 ],
64872 [
64873 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
64874 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
64875 ],
64876 [
64877 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
64878 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
64879 ],
64880 [
64881 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
64882 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
64883 ],
64884 [
64885 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
64886 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
64887 ],
64888 [
64889 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
64890 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
64891 ],
64892 [
64893 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
64894 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
64895 ],
64896 [
64897 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
64898 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
64899 ],
64900 [
64901 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
64902 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
64903 ],
64904 [
64905 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
64906 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
64907 ],
64908 [
64909 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
64910 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
64911 ],
64912 [
64913 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
64914 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
64915 ],
64916 [
64917 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
64918 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
64919 ],
64920 [
64921 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
64922 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
64923 ],
64924 [
64925 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
64926 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
64927 ],
64928 [
64929 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
64930 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
64931 ],
64932 [
64933 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
64934 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
64935 ],
64936 [
64937 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
64938 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
64939 ],
64940 [
64941 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
64942 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
64943 ],
64944 [
64945 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
64946 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
64947 ],
64948 [
64949 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
64950 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
64951 ],
64952 [
64953 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
64954 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
64955 ],
64956 [
64957 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
64958 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
64959 ],
64960 [
64961 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
64962 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
64963 ],
64964 [
64965 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
64966 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
64967 ],
64968 [
64969 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
64970 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
64971 ],
64972 [
64973 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
64974 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
64975 ],
64976 [
64977 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
64978 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
64979 ],
64980 [
64981 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
64982 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
64983 ],
64984 [
64985 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
64986 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
64987 ],
64988 [
64989 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
64990 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
64991 ],
64992 [
64993 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
64994 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
64995 ],
64996 [
64997 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
64998 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
64999 ],
65000 [
65001 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
65002 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
65003 ],
65004 [
65005 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
65006 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
65007 ],
65008 [
65009 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
65010 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
65011 ],
65012 [
65013 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
65014 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
65015 ],
65016 [
65017 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
65018 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
65019 ],
65020 [
65021 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
65022 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
65023 ],
65024 [
65025 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
65026 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
65027 ],
65028 [
65029 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
65030 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
65031 ],
65032 [
65033 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
65034 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
65035 ],
65036 [
65037 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
65038 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
65039 ],
65040 [
65041 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
65042 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
65043 ],
65044 [
65045 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
65046 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
65047 ],
65048 [
65049 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
65050 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
65051 ],
65052 [
65053 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
65054 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
65055 ],
65056 [
65057 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
65058 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
65059 ],
65060 [
65061 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
65062 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
65063 ],
65064 [
65065 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
65066 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
65067 ],
65068 [
65069 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
65070 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
65071 ],
65072 [
65073 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
65074 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
65075 ]
65076 ]
65077 },
65078 naf: {
65079 wnd: 7,
65080 points: [
65081 [
65082 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
65083 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
65084 ],
65085 [
65086 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
65087 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
65088 ],
65089 [
65090 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
65091 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
65092 ],
65093 [
65094 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
65095 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
65096 ],
65097 [
65098 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
65099 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
65100 ],
65101 [
65102 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
65103 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
65104 ],
65105 [
65106 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
65107 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
65108 ],
65109 [
65110 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
65111 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
65112 ],
65113 [
65114 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
65115 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
65116 ],
65117 [
65118 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
65119 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
65120 ],
65121 [
65122 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
65123 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
65124 ],
65125 [
65126 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
65127 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
65128 ],
65129 [
65130 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
65131 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
65132 ],
65133 [
65134 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
65135 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
65136 ],
65137 [
65138 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
65139 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
65140 ],
65141 [
65142 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
65143 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
65144 ],
65145 [
65146 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
65147 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
65148 ],
65149 [
65150 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
65151 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
65152 ],
65153 [
65154 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
65155 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
65156 ],
65157 [
65158 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
65159 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
65160 ],
65161 [
65162 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
65163 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
65164 ],
65165 [
65166 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
65167 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
65168 ],
65169 [
65170 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
65171 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
65172 ],
65173 [
65174 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
65175 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
65176 ],
65177 [
65178 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
65179 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
65180 ],
65181 [
65182 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
65183 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
65184 ],
65185 [
65186 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
65187 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
65188 ],
65189 [
65190 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
65191 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
65192 ],
65193 [
65194 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
65195 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
65196 ],
65197 [
65198 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
65199 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
65200 ],
65201 [
65202 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
65203 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
65204 ],
65205 [
65206 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
65207 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
65208 ],
65209 [
65210 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
65211 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
65212 ],
65213 [
65214 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
65215 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
65216 ],
65217 [
65218 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
65219 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
65220 ],
65221 [
65222 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
65223 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
65224 ],
65225 [
65226 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
65227 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
65228 ],
65229 [
65230 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
65231 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
65232 ],
65233 [
65234 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
65235 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
65236 ],
65237 [
65238 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
65239 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
65240 ],
65241 [
65242 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
65243 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
65244 ],
65245 [
65246 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
65247 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
65248 ],
65249 [
65250 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
65251 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
65252 ],
65253 [
65254 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
65255 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
65256 ],
65257 [
65258 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
65259 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
65260 ],
65261 [
65262 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
65263 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
65264 ],
65265 [
65266 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
65267 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
65268 ],
65269 [
65270 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
65271 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
65272 ],
65273 [
65274 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
65275 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
65276 ],
65277 [
65278 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
65279 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
65280 ],
65281 [
65282 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
65283 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
65284 ],
65285 [
65286 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
65287 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
65288 ],
65289 [
65290 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
65291 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
65292 ],
65293 [
65294 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
65295 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
65296 ],
65297 [
65298 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
65299 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
65300 ],
65301 [
65302 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
65303 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
65304 ],
65305 [
65306 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
65307 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
65308 ],
65309 [
65310 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
65311 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
65312 ],
65313 [
65314 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
65315 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
65316 ],
65317 [
65318 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
65319 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
65320 ],
65321 [
65322 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
65323 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
65324 ],
65325 [
65326 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
65327 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
65328 ],
65329 [
65330 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
65331 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
65332 ],
65333 [
65334 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
65335 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
65336 ],
65337 [
65338 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
65339 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
65340 ],
65341 [
65342 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
65343 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
65344 ],
65345 [
65346 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
65347 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
65348 ],
65349 [
65350 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
65351 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
65352 ],
65353 [
65354 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
65355 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
65356 ],
65357 [
65358 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
65359 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
65360 ],
65361 [
65362 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
65363 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
65364 ],
65365 [
65366 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
65367 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
65368 ],
65369 [
65370 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
65371 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
65372 ],
65373 [
65374 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
65375 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
65376 ],
65377 [
65378 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
65379 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
65380 ],
65381 [
65382 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
65383 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
65384 ],
65385 [
65386 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
65387 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
65388 ],
65389 [
65390 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
65391 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
65392 ],
65393 [
65394 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
65395 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
65396 ],
65397 [
65398 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
65399 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
65400 ],
65401 [
65402 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
65403 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
65404 ],
65405 [
65406 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
65407 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
65408 ],
65409 [
65410 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
65411 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
65412 ],
65413 [
65414 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
65415 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
65416 ],
65417 [
65418 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
65419 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
65420 ],
65421 [
65422 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
65423 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
65424 ],
65425 [
65426 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
65427 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
65428 ],
65429 [
65430 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
65431 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
65432 ],
65433 [
65434 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
65435 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
65436 ],
65437 [
65438 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
65439 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
65440 ],
65441 [
65442 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
65443 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
65444 ],
65445 [
65446 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
65447 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
65448 ],
65449 [
65450 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
65451 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
65452 ],
65453 [
65454 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
65455 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
65456 ],
65457 [
65458 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
65459 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
65460 ],
65461 [
65462 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
65463 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
65464 ],
65465 [
65466 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
65467 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
65468 ],
65469 [
65470 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
65471 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
65472 ],
65473 [
65474 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
65475 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
65476 ],
65477 [
65478 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
65479 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
65480 ],
65481 [
65482 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
65483 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
65484 ],
65485 [
65486 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
65487 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
65488 ],
65489 [
65490 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
65491 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
65492 ],
65493 [
65494 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
65495 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
65496 ],
65497 [
65498 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
65499 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
65500 ],
65501 [
65502 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
65503 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
65504 ],
65505 [
65506 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
65507 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
65508 ],
65509 [
65510 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
65511 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
65512 ],
65513 [
65514 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
65515 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
65516 ],
65517 [
65518 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
65519 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
65520 ],
65521 [
65522 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
65523 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
65524 ],
65525 [
65526 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
65527 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
65528 ],
65529 [
65530 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
65531 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
65532 ],
65533 [
65534 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
65535 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
65536 ],
65537 [
65538 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
65539 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
65540 ],
65541 [
65542 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
65543 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
65544 ],
65545 [
65546 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
65547 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
65548 ],
65549 [
65550 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
65551 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
65552 ],
65553 [
65554 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
65555 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
65556 ],
65557 [
65558 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
65559 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
65560 ],
65561 [
65562 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
65563 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
65564 ],
65565 [
65566 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
65567 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
65568 ],
65569 [
65570 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
65571 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
65572 ],
65573 [
65574 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
65575 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
65576 ],
65577 [
65578 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
65579 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
65580 ],
65581 [
65582 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
65583 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
65584 ],
65585 [
65586 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
65587 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
65588 ]
65589 ]
65590 }
65591 };
65592
65593 },{}],54:[function(require,module,exports){
65594 'use strict';
65595
65596 var utils = exports;
65597 var BN = require('bn.js');
65598
65599 utils.assert = function assert(val, msg) {
65600 if (!val)
65601 throw new Error(msg || 'Assertion failed');
65602 };
65603
65604 function toArray(msg, enc) {
65605 if (Array.isArray(msg))
65606 return msg.slice();
65607 if (!msg)
65608 return [];
65609 var res = [];
65610 if (typeof msg !== 'string') {
65611 for (var i = 0; i < msg.length; i++)
65612 res[i] = msg[i] | 0;
65613 return res;
65614 }
65615 if (!enc) {
65616 for (var i = 0; i < msg.length; i++) {
65617 var c = msg.charCodeAt(i);
65618 var hi = c >> 8;
65619 var lo = c & 0xff;
65620 if (hi)
65621 res.push(hi, lo);
65622 else
65623 res.push(lo);
65624 }
65625 } else if (enc === 'hex') {
65626 msg = msg.replace(/[^a-z0-9]+/ig, '');
65627 if (msg.length % 2 !== 0)
65628 msg = '0' + msg;
65629 for (var i = 0; i < msg.length; i += 2)
65630 res.push(parseInt(msg[i] + msg[i + 1], 16));
65631 }
65632 return res;
65633 }
65634 utils.toArray = toArray;
65635
65636 function zero2(word) {
65637 if (word.length === 1)
65638 return '0' + word;
65639 else
65640 return word;
65641 }
65642 utils.zero2 = zero2;
65643
65644 function toHex(msg) {
65645 var res = '';
65646 for (var i = 0; i < msg.length; i++)
65647 res += zero2(msg[i].toString(16));
65648 return res;
65649 }
65650 utils.toHex = toHex;
65651
65652 utils.encode = function encode(arr, enc) {
65653 if (enc === 'hex')
65654 return toHex(arr);
65655 else
65656 return arr;
65657 };
65658
65659 // Represent num in a w-NAF form
65660 function getNAF(num, w) {
65661 var naf = [];
65662 var ws = 1 << (w + 1);
65663 var k = num.clone();
65664 while (k.cmpn(1) >= 0) {
65665 var z;
65666 if (k.isOdd()) {
65667 var mod = k.andln(ws - 1);
65668 if (mod > (ws >> 1) - 1)
65669 z = (ws >> 1) - mod;
65670 else
65671 z = mod;
65672 k.isubn(z);
65673 } else {
65674 z = 0;
65675 }
65676 naf.push(z);
65677
65678 // Optimization, shift by word if possible
65679 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
65680 for (var i = 1; i < shift; i++)
65681 naf.push(0);
65682 k.iushrn(shift);
65683 }
65684
65685 return naf;
65686 }
65687 utils.getNAF = getNAF;
65688
65689 // Represent k1, k2 in a Joint Sparse Form
65690 function getJSF(k1, k2) {
65691 var jsf = [
65692 [],
65693 []
65694 ];
65695
65696 k1 = k1.clone();
65697 k2 = k2.clone();
65698 var d1 = 0;
65699 var d2 = 0;
65700 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
65701
65702 // First phase
65703 var m14 = (k1.andln(3) + d1) & 3;
65704 var m24 = (k2.andln(3) + d2) & 3;
65705 if (m14 === 3)
65706 m14 = -1;
65707 if (m24 === 3)
65708 m24 = -1;
65709 var u1;
65710 if ((m14 & 1) === 0) {
65711 u1 = 0;
65712 } else {
65713 var m8 = (k1.andln(7) + d1) & 7;
65714 if ((m8 === 3 || m8 === 5) && m24 === 2)
65715 u1 = -m14;
65716 else
65717 u1 = m14;
65718 }
65719 jsf[0].push(u1);
65720
65721 var u2;
65722 if ((m24 & 1) === 0) {
65723 u2 = 0;
65724 } else {
65725 var m8 = (k2.andln(7) + d2) & 7;
65726 if ((m8 === 3 || m8 === 5) && m14 === 2)
65727 u2 = -m24;
65728 else
65729 u2 = m24;
65730 }
65731 jsf[1].push(u2);
65732
65733 // Second phase
65734 if (2 * d1 === u1 + 1)
65735 d1 = 1 - d1;
65736 if (2 * d2 === u2 + 1)
65737 d2 = 1 - d2;
65738 k1.iushrn(1);
65739 k2.iushrn(1);
65740 }
65741
65742 return jsf;
65743 }
65744 utils.getJSF = getJSF;
65745
65746 function cachedProperty(obj, name, computer) {
65747 var key = '_' + name;
65748 obj.prototype[name] = function cachedProperty() {
65749 return this[key] !== undefined ? this[key] :
65750 this[key] = computer.call(this);
65751 };
65752 }
65753 utils.cachedProperty = cachedProperty;
65754
65755 function parseBytes(bytes) {
65756 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
65757 bytes;
65758 }
65759 utils.parseBytes = parseBytes;
65760
65761 function intFromLE(bytes) {
65762 return new BN(bytes, 'hex', 'le');
65763 }
65764 utils.intFromLE = intFromLE;
65765
65766
65767 },{"bn.js":33}],55:[function(require,module,exports){
65768 module.exports={
65769 "_args": [
65770 [
65771 {
65772 "raw": "elliptic@^6.2.3",
65773 "scope": null,
65774 "escapedName": "elliptic",
65775 "name": "elliptic",
65776 "rawSpec": "^6.2.3",
65777 "spec": ">=6.2.3 <7.0.0",
65778 "type": "range"
65779 },
65780 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
65781 ]
65782 ],
65783 "_from": "elliptic@>=6.2.3 <7.0.0",
65784 "_id": "elliptic@6.3.3",
65785 "_inCache": true,
65786 "_location": "/elliptic",
65787 "_nodeVersion": "7.0.0",
65788 "_npmOperationalInternal": {
65789 "host": "packages-18-east.internal.npmjs.com",
65790 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
65791 },
65792 "_npmUser": {
65793 "name": "indutny",
65794 "email": "fedor@indutny.com"
65795 },
65796 "_npmVersion": "3.10.8",
65797 "_phantomChildren": {},
65798 "_requested": {
65799 "raw": "elliptic@^6.2.3",
65800 "scope": null,
65801 "escapedName": "elliptic",
65802 "name": "elliptic",
65803 "rawSpec": "^6.2.3",
65804 "spec": ">=6.2.3 <7.0.0",
65805 "type": "range"
65806 },
65807 "_requiredBy": [
65808 "/browserify-sign",
65809 "/create-ecdh",
65810 "/secp256k1"
65811 ],
65812 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
65813 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
65814 "_shrinkwrap": null,
65815 "_spec": "elliptic@^6.2.3",
65816 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
65817 "author": {
65818 "name": "Fedor Indutny",
65819 "email": "fedor@indutny.com"
65820 },
65821 "bugs": {
65822 "url": "https://github.com/indutny/elliptic/issues"
65823 },
65824 "dependencies": {
65825 "bn.js": "^4.4.0",
65826 "brorand": "^1.0.1",
65827 "hash.js": "^1.0.0",
65828 "inherits": "^2.0.1"
65829 },
65830 "description": "EC cryptography",
65831 "devDependencies": {
65832 "brfs": "^1.4.3",
65833 "coveralls": "^2.11.3",
65834 "grunt": "^0.4.5",
65835 "grunt-browserify": "^5.0.0",
65836 "grunt-cli": "^1.2.0",
65837 "grunt-contrib-connect": "^1.0.0",
65838 "grunt-contrib-copy": "^1.0.0",
65839 "grunt-contrib-uglify": "^1.0.1",
65840 "grunt-mocha-istanbul": "^3.0.1",
65841 "grunt-saucelabs": "^8.6.2",
65842 "istanbul": "^0.4.2",
65843 "jscs": "^2.9.0",
65844 "jshint": "^2.6.0",
65845 "mocha": "^2.1.0"
65846 },
65847 "directories": {},
65848 "dist": {
65849 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
65850 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
65851 },
65852 "files": [
65853 "lib"
65854 ],
65855 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
65856 "homepage": "https://github.com/indutny/elliptic",
65857 "keywords": [
65858 "EC",
65859 "Elliptic",
65860 "curve",
65861 "Cryptography"
65862 ],
65863 "license": "MIT",
65864 "main": "lib/elliptic.js",
65865 "maintainers": [
65866 {
65867 "name": "indutny",
65868 "email": "fedor@indutny.com"
65869 }
65870 ],
65871 "name": "elliptic",
65872 "optionalDependencies": {},
65873 "readme": "ERROR: No README data found!",
65874 "repository": {
65875 "type": "git",
65876 "url": "git+ssh://git@github.com/indutny/elliptic.git"
65877 },
65878 "scripts": {
65879 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
65880 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
65881 "lint": "npm run jscs && npm run jshint",
65882 "test": "npm run lint && npm run unit",
65883 "unit": "istanbul test _mocha --reporter=spec test/index.js",
65884 "version": "grunt dist && git add dist/"
65885 },
65886 "version": "6.3.3"
65887 }
65888
65889 },{}],56:[function(require,module,exports){
65890 (function (Buffer){
65891 'use strict';
65892
65893 var isHexPrefixed = require('is-hex-prefixed');
65894 var stripHexPrefix = require('strip-hex-prefix');
65895
65896 /**
65897 * Pads a `String` to have an even length
65898 * @param {String} value
65899 * @return {String} output
65900 */
65901 function padToEven(value) {
65902 var a = value; // eslint-disable-line
65903
65904 if (typeof a !== 'string') {
65905 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
65906 }
65907
65908 if (a.length % 2) {
65909 a = '0' + a;
65910 }
65911
65912 return a;
65913 }
65914
65915 /**
65916 * Converts a `Number` into a hex `String`
65917 * @param {Number} i
65918 * @return {String}
65919 */
65920 function intToHex(i) {
65921 var hex = i.toString(16); // eslint-disable-line
65922
65923 return '0x' + padToEven(hex);
65924 }
65925
65926 /**
65927 * Converts an `Number` to a `Buffer`
65928 * @param {Number} i
65929 * @return {Buffer}
65930 */
65931 function intToBuffer(i) {
65932 var hex = intToHex(i);
65933
65934 return new Buffer(hex.slice(2), 'hex');
65935 }
65936
65937 /**
65938 * Get the binary size of a string
65939 * @param {String} str
65940 * @return {Number}
65941 */
65942 function getBinarySize(str) {
65943 if (typeof str !== 'string') {
65944 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
65945 }
65946
65947 return Buffer.byteLength(str, 'utf8');
65948 }
65949
65950 /**
65951 * Returns TRUE if the first specified array contains all elements
65952 * from the second one. FALSE otherwise.
65953 *
65954 * @param {array} superset
65955 * @param {array} subset
65956 *
65957 * @returns {boolean}
65958 */
65959 function arrayContainsArray(superset, subset, some) {
65960 if (Array.isArray(superset) !== true) {
65961 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
65962 }
65963 if (Array.isArray(subset) !== true) {
65964 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
65965 }
65966
65967 return subset[Boolean(some) && 'some' || 'every'](function (value) {
65968 return superset.indexOf(value) >= 0;
65969 });
65970 }
65971
65972 /**
65973 * Should be called to get utf8 from it's hex representation
65974 *
65975 * @method toUtf8
65976 * @param {String} string in hex
65977 * @returns {String} ascii string representation of hex value
65978 */
65979 function toUtf8(hex) {
65980 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
65981
65982 return bufferValue.toString('utf8');
65983 }
65984
65985 /**
65986 * Should be called to get ascii from it's hex representation
65987 *
65988 * @method toAscii
65989 * @param {String} string in hex
65990 * @returns {String} ascii string representation of hex value
65991 */
65992 function toAscii(hex) {
65993 var str = ''; // eslint-disable-line
65994 var i = 0,
65995 l = hex.length; // eslint-disable-line
65996
65997 if (hex.substring(0, 2) === '0x') {
65998 i = 2;
65999 }
66000
66001 for (; i < l; i += 2) {
66002 var code = parseInt(hex.substr(i, 2), 16);
66003 str += String.fromCharCode(code);
66004 }
66005
66006 return str;
66007 }
66008
66009 /**
66010 * Should be called to get hex representation (prefixed by 0x) of utf8 string
66011 *
66012 * @method fromUtf8
66013 * @param {String} string
66014 * @param {Number} optional padding
66015 * @returns {String} hex representation of input string
66016 */
66017 function fromUtf8(stringValue) {
66018 var str = new Buffer(stringValue, 'utf8');
66019
66020 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
66021 }
66022
66023 /**
66024 * Should be called to get hex representation (prefixed by 0x) of ascii string
66025 *
66026 * @method fromAscii
66027 * @param {String} string
66028 * @param {Number} optional padding
66029 * @returns {String} hex representation of input string
66030 */
66031 function fromAscii(stringValue) {
66032 var hex = ''; // eslint-disable-line
66033 for (var i = 0; i < stringValue.length; i++) {
66034 // eslint-disable-line
66035 var code = stringValue.charCodeAt(i);
66036 var n = code.toString(16);
66037 hex += n.length < 2 ? '0' + n : n;
66038 }
66039
66040 return '0x' + hex;
66041 }
66042
66043 /**
66044 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
66045 *
66046 * @method getKeys get specific key from inner object array of objects
66047 * @param {String} params
66048 * @param {String} key
66049 * @param {Boolean} allowEmpty
66050 * @returns {Array} output just a simple array of output keys
66051 */
66052 function getKeys(params, key, allowEmpty) {
66053 if (!Array.isArray(params)) {
66054 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
66055 }
66056 if (typeof key !== 'string') {
66057 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
66058 }
66059
66060 var result = []; // eslint-disable-line
66061
66062 for (var i = 0; i < params.length; i++) {
66063 // eslint-disable-line
66064 var value = params[i][key]; // eslint-disable-line
66065 if (allowEmpty && !value) {
66066 value = '';
66067 } else if (typeof value !== 'string') {
66068 throw new Error('invalid abi');
66069 }
66070 result.push(value);
66071 }
66072
66073 return result;
66074 }
66075
66076 /**
66077 * Is the string a hex string.
66078 *
66079 * @method check if string is hex string of specific length
66080 * @param {String} value
66081 * @param {Number} length
66082 * @returns {Boolean} output the string is a hex string
66083 */
66084 function isHexString(value, length) {
66085 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
66086 return false;
66087 }
66088
66089 if (length && value.length !== 2 + 2 * length) {
66090 return false;
66091 }
66092
66093 return true;
66094 }
66095
66096 module.exports = {
66097 arrayContainsArray: arrayContainsArray,
66098 intToBuffer: intToBuffer,
66099 getBinarySize: getBinarySize,
66100 isHexPrefixed: isHexPrefixed,
66101 stripHexPrefix: stripHexPrefix,
66102 padToEven: padToEven,
66103 intToHex: intToHex,
66104 fromAscii: fromAscii,
66105 fromUtf8: fromUtf8,
66106 toAscii: toAscii,
66107 toUtf8: toUtf8,
66108 getKeys: getKeys,
66109 isHexString: isHexString
66110 };
66111 }).call(this,require("buffer").Buffer)
66112 },{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
66113 var hash = exports;
66114
66115 hash.utils = require('./hash/utils');
66116 hash.common = require('./hash/common');
66117 hash.sha = require('./hash/sha');
66118 hash.ripemd = require('./hash/ripemd');
66119 hash.hmac = require('./hash/hmac');
66120
66121 // Proxy hash functions to the main object
66122 hash.sha1 = hash.sha.sha1;
66123 hash.sha256 = hash.sha.sha256;
66124 hash.sha224 = hash.sha.sha224;
66125 hash.sha384 = hash.sha.sha384;
66126 hash.sha512 = hash.sha.sha512;
66127 hash.ripemd160 = hash.ripemd.ripemd160;
66128
66129 },{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
66130 var hash = require('../hash');
66131 var utils = hash.utils;
66132 var assert = utils.assert;
66133
66134 function BlockHash() {
66135 this.pending = null;
66136 this.pendingTotal = 0;
66137 this.blockSize = this.constructor.blockSize;
66138 this.outSize = this.constructor.outSize;
66139 this.hmacStrength = this.constructor.hmacStrength;
66140 this.padLength = this.constructor.padLength / 8;
66141 this.endian = 'big';
66142
66143 this._delta8 = this.blockSize / 8;
66144 this._delta32 = this.blockSize / 32;
66145 }
66146 exports.BlockHash = BlockHash;
66147
66148 BlockHash.prototype.update = function update(msg, enc) {
66149 // Convert message to array, pad it, and join into 32bit blocks
66150 msg = utils.toArray(msg, enc);
66151 if (!this.pending)
66152 this.pending = msg;
66153 else
66154 this.pending = this.pending.concat(msg);
66155 this.pendingTotal += msg.length;
66156
66157 // Enough data, try updating
66158 if (this.pending.length >= this._delta8) {
66159 msg = this.pending;
66160
66161 // Process pending data in blocks
66162 var r = msg.length % this._delta8;
66163 this.pending = msg.slice(msg.length - r, msg.length);
66164 if (this.pending.length === 0)
66165 this.pending = null;
66166
66167 msg = utils.join32(msg, 0, msg.length - r, this.endian);
66168 for (var i = 0; i < msg.length; i += this._delta32)
66169 this._update(msg, i, i + this._delta32);
66170 }
66171
66172 return this;
66173 };
66174
66175 BlockHash.prototype.digest = function digest(enc) {
66176 this.update(this._pad());
66177 assert(this.pending === null);
66178
66179 return this._digest(enc);
66180 };
66181
66182 BlockHash.prototype._pad = function pad() {
66183 var len = this.pendingTotal;
66184 var bytes = this._delta8;
66185 var k = bytes - ((len + this.padLength) % bytes);
66186 var res = new Array(k + this.padLength);
66187 res[0] = 0x80;
66188 for (var i = 1; i < k; i++)
66189 res[i] = 0;
66190
66191 // Append length
66192 len <<= 3;
66193 if (this.endian === 'big') {
66194 for (var t = 8; t < this.padLength; t++)
66195 res[i++] = 0;
66196
66197 res[i++] = 0;
66198 res[i++] = 0;
66199 res[i++] = 0;
66200 res[i++] = 0;
66201 res[i++] = (len >>> 24) & 0xff;
66202 res[i++] = (len >>> 16) & 0xff;
66203 res[i++] = (len >>> 8) & 0xff;
66204 res[i++] = len & 0xff;
66205 } else {
66206 res[i++] = len & 0xff;
66207 res[i++] = (len >>> 8) & 0xff;
66208 res[i++] = (len >>> 16) & 0xff;
66209 res[i++] = (len >>> 24) & 0xff;
66210 res[i++] = 0;
66211 res[i++] = 0;
66212 res[i++] = 0;
66213 res[i++] = 0;
66214
66215 for (var t = 8; t < this.padLength; t++)
66216 res[i++] = 0;
66217 }
66218
66219 return res;
66220 };
66221
66222 },{"../hash":57}],59:[function(require,module,exports){
66223 var hmac = exports;
66224
66225 var hash = require('../hash');
66226 var utils = hash.utils;
66227 var assert = utils.assert;
66228
66229 function Hmac(hash, key, enc) {
66230 if (!(this instanceof Hmac))
66231 return new Hmac(hash, key, enc);
66232 this.Hash = hash;
66233 this.blockSize = hash.blockSize / 8;
66234 this.outSize = hash.outSize / 8;
66235 this.inner = null;
66236 this.outer = null;
66237
66238 this._init(utils.toArray(key, enc));
66239 }
66240 module.exports = Hmac;
66241
66242 Hmac.prototype._init = function init(key) {
66243 // Shorten key, if needed
66244 if (key.length > this.blockSize)
66245 key = new this.Hash().update(key).digest();
66246 assert(key.length <= this.blockSize);
66247
66248 // Add padding to key
66249 for (var i = key.length; i < this.blockSize; i++)
66250 key.push(0);
66251
66252 for (var i = 0; i < key.length; i++)
66253 key[i] ^= 0x36;
66254 this.inner = new this.Hash().update(key);
66255
66256 // 0x36 ^ 0x5c = 0x6a
66257 for (var i = 0; i < key.length; i++)
66258 key[i] ^= 0x6a;
66259 this.outer = new this.Hash().update(key);
66260 };
66261
66262 Hmac.prototype.update = function update(msg, enc) {
66263 this.inner.update(msg, enc);
66264 return this;
66265 };
66266
66267 Hmac.prototype.digest = function digest(enc) {
66268 this.outer.update(this.inner.digest());
66269 return this.outer.digest(enc);
66270 };
66271
66272 },{"../hash":57}],60:[function(require,module,exports){
66273 var hash = require('../hash');
66274 var utils = hash.utils;
66275
66276 var rotl32 = utils.rotl32;
66277 var sum32 = utils.sum32;
66278 var sum32_3 = utils.sum32_3;
66279 var sum32_4 = utils.sum32_4;
66280 var BlockHash = hash.common.BlockHash;
66281
66282 function RIPEMD160() {
66283 if (!(this instanceof RIPEMD160))
66284 return new RIPEMD160();
66285
66286 BlockHash.call(this);
66287
66288 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
66289 this.endian = 'little';
66290 }
66291 utils.inherits(RIPEMD160, BlockHash);
66292 exports.ripemd160 = RIPEMD160;
66293
66294 RIPEMD160.blockSize = 512;
66295 RIPEMD160.outSize = 160;
66296 RIPEMD160.hmacStrength = 192;
66297 RIPEMD160.padLength = 64;
66298
66299 RIPEMD160.prototype._update = function update(msg, start) {
66300 var A = this.h[0];
66301 var B = this.h[1];
66302 var C = this.h[2];
66303 var D = this.h[3];
66304 var E = this.h[4];
66305 var Ah = A;
66306 var Bh = B;
66307 var Ch = C;
66308 var Dh = D;
66309 var Eh = E;
66310 for (var j = 0; j < 80; j++) {
66311 var T = sum32(
66312 rotl32(
66313 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
66314 s[j]),
66315 E);
66316 A = E;
66317 E = D;
66318 D = rotl32(C, 10);
66319 C = B;
66320 B = T;
66321 T = sum32(
66322 rotl32(
66323 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
66324 sh[j]),
66325 Eh);
66326 Ah = Eh;
66327 Eh = Dh;
66328 Dh = rotl32(Ch, 10);
66329 Ch = Bh;
66330 Bh = T;
66331 }
66332 T = sum32_3(this.h[1], C, Dh);
66333 this.h[1] = sum32_3(this.h[2], D, Eh);
66334 this.h[2] = sum32_3(this.h[3], E, Ah);
66335 this.h[3] = sum32_3(this.h[4], A, Bh);
66336 this.h[4] = sum32_3(this.h[0], B, Ch);
66337 this.h[0] = T;
66338 };
66339
66340 RIPEMD160.prototype._digest = function digest(enc) {
66341 if (enc === 'hex')
66342 return utils.toHex32(this.h, 'little');
66343 else
66344 return utils.split32(this.h, 'little');
66345 };
66346
66347 function f(j, x, y, z) {
66348 if (j <= 15)
66349 return x ^ y ^ z;
66350 else if (j <= 31)
66351 return (x & y) | ((~x) & z);
66352 else if (j <= 47)
66353 return (x | (~y)) ^ z;
66354 else if (j <= 63)
66355 return (x & z) | (y & (~z));
66356 else
66357 return x ^ (y | (~z));
66358 }
66359
66360 function K(j) {
66361 if (j <= 15)
66362 return 0x00000000;
66363 else if (j <= 31)
66364 return 0x5a827999;
66365 else if (j <= 47)
66366 return 0x6ed9eba1;
66367 else if (j <= 63)
66368 return 0x8f1bbcdc;
66369 else
66370 return 0xa953fd4e;
66371 }
66372
66373 function Kh(j) {
66374 if (j <= 15)
66375 return 0x50a28be6;
66376 else if (j <= 31)
66377 return 0x5c4dd124;
66378 else if (j <= 47)
66379 return 0x6d703ef3;
66380 else if (j <= 63)
66381 return 0x7a6d76e9;
66382 else
66383 return 0x00000000;
66384 }
66385
66386 var r = [
66387 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
66388 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
66389 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
66390 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
66391 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
66392 ];
66393
66394 var rh = [
66395 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
66396 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
66397 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
66398 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
66399 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
66400 ];
66401
66402 var s = [
66403 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
66404 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
66405 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
66406 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
66407 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
66408 ];
66409
66410 var sh = [
66411 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
66412 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
66413 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
66414 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
66415 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
66416 ];
66417
66418 },{"../hash":57}],61:[function(require,module,exports){
66419 var hash = require('../hash');
66420 var utils = hash.utils;
66421 var assert = utils.assert;
66422
66423 var rotr32 = utils.rotr32;
66424 var rotl32 = utils.rotl32;
66425 var sum32 = utils.sum32;
66426 var sum32_4 = utils.sum32_4;
66427 var sum32_5 = utils.sum32_5;
66428 var rotr64_hi = utils.rotr64_hi;
66429 var rotr64_lo = utils.rotr64_lo;
66430 var shr64_hi = utils.shr64_hi;
66431 var shr64_lo = utils.shr64_lo;
66432 var sum64 = utils.sum64;
66433 var sum64_hi = utils.sum64_hi;
66434 var sum64_lo = utils.sum64_lo;
66435 var sum64_4_hi = utils.sum64_4_hi;
66436 var sum64_4_lo = utils.sum64_4_lo;
66437 var sum64_5_hi = utils.sum64_5_hi;
66438 var sum64_5_lo = utils.sum64_5_lo;
66439 var BlockHash = hash.common.BlockHash;
66440
66441 var sha256_K = [
66442 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
66443 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
66444 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
66445 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
66446 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
66447 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
66448 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
66449 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
66450 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
66451 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
66452 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
66453 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
66454 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
66455 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
66456 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
66457 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
66458 ];
66459
66460 var sha512_K = [
66461 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
66462 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
66463 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
66464 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
66465 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
66466 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
66467 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
66468 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
66469 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
66470 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
66471 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
66472 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
66473 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
66474 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
66475 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
66476 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
66477 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
66478 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
66479 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
66480 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
66481 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
66482 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
66483 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
66484 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
66485 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
66486 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
66487 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
66488 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
66489 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
66490 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
66491 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
66492 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
66493 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
66494 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
66495 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
66496 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
66497 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
66498 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
66499 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
66500 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
66501 ];
66502
66503 var sha1_K = [
66504 0x5A827999, 0x6ED9EBA1,
66505 0x8F1BBCDC, 0xCA62C1D6
66506 ];
66507
66508 function SHA256() {
66509 if (!(this instanceof SHA256))
66510 return new SHA256();
66511
66512 BlockHash.call(this);
66513 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
66514 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
66515 this.k = sha256_K;
66516 this.W = new Array(64);
66517 }
66518 utils.inherits(SHA256, BlockHash);
66519 exports.sha256 = SHA256;
66520
66521 SHA256.blockSize = 512;
66522 SHA256.outSize = 256;
66523 SHA256.hmacStrength = 192;
66524 SHA256.padLength = 64;
66525
66526 SHA256.prototype._update = function _update(msg, start) {
66527 var W = this.W;
66528
66529 for (var i = 0; i < 16; i++)
66530 W[i] = msg[start + i];
66531 for (; i < W.length; i++)
66532 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
66533
66534 var a = this.h[0];
66535 var b = this.h[1];
66536 var c = this.h[2];
66537 var d = this.h[3];
66538 var e = this.h[4];
66539 var f = this.h[5];
66540 var g = this.h[6];
66541 var h = this.h[7];
66542
66543 assert(this.k.length === W.length);
66544 for (var i = 0; i < W.length; i++) {
66545 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
66546 var T2 = sum32(s0_256(a), maj32(a, b, c));
66547 h = g;
66548 g = f;
66549 f = e;
66550 e = sum32(d, T1);
66551 d = c;
66552 c = b;
66553 b = a;
66554 a = sum32(T1, T2);
66555 }
66556
66557 this.h[0] = sum32(this.h[0], a);
66558 this.h[1] = sum32(this.h[1], b);
66559 this.h[2] = sum32(this.h[2], c);
66560 this.h[3] = sum32(this.h[3], d);
66561 this.h[4] = sum32(this.h[4], e);
66562 this.h[5] = sum32(this.h[5], f);
66563 this.h[6] = sum32(this.h[6], g);
66564 this.h[7] = sum32(this.h[7], h);
66565 };
66566
66567 SHA256.prototype._digest = function digest(enc) {
66568 if (enc === 'hex')
66569 return utils.toHex32(this.h, 'big');
66570 else
66571 return utils.split32(this.h, 'big');
66572 };
66573
66574 function SHA224() {
66575 if (!(this instanceof SHA224))
66576 return new SHA224();
66577
66578 SHA256.call(this);
66579 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
66580 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
66581 }
66582 utils.inherits(SHA224, SHA256);
66583 exports.sha224 = SHA224;
66584
66585 SHA224.blockSize = 512;
66586 SHA224.outSize = 224;
66587 SHA224.hmacStrength = 192;
66588 SHA224.padLength = 64;
66589
66590 SHA224.prototype._digest = function digest(enc) {
66591 // Just truncate output
66592 if (enc === 'hex')
66593 return utils.toHex32(this.h.slice(0, 7), 'big');
66594 else
66595 return utils.split32(this.h.slice(0, 7), 'big');
66596 };
66597
66598 function SHA512() {
66599 if (!(this instanceof SHA512))
66600 return new SHA512();
66601
66602 BlockHash.call(this);
66603 this.h = [ 0x6a09e667, 0xf3bcc908,
66604 0xbb67ae85, 0x84caa73b,
66605 0x3c6ef372, 0xfe94f82b,
66606 0xa54ff53a, 0x5f1d36f1,
66607 0x510e527f, 0xade682d1,
66608 0x9b05688c, 0x2b3e6c1f,
66609 0x1f83d9ab, 0xfb41bd6b,
66610 0x5be0cd19, 0x137e2179 ];
66611 this.k = sha512_K;
66612 this.W = new Array(160);
66613 }
66614 utils.inherits(SHA512, BlockHash);
66615 exports.sha512 = SHA512;
66616
66617 SHA512.blockSize = 1024;
66618 SHA512.outSize = 512;
66619 SHA512.hmacStrength = 192;
66620 SHA512.padLength = 128;
66621
66622 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
66623 var W = this.W;
66624
66625 // 32 x 32bit words
66626 for (var i = 0; i < 32; i++)
66627 W[i] = msg[start + i];
66628 for (; i < W.length; i += 2) {
66629 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
66630 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
66631 var c1_hi = W[i - 14]; // i - 7
66632 var c1_lo = W[i - 13];
66633 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
66634 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
66635 var c3_hi = W[i - 32]; // i - 16
66636 var c3_lo = W[i - 31];
66637
66638 W[i] = sum64_4_hi(c0_hi, c0_lo,
66639 c1_hi, c1_lo,
66640 c2_hi, c2_lo,
66641 c3_hi, c3_lo);
66642 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
66643 c1_hi, c1_lo,
66644 c2_hi, c2_lo,
66645 c3_hi, c3_lo);
66646 }
66647 };
66648
66649 SHA512.prototype._update = function _update(msg, start) {
66650 this._prepareBlock(msg, start);
66651
66652 var W = this.W;
66653
66654 var ah = this.h[0];
66655 var al = this.h[1];
66656 var bh = this.h[2];
66657 var bl = this.h[3];
66658 var ch = this.h[4];
66659 var cl = this.h[5];
66660 var dh = this.h[6];
66661 var dl = this.h[7];
66662 var eh = this.h[8];
66663 var el = this.h[9];
66664 var fh = this.h[10];
66665 var fl = this.h[11];
66666 var gh = this.h[12];
66667 var gl = this.h[13];
66668 var hh = this.h[14];
66669 var hl = this.h[15];
66670
66671 assert(this.k.length === W.length);
66672 for (var i = 0; i < W.length; i += 2) {
66673 var c0_hi = hh;
66674 var c0_lo = hl;
66675 var c1_hi = s1_512_hi(eh, el);
66676 var c1_lo = s1_512_lo(eh, el);
66677 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
66678 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
66679 var c3_hi = this.k[i];
66680 var c3_lo = this.k[i + 1];
66681 var c4_hi = W[i];
66682 var c4_lo = W[i + 1];
66683
66684 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
66685 c1_hi, c1_lo,
66686 c2_hi, c2_lo,
66687 c3_hi, c3_lo,
66688 c4_hi, c4_lo);
66689 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
66690 c1_hi, c1_lo,
66691 c2_hi, c2_lo,
66692 c3_hi, c3_lo,
66693 c4_hi, c4_lo);
66694
66695 var c0_hi = s0_512_hi(ah, al);
66696 var c0_lo = s0_512_lo(ah, al);
66697 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
66698 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
66699
66700 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
66701 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
66702
66703 hh = gh;
66704 hl = gl;
66705
66706 gh = fh;
66707 gl = fl;
66708
66709 fh = eh;
66710 fl = el;
66711
66712 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
66713 el = sum64_lo(dl, dl, T1_hi, T1_lo);
66714
66715 dh = ch;
66716 dl = cl;
66717
66718 ch = bh;
66719 cl = bl;
66720
66721 bh = ah;
66722 bl = al;
66723
66724 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
66725 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
66726 }
66727
66728 sum64(this.h, 0, ah, al);
66729 sum64(this.h, 2, bh, bl);
66730 sum64(this.h, 4, ch, cl);
66731 sum64(this.h, 6, dh, dl);
66732 sum64(this.h, 8, eh, el);
66733 sum64(this.h, 10, fh, fl);
66734 sum64(this.h, 12, gh, gl);
66735 sum64(this.h, 14, hh, hl);
66736 };
66737
66738 SHA512.prototype._digest = function digest(enc) {
66739 if (enc === 'hex')
66740 return utils.toHex32(this.h, 'big');
66741 else
66742 return utils.split32(this.h, 'big');
66743 };
66744
66745 function SHA384() {
66746 if (!(this instanceof SHA384))
66747 return new SHA384();
66748
66749 SHA512.call(this);
66750 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
66751 0x629a292a, 0x367cd507,
66752 0x9159015a, 0x3070dd17,
66753 0x152fecd8, 0xf70e5939,
66754 0x67332667, 0xffc00b31,
66755 0x8eb44a87, 0x68581511,
66756 0xdb0c2e0d, 0x64f98fa7,
66757 0x47b5481d, 0xbefa4fa4 ];
66758 }
66759 utils.inherits(SHA384, SHA512);
66760 exports.sha384 = SHA384;
66761
66762 SHA384.blockSize = 1024;
66763 SHA384.outSize = 384;
66764 SHA384.hmacStrength = 192;
66765 SHA384.padLength = 128;
66766
66767 SHA384.prototype._digest = function digest(enc) {
66768 if (enc === 'hex')
66769 return utils.toHex32(this.h.slice(0, 12), 'big');
66770 else
66771 return utils.split32(this.h.slice(0, 12), 'big');
66772 };
66773
66774 function SHA1() {
66775 if (!(this instanceof SHA1))
66776 return new SHA1();
66777
66778 BlockHash.call(this);
66779 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
66780 0x10325476, 0xc3d2e1f0 ];
66781 this.W = new Array(80);
66782 }
66783
66784 utils.inherits(SHA1, BlockHash);
66785 exports.sha1 = SHA1;
66786
66787 SHA1.blockSize = 512;
66788 SHA1.outSize = 160;
66789 SHA1.hmacStrength = 80;
66790 SHA1.padLength = 64;
66791
66792 SHA1.prototype._update = function _update(msg, start) {
66793 var W = this.W;
66794
66795 for (var i = 0; i < 16; i++)
66796 W[i] = msg[start + i];
66797
66798 for(; i < W.length; i++)
66799 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
66800
66801 var a = this.h[0];
66802 var b = this.h[1];
66803 var c = this.h[2];
66804 var d = this.h[3];
66805 var e = this.h[4];
66806
66807 for (var i = 0; i < W.length; i++) {
66808 var s = ~~(i / 20);
66809 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
66810 e = d;
66811 d = c;
66812 c = rotl32(b, 30);
66813 b = a;
66814 a = t;
66815 }
66816
66817 this.h[0] = sum32(this.h[0], a);
66818 this.h[1] = sum32(this.h[1], b);
66819 this.h[2] = sum32(this.h[2], c);
66820 this.h[3] = sum32(this.h[3], d);
66821 this.h[4] = sum32(this.h[4], e);
66822 };
66823
66824 SHA1.prototype._digest = function digest(enc) {
66825 if (enc === 'hex')
66826 return utils.toHex32(this.h, 'big');
66827 else
66828 return utils.split32(this.h, 'big');
66829 };
66830
66831 function ch32(x, y, z) {
66832 return (x & y) ^ ((~x) & z);
66833 }
66834
66835 function maj32(x, y, z) {
66836 return (x & y) ^ (x & z) ^ (y & z);
66837 }
66838
66839 function p32(x, y, z) {
66840 return x ^ y ^ z;
66841 }
66842
66843 function s0_256(x) {
66844 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
66845 }
66846
66847 function s1_256(x) {
66848 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
66849 }
66850
66851 function g0_256(x) {
66852 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
66853 }
66854
66855 function g1_256(x) {
66856 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
66857 }
66858
66859 function ft_1(s, x, y, z) {
66860 if (s === 0)
66861 return ch32(x, y, z);
66862 if (s === 1 || s === 3)
66863 return p32(x, y, z);
66864 if (s === 2)
66865 return maj32(x, y, z);
66866 }
66867
66868 function ch64_hi(xh, xl, yh, yl, zh, zl) {
66869 var r = (xh & yh) ^ ((~xh) & zh);
66870 if (r < 0)
66871 r += 0x100000000;
66872 return r;
66873 }
66874
66875 function ch64_lo(xh, xl, yh, yl, zh, zl) {
66876 var r = (xl & yl) ^ ((~xl) & zl);
66877 if (r < 0)
66878 r += 0x100000000;
66879 return r;
66880 }
66881
66882 function maj64_hi(xh, xl, yh, yl, zh, zl) {
66883 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
66884 if (r < 0)
66885 r += 0x100000000;
66886 return r;
66887 }
66888
66889 function maj64_lo(xh, xl, yh, yl, zh, zl) {
66890 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
66891 if (r < 0)
66892 r += 0x100000000;
66893 return r;
66894 }
66895
66896 function s0_512_hi(xh, xl) {
66897 var c0_hi = rotr64_hi(xh, xl, 28);
66898 var c1_hi = rotr64_hi(xl, xh, 2); // 34
66899 var c2_hi = rotr64_hi(xl, xh, 7); // 39
66900
66901 var r = c0_hi ^ c1_hi ^ c2_hi;
66902 if (r < 0)
66903 r += 0x100000000;
66904 return r;
66905 }
66906
66907 function s0_512_lo(xh, xl) {
66908 var c0_lo = rotr64_lo(xh, xl, 28);
66909 var c1_lo = rotr64_lo(xl, xh, 2); // 34
66910 var c2_lo = rotr64_lo(xl, xh, 7); // 39
66911
66912 var r = c0_lo ^ c1_lo ^ c2_lo;
66913 if (r < 0)
66914 r += 0x100000000;
66915 return r;
66916 }
66917
66918 function s1_512_hi(xh, xl) {
66919 var c0_hi = rotr64_hi(xh, xl, 14);
66920 var c1_hi = rotr64_hi(xh, xl, 18);
66921 var c2_hi = rotr64_hi(xl, xh, 9); // 41
66922
66923 var r = c0_hi ^ c1_hi ^ c2_hi;
66924 if (r < 0)
66925 r += 0x100000000;
66926 return r;
66927 }
66928
66929 function s1_512_lo(xh, xl) {
66930 var c0_lo = rotr64_lo(xh, xl, 14);
66931 var c1_lo = rotr64_lo(xh, xl, 18);
66932 var c2_lo = rotr64_lo(xl, xh, 9); // 41
66933
66934 var r = c0_lo ^ c1_lo ^ c2_lo;
66935 if (r < 0)
66936 r += 0x100000000;
66937 return r;
66938 }
66939
66940 function g0_512_hi(xh, xl) {
66941 var c0_hi = rotr64_hi(xh, xl, 1);
66942 var c1_hi = rotr64_hi(xh, xl, 8);
66943 var c2_hi = shr64_hi(xh, xl, 7);
66944
66945 var r = c0_hi ^ c1_hi ^ c2_hi;
66946 if (r < 0)
66947 r += 0x100000000;
66948 return r;
66949 }
66950
66951 function g0_512_lo(xh, xl) {
66952 var c0_lo = rotr64_lo(xh, xl, 1);
66953 var c1_lo = rotr64_lo(xh, xl, 8);
66954 var c2_lo = shr64_lo(xh, xl, 7);
66955
66956 var r = c0_lo ^ c1_lo ^ c2_lo;
66957 if (r < 0)
66958 r += 0x100000000;
66959 return r;
66960 }
66961
66962 function g1_512_hi(xh, xl) {
66963 var c0_hi = rotr64_hi(xh, xl, 19);
66964 var c1_hi = rotr64_hi(xl, xh, 29); // 61
66965 var c2_hi = shr64_hi(xh, xl, 6);
66966
66967 var r = c0_hi ^ c1_hi ^ c2_hi;
66968 if (r < 0)
66969 r += 0x100000000;
66970 return r;
66971 }
66972
66973 function g1_512_lo(xh, xl) {
66974 var c0_lo = rotr64_lo(xh, xl, 19);
66975 var c1_lo = rotr64_lo(xl, xh, 29); // 61
66976 var c2_lo = shr64_lo(xh, xl, 6);
66977
66978 var r = c0_lo ^ c1_lo ^ c2_lo;
66979 if (r < 0)
66980 r += 0x100000000;
66981 return r;
66982 }
66983
66984 },{"../hash":57}],62:[function(require,module,exports){
66985 var utils = exports;
66986 var inherits = require('inherits');
66987
66988 function toArray(msg, enc) {
66989 if (Array.isArray(msg))
66990 return msg.slice();
66991 if (!msg)
66992 return [];
66993 var res = [];
66994 if (typeof msg === 'string') {
66995 if (!enc) {
66996 for (var i = 0; i < msg.length; i++) {
66997 var c = msg.charCodeAt(i);
66998 var hi = c >> 8;
66999 var lo = c & 0xff;
67000 if (hi)
67001 res.push(hi, lo);
67002 else
67003 res.push(lo);
67004 }
67005 } else if (enc === 'hex') {
67006 msg = msg.replace(/[^a-z0-9]+/ig, '');
67007 if (msg.length % 2 !== 0)
67008 msg = '0' + msg;
67009 for (var i = 0; i < msg.length; i += 2)
67010 res.push(parseInt(msg[i] + msg[i + 1], 16));
67011 }
67012 } else {
67013 for (var i = 0; i < msg.length; i++)
67014 res[i] = msg[i] | 0;
67015 }
67016 return res;
67017 }
67018 utils.toArray = toArray;
67019
67020 function toHex(msg) {
67021 var res = '';
67022 for (var i = 0; i < msg.length; i++)
67023 res += zero2(msg[i].toString(16));
67024 return res;
67025 }
67026 utils.toHex = toHex;
67027
67028 function htonl(w) {
67029 var res = (w >>> 24) |
67030 ((w >>> 8) & 0xff00) |
67031 ((w << 8) & 0xff0000) |
67032 ((w & 0xff) << 24);
67033 return res >>> 0;
67034 }
67035 utils.htonl = htonl;
67036
67037 function toHex32(msg, endian) {
67038 var res = '';
67039 for (var i = 0; i < msg.length; i++) {
67040 var w = msg[i];
67041 if (endian === 'little')
67042 w = htonl(w);
67043 res += zero8(w.toString(16));
67044 }
67045 return res;
67046 }
67047 utils.toHex32 = toHex32;
67048
67049 function zero2(word) {
67050 if (word.length === 1)
67051 return '0' + word;
67052 else
67053 return word;
67054 }
67055 utils.zero2 = zero2;
67056
67057 function zero8(word) {
67058 if (word.length === 7)
67059 return '0' + word;
67060 else if (word.length === 6)
67061 return '00' + word;
67062 else if (word.length === 5)
67063 return '000' + word;
67064 else if (word.length === 4)
67065 return '0000' + word;
67066 else if (word.length === 3)
67067 return '00000' + word;
67068 else if (word.length === 2)
67069 return '000000' + word;
67070 else if (word.length === 1)
67071 return '0000000' + word;
67072 else
67073 return word;
67074 }
67075 utils.zero8 = zero8;
67076
67077 function join32(msg, start, end, endian) {
67078 var len = end - start;
67079 assert(len % 4 === 0);
67080 var res = new Array(len / 4);
67081 for (var i = 0, k = start; i < res.length; i++, k += 4) {
67082 var w;
67083 if (endian === 'big')
67084 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
67085 else
67086 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
67087 res[i] = w >>> 0;
67088 }
67089 return res;
67090 }
67091 utils.join32 = join32;
67092
67093 function split32(msg, endian) {
67094 var res = new Array(msg.length * 4);
67095 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
67096 var m = msg[i];
67097 if (endian === 'big') {
67098 res[k] = m >>> 24;
67099 res[k + 1] = (m >>> 16) & 0xff;
67100 res[k + 2] = (m >>> 8) & 0xff;
67101 res[k + 3] = m & 0xff;
67102 } else {
67103 res[k + 3] = m >>> 24;
67104 res[k + 2] = (m >>> 16) & 0xff;
67105 res[k + 1] = (m >>> 8) & 0xff;
67106 res[k] = m & 0xff;
67107 }
67108 }
67109 return res;
67110 }
67111 utils.split32 = split32;
67112
67113 function rotr32(w, b) {
67114 return (w >>> b) | (w << (32 - b));
67115 }
67116 utils.rotr32 = rotr32;
67117
67118 function rotl32(w, b) {
67119 return (w << b) | (w >>> (32 - b));
67120 }
67121 utils.rotl32 = rotl32;
67122
67123 function sum32(a, b) {
67124 return (a + b) >>> 0;
67125 }
67126 utils.sum32 = sum32;
67127
67128 function sum32_3(a, b, c) {
67129 return (a + b + c) >>> 0;
67130 }
67131 utils.sum32_3 = sum32_3;
67132
67133 function sum32_4(a, b, c, d) {
67134 return (a + b + c + d) >>> 0;
67135 }
67136 utils.sum32_4 = sum32_4;
67137
67138 function sum32_5(a, b, c, d, e) {
67139 return (a + b + c + d + e) >>> 0;
67140 }
67141 utils.sum32_5 = sum32_5;
67142
67143 function assert(cond, msg) {
67144 if (!cond)
67145 throw new Error(msg || 'Assertion failed');
67146 }
67147 utils.assert = assert;
67148
67149 utils.inherits = inherits;
67150
67151 function sum64(buf, pos, ah, al) {
67152 var bh = buf[pos];
67153 var bl = buf[pos + 1];
67154
67155 var lo = (al + bl) >>> 0;
67156 var hi = (lo < al ? 1 : 0) + ah + bh;
67157 buf[pos] = hi >>> 0;
67158 buf[pos + 1] = lo;
67159 }
67160 exports.sum64 = sum64;
67161
67162 function sum64_hi(ah, al, bh, bl) {
67163 var lo = (al + bl) >>> 0;
67164 var hi = (lo < al ? 1 : 0) + ah + bh;
67165 return hi >>> 0;
67166 };
67167 exports.sum64_hi = sum64_hi;
67168
67169 function sum64_lo(ah, al, bh, bl) {
67170 var lo = al + bl;
67171 return lo >>> 0;
67172 };
67173 exports.sum64_lo = sum64_lo;
67174
67175 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
67176 var carry = 0;
67177 var lo = al;
67178 lo = (lo + bl) >>> 0;
67179 carry += lo < al ? 1 : 0;
67180 lo = (lo + cl) >>> 0;
67181 carry += lo < cl ? 1 : 0;
67182 lo = (lo + dl) >>> 0;
67183 carry += lo < dl ? 1 : 0;
67184
67185 var hi = ah + bh + ch + dh + carry;
67186 return hi >>> 0;
67187 };
67188 exports.sum64_4_hi = sum64_4_hi;
67189
67190 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
67191 var lo = al + bl + cl + dl;
67192 return lo >>> 0;
67193 };
67194 exports.sum64_4_lo = sum64_4_lo;
67195
67196 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
67197 var carry = 0;
67198 var lo = al;
67199 lo = (lo + bl) >>> 0;
67200 carry += lo < al ? 1 : 0;
67201 lo = (lo + cl) >>> 0;
67202 carry += lo < cl ? 1 : 0;
67203 lo = (lo + dl) >>> 0;
67204 carry += lo < dl ? 1 : 0;
67205 lo = (lo + el) >>> 0;
67206 carry += lo < el ? 1 : 0;
67207
67208 var hi = ah + bh + ch + dh + eh + carry;
67209 return hi >>> 0;
67210 };
67211 exports.sum64_5_hi = sum64_5_hi;
67212
67213 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
67214 var lo = al + bl + cl + dl + el;
67215
67216 return lo >>> 0;
67217 };
67218 exports.sum64_5_lo = sum64_5_lo;
67219
67220 function rotr64_hi(ah, al, num) {
67221 var r = (al << (32 - num)) | (ah >>> num);
67222 return r >>> 0;
67223 };
67224 exports.rotr64_hi = rotr64_hi;
67225
67226 function rotr64_lo(ah, al, num) {
67227 var r = (ah << (32 - num)) | (al >>> num);
67228 return r >>> 0;
67229 };
67230 exports.rotr64_lo = rotr64_lo;
67231
67232 function shr64_hi(ah, al, num) {
67233 return ah >>> num;
67234 };
67235 exports.shr64_hi = shr64_hi;
67236
67237 function shr64_lo(ah, al, num) {
67238 var r = (ah << (32 - num)) | (al >>> num);
67239 return r >>> 0;
67240 };
67241 exports.shr64_lo = shr64_lo;
67242
67243 },{"inherits":63}],63:[function(require,module,exports){
67244 arguments[4][9][0].apply(exports,arguments)
67245 },{"dup":9}],64:[function(require,module,exports){
67246 /**
67247 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
67248 * @param {String} str the string input value
67249 * @return {Boolean} a boolean if it is or is not hex prefixed
67250 * @throws if the str input is not a string
67251 */
67252 module.exports = function isHexPrefixed(str) {
67253 if (typeof str !== 'string') {
67254 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
67255 }
67256
67257 return str.slice(0, 2) === '0x';
67258 }
67259
67260 },{}],65:[function(require,module,exports){
67261 'use strict'
67262 module.exports = require('./lib/api')(require('./lib/keccak'))
67263
67264 },{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
67265 'use strict'
67266 var createKeccak = require('./keccak')
67267 var createShake = require('./shake')
67268
67269 module.exports = function (KeccakState) {
67270 var Keccak = createKeccak(KeccakState)
67271 var Shake = createShake(KeccakState)
67272
67273 return function (algorithm, options) {
67274 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
67275 switch (hash) {
67276 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
67277 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
67278 case 'keccak384': return new Keccak(832, 768, null, 384, options)
67279 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
67280
67281 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
67282 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
67283 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
67284 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
67285
67286 case 'shake128': return new Shake(1344, 256, 0x1f, options)
67287 case 'shake256': return new Shake(1088, 512, 0x1f, options)
67288
67289 default: throw new Error('Invald algorithm: ' + algorithm)
67290 }
67291 }
67292 }
67293
67294 },{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
67295 (function (Buffer){
67296 'use strict'
67297 var Transform = require('stream').Transform
67298 var inherits = require('inherits')
67299
67300 module.exports = function (KeccakState) {
67301 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
67302 Transform.call(this, options)
67303
67304 this._rate = rate
67305 this._capacity = capacity
67306 this._delimitedSuffix = delimitedSuffix
67307 this._hashBitLength = hashBitLength
67308 this._options = options
67309
67310 this._state = new KeccakState()
67311 this._state.initialize(rate, capacity)
67312 this._finalized = false
67313 }
67314
67315 inherits(Keccak, Transform)
67316
67317 Keccak.prototype._transform = function (chunk, encoding, callback) {
67318 var error = null
67319 try {
67320 this.update(chunk, encoding)
67321 } catch (err) {
67322 error = err
67323 }
67324
67325 callback(error)
67326 }
67327
67328 Keccak.prototype._flush = function (callback) {
67329 var error = null
67330 try {
67331 this.push(this.digest())
67332 } catch (err) {
67333 error = err
67334 }
67335
67336 callback(error)
67337 }
67338
67339 Keccak.prototype.update = function (data, encoding) {
67340 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
67341 if (this._finalized) throw new Error('Digest already called')
67342 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
67343
67344 this._state.absorb(data)
67345
67346 return this
67347 }
67348
67349 Keccak.prototype.digest = function (encoding) {
67350 if (this._finalized) throw new Error('Digest already called')
67351 this._finalized = true
67352
67353 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
67354 var digest = this._state.squeeze(this._hashBitLength / 8)
67355 if (encoding !== undefined) digest = digest.toString(encoding)
67356
67357 this._resetState()
67358
67359 return digest
67360 }
67361
67362 // remove result from memory
67363 Keccak.prototype._resetState = function () {
67364 this._state.initialize(this._rate, this._capacity)
67365 return this
67366 }
67367
67368 // because sometimes we need hash right now and little later
67369 Keccak.prototype._clone = function () {
67370 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
67371 this._state.copy(clone._state)
67372 clone._finalized = this._finalized
67373
67374 return clone
67375 }
67376
67377 return Keccak
67378 }
67379
67380 }).call(this,require("buffer").Buffer)
67381 },{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
67382 (function (Buffer){
67383 'use strict'
67384 var Transform = require('stream').Transform
67385 var inherits = require('inherits')
67386
67387 module.exports = function (KeccakState) {
67388 function Shake (rate, capacity, delimitedSuffix, options) {
67389 Transform.call(this, options)
67390
67391 this._rate = rate
67392 this._capacity = capacity
67393 this._delimitedSuffix = delimitedSuffix
67394 this._options = options
67395
67396 this._state = new KeccakState()
67397 this._state.initialize(rate, capacity)
67398 this._finalized = false
67399 }
67400
67401 inherits(Shake, Transform)
67402
67403 Shake.prototype._transform = function (chunk, encoding, callback) {
67404 var error = null
67405 try {
67406 this.update(chunk, encoding)
67407 } catch (err) {
67408 error = err
67409 }
67410
67411 callback(error)
67412 }
67413
67414 Shake.prototype._flush = function () {}
67415
67416 Shake.prototype._read = function (size) {
67417 this.push(this.squeeze(size))
67418 }
67419
67420 Shake.prototype.update = function (data, encoding) {
67421 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
67422 if (this._finalized) throw new Error('Squeeze already called')
67423 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
67424
67425 this._state.absorb(data)
67426
67427 return this
67428 }
67429
67430 Shake.prototype.squeeze = function (dataByteLength, encoding) {
67431 if (!this._finalized) {
67432 this._finalized = true
67433 this._state.absorbLastFewBits(this._delimitedSuffix)
67434 }
67435
67436 var data = this._state.squeeze(dataByteLength)
67437 if (encoding !== undefined) data = data.toString(encoding)
67438
67439 return data
67440 }
67441
67442 Shake.prototype._resetState = function () {
67443 this._state.initialize(this._rate, this._capacity)
67444 return this
67445 }
67446
67447 Shake.prototype._clone = function () {
67448 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
67449 this._state.copy(clone._state)
67450 clone._finalized = this._finalized
67451
67452 return clone
67453 }
67454
67455 return Shake
67456 }
67457
67458 }).call(this,require("buffer").Buffer)
67459 },{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
67460 'use strict'
67461 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]
67462
67463 exports.p1600 = function (s) {
67464 for (var round = 0; round < 24; ++round) {
67465 // theta
67466 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
67467 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
67468 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
67469 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
67470 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
67471 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
67472 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
67473 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
67474 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
67475 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
67476
67477 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
67478 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
67479 var t1slo0 = s[0] ^ lo
67480 var t1shi0 = s[1] ^ hi
67481 var t1slo5 = s[10] ^ lo
67482 var t1shi5 = s[11] ^ hi
67483 var t1slo10 = s[20] ^ lo
67484 var t1shi10 = s[21] ^ hi
67485 var t1slo15 = s[30] ^ lo
67486 var t1shi15 = s[31] ^ hi
67487 var t1slo20 = s[40] ^ lo
67488 var t1shi20 = s[41] ^ hi
67489 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
67490 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
67491 var t1slo1 = s[2] ^ lo
67492 var t1shi1 = s[3] ^ hi
67493 var t1slo6 = s[12] ^ lo
67494 var t1shi6 = s[13] ^ hi
67495 var t1slo11 = s[22] ^ lo
67496 var t1shi11 = s[23] ^ hi
67497 var t1slo16 = s[32] ^ lo
67498 var t1shi16 = s[33] ^ hi
67499 var t1slo21 = s[42] ^ lo
67500 var t1shi21 = s[43] ^ hi
67501 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
67502 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
67503 var t1slo2 = s[4] ^ lo
67504 var t1shi2 = s[5] ^ hi
67505 var t1slo7 = s[14] ^ lo
67506 var t1shi7 = s[15] ^ hi
67507 var t1slo12 = s[24] ^ lo
67508 var t1shi12 = s[25] ^ hi
67509 var t1slo17 = s[34] ^ lo
67510 var t1shi17 = s[35] ^ hi
67511 var t1slo22 = s[44] ^ lo
67512 var t1shi22 = s[45] ^ hi
67513 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
67514 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
67515 var t1slo3 = s[6] ^ lo
67516 var t1shi3 = s[7] ^ hi
67517 var t1slo8 = s[16] ^ lo
67518 var t1shi8 = s[17] ^ hi
67519 var t1slo13 = s[26] ^ lo
67520 var t1shi13 = s[27] ^ hi
67521 var t1slo18 = s[36] ^ lo
67522 var t1shi18 = s[37] ^ hi
67523 var t1slo23 = s[46] ^ lo
67524 var t1shi23 = s[47] ^ hi
67525 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
67526 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
67527 var t1slo4 = s[8] ^ lo
67528 var t1shi4 = s[9] ^ hi
67529 var t1slo9 = s[18] ^ lo
67530 var t1shi9 = s[19] ^ hi
67531 var t1slo14 = s[28] ^ lo
67532 var t1shi14 = s[29] ^ hi
67533 var t1slo19 = s[38] ^ lo
67534 var t1shi19 = s[39] ^ hi
67535 var t1slo24 = s[48] ^ lo
67536 var t1shi24 = s[49] ^ hi
67537
67538 // rho & pi
67539 var t2slo0 = t1slo0
67540 var t2shi0 = t1shi0
67541 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
67542 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
67543 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
67544 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
67545 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
67546 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
67547 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
67548 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
67549 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
67550 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
67551 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
67552 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
67553 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
67554 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
67555 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
67556 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
67557 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
67558 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
67559 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
67560 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
67561 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
67562 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
67563 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
67564 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
67565 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
67566 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
67567 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
67568 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
67569 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
67570 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
67571 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
67572 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
67573 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
67574 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
67575 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
67576 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
67577 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
67578 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
67579 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
67580 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
67581 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
67582 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
67583 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
67584 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
67585 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
67586 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
67587 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
67588 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
67589
67590 // chi
67591 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
67592 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
67593 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
67594 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
67595 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
67596 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
67597 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
67598 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
67599 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
67600 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
67601 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
67602 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
67603 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
67604 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
67605 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
67606 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
67607 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
67608 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
67609 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
67610 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
67611 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
67612 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
67613 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
67614 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
67615 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
67616 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
67617 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
67618 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
67619 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
67620 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
67621 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
67622 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
67623 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
67624 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
67625 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
67626 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
67627 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
67628 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
67629 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
67630 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
67631 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
67632 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
67633 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
67634 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
67635 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
67636 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
67637 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
67638 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
67639 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
67640 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
67641
67642 // iota
67643 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
67644 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
67645 }
67646 }
67647
67648 },{}],70:[function(require,module,exports){
67649 (function (Buffer){
67650 'use strict'
67651 var keccakState = require('./keccak-state-unroll')
67652
67653 function Keccak () {
67654 // much faster than `new Array(50)`
67655 this.state = [
67656 0, 0, 0, 0, 0,
67657 0, 0, 0, 0, 0,
67658 0, 0, 0, 0, 0,
67659 0, 0, 0, 0, 0,
67660 0, 0, 0, 0, 0
67661 ]
67662
67663 this.blockSize = null
67664 this.count = 0
67665 this.squeezing = false
67666 }
67667
67668 Keccak.prototype.initialize = function (rate, capacity) {
67669 for (var i = 0; i < 50; ++i) this.state[i] = 0
67670 this.blockSize = rate / 8
67671 this.count = 0
67672 this.squeezing = false
67673 }
67674
67675 Keccak.prototype.absorb = function (data) {
67676 for (var i = 0; i < data.length; ++i) {
67677 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
67678 this.count += 1
67679 if (this.count === this.blockSize) {
67680 keccakState.p1600(this.state)
67681 this.count = 0
67682 }
67683 }
67684 }
67685
67686 Keccak.prototype.absorbLastFewBits = function (bits) {
67687 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
67688 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
67689 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
67690 keccakState.p1600(this.state)
67691 this.count = 0
67692 this.squeezing = true
67693 }
67694
67695 Keccak.prototype.squeeze = function (length) {
67696 if (!this.squeezing) this.absorbLastFewBits(0x01)
67697
67698 var output = Buffer.allocUnsafe(length)
67699 for (var i = 0; i < length; ++i) {
67700 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
67701 this.count += 1
67702 if (this.count === this.blockSize) {
67703 keccakState.p1600(this.state)
67704 this.count = 0
67705 }
67706 }
67707
67708 return output
67709 }
67710
67711 Keccak.prototype.copy = function (dest) {
67712 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
67713 dest.blockSize = this.blockSize
67714 dest.count = this.count
67715 dest.squeezing = this.squeezing
67716 }
67717
67718 module.exports = Keccak
67719
67720 }).call(this,require("buffer").Buffer)
67721 },{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
67722 (function (Buffer){
67723 /*
67724 CryptoJS v3.1.2
67725 code.google.com/p/crypto-js
67726 (c) 2009-2013 by Jeff Mott. All rights reserved.
67727 code.google.com/p/crypto-js/wiki/License
67728 */
67729 /** @preserve
67730 (c) 2012 by Cédric Mesnil. All rights reserved.
67731
67732 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
67733
67734 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
67735 - 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.
67736
67737 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.
67738 */
67739
67740 // constants table
67741 var zl = [
67742 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
67743 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
67744 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
67745 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
67746 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
67747 ]
67748
67749 var zr = [
67750 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
67751 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
67752 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
67753 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
67754 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
67755 ]
67756
67757 var sl = [
67758 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
67759 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
67760 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
67761 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
67762 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
67763 ]
67764
67765 var sr = [
67766 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
67767 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
67768 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
67769 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
67770 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
67771 ]
67772
67773 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
67774 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
67775
67776 function bytesToWords (bytes) {
67777 var words = []
67778 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
67779 words[b >>> 5] |= bytes[i] << (24 - b % 32)
67780 }
67781 return words
67782 }
67783
67784 function wordsToBytes (words) {
67785 var bytes = []
67786 for (var b = 0; b < words.length * 32; b += 8) {
67787 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
67788 }
67789 return bytes
67790 }
67791
67792 function processBlock (H, M, offset) {
67793 // swap endian
67794 for (var i = 0; i < 16; i++) {
67795 var offset_i = offset + i
67796 var M_offset_i = M[offset_i]
67797
67798 // Swap
67799 M[offset_i] = (
67800 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
67801 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
67802 )
67803 }
67804
67805 // Working variables
67806 var al, bl, cl, dl, el
67807 var ar, br, cr, dr, er
67808
67809 ar = al = H[0]
67810 br = bl = H[1]
67811 cr = cl = H[2]
67812 dr = dl = H[3]
67813 er = el = H[4]
67814
67815 // computation
67816 var t
67817 for (i = 0; i < 80; i += 1) {
67818 t = (al + M[offset + zl[i]]) | 0
67819 if (i < 16) {
67820 t += f1(bl, cl, dl) + hl[0]
67821 } else if (i < 32) {
67822 t += f2(bl, cl, dl) + hl[1]
67823 } else if (i < 48) {
67824 t += f3(bl, cl, dl) + hl[2]
67825 } else if (i < 64) {
67826 t += f4(bl, cl, dl) + hl[3]
67827 } else {// if (i<80) {
67828 t += f5(bl, cl, dl) + hl[4]
67829 }
67830 t = t | 0
67831 t = rotl(t, sl[i])
67832 t = (t + el) | 0
67833 al = el
67834 el = dl
67835 dl = rotl(cl, 10)
67836 cl = bl
67837 bl = t
67838
67839 t = (ar + M[offset + zr[i]]) | 0
67840 if (i < 16) {
67841 t += f5(br, cr, dr) + hr[0]
67842 } else if (i < 32) {
67843 t += f4(br, cr, dr) + hr[1]
67844 } else if (i < 48) {
67845 t += f3(br, cr, dr) + hr[2]
67846 } else if (i < 64) {
67847 t += f2(br, cr, dr) + hr[3]
67848 } else {// if (i<80) {
67849 t += f1(br, cr, dr) + hr[4]
67850 }
67851
67852 t = t | 0
67853 t = rotl(t, sr[i])
67854 t = (t + er) | 0
67855 ar = er
67856 er = dr
67857 dr = rotl(cr, 10)
67858 cr = br
67859 br = t
67860 }
67861
67862 // intermediate hash value
67863 t = (H[1] + cl + dr) | 0
67864 H[1] = (H[2] + dl + er) | 0
67865 H[2] = (H[3] + el + ar) | 0
67866 H[3] = (H[4] + al + br) | 0
67867 H[4] = (H[0] + bl + cr) | 0
67868 H[0] = t
67869 }
67870
67871 function f1 (x, y, z) {
67872 return ((x) ^ (y) ^ (z))
67873 }
67874
67875 function f2 (x, y, z) {
67876 return (((x) & (y)) | ((~x) & (z)))
67877 }
67878
67879 function f3 (x, y, z) {
67880 return (((x) | (~(y))) ^ (z))
67881 }
67882
67883 function f4 (x, y, z) {
67884 return (((x) & (z)) | ((y) & (~(z))))
67885 }
67886
67887 function f5 (x, y, z) {
67888 return ((x) ^ ((y) | (~(z))))
67889 }
67890
67891 function rotl (x, n) {
67892 return (x << n) | (x >>> (32 - n))
67893 }
67894
67895 function ripemd160 (message) {
67896 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
67897
67898 if (typeof message === 'string') {
67899 message = new Buffer(message, 'utf8')
67900 }
67901
67902 var m = bytesToWords(message)
67903
67904 var nBitsLeft = message.length * 8
67905 var nBitsTotal = message.length * 8
67906
67907 // Add padding
67908 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
67909 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
67910 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
67911 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
67912 )
67913
67914 for (var i = 0; i < m.length; i += 16) {
67915 processBlock(H, m, i)
67916 }
67917
67918 // swap endian
67919 for (i = 0; i < 5; i++) {
67920 // shortcut
67921 var H_i = H[i]
67922
67923 // Swap
67924 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
67925 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
67926 }
67927
67928 var digestbytes = wordsToBytes(H)
67929 return new Buffer(digestbytes)
67930 }
67931
67932 module.exports = ripemd160
67933
67934 }).call(this,require("buffer").Buffer)
67935 },{"buffer":5}],72:[function(require,module,exports){
67936 (function (Buffer){
67937 const assert = require('assert')
67938 /**
67939 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
67940 * This function takes in a data, convert it to buffer if not, and a length for recursion
67941 *
67942 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
67943 * @returns {Buffer} - returns buffer of encoded data
67944 **/
67945 exports.encode = function (input) {
67946 if (input instanceof Array) {
67947 var output = []
67948 for (var i = 0; i < input.length; i++) {
67949 output.push(exports.encode(input[i]))
67950 }
67951 var buf = Buffer.concat(output)
67952 return Buffer.concat([encodeLength(buf.length, 192), buf])
67953 } else {
67954 input = toBuffer(input)
67955 if (input.length === 1 && input[0] < 128) {
67956 return input
67957 } else {
67958 return Buffer.concat([encodeLength(input.length, 128), input])
67959 }
67960 }
67961 }
67962
67963 function safeParseInt (v, base) {
67964 if (v.slice(0, 2) === '00') {
67965 throw (new Error('invalid RLP: extra zeros'))
67966 }
67967
67968 return parseInt(v, base)
67969 }
67970
67971 function encodeLength (len, offset) {
67972 if (len < 56) {
67973 return new Buffer([len + offset])
67974 } else {
67975 var hexLength = intToHex(len)
67976 var lLength = hexLength.length / 2
67977 var firstByte = intToHex(offset + 55 + lLength)
67978 return new Buffer(firstByte + hexLength, 'hex')
67979 }
67980 }
67981
67982 /**
67983 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
67984 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
67985 * @returns {Array} - returns decode Array of Buffers containg the original message
67986 **/
67987 exports.decode = function (input, stream) {
67988 if (!input || input.length === 0) {
67989 return new Buffer([])
67990 }
67991
67992 input = toBuffer(input)
67993 var decoded = _decode(input)
67994
67995 if (stream) {
67996 return decoded
67997 }
67998
67999 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
68000 return decoded.data
68001 }
68002
68003 exports.getLength = function (input) {
68004 if (!input || input.length === 0) {
68005 return new Buffer([])
68006 }
68007
68008 input = toBuffer(input)
68009 var firstByte = input[0]
68010 if (firstByte <= 0x7f) {
68011 return input.length
68012 } else if (firstByte <= 0xb7) {
68013 return firstByte - 0x7f
68014 } else if (firstByte <= 0xbf) {
68015 return firstByte - 0xb6
68016 } else if (firstByte <= 0xf7) {
68017 // a list between 0-55 bytes long
68018 return firstByte - 0xbf
68019 } else {
68020 // a list over 55 bytes long
68021 var llength = firstByte - 0xf6
68022 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
68023 return llength + length
68024 }
68025 }
68026
68027 function _decode (input) {
68028 var length, llength, data, innerRemainder, d
68029 var decoded = []
68030 var firstByte = input[0]
68031
68032 if (firstByte <= 0x7f) {
68033 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
68034 return {
68035 data: input.slice(0, 1),
68036 remainder: input.slice(1)
68037 }
68038 } else if (firstByte <= 0xb7) {
68039 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
68040 // The range of the first byte is [0x80, 0xb7]
68041 length = firstByte - 0x7f
68042
68043 // set 0x80 null to 0
68044 if (firstByte === 0x80) {
68045 data = new Buffer([])
68046 } else {
68047 data = input.slice(1, length)
68048 }
68049
68050 if (length === 2 && data[0] < 0x80) {
68051 throw new Error('invalid rlp encoding: byte must be less 0x80')
68052 }
68053
68054 return {
68055 data: data,
68056 remainder: input.slice(length)
68057 }
68058 } else if (firstByte <= 0xbf) {
68059 llength = firstByte - 0xb6
68060 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
68061 data = input.slice(llength, length + llength)
68062 if (data.length < length) {
68063 throw (new Error('invalid RLP'))
68064 }
68065
68066 return {
68067 data: data,
68068 remainder: input.slice(length + llength)
68069 }
68070 } else if (firstByte <= 0xf7) {
68071 // a list between 0-55 bytes long
68072 length = firstByte - 0xbf
68073 innerRemainder = input.slice(1, length)
68074 while (innerRemainder.length) {
68075 d = _decode(innerRemainder)
68076 decoded.push(d.data)
68077 innerRemainder = d.remainder
68078 }
68079
68080 return {
68081 data: decoded,
68082 remainder: input.slice(length)
68083 }
68084 } else {
68085 // a list over 55 bytes long
68086 llength = firstByte - 0xf6
68087 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
68088 var totalLength = llength + length
68089 if (totalLength > input.length) {
68090 throw new Error('invalid rlp: total length is larger than the data')
68091 }
68092
68093 innerRemainder = input.slice(llength, totalLength)
68094 if (innerRemainder.length === 0) {
68095 throw new Error('invalid rlp, List has a invalid length')
68096 }
68097
68098 while (innerRemainder.length) {
68099 d = _decode(innerRemainder)
68100 decoded.push(d.data)
68101 innerRemainder = d.remainder
68102 }
68103 return {
68104 data: decoded,
68105 remainder: input.slice(totalLength)
68106 }
68107 }
68108 }
68109
68110 function isHexPrefixed (str) {
68111 return str.slice(0, 2) === '0x'
68112 }
68113
68114 // Removes 0x from a given String
68115 function stripHexPrefix (str) {
68116 if (typeof str !== 'string') {
68117 return str
68118 }
68119 return isHexPrefixed(str) ? str.slice(2) : str
68120 }
68121
68122 function intToHex (i) {
68123 var hex = i.toString(16)
68124 if (hex.length % 2) {
68125 hex = '0' + hex
68126 }
68127
68128 return hex
68129 }
68130
68131 function padToEven (a) {
68132 if (a.length % 2) a = '0' + a
68133 return a
68134 }
68135
68136 function intToBuffer (i) {
68137 var hex = intToHex(i)
68138 return new Buffer(hex, 'hex')
68139 }
68140
68141 function toBuffer (v) {
68142 if (!Buffer.isBuffer(v)) {
68143 if (typeof v === 'string') {
68144 if (isHexPrefixed(v)) {
68145 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
68146 } else {
68147 v = new Buffer(v)
68148 }
68149 } else if (typeof v === 'number') {
68150 if (!v) {
68151 v = new Buffer([])
68152 } else {
68153 v = intToBuffer(v)
68154 }
68155 } else if (v === null || v === undefined) {
68156 v = new Buffer([])
68157 } else if (v.toArray) {
68158 // converts a BN to a Buffer
68159 v = new Buffer(v.toArray())
68160 } else {
68161 throw new Error('invalid type')
68162 }
68163 }
68164 return v
68165 }
68166
68167 }).call(this,require("buffer").Buffer)
68168 },{"assert":1,"buffer":5}],73:[function(require,module,exports){
68169 'use strict'
68170 module.exports = require('./lib')(require('./lib/elliptic'))
68171
68172 },{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
68173 (function (Buffer){
68174 'use strict'
68175 var toString = Object.prototype.toString
68176
68177 // TypeError
68178 exports.isArray = function (value, message) {
68179 if (!Array.isArray(value)) throw TypeError(message)
68180 }
68181
68182 exports.isBoolean = function (value, message) {
68183 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
68184 }
68185
68186 exports.isBuffer = function (value, message) {
68187 if (!Buffer.isBuffer(value)) throw TypeError(message)
68188 }
68189
68190 exports.isFunction = function (value, message) {
68191 if (toString.call(value) !== '[object Function]') throw TypeError(message)
68192 }
68193
68194 exports.isNumber = function (value, message) {
68195 if (toString.call(value) !== '[object Number]') throw TypeError(message)
68196 }
68197
68198 exports.isObject = function (value, message) {
68199 if (toString.call(value) !== '[object Object]') throw TypeError(message)
68200 }
68201
68202 // RangeError
68203 exports.isBufferLength = function (buffer, length, message) {
68204 if (buffer.length !== length) throw RangeError(message)
68205 }
68206
68207 exports.isBufferLength2 = function (buffer, length1, length2, message) {
68208 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
68209 }
68210
68211 exports.isLengthGTZero = function (value, message) {
68212 if (value.length === 0) throw RangeError(message)
68213 }
68214
68215 exports.isNumberInInterval = function (number, x, y, message) {
68216 if (number <= x || number >= y) throw RangeError(message)
68217 }
68218
68219 }).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
68220 },{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
68221 (function (Buffer){
68222 'use strict'
68223 var bip66 = require('bip66')
68224
68225 var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
68226 // begin
68227 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
68228 // private key
68229 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68230 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68231 // middle
68232 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
68233 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
68234 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
68235 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
68236 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
68237 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
68238 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
68239 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
68240 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
68241 // public key
68242 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68243 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68244 0x00
68245 ])
68246
68247 var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
68248 // begin
68249 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
68250 // private key
68251 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68252 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68253 // middle
68254 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
68255 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
68256 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
68257 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
68258 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
68259 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
68260 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
68261 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
68262 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
68263 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
68264 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
68265 // public key
68266 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68267 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68268 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68269 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68270 0x00
68271 ])
68272
68273 var ZERO_BUFFER_32 = new Buffer([
68274 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
68275 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
68276 ])
68277
68278 exports.privateKeyExport = function (privateKey, publicKey, compressed) {
68279 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
68280 privateKey.copy(result, compressed ? 8 : 9)
68281 publicKey.copy(result, compressed ? 181 : 214)
68282 return result
68283 }
68284
68285 exports.privateKeyImport = function (privateKey) {
68286 var length = privateKey.length
68287
68288 // sequence header
68289 var index = 0
68290 if (length < index + 1 || privateKey[index] !== 0x30) return
68291 index += 1
68292
68293 // sequence length constructor
68294 if (length < index + 1 || !(privateKey[index] & 0x80)) return
68295
68296 var lenb = privateKey[index] & 0x7f
68297 index += 1
68298 if (lenb < 1 || lenb > 2) return
68299 if (length < index + lenb) return
68300
68301 // sequence length
68302 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
68303 index += lenb
68304 if (length < index + len) return
68305
68306 // sequence element 0: version number (=1)
68307 if (length < index + 3 ||
68308 privateKey[index] !== 0x02 ||
68309 privateKey[index + 1] !== 0x01 ||
68310 privateKey[index + 2] !== 0x01) {
68311 return
68312 }
68313 index += 3
68314
68315 // sequence element 1: octet string, up to 32 bytes
68316 if (length < index + 2 ||
68317 privateKey[index] !== 0x04 ||
68318 privateKey[index + 1] > 0x20 ||
68319 length < index + 2 + privateKey[index + 1]) {
68320 return
68321 }
68322
68323 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
68324 }
68325
68326 exports.signatureExport = function (sigObj) {
68327 var r = Buffer.concat([new Buffer([0]), sigObj.r])
68328 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
68329
68330 var s = Buffer.concat([new Buffer([0]), sigObj.s])
68331 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
68332
68333 return bip66.encode(r.slice(posR), s.slice(posS))
68334 }
68335
68336 exports.signatureImport = function (sig) {
68337 var r = new Buffer(ZERO_BUFFER_32)
68338 var s = new Buffer(ZERO_BUFFER_32)
68339
68340 try {
68341 var sigObj = bip66.decode(sig)
68342 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
68343 if (sigObj.r.length > 32) throw new Error('R length is too long')
68344 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
68345 if (sigObj.s.length > 32) throw new Error('S length is too long')
68346 } catch (err) {
68347 return
68348 }
68349
68350 sigObj.r.copy(r, 32 - sigObj.r.length)
68351 sigObj.s.copy(s, 32 - sigObj.s.length)
68352
68353 return { r: r, s: s }
68354 }
68355
68356 exports.signatureImportLax = function (sig) {
68357 var r = new Buffer(ZERO_BUFFER_32)
68358 var s = new Buffer(ZERO_BUFFER_32)
68359
68360 var length = sig.length
68361 var index = 0
68362
68363 // sequence tag byte
68364 if (sig[index++] !== 0x30) return
68365
68366 // sequence length byte
68367 var lenbyte = sig[index++]
68368 if (lenbyte & 0x80) {
68369 index += lenbyte - 0x80
68370 if (index > length) return
68371 }
68372
68373 // sequence tag byte for r
68374 if (sig[index++] !== 0x02) return
68375
68376 // length for r
68377 var rlen = sig[index++]
68378 if (rlen & 0x80) {
68379 lenbyte = rlen - 0x80
68380 if (index + lenbyte > length) return
68381 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
68382 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
68383 }
68384 if (rlen > length - index) return
68385 var rindex = index
68386 index += rlen
68387
68388 // sequence tag byte for s
68389 if (sig[index++] !== 0x02) return
68390
68391 // length for s
68392 var slen = sig[index++]
68393 if (slen & 0x80) {
68394 lenbyte = slen - 0x80
68395 if (index + lenbyte > length) return
68396 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
68397 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
68398 }
68399 if (slen > length - index) return
68400 var sindex = index
68401 index += slen
68402
68403 // ignore leading zeros in r
68404 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
68405 // copy r value
68406 if (rlen > 32) return
68407 var rvalue = sig.slice(rindex, rindex + rlen)
68408 rvalue.copy(r, 32 - rvalue.length)
68409
68410 // ignore leading zeros in s
68411 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
68412 // copy s value
68413 if (slen > 32) return
68414 var svalue = sig.slice(sindex, sindex + slen)
68415 svalue.copy(s, 32 - svalue.length)
68416
68417 return { r: r, s: s }
68418 }
68419
68420 }).call(this,require("buffer").Buffer)
68421 },{"bip66":32,"buffer":5}],76:[function(require,module,exports){
68422 (function (Buffer){
68423 'use strict'
68424 var createHash = require('create-hash')
68425 var BN = require('bn.js')
68426 var EC = require('elliptic').ec
68427
68428 var messages = require('../messages.json')
68429
68430 var ec = new EC('secp256k1')
68431 var ecparams = ec.curve
68432
68433 function loadCompressedPublicKey (first, xBuffer) {
68434 var x = new BN(xBuffer)
68435
68436 // overflow
68437 if (x.cmp(ecparams.p) >= 0) return null
68438 x = x.toRed(ecparams.red)
68439
68440 // compute corresponding Y
68441 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
68442 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
68443
68444 return ec.keyPair({ pub: { x: x, y: y } })
68445 }
68446
68447 function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
68448 var x = new BN(xBuffer)
68449 var y = new BN(yBuffer)
68450
68451 // overflow
68452 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
68453
68454 x = x.toRed(ecparams.red)
68455 y = y.toRed(ecparams.red)
68456
68457 // is odd flag
68458 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
68459
68460 // x*x*x + b = y*y
68461 var x3 = x.redSqr().redIMul(x)
68462 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
68463
68464 return ec.keyPair({ pub: { x: x, y: y } })
68465 }
68466
68467 function loadPublicKey (publicKey) {
68468 var first = publicKey[0]
68469 switch (first) {
68470 case 0x02:
68471 case 0x03:
68472 if (publicKey.length !== 33) return null
68473 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
68474 case 0x04:
68475 case 0x06:
68476 case 0x07:
68477 if (publicKey.length !== 65) return null
68478 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
68479 default:
68480 return null
68481 }
68482 }
68483
68484 exports.privateKeyVerify = function (privateKey) {
68485 var bn = new BN(privateKey)
68486 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
68487 }
68488
68489 exports.privateKeyExport = function (privateKey, compressed) {
68490 var d = new BN(privateKey)
68491 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
68492
68493 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
68494 }
68495
68496 exports.privateKeyTweakAdd = function (privateKey, tweak) {
68497 var bn = new BN(tweak)
68498 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
68499
68500 bn.iadd(new BN(privateKey))
68501 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
68502 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
68503
68504 return bn.toArrayLike(Buffer, 'be', 32)
68505 }
68506
68507 exports.privateKeyTweakMul = function (privateKey, tweak) {
68508 var bn = new BN(tweak)
68509 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
68510
68511 bn.imul(new BN(privateKey))
68512 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
68513
68514 return bn.toArrayLike(Buffer, 'be', 32)
68515 }
68516
68517 exports.publicKeyCreate = function (privateKey, compressed) {
68518 var d = new BN(privateKey)
68519 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
68520
68521 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
68522 }
68523
68524 exports.publicKeyConvert = function (publicKey, compressed) {
68525 var pair = loadPublicKey(publicKey)
68526 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
68527
68528 return new Buffer(pair.getPublic(compressed, true))
68529 }
68530
68531 exports.publicKeyVerify = function (publicKey) {
68532 return loadPublicKey(publicKey) !== null
68533 }
68534
68535 exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
68536 var pair = loadPublicKey(publicKey)
68537 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
68538
68539 tweak = new BN(tweak)
68540 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
68541
68542 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
68543 }
68544
68545 exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
68546 var pair = loadPublicKey(publicKey)
68547 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
68548
68549 tweak = new BN(tweak)
68550 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
68551
68552 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
68553 }
68554
68555 exports.publicKeyCombine = function (publicKeys, compressed) {
68556 var pairs = new Array(publicKeys.length)
68557 for (var i = 0; i < publicKeys.length; ++i) {
68558 pairs[i] = loadPublicKey(publicKeys[i])
68559 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
68560 }
68561
68562 var point = pairs[0].pub
68563 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
68564 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
68565
68566 return new Buffer(point.encode(true, compressed))
68567 }
68568
68569 exports.signatureNormalize = function (signature) {
68570 var r = new BN(signature.slice(0, 32))
68571 var s = new BN(signature.slice(32, 64))
68572 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
68573
68574 var result = new Buffer(signature)
68575 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
68576
68577 return result
68578 }
68579
68580 exports.signatureExport = function (signature) {
68581 var r = signature.slice(0, 32)
68582 var s = signature.slice(32, 64)
68583 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
68584
68585 return { r: r, s: s }
68586 }
68587
68588 exports.signatureImport = function (sigObj) {
68589 var r = new BN(sigObj.r)
68590 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
68591
68592 var s = new BN(sigObj.s)
68593 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
68594
68595 return Buffer.concat([
68596 r.toArrayLike(Buffer, 'be', 32),
68597 s.toArrayLike(Buffer, 'be', 32)
68598 ])
68599 }
68600
68601 exports.sign = function (message, privateKey, noncefn, data) {
68602 if (typeof noncefn === 'function') {
68603 var getNonce = noncefn
68604 noncefn = function (counter) {
68605 var nonce = getNonce(message, privateKey, null, data, counter)
68606 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
68607
68608 return new BN(nonce)
68609 }
68610 }
68611
68612 var d = new BN(privateKey)
68613 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
68614
68615 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
68616 return {
68617 signature: Buffer.concat([
68618 result.r.toArrayLike(Buffer, 'be', 32),
68619 result.s.toArrayLike(Buffer, 'be', 32)
68620 ]),
68621 recovery: result.recoveryParam
68622 }
68623 }
68624
68625 exports.verify = function (message, signature, publicKey) {
68626 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
68627
68628 var sigr = new BN(sigObj.r)
68629 var sigs = new BN(sigObj.s)
68630 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
68631 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
68632
68633 var pair = loadPublicKey(publicKey)
68634 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
68635
68636 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
68637 }
68638
68639 exports.recover = function (message, signature, recovery, compressed) {
68640 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
68641
68642 var sigr = new BN(sigObj.r)
68643 var sigs = new BN(sigObj.s)
68644 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
68645
68646 try {
68647 if (sigr.isZero() || sigs.isZero()) throw new Error()
68648
68649 var point = ec.recoverPubKey(message, sigObj, recovery)
68650 return new Buffer(point.encode(true, compressed))
68651 } catch (err) {
68652 throw new Error(messages.ECDSA_RECOVER_FAIL)
68653 }
68654 }
68655
68656 exports.ecdh = function (publicKey, privateKey) {
68657 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
68658 return createHash('sha256').update(shared).digest()
68659 }
68660
68661 exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
68662 var pair = loadPublicKey(publicKey)
68663 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
68664
68665 var scalar = new BN(privateKey)
68666 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
68667
68668 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
68669 }
68670
68671 }).call(this,require("buffer").Buffer)
68672 },{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
68673 'use strict'
68674 var assert = require('./assert')
68675 var der = require('./der')
68676 var messages = require('./messages.json')
68677
68678 function initCompressedValue (value, defaultValue) {
68679 if (value === undefined) return defaultValue
68680
68681 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
68682 return value
68683 }
68684
68685 module.exports = function (secp256k1) {
68686 return {
68687 privateKeyVerify: function (privateKey) {
68688 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
68689 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
68690 },
68691
68692 privateKeyExport: function (privateKey, compressed) {
68693 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
68694 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
68695
68696 compressed = initCompressedValue(compressed, true)
68697 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
68698
68699 return der.privateKeyExport(privateKey, publicKey, compressed)
68700 },
68701
68702 privateKeyImport: function (privateKey) {
68703 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
68704
68705 privateKey = der.privateKeyImport(privateKey)
68706 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
68707
68708 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
68709 },
68710
68711 privateKeyTweakAdd: function (privateKey, tweak) {
68712 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
68713 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
68714
68715 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
68716 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
68717
68718 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
68719 },
68720
68721 privateKeyTweakMul: function (privateKey, tweak) {
68722 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
68723 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
68724
68725 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
68726 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
68727
68728 return secp256k1.privateKeyTweakMul(privateKey, tweak)
68729 },
68730
68731 publicKeyCreate: function (privateKey, compressed) {
68732 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
68733 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
68734
68735 compressed = initCompressedValue(compressed, true)
68736
68737 return secp256k1.publicKeyCreate(privateKey, compressed)
68738 },
68739
68740 publicKeyConvert: function (publicKey, compressed) {
68741 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
68742 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
68743
68744 compressed = initCompressedValue(compressed, true)
68745
68746 return secp256k1.publicKeyConvert(publicKey, compressed)
68747 },
68748
68749 publicKeyVerify: function (publicKey) {
68750 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
68751 return secp256k1.publicKeyVerify(publicKey)
68752 },
68753
68754 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
68755 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
68756 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
68757
68758 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
68759 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
68760
68761 compressed = initCompressedValue(compressed, true)
68762
68763 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
68764 },
68765
68766 publicKeyTweakMul: function (publicKey, tweak, compressed) {
68767 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
68768 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
68769
68770 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
68771 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
68772
68773 compressed = initCompressedValue(compressed, true)
68774
68775 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
68776 },
68777
68778 publicKeyCombine: function (publicKeys, compressed) {
68779 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
68780 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
68781 for (var i = 0; i < publicKeys.length; ++i) {
68782 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
68783 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
68784 }
68785
68786 compressed = initCompressedValue(compressed, true)
68787
68788 return secp256k1.publicKeyCombine(publicKeys, compressed)
68789 },
68790
68791 signatureNormalize: function (signature) {
68792 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
68793 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
68794
68795 return secp256k1.signatureNormalize(signature)
68796 },
68797
68798 signatureExport: function (signature) {
68799 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
68800 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
68801
68802 var sigObj = secp256k1.signatureExport(signature)
68803 return der.signatureExport(sigObj)
68804 },
68805
68806 signatureImport: function (sig) {
68807 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
68808 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
68809
68810 var sigObj = der.signatureImport(sig)
68811 if (sigObj) return secp256k1.signatureImport(sigObj)
68812
68813 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
68814 },
68815
68816 signatureImportLax: function (sig) {
68817 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
68818 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
68819
68820 var sigObj = der.signatureImportLax(sig)
68821 if (sigObj) return secp256k1.signatureImport(sigObj)
68822
68823 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
68824 },
68825
68826 sign: function (message, privateKey, options) {
68827 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
68828 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
68829
68830 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
68831 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
68832
68833 var data = null
68834 var noncefn = null
68835 if (options !== undefined) {
68836 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
68837
68838 if (options.data !== undefined) {
68839 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
68840 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
68841 data = options.data
68842 }
68843
68844 if (options.noncefn !== undefined) {
68845 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
68846 noncefn = options.noncefn
68847 }
68848 }
68849
68850 return secp256k1.sign(message, privateKey, noncefn, data)
68851 },
68852
68853 verify: function (message, signature, publicKey) {
68854 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
68855 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
68856
68857 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
68858 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
68859
68860 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
68861 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
68862
68863 return secp256k1.verify(message, signature, publicKey)
68864 },
68865
68866 recover: function (message, signature, recovery, compressed) {
68867 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
68868 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
68869
68870 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
68871 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
68872
68873 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
68874 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
68875
68876 compressed = initCompressedValue(compressed, true)
68877
68878 return secp256k1.recover(message, signature, recovery, compressed)
68879 },
68880
68881 ecdh: function (publicKey, privateKey) {
68882 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
68883 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
68884
68885 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
68886 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
68887
68888 return secp256k1.ecdh(publicKey, privateKey)
68889 },
68890
68891 ecdhUnsafe: function (publicKey, privateKey, compressed) {
68892 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
68893 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
68894
68895 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
68896 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
68897
68898 compressed = initCompressedValue(compressed, true)
68899
68900 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
68901 }
68902 }
68903 }
68904
68905 },{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
68906 module.exports={
68907 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
68908 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
68909 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
68910 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
68911 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
68912 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
68913 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
68914 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
68915 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
68916 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
68917 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
68918 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
68919 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
68920 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
68921 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
68922 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
68923 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
68924 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
68925 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
68926 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
68927 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
68928 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
68929 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
68930 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
68931 "MSG32_TYPE_INVALID": "message should be a Buffer",
68932 "MSG32_LENGTH_INVALID": "message length is invalid",
68933 "OPTIONS_TYPE_INVALID": "options should be an Object",
68934 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
68935 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
68936 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
68937 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
68938 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
68939 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
68940 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
68941 }
68942
68943 },{}],79:[function(require,module,exports){
68944 (function (Buffer){
68945 // prototype class for hash functions
68946 function Hash (blockSize, finalSize) {
68947 this._block = new Buffer(blockSize)
68948 this._finalSize = finalSize
68949 this._blockSize = blockSize
68950 this._len = 0
68951 this._s = 0
68952 }
68953
68954 Hash.prototype.update = function (data, enc) {
68955 if (typeof data === 'string') {
68956 enc = enc || 'utf8'
68957 data = new Buffer(data, enc)
68958 }
68959
68960 var l = this._len += data.length
68961 var s = this._s || 0
68962 var f = 0
68963 var buffer = this._block
68964
68965 while (s < l) {
68966 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
68967 var ch = (t - f)
68968
68969 for (var i = 0; i < ch; i++) {
68970 buffer[(s % this._blockSize) + i] = data[i + f]
68971 }
68972
68973 s += ch
68974 f += ch
68975
68976 if ((s % this._blockSize) === 0) {
68977 this._update(buffer)
68978 }
68979 }
68980 this._s = s
68981
68982 return this
68983 }
68984
68985 Hash.prototype.digest = function (enc) {
68986 // Suppose the length of the message M, in bits, is l
68987 var l = this._len * 8
68988
68989 // Append the bit 1 to the end of the message
68990 this._block[this._len % this._blockSize] = 0x80
68991
68992 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
68993 this._block.fill(0, this._len % this._blockSize + 1)
68994
68995 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
68996 this._update(this._block)
68997 this._block.fill(0)
68998 }
68999
69000 // to this append the block which is equal to the number l written in binary
69001 // TODO: handle case where l is > Math.pow(2, 29)
69002 this._block.writeInt32BE(l, this._blockSize - 4)
69003
69004 var hash = this._update(this._block) || this._hash()
69005
69006 return enc ? hash.toString(enc) : hash
69007 }
69008
69009 Hash.prototype._update = function () {
69010 throw new Error('_update must be implemented by subclass')
69011 }
69012
69013 module.exports = Hash
69014
69015 }).call(this,require("buffer").Buffer)
69016 },{"buffer":5}],80:[function(require,module,exports){
69017 var exports = module.exports = function SHA (algorithm) {
69018 algorithm = algorithm.toLowerCase()
69019
69020 var Algorithm = exports[algorithm]
69021 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
69022
69023 return new Algorithm()
69024 }
69025
69026 exports.sha = require('./sha')
69027 exports.sha1 = require('./sha1')
69028 exports.sha224 = require('./sha224')
69029 exports.sha256 = require('./sha256')
69030 exports.sha384 = require('./sha384')
69031 exports.sha512 = require('./sha512')
69032
69033 },{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
69034 (function (Buffer){
69035 /*
69036 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
69037 * in FIPS PUB 180-1
69038 * This source code is derived from sha1.js of the same repository.
69039 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
69040 * operation was added.
69041 */
69042
69043 var inherits = require('inherits')
69044 var Hash = require('./hash')
69045
69046 var K = [
69047 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
69048 ]
69049
69050 var W = new Array(80)
69051
69052 function Sha () {
69053 this.init()
69054 this._w = W
69055
69056 Hash.call(this, 64, 56)
69057 }
69058
69059 inherits(Sha, Hash)
69060
69061 Sha.prototype.init = function () {
69062 this._a = 0x67452301
69063 this._b = 0xefcdab89
69064 this._c = 0x98badcfe
69065 this._d = 0x10325476
69066 this._e = 0xc3d2e1f0
69067
69068 return this
69069 }
69070
69071 function rotl5 (num) {
69072 return (num << 5) | (num >>> 27)
69073 }
69074
69075 function rotl30 (num) {
69076 return (num << 30) | (num >>> 2)
69077 }
69078
69079 function ft (s, b, c, d) {
69080 if (s === 0) return (b & c) | ((~b) & d)
69081 if (s === 2) return (b & c) | (b & d) | (c & d)
69082 return b ^ c ^ d
69083 }
69084
69085 Sha.prototype._update = function (M) {
69086 var W = this._w
69087
69088 var a = this._a | 0
69089 var b = this._b | 0
69090 var c = this._c | 0
69091 var d = this._d | 0
69092 var e = this._e | 0
69093
69094 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
69095 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
69096
69097 for (var j = 0; j < 80; ++j) {
69098 var s = ~~(j / 20)
69099 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
69100
69101 e = d
69102 d = c
69103 c = rotl30(b)
69104 b = a
69105 a = t
69106 }
69107
69108 this._a = (a + this._a) | 0
69109 this._b = (b + this._b) | 0
69110 this._c = (c + this._c) | 0
69111 this._d = (d + this._d) | 0
69112 this._e = (e + this._e) | 0
69113 }
69114
69115 Sha.prototype._hash = function () {
69116 var H = new Buffer(20)
69117
69118 H.writeInt32BE(this._a | 0, 0)
69119 H.writeInt32BE(this._b | 0, 4)
69120 H.writeInt32BE(this._c | 0, 8)
69121 H.writeInt32BE(this._d | 0, 12)
69122 H.writeInt32BE(this._e | 0, 16)
69123
69124 return H
69125 }
69126
69127 module.exports = Sha
69128
69129 }).call(this,require("buffer").Buffer)
69130 },{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
69131 (function (Buffer){
69132 /*
69133 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
69134 * in FIPS PUB 180-1
69135 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
69136 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
69137 * Distributed under the BSD License
69138 * See http://pajhome.org.uk/crypt/md5 for details.
69139 */
69140
69141 var inherits = require('inherits')
69142 var Hash = require('./hash')
69143
69144 var K = [
69145 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
69146 ]
69147
69148 var W = new Array(80)
69149
69150 function Sha1 () {
69151 this.init()
69152 this._w = W
69153
69154 Hash.call(this, 64, 56)
69155 }
69156
69157 inherits(Sha1, Hash)
69158
69159 Sha1.prototype.init = function () {
69160 this._a = 0x67452301
69161 this._b = 0xefcdab89
69162 this._c = 0x98badcfe
69163 this._d = 0x10325476
69164 this._e = 0xc3d2e1f0
69165
69166 return this
69167 }
69168
69169 function rotl1 (num) {
69170 return (num << 1) | (num >>> 31)
69171 }
69172
69173 function rotl5 (num) {
69174 return (num << 5) | (num >>> 27)
69175 }
69176
69177 function rotl30 (num) {
69178 return (num << 30) | (num >>> 2)
69179 }
69180
69181 function ft (s, b, c, d) {
69182 if (s === 0) return (b & c) | ((~b) & d)
69183 if (s === 2) return (b & c) | (b & d) | (c & d)
69184 return b ^ c ^ d
69185 }
69186
69187 Sha1.prototype._update = function (M) {
69188 var W = this._w
69189
69190 var a = this._a | 0
69191 var b = this._b | 0
69192 var c = this._c | 0
69193 var d = this._d | 0
69194 var e = this._e | 0
69195
69196 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
69197 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
69198
69199 for (var j = 0; j < 80; ++j) {
69200 var s = ~~(j / 20)
69201 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
69202
69203 e = d
69204 d = c
69205 c = rotl30(b)
69206 b = a
69207 a = t
69208 }
69209
69210 this._a = (a + this._a) | 0
69211 this._b = (b + this._b) | 0
69212 this._c = (c + this._c) | 0
69213 this._d = (d + this._d) | 0
69214 this._e = (e + this._e) | 0
69215 }
69216
69217 Sha1.prototype._hash = function () {
69218 var H = new Buffer(20)
69219
69220 H.writeInt32BE(this._a | 0, 0)
69221 H.writeInt32BE(this._b | 0, 4)
69222 H.writeInt32BE(this._c | 0, 8)
69223 H.writeInt32BE(this._d | 0, 12)
69224 H.writeInt32BE(this._e | 0, 16)
69225
69226 return H
69227 }
69228
69229 module.exports = Sha1
69230
69231 }).call(this,require("buffer").Buffer)
69232 },{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
69233 (function (Buffer){
69234 /**
69235 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
69236 * in FIPS 180-2
69237 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
69238 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
69239 *
69240 */
69241
69242 var inherits = require('inherits')
69243 var Sha256 = require('./sha256')
69244 var Hash = require('./hash')
69245
69246 var W = new Array(64)
69247
69248 function Sha224 () {
69249 this.init()
69250
69251 this._w = W // new Array(64)
69252
69253 Hash.call(this, 64, 56)
69254 }
69255
69256 inherits(Sha224, Sha256)
69257
69258 Sha224.prototype.init = function () {
69259 this._a = 0xc1059ed8
69260 this._b = 0x367cd507
69261 this._c = 0x3070dd17
69262 this._d = 0xf70e5939
69263 this._e = 0xffc00b31
69264 this._f = 0x68581511
69265 this._g = 0x64f98fa7
69266 this._h = 0xbefa4fa4
69267
69268 return this
69269 }
69270
69271 Sha224.prototype._hash = function () {
69272 var H = new Buffer(28)
69273
69274 H.writeInt32BE(this._a, 0)
69275 H.writeInt32BE(this._b, 4)
69276 H.writeInt32BE(this._c, 8)
69277 H.writeInt32BE(this._d, 12)
69278 H.writeInt32BE(this._e, 16)
69279 H.writeInt32BE(this._f, 20)
69280 H.writeInt32BE(this._g, 24)
69281
69282 return H
69283 }
69284
69285 module.exports = Sha224
69286
69287 }).call(this,require("buffer").Buffer)
69288 },{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
69289 (function (Buffer){
69290 /**
69291 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
69292 * in FIPS 180-2
69293 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
69294 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
69295 *
69296 */
69297
69298 var inherits = require('inherits')
69299 var Hash = require('./hash')
69300
69301 var K = [
69302 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
69303 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
69304 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
69305 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
69306 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
69307 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
69308 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
69309 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
69310 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
69311 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
69312 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
69313 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
69314 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
69315 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
69316 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
69317 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
69318 ]
69319
69320 var W = new Array(64)
69321
69322 function Sha256 () {
69323 this.init()
69324
69325 this._w = W // new Array(64)
69326
69327 Hash.call(this, 64, 56)
69328 }
69329
69330 inherits(Sha256, Hash)
69331
69332 Sha256.prototype.init = function () {
69333 this._a = 0x6a09e667
69334 this._b = 0xbb67ae85
69335 this._c = 0x3c6ef372
69336 this._d = 0xa54ff53a
69337 this._e = 0x510e527f
69338 this._f = 0x9b05688c
69339 this._g = 0x1f83d9ab
69340 this._h = 0x5be0cd19
69341
69342 return this
69343 }
69344
69345 function ch (x, y, z) {
69346 return z ^ (x & (y ^ z))
69347 }
69348
69349 function maj (x, y, z) {
69350 return (x & y) | (z & (x | y))
69351 }
69352
69353 function sigma0 (x) {
69354 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
69355 }
69356
69357 function sigma1 (x) {
69358 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
69359 }
69360
69361 function gamma0 (x) {
69362 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
69363 }
69364
69365 function gamma1 (x) {
69366 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
69367 }
69368
69369 Sha256.prototype._update = function (M) {
69370 var W = this._w
69371
69372 var a = this._a | 0
69373 var b = this._b | 0
69374 var c = this._c | 0
69375 var d = this._d | 0
69376 var e = this._e | 0
69377 var f = this._f | 0
69378 var g = this._g | 0
69379 var h = this._h | 0
69380
69381 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
69382 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
69383
69384 for (var j = 0; j < 64; ++j) {
69385 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
69386 var T2 = (sigma0(a) + maj(a, b, c)) | 0
69387
69388 h = g
69389 g = f
69390 f = e
69391 e = (d + T1) | 0
69392 d = c
69393 c = b
69394 b = a
69395 a = (T1 + T2) | 0
69396 }
69397
69398 this._a = (a + this._a) | 0
69399 this._b = (b + this._b) | 0
69400 this._c = (c + this._c) | 0
69401 this._d = (d + this._d) | 0
69402 this._e = (e + this._e) | 0
69403 this._f = (f + this._f) | 0
69404 this._g = (g + this._g) | 0
69405 this._h = (h + this._h) | 0
69406 }
69407
69408 Sha256.prototype._hash = function () {
69409 var H = new Buffer(32)
69410
69411 H.writeInt32BE(this._a, 0)
69412 H.writeInt32BE(this._b, 4)
69413 H.writeInt32BE(this._c, 8)
69414 H.writeInt32BE(this._d, 12)
69415 H.writeInt32BE(this._e, 16)
69416 H.writeInt32BE(this._f, 20)
69417 H.writeInt32BE(this._g, 24)
69418 H.writeInt32BE(this._h, 28)
69419
69420 return H
69421 }
69422
69423 module.exports = Sha256
69424
69425 }).call(this,require("buffer").Buffer)
69426 },{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
69427 (function (Buffer){
69428 var inherits = require('inherits')
69429 var SHA512 = require('./sha512')
69430 var Hash = require('./hash')
69431
69432 var W = new Array(160)
69433
69434 function Sha384 () {
69435 this.init()
69436 this._w = W
69437
69438 Hash.call(this, 128, 112)
69439 }
69440
69441 inherits(Sha384, SHA512)
69442
69443 Sha384.prototype.init = function () {
69444 this._ah = 0xcbbb9d5d
69445 this._bh = 0x629a292a
69446 this._ch = 0x9159015a
69447 this._dh = 0x152fecd8
69448 this._eh = 0x67332667
69449 this._fh = 0x8eb44a87
69450 this._gh = 0xdb0c2e0d
69451 this._hh = 0x47b5481d
69452
69453 this._al = 0xc1059ed8
69454 this._bl = 0x367cd507
69455 this._cl = 0x3070dd17
69456 this._dl = 0xf70e5939
69457 this._el = 0xffc00b31
69458 this._fl = 0x68581511
69459 this._gl = 0x64f98fa7
69460 this._hl = 0xbefa4fa4
69461
69462 return this
69463 }
69464
69465 Sha384.prototype._hash = function () {
69466 var H = new Buffer(48)
69467
69468 function writeInt64BE (h, l, offset) {
69469 H.writeInt32BE(h, offset)
69470 H.writeInt32BE(l, offset + 4)
69471 }
69472
69473 writeInt64BE(this._ah, this._al, 0)
69474 writeInt64BE(this._bh, this._bl, 8)
69475 writeInt64BE(this._ch, this._cl, 16)
69476 writeInt64BE(this._dh, this._dl, 24)
69477 writeInt64BE(this._eh, this._el, 32)
69478 writeInt64BE(this._fh, this._fl, 40)
69479
69480 return H
69481 }
69482
69483 module.exports = Sha384
69484
69485 }).call(this,require("buffer").Buffer)
69486 },{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
69487 (function (Buffer){
69488 var inherits = require('inherits')
69489 var Hash = require('./hash')
69490
69491 var K = [
69492 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
69493 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
69494 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
69495 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
69496 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
69497 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
69498 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
69499 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
69500 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
69501 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
69502 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
69503 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
69504 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
69505 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
69506 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
69507 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
69508 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
69509 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
69510 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
69511 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
69512 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
69513 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
69514 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
69515 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
69516 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
69517 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
69518 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
69519 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
69520 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
69521 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
69522 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
69523 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
69524 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
69525 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
69526 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
69527 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
69528 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
69529 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
69530 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
69531 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
69532 ]
69533
69534 var W = new Array(160)
69535
69536 function Sha512 () {
69537 this.init()
69538 this._w = W
69539
69540 Hash.call(this, 128, 112)
69541 }
69542
69543 inherits(Sha512, Hash)
69544
69545 Sha512.prototype.init = function () {
69546 this._ah = 0x6a09e667
69547 this._bh = 0xbb67ae85
69548 this._ch = 0x3c6ef372
69549 this._dh = 0xa54ff53a
69550 this._eh = 0x510e527f
69551 this._fh = 0x9b05688c
69552 this._gh = 0x1f83d9ab
69553 this._hh = 0x5be0cd19
69554
69555 this._al = 0xf3bcc908
69556 this._bl = 0x84caa73b
69557 this._cl = 0xfe94f82b
69558 this._dl = 0x5f1d36f1
69559 this._el = 0xade682d1
69560 this._fl = 0x2b3e6c1f
69561 this._gl = 0xfb41bd6b
69562 this._hl = 0x137e2179
69563
69564 return this
69565 }
69566
69567 function Ch (x, y, z) {
69568 return z ^ (x & (y ^ z))
69569 }
69570
69571 function maj (x, y, z) {
69572 return (x & y) | (z & (x | y))
69573 }
69574
69575 function sigma0 (x, xl) {
69576 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
69577 }
69578
69579 function sigma1 (x, xl) {
69580 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
69581 }
69582
69583 function Gamma0 (x, xl) {
69584 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
69585 }
69586
69587 function Gamma0l (x, xl) {
69588 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
69589 }
69590
69591 function Gamma1 (x, xl) {
69592 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
69593 }
69594
69595 function Gamma1l (x, xl) {
69596 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
69597 }
69598
69599 function getCarry (a, b) {
69600 return (a >>> 0) < (b >>> 0) ? 1 : 0
69601 }
69602
69603 Sha512.prototype._update = function (M) {
69604 var W = this._w
69605
69606 var ah = this._ah | 0
69607 var bh = this._bh | 0
69608 var ch = this._ch | 0
69609 var dh = this._dh | 0
69610 var eh = this._eh | 0
69611 var fh = this._fh | 0
69612 var gh = this._gh | 0
69613 var hh = this._hh | 0
69614
69615 var al = this._al | 0
69616 var bl = this._bl | 0
69617 var cl = this._cl | 0
69618 var dl = this._dl | 0
69619 var el = this._el | 0
69620 var fl = this._fl | 0
69621 var gl = this._gl | 0
69622 var hl = this._hl | 0
69623
69624 for (var i = 0; i < 32; i += 2) {
69625 W[i] = M.readInt32BE(i * 4)
69626 W[i + 1] = M.readInt32BE(i * 4 + 4)
69627 }
69628 for (; i < 160; i += 2) {
69629 var xh = W[i - 15 * 2]
69630 var xl = W[i - 15 * 2 + 1]
69631 var gamma0 = Gamma0(xh, xl)
69632 var gamma0l = Gamma0l(xl, xh)
69633
69634 xh = W[i - 2 * 2]
69635 xl = W[i - 2 * 2 + 1]
69636 var gamma1 = Gamma1(xh, xl)
69637 var gamma1l = Gamma1l(xl, xh)
69638
69639 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
69640 var Wi7h = W[i - 7 * 2]
69641 var Wi7l = W[i - 7 * 2 + 1]
69642
69643 var Wi16h = W[i - 16 * 2]
69644 var Wi16l = W[i - 16 * 2 + 1]
69645
69646 var Wil = (gamma0l + Wi7l) | 0
69647 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
69648 Wil = (Wil + gamma1l) | 0
69649 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
69650 Wil = (Wil + Wi16l) | 0
69651 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
69652
69653 W[i] = Wih
69654 W[i + 1] = Wil
69655 }
69656
69657 for (var j = 0; j < 160; j += 2) {
69658 Wih = W[j]
69659 Wil = W[j + 1]
69660
69661 var majh = maj(ah, bh, ch)
69662 var majl = maj(al, bl, cl)
69663
69664 var sigma0h = sigma0(ah, al)
69665 var sigma0l = sigma0(al, ah)
69666 var sigma1h = sigma1(eh, el)
69667 var sigma1l = sigma1(el, eh)
69668
69669 // t1 = h + sigma1 + ch + K[j] + W[j]
69670 var Kih = K[j]
69671 var Kil = K[j + 1]
69672
69673 var chh = Ch(eh, fh, gh)
69674 var chl = Ch(el, fl, gl)
69675
69676 var t1l = (hl + sigma1l) | 0
69677 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
69678 t1l = (t1l + chl) | 0
69679 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
69680 t1l = (t1l + Kil) | 0
69681 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
69682 t1l = (t1l + Wil) | 0
69683 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
69684
69685 // t2 = sigma0 + maj
69686 var t2l = (sigma0l + majl) | 0
69687 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
69688
69689 hh = gh
69690 hl = gl
69691 gh = fh
69692 gl = fl
69693 fh = eh
69694 fl = el
69695 el = (dl + t1l) | 0
69696 eh = (dh + t1h + getCarry(el, dl)) | 0
69697 dh = ch
69698 dl = cl
69699 ch = bh
69700 cl = bl
69701 bh = ah
69702 bl = al
69703 al = (t1l + t2l) | 0
69704 ah = (t1h + t2h + getCarry(al, t1l)) | 0
69705 }
69706
69707 this._al = (this._al + al) | 0
69708 this._bl = (this._bl + bl) | 0
69709 this._cl = (this._cl + cl) | 0
69710 this._dl = (this._dl + dl) | 0
69711 this._el = (this._el + el) | 0
69712 this._fl = (this._fl + fl) | 0
69713 this._gl = (this._gl + gl) | 0
69714 this._hl = (this._hl + hl) | 0
69715
69716 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
69717 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
69718 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
69719 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
69720 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
69721 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
69722 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
69723 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
69724 }
69725
69726 Sha512.prototype._hash = function () {
69727 var H = new Buffer(64)
69728
69729 function writeInt64BE (h, l, offset) {
69730 H.writeInt32BE(h, offset)
69731 H.writeInt32BE(l, offset + 4)
69732 }
69733
69734 writeInt64BE(this._ah, this._al, 0)
69735 writeInt64BE(this._bh, this._bl, 8)
69736 writeInt64BE(this._ch, this._cl, 16)
69737 writeInt64BE(this._dh, this._dl, 24)
69738 writeInt64BE(this._eh, this._el, 32)
69739 writeInt64BE(this._fh, this._fl, 40)
69740 writeInt64BE(this._gh, this._gl, 48)
69741 writeInt64BE(this._hh, this._hl, 56)
69742
69743 return H
69744 }
69745
69746 module.exports = Sha512
69747
69748 }).call(this,require("buffer").Buffer)
69749 },{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
69750 var isHexPrefixed = require('is-hex-prefixed');
69751
69752 /**
69753 * Removes '0x' from a given `String` is present
69754 * @param {String} str the string value
69755 * @return {String|Optional} a string by pass if necessary
69756 */
69757 module.exports = function stripHexPrefix(str) {
69758 if (typeof str !== 'string') {
69759 return str;
69760 }
69761
69762 return isHexPrefixed(str) ? str.slice(2) : str;
69763 }
69764
69765 },{"is-hex-prefixed":64}]},{},[31])(31)
69766 });</script>
69767 <script>function convertRippleAdrr(address) {
69768 return window.basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(
69769 window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(address)
69770 )
69771 }
69772
69773 function convertRipplePriv(priv) {
69774 return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2,66)
69775 }
69776
69777 </script>
69778 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
69779
69780 //// base.js
69781
69782 /** @fileOverview Javascript cryptography implementation.
69783 *
69784 * Crush to remove comments, shorten variable names and
69785 * generally reduce transmission size.
69786 *
69787 * @author Emily Stark
69788 * @author Mike Hamburg
69789 * @author Dan Boneh
69790 */
69791
69792 "use strict";
69793 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
69794 /*global document, window, escape, unescape, module, require, Uint32Array */
69795
69796 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
69797 var sjcl = {
69798 /** @namespace Symmetric ciphers. */
69799 cipher: {},
69800
69801 /** @namespace Hash functions. Right now only SHA256 is implemented. */
69802 hash: {},
69803
69804 /** @namespace Key exchange functions. Right now only SRP is implemented. */
69805 keyexchange: {},
69806
69807 /** @namespace Block cipher modes of operation. */
69808 mode: {},
69809
69810 /** @namespace Miscellaneous. HMAC and PBKDF2. */
69811 misc: {},
69812
69813 /**
69814 * @namespace Bit array encoders and decoders.
69815 *
69816 * @description
69817 * The members of this namespace are functions which translate between
69818 * SJCL's bitArrays and other objects (usually strings). Because it
69819 * isn't always clear which direction is encoding and which is decoding,
69820 * the method names are "fromBits" and "toBits".
69821 */
69822 codec: {},
69823
69824 /** @namespace Exceptions. */
69825 exception: {
69826 /** @constructor Ciphertext is corrupt. */
69827 corrupt: function(message) {
69828 this.toString = function() { return "CORRUPT: "+this.message; };
69829 this.message = message;
69830 },
69831
69832 /** @constructor Invalid parameter. */
69833 invalid: function(message) {
69834 this.toString = function() { return "INVALID: "+this.message; };
69835 this.message = message;
69836 },
69837
69838 /** @constructor Bug or missing feature in SJCL. @constructor */
69839 bug: function(message) {
69840 this.toString = function() { return "BUG: "+this.message; };
69841 this.message = message;
69842 },
69843
69844 /** @constructor Something isn't ready. */
69845 notReady: function(message) {
69846 this.toString = function() { return "NOT READY: "+this.message; };
69847 this.message = message;
69848 }
69849 }
69850 };
69851
69852 if(typeof module !== 'undefined' && module.exports){
69853 module.exports = sjcl;
69854 }
69855 if (typeof define === "function") {
69856 define([], function () {
69857 return sjcl;
69858 });
69859 }
69860
69861
69862 //// bitArray.js
69863
69864 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
69865 *
69866 * @author Emily Stark
69867 * @author Mike Hamburg
69868 * @author Dan Boneh
69869 */
69870
69871 /** @namespace Arrays of bits, encoded as arrays of Numbers.
69872 *
69873 * @description
69874 * <p>
69875 * These objects are the currency accepted by SJCL's crypto functions.
69876 * </p>
69877 *
69878 * <p>
69879 * Most of our crypto primitives operate on arrays of 4-byte words internally,
69880 * but many of them can take arguments that are not a multiple of 4 bytes.
69881 * This library encodes arrays of bits (whose size need not be a multiple of 8
69882 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
69883 * array of words, 32 bits at a time. Since the words are double-precision
69884 * floating point numbers, they fit some extra data. We use this (in a private,
69885 * possibly-changing manner) to encode the number of bits actually present
69886 * in the last word of the array.
69887 * </p>
69888 *
69889 * <p>
69890 * Because bitwise ops clear this out-of-band data, these arrays can be passed
69891 * to ciphers like AES which want arrays of words.
69892 * </p>
69893 */
69894 sjcl.bitArray = {
69895 /**
69896 * Array slices in units of bits.
69897 * @param {bitArray} a The array to slice.
69898 * @param {Number} bstart The offset to the start of the slice, in bits.
69899 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
69900 * slice until the end of the array.
69901 * @return {bitArray} The requested slice.
69902 */
69903 bitSlice: function (a, bstart, bend) {
69904 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
69905 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
69906 },
69907
69908 /**
69909 * Extract a number packed into a bit array.
69910 * @param {bitArray} a The array to slice.
69911 * @param {Number} bstart The offset to the start of the slice, in bits.
69912 * @param {Number} length The length of the number to extract.
69913 * @return {Number} The requested slice.
69914 */
69915 extract: function(a, bstart, blength) {
69916 // FIXME: this Math.floor is not necessary at all, but for some reason
69917 // seems to suppress a bug in the Chromium JIT.
69918 var x, sh = Math.floor((-bstart-blength) & 31);
69919 if ((bstart + blength - 1 ^ bstart) & -32) {
69920 // it crosses a boundary
69921 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
69922 } else {
69923 // within a single word
69924 x = a[bstart/32|0] >>> sh;
69925 }
69926 return x & ((1<<blength) - 1);
69927 },
69928
69929 /**
69930 * Concatenate two bit arrays.
69931 * @param {bitArray} a1 The first array.
69932 * @param {bitArray} a2 The second array.
69933 * @return {bitArray} The concatenation of a1 and a2.
69934 */
69935 concat: function (a1, a2) {
69936 if (a1.length === 0 || a2.length === 0) {
69937 return a1.concat(a2);
69938 }
69939
69940 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
69941 if (shift === 32) {
69942 return a1.concat(a2);
69943 } else {
69944 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
69945 }
69946 },
69947
69948 /**
69949 * Find the length of an array of bits.
69950 * @param {bitArray} a The array.
69951 * @return {Number} The length of a, in bits.
69952 */
69953 bitLength: function (a) {
69954 var l = a.length, x;
69955 if (l === 0) { return 0; }
69956 x = a[l - 1];
69957 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
69958 },
69959
69960 /**
69961 * Truncate an array.
69962 * @param {bitArray} a The array.
69963 * @param {Number} len The length to truncate to, in bits.
69964 * @return {bitArray} A new array, truncated to len bits.
69965 */
69966 clamp: function (a, len) {
69967 if (a.length * 32 < len) { return a; }
69968 a = a.slice(0, Math.ceil(len / 32));
69969 var l = a.length;
69970 len = len & 31;
69971 if (l > 0 && len) {
69972 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
69973 }
69974 return a;
69975 },
69976
69977 /**
69978 * Make a partial word for a bit array.
69979 * @param {Number} len The number of bits in the word.
69980 * @param {Number} x The bits.
69981 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
69982 * @return {Number} The partial word.
69983 */
69984 partial: function (len, x, _end) {
69985 if (len === 32) { return x; }
69986 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
69987 },
69988
69989 /**
69990 * Get the number of bits used by a partial word.
69991 * @param {Number} x The partial word.
69992 * @return {Number} The number of bits used by the partial word.
69993 */
69994 getPartial: function (x) {
69995 return Math.round(x/0x10000000000) || 32;
69996 },
69997
69998 /**
69999 * Compare two arrays for equality in a predictable amount of time.
70000 * @param {bitArray} a The first array.
70001 * @param {bitArray} b The second array.
70002 * @return {boolean} true if a == b; false otherwise.
70003 */
70004 equal: function (a, b) {
70005 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
70006 return false;
70007 }
70008 var x = 0, i;
70009 for (i=0; i<a.length; i++) {
70010 x |= a[i]^b[i];
70011 }
70012 return (x === 0);
70013 },
70014
70015 /** Shift an array right.
70016 * @param {bitArray} a The array to shift.
70017 * @param {Number} shift The number of bits to shift.
70018 * @param {Number} [carry=0] A byte to carry in
70019 * @param {bitArray} [out=[]] An array to prepend to the output.
70020 * @private
70021 */
70022 _shiftRight: function (a, shift, carry, out) {
70023 var i, last2=0, shift2;
70024 if (out === undefined) { out = []; }
70025
70026 for (; shift >= 32; shift -= 32) {
70027 out.push(carry);
70028 carry = 0;
70029 }
70030 if (shift === 0) {
70031 return out.concat(a);
70032 }
70033
70034 for (i=0; i<a.length; i++) {
70035 out.push(carry | a[i]>>>shift);
70036 carry = a[i] << (32-shift);
70037 }
70038 last2 = a.length ? a[a.length-1] : 0;
70039 shift2 = sjcl.bitArray.getPartial(last2);
70040 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
70041 return out;
70042 },
70043
70044 /** xor a block of 4 words together.
70045 * @private
70046 */
70047 _xor4: function(x,y) {
70048 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
70049 },
70050
70051 /** byteswap a word array inplace.
70052 * (does not handle partial words)
70053 * @param {sjcl.bitArray} a word array
70054 * @return {sjcl.bitArray} byteswapped array
70055 */
70056 byteswapM: function(a) {
70057 var i, v, m = 0xff00;
70058 for (i = 0; i < a.length; ++i) {
70059 v = a[i];
70060 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
70061 }
70062 return a;
70063 }
70064 };
70065
70066
70067 //// codecString.js
70068
70069 /** @fileOverview Bit array codec implementations.
70070 *
70071 * @author Emily Stark
70072 * @author Mike Hamburg
70073 * @author Dan Boneh
70074 */
70075
70076 /** @namespace UTF-8 strings */
70077 sjcl.codec.utf8String = {
70078 /** Convert from a bitArray to a UTF-8 string. */
70079 fromBits: function (arr) {
70080 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
70081 for (i=0; i<bl/8; i++) {
70082 if ((i&3) === 0) {
70083 tmp = arr[i/4];
70084 }
70085 out += String.fromCharCode(tmp >>> 24);
70086 tmp <<= 8;
70087 }
70088 return decodeURIComponent(escape(out));
70089 },
70090
70091 /** Convert from a UTF-8 string to a bitArray. */
70092 toBits: function (str) {
70093 str = unescape(encodeURIComponent(str));
70094 var out = [], i, tmp=0;
70095 for (i=0; i<str.length; i++) {
70096 tmp = tmp << 8 | str.charCodeAt(i);
70097 if ((i&3) === 3) {
70098 out.push(tmp);
70099 tmp = 0;
70100 }
70101 }
70102 if (i&3) {
70103 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
70104 }
70105 return out;
70106 }
70107 };
70108
70109
70110 //// codecHex.js
70111
70112 /** @fileOverview Bit array codec implementations.
70113 *
70114 * @author Emily Stark
70115 * @author Mike Hamburg
70116 * @author Dan Boneh
70117 */
70118
70119 /** @namespace Hexadecimal */
70120 sjcl.codec.hex = {
70121 /** Convert from a bitArray to a hex string. */
70122 fromBits: function (arr) {
70123 var out = "", i;
70124 for (i=0; i<arr.length; i++) {
70125 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
70126 }
70127 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
70128 },
70129 /** Convert from a hex string to a bitArray. */
70130 toBits: function (str) {
70131 var i, out=[], len;
70132 str = str.replace(/\s|0x/g, "");
70133 len = str.length;
70134 str = str + "00000000";
70135 for (i=0; i<str.length; i+=8) {
70136 out.push(parseInt(str.substr(i,8),16)^0);
70137 }
70138 return sjcl.bitArray.clamp(out, len*4);
70139 }
70140 };
70141
70142
70143 //// sha512.js
70144
70145 /** @fileOverview Javascript SHA-512 implementation.
70146 *
70147 * This implementation was written for CryptoJS by Jeff Mott and adapted for
70148 * SJCL by Stefan Thomas.
70149 *
70150 * CryptoJS (c) 20092012 by Jeff Mott. All rights reserved.
70151 * Released with New BSD License
70152 *
70153 * @author Emily Stark
70154 * @author Mike Hamburg
70155 * @author Dan Boneh
70156 * @author Jeff Mott
70157 * @author Stefan Thomas
70158 */
70159
70160 /**
70161 * Context for a SHA-512 operation in progress.
70162 * @constructor
70163 * @class Secure Hash Algorithm, 512 bits.
70164 */
70165 sjcl.hash.sha512 = function (hash) {
70166 if (!this._key[0]) { this._precompute(); }
70167 if (hash) {
70168 this._h = hash._h.slice(0);
70169 this._buffer = hash._buffer.slice(0);
70170 this._length = hash._length;
70171 } else {
70172 this.reset();
70173 }
70174 };
70175
70176 /**
70177 * Hash a string or an array of words.
70178 * @static
70179 * @param {bitArray|String} data the data to hash.
70180 * @return {bitArray} The hash value, an array of 16 big-endian words.
70181 */
70182 sjcl.hash.sha512.hash = function (data) {
70183 return (new sjcl.hash.sha512()).update(data).finalize();
70184 };
70185
70186 sjcl.hash.sha512.prototype = {
70187 /**
70188 * The hash's block size, in bits.
70189 * @constant
70190 */
70191 blockSize: 1024,
70192
70193 /**
70194 * Reset the hash state.
70195 * @return this
70196 */
70197 reset:function () {
70198 this._h = this._init.slice(0);
70199 this._buffer = [];
70200 this._length = 0;
70201 return this;
70202 },
70203
70204 /**
70205 * Input several words to the hash.
70206 * @param {bitArray|String} data the data to hash.
70207 * @return this
70208 */
70209 update: function (data) {
70210 if (typeof data === "string") {
70211 data = sjcl.codec.utf8String.toBits(data);
70212 }
70213 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
70214 ol = this._length,
70215 nl = this._length = ol + sjcl.bitArray.bitLength(data);
70216 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
70217 this._block(b.splice(0,32));
70218 }
70219 return this;
70220 },
70221
70222 /**
70223 * Complete hashing and output the hash value.
70224 * @return {bitArray} The hash value, an array of 16 big-endian words.
70225 */
70226 finalize:function () {
70227 var i, b = this._buffer, h = this._h;
70228
70229 // Round out and push the buffer
70230 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
70231
70232 // Round out the buffer to a multiple of 32 words, less the 4 length words.
70233 for (i = b.length + 4; i & 31; i++) {
70234 b.push(0);
70235 }
70236
70237 // append the length
70238 b.push(0);
70239 b.push(0);
70240 b.push(Math.floor(this._length / 0x100000000));
70241 b.push(this._length | 0);
70242
70243 while (b.length) {
70244 this._block(b.splice(0,32));
70245 }
70246
70247 this.reset();
70248 return h;
70249 },
70250
70251 /**
70252 * The SHA-512 initialization vector, to be precomputed.
70253 * @private
70254 */
70255 _init:[],
70256
70257 /**
70258 * Least significant 24 bits of SHA512 initialization values.
70259 *
70260 * Javascript only has 53 bits of precision, so we compute the 40 most
70261 * significant bits and add the remaining 24 bits as constants.
70262 *
70263 * @private
70264 */
70265 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
70266
70267 /*
70268 _init:
70269 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
70270 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
70271 */
70272
70273 /**
70274 * The SHA-512 hash key, to be precomputed.
70275 * @private
70276 */
70277 _key:[],
70278
70279 /**
70280 * Least significant 24 bits of SHA512 key values.
70281 * @private
70282 */
70283 _keyr:
70284 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
70285 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
70286 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
70287 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
70288 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
70289 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
70290 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
70291 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
70292 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
70293 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
70294
70295 /*
70296 _key:
70297 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
70298 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
70299 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
70300 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
70301 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
70302 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
70303 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
70304 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
70305 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
70306 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
70307 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
70308 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
70309 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
70310 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
70311 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
70312 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
70313 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
70314 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
70315 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
70316 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
70317 */
70318
70319 /**
70320 * Function to precompute _init and _key.
70321 * @private
70322 */
70323 _precompute: function () {
70324 // XXX: This code is for precomputing the SHA256 constants, change for
70325 // SHA512 and re-enable.
70326 var i = 0, prime = 2, factor;
70327
70328 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
70329 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
70330
70331 outer: for (; i<80; prime++) {
70332 for (factor=2; factor*factor <= prime; factor++) {
70333 if (prime % factor === 0) {
70334 // not a prime
70335 continue outer;
70336 }
70337 }
70338
70339 if (i<8) {
70340 this._init[i*2] = frac(Math.pow(prime, 1/2));
70341 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
70342 }
70343 this._key[i*2] = frac(Math.pow(prime, 1/3));
70344 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
70345 i++;
70346 }
70347 },
70348
70349 /**
70350 * Perform one cycle of SHA-512.
70351 * @param {bitArray} words one block of words.
70352 * @private
70353 */
70354 _block:function (words) {
70355 var i, wrh, wrl,
70356 w = words.slice(0),
70357 h = this._h,
70358 k = this._key,
70359 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
70360 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
70361 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
70362 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
70363
70364 // Working variables
70365 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
70366 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
70367 eh = h4h, el = h4l, fh = h5h, fl = h5l,
70368 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
70369
70370 for (i=0; i<80; i++) {
70371 // load up the input word for this round
70372 if (i<16) {
70373 wrh = w[i * 2];
70374 wrl = w[i * 2 + 1];
70375 } else {
70376 // Gamma0
70377 var gamma0xh = w[(i-15) * 2];
70378 var gamma0xl = w[(i-15) * 2 + 1];
70379 var gamma0h =
70380 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
70381 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
70382 (gamma0xh >>> 7);
70383 var gamma0l =
70384 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
70385 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
70386 ((gamma0xh << 25) | (gamma0xl >>> 7));
70387
70388 // Gamma1
70389 var gamma1xh = w[(i-2) * 2];
70390 var gamma1xl = w[(i-2) * 2 + 1];
70391 var gamma1h =
70392 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
70393 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
70394 (gamma1xh >>> 6);
70395 var gamma1l =
70396 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
70397 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
70398 ((gamma1xh << 26) | (gamma1xl >>> 6));
70399
70400 // Shortcuts
70401 var wr7h = w[(i-7) * 2];
70402 var wr7l = w[(i-7) * 2 + 1];
70403
70404 var wr16h = w[(i-16) * 2];
70405 var wr16l = w[(i-16) * 2 + 1];
70406
70407 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
70408 wrl = gamma0l + wr7l;
70409 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
70410 wrl += gamma1l;
70411 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
70412 wrl += wr16l;
70413 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
70414 }
70415
70416 w[i*2] = wrh |= 0;
70417 w[i*2 + 1] = wrl |= 0;
70418
70419 // Ch
70420 var chh = (eh & fh) ^ (~eh & gh);
70421 var chl = (el & fl) ^ (~el & gl);
70422
70423 // Maj
70424 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
70425 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
70426
70427 // Sigma0
70428 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
70429 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
70430
70431 // Sigma1
70432 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
70433 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
70434
70435 // K(round)
70436 var krh = k[i*2];
70437 var krl = k[i*2+1];
70438
70439 // t1 = h + sigma1 + ch + K(round) + W(round)
70440 var t1l = hl + sigma1l;
70441 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
70442 t1l += chl;
70443 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
70444 t1l += krl;
70445 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
70446 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
70447 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
70448
70449 // t2 = sigma0 + maj
70450 var t2l = sigma0l + majl;
70451 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
70452
70453 // Update working variables
70454 hh = gh;
70455 hl = gl;
70456 gh = fh;
70457 gl = fl;
70458 fh = eh;
70459 fl = el;
70460 el = (dl + t1l) | 0;
70461 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
70462 dh = ch;
70463 dl = cl;
70464 ch = bh;
70465 cl = bl;
70466 bh = ah;
70467 bl = al;
70468 al = (t1l + t2l) | 0;
70469 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
70470 }
70471
70472 // Intermediate hash
70473 h0l = h[1] = (h0l + al) | 0;
70474 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
70475 h1l = h[3] = (h1l + bl) | 0;
70476 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
70477 h2l = h[5] = (h2l + cl) | 0;
70478 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
70479 h3l = h[7] = (h3l + dl) | 0;
70480 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
70481 h4l = h[9] = (h4l + el) | 0;
70482 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
70483 h5l = h[11] = (h5l + fl) | 0;
70484 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
70485 h6l = h[13] = (h6l + gl) | 0;
70486 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
70487 h7l = h[15] = (h7l + hl) | 0;
70488 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
70489 }
70490 };
70491
70492
70493 //// hmac.js
70494
70495 /** @fileOverview HMAC implementation.
70496 *
70497 * @author Emily Stark
70498 * @author Mike Hamburg
70499 * @author Dan Boneh
70500 */
70501
70502 /** HMAC with the specified hash function.
70503 * @constructor
70504 * @param {bitArray} key the key for HMAC.
70505 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
70506 */
70507 sjcl.misc.hmac = function (key, Hash) {
70508 this._hash = Hash = Hash || sjcl.hash.sha256;
70509 var exKey = [[],[]], i,
70510 bs = Hash.prototype.blockSize / 32;
70511 this._baseHash = [new Hash(), new Hash()];
70512
70513 if (key.length > bs) {
70514 key = Hash.hash(key);
70515 }
70516
70517 for (i=0; i<bs; i++) {
70518 exKey[0][i] = key[i]^0x36363636;
70519 exKey[1][i] = key[i]^0x5C5C5C5C;
70520 }
70521
70522 this._baseHash[0].update(exKey[0]);
70523 this._baseHash[1].update(exKey[1]);
70524 this._resultHash = new Hash(this._baseHash[0]);
70525 };
70526
70527 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
70528 * @param {bitArray|String} data The data to mac.
70529 */
70530 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
70531 if (!this._updated) {
70532 this.update(data);
70533 return this.digest(data);
70534 } else {
70535 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
70536 }
70537 };
70538
70539 sjcl.misc.hmac.prototype.reset = function () {
70540 this._resultHash = new this._hash(this._baseHash[0]);
70541 this._updated = false;
70542 };
70543
70544 sjcl.misc.hmac.prototype.update = function (data) {
70545 this._updated = true;
70546 this._resultHash.update(data);
70547 };
70548
70549 sjcl.misc.hmac.prototype.digest = function () {
70550 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
70551
70552 this.reset();
70553
70554 return result;
70555 };
70556
70557
70558 //// pbkdf2.js
70559
70560
70561 /** @fileOverview Password-based key-derivation function, version 2.0.
70562 *
70563 * @author Emily Stark
70564 * @author Mike Hamburg
70565 * @author Dan Boneh
70566 */
70567
70568 /** Password-Based Key-Derivation Function, version 2.0.
70569 *
70570 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
70571 *
70572 * This is the method specified by RSA's PKCS #5 standard.
70573 *
70574 * @param {bitArray|String} password The password.
70575 * @param {bitArray|String} salt The salt. Should have lots of entropy.
70576 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
70577 * @param {Number} [length] The length of the derived key. Defaults to the
70578 output size of the hash function.
70579 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
70580 * @return {bitArray} the derived key.
70581 */
70582 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
70583 count = count || 1000;
70584
70585 if (length < 0 || count < 0) {
70586 throw sjcl.exception.invalid("invalid params to pbkdf2");
70587 }
70588
70589 if (typeof password === "string") {
70590 password = sjcl.codec.utf8String.toBits(password);
70591 }
70592
70593 if (typeof salt === "string") {
70594 salt = sjcl.codec.utf8String.toBits(salt);
70595 }
70596
70597 Prff = Prff || sjcl.misc.hmac;
70598
70599 var prf = new Prff(password),
70600 u, ui, i, j, k, out = [], b = sjcl.bitArray;
70601
70602 for (k = 1; 32 * out.length < (length || 1); k++) {
70603 u = ui = prf.encrypt(b.concat(salt,[k]));
70604
70605 for (i=1; i<count; i++) {
70606 ui = prf.encrypt(ui);
70607 for (j=0; j<ui.length; j++) {
70608 u[j] ^= ui[j];
70609 }
70610 }
70611
70612 out = out.concat(u);
70613 }
70614
70615 if (length) { out = b.clamp(out, length); }
70616
70617 return out;
70618 };
70619
70620
70621 //// sha256.js
70622
70623 /** @fileOverview Javascript SHA-256 implementation.
70624 *
70625 * An older version of this implementation is available in the public
70626 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
70627 * Stanford University 2008-2010 and BSD-licensed for liability
70628 * reasons.
70629 *
70630 * Special thanks to Aldo Cortesi for pointing out several bugs in
70631 * this code.
70632 *
70633 * @author Emily Stark
70634 * @author Mike Hamburg
70635 * @author Dan Boneh
70636 */
70637
70638 /**
70639 * Context for a SHA-256 operation in progress.
70640 * @constructor
70641 * @class Secure Hash Algorithm, 256 bits.
70642 */
70643 sjcl.hash.sha256 = function (hash) {
70644 if (!this._key[0]) { this._precompute(); }
70645 if (hash) {
70646 this._h = hash._h.slice(0);
70647 this._buffer = hash._buffer.slice(0);
70648 this._length = hash._length;
70649 } else {
70650 this.reset();
70651 }
70652 };
70653
70654 /**
70655 * Hash a string or an array of words.
70656 * @static
70657 * @param {bitArray|String} data the data to hash.
70658 * @return {bitArray} The hash value, an array of 16 big-endian words.
70659 */
70660 sjcl.hash.sha256.hash = function (data) {
70661 return (new sjcl.hash.sha256()).update(data).finalize();
70662 };
70663
70664 sjcl.hash.sha256.prototype = {
70665 /**
70666 * The hash's block size, in bits.
70667 * @constant
70668 */
70669 blockSize: 512,
70670
70671 /**
70672 * Reset the hash state.
70673 * @return this
70674 */
70675 reset:function () {
70676 this._h = this._init.slice(0);
70677 this._buffer = [];
70678 this._length = 0;
70679 return this;
70680 },
70681
70682 /**
70683 * Input several words to the hash.
70684 * @param {bitArray|String} data the data to hash.
70685 * @return this
70686 */
70687 update: function (data) {
70688 if (typeof data === "string") {
70689 data = sjcl.codec.utf8String.toBits(data);
70690 }
70691 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
70692 ol = this._length,
70693 nl = this._length = ol + sjcl.bitArray.bitLength(data);
70694 for (i = 512+ol & -512; i <= nl; i+= 512) {
70695 this._block(b.splice(0,16));
70696 }
70697 return this;
70698 },
70699
70700 /**
70701 * Complete hashing and output the hash value.
70702 * @return {bitArray} The hash value, an array of 8 big-endian words.
70703 */
70704 finalize:function () {
70705 var i, b = this._buffer, h = this._h;
70706
70707 // Round out and push the buffer
70708 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
70709
70710 // Round out the buffer to a multiple of 16 words, less the 2 length words.
70711 for (i = b.length + 2; i & 15; i++) {
70712 b.push(0);
70713 }
70714
70715 // append the length
70716 b.push(Math.floor(this._length / 0x100000000));
70717 b.push(this._length | 0);
70718
70719 while (b.length) {
70720 this._block(b.splice(0,16));
70721 }
70722
70723 this.reset();
70724 return h;
70725 },
70726
70727 /**
70728 * The SHA-256 initialization vector, to be precomputed.
70729 * @private
70730 */
70731 _init:[],
70732 /*
70733 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
70734 */
70735
70736 /**
70737 * The SHA-256 hash key, to be precomputed.
70738 * @private
70739 */
70740 _key:[],
70741 /*
70742 _key:
70743 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
70744 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
70745 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
70746 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
70747 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
70748 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
70749 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
70750 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
70751 */
70752
70753
70754 /**
70755 * Function to precompute _init and _key.
70756 * @private
70757 */
70758 _precompute: function () {
70759 var i = 0, prime = 2, factor;
70760
70761 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
70762
70763 outer: for (; i<64; prime++) {
70764 for (factor=2; factor*factor <= prime; factor++) {
70765 if (prime % factor === 0) {
70766 // not a prime
70767 continue outer;
70768 }
70769 }
70770
70771 if (i<8) {
70772 this._init[i] = frac(Math.pow(prime, 1/2));
70773 }
70774 this._key[i] = frac(Math.pow(prime, 1/3));
70775 i++;
70776 }
70777 },
70778
70779 /**
70780 * Perform one cycle of SHA-256.
70781 * @param {bitArray} words one block of words.
70782 * @private
70783 */
70784 _block:function (words) {
70785 var i, tmp, a, b,
70786 w = words.slice(0),
70787 h = this._h,
70788 k = this._key,
70789 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
70790 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
70791
70792 /* Rationale for placement of |0 :
70793 * If a value can overflow is original 32 bits by a factor of more than a few
70794 * million (2^23 ish), there is a possibility that it might overflow the
70795 * 53-bit mantissa and lose precision.
70796 *
70797 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
70798 * propagates around the loop, and on the hash state h[]. I don't believe
70799 * that the clamps on h4 and on h0 are strictly necessary, but it's close
70800 * (for h4 anyway), and better safe than sorry.
70801 *
70802 * The clamps on h[] are necessary for the output to be correct even in the
70803 * common case and for short inputs.
70804 */
70805 for (i=0; i<64; i++) {
70806 // load up the input word for this round
70807 if (i<16) {
70808 tmp = w[i];
70809 } else {
70810 a = w[(i+1 ) & 15];
70811 b = w[(i+14) & 15];
70812 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
70813 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
70814 w[i&15] + w[(i+9) & 15]) | 0;
70815 }
70816
70817 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
70818
70819 // shift register
70820 h7 = h6; h6 = h5; h5 = h4;
70821 h4 = h3 + tmp | 0;
70822 h3 = h2; h2 = h1; h1 = h0;
70823
70824 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
70825 }
70826
70827 h[0] = h[0]+h0 | 0;
70828 h[1] = h[1]+h1 | 0;
70829 h[2] = h[2]+h2 | 0;
70830 h[3] = h[3]+h3 | 0;
70831 h[4] = h[4]+h4 | 0;
70832 h[5] = h[5]+h5 | 0;
70833 h[6] = h[6]+h6 | 0;
70834 h[7] = h[7]+h7 | 0;
70835 }
70836 };
70837 </script>
70838 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
70839 WORDLISTS["english"] = [
70840 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
70841 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
70842 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
70843 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
70844 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
70845 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
70846 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
70847 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
70848 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
70849 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
70850 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
70851 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
70852 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
70853 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
70854 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
70855 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
70856 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
70857 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
70858 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
70859 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
70860 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
70861 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
70862 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
70863 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
70864 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
70865 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
70866 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
70867 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
70868 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
70869 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
70870 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
70871 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
70872 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
70873 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
70874 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
70875 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
70876 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
70877 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
70878 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
70879 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
70880 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
70881 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
70882 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
70883 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
70884 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
70885 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
70886 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
70887 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
70888 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
70889 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
70890 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
70891 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
70892 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
70893 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
70894 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
70895 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
70896 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
70897 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
70898 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
70899 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
70900 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
70901 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
70902 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
70903 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
70904 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
70905 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
70906 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
70907 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
70908 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
70909 "film","filter","final","find","fine","finger","finish","fire","firm","first",
70910 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
70911 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
70912 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
70913 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
70914 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
70915 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
70916 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
70917 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
70918 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
70919 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
70920 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
70921 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
70922 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
70923 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
70924 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
70925 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
70926 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
70927 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
70928 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
70929 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
70930 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
70931 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
70932 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
70933 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
70934 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
70935 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
70936 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
70937 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
70938 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
70939 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
70940 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
70941 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
70942 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
70943 "liar","liberty","library","license","life","lift","light","like","limb","limit",
70944 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
70945 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
70946 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
70947 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
70948 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
70949 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
70950 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
70951 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
70952 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
70953 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
70954 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
70955 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
70956 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
70957 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
70958 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
70959 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
70960 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
70961 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
70962 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
70963 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
70964 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
70965 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
70966 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
70967 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
70968 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
70969 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
70970 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
70971 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
70972 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
70973 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
70974 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
70975 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
70976 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
70977 "prize","problem","process","produce","profit","program","project","promote","proof","property",
70978 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
70979 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
70980 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
70981 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
70982 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
70983 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
70984 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
70985 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
70986 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
70987 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
70988 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
70989 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
70990 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
70991 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
70992 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
70993 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
70994 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
70995 "scrub","sea","search","season","seat","second","secret","section","security","seed",
70996 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
70997 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
70998 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
70999 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
71000 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
71001 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
71002 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
71003 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
71004 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
71005 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
71006 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
71007 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
71008 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
71009 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
71010 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
71011 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
71012 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
71013 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
71014 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
71015 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
71016 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
71017 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
71018 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
71019 "thank","that","theme","then","theory","there","they","thing","this","thought",
71020 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
71021 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
71022 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
71023 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
71024 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
71025 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
71026 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
71027 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
71028 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
71029 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
71030 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
71031 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
71032 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
71033 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
71034 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
71035 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
71036 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
71037 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
71038 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
71039 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
71040 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
71041 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
71042 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
71043 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
71044 "yellow","you","young","youth","zebra","zero","zone","zoo"]
71045 </script>
71046 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
71047 WORDLISTS["japanese"] = [
71048 "あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
71049 "あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
71050 "あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
71051 "あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
71052 "あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
71053 "あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
71054 "いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
71055 "いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
71056 "いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
71057 "いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
71058 "いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
71059 "いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
71060 "いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
71061 "いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
71062 "いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
71063 "うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
71064 "うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
71065 "うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
71066 "うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
71067 "うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
71068 "うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
71069 "えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
71070 "えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
71071 "えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
71072 "えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
71073 "おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
71074 "おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
71075 "おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
71076 "おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
71077 "おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
71078 "おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
71079 "おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
71080 "かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
71081 "かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
71082 "かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
71083 "がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
71084 "かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
71085 "かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
71086 "きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
71087 "きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
71088 "ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
71089 "きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
71090 "きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
71091 "きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
71092 "きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
71093 "きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
71094 "くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
71095 "くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
71096 "くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
71097 "ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
71098 "くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
71099 "ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
71100 "けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
71101 "げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
71102 "けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
71103 "けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
71104 "けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
71105 "けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
71106 "けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
71107 "けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
71108 "ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
71109 "ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
71110 "ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
71111 "こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
71112 "こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
71113 "こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
71114 "こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
71115 "こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
71116 "こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
71117 "こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
71118 "こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
71119 "さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
71120 "さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
71121 "さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
71122 "さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
71123 "さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
71124 "さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
71125 "ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
71126 "しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
71127 "しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
71128 "しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
71129 "しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
71130 "しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
71131 "しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
71132 "しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
71133 "しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
71134 "しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
71135 "しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
71136 "すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
71137 "すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
71138 "すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
71139 "ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
71140 "すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
71141 "せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
71142 "せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
71143 "せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
71144 "せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
71145 "ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
71146 "せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
71147 "せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
71148 "そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
71149 "そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
71150 "そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
71151 "そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
71152 "そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
71153 "ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
71154 "たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
71155 "だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
71156 "たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
71157 "たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
71158 "たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
71159 "たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
71160 "たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
71161 "ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
71162 "たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
71163 "たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
71164 "たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
71165 "ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
71166 "ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
71167 "ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
71168 "ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
71169 "ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
71170 "つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
71171 "つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
71172 "つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
71173 "てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
71174 "ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
71175 "てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
71176 "でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
71177 "てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
71178 "でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
71179 "でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
71180 "どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
71181 "とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
71182 "とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
71183 "とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
71184 "どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
71185 "ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
71186 "なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
71187 "なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
71188 "ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
71189 "にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
71190 "にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
71191 "にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
71192 "にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
71193 "にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
71194 "ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
71195 "ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
71196 "ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
71197 "ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
71198 "ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
71199 "のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
71200 "のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
71201 "ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
71202 "はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
71203 "はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
71204 "はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
71205 "はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
71206 "はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
71207 "はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
71208 "はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
71209 "ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
71210 "ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
71211 "ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
71212 "ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
71213 "ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
71214 "ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
71215 "ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
71216 "ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
71217 "ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
71218 "ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
71219 "ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
71220 "ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
71221 "へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
71222 "へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
71223 "へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
71224 "ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
71225 "ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
71226 "ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
71227 "ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
71228 "まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
71229 "まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
71230 "みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
71231 "みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
71232 "みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
71233 "むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
71234 "むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
71235 "むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
71236 "めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
71237 "めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
71238 "もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
71239 "やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
71240 "やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
71241 "ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
71242 "ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
71243 "よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
71244 "よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
71245 "らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
71246 "りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
71247 "りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
71248 "りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
71249 "れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
71250 "れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
71251 "ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
71252 "わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
71253 </script>
71254 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
71255 WORDLISTS["spanish"] = [
71256 "ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
71257 "abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
71258 "aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
71259 "acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
71260 "afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
71261 "agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
71262 "alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
71263 "aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
71264 "altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
71265 "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
71266 "ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
71267 "anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
71268 "apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
71269 "apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
71270 "arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
71271 "arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
71272 "asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
71273 "astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
71274 "atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
71275 "ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
71276 "aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
71277 "baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
71278 "banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
71279 "batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
71280 "beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
71281 "bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
71282 "bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
71283 "bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
71284 "bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
71285 "bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
71286 "caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
71287 "caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
71288 "calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
71289 "canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
71290 "captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
71291 "carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
71292 "causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
71293 "ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
71294 "chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
71295 "choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
71296 "cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
71297 "clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
71298 "cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
71299 "cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
71300 "comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
71301 "copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
71302 "cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
71303 "cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
71304 "cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
71305 "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
71306 "curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
71307 "decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
71308 "dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
71309 "detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
71310 "dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
71311 "dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
71312 "don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
71313 "duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
71314 "ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
71315 "eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
71316 "elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
71317 "encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
71318 "enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
71319 "erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
71320 "espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
71321 "eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
71322 "excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
71323 "fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
71324 "faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
71325 "fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
71326 "fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
71327 "fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
71328 "fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
71329 "fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
71330 "forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
71331 "fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
71332 "fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
71333 "gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
71334 "ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
71335 "género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
71336 "giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
71337 "gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
71338 "grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
71339 "grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
71340 "gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
71341 "harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
71342 "hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
71343 "hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
71344 "horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
71345 "humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
71346 "ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
71347 "imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
71348 "inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
71349 "ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
71350 "jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
71351 "juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
71352 "juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
71353 "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
71354 "lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
71355 "latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
71356 "legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
71357 "leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
71358 "lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
71359 "líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
71360 "llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
71361 "lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
71362 "luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
71363 "maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
71364 "mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
71365 "manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
71366 "marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
71367 "matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
71368 "mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
71369 "mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
71370 "miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
71371 "minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
71372 "moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
71373 "monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
71374 "morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
71375 "mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
71376 "muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
71377 "nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
71378 "naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
71379 "neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
71380 "nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
71381 "novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
71382 "nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
71383 "observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
71384 "octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
71385 "oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
71386 "olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
71387 "ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
71388 "orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
71389 "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
71390 "óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
71391 "país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
71392 "panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
71393 "pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
71394 "paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
71395 "pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
71396 "peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
71397 "pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
71398 "persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
71399 "pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
71400 "pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
71401 "pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
71402 "pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
71403 "policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
71404 "posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
71405 "premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
71406 "proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
71407 "prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
71408 "pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
71409 "queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
71410 "rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
71411 "rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
71412 "rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
71413 "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
71414 "reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
71415 "remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
71416 "resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
71417 "rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
71418 "riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
71419 "rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
71420 "ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
71421 "rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
71422 "rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
71423 "salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
71424 "sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
71425 "sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
71426 "seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
71427 "sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
71428 "severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
71429 "silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
71430 "sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
71431 "sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
71432 "sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
71433 "sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
71434 "surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
71435 "talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
71436 "tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
71437 "tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
71438 "tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
71439 "tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
71440 "testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
71441 "tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
71442 "tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
71443 "todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
71444 "torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
71445 "toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
71446 "trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
71447 "trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
71448 "truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
71449 "turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
71450 "uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
71451 "utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
71452 "válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
71453 "vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
71454 "veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
71455 "verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
71456 "vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
71457 "viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
71458 "vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
71459 "vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
71460 "zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
71461 </script>
71462 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
71463 WORDLISTS["chinese_simplified"] = [
71464 "的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
71465 "中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
71466 "时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
71467 "就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
71468 "同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
71469 "面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
71470 "民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
71471 "度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
71472 "二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
71473 "两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
71474 "去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
71475 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
71476 "那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
71477 "样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
71478 "心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
71479 "或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
71480 "条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
71481 "无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
71482 "已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
71483 "果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
71484 "次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
71485 "求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
71486 "图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
71487 "别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
71488 "几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
71489 "必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
71490 "南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
71491 "百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
71492 "压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
71493 "术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
71494 "收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
71495 "风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
71496 "身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
71497 "达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
71498 "八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
71499 "节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
71500 "传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
71501 "研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
71502 "织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
71503 "复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
71504 "深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
71505 "半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
71506 "史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
71507 "何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
71508 "号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
71509 "毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
71510 "王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
71511 "却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
71512 "包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
71513 "细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
71514 "官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
71515 "女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
71516 "含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
71517 "英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
71518 "破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
71519 "河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
71520 "案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
71521 "仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
71522 "轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
71523 "足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
71524 "负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
71525 "修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
71526 "财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
71527 "跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
71528 "初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
71529 "未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
71530 "钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
71531 "限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
71532 "州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
71533 "础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
71534 "袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
71535 "诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
71536 "夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
71537 "终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
71538 "烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
71539 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
71540 "侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
71541 "货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
71542 "息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
71543 "医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
71544 "训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
71545 "脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
71546 "械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
71547 "粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
71548 "钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
71549 "培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
71550 "答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
71551 "脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
71552 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
71553 "评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
71554 "伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
71555 "亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
71556 "诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
71557 "绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
71558 "屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
71559 "束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
71560 "胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
71561 "宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
71562 "露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
71563 "库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
71564 "鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
71565 "借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
71566 "润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
71567 "欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
71568 "纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
71569 "塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
71570 "刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
71571 "洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
71572 "献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
71573 "阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
71574 "楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
71575 "馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
71576 "塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
71577 "楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
71578 "监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
71579 "壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
71580 "桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
71581 "您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
71582 "纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
71583 "湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
71584 "齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
71585 "净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
71586 "庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
71587 "伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
71588 "璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
71589 "纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
71590 "津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
71591 "肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
71592 "贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
71593 "峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
71594 "浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
71595 "睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
71596 "炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
71597 "呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
71598 "授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
71599 "幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
71600 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
71601 "夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
71602 "绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
71603 "礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
71604 "勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
71605 "饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
71606 "扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
71607 "奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
71608 "寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
71609 "贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
71610 "渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
71611 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
71612 "锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
71613 "缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
71614 "碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
71615 "票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
71616 "荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
71617 "撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
71618 "陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
71619 "虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
71620 "乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
71621 "瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
71622 "秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
71623 "洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
71624 "籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
71625 "醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
71626 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
71627 "趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
71628 "滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
71629 "泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
71630 "胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
71631 "串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
71632 "辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
71633 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
71634 "侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
71635 "豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
71636 "掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
71637 "雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
71638 "蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
71639 "番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
71640 "扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
71641 "悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
71642 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
71643 "霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
71644 "甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
71645 "伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
71646 "弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
71647 "逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
71648 "冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
71649 "欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
71650 "搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
71651 "忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
71652 "杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
71653 "烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
71654 "姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
71655 "董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
71656 "拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
71657 "览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
71658 "凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
71659 "丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
71660 "铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
71661 "窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
71662 "胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
71663 "疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
71664 "嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
71665 "莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
71666 "皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
71667 "巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
71668 "卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
71669 </script>
71670 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
71671 WORDLISTS["chinese_traditional"] = [
71672 "的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
71673 "中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
71674 "時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
71675 "就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
71676 "同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
71677 "面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
71678 "民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
71679 "度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
71680 "二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
71681 "兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
71682 "去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
71683 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
71684 "那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
71685 "樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
71686 "心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
71687 "或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
71688 "條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
71689 "無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
71690 "已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
71691 "果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
71692 "次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
71693 "求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
71694 "圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
71695 "別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
71696 "幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
71697 "必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
71698 "南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
71699 "百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
71700 "壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
71701 "術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
71702 "收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
71703 "風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
71704 "身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
71705 "達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
71706 "八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
71707 "節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
71708 "傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
71709 "研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
71710 "織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
71711 "复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
71712 "深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
71713 "半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
71714 "史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
71715 "何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
71716 "號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
71717 "毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
71718 "王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
71719 "卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
71720 "包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
71721 "細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
71722 "官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
71723 "女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
71724 "含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
71725 "英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
71726 "破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
71727 "河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
71728 "案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
71729 "僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
71730 "輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
71731 "足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
71732 "負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
71733 "修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
71734 "財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
71735 "跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
71736 "初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
71737 "未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
71738 "錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
71739 "限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
71740 "州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
71741 "礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
71742 "袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
71743 "訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
71744 "夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
71745 "終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
71746 "烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
71747 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
71748 "侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
71749 "貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
71750 "息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
71751 "醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
71752 "訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
71753 "脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
71754 "械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
71755 "粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
71756 "鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
71757 "培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
71758 "答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
71759 "腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
71760 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
71761 "評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
71762 "傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
71763 "亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
71764 "詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
71765 "綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
71766 "屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
71767 "束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
71768 "胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
71769 "宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
71770 "露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
71771 "庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
71772 "鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
71773 "借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
71774 "潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
71775 "歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
71776 "納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
71777 "塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
71778 "刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
71779 "洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
71780 "獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
71781 "陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
71782 "樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
71783 "館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
71784 "塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
71785 "楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
71786 "監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
71787 "壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
71788 "橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
71789 "您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
71790 "紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
71791 "灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
71792 "齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
71793 "淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
71794 "莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
71795 "夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
71796 "璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
71797 "縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
71798 "津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
71799 "肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
71800 "貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
71801 "峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
71802 "浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
71803 "睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
71804 "炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
71805 "呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
71806 "授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
71807 "幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
71808 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
71809 "夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
71810 "繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
71811 "禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
71812 "勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
71813 "飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
71814 "掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
71815 "奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
71816 "寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
71817 "貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
71818 "漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
71819 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
71820 "銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
71821 "缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
71822 "碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
71823 "票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
71824 "荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
71825 "撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
71826 "陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
71827 "蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
71828 "乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
71829 "瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
71830 "秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
71831 "洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
71832 "籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
71833 "醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
71834 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
71835 "趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
71836 "灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
71837 "泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
71838 "脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
71839 "串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
71840 "輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
71841 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
71842 "僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
71843 "豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
71844 "掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
71845 "霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
71846 "蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
71847 "番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
71848 "扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
71849 "悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
71850 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
71851 "黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
71852 "甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
71853 "偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
71854 "弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
71855 "逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
71856 "冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
71857 "欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
71858 "搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
71859 "憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
71860 "杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
71861 "烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
71862 "姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
71863 "董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
71864 "拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
71865 "覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
71866 "兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
71867 "叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
71868 "鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
71869 "窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
71870 "胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
71871 "瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
71872 "嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
71873 "蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
71874 "皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
71875 "巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
71876 "卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
71877 </script>
71878 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
71879 WORDLISTS["french"] = [
71880 "abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
71881 "abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
71882 "acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
71883 "aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
71884 "adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
71885 "adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
71886 "agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
71887 "aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
71888 "alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
71889 "ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
71890 "amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
71891 "animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
71892 "anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
71893 "aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
71894 "armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
71895 "aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
71896 "atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
71897 "audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
71898 "aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
71899 "badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
71900 "bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
71901 "bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
71902 "bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
71903 "bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
71904 "biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
71905 "blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
71906 "bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
71907 "bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
71908 "breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
71909 "broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
71910 "bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
71911 "caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
71912 "caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
71913 "caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
71914 "carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
71915 "caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
71916 "cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
71917 "charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
71918 "chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
71919 "chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
71920 "citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
71921 "cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
71922 "coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
71923 "colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
71924 "connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
71925 "corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
71926 "couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
71927 "crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
71928 "crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
71929 "curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
71930 "dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
71931 "déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
71932 "dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
71933 "dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
71934 "dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
71935 "détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
71936 "différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
71937 "discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
71938 "domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
71939 "doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
71940 "dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
71941 "écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
71942 "écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
71943 "effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
71944 "élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
71945 "embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
71946 "émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
71947 "enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
71948 "ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
71949 "énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
71950 "épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
71951 "épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
71952 "espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
71953 "estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
71954 "ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
71955 "évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
71956 "exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
71957 "exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
71958 "exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
71959 "farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
71960 "favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
71961 "féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
71962 "figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
71963 "fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
71964 "fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
71965 "fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
71966 "fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
71967 "frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
71968 "fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
71969 "galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
71970 "gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
71971 "gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
71972 "gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
71973 "goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
71974 "grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
71975 "gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
71976 "hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
71977 "hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
71978 "histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
71979 "horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
71980 "humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
71981 "illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
71982 "imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
71983 "inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
71984 "inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
71985 "inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
71986 "inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
71987 "jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
71988 "jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
71989 "joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
71990 "kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
71991 "laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
71992 "laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
71993 "lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
71994 "ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
71995 "lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
71996 "loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
71997 "lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
71998 "magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
71999 "malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
72000 "marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
72001 "matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
72002 "méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
72003 "mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
72004 "métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
72005 "mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
72006 "moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
72007 "morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
72008 "mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
72009 "muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
72010 "natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
72011 "négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
72012 "nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
72013 "normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
72014 "nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
72015 "obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
72016 "octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
72017 "olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
72018 "opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
72019 "oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
72020 "otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
72021 "paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
72022 "panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
72023 "parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
72024 "patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
72025 "pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
72026 "perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
72027 "pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
72028 "pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
72029 "pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
72030 "pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
72031 "pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
72032 "ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
72033 "pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
72034 "préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
72035 "problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
72036 "prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
72037 "pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
72038 "question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
72039 "ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
72040 "réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
72041 "rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
72042 "régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
72043 "remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
72044 "reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
72045 "rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
72046 "révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
72047 "rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
72048 "rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
72049 "ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
72050 "sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
72051 "sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
72052 "savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
72053 "scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
72054 "séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
72055 "séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
72056 "sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
72057 "sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
72058 "soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
72059 "sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
72060 "soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
72061 "station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
72062 "subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
72063 "surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
72064 "synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
72065 "tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
72066 "tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
72067 "tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
72068 "tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
72069 "tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
72070 "torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
72071 "trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
72072 "tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
72073 "tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
72074 "typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
72075 "univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
72076 "vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
72077 "valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
72078 "végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
72079 "vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
72080 "viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
72081 "violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
72082 "vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
72083 "voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
72084 "voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
72085 </script>
72086 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
72087 WORDLISTS["italian"] = [
72088 "abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
72089 "accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
72090 "addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
72091 "affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
72092 "agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
72093 "alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
72094 "allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
72095 "altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
72096 "america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
72097 "amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
72098 "andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
72099 "anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
72100 "appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
72101 "archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
72102 "arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
72103 "asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
72104 "astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
72105 "attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
72106 "avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
72107 "badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
72108 "bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
72109 "battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
72110 "benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
72111 "bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
72112 "bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
72113 "botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
72114 "brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
72115 "buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
72116 "cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
72117 "camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
72118 "capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
72119 "carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
72120 "casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
72121 "cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
72122 "cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
72123 "ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
72124 "ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
72125 "cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
72126 "comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
72127 "consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
72128 "cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
72129 "cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
72130 "critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
72131 "cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
72132 "daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
72133 "decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
72134 "demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
72135 "desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
72136 "diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
72137 "disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
72138 "dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
72139 "dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
72140 "dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
72141 "economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
72142 "elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
72143 "eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
72144 "enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
72145 "eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
72146 "erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
72147 "esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
72148 "esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
72149 "europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
72150 "famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
72151 "fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
72152 "feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
72153 "feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
72154 "fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
72155 "fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
72156 "fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
72157 "fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
72158 "frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
72159 "fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
72160 "gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
72161 "garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
72162 "gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
72163 "ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
72164 "gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
72165 "gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
72166 "gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
72167 "guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
72168 "idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
72169 "imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
72170 "importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
72171 "incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
72172 "ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
72173 "insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
72174 "invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
72175 "irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
72176 "lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
72177 "larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
72178 "lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
72179 "levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
72180 "liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
72181 "lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
72182 "luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
72183 "macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
72184 "malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
72185 "mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
72186 "massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
72187 "medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
72188 "merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
72189 "mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
72190 "minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
72191 "mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
72192 "molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
72193 "mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
72194 "mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
72195 "muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
72196 "narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
72197 "negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
72198 "nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
72199 "normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
72200 "nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
72201 "obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
72202 "offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
72203 "ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
72204 "onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
72205 "orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
72206 "orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
72207 "ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
72208 "ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
72209 "padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
72210 "pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
72211 "parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
72212 "pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
72213 "penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
72214 "periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
72215 "pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
72216 "piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
72217 "pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
72218 "pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
72219 "poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
72220 "pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
72221 "positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
72222 "prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
72223 "principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
72224 "proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
72225 "pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
72226 "qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
72227 "ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
72228 "rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
72229 "recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
72230 "remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
72231 "rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
72232 "ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
72233 "rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
72234 "rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
72235 "ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
72236 "rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
72237 "riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
72238 "rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
72239 "rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
72240 "rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
72241 "salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
72242 "sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
72243 "sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
72244 "sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
72245 "scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
72246 "scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
72247 "scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
72248 "sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
72249 "selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
72250 "sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
72251 "setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
72252 "sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
72253 "sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
72254 "sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
72255 "sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
72256 "smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
72257 "snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
72258 "solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
72259 "sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
72260 "sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
72261 "spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
72262 "spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
72263 "sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
72264 "statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
72265 "storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
72266 "succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
72267 "sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
72268 "svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
72269 "tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
72270 "tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
72271 "tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
72272 "tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
72273 "titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
72274 "tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
72275 "tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
72276 "trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
72277 "trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
72278 "trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
72279 "tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
72280 "ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
72281 "unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
72282 "usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
72283 "valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
72284 "vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
72285 "vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
72286 "verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
72287 "vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
72288 "vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
72289 "viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
72290 "viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
72291 "zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
72292 "zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
72293 </script>
72294 <script>/*
72295 * Copyright (c) 2013 Pavol Rusnak
72296 *
72297 * Permission is hereby granted, free of charge, to any person obtaining a copy of
72298 * this software and associated documentation files (the "Software"), to deal in
72299 * the Software without restriction, including without limitation the rights to
72300 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
72301 * of the Software, and to permit persons to whom the Software is furnished to do
72302 * so, subject to the following conditions:
72303 *
72304 * The above copyright notice and this permission notice shall be included in all
72305 * copies or substantial portions of the Software.
72306 *
72307 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
72308 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
72309 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
72310 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
72311 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
72312 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
72313 */
72314
72315 /*
72316 * Javascript port from python by Ian Coleman
72317 *
72318 * Requires code from sjcl
72319 * https://github.com/bitwiseshiftleft/sjcl
72320 */
72321
72322 var Mnemonic = function(language) {
72323
72324 var PBKDF2_ROUNDS = 2048;
72325 var RADIX = 2048;
72326
72327 var self = this;
72328 var wordlist = [];
72329
72330 var hmacSHA512 = function(key) {
72331 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
72332 this.encrypt = function() {
72333 return hasher.encrypt.apply(hasher, arguments);
72334 };
72335 };
72336
72337 function init() {
72338 wordlist = WORDLISTS[language];
72339 if (wordlist.length != RADIX) {
72340 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
72341 throw err;
72342 }
72343 }
72344
72345 self.generate = function(strength) {
72346 strength = strength || 128;
72347 var r = strength % 32;
72348 if (r > 0) {
72349 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
72350 }
72351 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
72352 if (!hasStrongCrypto) {
72353 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
72354 }
72355 var buffer = new Uint8Array(strength / 8);
72356 var data = crypto.getRandomValues(buffer);
72357 return self.toMnemonic(data);
72358 }
72359
72360 self.toMnemonic = function(byteArray) {
72361 if (byteArray.length % 4 > 0) {
72362 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
72363 }
72364
72365 //h = hashlib.sha256(data).hexdigest()
72366 var data = byteArrayToWordArray(byteArray);
72367 var hash = sjcl.hash.sha256.hash(data);
72368 var h = sjcl.codec.hex.fromBits(hash);
72369
72370 // b is a binary string, eg '00111010101100...'
72371 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
72372 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
72373 //
72374 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
72375 // c = bin(int(h, 16))[2:].zfill(256)
72376 // d = c[:len(data) * 8 / 32]
72377 var a = byteArrayToBinaryString(byteArray);
72378 var c = zfill(hexStringToBinaryString(h), 256);
72379 var d = c.substring(0, byteArray.length * 8 / 32);
72380 // b = line1 + line2
72381 var b = a + d;
72382
72383 var result = [];
72384 var blen = b.length / 11;
72385 for (var i=0; i<blen; i++) {
72386 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
72387 result.push(wordlist[idx]);
72388 }
72389 return self.joinWords(result);
72390 }
72391
72392 self.check = function(mnemonic) {
72393 var mnemonic = self.splitWords(mnemonic);
72394 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
72395 return false
72396 }
72397 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
72398 var idx = [];
72399 for (var i=0; i<mnemonic.length; i++) {
72400 var word = mnemonic[i];
72401 var wordIndex = wordlist.indexOf(word);
72402 if (wordIndex == -1) {
72403 return false;
72404 }
72405 var binaryIndex = zfill(wordIndex.toString(2), 11);
72406 idx.push(binaryIndex);
72407 }
72408 var b = idx.join('');
72409 var l = b.length;
72410 //d = b[:l / 33 * 32]
72411 //h = b[-l / 33:]
72412 var d = b.substring(0, l / 33 * 32);
72413 var h = b.substring(l - l / 33, l);
72414 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
72415 var nd = binaryStringToWordArray(d);
72416 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
72417 var ndHash = sjcl.hash.sha256.hash(nd);
72418 var ndHex = sjcl.codec.hex.fromBits(ndHash);
72419 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
72420 var nh = ndBstr.substring(0,l/33);
72421 return h == nh;
72422 }
72423
72424 self.toSeed = function(mnemonic, passphrase) {
72425 passphrase = passphrase || '';
72426 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
72427 var mnemonicNormalized = self.normalizeString(mnemonic);
72428 passphrase = self.normalizeString(passphrase)
72429 passphrase = "mnemonic" + passphrase;
72430 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
72431 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
72432 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
72433 var hashHex = sjcl.codec.hex.fromBits(result);
72434 return hashHex;
72435 }
72436
72437 self.splitWords = function(mnemonic) {
72438 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
72439 }
72440
72441 self.joinWords = function(words) {
72442 // Set space correctly depending on the language
72443 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
72444 var space = " ";
72445 if (language == "japanese") {
72446 space = "\u3000"; // ideographic space
72447 }
72448 return words.join(space);
72449 }
72450
72451 self.normalizeString = function(str) {
72452 if (typeof str.normalize == "function") {
72453 return str.normalize("NFKD");
72454 }
72455 else {
72456 // TODO decide how to handle this in the future.
72457 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
72458 return str;
72459 }
72460 }
72461
72462 function byteArrayToWordArray(data) {
72463 var a = [];
72464 for (var i=0; i<data.length/4; i++) {
72465 v = 0;
72466 v += data[i*4 + 0] << 8 * 3;
72467 v += data[i*4 + 1] << 8 * 2;
72468 v += data[i*4 + 2] << 8 * 1;
72469 v += data[i*4 + 3] << 8 * 0;
72470 a.push(v);
72471 }
72472 return a;
72473 }
72474
72475 function byteArrayToBinaryString(data) {
72476 var bin = "";
72477 for (var i=0; i<data.length; i++) {
72478 bin += zfill(data[i].toString(2), 8);
72479 }
72480 return bin;
72481 }
72482
72483 function hexStringToBinaryString(hexString) {
72484 binaryString = "";
72485 for (var i=0; i<hexString.length; i++) {
72486 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
72487 }
72488 return binaryString;
72489 }
72490
72491 function binaryStringToWordArray(binary) {
72492 var aLen = binary.length / 32;
72493 var a = [];
72494 for (var i=0; i<aLen; i++) {
72495 var valueStr = binary.substring(0,32);
72496 var value = parseInt(valueStr, 2);
72497 a.push(value);
72498 binary = binary.slice(32);
72499 }
72500 return a;
72501 }
72502
72503 // Pad a numeric string on the left with zero digits until the given width
72504 // is reached.
72505 // Note this differs to the python implementation because it does not
72506 // handle numbers starting with a sign.
72507 function zfill(source, length) {
72508 source = source.toString();
72509 while (source.length < length) {
72510 source = '0' + source;
72511 }
72512 return source;
72513 }
72514
72515 init();
72516
72517 }
72518 </script>
72519 <script>/*
72520 JavaScript BigInteger library version 0.9.1
72521 http://silentmatt.com/biginteger/
72522
72523 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
72524 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
72525 Licensed under the MIT license.
72526
72527 Support for arbitrary internal representation base was added by
72528 Vitaly Magerya.
72529 */
72530
72531 /*
72532 File: biginteger.js
72533
72534 Exports:
72535
72536 <BigInteger>
72537 */
72538 (function(exports) {
72539 "use strict";
72540 /*
72541 Class: BigInteger
72542 An arbitrarily-large integer.
72543
72544 <BigInteger> objects should be considered immutable. None of the "built-in"
72545 methods modify *this* or their arguments. All properties should be
72546 considered private.
72547
72548 All the methods of <BigInteger> instances can be called "statically". The
72549 static versions are convenient if you don't already have a <BigInteger>
72550 object.
72551
72552 As an example, these calls are equivalent.
72553
72554 > BigInteger(4).multiply(5); // returns BigInteger(20);
72555 > BigInteger.multiply(4, 5); // returns BigInteger(20);
72556
72557 > var a = 42;
72558 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
72559 */
72560
72561 var CONSTRUCT = {}; // Unique token to call "private" version of constructor
72562
72563 /*
72564 Constructor: BigInteger()
72565 Convert a value to a <BigInteger>.
72566
72567 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
72568 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
72569 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
72570 without a radix argument.
72571
72572 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
72573 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
72574 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
72575 > var n3 = BigInteger(n2); // Return n2, unchanged
72576
72577 The constructor form only takes an array and a sign. *n* must be an
72578 array of numbers in little-endian order, where each digit is between 0
72579 and BigInteger.base. The second parameter sets the sign: -1 for
72580 negative, +1 for positive, or 0 for zero. The array is *not copied and
72581 may be modified*. If the array contains only zeros, the sign parameter
72582 is ignored and is forced to zero.
72583
72584 > new BigInteger([5], -1): create a new BigInteger with value -5
72585
72586 Parameters:
72587
72588 n - Value to convert to a <BigInteger>.
72589
72590 Returns:
72591
72592 A <BigInteger> value.
72593
72594 See Also:
72595
72596 <parse>, <BigInteger>
72597 */
72598 function BigInteger(n, s, token) {
72599 if (token !== CONSTRUCT) {
72600 if (n instanceof BigInteger) {
72601 return n;
72602 }
72603 else if (typeof n === "undefined") {
72604 return ZERO;
72605 }
72606 return BigInteger.parse(n);
72607 }
72608
72609 n = n || []; // Provide the nullary constructor for subclasses.
72610 while (n.length && !n[n.length - 1]) {
72611 --n.length;
72612 }
72613 this._d = n;
72614 this._s = n.length ? (s || 1) : 0;
72615 }
72616
72617 BigInteger._construct = function(n, s) {
72618 return new BigInteger(n, s, CONSTRUCT);
72619 };
72620
72621 // Base-10 speedup hacks in parse, toString, exp10 and log functions
72622 // require base to be a power of 10. 10^7 is the largest such power
72623 // that won't cause a precision loss when digits are multiplied.
72624 var BigInteger_base = 10000000;
72625 var BigInteger_base_log10 = 7;
72626
72627 BigInteger.base = BigInteger_base;
72628 BigInteger.base_log10 = BigInteger_base_log10;
72629
72630 var ZERO = new BigInteger([], 0, CONSTRUCT);
72631 // Constant: ZERO
72632 // <BigInteger> 0.
72633 BigInteger.ZERO = ZERO;
72634
72635 var ONE = new BigInteger([1], 1, CONSTRUCT);
72636 // Constant: ONE
72637 // <BigInteger> 1.
72638 BigInteger.ONE = ONE;
72639
72640 var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
72641 // Constant: M_ONE
72642 // <BigInteger> -1.
72643 BigInteger.M_ONE = M_ONE;
72644
72645 // Constant: _0
72646 // Shortcut for <ZERO>.
72647 BigInteger._0 = ZERO;
72648
72649 // Constant: _1
72650 // Shortcut for <ONE>.
72651 BigInteger._1 = ONE;
72652
72653 /*
72654 Constant: small
72655 Array of <BigIntegers> from 0 to 36.
72656
72657 These are used internally for parsing, but useful when you need a "small"
72658 <BigInteger>.
72659
72660 See Also:
72661
72662 <ZERO>, <ONE>, <_0>, <_1>
72663 */
72664 BigInteger.small = [
72665 ZERO,
72666 ONE,
72667 /* Assuming BigInteger_base > 36 */
72668 new BigInteger( [2], 1, CONSTRUCT),
72669 new BigInteger( [3], 1, CONSTRUCT),
72670 new BigInteger( [4], 1, CONSTRUCT),
72671 new BigInteger( [5], 1, CONSTRUCT),
72672 new BigInteger( [6], 1, CONSTRUCT),
72673 new BigInteger( [7], 1, CONSTRUCT),
72674 new BigInteger( [8], 1, CONSTRUCT),
72675 new BigInteger( [9], 1, CONSTRUCT),
72676 new BigInteger([10], 1, CONSTRUCT),
72677 new BigInteger([11], 1, CONSTRUCT),
72678 new BigInteger([12], 1, CONSTRUCT),
72679 new BigInteger([13], 1, CONSTRUCT),
72680 new BigInteger([14], 1, CONSTRUCT),
72681 new BigInteger([15], 1, CONSTRUCT),
72682 new BigInteger([16], 1, CONSTRUCT),
72683 new BigInteger([17], 1, CONSTRUCT),
72684 new BigInteger([18], 1, CONSTRUCT),
72685 new BigInteger([19], 1, CONSTRUCT),
72686 new BigInteger([20], 1, CONSTRUCT),
72687 new BigInteger([21], 1, CONSTRUCT),
72688 new BigInteger([22], 1, CONSTRUCT),
72689 new BigInteger([23], 1, CONSTRUCT),
72690 new BigInteger([24], 1, CONSTRUCT),
72691 new BigInteger([25], 1, CONSTRUCT),
72692 new BigInteger([26], 1, CONSTRUCT),
72693 new BigInteger([27], 1, CONSTRUCT),
72694 new BigInteger([28], 1, CONSTRUCT),
72695 new BigInteger([29], 1, CONSTRUCT),
72696 new BigInteger([30], 1, CONSTRUCT),
72697 new BigInteger([31], 1, CONSTRUCT),
72698 new BigInteger([32], 1, CONSTRUCT),
72699 new BigInteger([33], 1, CONSTRUCT),
72700 new BigInteger([34], 1, CONSTRUCT),
72701 new BigInteger([35], 1, CONSTRUCT),
72702 new BigInteger([36], 1, CONSTRUCT)
72703 ];
72704
72705 // Used for parsing/radix conversion
72706 BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
72707
72708 /*
72709 Method: toString
72710 Convert a <BigInteger> to a string.
72711
72712 When *base* is greater than 10, letters are upper case.
72713
72714 Parameters:
72715
72716 base - Optional base to represent the number in (default is base 10).
72717 Must be between 2 and 36 inclusive, or an Error will be thrown.
72718
72719 Returns:
72720
72721 The string representation of the <BigInteger>.
72722 */
72723 BigInteger.prototype.toString = function(base) {
72724 base = +base || 10;
72725 if (base < 2 || base > 36) {
72726 throw new Error("illegal radix " + base + ".");
72727 }
72728 if (this._s === 0) {
72729 return "0";
72730 }
72731 if (base === 10) {
72732 var str = this._s < 0 ? "-" : "";
72733 str += this._d[this._d.length - 1].toString();
72734 for (var i = this._d.length - 2; i >= 0; i--) {
72735 var group = this._d[i].toString();
72736 while (group.length < BigInteger_base_log10) group = '0' + group;
72737 str += group;
72738 }
72739 return str;
72740 }
72741 else {
72742 var numerals = BigInteger.digits;
72743 base = BigInteger.small[base];
72744 var sign = this._s;
72745
72746 var n = this.abs();
72747 var digits = [];
72748 var digit;
72749
72750 while (n._s !== 0) {
72751 var divmod = n.divRem(base);
72752 n = divmod[0];
72753 digit = divmod[1];
72754 // TODO: This could be changed to unshift instead of reversing at the end.
72755 // Benchmark both to compare speeds.
72756 digits.push(numerals[digit.valueOf()]);
72757 }
72758 return (sign < 0 ? "-" : "") + digits.reverse().join("");
72759 }
72760 };
72761
72762 // Verify strings for parsing
72763 BigInteger.radixRegex = [
72764 /^$/,
72765 /^$/,
72766 /^[01]*$/,
72767 /^[012]*$/,
72768 /^[0-3]*$/,
72769 /^[0-4]*$/,
72770 /^[0-5]*$/,
72771 /^[0-6]*$/,
72772 /^[0-7]*$/,
72773 /^[0-8]*$/,
72774 /^[0-9]*$/,
72775 /^[0-9aA]*$/,
72776 /^[0-9abAB]*$/,
72777 /^[0-9abcABC]*$/,
72778 /^[0-9a-dA-D]*$/,
72779 /^[0-9a-eA-E]*$/,
72780 /^[0-9a-fA-F]*$/,
72781 /^[0-9a-gA-G]*$/,
72782 /^[0-9a-hA-H]*$/,
72783 /^[0-9a-iA-I]*$/,
72784 /^[0-9a-jA-J]*$/,
72785 /^[0-9a-kA-K]*$/,
72786 /^[0-9a-lA-L]*$/,
72787 /^[0-9a-mA-M]*$/,
72788 /^[0-9a-nA-N]*$/,
72789 /^[0-9a-oA-O]*$/,
72790 /^[0-9a-pA-P]*$/,
72791 /^[0-9a-qA-Q]*$/,
72792 /^[0-9a-rA-R]*$/,
72793 /^[0-9a-sA-S]*$/,
72794 /^[0-9a-tA-T]*$/,
72795 /^[0-9a-uA-U]*$/,
72796 /^[0-9a-vA-V]*$/,
72797 /^[0-9a-wA-W]*$/,
72798 /^[0-9a-xA-X]*$/,
72799 /^[0-9a-yA-Y]*$/,
72800 /^[0-9a-zA-Z]*$/
72801 ];
72802
72803 /*
72804 Function: parse
72805 Parse a string into a <BigInteger>.
72806
72807 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
72808 *base* is not provided, it will be guessed based on the leading characters
72809 of *s* as follows:
72810
72811 - "0x" or "0X": *base* = 16
72812 - "0c" or "0C": *base* = 8
72813 - "0b" or "0B": *base* = 2
72814 - else: *base* = 10
72815
72816 If no base is provided, or *base* is 10, the number can be in exponential
72817 form. For example, these are all valid:
72818
72819 > BigInteger.parse("1e9"); // Same as "1000000000"
72820 > BigInteger.parse("1.234*10^3"); // Same as 1234
72821 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
72822
72823 If any characters fall outside the range defined by the radix, an exception
72824 will be thrown.
72825
72826 Parameters:
72827
72828 s - The string to parse.
72829 base - Optional radix (default is to guess based on *s*).
72830
72831 Returns:
72832
72833 a <BigInteger> instance.
72834 */
72835 BigInteger.parse = function(s, base) {
72836 // Expands a number in exponential form to decimal form.
72837 // expandExponential("-13.441*10^5") === "1344100";
72838 // expandExponential("1.12300e-1") === "0.112300";
72839 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
72840 function expandExponential(str) {
72841 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
72842
72843 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
72844 c = +c;
72845 var l = c < 0;
72846 var i = n.length + c;
72847 x = (l ? n : f).length;
72848 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
72849 var z = (new Array(c + 1)).join("0");
72850 var r = n + f;
72851 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
72852 });
72853 }
72854
72855 s = s.toString();
72856 if (typeof base === "undefined" || +base === 10) {
72857 s = expandExponential(s);
72858 }
72859
72860 var prefixRE;
72861 if (typeof base === "undefined") {
72862 prefixRE = '0[xcb]';
72863 }
72864 else if (base == 16) {
72865 prefixRE = '0x';
72866 }
72867 else if (base == 8) {
72868 prefixRE = '0c';
72869 }
72870 else if (base == 2) {
72871 prefixRE = '0b';
72872 }
72873 else {
72874 prefixRE = '';
72875 }
72876 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
72877 if (parts) {
72878 var sign = parts[1] || "+";
72879 var baseSection = parts[2] || "";
72880 var digits = parts[3] || "";
72881
72882 if (typeof base === "undefined") {
72883 // Guess base
72884 if (baseSection === "0x" || baseSection === "0X") { // Hex
72885 base = 16;
72886 }
72887 else if (baseSection === "0c" || baseSection === "0C") { // Octal
72888 base = 8;
72889 }
72890 else if (baseSection === "0b" || baseSection === "0B") { // Binary
72891 base = 2;
72892 }
72893 else {
72894 base = 10;
72895 }
72896 }
72897 else if (base < 2 || base > 36) {
72898 throw new Error("Illegal radix " + base + ".");
72899 }
72900
72901 base = +base;
72902
72903 // Check for digits outside the range
72904 if (!(BigInteger.radixRegex[base].test(digits))) {
72905 throw new Error("Bad digit for radix " + base);
72906 }
72907
72908 // Strip leading zeros, and convert to array
72909 digits = digits.replace(/^0+/, "").split("");
72910 if (digits.length === 0) {
72911 return ZERO;
72912 }
72913
72914 // Get the sign (we know it's not zero)
72915 sign = (sign === "-") ? -1 : 1;
72916
72917 // Optimize 10
72918 if (base == 10) {
72919 var d = [];
72920 while (digits.length >= BigInteger_base_log10) {
72921 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
72922 }
72923 d.push(parseInt(digits.join(''), 10));
72924 return new BigInteger(d, sign, CONSTRUCT);
72925 }
72926
72927 // Do the conversion
72928 var d = ZERO;
72929 base = BigInteger.small[base];
72930 var small = BigInteger.small;
72931 for (var i = 0; i < digits.length; i++) {
72932 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
72933 }
72934 return new BigInteger(d._d, sign, CONSTRUCT);
72935 }
72936 else {
72937 throw new Error("Invalid BigInteger format: " + s);
72938 }
72939 };
72940
72941 /*
72942 Function: add
72943 Add two <BigIntegers>.
72944
72945 Parameters:
72946
72947 n - The number to add to *this*. Will be converted to a <BigInteger>.
72948
72949 Returns:
72950
72951 The numbers added together.
72952
72953 See Also:
72954
72955 <subtract>, <multiply>, <quotient>, <next>
72956 */
72957 BigInteger.prototype.add = function(n) {
72958 if (this._s === 0) {
72959 return BigInteger(n);
72960 }
72961
72962 n = BigInteger(n);
72963 if (n._s === 0) {
72964 return this;
72965 }
72966 if (this._s !== n._s) {
72967 n = n.negate();
72968 return this.subtract(n);
72969 }
72970
72971 var a = this._d;
72972 var b = n._d;
72973 var al = a.length;
72974 var bl = b.length;
72975 var sum = new Array(Math.max(al, bl) + 1);
72976 var size = Math.min(al, bl);
72977 var carry = 0;
72978 var digit;
72979
72980 for (var i = 0; i < size; i++) {
72981 digit = a[i] + b[i] + carry;
72982 sum[i] = digit % BigInteger_base;
72983 carry = (digit / BigInteger_base) | 0;
72984 }
72985 if (bl > al) {
72986 a = b;
72987 al = bl;
72988 }
72989 for (i = size; carry && i < al; i++) {
72990 digit = a[i] + carry;
72991 sum[i] = digit % BigInteger_base;
72992 carry = (digit / BigInteger_base) | 0;
72993 }
72994 if (carry) {
72995 sum[i] = carry;
72996 }
72997
72998 for ( ; i < al; i++) {
72999 sum[i] = a[i];
73000 }
73001
73002 return new BigInteger(sum, this._s, CONSTRUCT);
73003 };
73004
73005 /*
73006 Function: negate
73007 Get the additive inverse of a <BigInteger>.
73008
73009 Returns:
73010
73011 A <BigInteger> with the same magnatude, but with the opposite sign.
73012
73013 See Also:
73014
73015 <abs>
73016 */
73017 BigInteger.prototype.negate = function() {
73018 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
73019 };
73020
73021 /*
73022 Function: abs
73023 Get the absolute value of a <BigInteger>.
73024
73025 Returns:
73026
73027 A <BigInteger> with the same magnatude, but always positive (or zero).
73028
73029 See Also:
73030
73031 <negate>
73032 */
73033 BigInteger.prototype.abs = function() {
73034 return (this._s < 0) ? this.negate() : this;
73035 };
73036
73037 /*
73038 Function: subtract
73039 Subtract two <BigIntegers>.
73040
73041 Parameters:
73042
73043 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
73044
73045 Returns:
73046
73047 The *n* subtracted from *this*.
73048
73049 See Also:
73050
73051 <add>, <multiply>, <quotient>, <prev>
73052 */
73053 BigInteger.prototype.subtract = function(n) {
73054 if (this._s === 0) {
73055 return BigInteger(n).negate();
73056 }
73057
73058 n = BigInteger(n);
73059 if (n._s === 0) {
73060 return this;
73061 }
73062 if (this._s !== n._s) {
73063 n = n.negate();
73064 return this.add(n);
73065 }
73066
73067 var m = this;
73068 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
73069 if (this._s < 0) {
73070 m = new BigInteger(n._d, 1, CONSTRUCT);
73071 n = new BigInteger(this._d, 1, CONSTRUCT);
73072 }
73073
73074 // Both are positive => a - b
73075 var sign = m.compareAbs(n);
73076 if (sign === 0) {
73077 return ZERO;
73078 }
73079 else if (sign < 0) {
73080 // swap m and n
73081 var t = n;
73082 n = m;
73083 m = t;
73084 }
73085
73086 // a > b
73087 var a = m._d;
73088 var b = n._d;
73089 var al = a.length;
73090 var bl = b.length;
73091 var diff = new Array(al); // al >= bl since a > b
73092 var borrow = 0;
73093 var i;
73094 var digit;
73095
73096 for (i = 0; i < bl; i++) {
73097 digit = a[i] - borrow - b[i];
73098 if (digit < 0) {
73099 digit += BigInteger_base;
73100 borrow = 1;
73101 }
73102 else {
73103 borrow = 0;
73104 }
73105 diff[i] = digit;
73106 }
73107 for (i = bl; i < al; i++) {
73108 digit = a[i] - borrow;
73109 if (digit < 0) {
73110 digit += BigInteger_base;
73111 }
73112 else {
73113 diff[i++] = digit;
73114 break;
73115 }
73116 diff[i] = digit;
73117 }
73118 for ( ; i < al; i++) {
73119 diff[i] = a[i];
73120 }
73121
73122 return new BigInteger(diff, sign, CONSTRUCT);
73123 };
73124
73125 (function() {
73126 function addOne(n, sign) {
73127 var a = n._d;
73128 var sum = a.slice();
73129 var carry = true;
73130 var i = 0;
73131
73132 while (true) {
73133 var digit = (a[i] || 0) + 1;
73134 sum[i] = digit % BigInteger_base;
73135 if (digit <= BigInteger_base - 1) {
73136 break;
73137 }
73138 ++i;
73139 }
73140
73141 return new BigInteger(sum, sign, CONSTRUCT);
73142 }
73143
73144 function subtractOne(n, sign) {
73145 var a = n._d;
73146 var sum = a.slice();
73147 var borrow = true;
73148 var i = 0;
73149
73150 while (true) {
73151 var digit = (a[i] || 0) - 1;
73152 if (digit < 0) {
73153 sum[i] = digit + BigInteger_base;
73154 }
73155 else {
73156 sum[i] = digit;
73157 break;
73158 }
73159 ++i;
73160 }
73161
73162 return new BigInteger(sum, sign, CONSTRUCT);
73163 }
73164
73165 /*
73166 Function: next
73167 Get the next <BigInteger> (add one).
73168
73169 Returns:
73170
73171 *this* + 1.
73172
73173 See Also:
73174
73175 <add>, <prev>
73176 */
73177 BigInteger.prototype.next = function() {
73178 switch (this._s) {
73179 case 0:
73180 return ONE;
73181 case -1:
73182 return subtractOne(this, -1);
73183 // case 1:
73184 default:
73185 return addOne(this, 1);
73186 }
73187 };
73188
73189 /*
73190 Function: prev
73191 Get the previous <BigInteger> (subtract one).
73192
73193 Returns:
73194
73195 *this* - 1.
73196
73197 See Also:
73198
73199 <next>, <subtract>
73200 */
73201 BigInteger.prototype.prev = function() {
73202 switch (this._s) {
73203 case 0:
73204 return M_ONE;
73205 case -1:
73206 return addOne(this, -1);
73207 // case 1:
73208 default:
73209 return subtractOne(this, 1);
73210 }
73211 };
73212 })();
73213
73214 /*
73215 Function: compareAbs
73216 Compare the absolute value of two <BigIntegers>.
73217
73218 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
73219
73220 Parameters:
73221
73222 n - The number to compare to *this*. Will be converted to a <BigInteger>.
73223
73224 Returns:
73225
73226 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
73227
73228 See Also:
73229
73230 <compare>, <abs>
73231 */
73232 BigInteger.prototype.compareAbs = function(n) {
73233 if (this === n) {
73234 return 0;
73235 }
73236
73237 if (!(n instanceof BigInteger)) {
73238 if (!isFinite(n)) {
73239 return(isNaN(n) ? n : -1);
73240 }
73241 n = BigInteger(n);
73242 }
73243
73244 if (this._s === 0) {
73245 return (n._s !== 0) ? -1 : 0;
73246 }
73247 if (n._s === 0) {
73248 return 1;
73249 }
73250
73251 var l = this._d.length;
73252 var nl = n._d.length;
73253 if (l < nl) {
73254 return -1;
73255 }
73256 else if (l > nl) {
73257 return 1;
73258 }
73259
73260 var a = this._d;
73261 var b = n._d;
73262 for (var i = l-1; i >= 0; i--) {
73263 if (a[i] !== b[i]) {
73264 return a[i] < b[i] ? -1 : 1;
73265 }
73266 }
73267
73268 return 0;
73269 };
73270
73271 /*
73272 Function: compare
73273 Compare two <BigIntegers>.
73274
73275 Parameters:
73276
73277 n - The number to compare to *this*. Will be converted to a <BigInteger>.
73278
73279 Returns:
73280
73281 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
73282
73283 See Also:
73284
73285 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
73286 */
73287 BigInteger.prototype.compare = function(n) {
73288 if (this === n) {
73289 return 0;
73290 }
73291
73292 n = BigInteger(n);
73293
73294 if (this._s === 0) {
73295 return -n._s;
73296 }
73297
73298 if (this._s === n._s) { // both positive or both negative
73299 var cmp = this.compareAbs(n);
73300 return cmp * this._s;
73301 }
73302 else {
73303 return this._s;
73304 }
73305 };
73306
73307 /*
73308 Function: isUnit
73309 Return true iff *this* is either 1 or -1.
73310
73311 Returns:
73312
73313 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
73314
73315 See Also:
73316
73317 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
73318 <BigInteger.ONE>, <BigInteger.M_ONE>
73319 */
73320 BigInteger.prototype.isUnit = function() {
73321 return this === ONE ||
73322 this === M_ONE ||
73323 (this._d.length === 1 && this._d[0] === 1);
73324 };
73325
73326 /*
73327 Function: multiply
73328 Multiply two <BigIntegers>.
73329
73330 Parameters:
73331
73332 n - The number to multiply *this* by. Will be converted to a
73333 <BigInteger>.
73334
73335 Returns:
73336
73337 The numbers multiplied together.
73338
73339 See Also:
73340
73341 <add>, <subtract>, <quotient>, <square>
73342 */
73343 BigInteger.prototype.multiply = function(n) {
73344 // TODO: Consider adding Karatsuba multiplication for large numbers
73345 if (this._s === 0) {
73346 return ZERO;
73347 }
73348
73349 n = BigInteger(n);
73350 if (n._s === 0) {
73351 return ZERO;
73352 }
73353 if (this.isUnit()) {
73354 if (this._s < 0) {
73355 return n.negate();
73356 }
73357 return n;
73358 }
73359 if (n.isUnit()) {
73360 if (n._s < 0) {
73361 return this.negate();
73362 }
73363 return this;
73364 }
73365 if (this === n) {
73366 return this.square();
73367 }
73368
73369 var r = (this._d.length >= n._d.length);
73370 var a = (r ? this : n)._d; // a will be longer than b
73371 var b = (r ? n : this)._d;
73372 var al = a.length;
73373 var bl = b.length;
73374
73375 var pl = al + bl;
73376 var partial = new Array(pl);
73377 var i;
73378 for (i = 0; i < pl; i++) {
73379 partial[i] = 0;
73380 }
73381
73382 for (i = 0; i < bl; i++) {
73383 var carry = 0;
73384 var bi = b[i];
73385 var jlimit = al + i;
73386 var digit;
73387 for (var j = i; j < jlimit; j++) {
73388 digit = partial[j] + bi * a[j - i] + carry;
73389 carry = (digit / BigInteger_base) | 0;
73390 partial[j] = (digit % BigInteger_base) | 0;
73391 }
73392 if (carry) {
73393 digit = partial[j] + carry;
73394 carry = (digit / BigInteger_base) | 0;
73395 partial[j] = digit % BigInteger_base;
73396 }
73397 }
73398 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
73399 };
73400
73401 // Multiply a BigInteger by a single-digit native number
73402 // Assumes that this and n are >= 0
73403 // This is not really intended to be used outside the library itself
73404 BigInteger.prototype.multiplySingleDigit = function(n) {
73405 if (n === 0 || this._s === 0) {
73406 return ZERO;
73407 }
73408 if (n === 1) {
73409 return this;
73410 }
73411
73412 var digit;
73413 if (this._d.length === 1) {
73414 digit = this._d[0] * n;
73415 if (digit >= BigInteger_base) {
73416 return new BigInteger([(digit % BigInteger_base)|0,
73417 (digit / BigInteger_base)|0], 1, CONSTRUCT);
73418 }
73419 return new BigInteger([digit], 1, CONSTRUCT);
73420 }
73421
73422 if (n === 2) {
73423 return this.add(this);
73424 }
73425 if (this.isUnit()) {
73426 return new BigInteger([n], 1, CONSTRUCT);
73427 }
73428
73429 var a = this._d;
73430 var al = a.length;
73431
73432 var pl = al + 1;
73433 var partial = new Array(pl);
73434 for (var i = 0; i < pl; i++) {
73435 partial[i] = 0;
73436 }
73437
73438 var carry = 0;
73439 for (var j = 0; j < al; j++) {
73440 digit = n * a[j] + carry;
73441 carry = (digit / BigInteger_base) | 0;
73442 partial[j] = (digit % BigInteger_base) | 0;
73443 }
73444 if (carry) {
73445 partial[j] = carry;
73446 }
73447
73448 return new BigInteger(partial, 1, CONSTRUCT);
73449 };
73450
73451 /*
73452 Function: square
73453 Multiply a <BigInteger> by itself.
73454
73455 This is slightly faster than regular multiplication, since it removes the
73456 duplicated multiplcations.
73457
73458 Returns:
73459
73460 > this.multiply(this)
73461
73462 See Also:
73463 <multiply>
73464 */
73465 BigInteger.prototype.square = function() {
73466 // Normally, squaring a 10-digit number would take 100 multiplications.
73467 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
73468 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
73469 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
73470
73471 if (this._s === 0) {
73472 return ZERO;
73473 }
73474 if (this.isUnit()) {
73475 return ONE;
73476 }
73477
73478 var digits = this._d;
73479 var length = digits.length;
73480 var imult1 = new Array(length + length + 1);
73481 var product, carry, k;
73482 var i;
73483
73484 // Calculate diagonal
73485 for (i = 0; i < length; i++) {
73486 k = i * 2;
73487 product = digits[i] * digits[i];
73488 carry = (product / BigInteger_base) | 0;
73489 imult1[k] = product % BigInteger_base;
73490 imult1[k + 1] = carry;
73491 }
73492
73493 // Calculate repeating part
73494 for (i = 0; i < length; i++) {
73495 carry = 0;
73496 k = i * 2 + 1;
73497 for (var j = i + 1; j < length; j++, k++) {
73498 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
73499 carry = (product / BigInteger_base) | 0;
73500 imult1[k] = product % BigInteger_base;
73501 }
73502 k = length + i;
73503 var digit = carry + imult1[k];
73504 carry = (digit / BigInteger_base) | 0;
73505 imult1[k] = digit % BigInteger_base;
73506 imult1[k + 1] += carry;
73507 }
73508
73509 return new BigInteger(imult1, 1, CONSTRUCT);
73510 };
73511
73512 /*
73513 Function: quotient
73514 Divide two <BigIntegers> and truncate towards zero.
73515
73516 <quotient> throws an exception if *n* is zero.
73517
73518 Parameters:
73519
73520 n - The number to divide *this* by. Will be converted to a <BigInteger>.
73521
73522 Returns:
73523
73524 The *this* / *n*, truncated to an integer.
73525
73526 See Also:
73527
73528 <add>, <subtract>, <multiply>, <divRem>, <remainder>
73529 */
73530 BigInteger.prototype.quotient = function(n) {
73531 return this.divRem(n)[0];
73532 };
73533
73534 /*
73535 Function: divide
73536 Deprecated synonym for <quotient>.
73537 */
73538 BigInteger.prototype.divide = BigInteger.prototype.quotient;
73539
73540 /*
73541 Function: remainder
73542 Calculate the remainder of two <BigIntegers>.
73543
73544 <remainder> throws an exception if *n* is zero.
73545
73546 Parameters:
73547
73548 n - The remainder after *this* is divided *this* by *n*. Will be
73549 converted to a <BigInteger>.
73550
73551 Returns:
73552
73553 *this* % *n*.
73554
73555 See Also:
73556
73557 <divRem>, <quotient>
73558 */
73559 BigInteger.prototype.remainder = function(n) {
73560 return this.divRem(n)[1];
73561 };
73562
73563 /*
73564 Function: divRem
73565 Calculate the integer quotient and remainder of two <BigIntegers>.
73566
73567 <divRem> throws an exception if *n* is zero.
73568
73569 Parameters:
73570
73571 n - The number to divide *this* by. Will be converted to a <BigInteger>.
73572
73573 Returns:
73574
73575 A two-element array containing the quotient and the remainder.
73576
73577 > a.divRem(b)
73578
73579 is exactly equivalent to
73580
73581 > [a.quotient(b), a.remainder(b)]
73582
73583 except it is faster, because they are calculated at the same time.
73584
73585 See Also:
73586
73587 <quotient>, <remainder>
73588 */
73589 BigInteger.prototype.divRem = function(n) {
73590 n = BigInteger(n);
73591 if (n._s === 0) {
73592 throw new Error("Divide by zero");
73593 }
73594 if (this._s === 0) {
73595 return [ZERO, ZERO];
73596 }
73597 if (n._d.length === 1) {
73598 return this.divRemSmall(n._s * n._d[0]);
73599 }
73600
73601 // Test for easy cases -- |n1| <= |n2|
73602 switch (this.compareAbs(n)) {
73603 case 0: // n1 == n2
73604 return [this._s === n._s ? ONE : M_ONE, ZERO];
73605 case -1: // |n1| < |n2|
73606 return [ZERO, this];
73607 }
73608
73609 var sign = this._s * n._s;
73610 var a = n.abs();
73611 var b_digits = this._d;
73612 var b_index = b_digits.length;
73613 var digits = n._d.length;
73614 var quot = [];
73615 var guess;
73616
73617 var part = new BigInteger([], 0, CONSTRUCT);
73618
73619 while (b_index) {
73620 part._d.unshift(b_digits[--b_index]);
73621 part = new BigInteger(part._d, 1, CONSTRUCT);
73622
73623 if (part.compareAbs(n) < 0) {
73624 quot.push(0);
73625 continue;
73626 }
73627 if (part._s === 0) {
73628 guess = 0;
73629 }
73630 else {
73631 var xlen = part._d.length, ylen = a._d.length;
73632 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
73633 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
73634 if (part._d.length > a._d.length) {
73635 // The length of part._d can either match a._d length,
73636 // or exceed it by one.
73637 highx = (highx+1)*BigInteger_base;
73638 }
73639 guess = Math.ceil(highx/highy);
73640 }
73641 do {
73642 var check = a.multiplySingleDigit(guess);
73643 if (check.compareAbs(part) <= 0) {
73644 break;
73645 }
73646 guess--;
73647 } while (guess);
73648
73649 quot.push(guess);
73650 if (!guess) {
73651 continue;
73652 }
73653 var diff = part.subtract(check);
73654 part._d = diff._d.slice();
73655 }
73656
73657 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
73658 new BigInteger(part._d, this._s, CONSTRUCT)];
73659 };
73660
73661 // Throws an exception if n is outside of (-BigInteger.base, -1] or
73662 // [1, BigInteger.base). It's not necessary to call this, since the
73663 // other division functions will call it if they are able to.
73664 BigInteger.prototype.divRemSmall = function(n) {
73665 var r;
73666 n = +n;
73667 if (n === 0) {
73668 throw new Error("Divide by zero");
73669 }
73670
73671 var n_s = n < 0 ? -1 : 1;
73672 var sign = this._s * n_s;
73673 n = Math.abs(n);
73674
73675 if (n < 1 || n >= BigInteger_base) {
73676 throw new Error("Argument out of range");
73677 }
73678
73679 if (this._s === 0) {
73680 return [ZERO, ZERO];
73681 }
73682
73683 if (n === 1 || n === -1) {
73684 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
73685 }
73686
73687 // 2 <= n < BigInteger_base
73688
73689 // divide a single digit by a single digit
73690 if (this._d.length === 1) {
73691 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
73692 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
73693 if (sign < 0) {
73694 q = q.negate();
73695 }
73696 if (this._s < 0) {
73697 r = r.negate();
73698 }
73699 return [q, r];
73700 }
73701
73702 var digits = this._d.slice();
73703 var quot = new Array(digits.length);
73704 var part = 0;
73705 var diff = 0;
73706 var i = 0;
73707 var guess;
73708
73709 while (digits.length) {
73710 part = part * BigInteger_base + digits[digits.length - 1];
73711 if (part < n) {
73712 quot[i++] = 0;
73713 digits.pop();
73714 diff = BigInteger_base * diff + part;
73715 continue;
73716 }
73717 if (part === 0) {
73718 guess = 0;
73719 }
73720 else {
73721 guess = (part / n) | 0;
73722 }
73723
73724 var check = n * guess;
73725 diff = part - check;
73726 quot[i++] = guess;
73727 if (!guess) {
73728 digits.pop();
73729 continue;
73730 }
73731
73732 digits.pop();
73733 part = diff;
73734 }
73735
73736 r = new BigInteger([diff], 1, CONSTRUCT);
73737 if (this._s < 0) {
73738 r = r.negate();
73739 }
73740 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
73741 };
73742
73743 /*
73744 Function: isEven
73745 Return true iff *this* is divisible by two.
73746
73747 Note that <BigInteger.ZERO> is even.
73748
73749 Returns:
73750
73751 true if *this* is even, false otherwise.
73752
73753 See Also:
73754
73755 <isOdd>
73756 */
73757 BigInteger.prototype.isEven = function() {
73758 var digits = this._d;
73759 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
73760 };
73761
73762 /*
73763 Function: isOdd
73764 Return true iff *this* is not divisible by two.
73765
73766 Returns:
73767
73768 true if *this* is odd, false otherwise.
73769
73770 See Also:
73771
73772 <isEven>
73773 */
73774 BigInteger.prototype.isOdd = function() {
73775 return !this.isEven();
73776 };
73777
73778 /*
73779 Function: sign
73780 Get the sign of a <BigInteger>.
73781
73782 Returns:
73783
73784 * -1 if *this* < 0
73785 * 0 if *this* == 0
73786 * +1 if *this* > 0
73787
73788 See Also:
73789
73790 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
73791 */
73792 BigInteger.prototype.sign = function() {
73793 return this._s;
73794 };
73795
73796 /*
73797 Function: isPositive
73798 Return true iff *this* > 0.
73799
73800 Returns:
73801
73802 true if *this*.compare(<BigInteger.ZERO>) == 1.
73803
73804 See Also:
73805
73806 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
73807 */
73808 BigInteger.prototype.isPositive = function() {
73809 return this._s > 0;
73810 };
73811
73812 /*
73813 Function: isNegative
73814 Return true iff *this* < 0.
73815
73816 Returns:
73817
73818 true if *this*.compare(<BigInteger.ZERO>) == -1.
73819
73820 See Also:
73821
73822 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
73823 */
73824 BigInteger.prototype.isNegative = function() {
73825 return this._s < 0;
73826 };
73827
73828 /*
73829 Function: isZero
73830 Return true iff *this* == 0.
73831
73832 Returns:
73833
73834 true if *this*.compare(<BigInteger.ZERO>) == 0.
73835
73836 See Also:
73837
73838 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
73839 */
73840 BigInteger.prototype.isZero = function() {
73841 return this._s === 0;
73842 };
73843
73844 /*
73845 Function: exp10
73846 Multiply a <BigInteger> by a power of 10.
73847
73848 This is equivalent to, but faster than
73849
73850 > if (n >= 0) {
73851 > return this.multiply(BigInteger("1e" + n));
73852 > }
73853 > else { // n <= 0
73854 > return this.quotient(BigInteger("1e" + -n));
73855 > }
73856
73857 Parameters:
73858
73859 n - The power of 10 to multiply *this* by. *n* is converted to a
73860 javascipt number and must be no greater than <BigInteger.MAX_EXP>
73861 (0x7FFFFFFF), or an exception will be thrown.
73862
73863 Returns:
73864
73865 *this* * (10 ** *n*), truncated to an integer if necessary.
73866
73867 See Also:
73868
73869 <pow>, <multiply>
73870 */
73871 BigInteger.prototype.exp10 = function(n) {
73872 n = +n;
73873 if (n === 0) {
73874 return this;
73875 }
73876 if (Math.abs(n) > Number(MAX_EXP)) {
73877 throw new Error("exponent too large in BigInteger.exp10");
73878 }
73879 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
73880 if (this._s === 0) {
73881 return ZERO;
73882 }
73883 if (n > 0) {
73884 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
73885
73886 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
73887 k._d.unshift(0);
73888 }
73889 if (n == 0)
73890 return k;
73891 k._s = 1;
73892 k = k.multiplySingleDigit(Math.pow(10, n));
73893 return (this._s < 0 ? k.negate() : k);
73894 } else if (-n >= this._d.length*BigInteger_base_log10) {
73895 return ZERO;
73896 } else {
73897 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
73898
73899 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
73900 k._d.shift();
73901 }
73902 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
73903 }
73904 };
73905
73906 /*
73907 Function: pow
73908 Raise a <BigInteger> to a power.
73909
73910 In this implementation, 0**0 is 1.
73911
73912 Parameters:
73913
73914 n - The exponent to raise *this* by. *n* must be no greater than
73915 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
73916
73917 Returns:
73918
73919 *this* raised to the *nth* power.
73920
73921 See Also:
73922
73923 <modPow>
73924 */
73925 BigInteger.prototype.pow = function(n) {
73926 if (this.isUnit()) {
73927 if (this._s > 0) {
73928 return this;
73929 }
73930 else {
73931 return BigInteger(n).isOdd() ? this : this.negate();
73932 }
73933 }
73934
73935 n = BigInteger(n);
73936 if (n._s === 0) {
73937 return ONE;
73938 }
73939 else if (n._s < 0) {
73940 if (this._s === 0) {
73941 throw new Error("Divide by zero");
73942 }
73943 else {
73944 return ZERO;
73945 }
73946 }
73947 if (this._s === 0) {
73948 return ZERO;
73949 }
73950 if (n.isUnit()) {
73951 return this;
73952 }
73953
73954 if (n.compareAbs(MAX_EXP) > 0) {
73955 throw new Error("exponent too large in BigInteger.pow");
73956 }
73957 var x = this;
73958 var aux = ONE;
73959 var two = BigInteger.small[2];
73960
73961 while (n.isPositive()) {
73962 if (n.isOdd()) {
73963 aux = aux.multiply(x);
73964 if (n.isUnit()) {
73965 return aux;
73966 }
73967 }
73968 x = x.square();
73969 n = n.quotient(two);
73970 }
73971
73972 return aux;
73973 };
73974
73975 /*
73976 Function: modPow
73977 Raise a <BigInteger> to a power (mod m).
73978
73979 Because it is reduced by a modulus, <modPow> is not limited by
73980 <BigInteger.MAX_EXP> like <pow>.
73981
73982 Parameters:
73983
73984 exponent - The exponent to raise *this* by. Must be positive.
73985 modulus - The modulus.
73986
73987 Returns:
73988
73989 *this* ^ *exponent* (mod *modulus*).
73990
73991 See Also:
73992
73993 <pow>, <mod>
73994 */
73995 BigInteger.prototype.modPow = function(exponent, modulus) {
73996 var result = ONE;
73997 var base = this;
73998
73999 while (exponent.isPositive()) {
74000 if (exponent.isOdd()) {
74001 result = result.multiply(base).remainder(modulus);
74002 }
74003
74004 exponent = exponent.quotient(BigInteger.small[2]);
74005 if (exponent.isPositive()) {
74006 base = base.square().remainder(modulus);
74007 }
74008 }
74009
74010 return result;
74011 };
74012
74013 /*
74014 Function: log
74015 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
74016
74017 This is equivalent to
74018
74019 > Math.log(this.toJSValue())
74020
74021 but handles values outside of the native number range.
74022
74023 Returns:
74024
74025 log( *this* )
74026
74027 See Also:
74028
74029 <toJSValue>
74030 */
74031 BigInteger.prototype.log = function() {
74032 switch (this._s) {
74033 case 0: return -Infinity;
74034 case -1: return NaN;
74035 default: // Fall through.
74036 }
74037
74038 var l = this._d.length;
74039
74040 if (l*BigInteger_base_log10 < 30) {
74041 return Math.log(this.valueOf());
74042 }
74043
74044 var N = Math.ceil(30/BigInteger_base_log10);
74045 var firstNdigits = this._d.slice(l - N);
74046 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
74047 };
74048
74049 /*
74050 Function: valueOf
74051 Convert a <BigInteger> to a native JavaScript integer.
74052
74053 This is called automatically by JavaScipt to convert a <BigInteger> to a
74054 native value.
74055
74056 Returns:
74057
74058 > parseInt(this.toString(), 10)
74059
74060 See Also:
74061
74062 <toString>, <toJSValue>
74063 */
74064 BigInteger.prototype.valueOf = function() {
74065 return parseInt(this.toString(), 10);
74066 };
74067
74068 /*
74069 Function: toJSValue
74070 Convert a <BigInteger> to a native JavaScript integer.
74071
74072 This is the same as valueOf, but more explicitly named.
74073
74074 Returns:
74075
74076 > parseInt(this.toString(), 10)
74077
74078 See Also:
74079
74080 <toString>, <valueOf>
74081 */
74082 BigInteger.prototype.toJSValue = function() {
74083 return parseInt(this.toString(), 10);
74084 };
74085
74086 var MAX_EXP = BigInteger(0x7FFFFFFF);
74087 // Constant: MAX_EXP
74088 // The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
74089 BigInteger.MAX_EXP = MAX_EXP;
74090
74091 (function() {
74092 function makeUnary(fn) {
74093 return function(a) {
74094 return fn.call(BigInteger(a));
74095 };
74096 }
74097
74098 function makeBinary(fn) {
74099 return function(a, b) {
74100 return fn.call(BigInteger(a), BigInteger(b));
74101 };
74102 }
74103
74104 function makeTrinary(fn) {
74105 return function(a, b, c) {
74106 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
74107 };
74108 }
74109
74110 (function() {
74111 var i, fn;
74112 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
74113 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
74114 var trinary = ["modPow"];
74115
74116 for (i = 0; i < unary.length; i++) {
74117 fn = unary[i];
74118 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
74119 }
74120
74121 for (i = 0; i < binary.length; i++) {
74122 fn = binary[i];
74123 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
74124 }
74125
74126 for (i = 0; i < trinary.length; i++) {
74127 fn = trinary[i];
74128 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
74129 }
74130
74131 BigInteger.exp10 = function(x, n) {
74132 return BigInteger(x).exp10(n);
74133 };
74134 })();
74135 })();
74136
74137 exports.BigInteger = BigInteger;
74138 })(typeof exports !== 'undefined' ? exports : this);
74139 </script>
74140 <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){
74141 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;
74142
74143 },{}],2:[function(require,module,exports){
74144 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;
74145
74146 },{"./scoring":6}],3:[function(require,module,exports){
74147 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(","),
74148 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(","),
74149 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(","),
74150 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(","),
74151 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;
74152
74153 },{}],4:[function(require,module,exports){
74154 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;
74155
74156 },{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
74157 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;
74158
74159 },{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
74160 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;
74161
74162 },{"./adjacency_graphs":1}],7:[function(require,module,exports){
74163 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;
74164
74165 },{}]},{},[4])(4)
74166 });
74167
74168 </script>
74169 <script>/*
74170 * Detects entropy from a string.
74171 *
74172 * Formats include:
74173 * binary [0-1]
74174 * base 6 [0-5]
74175 * dice 6 [1-6]
74176 * decimal [0-9]
74177 * hexadecimal [0-9A-F]
74178 * card [A2-9TJQK][CDHS]
74179 *
74180 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
74181 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
74182 * entropy.
74183 */
74184
74185 window.Entropy = new (function() {
74186
74187 var TWO = new BigInteger(2);
74188
74189 // matchers returns an array of the matched events for each type of entropy.
74190 // eg
74191 // matchers.binary("010") returns ["0", "1", "0"]
74192 // matchers.binary("a10") returns ["1", "0"]
74193 // matchers.hex("a10") returns ["a", "1", "0"]
74194 var matchers = {
74195 binary: function(str) {
74196 return str.match(/[0-1]/gi) || [];
74197 },
74198 base6: function(str) {
74199 return str.match(/[0-5]/gi) || [];
74200 },
74201 dice: function(str) {
74202 return str.match(/[1-6]/gi) || []; // ie dice numbers
74203 },
74204 base10: function(str) {
74205 return str.match(/[0-9]/gi) || [];
74206 },
74207 hex: function(str) {
74208 return str.match(/[0-9A-F]/gi) || [];
74209 },
74210 card: function(str) {
74211 // Format is NumberSuit, eg
74212 // AH ace of hearts
74213 // 8C eight of clubs
74214 // TD ten of diamonds
74215 // JS jack of spades
74216 // QH queen of hearts
74217 // KC king of clubs
74218 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
74219 }
74220 }
74221
74222 // Convert array of cards from ["ac", "4d", "ks"]
74223 // to numbers between 0 and 51 [0, 16, 51]
74224 function convertCardsToInts(cards) {
74225 var ints = [];
74226 var values = "a23456789tjqk";
74227 var suits = "cdhs";
74228 for (var i=0; i<cards.length; i++) {
74229 var card = cards[i].toLowerCase();
74230 var value = card[0];
74231 var suit = card[1];
74232 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
74233 ints.push(asInt);
74234 }
74235 return ints;
74236 }
74237
74238 this.fromString = function(rawEntropyStr) {
74239 // Find type of entropy being used (binary, hex, dice etc)
74240 var base = getBase(rawEntropyStr);
74241 // Convert dice to base6 entropy (ie 1-6 to 0-5)
74242 // This is done by changing all 6s to 0s
74243 if (base.str == "dice") {
74244 var newParts = [];
74245 var newInts = [];
74246 for (var i=0; i<base.parts.length; i++) {
74247 var c = base.parts[i];
74248 if ("12345".indexOf(c) > -1) {
74249 newParts[i] = base.parts[i];
74250 newInts[i] = base.ints[i];
74251 }
74252 else {
74253 newParts[i] = "0";
74254 newInts[i] = 0;
74255 }
74256 }
74257 base.str = "base 6 (dice)";
74258 base.ints = newInts;
74259 base.parts = newParts;
74260 base.matcher = matchers.base6;
74261 }
74262 // Detect empty entropy
74263 if (base.parts.length == 0) {
74264 return {
74265 binaryStr: "",
74266 cleanStr: "",
74267 cleanHtml: "",
74268 base: base,
74269 };
74270 }
74271 // Convert base.ints to BigInteger.
74272 // Due to using unusual bases, eg cards of base52, this is not as simple as
74273 // using BigInteger.parse()
74274 var entropyInt = BigInteger.ZERO;
74275 for (var i=base.ints.length-1; i>=0; i--) {
74276 var thisInt = BigInteger.parse(base.ints[i]);
74277 var power = (base.ints.length - 1) - i;
74278 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
74279 entropyInt = entropyInt.add(additionalEntropy);
74280 }
74281 // Convert entropy to binary
74282 var entropyBin = entropyInt.toString(2);
74283 // If the first integer is small, it must be padded with zeros.
74284 // Otherwise the chance of the first bit being 1 is 100%, which is
74285 // obviously incorrect.
74286 // This is not perfect for non-2^n bases.
74287 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
74288 while (entropyBin.length < expectedBits) {
74289 entropyBin = "0" + entropyBin;
74290 }
74291 // Calculate the number of bits per event
74292 var bitsPerEvent = Math.log2(base.asInt);
74293 // Cards binary must be handled differently, since they're not replaced
74294 if (base.asInt == 52) {
74295 var cardEntropy = processCardEntropy(base.parts);
74296 entropyBin = cardEntropy.binaryStr;
74297 bitsPerEvent = cardEntropy.bitsPerEvent;
74298 }
74299 // Supply a 'filtered' entropy string for display purposes
74300 var entropyClean = base.parts.join("");
74301 var entropyHtml = base.parts.join("");
74302 if (base.asInt == 52) {
74303 entropyClean = base.parts.join(" ").toUpperCase();
74304 entropyClean = entropyClean.replace(/C/g, "\u2663");
74305 entropyClean = entropyClean.replace(/D/g, "\u2666");
74306 entropyClean = entropyClean.replace(/H/g, "\u2665");
74307 entropyClean = entropyClean.replace(/S/g, "\u2660");
74308 entropyHtml = base.parts.join(" ").toUpperCase();
74309 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
74310 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
74311 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
74312 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
74313 }
74314 // Return the result
74315 var e = {
74316 binaryStr: entropyBin,
74317 cleanStr: entropyClean,
74318 cleanHtml: entropyHtml,
74319 bitsPerEvent: bitsPerEvent,
74320 base: base,
74321 }
74322 return e;
74323 }
74324
74325 function getSortedDeck() {
74326 var s = [];
74327 var suits = "CDHS";
74328 var values = "A23456789TJQK";
74329 for (var i=0; i<suits.length; i++) {
74330 for (var j=0; j<values.length; j++) {
74331 s.push(values[j]+suits[i]);
74332 }
74333 }
74334 return s;
74335 }
74336
74337 function getBase(str) {
74338 // Need to get the lowest base for the supplied entropy.
74339 // This prevents interpreting, say, dice rolls as hexadecimal.
74340 var binaryMatches = matchers.binary(str);
74341 var hexMatches = matchers.hex(str);
74342 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
74343 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
74344 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
74345 return {
74346 ints: ints,
74347 parts: binaryMatches,
74348 matcher: matchers.binary,
74349 asInt: 2,
74350 str: "binary",
74351 }
74352 }
74353 var cardMatches = matchers.card(str);
74354 if (cardMatches.length >= hexMatches.length / 2) {
74355 var ints = convertCardsToInts(cardMatches);
74356 return {
74357 ints: ints,
74358 parts: cardMatches,
74359 matcher: matchers.card,
74360 asInt: 52,
74361 str: "card",
74362 }
74363 }
74364 var diceMatches = matchers.dice(str);
74365 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
74366 var ints = diceMatches.map(function(i) { return parseInt(i) });
74367 return {
74368 ints: ints,
74369 parts: diceMatches,
74370 matcher: matchers.dice,
74371 asInt: 6,
74372 str: "dice",
74373 }
74374 }
74375 var base6Matches = matchers.base6(str);
74376 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
74377 var ints = base6Matches.map(function(i) { return parseInt(i) });
74378 return {
74379 ints: ints,
74380 parts: base6Matches,
74381 matcher: matchers.base6,
74382 asInt: 6,
74383 str: "base 6",
74384 }
74385 }
74386 var base10Matches = matchers.base10(str);
74387 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
74388 var ints = base10Matches.map(function(i) { return parseInt(i) });
74389 return {
74390 ints: ints,
74391 parts: base10Matches,
74392 matcher: matchers.base10,
74393 asInt: 10,
74394 str: "base 10",
74395 }
74396 }
74397 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
74398 return {
74399 ints: ints,
74400 parts: hexMatches,
74401 matcher: matchers.hex,
74402 asInt: 16,
74403 str: "hexadecimal",
74404 }
74405 }
74406
74407 // Assume cards are NOT replaced.
74408 // Additional entropy decreases as more cards are used. This means
74409 // total possible entropy is measured using n!, not base^n.
74410 // eg the second last card can be only one of two, not one of fifty two
74411 // so the added entropy for that card is only one bit at most
74412 function processCardEntropy(cards) {
74413 // Track how many instances of each card have been used, and thus
74414 // how many decks are in use.
74415 var cardCounts = {};
74416 var numberOfDecks = 0;
74417 // Work out number of decks by max(duplicates)
74418 for (var i=0; i<cards.length; i++) {
74419 // Get the card that was drawn
74420 var cardLower = cards[i];
74421 var card = cardLower.toUpperCase();
74422 // Initialize the count for this card if needed
74423 if (!(card in cardCounts)) {
74424 cardCounts[card] = 0;
74425 }
74426 cardCounts[card] += 1;
74427 // See if this is max(duplicates)
74428 if (cardCounts[card] > numberOfDecks) {
74429 numberOfDecks = cardCounts[card];
74430 }
74431 }
74432 // Work out the total number of bits for this many decks
74433 // See http://crypto.stackexchange.com/q/41886
74434 var gainedBits = 0;
74435 // Equivalent of Math.log2(factorial(52*numberOfDecks))
74436 // which becomes infinity for numberOfDecks > 4
74437 for (var i=1; i<=52*numberOfDecks; i++) {
74438 gainedBits = gainedBits + Math.log2(i);
74439 }
74440 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
74441 var maxBits = gainedBits - lostBits;
74442 // Convert the drawn cards to a binary representation.
74443 // The exact technique for doing this is unclear.
74444 // See
74445 // http://crypto.stackexchange.com/a/41896
74446 // "I even doubt that this is well defined (only the average entropy
74447 // is, I believe)."
74448 // See
74449 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
74450 // "The binary representation can be the first log(permutations,2) bits
74451 // of the sha-2 hash of the normalized deck string."
74452 //
74453 // In this specific implementation, the first N bits of the hash of the
74454 // normalized cards string is being used. Uppercase, no spaces; eg
74455 // sha256("AH8DQSTC2H")
74456 var totalCards = numberOfDecks * 52;
74457 var percentUsed = cards.length / totalCards;
74458 // Calculate the average number of bits of entropy for the number of
74459 // cards drawn.
74460 var numberOfBits = Math.floor(maxBits * percentUsed);
74461 // Create a normalized string of the selected cards
74462 var normalizedCards = cards.join("").toUpperCase();
74463 // Convert to binary using the SHA256 hash of the normalized cards.
74464 // If the number of bits is more than 256, multiple hashes
74465 // are used until the required number of bits is reached.
74466 var entropyBin = "";
74467 var iterations = 0;
74468 while (entropyBin.length < numberOfBits) {
74469 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
74470 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
74471 for (var i=0; i<hashHex.length; i++) {
74472 var decimal = parseInt(hashHex[i], 16);
74473 var binary = decimal.toString(2);
74474 while (binary.length < 4) {
74475 binary = "0" + binary;
74476 }
74477 entropyBin = entropyBin + binary;
74478 }
74479 iterations = iterations + 1;
74480 }
74481 // Truncate to the appropriate number of bits.
74482 entropyBin = entropyBin.substring(0, numberOfBits);
74483 // Get the number of bits per event
74484 bitsPerEvent = maxBits / totalCards;
74485 return {
74486 binaryStr: entropyBin,
74487 bitsPerEvent: bitsPerEvent,
74488 }
74489 }
74490
74491 // Polyfill for Math.log2
74492 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
74493 Math.log2 = Math.log2 || function(x) {
74494 // The polyfill isn't good enough because of the poor accuracy of
74495 // Math.LOG2E
74496 // log2(8) gave 2.9999999999999996 which when floored causes issues.
74497 // So instead use the BigInteger library to get it right.
74498 return BigInteger.log(x) / BigInteger.log(2);
74499 };
74500
74501 // Depends on BigInteger
74502 function factorial(n) {
74503 if (n == 0) {
74504 return 1;
74505 }
74506 f = BigInteger.ONE;
74507 for (var i=1; i<=n; i++) {
74508 f = f.multiply(new BigInteger(i));
74509 }
74510 return f;
74511 }
74512
74513 })();
74514 </script>
74515 <script>(function() {
74516
74517 // mnemonics is populated as required by getLanguage
74518 var mnemonics = { "english": new Mnemonic("english") };
74519 var mnemonic = mnemonics["english"];
74520 var seed = null;
74521 var bip32RootKey = null;
74522 var bip32ExtendedKey = null;
74523 var network = bitcoinjs.bitcoin.networks.bitcoin;
74524 var addressRowTemplate = $("#address-row-template");
74525
74526 var showIndex = true;
74527 var showAddress = true;
74528 var showPubKey = true;
74529 var showPrivKey = true;
74530 var showQr = false;
74531 var litecoinUseLtub = true;
74532
74533 var entropyChangeTimeoutEvent = null;
74534 var phraseChangeTimeoutEvent = null;
74535 var rootKeyChangedTimeoutEvent = null;
74536
74537 var generationProcesses = [];
74538
74539 var DOM = {};
74540 DOM.network = $(".network");
74541 DOM.bip32Client = $("#bip32-client");
74542 DOM.phraseNetwork = $("#network-phrase");
74543 DOM.useEntropy = $(".use-entropy");
74544 DOM.entropyContainer = $(".entropy-container");
74545 DOM.entropy = $(".entropy");
74546 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
74547 DOM.entropyType = DOM.entropyContainer.find(".type");
74548 DOM.entropyCrackTime = DOM.entropyContainer.find(".crack-time");
74549 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
74550 DOM.entropyBits = DOM.entropyContainer.find(".bits");
74551 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
74552 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
74553 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
74554 DOM.entropyWordIndexes = DOM.entropyContainer.find(".word-indexes");
74555 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
74556 DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning");
74557 DOM.phrase = $(".phrase");
74558 DOM.passphrase = $(".passphrase");
74559 DOM.generateContainer = $(".generate-container");
74560 DOM.generate = $(".generate");
74561 DOM.seed = $(".seed");
74562 DOM.rootKey = $(".root-key");
74563 DOM.litecoinLtubContainer = $(".litecoin-ltub-container");
74564 DOM.litecoinUseLtub = $(".litecoin-use-ltub");
74565 DOM.extendedPrivKey = $(".extended-priv-key");
74566 DOM.extendedPubKey = $(".extended-pub-key");
74567 DOM.bip32tab = $("#bip32-tab");
74568 DOM.bip44tab = $("#bip44-tab");
74569 DOM.bip49tab = $("#bip49-tab");
74570 DOM.bip141tab = $("#bip141-tab");
74571 DOM.bip32panel = $("#bip32");
74572 DOM.bip44panel = $("#bip44");
74573 DOM.bip49panel = $("#bip49");
74574 DOM.bip32path = $("#bip32-path");
74575 DOM.bip44path = $("#bip44-path");
74576 DOM.bip44purpose = $("#bip44 .purpose");
74577 DOM.bip44coin = $("#bip44 .coin");
74578 DOM.bip44account = $("#bip44 .account");
74579 DOM.bip44accountXprv = $("#bip44 .account-xprv");
74580 DOM.bip44accountXpub = $("#bip44 .account-xpub");
74581 DOM.bip44change = $("#bip44 .change");
74582 DOM.bip49unavailable = $("#bip49 .unavailable");
74583 DOM.bip49available = $("#bip49 .available");
74584 DOM.bip49path = $("#bip49-path");
74585 DOM.bip49purpose = $("#bip49 .purpose");
74586 DOM.bip49coin = $("#bip49 .coin");
74587 DOM.bip49account = $("#bip49 .account");
74588 DOM.bip49accountXprv = $("#bip49 .account-xprv");
74589 DOM.bip49accountXpub = $("#bip49 .account-xpub");
74590 DOM.bip49change = $("#bip49 .change");
74591 DOM.bip141unavailable = $("#bip141 .unavailable");
74592 DOM.bip141available = $("#bip141 .available");
74593 DOM.bip141path = $("#bip141-path");
74594 DOM.bip141semantics = $(".bip141-semantics");
74595 DOM.generatedStrength = $(".generate-container .strength");
74596 DOM.hardenedAddresses = $(".hardened-addresses");
74597 DOM.useBitpayAddressesContainer = $(".use-bitpay-addresses-container");
74598 DOM.useBitpayAddresses = $(".use-bitpay-addresses");
74599 DOM.addresses = $(".addresses");
74600 DOM.rowsToAdd = $(".rows-to-add");
74601 DOM.more = $(".more");
74602 DOM.moreRowsStartIndex = $(".more-rows-start-index");
74603 DOM.feedback = $(".feedback");
74604 DOM.tab = $(".derivation-type a");
74605 DOM.indexToggle = $(".index-toggle");
74606 DOM.addressToggle = $(".address-toggle");
74607 DOM.publicKeyToggle = $(".public-key-toggle");
74608 DOM.privateKeyToggle = $(".private-key-toggle");
74609 DOM.languages = $(".languages a");
74610 DOM.qrContainer = $(".qr-container");
74611 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
74612 DOM.qrImage = DOM.qrContainer.find(".qr-image");
74613 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
74614 DOM.showQrEls = $("[data-show-qr]");
74615
74616 function init() {
74617 // Events
74618 DOM.network.on("change", networkChanged);
74619 DOM.bip32Client.on("change", bip32ClientChanged);
74620 DOM.useEntropy.on("change", setEntropyVisibility);
74621 DOM.entropy.on("input", delayedEntropyChanged);
74622 DOM.entropyMnemonicLength.on("change", entropyChanged);
74623 DOM.phrase.on("input", delayedPhraseChanged);
74624 DOM.passphrase.on("input", delayedPhraseChanged);
74625 DOM.generate.on("click", generateClicked);
74626 DOM.more.on("click", showMore);
74627 DOM.rootKey.on("input", delayedRootKeyChanged);
74628 DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged);
74629 DOM.bip32path.on("input", calcForDerivationPath);
74630 DOM.bip44account.on("input", calcForDerivationPath);
74631 DOM.bip44change.on("input", calcForDerivationPath);
74632 DOM.bip49account.on("input", calcForDerivationPath);
74633 DOM.bip49change.on("input", calcForDerivationPath);
74634 DOM.bip141path.on("input", calcForDerivationPath);
74635 DOM.bip141semantics.on("change", tabChanged);
74636 DOM.tab.on("shown.bs.tab", tabChanged);
74637 DOM.hardenedAddresses.on("change", calcForDerivationPath);
74638 DOM.indexToggle.on("click", toggleIndexes);
74639 DOM.addressToggle.on("click", toggleAddresses);
74640 DOM.publicKeyToggle.on("click", togglePublicKeys);
74641 DOM.privateKeyToggle.on("click", togglePrivateKeys);
74642 DOM.languages.on("click", languageChanged);
74643 DOM.useBitpayAddresses.on("change", useBitpayAddressesChange);
74644 setQrEvents(DOM.showQrEls);
74645 disableForms();
74646 hidePending();
74647 hideValidationError();
74648 populateNetworkSelect();
74649 populateClientSelect();
74650 }
74651
74652 // Event handlers
74653
74654 function networkChanged(e) {
74655 clearDerivedKeys();
74656 clearAddressesList();
74657 DOM.litecoinLtubContainer.addClass("hidden");
74658 DOM.useBitpayAddressesContainer.addClass("hidden");
74659 var networkIndex = e.target.value;
74660 var network = networks[networkIndex];
74661 network.onSelect();
74662 if (network.segwitAvailable) {
74663 adjustNetworkForSegwit();
74664 showSegwitAvailable();
74665 }
74666 else {
74667 showSegwitUnavailable();
74668 }
74669 if (seed != null) {
74670 phraseChanged();
74671 }
74672 else {
74673 rootKeyChanged();
74674 }
74675 }
74676
74677 function bip32ClientChanged(e) {
74678 var clientIndex = DOM.bip32Client.val();
74679 if (clientIndex == "custom") {
74680 DOM.bip32path.prop("readonly", false);
74681 }
74682 else {
74683 DOM.bip32path.prop("readonly", true);
74684 clients[clientIndex].onSelect();
74685 if (seed != null) {
74686 phraseChanged();
74687 }
74688 else {
74689 rootKeyChanged();
74690 }
74691 }
74692 }
74693
74694 function setEntropyVisibility() {
74695 if (isUsingOwnEntropy()) {
74696 DOM.entropyContainer.removeClass("hidden");
74697 DOM.generateContainer.addClass("hidden");
74698 DOM.phrase.prop("readonly", true);
74699 DOM.entropy.focus();
74700 entropyChanged();
74701 }
74702 else {
74703 DOM.entropyContainer.addClass("hidden");
74704 DOM.generateContainer.removeClass("hidden");
74705 DOM.phrase.prop("readonly", false);
74706 hidePending();
74707 }
74708 }
74709
74710 function delayedPhraseChanged() {
74711 hideValidationError();
74712 seed = null;
74713 bip32RootKey = null;
74714 bip32ExtendedKey = null;
74715 clearAddressesList();
74716 showPending();
74717 if (phraseChangeTimeoutEvent != null) {
74718 clearTimeout(phraseChangeTimeoutEvent);
74719 }
74720 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
74721 }
74722
74723 function phraseChanged() {
74724 showPending();
74725 setMnemonicLanguage();
74726 // Get the mnemonic phrase
74727 var phrase = DOM.phrase.val();
74728 var errorText = findPhraseErrors(phrase);
74729 if (errorText) {
74730 showValidationError(errorText);
74731 return;
74732 }
74733 // Calculate and display
74734 var passphrase = DOM.passphrase.val();
74735 calcBip32RootKeyFromSeed(phrase, passphrase);
74736 calcForDerivationPath();
74737 // Show the word indexes
74738 showWordIndexes();
74739 }
74740
74741 function tabChanged() {
74742 showPending();
74743 adjustNetworkForSegwit();
74744 var phrase = DOM.phrase.val();
74745 if (phrase != "") {
74746 // Calculate and display for mnemonic
74747 var errorText = findPhraseErrors(phrase);
74748 if (errorText) {
74749 showValidationError(errorText);
74750 return;
74751 }
74752 // Calculate and display
74753 var passphrase = DOM.passphrase.val();
74754 calcBip32RootKeyFromSeed(phrase, passphrase);
74755 }
74756 else {
74757 // Calculate and display for root key
74758 var rootKeyBase58 = DOM.rootKey.val();
74759 var errorText = validateRootKey(rootKeyBase58);
74760 if (errorText) {
74761 showValidationError(errorText);
74762 return;
74763 }
74764 // Calculate and display
74765 calcBip32RootKeyFromBase58(rootKeyBase58);
74766 }
74767 calcForDerivationPath();
74768 }
74769
74770 function delayedEntropyChanged() {
74771 hideValidationError();
74772 showPending();
74773 if (entropyChangeTimeoutEvent != null) {
74774 clearTimeout(entropyChangeTimeoutEvent);
74775 }
74776 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
74777 }
74778
74779 function entropyChanged() {
74780 // If blank entropy, clear mnemonic, addresses, errors
74781 if (DOM.entropy.val().trim().length == 0) {
74782 clearDisplay();
74783 clearEntropyFeedback();
74784 DOM.phrase.val("");
74785 showValidationError("Blank entropy");
74786 return;
74787 }
74788 // Get the current phrase to detect changes
74789 var phrase = DOM.phrase.val();
74790 // Set the phrase from the entropy
74791 setMnemonicFromEntropy();
74792 // Recalc addresses if the phrase has changed
74793 var newPhrase = DOM.phrase.val();
74794 if (newPhrase != phrase) {
74795 if (newPhrase.length == 0) {
74796 clearDisplay();
74797 }
74798 else {
74799 phraseChanged();
74800 }
74801 }
74802 else {
74803 hidePending();
74804 }
74805 }
74806
74807 function delayedRootKeyChanged() {
74808 // Warn if there is an existing mnemonic or passphrase.
74809 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
74810 if (!confirm("This will clear existing mnemonic and passphrase")) {
74811 DOM.rootKey.val(bip32RootKey);
74812 return
74813 }
74814 }
74815 hideValidationError();
74816 showPending();
74817 // Clear existing mnemonic and passphrase
74818 DOM.phrase.val("");
74819 DOM.passphrase.val("");
74820 seed = null;
74821 if (rootKeyChangedTimeoutEvent != null) {
74822 clearTimeout(rootKeyChangedTimeoutEvent);
74823 }
74824 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
74825 }
74826
74827 function rootKeyChanged() {
74828 showPending();
74829 hideValidationError();
74830 var rootKeyBase58 = DOM.rootKey.val();
74831 var errorText = validateRootKey(rootKeyBase58);
74832 if (errorText) {
74833 showValidationError(errorText);
74834 return;
74835 }
74836 // Calculate and display
74837 calcBip32RootKeyFromBase58(rootKeyBase58);
74838 calcForDerivationPath();
74839 }
74840
74841 function litecoinUseLtubChanged() {
74842 litecoinUseLtub = DOM.litecoinUseLtub.prop("checked");
74843 if (litecoinUseLtub) {
74844 network = bitcoinjs.bitcoin.networks.litecoin;
74845 }
74846 else {
74847 network = bitcoinjs.bitcoin.networks.litecoinXprv;
74848 }
74849 phraseChanged();
74850 }
74851
74852 function calcForDerivationPath() {
74853 clearDerivedKeys();
74854 clearAddressesList();
74855 showPending();
74856 // Don't show segwit if it's selected but network doesn't support it
74857 if (segwitSelected() && !networkHasSegwit()) {
74858 return;
74859 }
74860 // Get the derivation path
74861 var derivationPath = getDerivationPath();
74862 var errorText = findDerivationPathErrors(derivationPath);
74863 if (errorText) {
74864 showValidationError(errorText);
74865 return;
74866 }
74867 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
74868 if (bip44TabSelected()) {
74869 displayBip44Info();
74870 }
74871 else if (bip49TabSelected()) {
74872 displayBip49Info();
74873 }
74874 displayBip32Info();
74875 }
74876
74877 function generateClicked() {
74878 if (isUsingOwnEntropy()) {
74879 return;
74880 }
74881 clearDisplay();
74882 showPending();
74883 setTimeout(function() {
74884 setMnemonicLanguage();
74885 var phrase = generateRandomPhrase();
74886 if (!phrase) {
74887 return;
74888 }
74889 phraseChanged();
74890 }, 50);
74891 }
74892
74893 function languageChanged() {
74894 setTimeout(function() {
74895 setMnemonicLanguage();
74896 if (DOM.phrase.val().length > 0) {
74897 var newPhrase = convertPhraseToNewLanguage();
74898 DOM.phrase.val(newPhrase);
74899 phraseChanged();
74900 }
74901 else {
74902 DOM.generate.trigger("click");
74903 }
74904 }, 50);
74905 }
74906
74907 function useBitpayAddressesChange() {
74908 setBitcoinCashNetworkValues();
74909 phraseChanged();
74910 }
74911
74912 function toggleIndexes() {
74913 showIndex = !showIndex;
74914 $("td.index span").toggleClass("invisible");
74915 }
74916
74917 function toggleAddresses() {
74918 showAddress = !showAddress;
74919 $("td.address span").toggleClass("invisible");
74920 }
74921
74922 function togglePublicKeys() {
74923 showPubKey = !showPubKey;
74924 $("td.pubkey span").toggleClass("invisible");
74925 }
74926
74927 function togglePrivateKeys() {
74928 showPrivKey = !showPrivKey;
74929 $("td.privkey span").toggleClass("invisible");
74930 }
74931
74932 // Private methods
74933
74934 function generateRandomPhrase() {
74935 if (!hasStrongRandom()) {
74936 var errorText = "This browser does not support strong randomness";
74937 showValidationError(errorText);
74938 return;
74939 }
74940 // get the amount of entropy to use
74941 var numWords = parseInt(DOM.generatedStrength.val());
74942 var strength = numWords / 3 * 32;
74943 var buffer = new Uint8Array(strength / 8);
74944 // create secure entropy
74945 var data = crypto.getRandomValues(buffer);
74946 // show the words
74947 var words = mnemonic.toMnemonic(data);
74948 DOM.phrase.val(words);
74949 // show the entropy
74950 var entropyHex = uint8ArrayToHex(data);
74951 DOM.entropy.val(entropyHex);
74952 // ensure entropy fields are consistent with what is being displayed
74953 DOM.entropyMnemonicLength.val("raw");
74954 return words;
74955 }
74956
74957 function calcBip32RootKeyFromSeed(phrase, passphrase) {
74958 seed = mnemonic.toSeed(phrase, passphrase);
74959 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network);
74960 }
74961
74962 function calcBip32RootKeyFromBase58(rootKeyBase58) {
74963 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
74964 }
74965
74966 function calcBip32ExtendedKey(path) {
74967 // Check there's a root key to derive from
74968 if (!bip32RootKey) {
74969 return bip32RootKey;
74970 }
74971 var extendedKey = bip32RootKey;
74972 // Derive the key from the path
74973 var pathBits = path.split("/");
74974 for (var i=0; i<pathBits.length; i++) {
74975 var bit = pathBits[i];
74976 var index = parseInt(bit);
74977 if (isNaN(index)) {
74978 continue;
74979 }
74980 var hardened = bit[bit.length-1] == "'";
74981 var isPriv = !(extendedKey.isNeutered());
74982 var invalidDerivationPath = hardened && !isPriv;
74983 if (invalidDerivationPath) {
74984 extendedKey = null;
74985 }
74986 else if (hardened) {
74987 extendedKey = extendedKey.deriveHardened(index);
74988 }
74989 else {
74990 extendedKey = extendedKey.derive(index);
74991 }
74992 }
74993 return extendedKey
74994 }
74995
74996 function showValidationError(errorText) {
74997 DOM.feedback
74998 .text(errorText)
74999 .show();
75000 }
75001
75002 function hideValidationError() {
75003 DOM.feedback
75004 .text("")
75005 .hide();
75006 }
75007
75008 function findPhraseErrors(phrase) {
75009 // Preprocess the words
75010 phrase = mnemonic.normalizeString(phrase);
75011 var words = phraseToWordArray(phrase);
75012 // Detect blank phrase
75013 if (words.length == 0) {
75014 return "Blank mnemonic";
75015 }
75016 // Check each word
75017 for (var i=0; i<words.length; i++) {
75018 var word = words[i];
75019 var language = getLanguage();
75020 if (WORDLISTS[language].indexOf(word) == -1) {
75021 console.log("Finding closest match to " + word);
75022 var nearestWord = findNearestWord(word);
75023 return word + " not in wordlist, did you mean " + nearestWord + "?";
75024 }
75025 }
75026 // Check the words are valid
75027 var properPhrase = wordArrayToPhrase(words);
75028 var isValid = mnemonic.check(properPhrase);
75029 if (!isValid) {
75030 return "Invalid mnemonic";
75031 }
75032 return false;
75033 }
75034
75035 function validateRootKey(rootKeyBase58) {
75036 try {
75037 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
75038 }
75039 catch (e) {
75040 return "Invalid root key";
75041 }
75042 return "";
75043 }
75044
75045 function getDerivationPath() {
75046 if (bip44TabSelected()) {
75047 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
75048 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
75049 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
75050 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
75051 var path = "m/";
75052 path += purpose + "'/";
75053 path += coin + "'/";
75054 path += account + "'/";
75055 path += change;
75056 DOM.bip44path.val(path);
75057 var derivationPath = DOM.bip44path.val();
75058 console.log("Using derivation path from BIP44 tab: " + derivationPath);
75059 return derivationPath;
75060 }
75061 else if (bip49TabSelected()) {
75062 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
75063 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
75064 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
75065 var change = parseIntNoNaN(DOM.bip49change.val(), 0);
75066 var path = "m/";
75067 path += purpose + "'/";
75068 path += coin + "'/";
75069 path += account + "'/";
75070 path += change;
75071 DOM.bip49path.val(path);
75072 var derivationPath = DOM.bip49path.val();
75073 console.log("Using derivation path from BIP49 tab: " + derivationPath);
75074 return derivationPath;
75075 }
75076 else if (bip32TabSelected()) {
75077 var derivationPath = DOM.bip32path.val();
75078 console.log("Using derivation path from BIP32 tab: " + derivationPath);
75079 return derivationPath;
75080 }
75081 else if (bip141TabSelected()) {
75082 var derivationPath = DOM.bip141path.val();
75083 console.log("Using derivation path from BIP141 tab: " + derivationPath);
75084 return derivationPath;
75085 }
75086 else {
75087 console.log("Unknown derivation path");
75088 }
75089 }
75090
75091 function findDerivationPathErrors(path) {
75092 // TODO is not perfect but is better than nothing
75093 // Inspired by
75094 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
75095 // and
75096 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
75097 var maxDepth = 255; // TODO verify this!!
75098 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
75099 if (path[0] != "m") {
75100 return "First character must be 'm'";
75101 }
75102 if (path.length > 1) {
75103 if (path[1] != "/") {
75104 return "Separator must be '/'";
75105 }
75106 var indexes = path.split("/");
75107 if (indexes.length > maxDepth) {
75108 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
75109 }
75110 for (var depth = 1; depth<indexes.length; depth++) {
75111 var index = indexes[depth];
75112 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
75113 if (invalidChars.length > 0) {
75114 return "Invalid characters " + invalidChars + " found at depth " + depth;
75115 }
75116 var indexValue = parseInt(index.replace("'", ""));
75117 if (isNaN(depth)) {
75118 return "Invalid number at depth " + depth;
75119 }
75120 if (indexValue > maxIndexValue) {
75121 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
75122 }
75123 }
75124 }
75125 // Check root key exists or else derivation path is useless!
75126 if (!bip32RootKey) {
75127 return "No root key";
75128 }
75129 // Check no hardened derivation path when using xpub keys
75130 var hardenedPath = path.indexOf("'") > -1;
75131 var hardenedAddresses = bip32TabSelected() && DOM.hardenedAddresses.prop("checked");
75132 var hardened = hardenedPath || hardenedAddresses;
75133 var isXpubkey = bip32RootKey.isNeutered();
75134 if (hardened && isXpubkey) {
75135 return "Hardened derivation path is invalid with xpub key";
75136 }
75137 return false;
75138 }
75139
75140 function displayBip44Info() {
75141 // Get the derivation path for the account
75142 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
75143 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
75144 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
75145 var path = "m/";
75146 path += purpose + "'/";
75147 path += coin + "'/";
75148 path += account + "'/";
75149 // Calculate the account extended keys
75150 var accountExtendedKey = calcBip32ExtendedKey(path);
75151 var accountXprv = accountExtendedKey.toBase58();
75152 var accountXpub = accountExtendedKey.neutered().toBase58();
75153 // Display the extended keys
75154 DOM.bip44accountXprv.val(accountXprv);
75155 DOM.bip44accountXpub.val(accountXpub);
75156 }
75157
75158 function displayBip49Info() {
75159 // Get the derivation path for the account
75160 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
75161 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
75162 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
75163 var path = "m/";
75164 path += purpose + "'/";
75165 path += coin + "'/";
75166 path += account + "'/";
75167 // Calculate the account extended keys
75168 var accountExtendedKey = calcBip32ExtendedKey(path);
75169 var accountXprv = accountExtendedKey.toBase58();
75170 var accountXpub = accountExtendedKey.neutered().toBase58();
75171 // Display the extended keys
75172 DOM.bip49accountXprv.val(accountXprv);
75173 DOM.bip49accountXpub.val(accountXpub);
75174 }
75175
75176 function displayBip32Info() {
75177 // Display the key
75178 DOM.seed.val(seed);
75179 var rootKey = bip32RootKey.toBase58();
75180 DOM.rootKey.val(rootKey);
75181 var xprvkeyB58 = "NA";
75182 if (!bip32ExtendedKey.isNeutered()) {
75183 xprvkeyB58 = bip32ExtendedKey.toBase58();
75184 }
75185 var extendedPrivKey = xprvkeyB58;
75186 DOM.extendedPrivKey.val(extendedPrivKey);
75187 var extendedPubKey = bip32ExtendedKey.neutered().toBase58();
75188 DOM.extendedPubKey.val(extendedPubKey);
75189 // Display the addresses and privkeys
75190 clearAddressesList();
75191 displayAddresses(0, 20);
75192 }
75193
75194 function displayAddresses(start, total) {
75195 generationProcesses.push(new (function() {
75196
75197 var rows = [];
75198
75199 this.stop = function() {
75200 for (var i=0; i<rows.length; i++) {
75201 rows[i].shouldGenerate = false;
75202 }
75203 hidePending();
75204 }
75205
75206 for (var i=0; i<total; i++) {
75207 var index = i + start;
75208 var isLast = i == total - 1;
75209 rows.push(new TableRow(index, isLast));
75210 }
75211
75212 })());
75213 }
75214
75215 function segwitSelected() {
75216 return bip49TabSelected() || bip141TabSelected();
75217 }
75218
75219 function p2wpkhSelected() {
75220 return bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh";
75221 }
75222
75223 function p2wpkhInP2shSelected() {
75224 return bip49TabSelected() ||
75225 (bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh-p2sh");
75226 }
75227
75228 function TableRow(index, isLast) {
75229
75230 var self = this;
75231 this.shouldGenerate = true;
75232 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
75233 var isSegwit = segwitSelected();
75234 var segwitAvailable = networkHasSegwit();
75235 var isP2wpkh = p2wpkhSelected();
75236 var isP2wpkhInP2sh = p2wpkhInP2shSelected();
75237
75238 function init() {
75239 calculateValues();
75240 }
75241
75242 function calculateValues() {
75243 setTimeout(function() {
75244 if (!self.shouldGenerate) {
75245 return;
75246 }
75247 var key = "NA";
75248 if (useHardenedAddresses) {
75249 key = bip32ExtendedKey.deriveHardened(index);
75250 }
75251 else {
75252 key = bip32ExtendedKey.derive(index);
75253 }
75254 var address = key.getAddress().toString();
75255 var privkey = "NA";
75256 if (!key.isNeutered()) {
75257 privkey = key.keyPair.toWIF(network);
75258 }
75259 var pubkey = key.getPublicKeyBuffer().toString('hex');
75260 var indexText = getDerivationPath() + "/" + index;
75261 if (useHardenedAddresses) {
75262 indexText = indexText + "'";
75263 }
75264 // Ethereum values are different
75265 if (networks[DOM.network.val()].name == "ETH - Ethereum") {
75266 var privKeyBuffer = key.keyPair.d.toBuffer();
75267 privkey = privKeyBuffer.toString('hex');
75268 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
75269 var hexAddress = addressBuffer.toString('hex');
75270 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
75271 address = ethUtil.addHexPrefix(checksumAddress);
75272 privkey = ethUtil.addHexPrefix(privkey);
75273 pubkey = ethUtil.addHexPrefix(pubkey);
75274 }
75275 // Ripple values are different
75276 if (networks[DOM.network.val()].name == "XRP - Ripple") {
75277 privkey = convertRipplePriv(privkey);
75278 address = convertRippleAdrr(address);
75279 }
75280 // Segwit addresses are different
75281 if (isSegwit) {
75282 if (!segwitAvailable) {
75283 return;
75284 }
75285 if (isP2wpkh) {
75286 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
75287 var scriptpubkey = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
75288 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
75289 }
75290 else if (isP2wpkhInP2sh) {
75291 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
75292 var scriptsig = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
75293 var addressbytes = bitcoinjs.bitcoin.crypto.hash160(scriptsig);
75294 var scriptpubkey = bitcoinjs.bitcoin.script.scriptHash.output.encode(addressbytes);
75295 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
75296 }
75297 }
75298 addAddressToList(indexText, address, pubkey, privkey);
75299 if (isLast) {
75300 hidePending();
75301 }
75302 }, 50)
75303 }
75304
75305 init();
75306
75307 }
75308
75309 function showMore() {
75310 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
75311 if (isNaN(rowsToAdd)) {
75312 rowsToAdd = 20;
75313 DOM.rowsToAdd.val("20");
75314 }
75315 var start = parseInt(DOM.moreRowsStartIndex.val())
75316 if (isNaN(start)) {
75317 start = lastIndexInTable() + 1;
75318 }
75319 else {
75320 var newStart = start + rowsToAdd;
75321 DOM.moreRowsStartIndex.val(newStart);
75322 }
75323 if (rowsToAdd > 200) {
75324 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
75325 msg += "Do you want to continue?";
75326 if (!confirm(msg)) {
75327 return;
75328 }
75329 }
75330 displayAddresses(start, rowsToAdd);
75331 }
75332
75333 function clearDisplay() {
75334 clearAddressesList();
75335 clearKeys();
75336 hideValidationError();
75337 }
75338
75339 function clearAddressesList() {
75340 DOM.addresses.empty();
75341 stopGenerating();
75342 }
75343
75344 function stopGenerating() {
75345 while (generationProcesses.length > 0) {
75346 var generation = generationProcesses.shift();
75347 generation.stop();
75348 }
75349 }
75350
75351 function clearKeys() {
75352 clearRootKey();
75353 clearDerivedKeys();
75354 }
75355
75356 function clearRootKey() {
75357 DOM.rootKey.val("");
75358 }
75359
75360 function clearDerivedKeys() {
75361 DOM.extendedPrivKey.val("");
75362 DOM.extendedPubKey.val("");
75363 DOM.bip44accountXprv.val("");
75364 DOM.bip44accountXpub.val("");
75365 }
75366
75367 function addAddressToList(indexText, address, pubkey, privkey) {
75368 var row = $(addressRowTemplate.html());
75369 // Elements
75370 var indexCell = row.find(".index span");
75371 var addressCell = row.find(".address span");
75372 var pubkeyCell = row.find(".pubkey span");
75373 var privkeyCell = row.find(".privkey span");
75374 // Content
75375 indexCell.text(indexText);
75376 addressCell.text(address);
75377 pubkeyCell.text(pubkey);
75378 privkeyCell.text(privkey);
75379 // Visibility
75380 if (!showIndex) {
75381 indexCell.addClass("invisible");
75382 }
75383 if (!showAddress) {
75384 addressCell.addClass("invisible");
75385 }
75386 if (!showPubKey) {
75387 pubkeyCell.addClass("invisible");
75388 }
75389 if (!showPrivKey) {
75390 privkeyCell.addClass("invisible");
75391 }
75392 DOM.addresses.append(row);
75393 var rowShowQrEls = row.find("[data-show-qr]");
75394 setQrEvents(rowShowQrEls);
75395 }
75396
75397 function hasStrongRandom() {
75398 return 'crypto' in window && window['crypto'] !== null;
75399 }
75400
75401 function disableForms() {
75402 $("form").on("submit", function(e) {
75403 e.preventDefault();
75404 });
75405 }
75406
75407 function parseIntNoNaN(val, defaultVal) {
75408 var v = parseInt(val);
75409 if (isNaN(v)) {
75410 return defaultVal;
75411 }
75412 return v;
75413 }
75414
75415 function showPending() {
75416 DOM.feedback
75417 .text("Calculating...")
75418 .show();
75419 }
75420
75421 function findNearestWord(word) {
75422 var language = getLanguage();
75423 var words = WORDLISTS[language];
75424 var minDistance = 99;
75425 var closestWord = words[0];
75426 for (var i=0; i<words.length; i++) {
75427 var comparedTo = words[i];
75428 if (comparedTo.indexOf(word) == 0) {
75429 return comparedTo;
75430 }
75431 var distance = Levenshtein.get(word, comparedTo);
75432 if (distance < minDistance) {
75433 closestWord = comparedTo;
75434 minDistance = distance;
75435 }
75436 }
75437 return closestWord;
75438 }
75439
75440 function hidePending() {
75441 DOM.feedback
75442 .text("")
75443 .hide();
75444 }
75445
75446 function populateNetworkSelect() {
75447 for (var i=0; i<networks.length; i++) {
75448 var network = networks[i];
75449 var option = $("<option>");
75450 option.attr("value", i);
75451 option.text(network.name);
75452 if (network.name == "BTC - Bitcoin") {
75453 option.prop("selected", true);
75454 }
75455 DOM.phraseNetwork.append(option);
75456 }
75457 }
75458
75459 function populateClientSelect() {
75460 for (var i=0; i<clients.length; i++) {
75461 var client = clients[i];
75462 var option = $("<option>");
75463 option.attr("value", i);
75464 option.text(client.name);
75465 DOM.bip32Client.append(option);
75466 }
75467 }
75468
75469 function getLanguage() {
75470 var defaultLanguage = "english";
75471 // Try to get from existing phrase
75472 var language = getLanguageFromPhrase();
75473 // Try to get from url if not from phrase
75474 if (language.length == 0) {
75475 language = getLanguageFromUrl();
75476 }
75477 // Default to English if no other option
75478 if (language.length == 0) {
75479 language = defaultLanguage;
75480 }
75481 return language;
75482 }
75483
75484 function getLanguageFromPhrase(phrase) {
75485 // Check if how many words from existing phrase match a language.
75486 var language = "";
75487 if (!phrase) {
75488 phrase = DOM.phrase.val();
75489 }
75490 if (phrase.length > 0) {
75491 var words = phraseToWordArray(phrase);
75492 var languageMatches = {};
75493 for (l in WORDLISTS) {
75494 // Track how many words match in this language
75495 languageMatches[l] = 0;
75496 for (var i=0; i<words.length; i++) {
75497 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
75498 if (wordInLanguage) {
75499 languageMatches[l]++;
75500 }
75501 }
75502 // Find languages with most word matches.
75503 // This is made difficult due to commonalities between Chinese
75504 // simplified vs traditional.
75505 var mostMatches = 0;
75506 var mostMatchedLanguages = [];
75507 for (var l in languageMatches) {
75508 var numMatches = languageMatches[l];
75509 if (numMatches > mostMatches) {
75510 mostMatches = numMatches;
75511 mostMatchedLanguages = [l];
75512 }
75513 else if (numMatches == mostMatches) {
75514 mostMatchedLanguages.push(l);
75515 }
75516 }
75517 }
75518 if (mostMatchedLanguages.length > 0) {
75519 // Use first language and warn if multiple detected
75520 language = mostMatchedLanguages[0];
75521 if (mostMatchedLanguages.length > 1) {
75522 console.warn("Multiple possible languages");
75523 console.warn(mostMatchedLanguages);
75524 }
75525 }
75526 }
75527 return language;
75528 }
75529
75530 function getLanguageFromUrl() {
75531 for (var language in WORDLISTS) {
75532 if (window.location.hash.indexOf(language) > -1) {
75533 return language;
75534 }
75535 }
75536 return "";
75537 }
75538
75539 function setMnemonicLanguage() {
75540 var language = getLanguage();
75541 // Load the bip39 mnemonic generator for this language if required
75542 if (!(language in mnemonics)) {
75543 mnemonics[language] = new Mnemonic(language);
75544 }
75545 mnemonic = mnemonics[language];
75546 }
75547
75548 function convertPhraseToNewLanguage() {
75549 var oldLanguage = getLanguageFromPhrase();
75550 var newLanguage = getLanguageFromUrl();
75551 var oldPhrase = DOM.phrase.val();
75552 var oldWords = phraseToWordArray(oldPhrase);
75553 var newWords = [];
75554 for (var i=0; i<oldWords.length; i++) {
75555 var oldWord = oldWords[i];
75556 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
75557 var newWord = WORDLISTS[newLanguage][index];
75558 newWords.push(newWord);
75559 }
75560 newPhrase = wordArrayToPhrase(newWords);
75561 return newPhrase;
75562 }
75563
75564 // TODO look at jsbip39 - mnemonic.splitWords
75565 function phraseToWordArray(phrase) {
75566 var words = phrase.split(/\s/g);
75567 var noBlanks = [];
75568 for (var i=0; i<words.length; i++) {
75569 var word = words[i];
75570 if (word.length > 0) {
75571 noBlanks.push(word);
75572 }
75573 }
75574 return noBlanks;
75575 }
75576
75577 // TODO look at jsbip39 - mnemonic.joinWords
75578 function wordArrayToPhrase(words) {
75579 var phrase = words.join(" ");
75580 var language = getLanguageFromPhrase(phrase);
75581 if (language == "japanese") {
75582 phrase = words.join("\u3000");
75583 }
75584 return phrase;
75585 }
75586
75587 function isUsingOwnEntropy() {
75588 return DOM.useEntropy.prop("checked");
75589 }
75590
75591 function setMnemonicFromEntropy() {
75592 clearEntropyFeedback();
75593 // Get entropy value
75594 var entropyStr = DOM.entropy.val();
75595 // Work out minimum base for entropy
75596 var entropy = Entropy.fromString(entropyStr);
75597 if (entropy.binaryStr.length == 0) {
75598 return;
75599 }
75600 // Show entropy details
75601 showEntropyFeedback(entropy);
75602 // Use entropy hash if not using raw entropy
75603 var bits = entropy.binaryStr;
75604 var mnemonicLength = DOM.entropyMnemonicLength.val();
75605 if (mnemonicLength != "raw") {
75606 // Get bits by hashing entropy with SHA256
75607 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
75608 var hex = sjcl.codec.hex.fromBits(hash);
75609 bits = BigInteger.parse(hex, 16).toString(2);
75610 while (bits.length % 256 != 0) {
75611 bits = "0" + bits;
75612 }
75613 // Truncate hash to suit number of words
75614 mnemonicLength = parseInt(mnemonicLength);
75615 var numberOfBits = 32 * mnemonicLength / 3;
75616 bits = bits.substring(0, numberOfBits);
75617 }
75618 // Discard trailing entropy
75619 var bitsToUse = Math.floor(bits.length / 32) * 32;
75620 var start = bits.length - bitsToUse;
75621 var binaryStr = bits.substring(start);
75622 // Convert entropy string to numeric array
75623 var entropyArr = [];
75624 for (var i=0; i<binaryStr.length / 8; i++) {
75625 var byteAsBits = binaryStr.substring(i*8, i*8+8);
75626 var entropyByte = parseInt(byteAsBits, 2);
75627 entropyArr.push(entropyByte)
75628 }
75629 // Convert entropy array to mnemonic
75630 var phrase = mnemonic.toMnemonic(entropyArr);
75631 // Set the mnemonic in the UI
75632 DOM.phrase.val(phrase);
75633 // Show the word indexes
75634 showWordIndexes();
75635 }
75636
75637 function clearEntropyFeedback() {
75638 DOM.entropyCrackTime.text("...");
75639 DOM.entropyType.text("");
75640 DOM.entropyWordCount.text("0");
75641 DOM.entropyEventCount.text("0");
75642 DOM.entropyBitsPerEvent.text("0");
75643 DOM.entropyBits.text("0");
75644 DOM.entropyFiltered.html("&nbsp;");
75645 DOM.entropyBinary.html("&nbsp;");
75646 }
75647
75648 function showEntropyFeedback(entropy) {
75649 var numberOfBits = entropy.binaryStr.length;
75650 var timeToCrack = "unknown";
75651 try {
75652 var z = zxcvbn(entropy.base.parts.join(""));
75653 timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second;
75654 if (z.feedback.warning != "") {
75655 timeToCrack = timeToCrack + " - " + z.feedback.warning;
75656 };
75657 }
75658 catch (e) {
75659 console.log("Error detecting entropy strength with zxcvbn:");
75660 console.log(e);
75661 }
75662 var entropyTypeStr = getEntropyTypeStr(entropy);
75663 var wordCount = Math.floor(numberOfBits / 32) * 3;
75664 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
75665 DOM.entropyFiltered.html(entropy.cleanHtml);
75666 DOM.entropyType.text(entropyTypeStr);
75667 DOM.entropyCrackTime.text(timeToCrack);
75668 DOM.entropyEventCount.text(entropy.base.ints.length);
75669 DOM.entropyBits.text(numberOfBits);
75670 DOM.entropyWordCount.text(wordCount);
75671 DOM.entropyBinary.text(entropy.binaryStr);
75672 DOM.entropyBitsPerEvent.text(bitsPerEvent);
75673 // detect and warn of filtering
75674 var rawNoSpaces = DOM.entropy.val().replace(/\s/g, "");
75675 var cleanNoSpaces = entropy.cleanStr.replace(/\s/g, "");
75676 var isFiltered = rawNoSpaces.length != cleanNoSpaces.length;
75677 if (isFiltered) {
75678 DOM.entropyFilterWarning.removeClass('hidden');
75679 }
75680 else {
75681 DOM.entropyFilterWarning.addClass('hidden');
75682 }
75683 }
75684
75685 function getEntropyTypeStr(entropy) {
75686 var typeStr = entropy.base.str;
75687 // Add some detail if these are cards
75688 if (entropy.base.asInt == 52) {
75689 var cardDetail = []; // array of message strings
75690 // Detect duplicates
75691 var dupes = [];
75692 var dupeTracker = {};
75693 for (var i=0; i<entropy.base.parts.length; i++) {
75694 var card = entropy.base.parts[i];
75695 var cardUpper = card.toUpperCase();
75696 if (cardUpper in dupeTracker) {
75697 dupes.push(card);
75698 }
75699 dupeTracker[cardUpper] = true;
75700 }
75701 if (dupes.length > 0) {
75702 var dupeWord = "duplicates";
75703 if (dupes.length == 1) {
75704 dupeWord = "duplicate";
75705 }
75706 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
75707 if (dupes.length > 3) {
75708 msg += "...";
75709 }
75710 cardDetail.push(msg);
75711 }
75712 // Detect full deck
75713 var uniqueCards = [];
75714 for (var uniqueCard in dupeTracker) {
75715 uniqueCards.push(uniqueCard);
75716 }
75717 if (uniqueCards.length == 52) {
75718 cardDetail.unshift("full deck");
75719 }
75720 // Detect missing cards
75721 var values = "A23456789TJQK";
75722 var suits = "CDHS";
75723 var missingCards = [];
75724 for (var i=0; i<suits.length; i++) {
75725 for (var j=0; j<values.length; j++) {
75726 var card = values[j] + suits[i];
75727 if (!(card in dupeTracker)) {
75728 missingCards.push(card);
75729 }
75730 }
75731 }
75732 // Display missing cards if six or less, ie clearly going for full deck
75733 if (missingCards.length > 0 && missingCards.length <= 6) {
75734 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
75735 if (missingCards.length > 3) {
75736 msg += "...";
75737 }
75738 cardDetail.push(msg);
75739 }
75740 // Add card details to typeStr
75741 if (cardDetail.length > 0) {
75742 typeStr += " (" + cardDetail.join(", ") + ")";
75743 }
75744 }
75745 return typeStr;
75746 }
75747
75748 function setQrEvents(els) {
75749 els.on("mouseenter", createQr);
75750 els.on("mouseleave", destroyQr);
75751 els.on("click", toggleQr);
75752 }
75753
75754 function createQr(e) {
75755 var content = e.target.textContent || e.target.value;
75756 if (content) {
75757 var qrEl = kjua({
75758 text: content,
75759 render: "canvas",
75760 size: 310,
75761 ecLevel: 'H',
75762 });
75763 DOM.qrImage.append(qrEl);
75764 if (!showQr) {
75765 DOM.qrHider.addClass("hidden");
75766 }
75767 else {
75768 DOM.qrHider.removeClass("hidden");
75769 }
75770 DOM.qrContainer.removeClass("hidden");
75771 }
75772 }
75773
75774 function destroyQr() {
75775 DOM.qrImage.text("");
75776 DOM.qrContainer.addClass("hidden");
75777 }
75778
75779 function toggleQr() {
75780 showQr = !showQr;
75781 DOM.qrHider.toggleClass("hidden");
75782 DOM.qrHint.toggleClass("hidden");
75783 }
75784
75785 function bip44TabSelected() {
75786 return DOM.bip44tab.hasClass("active");
75787 }
75788
75789 function bip32TabSelected() {
75790 return DOM.bip32tab.hasClass("active");
75791 }
75792
75793 function networkHasSegwit() {
75794 return networks[DOM.network.val()].segwitAvailable;
75795 }
75796
75797 function bip49TabSelected() {
75798 return DOM.bip49tab.hasClass("active");
75799 }
75800
75801 function bip141TabSelected() {
75802 return DOM.bip141tab.hasClass("active");
75803 }
75804
75805 function setHdCoin(coinValue) {
75806 DOM.bip44coin.val(coinValue);
75807 DOM.bip49coin.val(coinValue);
75808 }
75809
75810 function showSegwitAvailable() {
75811 DOM.bip49unavailable.addClass("hidden");
75812 DOM.bip49available.removeClass("hidden");
75813 DOM.bip141unavailable.addClass("hidden");
75814 DOM.bip141available.removeClass("hidden");
75815 }
75816
75817 function showSegwitUnavailable() {
75818 DOM.bip49available.addClass("hidden");
75819 DOM.bip49unavailable.removeClass("hidden");
75820 DOM.bip141available.addClass("hidden");
75821 DOM.bip141unavailable.removeClass("hidden");
75822 }
75823
75824 function useBitpayAddresses() {
75825 return !(DOM.useBitpayAddresses.prop("checked"));
75826 }
75827
75828 function setBitcoinCashNetworkValues() {
75829 if (useBitpayAddresses()) {
75830 network = bitcoinjs.bitcoin.networks.bitcoin;
75831 }
75832 else {
75833 network = bitcoinjs.bitcoin.networks.bitcoinCashBitbpay;
75834 }
75835 }
75836
75837 function adjustNetworkForSegwit() {
75838 // If segwit is selected the xpub/xprv prefixes need to be adjusted
75839 // to avoid accidentally importing BIP49 xpub to BIP44 watch only
75840 // wallet.
75841 // See https://github.com/iancoleman/bip39/issues/125
75842 var segwitNetworks = null;
75843 // if a segwit network is alread selected, need to use base network to
75844 // look up new parameters
75845 if ("baseNetwork" in network) {
75846 network = bitcoinjs.bitcoin.networks[network.baseNetwork];
75847 }
75848 // choose the right segwit params
75849 if (p2wpkhSelected() && "p2wpkh" in network) {
75850 network = network.p2wpkh;
75851 }
75852 else if (p2wpkhInP2shSelected() && "p2wpkhInP2sh" in network) {
75853 network = network.p2wpkhInP2sh;
75854 }
75855 }
75856
75857 function lastIndexInTable() {
75858 var pathText = DOM.addresses.find(".index").last().text();
75859 var pathBits = pathText.split("/");
75860 var lastBit = pathBits[pathBits.length-1];
75861 var lastBitClean = lastBit.replace("'", "");
75862 return parseInt(lastBitClean);
75863 }
75864
75865 function uint8ArrayToHex(a) {
75866 var s = ""
75867 for (var i=0; i<a.length; i++) {
75868 var h = a[i].toString(16);
75869 while (h.length < 2) {
75870 h = "0" + h;
75871 }
75872 s = s + h;
75873 }
75874 return s;
75875 }
75876
75877 function showWordIndexes() {
75878 var phrase = DOM.phrase.val();
75879 var words = phraseToWordArray(phrase);
75880 var wordIndexes = [];
75881 var language = getLanguage();
75882 for (var i=0; i<words.length; i++) {
75883 var word = words[i];
75884 var wordIndex = WORDLISTS[language].indexOf(word);
75885 wordIndexes.push(wordIndex);
75886 }
75887 var wordIndexesStr = wordIndexes.join(", ");
75888 DOM.entropyWordIndexes.text(wordIndexesStr);
75889 }
75890
75891 var networks = [
75892 {
75893 name: "BCH - Bitcoin Cash",
75894 segwitAvailable: false,
75895 onSelect: function() {
75896 DOM.useBitpayAddressesContainer.removeClass("hidden");
75897 setBitcoinCashNetworkValues();
75898 setHdCoin(145);
75899 },
75900 },
75901 {
75902 name: "BTC - Bitcoin",
75903 segwitAvailable: true,
75904 onSelect: function() {
75905 network = bitcoinjs.bitcoin.networks.bitcoin;
75906 setHdCoin(0);
75907 },
75908 },
75909 {
75910 name: "BTC - Bitcoin Testnet",
75911 segwitAvailable: true,
75912 onSelect: function() {
75913 network = bitcoinjs.bitcoin.networks.testnet;
75914 setHdCoin(1);
75915 },
75916 },
75917 {
75918 name: "BTG - Bitcoin Gold",
75919 segwitAvailable: true,
75920 onSelect: function() {
75921 network = bitcoinjs.bitcoin.networks.bgold;
75922 setHdCoin(0);
75923 },
75924 },
75925 {
75926 name: "CLAM - Clams",
75927 segwitAvailable: false,
75928 onSelect: function() {
75929 network = bitcoinjs.bitcoin.networks.clam;
75930 setHdCoin(23);
75931 },
75932 },
75933 {
75934 name: "CRW - Crown",
75935 segwitAvailable: false,
75936 onSelect: function() {
75937 network = bitcoinjs.bitcoin.networks.crown;
75938 setHdCoin(72);
75939 },
75940 },
75941 {
75942 name: "DASH - Dash",
75943 segwitAvailable: false,
75944 onSelect: function() {
75945 network = bitcoinjs.bitcoin.networks.dash;
75946 setHdCoin(5);
75947 },
75948 },
75949 {
75950 name: "DASH - Dash Testnet",
75951 segwitAvailable: false,
75952 onSelect: function() {
75953 network = bitcoinjs.bitcoin.networks.dashtn;
75954 setHdCoin(1);
75955 },
75956 },
75957 {
75958 name: "DOGE - Dogecoin",
75959 segwitAvailable: false,
75960 onSelect: function() {
75961 network = bitcoinjs.bitcoin.networks.dogecoin;
75962 setHdCoin(3);
75963 },
75964 },
75965 {
75966 name: "ETH - Ethereum",
75967 segwitAvailable: false,
75968 onSelect: function() {
75969 network = bitcoinjs.bitcoin.networks.bitcoin;
75970 setHdCoin(60);
75971 },
75972 },
75973 {
75974 name: "FJC - Fujicoin",
75975 segwitAvailable: false,
75976 onSelect: function() {
75977 network = bitcoinjs.bitcoin.networks.fujicoin;
75978 setHdCoin(75);
75979 },
75980 },
75981 {
75982 name: "GAME - GameCredits",
75983 segwitAvailable: false,
75984 onSelect: function() {
75985 network = bitcoinjs.bitcoin.networks.game;
75986 setHdCoin(101);
75987 },
75988 },
75989 {
75990 name: "JBS - Jumbucks",
75991 segwitAvailable: false,
75992 onSelect: function() {
75993 network = bitcoinjs.bitcoin.networks.jumbucks;
75994 setHdCoin(26);
75995 },
75996 },
75997 {
75998 name: "LTC - Litecoin",
75999 segwitAvailable: true,
76000 onSelect: function() {
76001 network = bitcoinjs.bitcoin.networks.litecoin;
76002 setHdCoin(2);
76003 DOM.litecoinLtubContainer.removeClass("hidden");
76004 },
76005 },
76006 {
76007 name: "MAZA - Maza",
76008 segwitAvailable: false,
76009 onSelect: function() {
76010 network = bitcoinjs.bitcoin.networks.maza;
76011 setHdCoin(13);
76012 },
76013 },
76014 {
76015 name: "MONA - Monacoin",
76016 segwitAvailable: true,
76017 onSelect: function() {
76018 network = bitcoinjs.bitcoin.networks.monacoin,
76019 setHdCoin(22);
76020 },
76021 },
76022 {
76023 name: "NMC - Namecoin",
76024 segwitAvailable: false,
76025 onSelect: function() {
76026 network = bitcoinjs.bitcoin.networks.namecoin;
76027 setHdCoin(7);
76028 },
76029 },
76030 {
76031 name: "PIVX - PIVX",
76032 segwitAvailable: false,
76033 onSelect: function() {
76034 network = bitcoinjs.bitcoin.networks.pivx;
76035 setHdCoin(119);
76036 },
76037 },
76038 {
76039 name: "PIVX - PIVX Testnet",
76040 segwitAvailable: false,
76041 onSelect: function() {
76042 network = bitcoinjs.bitcoin.networks.pivxtestnet;
76043 setHdCoin(1);
76044 },
76045 },
76046 {
76047 name: "PPC - Peercoin",
76048 segwitAvailable: false,
76049 onSelect: function() {
76050 network = bitcoinjs.bitcoin.networks.peercoin;
76051 setHdCoin(6);
76052 },
76053 },
76054 {
76055 name: "SDC - ShadowCash",
76056 segwitAvailable: false,
76057 onSelect: function() {
76058 network = bitcoinjs.bitcoin.networks.shadow;
76059 setHdCoin(35);
76060 },
76061 },
76062 {
76063 name: "SDC - ShadowCash Testnet",
76064 segwitAvailable: false,
76065 onSelect: function() {
76066 network = bitcoinjs.bitcoin.networks.shadowtn;
76067 setHdCoin(1);
76068 },
76069 },
76070 {
76071 name: "SLM - Slimcoin",
76072 segwitAvailable: false,
76073 onSelect: function() {
76074 network = bitcoinjs.bitcoin.networks.slimcoin;
76075 setHdCoin(63);
76076 },
76077 },
76078 {
76079 name: "SLM - Slimcoin Testnet",
76080 segwitAvailable: false,
76081 onSelect: function() {
76082 network = bitcoinjs.bitcoin.networks.slimcointn;
76083 setHdCoin(111);
76084 },
76085 },
76086 {
76087 name: "USNBT - NuBits",
76088 segwitAvailable: false,
76089 onSelect: function() {
76090 network = bitcoinjs.bitcoin.networks.nubits;
76091 setHdCoin(12);
76092 },
76093 },
76094 {
76095 name: "VIA - Viacoin",
76096 segwitAvailable: false,
76097 onSelect: function() {
76098 network = bitcoinjs.bitcoin.networks.viacoin;
76099 setHdCoin(14);
76100 },
76101 },
76102 {
76103 name: "VIA - Viacoin Testnet",
76104 segwitAvailable: false,
76105 onSelect: function() {
76106 network = bitcoinjs.bitcoin.networks.viacointestnet;
76107 setHdCoin(1);
76108 },
76109 },
76110 {
76111 name: "XMY - Myriadcoin",
76112 segwitAvailable: false,
76113 onSelect: function() {
76114 network = bitcoinjs.bitcoin.networks.myriadcoin;
76115 setHdCoin(90);
76116 },
76117 },
76118 {
76119 name: "XRP - Ripple",
76120 segwitAvailable: false,
76121 onSelect: function() {
76122 network = bitcoinjs.bitcoin.networks.bitcoin;
76123 setHdCoin(144);
76124 },
76125 }
76126 ]
76127
76128 var clients = [
76129 {
76130 name: "Bitcoin Core",
76131 onSelect: function() {
76132 DOM.bip32path.val("m/0'/0'");
76133 DOM.hardenedAddresses.prop('checked', true);
76134 },
76135 },
76136 {
76137 name: "blockchain.info",
76138 onSelect: function() {
76139 DOM.bip32path.val("m/44'/0'/0'");
76140 DOM.hardenedAddresses.prop('checked', false);
76141 },
76142 },
76143 {
76144 name: "MultiBit HD",
76145 onSelect: function() {
76146 DOM.bip32path.val("m/0'/0");
76147 DOM.hardenedAddresses.prop('checked', false);
76148 },
76149 }
76150 ]
76151
76152 init();
76153
76154 })();
76155 </script>
76156 </body>
76157 </html>