mirror of
https://github.com/monero-project/monero-site.git
synced 2025-02-09 01:23:44 +02:00
11711 lines
845 KiB
HTML
11711 lines
845 KiB
HTML
![]() |
<html>
|
||
|
<head>
|
||
|
<title>Monero offline wallet generator</title>
|
||
|
<meta charset="UTF-8">
|
||
|
|
||
|
<!--
|
||
|
|
||
|
/*
|
||
|
JavaScript BigInteger library version 0.9
|
||
|
http://silentmatt.com/biginteger/
|
||
|
|
||
|
Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
|
||
|
Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
|
||
|
Licensed under the MIT license.
|
||
|
|
||
|
Support for arbitrary internal representation base was added by
|
||
|
Vitaly Magerya.
|
||
|
*/
|
||
|
|
||
|
// Copyright (c) 2014-2015, MyMonero.com
|
||
|
//
|
||
|
// All rights reserved.
|
||
|
//
|
||
|
// Redistribution and use in source and binary forms, with or without modification, are
|
||
|
// permitted provided that the following conditions are met:
|
||
|
//
|
||
|
// 1. Redistributions of source code must retain the above copyright notice, this list of
|
||
|
// conditions and the following disclaimer.
|
||
|
//
|
||
|
// 2. 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.
|
||
|
//
|
||
|
// 3. Neither the name of the copyright holder nor the names of its contributors may be
|
||
|
// used to endorse or promote products derived from this software without specific
|
||
|
// prior written permission.
|
||
|
//
|
||
|
// 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.
|
||
|
|
||
|
// Original Author: Lucas Jones
|
||
|
|
||
|
/*!
|
||
|
* Waves v0.6.0
|
||
|
* http://fian.my.id/Waves
|
||
|
*
|
||
|
* Copyright 2014 Alfiana E. Sibuea and other contributors
|
||
|
* Released under the MIT license
|
||
|
* https://github.com/fians/Waves/blob/master/LICENSE
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
@license
|
||
|
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
|
||
|
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
|
||
|
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
|
||
|
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
|
||
|
Code distributed by Google as part of the polymer project is also
|
||
|
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
|
||
|
*/
|
||
|
|
||
|
//---------------------------------------------------------------------
|
||
|
// QRCode for JavaScript
|
||
|
//
|
||
|
// Copyright (c) 2009 Kazuhiko Arase
|
||
|
//
|
||
|
// URL: http://www.d-project.com/
|
||
|
//
|
||
|
// Licensed under the MIT license:
|
||
|
// http://www.opensource.org/licenses/mit-license.php
|
||
|
//
|
||
|
// The word "QR Code" is registered trademark of
|
||
|
// DENSO WAVE INCORPORATED
|
||
|
// http://www.denso-wave.com/qrcode/faqpatent-e.html
|
||
|
//
|
||
|
//---------------------------------------------------------------------
|
||
|
|
||
|
/*
|
||
|
* js-sha3 v0.5.1
|
||
|
* https://github.com/emn178/js-sha3
|
||
|
*
|
||
|
* Copyright 2015, emn178@gmail.com
|
||
|
*
|
||
|
* Licensed under the MIT license:
|
||
|
* http://www.opensource.org/licenses/MIT
|
||
|
*/
|
||
|
|
||
|
/* Wallet generator modifications: Copyright 2015 moneromooo */
|
||
|
|
||
|
-->
|
||
|
<style type="text/css">
|
||
|
html {
|
||
|
line-height: 1.3;
|
||
|
}
|
||
|
|
||
|
.private {
|
||
|
background-color: #FF8080
|
||
|
}
|
||
|
|
||
|
.public {
|
||
|
background-color: #80FF80
|
||
|
}
|
||
|
|
||
|
.card {
|
||
|
margin: 0.5rem 0px 0.5rem !important;
|
||
|
}
|
||
|
|
||
|
.card .card-content {
|
||
|
padding: 10px !important;
|
||
|
}
|
||
|
|
||
|
.row {
|
||
|
margin-bottom: 10px !important;
|
||
|
}
|
||
|
|
||
|
pre { margin:0px;}
|
||
|
</style>
|
||
|
<style>
|
||
|
.materialize-red.lighten-5 {
|
||
|
background-color: #fdeaeb !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red-text.text-lighten-5 {
|
||
|
color: #fdeaeb !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red.lighten-4 {
|
||
|
background-color: #f8c1c3 !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red-text.text-lighten-4 {
|
||
|
color: #f8c1c3 !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red.lighten-3 {
|
||
|
background-color: #f3989b !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red-text.text-lighten-3 {
|
||
|
color: #f3989b !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red.lighten-2 {
|
||
|
background-color: #ee6e73 !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red-text.text-lighten-2 {
|
||
|
color: #ee6e73 !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red.lighten-1 {
|
||
|
background-color: #ea454b !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red-text.text-lighten-1 {
|
||
|
color: #ea454b !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red {
|
||
|
background-color: #e51c23 !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red-text {
|
||
|
color: #e51c23 !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red.darken-1 {
|
||
|
background-color: #d0181e !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red-text.text-darken-1 {
|
||
|
color: #d0181e !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red.darken-2 {
|
||
|
background-color: #b9151b !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red-text.text-darken-2 {
|
||
|
color: #b9151b !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red.darken-3 {
|
||
|
background-color: #a21318 !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red-text.text-darken-3 {
|
||
|
color: #a21318 !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red.darken-4 {
|
||
|
background-color: #8b1014 !important;
|
||
|
}
|
||
|
|
||
|
.materialize-red-text.text-darken-4 {
|
||
|
color: #8b1014 !important;
|
||
|
}
|
||
|
|
||
|
.red.lighten-5 {
|
||
|
background-color: #FFEBEE !important;
|
||
|
}
|
||
|
|
||
|
.red-text.text-lighten-5 {
|
||
|
color: #FFEBEE !important;
|
||
|
}
|
||
|
|
||
|
.red.lighten-4 {
|
||
|
background-color: #FFCDD2 !important;
|
||
|
}
|
||
|
|
||
|
.red-text.text-lighten-4 {
|
||
|
color: #FFCDD2 !important;
|
||
|
}
|
||
|
|
||
|
.red.lighten-3 {
|
||
|
background-color: #EF9A9A !important;
|
||
|
}
|
||
|
|
||
|
.red-text.text-lighten-3 {
|
||
|
color: #EF9A9A !important;
|
||
|
}
|
||
|
|
||
|
.red.lighten-2 {
|
||
|
background-color: #E57373 !important;
|
||
|
}
|
||
|
|
||
|
.red-text.text-lighten-2 {
|
||
|
color: #E57373 !important;
|
||
|
}
|
||
|
|
||
|
.red.lighten-1 {
|
||
|
background-color: #EF5350 !important;
|
||
|
}
|
||
|
|
||
|
.red-text.text-lighten-1 {
|
||
|
color: #EF5350 !important;
|
||
|
}
|
||
|
|
||
|
.red {
|
||
|
background-color: #F44336 !important;
|
||
|
}
|
||
|
|
||
|
.red-text {
|
||
|
color: #F44336 !important;
|
||
|
}
|
||
|
|
||
|
.red.darken-1 {
|
||
|
background-color: #E53935 !important;
|
||
|
}
|
||
|
|
||
|
.red-text.text-darken-1 {
|
||
|
color: #E53935 !important;
|
||
|
}
|
||
|
|
||
|
.red.darken-2 {
|
||
|
background-color: #D32F2F !important;
|
||
|
}
|
||
|
|
||
|
.red-text.text-darken-2 {
|
||
|
color: #D32F2F !important;
|
||
|
}
|
||
|
|
||
|
.red.darken-3 {
|
||
|
background-color: #C62828 !important;
|
||
|
}
|
||
|
|
||
|
.red-text.text-darken-3 {
|
||
|
color: #C62828 !important;
|
||
|
}
|
||
|
|
||
|
.red.darken-4 {
|
||
|
background-color: #B71C1C !important;
|
||
|
}
|
||
|
|
||
|
.red-text.text-darken-4 {
|
||
|
color: #B71C1C !important;
|
||
|
}
|
||
|
|
||
|
.red.accent-1 {
|
||
|
background-color: #FF8A80 !important;
|
||
|
}
|
||
|
|
||
|
.red-text.text-accent-1 {
|
||
|
color: #FF8A80 !important;
|
||
|
}
|
||
|
|
||
|
.red.accent-2 {
|
||
|
background-color: #FF5252 !important;
|
||
|
}
|
||
|
|
||
|
.red-text.text-accent-2 {
|
||
|
color: #FF5252 !important;
|
||
|
}
|
||
|
|
||
|
.red.accent-3 {
|
||
|
background-color: #FF1744 !important;
|
||
|
}
|
||
|
|
||
|
.red-text.text-accent-3 {
|
||
|
color: #FF1744 !important;
|
||
|
}
|
||
|
|
||
|
.red.accent-4 {
|
||
|
background-color: #D50000 !important;
|
||
|
}
|
||
|
|
||
|
.red-text.text-accent-4 {
|
||
|
color: #D50000 !important;
|
||
|
}
|
||
|
|
||
|
.pink.lighten-5 {
|
||
|
background-color: #fce4ec !important;
|
||
|
}
|
||
|
|
||
|
.pink-text.text-lighten-5 {
|
||
|
color: #fce4ec !important;
|
||
|
}
|
||
|
|
||
|
.pink.lighten-4 {
|
||
|
background-color: #f8bbd0 !important;
|
||
|
}
|
||
|
|
||
|
.pink-text.text-lighten-4 {
|
||
|
color: #f8bbd0 !important;
|
||
|
}
|
||
|
|
||
|
.pink.lighten-3 {
|
||
|
background-color: #f48fb1 !important;
|
||
|
}
|
||
|
|
||
|
.pink-text.text-lighten-3 {
|
||
|
color: #f48fb1 !important;
|
||
|
}
|
||
|
|
||
|
.pink.lighten-2 {
|
||
|
background-color: #f06292 !important;
|
||
|
}
|
||
|
|
||
|
.pink-text.text-lighten-2 {
|
||
|
color: #f06292 !important;
|
||
|
}
|
||
|
|
||
|
.pink.lighten-1 {
|
||
|
background-color: #ec407a !important;
|
||
|
}
|
||
|
|
||
|
.pink-text.text-lighten-1 {
|
||
|
color: #ec407a !important;
|
||
|
}
|
||
|
|
||
|
.pink {
|
||
|
background-color: #e91e63 !important;
|
||
|
}
|
||
|
|
||
|
.pink-text {
|
||
|
color: #e91e63 !important;
|
||
|
}
|
||
|
|
||
|
.pink.darken-1 {
|
||
|
background-color: #d81b60 !important;
|
||
|
}
|
||
|
|
||
|
.pink-text.text-darken-1 {
|
||
|
color: #d81b60 !important;
|
||
|
}
|
||
|
|
||
|
.pink.darken-2 {
|
||
|
background-color: #c2185b !important;
|
||
|
}
|
||
|
|
||
|
.pink-text.text-darken-2 {
|
||
|
color: #c2185b !important;
|
||
|
}
|
||
|
|
||
|
.pink.darken-3 {
|
||
|
background-color: #ad1457 !important;
|
||
|
}
|
||
|
|
||
|
.pink-text.text-darken-3 {
|
||
|
color: #ad1457 !important;
|
||
|
}
|
||
|
|
||
|
.pink.darken-4 {
|
||
|
background-color: #880e4f !important;
|
||
|
}
|
||
|
|
||
|
.pink-text.text-darken-4 {
|
||
|
color: #880e4f !important;
|
||
|
}
|
||
|
|
||
|
.pink.accent-1 {
|
||
|
background-color: #ff80ab !important;
|
||
|
}
|
||
|
|
||
|
.pink-text.text-accent-1 {
|
||
|
color: #ff80ab !important;
|
||
|
}
|
||
|
|
||
|
.pink.accent-2 {
|
||
|
background-color: #ff4081 !important;
|
||
|
}
|
||
|
|
||
|
.pink-text.text-accent-2 {
|
||
|
color: #ff4081 !important;
|
||
|
}
|
||
|
|
||
|
.pink.accent-3 {
|
||
|
background-color: #f50057 !important;
|
||
|
}
|
||
|
|
||
|
.pink-text.text-accent-3 {
|
||
|
color: #f50057 !important;
|
||
|
}
|
||
|
|
||
|
.pink.accent-4 {
|
||
|
background-color: #c51162 !important;
|
||
|
}
|
||
|
|
||
|
.pink-text.text-accent-4 {
|
||
|
color: #c51162 !important;
|
||
|
}
|
||
|
|
||
|
.purple.lighten-5 {
|
||
|
background-color: #f3e5f5 !important;
|
||
|
}
|
||
|
|
||
|
.purple-text.text-lighten-5 {
|
||
|
color: #f3e5f5 !important;
|
||
|
}
|
||
|
|
||
|
.purple.lighten-4 {
|
||
|
background-color: #e1bee7 !important;
|
||
|
}
|
||
|
|
||
|
.purple-text.text-lighten-4 {
|
||
|
color: #e1bee7 !important;
|
||
|
}
|
||
|
|
||
|
.purple.lighten-3 {
|
||
|
background-color: #ce93d8 !important;
|
||
|
}
|
||
|
|
||
|
.purple-text.text-lighten-3 {
|
||
|
color: #ce93d8 !important;
|
||
|
}
|
||
|
|
||
|
.purple.lighten-2 {
|
||
|
background-color: #ba68c8 !important;
|
||
|
}
|
||
|
|
||
|
.purple-text.text-lighten-2 {
|
||
|
color: #ba68c8 !important;
|
||
|
}
|
||
|
|
||
|
.purple.lighten-1 {
|
||
|
background-color: #ab47bc !important;
|
||
|
}
|
||
|
|
||
|
.purple-text.text-lighten-1 {
|
||
|
color: #ab47bc !important;
|
||
|
}
|
||
|
|
||
|
.purple {
|
||
|
background-color: #9c27b0 !important;
|
||
|
}
|
||
|
|
||
|
.purple-text {
|
||
|
color: #9c27b0 !important;
|
||
|
}
|
||
|
|
||
|
.purple.darken-1 {
|
||
|
background-color: #8e24aa !important;
|
||
|
}
|
||
|
|
||
|
.purple-text.text-darken-1 {
|
||
|
color: #8e24aa !important;
|
||
|
}
|
||
|
|
||
|
.purple.darken-2 {
|
||
|
background-color: #7b1fa2 !important;
|
||
|
}
|
||
|
|
||
|
.purple-text.text-darken-2 {
|
||
|
color: #7b1fa2 !important;
|
||
|
}
|
||
|
|
||
|
.purple.darken-3 {
|
||
|
background-color: #6a1b9a !important;
|
||
|
}
|
||
|
|
||
|
.purple-text.text-darken-3 {
|
||
|
color: #6a1b9a !important;
|
||
|
}
|
||
|
|
||
|
.purple.darken-4 {
|
||
|
background-color: #4a148c !important;
|
||
|
}
|
||
|
|
||
|
.purple-text.text-darken-4 {
|
||
|
color: #4a148c !important;
|
||
|
}
|
||
|
|
||
|
.purple.accent-1 {
|
||
|
background-color: #ea80fc !important;
|
||
|
}
|
||
|
|
||
|
.purple-text.text-accent-1 {
|
||
|
color: #ea80fc !important;
|
||
|
}
|
||
|
|
||
|
.purple.accent-2 {
|
||
|
background-color: #e040fb !important;
|
||
|
}
|
||
|
|
||
|
.purple-text.text-accent-2 {
|
||
|
color: #e040fb !important;
|
||
|
}
|
||
|
|
||
|
.purple.accent-3 {
|
||
|
background-color: #d500f9 !important;
|
||
|
}
|
||
|
|
||
|
.purple-text.text-accent-3 {
|
||
|
color: #d500f9 !important;
|
||
|
}
|
||
|
|
||
|
.purple.accent-4 {
|
||
|
background-color: #aa00ff !important;
|
||
|
}
|
||
|
|
||
|
.purple-text.text-accent-4 {
|
||
|
color: #aa00ff !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple.lighten-5 {
|
||
|
background-color: #ede7f6 !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple-text.text-lighten-5 {
|
||
|
color: #ede7f6 !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple.lighten-4 {
|
||
|
background-color: #d1c4e9 !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple-text.text-lighten-4 {
|
||
|
color: #d1c4e9 !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple.lighten-3 {
|
||
|
background-color: #b39ddb !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple-text.text-lighten-3 {
|
||
|
color: #b39ddb !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple.lighten-2 {
|
||
|
background-color: #9575cd !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple-text.text-lighten-2 {
|
||
|
color: #9575cd !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple.lighten-1 {
|
||
|
background-color: #7e57c2 !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple-text.text-lighten-1 {
|
||
|
color: #7e57c2 !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple {
|
||
|
background-color: #673ab7 !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple-text {
|
||
|
color: #673ab7 !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple.darken-1 {
|
||
|
background-color: #5e35b1 !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple-text.text-darken-1 {
|
||
|
color: #5e35b1 !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple.darken-2 {
|
||
|
background-color: #512da8 !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple-text.text-darken-2 {
|
||
|
color: #512da8 !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple.darken-3 {
|
||
|
background-color: #4527a0 !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple-text.text-darken-3 {
|
||
|
color: #4527a0 !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple.darken-4 {
|
||
|
background-color: #311b92 !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple-text.text-darken-4 {
|
||
|
color: #311b92 !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple.accent-1 {
|
||
|
background-color: #b388ff !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple-text.text-accent-1 {
|
||
|
color: #b388ff !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple.accent-2 {
|
||
|
background-color: #7c4dff !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple-text.text-accent-2 {
|
||
|
color: #7c4dff !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple.accent-3 {
|
||
|
background-color: #651fff !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple-text.text-accent-3 {
|
||
|
color: #651fff !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple.accent-4 {
|
||
|
background-color: #6200ea !important;
|
||
|
}
|
||
|
|
||
|
.deep-purple-text.text-accent-4 {
|
||
|
color: #6200ea !important;
|
||
|
}
|
||
|
|
||
|
.indigo.lighten-5 {
|
||
|
background-color: #e8eaf6 !important;
|
||
|
}
|
||
|
|
||
|
.indigo-text.text-lighten-5 {
|
||
|
color: #e8eaf6 !important;
|
||
|
}
|
||
|
|
||
|
.indigo.lighten-4 {
|
||
|
background-color: #c5cae9 !important;
|
||
|
}
|
||
|
|
||
|
.indigo-text.text-lighten-4 {
|
||
|
color: #c5cae9 !important;
|
||
|
}
|
||
|
|
||
|
.indigo.lighten-3 {
|
||
|
background-color: #9fa8da !important;
|
||
|
}
|
||
|
|
||
|
.indigo-text.text-lighten-3 {
|
||
|
color: #9fa8da !important;
|
||
|
}
|
||
|
|
||
|
.indigo.lighten-2 {
|
||
|
background-color: #7986cb !important;
|
||
|
}
|
||
|
|
||
|
.indigo-text.text-lighten-2 {
|
||
|
color: #7986cb !important;
|
||
|
}
|
||
|
|
||
|
.indigo.lighten-1 {
|
||
|
background-color: #5c6bc0 !important;
|
||
|
}
|
||
|
|
||
|
.indigo-text.text-lighten-1 {
|
||
|
color: #5c6bc0 !important;
|
||
|
}
|
||
|
|
||
|
.indigo {
|
||
|
background-color: #3f51b5 !important;
|
||
|
}
|
||
|
|
||
|
.indigo-text {
|
||
|
color: #3f51b5 !important;
|
||
|
}
|
||
|
|
||
|
.indigo.darken-1 {
|
||
|
background-color: #3949ab !important;
|
||
|
}
|
||
|
|
||
|
.indigo-text.text-darken-1 {
|
||
|
color: #3949ab !important;
|
||
|
}
|
||
|
|
||
|
.indigo.darken-2 {
|
||
|
background-color: #303f9f !important;
|
||
|
}
|
||
|
|
||
|
.indigo-text.text-darken-2 {
|
||
|
color: #303f9f !important;
|
||
|
}
|
||
|
|
||
|
.indigo.darken-3 {
|
||
|
background-color: #283593 !important;
|
||
|
}
|
||
|
|
||
|
.indigo-text.text-darken-3 {
|
||
|
color: #283593 !important;
|
||
|
}
|
||
|
|
||
|
.indigo.darken-4 {
|
||
|
background-color: #1a237e !important;
|
||
|
}
|
||
|
|
||
|
.indigo-text.text-darken-4 {
|
||
|
color: #1a237e !important;
|
||
|
}
|
||
|
|
||
|
.indigo.accent-1 {
|
||
|
background-color: #8c9eff !important;
|
||
|
}
|
||
|
|
||
|
.indigo-text.text-accent-1 {
|
||
|
color: #8c9eff !important;
|
||
|
}
|
||
|
|
||
|
.indigo.accent-2 {
|
||
|
background-color: #536dfe !important;
|
||
|
}
|
||
|
|
||
|
.indigo-text.text-accent-2 {
|
||
|
color: #536dfe !important;
|
||
|
}
|
||
|
|
||
|
.indigo.accent-3 {
|
||
|
background-color: #3d5afe !important;
|
||
|
}
|
||
|
|
||
|
.indigo-text.text-accent-3 {
|
||
|
color: #3d5afe !important;
|
||
|
}
|
||
|
|
||
|
.indigo.accent-4 {
|
||
|
background-color: #304ffe !important;
|
||
|
}
|
||
|
|
||
|
.indigo-text.text-accent-4 {
|
||
|
color: #304ffe !important;
|
||
|
}
|
||
|
|
||
|
.blue.lighten-5 {
|
||
|
background-color: #E3F2FD !important;
|
||
|
}
|
||
|
|
||
|
.blue-text.text-lighten-5 {
|
||
|
color: #E3F2FD !important;
|
||
|
}
|
||
|
|
||
|
.blue.lighten-4 {
|
||
|
background-color: #BBDEFB !important;
|
||
|
}
|
||
|
|
||
|
.blue-text.text-lighten-4 {
|
||
|
color: #BBDEFB !important;
|
||
|
}
|
||
|
|
||
|
.blue.lighten-3 {
|
||
|
background-color: #90CAF9 !important;
|
||
|
}
|
||
|
|
||
|
.blue-text.text-lighten-3 {
|
||
|
color: #90CAF9 !important;
|
||
|
}
|
||
|
|
||
|
.blue.lighten-2 {
|
||
|
background-color: #64B5F6 !important;
|
||
|
}
|
||
|
|
||
|
.blue-text.text-lighten-2 {
|
||
|
color: #64B5F6 !important;
|
||
|
}
|
||
|
|
||
|
.blue.lighten-1 {
|
||
|
background-color: #42A5F5 !important;
|
||
|
}
|
||
|
|
||
|
.blue-text.text-lighten-1 {
|
||
|
color: #42A5F5 !important;
|
||
|
}
|
||
|
|
||
|
.blue {
|
||
|
background-color: #2196F3 !important;
|
||
|
}
|
||
|
|
||
|
.blue-text {
|
||
|
color: #2196F3 !important;
|
||
|
}
|
||
|
|
||
|
.blue.darken-1 {
|
||
|
background-color: #1E88E5 !important;
|
||
|
}
|
||
|
|
||
|
.blue-text.text-darken-1 {
|
||
|
color: #1E88E5 !important;
|
||
|
}
|
||
|
|
||
|
.blue.darken-2 {
|
||
|
background-color: #1976D2 !important;
|
||
|
}
|
||
|
|
||
|
.blue-text.text-darken-2 {
|
||
|
color: #1976D2 !important;
|
||
|
}
|
||
|
|
||
|
.blue.darken-3 {
|
||
|
background-color: #1565C0 !important;
|
||
|
}
|
||
|
|
||
|
.blue-text.text-darken-3 {
|
||
|
color: #1565C0 !important;
|
||
|
}
|
||
|
|
||
|
.blue.darken-4 {
|
||
|
background-color: #0D47A1 !important;
|
||
|
}
|
||
|
|
||
|
.blue-text.text-darken-4 {
|
||
|
color: #0D47A1 !important;
|
||
|
}
|
||
|
|
||
|
.blue.accent-1 {
|
||
|
background-color: #82B1FF !important;
|
||
|
}
|
||
|
|
||
|
.blue-text.text-accent-1 {
|
||
|
color: #82B1FF !important;
|
||
|
}
|
||
|
|
||
|
.blue.accent-2 {
|
||
|
background-color: #448AFF !important;
|
||
|
}
|
||
|
|
||
|
.blue-text.text-accent-2 {
|
||
|
color: #448AFF !important;
|
||
|
}
|
||
|
|
||
|
.blue.accent-3 {
|
||
|
background-color: #2979FF !important;
|
||
|
}
|
||
|
|
||
|
.blue-text.text-accent-3 {
|
||
|
color: #2979FF !important;
|
||
|
}
|
||
|
|
||
|
.blue.accent-4 {
|
||
|
background-color: #2962FF !important;
|
||
|
}
|
||
|
|
||
|
.blue-text.text-accent-4 {
|
||
|
color: #2962FF !important;
|
||
|
}
|
||
|
|
||
|
.light-blue.lighten-5 {
|
||
|
background-color: #e1f5fe !important;
|
||
|
}
|
||
|
|
||
|
.light-blue-text.text-lighten-5 {
|
||
|
color: #e1f5fe !important;
|
||
|
}
|
||
|
|
||
|
.light-blue.lighten-4 {
|
||
|
background-color: #b3e5fc !important;
|
||
|
}
|
||
|
|
||
|
.light-blue-text.text-lighten-4 {
|
||
|
color: #b3e5fc !important;
|
||
|
}
|
||
|
|
||
|
.light-blue.lighten-3 {
|
||
|
background-color: #81d4fa !important;
|
||
|
}
|
||
|
|
||
|
.light-blue-text.text-lighten-3 {
|
||
|
color: #81d4fa !important;
|
||
|
}
|
||
|
|
||
|
.light-blue.lighten-2 {
|
||
|
background-color: #4fc3f7 !important;
|
||
|
}
|
||
|
|
||
|
.light-blue-text.text-lighten-2 {
|
||
|
color: #4fc3f7 !important;
|
||
|
}
|
||
|
|
||
|
.light-blue.lighten-1 {
|
||
|
background-color: #29b6f6 !important;
|
||
|
}
|
||
|
|
||
|
.light-blue-text.text-lighten-1 {
|
||
|
color: #29b6f6 !important;
|
||
|
}
|
||
|
|
||
|
.light-blue {
|
||
|
background-color: #03a9f4 !important;
|
||
|
}
|
||
|
|
||
|
.light-blue-text {
|
||
|
color: #03a9f4 !important;
|
||
|
}
|
||
|
|
||
|
.light-blue.darken-1 {
|
||
|
background-color: #039be5 !important;
|
||
|
}
|
||
|
|
||
|
.light-blue-text.text-darken-1 {
|
||
|
color: #039be5 !important;
|
||
|
}
|
||
|
|
||
|
.light-blue.darken-2 {
|
||
|
background-color: #0288d1 !important;
|
||
|
}
|
||
|
|
||
|
.light-blue-text.text-darken-2 {
|
||
|
color: #0288d1 !important;
|
||
|
}
|
||
|
|
||
|
.light-blue.darken-3 {
|
||
|
background-color: #0277bd !important;
|
||
|
}
|
||
|
|
||
|
.light-blue-text.text-darken-3 {
|
||
|
color: #0277bd !important;
|
||
|
}
|
||
|
|
||
|
.light-blue.darken-4 {
|
||
|
background-color: #01579b !important;
|
||
|
}
|
||
|
|
||
|
.light-blue-text.text-darken-4 {
|
||
|
color: #01579b !important;
|
||
|
}
|
||
|
|
||
|
.light-blue.accent-1 {
|
||
|
background-color: #80d8ff !important;
|
||
|
}
|
||
|
|
||
|
.light-blue-text.text-accent-1 {
|
||
|
color: #80d8ff !important;
|
||
|
}
|
||
|
|
||
|
.light-blue.accent-2 {
|
||
|
background-color: #40c4ff !important;
|
||
|
}
|
||
|
|
||
|
.light-blue-text.text-accent-2 {
|
||
|
color: #40c4ff !important;
|
||
|
}
|
||
|
|
||
|
.light-blue.accent-3 {
|
||
|
background-color: #00b0ff !important;
|
||
|
}
|
||
|
|
||
|
.light-blue-text.text-accent-3 {
|
||
|
color: #00b0ff !important;
|
||
|
}
|
||
|
|
||
|
.light-blue.accent-4 {
|
||
|
background-color: #0091ea !important;
|
||
|
}
|
||
|
|
||
|
.light-blue-text.text-accent-4 {
|
||
|
color: #0091ea !important;
|
||
|
}
|
||
|
|
||
|
.cyan.lighten-5 {
|
||
|
background-color: #e0f7fa !important;
|
||
|
}
|
||
|
|
||
|
.cyan-text.text-lighten-5 {
|
||
|
color: #e0f7fa !important;
|
||
|
}
|
||
|
|
||
|
.cyan.lighten-4 {
|
||
|
background-color: #b2ebf2 !important;
|
||
|
}
|
||
|
|
||
|
.cyan-text.text-lighten-4 {
|
||
|
color: #b2ebf2 !important;
|
||
|
}
|
||
|
|
||
|
.cyan.lighten-3 {
|
||
|
background-color: #80deea !important;
|
||
|
}
|
||
|
|
||
|
.cyan-text.text-lighten-3 {
|
||
|
color: #80deea !important;
|
||
|
}
|
||
|
|
||
|
.cyan.lighten-2 {
|
||
|
background-color: #4dd0e1 !important;
|
||
|
}
|
||
|
|
||
|
.cyan-text.text-lighten-2 {
|
||
|
color: #4dd0e1 !important;
|
||
|
}
|
||
|
|
||
|
.cyan.lighten-1 {
|
||
|
background-color: #26c6da !important;
|
||
|
}
|
||
|
|
||
|
.cyan-text.text-lighten-1 {
|
||
|
color: #26c6da !important;
|
||
|
}
|
||
|
|
||
|
.cyan {
|
||
|
background-color: #00bcd4 !important;
|
||
|
}
|
||
|
|
||
|
.cyan-text {
|
||
|
color: #00bcd4 !important;
|
||
|
}
|
||
|
|
||
|
.cyan.darken-1 {
|
||
|
background-color: #00acc1 !important;
|
||
|
}
|
||
|
|
||
|
.cyan-text.text-darken-1 {
|
||
|
color: #00acc1 !important;
|
||
|
}
|
||
|
|
||
|
.cyan.darken-2 {
|
||
|
background-color: #0097a7 !important;
|
||
|
}
|
||
|
|
||
|
.cyan-text.text-darken-2 {
|
||
|
color: #0097a7 !important;
|
||
|
}
|
||
|
|
||
|
.cyan.darken-3 {
|
||
|
background-color: #00838f !important;
|
||
|
}
|
||
|
|
||
|
.cyan-text.text-darken-3 {
|
||
|
color: #00838f !important;
|
||
|
}
|
||
|
|
||
|
.cyan.darken-4 {
|
||
|
background-color: #006064 !important;
|
||
|
}
|
||
|
|
||
|
.cyan-text.text-darken-4 {
|
||
|
color: #006064 !important;
|
||
|
}
|
||
|
|
||
|
.cyan.accent-1 {
|
||
|
background-color: #84ffff !important;
|
||
|
}
|
||
|
|
||
|
.cyan-text.text-accent-1 {
|
||
|
color: #84ffff !important;
|
||
|
}
|
||
|
|
||
|
.cyan.accent-2 {
|
||
|
background-color: #18ffff !important;
|
||
|
}
|
||
|
|
||
|
.cyan-text.text-accent-2 {
|
||
|
color: #18ffff !important;
|
||
|
}
|
||
|
|
||
|
.cyan.accent-3 {
|
||
|
background-color: #00e5ff !important;
|
||
|
}
|
||
|
|
||
|
.cyan-text.text-accent-3 {
|
||
|
color: #00e5ff !important;
|
||
|
}
|
||
|
|
||
|
.cyan.accent-4 {
|
||
|
background-color: #00b8d4 !important;
|
||
|
}
|
||
|
|
||
|
.cyan-text.text-accent-4 {
|
||
|
color: #00b8d4 !important;
|
||
|
}
|
||
|
|
||
|
.teal.lighten-5 {
|
||
|
background-color: #e0f2f1 !important;
|
||
|
}
|
||
|
|
||
|
.teal-text.text-lighten-5 {
|
||
|
color: #e0f2f1 !important;
|
||
|
}
|
||
|
|
||
|
.teal.lighten-4 {
|
||
|
background-color: #b2dfdb !important;
|
||
|
}
|
||
|
|
||
|
.teal-text.text-lighten-4 {
|
||
|
color: #b2dfdb !important;
|
||
|
}
|
||
|
|
||
|
.teal.lighten-3 {
|
||
|
background-color: #80cbc4 !important;
|
||
|
}
|
||
|
|
||
|
.teal-text.text-lighten-3 {
|
||
|
color: #80cbc4 !important;
|
||
|
}
|
||
|
|
||
|
.teal.lighten-2 {
|
||
|
background-color: #4db6ac !important;
|
||
|
}
|
||
|
|
||
|
.teal-text.text-lighten-2 {
|
||
|
color: #4db6ac !important;
|
||
|
}
|
||
|
|
||
|
.teal.lighten-1 {
|
||
|
background-color: #26a69a !important;
|
||
|
}
|
||
|
|
||
|
.teal-text.text-lighten-1 {
|
||
|
color: #26a69a !important;
|
||
|
}
|
||
|
|
||
|
.teal {
|
||
|
background-color: #009688 !important;
|
||
|
}
|
||
|
|
||
|
.teal-text {
|
||
|
color: #009688 !important;
|
||
|
}
|
||
|
|
||
|
.teal.darken-1 {
|
||
|
background-color: #00897b !important;
|
||
|
}
|
||
|
|
||
|
.teal-text.text-darken-1 {
|
||
|
color: #00897b !important;
|
||
|
}
|
||
|
|
||
|
.teal.darken-2 {
|
||
|
background-color: #00796b !important;
|
||
|
}
|
||
|
|
||
|
.teal-text.text-darken-2 {
|
||
|
color: #00796b !important;
|
||
|
}
|
||
|
|
||
|
.teal.darken-3 {
|
||
|
background-color: #00695c !important;
|
||
|
}
|
||
|
|
||
|
.teal-text.text-darken-3 {
|
||
|
color: #00695c !important;
|
||
|
}
|
||
|
|
||
|
.teal.darken-4 {
|
||
|
background-color: #004d40 !important;
|
||
|
}
|
||
|
|
||
|
.teal-text.text-darken-4 {
|
||
|
color: #004d40 !important;
|
||
|
}
|
||
|
|
||
|
.teal.accent-1 {
|
||
|
background-color: #a7ffeb !important;
|
||
|
}
|
||
|
|
||
|
.teal-text.text-accent-1 {
|
||
|
color: #a7ffeb !important;
|
||
|
}
|
||
|
|
||
|
.teal.accent-2 {
|
||
|
background-color: #64ffda !important;
|
||
|
}
|
||
|
|
||
|
.teal-text.text-accent-2 {
|
||
|
color: #64ffda !important;
|
||
|
}
|
||
|
|
||
|
.teal.accent-3 {
|
||
|
background-color: #1de9b6 !important;
|
||
|
}
|
||
|
|
||
|
.teal-text.text-accent-3 {
|
||
|
color: #1de9b6 !important;
|
||
|
}
|
||
|
|
||
|
.teal.accent-4 {
|
||
|
background-color: #00bfa5 !important;
|
||
|
}
|
||
|
|
||
|
.teal-text.text-accent-4 {
|
||
|
color: #00bfa5 !important;
|
||
|
}
|
||
|
|
||
|
.green.lighten-5 {
|
||
|
background-color: #E8F5E9 !important;
|
||
|
}
|
||
|
|
||
|
.green-text.text-lighten-5 {
|
||
|
color: #E8F5E9 !important;
|
||
|
}
|
||
|
|
||
|
.green.lighten-4 {
|
||
|
background-color: #C8E6C9 !important;
|
||
|
}
|
||
|
|
||
|
.green-text.text-lighten-4 {
|
||
|
color: #C8E6C9 !important;
|
||
|
}
|
||
|
|
||
|
.green.lighten-3 {
|
||
|
background-color: #A5D6A7 !important;
|
||
|
}
|
||
|
|
||
|
.green-text.text-lighten-3 {
|
||
|
color: #A5D6A7 !important;
|
||
|
}
|
||
|
|
||
|
.green.lighten-2 {
|
||
|
background-color: #81C784 !important;
|
||
|
}
|
||
|
|
||
|
.green-text.text-lighten-2 {
|
||
|
color: #81C784 !important;
|
||
|
}
|
||
|
|
||
|
.green.lighten-1 {
|
||
|
background-color: #66BB6A !important;
|
||
|
}
|
||
|
|
||
|
.green-text.text-lighten-1 {
|
||
|
color: #66BB6A !important;
|
||
|
}
|
||
|
|
||
|
.green {
|
||
|
background-color: #4CAF50 !important;
|
||
|
}
|
||
|
|
||
|
.green-text {
|
||
|
color: #4CAF50 !important;
|
||
|
}
|
||
|
|
||
|
.green.darken-1 {
|
||
|
background-color: #43A047 !important;
|
||
|
}
|
||
|
|
||
|
.green-text.text-darken-1 {
|
||
|
color: #43A047 !important;
|
||
|
}
|
||
|
|
||
|
.green.darken-2 {
|
||
|
background-color: #388E3C !important;
|
||
|
}
|
||
|
|
||
|
.green-text.text-darken-2 {
|
||
|
color: #388E3C !important;
|
||
|
}
|
||
|
|
||
|
.green.darken-3 {
|
||
|
background-color: #2E7D32 !important;
|
||
|
}
|
||
|
|
||
|
.green-text.text-darken-3 {
|
||
|
color: #2E7D32 !important;
|
||
|
}
|
||
|
|
||
|
.green.darken-4 {
|
||
|
background-color: #1B5E20 !important;
|
||
|
}
|
||
|
|
||
|
.green-text.text-darken-4 {
|
||
|
color: #1B5E20 !important;
|
||
|
}
|
||
|
|
||
|
.green.accent-1 {
|
||
|
background-color: #B9F6CA !important;
|
||
|
}
|
||
|
|
||
|
.green-text.text-accent-1 {
|
||
|
color: #B9F6CA !important;
|
||
|
}
|
||
|
|
||
|
.green.accent-2 {
|
||
|
background-color: #69F0AE !important;
|
||
|
}
|
||
|
|
||
|
.green-text.text-accent-2 {
|
||
|
color: #69F0AE !important;
|
||
|
}
|
||
|
|
||
|
.green.accent-3 {
|
||
|
background-color: #00E676 !important;
|
||
|
}
|
||
|
|
||
|
.green-text.text-accent-3 {
|
||
|
color: #00E676 !important;
|
||
|
}
|
||
|
|
||
|
.green.accent-4 {
|
||
|
background-color: #00C853 !important;
|
||
|
}
|
||
|
|
||
|
.green-text.text-accent-4 {
|
||
|
color: #00C853 !important;
|
||
|
}
|
||
|
|
||
|
.light-green.lighten-5 {
|
||
|
background-color: #f1f8e9 !important;
|
||
|
}
|
||
|
|
||
|
.light-green-text.text-lighten-5 {
|
||
|
color: #f1f8e9 !important;
|
||
|
}
|
||
|
|
||
|
.light-green.lighten-4 {
|
||
|
background-color: #dcedc8 !important;
|
||
|
}
|
||
|
|
||
|
.light-green-text.text-lighten-4 {
|
||
|
color: #dcedc8 !important;
|
||
|
}
|
||
|
|
||
|
.light-green.lighten-3 {
|
||
|
background-color: #c5e1a5 !important;
|
||
|
}
|
||
|
|
||
|
.light-green-text.text-lighten-3 {
|
||
|
color: #c5e1a5 !important;
|
||
|
}
|
||
|
|
||
|
.light-green.lighten-2 {
|
||
|
background-color: #aed581 !important;
|
||
|
}
|
||
|
|
||
|
.light-green-text.text-lighten-2 {
|
||
|
color: #aed581 !important;
|
||
|
}
|
||
|
|
||
|
.light-green.lighten-1 {
|
||
|
background-color: #9ccc65 !important;
|
||
|
}
|
||
|
|
||
|
.light-green-text.text-lighten-1 {
|
||
|
color: #9ccc65 !important;
|
||
|
}
|
||
|
|
||
|
.light-green {
|
||
|
background-color: #8bc34a !important;
|
||
|
}
|
||
|
|
||
|
.light-green-text {
|
||
|
color: #8bc34a !important;
|
||
|
}
|
||
|
|
||
|
.light-green.darken-1 {
|
||
|
background-color: #7cb342 !important;
|
||
|
}
|
||
|
|
||
|
.light-green-text.text-darken-1 {
|
||
|
color: #7cb342 !important;
|
||
|
}
|
||
|
|
||
|
.light-green.darken-2 {
|
||
|
background-color: #689f38 !important;
|
||
|
}
|
||
|
|
||
|
.light-green-text.text-darken-2 {
|
||
|
color: #689f38 !important;
|
||
|
}
|
||
|
|
||
|
.light-green.darken-3 {
|
||
|
background-color: #558b2f !important;
|
||
|
}
|
||
|
|
||
|
.light-green-text.text-darken-3 {
|
||
|
color: #558b2f !important;
|
||
|
}
|
||
|
|
||
|
.light-green.darken-4 {
|
||
|
background-color: #33691e !important;
|
||
|
}
|
||
|
|
||
|
.light-green-text.text-darken-4 {
|
||
|
color: #33691e !important;
|
||
|
}
|
||
|
|
||
|
.light-green.accent-1 {
|
||
|
background-color: #ccff90 !important;
|
||
|
}
|
||
|
|
||
|
.light-green-text.text-accent-1 {
|
||
|
color: #ccff90 !important;
|
||
|
}
|
||
|
|
||
|
.light-green.accent-2 {
|
||
|
background-color: #b2ff59 !important;
|
||
|
}
|
||
|
|
||
|
.light-green-text.text-accent-2 {
|
||
|
color: #b2ff59 !important;
|
||
|
}
|
||
|
|
||
|
.light-green.accent-3 {
|
||
|
background-color: #76ff03 !important;
|
||
|
}
|
||
|
|
||
|
.light-green-text.text-accent-3 {
|
||
|
color: #76ff03 !important;
|
||
|
}
|
||
|
|
||
|
.light-green.accent-4 {
|
||
|
background-color: #64dd17 !important;
|
||
|
}
|
||
|
|
||
|
.light-green-text.text-accent-4 {
|
||
|
color: #64dd17 !important;
|
||
|
}
|
||
|
|
||
|
.lime.lighten-5 {
|
||
|
background-color: #f9fbe7 !important;
|
||
|
}
|
||
|
|
||
|
.lime-text.text-lighten-5 {
|
||
|
color: #f9fbe7 !important;
|
||
|
}
|
||
|
|
||
|
.lime.lighten-4 {
|
||
|
background-color: #f0f4c3 !important;
|
||
|
}
|
||
|
|
||
|
.lime-text.text-lighten-4 {
|
||
|
color: #f0f4c3 !important;
|
||
|
}
|
||
|
|
||
|
.lime.lighten-3 {
|
||
|
background-color: #e6ee9c !important;
|
||
|
}
|
||
|
|
||
|
.lime-text.text-lighten-3 {
|
||
|
color: #e6ee9c !important;
|
||
|
}
|
||
|
|
||
|
.lime.lighten-2 {
|
||
|
background-color: #dce775 !important;
|
||
|
}
|
||
|
|
||
|
.lime-text.text-lighten-2 {
|
||
|
color: #dce775 !important;
|
||
|
}
|
||
|
|
||
|
.lime.lighten-1 {
|
||
|
background-color: #d4e157 !important;
|
||
|
}
|
||
|
|
||
|
.lime-text.text-lighten-1 {
|
||
|
color: #d4e157 !important;
|
||
|
}
|
||
|
|
||
|
.lime {
|
||
|
background-color: #cddc39 !important;
|
||
|
}
|
||
|
|
||
|
.lime-text {
|
||
|
color: #cddc39 !important;
|
||
|
}
|
||
|
|
||
|
.lime.darken-1 {
|
||
|
background-color: #c0ca33 !important;
|
||
|
}
|
||
|
|
||
|
.lime-text.text-darken-1 {
|
||
|
color: #c0ca33 !important;
|
||
|
}
|
||
|
|
||
|
.lime.darken-2 {
|
||
|
background-color: #afb42b !important;
|
||
|
}
|
||
|
|
||
|
.lime-text.text-darken-2 {
|
||
|
color: #afb42b !important;
|
||
|
}
|
||
|
|
||
|
.lime.darken-3 {
|
||
|
background-color: #9e9d24 !important;
|
||
|
}
|
||
|
|
||
|
.lime-text.text-darken-3 {
|
||
|
color: #9e9d24 !important;
|
||
|
}
|
||
|
|
||
|
.lime.darken-4 {
|
||
|
background-color: #827717 !important;
|
||
|
}
|
||
|
|
||
|
.lime-text.text-darken-4 {
|
||
|
color: #827717 !important;
|
||
|
}
|
||
|
|
||
|
.lime.accent-1 {
|
||
|
background-color: #f4ff81 !important;
|
||
|
}
|
||
|
|
||
|
.lime-text.text-accent-1 {
|
||
|
color: #f4ff81 !important;
|
||
|
}
|
||
|
|
||
|
.lime.accent-2 {
|
||
|
background-color: #eeff41 !important;
|
||
|
}
|
||
|
|
||
|
.lime-text.text-accent-2 {
|
||
|
color: #eeff41 !important;
|
||
|
}
|
||
|
|
||
|
.lime.accent-3 {
|
||
|
background-color: #c6ff00 !important;
|
||
|
}
|
||
|
|
||
|
.lime-text.text-accent-3 {
|
||
|
color: #c6ff00 !important;
|
||
|
}
|
||
|
|
||
|
.lime.accent-4 {
|
||
|
background-color: #aeea00 !important;
|
||
|
}
|
||
|
|
||
|
.lime-text.text-accent-4 {
|
||
|
color: #aeea00 !important;
|
||
|
}
|
||
|
|
||
|
.yellow.lighten-5 {
|
||
|
background-color: #fffde7 !important;
|
||
|
}
|
||
|
|
||
|
.yellow-text.text-lighten-5 {
|
||
|
color: #fffde7 !important;
|
||
|
}
|
||
|
|
||
|
.yellow.lighten-4 {
|
||
|
background-color: #fff9c4 !important;
|
||
|
}
|
||
|
|
||
|
.yellow-text.text-lighten-4 {
|
||
|
color: #fff9c4 !important;
|
||
|
}
|
||
|
|
||
|
.yellow.lighten-3 {
|
||
|
background-color: #fff59d !important;
|
||
|
}
|
||
|
|
||
|
.yellow-text.text-lighten-3 {
|
||
|
color: #fff59d !important;
|
||
|
}
|
||
|
|
||
|
.yellow.lighten-2 {
|
||
|
background-color: #fff176 !important;
|
||
|
}
|
||
|
|
||
|
.yellow-text.text-lighten-2 {
|
||
|
color: #fff176 !important;
|
||
|
}
|
||
|
|
||
|
.yellow.lighten-1 {
|
||
|
background-color: #ffee58 !important;
|
||
|
}
|
||
|
|
||
|
.yellow-text.text-lighten-1 {
|
||
|
color: #ffee58 !important;
|
||
|
}
|
||
|
|
||
|
.yellow {
|
||
|
background-color: #ffeb3b !important;
|
||
|
}
|
||
|
|
||
|
.yellow-text {
|
||
|
color: #ffeb3b !important;
|
||
|
}
|
||
|
|
||
|
.yellow.darken-1 {
|
||
|
background-color: #fdd835 !important;
|
||
|
}
|
||
|
|
||
|
.yellow-text.text-darken-1 {
|
||
|
color: #fdd835 !important;
|
||
|
}
|
||
|
|
||
|
.yellow.darken-2 {
|
||
|
background-color: #fbc02d !important;
|
||
|
}
|
||
|
|
||
|
.yellow-text.text-darken-2 {
|
||
|
color: #fbc02d !important;
|
||
|
}
|
||
|
|
||
|
.yellow.darken-3 {
|
||
|
background-color: #f9a825 !important;
|
||
|
}
|
||
|
|
||
|
.yellow-text.text-darken-3 {
|
||
|
color: #f9a825 !important;
|
||
|
}
|
||
|
|
||
|
.yellow.darken-4 {
|
||
|
background-color: #f57f17 !important;
|
||
|
}
|
||
|
|
||
|
.yellow-text.text-darken-4 {
|
||
|
color: #f57f17 !important;
|
||
|
}
|
||
|
|
||
|
.yellow.accent-1 {
|
||
|
background-color: #ffff8d !important;
|
||
|
}
|
||
|
|
||
|
.yellow-text.text-accent-1 {
|
||
|
color: #ffff8d !important;
|
||
|
}
|
||
|
|
||
|
.yellow.accent-2 {
|
||
|
background-color: #ffff00 !important;
|
||
|
}
|
||
|
|
||
|
.yellow-text.text-accent-2 {
|
||
|
color: #ffff00 !important;
|
||
|
}
|
||
|
|
||
|
.yellow.accent-3 {
|
||
|
background-color: #ffea00 !important;
|
||
|
}
|
||
|
|
||
|
.yellow-text.text-accent-3 {
|
||
|
color: #ffea00 !important;
|
||
|
}
|
||
|
|
||
|
.yellow.accent-4 {
|
||
|
background-color: #ffd600 !important;
|
||
|
}
|
||
|
|
||
|
.yellow-text.text-accent-4 {
|
||
|
color: #ffd600 !important;
|
||
|
}
|
||
|
|
||
|
.amber.lighten-5 {
|
||
|
background-color: #fff8e1 !important;
|
||
|
}
|
||
|
|
||
|
.amber-text.text-lighten-5 {
|
||
|
color: #fff8e1 !important;
|
||
|
}
|
||
|
|
||
|
.amber.lighten-4 {
|
||
|
background-color: #ffecb3 !important;
|
||
|
}
|
||
|
|
||
|
.amber-text.text-lighten-4 {
|
||
|
color: #ffecb3 !important;
|
||
|
}
|
||
|
|
||
|
.amber.lighten-3 {
|
||
|
background-color: #ffe082 !important;
|
||
|
}
|
||
|
|
||
|
.amber-text.text-lighten-3 {
|
||
|
color: #ffe082 !important;
|
||
|
}
|
||
|
|
||
|
.amber.lighten-2 {
|
||
|
background-color: #ffd54f !important;
|
||
|
}
|
||
|
|
||
|
.amber-text.text-lighten-2 {
|
||
|
color: #ffd54f !important;
|
||
|
}
|
||
|
|
||
|
.amber.lighten-1 {
|
||
|
background-color: #ffca28 !important;
|
||
|
}
|
||
|
|
||
|
.amber-text.text-lighten-1 {
|
||
|
color: #ffca28 !important;
|
||
|
}
|
||
|
|
||
|
.amber {
|
||
|
background-color: #ffc107 !important;
|
||
|
}
|
||
|
|
||
|
.amber-text {
|
||
|
color: #ffc107 !important;
|
||
|
}
|
||
|
|
||
|
.amber.darken-1 {
|
||
|
background-color: #ffb300 !important;
|
||
|
}
|
||
|
|
||
|
.amber-text.text-darken-1 {
|
||
|
color: #ffb300 !important;
|
||
|
}
|
||
|
|
||
|
.amber.darken-2 {
|
||
|
background-color: #ffa000 !important;
|
||
|
}
|
||
|
|
||
|
.amber-text.text-darken-2 {
|
||
|
color: #ffa000 !important;
|
||
|
}
|
||
|
|
||
|
.amber.darken-3 {
|
||
|
background-color: #ff8f00 !important;
|
||
|
}
|
||
|
|
||
|
.amber-text.text-darken-3 {
|
||
|
color: #ff8f00 !important;
|
||
|
}
|
||
|
|
||
|
.amber.darken-4 {
|
||
|
background-color: #ff6f00 !important;
|
||
|
}
|
||
|
|
||
|
.amber-text.text-darken-4 {
|
||
|
color: #ff6f00 !important;
|
||
|
}
|
||
|
|
||
|
.amber.accent-1 {
|
||
|
background-color: #ffe57f !important;
|
||
|
}
|
||
|
|
||
|
.amber-text.text-accent-1 {
|
||
|
color: #ffe57f !important;
|
||
|
}
|
||
|
|
||
|
.amber.accent-2 {
|
||
|
background-color: #ffd740 !important;
|
||
|
}
|
||
|
|
||
|
.amber-text.text-accent-2 {
|
||
|
color: #ffd740 !important;
|
||
|
}
|
||
|
|
||
|
.amber.accent-3 {
|
||
|
background-color: #ffc400 !important;
|
||
|
}
|
||
|
|
||
|
.amber-text.text-accent-3 {
|
||
|
color: #ffc400 !important;
|
||
|
}
|
||
|
|
||
|
.amber.accent-4 {
|
||
|
background-color: #ffab00 !important;
|
||
|
}
|
||
|
|
||
|
.amber-text.text-accent-4 {
|
||
|
color: #ffab00 !important;
|
||
|
}
|
||
|
|
||
|
.orange.lighten-5 {
|
||
|
background-color: #fff3e0 !important;
|
||
|
}
|
||
|
|
||
|
.orange-text.text-lighten-5 {
|
||
|
color: #fff3e0 !important;
|
||
|
}
|
||
|
|
||
|
.orange.lighten-4 {
|
||
|
background-color: #ffe0b2 !important;
|
||
|
}
|
||
|
|
||
|
.orange-text.text-lighten-4 {
|
||
|
color: #ffe0b2 !important;
|
||
|
}
|
||
|
|
||
|
.orange.lighten-3 {
|
||
|
background-color: #ffcc80 !important;
|
||
|
}
|
||
|
|
||
|
.orange-text.text-lighten-3 {
|
||
|
color: #ffcc80 !important;
|
||
|
}
|
||
|
|
||
|
.orange.lighten-2 {
|
||
|
background-color: #ffb74d !important;
|
||
|
}
|
||
|
|
||
|
.orange-text.text-lighten-2 {
|
||
|
color: #ffb74d !important;
|
||
|
}
|
||
|
|
||
|
.orange.lighten-1 {
|
||
|
background-color: #ffa726 !important;
|
||
|
}
|
||
|
|
||
|
.orange-text.text-lighten-1 {
|
||
|
color: #ffa726 !important;
|
||
|
}
|
||
|
|
||
|
.orange {
|
||
|
background-color: #ff9800 !important;
|
||
|
}
|
||
|
|
||
|
.orange-text {
|
||
|
color: #ff9800 !important;
|
||
|
}
|
||
|
|
||
|
.orange.darken-1 {
|
||
|
background-color: #fb8c00 !important;
|
||
|
}
|
||
|
|
||
|
.orange-text.text-darken-1 {
|
||
|
color: #fb8c00 !important;
|
||
|
}
|
||
|
|
||
|
.orange.darken-2 {
|
||
|
background-color: #f57c00 !important;
|
||
|
}
|
||
|
|
||
|
.orange-text.text-darken-2 {
|
||
|
color: #f57c00 !important;
|
||
|
}
|
||
|
|
||
|
.orange.darken-3 {
|
||
|
background-color: #ef6c00 !important;
|
||
|
}
|
||
|
|
||
|
.orange-text.text-darken-3 {
|
||
|
color: #ef6c00 !important;
|
||
|
}
|
||
|
|
||
|
.orange.darken-4 {
|
||
|
background-color: #e65100 !important;
|
||
|
}
|
||
|
|
||
|
.orange-text.text-darken-4 {
|
||
|
color: #e65100 !important;
|
||
|
}
|
||
|
|
||
|
.orange.accent-1 {
|
||
|
background-color: #ffd180 !important;
|
||
|
}
|
||
|
|
||
|
.orange-text.text-accent-1 {
|
||
|
color: #ffd180 !important;
|
||
|
}
|
||
|
|
||
|
.orange.accent-2 {
|
||
|
background-color: #ffab40 !important;
|
||
|
}
|
||
|
|
||
|
.orange-text.text-accent-2 {
|
||
|
color: #ffab40 !important;
|
||
|
}
|
||
|
|
||
|
.orange.accent-3 {
|
||
|
background-color: #ff9100 !important;
|
||
|
}
|
||
|
|
||
|
.orange-text.text-accent-3 {
|
||
|
color: #ff9100 !important;
|
||
|
}
|
||
|
|
||
|
.orange.accent-4 {
|
||
|
background-color: #ff6d00 !important;
|
||
|
}
|
||
|
|
||
|
.orange-text.text-accent-4 {
|
||
|
color: #ff6d00 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange.lighten-5 {
|
||
|
background-color: #fbe9e7 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange-text.text-lighten-5 {
|
||
|
color: #fbe9e7 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange.lighten-4 {
|
||
|
background-color: #ffccbc !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange-text.text-lighten-4 {
|
||
|
color: #ffccbc !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange.lighten-3 {
|
||
|
background-color: #ffab91 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange-text.text-lighten-3 {
|
||
|
color: #ffab91 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange.lighten-2 {
|
||
|
background-color: #ff8a65 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange-text.text-lighten-2 {
|
||
|
color: #ff8a65 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange.lighten-1 {
|
||
|
background-color: #ff7043 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange-text.text-lighten-1 {
|
||
|
color: #ff7043 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange {
|
||
|
background-color: #ff5722 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange-text {
|
||
|
color: #ff5722 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange.darken-1 {
|
||
|
background-color: #f4511e !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange-text.text-darken-1 {
|
||
|
color: #f4511e !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange.darken-2 {
|
||
|
background-color: #e64a19 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange-text.text-darken-2 {
|
||
|
color: #e64a19 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange.darken-3 {
|
||
|
background-color: #d84315 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange-text.text-darken-3 {
|
||
|
color: #d84315 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange.darken-4 {
|
||
|
background-color: #bf360c !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange-text.text-darken-4 {
|
||
|
color: #bf360c !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange.accent-1 {
|
||
|
background-color: #ff9e80 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange-text.text-accent-1 {
|
||
|
color: #ff9e80 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange.accent-2 {
|
||
|
background-color: #ff6e40 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange-text.text-accent-2 {
|
||
|
color: #ff6e40 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange.accent-3 {
|
||
|
background-color: #ff3d00 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange-text.text-accent-3 {
|
||
|
color: #ff3d00 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange.accent-4 {
|
||
|
background-color: #dd2c00 !important;
|
||
|
}
|
||
|
|
||
|
.deep-orange-text.text-accent-4 {
|
||
|
color: #dd2c00 !important;
|
||
|
}
|
||
|
|
||
|
.brown.lighten-5 {
|
||
|
background-color: #efebe9 !important;
|
||
|
}
|
||
|
|
||
|
.brown-text.text-lighten-5 {
|
||
|
color: #efebe9 !important;
|
||
|
}
|
||
|
|
||
|
.brown.lighten-4 {
|
||
|
background-color: #d7ccc8 !important;
|
||
|
}
|
||
|
|
||
|
.brown-text.text-lighten-4 {
|
||
|
color: #d7ccc8 !important;
|
||
|
}
|
||
|
|
||
|
.brown.lighten-3 {
|
||
|
background-color: #bcaaa4 !important;
|
||
|
}
|
||
|
|
||
|
.brown-text.text-lighten-3 {
|
||
|
color: #bcaaa4 !important;
|
||
|
}
|
||
|
|
||
|
.brown.lighten-2 {
|
||
|
background-color: #a1887f !important;
|
||
|
}
|
||
|
|
||
|
.brown-text.text-lighten-2 {
|
||
|
color: #a1887f !important;
|
||
|
}
|
||
|
|
||
|
.brown.lighten-1 {
|
||
|
background-color: #8d6e63 !important;
|
||
|
}
|
||
|
|
||
|
.brown-text.text-lighten-1 {
|
||
|
color: #8d6e63 !important;
|
||
|
}
|
||
|
|
||
|
.brown {
|
||
|
background-color: #795548 !important;
|
||
|
}
|
||
|
|
||
|
.brown-text {
|
||
|
color: #795548 !important;
|
||
|
}
|
||
|
|
||
|
.brown.darken-1 {
|
||
|
background-color: #6d4c41 !important;
|
||
|
}
|
||
|
|
||
|
.brown-text.text-darken-1 {
|
||
|
color: #6d4c41 !important;
|
||
|
}
|
||
|
|
||
|
.brown.darken-2 {
|
||
|
background-color: #5d4037 !important;
|
||
|
}
|
||
|
|
||
|
.brown-text.text-darken-2 {
|
||
|
color: #5d4037 !important;
|
||
|
}
|
||
|
|
||
|
.brown.darken-3 {
|
||
|
background-color: #4e342e !important;
|
||
|
}
|
||
|
|
||
|
.brown-text.text-darken-3 {
|
||
|
color: #4e342e !important;
|
||
|
}
|
||
|
|
||
|
.brown.darken-4 {
|
||
|
background-color: #3e2723 !important;
|
||
|
}
|
||
|
|
||
|
.brown-text.text-darken-4 {
|
||
|
color: #3e2723 !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey.lighten-5 {
|
||
|
background-color: #eceff1 !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey-text.text-lighten-5 {
|
||
|
color: #eceff1 !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey.lighten-4 {
|
||
|
background-color: #cfd8dc !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey-text.text-lighten-4 {
|
||
|
color: #cfd8dc !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey.lighten-3 {
|
||
|
background-color: #b0bec5 !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey-text.text-lighten-3 {
|
||
|
color: #b0bec5 !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey.lighten-2 {
|
||
|
background-color: #90a4ae !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey-text.text-lighten-2 {
|
||
|
color: #90a4ae !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey.lighten-1 {
|
||
|
background-color: #78909c !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey-text.text-lighten-1 {
|
||
|
color: #78909c !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey {
|
||
|
background-color: #607d8b !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey-text {
|
||
|
color: #607d8b !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey.darken-1 {
|
||
|
background-color: #546e7a !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey-text.text-darken-1 {
|
||
|
color: #546e7a !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey.darken-2 {
|
||
|
background-color: #455a64 !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey-text.text-darken-2 {
|
||
|
color: #455a64 !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey.darken-3 {
|
||
|
background-color: #37474f !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey-text.text-darken-3 {
|
||
|
color: #37474f !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey.darken-4 {
|
||
|
background-color: #263238 !important;
|
||
|
}
|
||
|
|
||
|
.blue-grey-text.text-darken-4 {
|
||
|
color: #263238 !important;
|
||
|
}
|
||
|
|
||
|
.grey.lighten-5 {
|
||
|
background-color: #fafafa !important;
|
||
|
}
|
||
|
|
||
|
.grey-text.text-lighten-5 {
|
||
|
color: #fafafa !important;
|
||
|
}
|
||
|
|
||
|
.grey.lighten-4 {
|
||
|
background-color: #f5f5f5 !important;
|
||
|
}
|
||
|
|
||
|
.grey-text.text-lighten-4 {
|
||
|
color: #f5f5f5 !important;
|
||
|
}
|
||
|
|
||
|
.grey.lighten-3 {
|
||
|
background-color: #eeeeee !important;
|
||
|
}
|
||
|
|
||
|
.grey-text.text-lighten-3 {
|
||
|
color: #eeeeee !important;
|
||
|
}
|
||
|
|
||
|
.grey.lighten-2 {
|
||
|
background-color: #e0e0e0 !important;
|
||
|
}
|
||
|
|
||
|
.grey-text.text-lighten-2 {
|
||
|
color: #e0e0e0 !important;
|
||
|
}
|
||
|
|
||
|
.grey.lighten-1 {
|
||
|
background-color: #bdbdbd !important;
|
||
|
}
|
||
|
|
||
|
.grey-text.text-lighten-1 {
|
||
|
color: #bdbdbd !important;
|
||
|
}
|
||
|
|
||
|
.grey {
|
||
|
background-color: #9e9e9e !important;
|
||
|
}
|
||
|
|
||
|
.grey-text {
|
||
|
color: #9e9e9e !important;
|
||
|
}
|
||
|
|
||
|
.grey.darken-1 {
|
||
|
background-color: #757575 !important;
|
||
|
}
|
||
|
|
||
|
.grey-text.text-darken-1 {
|
||
|
color: #757575 !important;
|
||
|
}
|
||
|
|
||
|
.grey.darken-2 {
|
||
|
background-color: #616161 !important;
|
||
|
}
|
||
|
|
||
|
.grey-text.text-darken-2 {
|
||
|
color: #616161 !important;
|
||
|
}
|
||
|
|
||
|
.grey.darken-3 {
|
||
|
background-color: #424242 !important;
|
||
|
}
|
||
|
|
||
|
.grey-text.text-darken-3 {
|
||
|
color: #424242 !important;
|
||
|
}
|
||
|
|
||
|
.grey.darken-4 {
|
||
|
background-color: #212121 !important;
|
||
|
}
|
||
|
|
||
|
.grey-text.text-darken-4 {
|
||
|
color: #212121 !important;
|
||
|
}
|
||
|
|
||
|
.shades.black {
|
||
|
background-color: #000000 !important;
|
||
|
}
|
||
|
|
||
|
.shades-text.text-black {
|
||
|
color: #000000 !important;
|
||
|
}
|
||
|
|
||
|
.shades.white {
|
||
|
background-color: #FFFFFF !important;
|
||
|
}
|
||
|
|
||
|
.shades-text.text-white {
|
||
|
color: #FFFFFF !important;
|
||
|
}
|
||
|
|
||
|
.shades.transparent {
|
||
|
background-color: transparent !important;
|
||
|
}
|
||
|
|
||
|
.shades-text.text-transparent {
|
||
|
color: transparent !important;
|
||
|
}
|
||
|
|
||
|
.black {
|
||
|
background-color: #000000 !important;
|
||
|
}
|
||
|
|
||
|
.black-text {
|
||
|
color: #000000 !important;
|
||
|
}
|
||
|
|
||
|
.white {
|
||
|
background-color: #FFFFFF !important;
|
||
|
}
|
||
|
|
||
|
.white-text {
|
||
|
color: #FFFFFF !important;
|
||
|
}
|
||
|
|
||
|
.transparent {
|
||
|
background-color: transparent !important;
|
||
|
}
|
||
|
|
||
|
.transparent-text {
|
||
|
color: transparent !important;
|
||
|
}
|
||
|
|
||
|
/*** Colors ***/
|
||
|
/*** Badges ***/
|
||
|
/*** Buttons ***/
|
||
|
/*** Cards ***/
|
||
|
/*** Collapsible ***/
|
||
|
/*** Dropdown ***/
|
||
|
/*** Fonts ***/
|
||
|
/*** Forms ***/
|
||
|
/*** Global ***/
|
||
|
/*** Navbar ***/
|
||
|
/*** SideNav ***/
|
||
|
/*** Tabs ***/
|
||
|
/*** Tables ***/
|
||
|
/*** Toasts ***/
|
||
|
/*** Typography ***/
|
||
|
/*** Collections ***/
|
||
|
/* Progress Bar */
|
||
|
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
|
||
|
/**
|
||
|
* 1. Set default font family to sans-serif.
|
||
|
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
||
|
* user zoom.
|
||
|
*/
|
||
|
html {
|
||
|
font-family: sans-serif;
|
||
|
/* 1 */
|
||
|
-ms-text-size-adjust: 100%;
|
||
|
/* 2 */
|
||
|
-webkit-text-size-adjust: 100%;
|
||
|
/* 2 */
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Remove default margin.
|
||
|
*/
|
||
|
body {
|
||
|
margin: 0;
|
||
|
}
|
||
|
|
||
|
/* HTML5 display definitions
|
||
|
========================================================================== */
|
||
|
/**
|
||
|
* Correct `block` display not defined for any HTML5 element in IE 8/9.
|
||
|
* Correct `block` display not defined for `details` or `summary` in IE 10/11
|
||
|
* and Firefox.
|
||
|
* Correct `block` display not defined for `main` in IE 11.
|
||
|
*/
|
||
|
article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary {
|
||
|
display: block;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 1. Correct `inline-block` display not defined in IE 8/9.
|
||
|
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
||
|
*/
|
||
|
audio, canvas, progress, video {
|
||
|
display: inline-block;
|
||
|
/* 1 */
|
||
|
vertical-align: baseline;
|
||
|
/* 2 */
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Prevent modern browsers from displaying `audio` without controls.
|
||
|
* Remove excess height in iOS 5 devices.
|
||
|
*/
|
||
|
audio:not([controls]) {
|
||
|
display: none;
|
||
|
height: 0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Address `[hidden]` styling not present in IE 8/9/10.
|
||
|
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
|
||
|
*/
|
||
|
[hidden], template {
|
||
|
display: none;
|
||
|
}
|
||
|
|
||
|
/* Links
|
||
|
========================================================================== */
|
||
|
/**
|
||
|
* Remove the gray background color from active links in IE 10.
|
||
|
*/
|
||
|
a {
|
||
|
background-color: transparent;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Improve readability when focused and also mouse hovered in all browsers.
|
||
|
*/
|
||
|
a:active, a:hover {
|
||
|
outline: 0;
|
||
|
}
|
||
|
|
||
|
/* Text-level semantics
|
||
|
========================================================================== */
|
||
|
/**
|
||
|
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
|
||
|
*/
|
||
|
abbr[title] {
|
||
|
border-bottom: 1px dotted;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
|
||
|
*/
|
||
|
b, strong {
|
||
|
font-weight: bold;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Address styling not present in Safari and Chrome.
|
||
|
*/
|
||
|
dfn {
|
||
|
font-style: italic;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Address variable `h1` font-size and margin within `section` and `article`
|
||
|
* contexts in Firefox 4+, Safari, and Chrome.
|
||
|
*/
|
||
|
h1 {
|
||
|
font-size: 2em;
|
||
|
margin: 0.67em 0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Address styling not present in IE 8/9.
|
||
|
*/
|
||
|
mark {
|
||
|
background: #ff0;
|
||
|
color: #000;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Address inconsistent and variable font size in all browsers.
|
||
|
*/
|
||
|
small {
|
||
|
font-size: 80%;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||
|
*/
|
||
|
sub, sup {
|
||
|
font-size: 75%;
|
||
|
line-height: 0;
|
||
|
position: relative;
|
||
|
vertical-align: baseline;
|
||
|
}
|
||
|
|
||
|
sup {
|
||
|
top: -0.5em;
|
||
|
}
|
||
|
|
||
|
sub {
|
||
|
bottom: -0.25em;
|
||
|
}
|
||
|
|
||
|
/* Embedded content
|
||
|
========================================================================== */
|
||
|
/**
|
||
|
* Remove border when inside `a` element in IE 8/9/10.
|
||
|
*/
|
||
|
img {
|
||
|
border: 0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Correct overflow not hidden in IE 9/10/11.
|
||
|
*/
|
||
|
svg:not(:root) {
|
||
|
overflow: hidden;
|
||
|
}
|
||
|
|
||
|
/* Grouping content
|
||
|
========================================================================== */
|
||
|
/**
|
||
|
* Address margin not present in IE 8/9 and Safari.
|
||
|
*/
|
||
|
figure {
|
||
|
margin: 1em 40px;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Address differences between Firefox and other browsers.
|
||
|
*/
|
||
|
hr {
|
||
|
-moz-box-sizing: content-box;
|
||
|
box-sizing: content-box;
|
||
|
height: 0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Contain overflow in all browsers.
|
||
|
*/
|
||
|
pre {
|
||
|
overflow: auto;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Address odd `em`-unit font size rendering in all browsers.
|
||
|
*/
|
||
|
code, kbd, pre, samp {
|
||
|
font-family: monospace, monospace;
|
||
|
font-size: 1em;
|
||
|
}
|
||
|
|
||
|
/* Forms
|
||
|
========================================================================== */
|
||
|
/**
|
||
|
* Known limitation: by default, Chrome and Safari on OS X allow very limited
|
||
|
* styling of `select`, unless a `border` property is set.
|
||
|
*/
|
||
|
/**
|
||
|
* 1. Correct color not being inherited.
|
||
|
* Known issue: affects color of disabled elements.
|
||
|
* 2. Correct font properties not being inherited.
|
||
|
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
|
||
|
*/
|
||
|
button, input, optgroup, select, textarea {
|
||
|
color: inherit;
|
||
|
/* 1 */
|
||
|
font: inherit;
|
||
|
/* 2 */
|
||
|
margin: 0;
|
||
|
/* 3 */
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Address `overflow` set to `hidden` in IE 8/9/10/11.
|
||
|
*/
|
||
|
button {
|
||
|
overflow: visible;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||
|
* All other form control elements do not inherit `text-transform` values.
|
||
|
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
|
||
|
* Correct `select` style inheritance in Firefox.
|
||
|
*/
|
||
|
button, select {
|
||
|
text-transform: none;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||
|
* and `video` controls.
|
||
|
* 2. Correct inability to style clickable `input` types in iOS.
|
||
|
* 3. Improve usability and consistency of cursor style between image-type
|
||
|
* `input` and others.
|
||
|
*/
|
||
|
/* 1 */
|
||
|
html input[type="button"], button, input[type="reset"], input[type="submit"] {
|
||
|
-webkit-appearance: button;
|
||
|
/* 2 */
|
||
|
cursor: pointer;
|
||
|
/* 3 */
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Re-set default cursor for disabled elements.
|
||
|
*/
|
||
|
button[disabled], html input[disabled] {
|
||
|
cursor: default;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Remove inner padding and border in Firefox 4+.
|
||
|
*/
|
||
|
button::-moz-focus-inner, input::-moz-focus-inner {
|
||
|
border: 0;
|
||
|
padding: 0;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||
|
* the UA stylesheet.
|
||
|
*/
|
||
|
input {
|
||
|
line-height: normal;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* It's recommended that you don't attempt to style these elements.
|
||
|
* Firefox's implementation doesn't respect box-sizing, padding, or width.
|
||
|
*
|
||
|
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||
|
* 2. Remove excess padding in IE 8/9/10.
|
||
|
*/
|
||
|
input[type="checkbox"], input[type="radio"] {
|
||
|
box-sizing: border-box;
|
||
|
/* 1 */
|
||
|
padding: 0;
|
||
|
/* 2 */
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
||
|
* `font-size` values of the `input`, it causes the cursor style of the
|
||
|
* decrement button to change from `default` to `text`.
|
||
|
*/
|
||
|
input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button {
|
||
|
height: auto;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
|
||
|
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
|
||
|
* (include `-moz` to future-proof).
|
||
|
*/
|
||
|
input[type="search"] {
|
||
|
-webkit-appearance: textfield;
|
||
|
/* 1 */
|
||
|
-moz-box-sizing: content-box;
|
||
|
-webkit-box-sizing: content-box;
|
||
|
/* 2 */
|
||
|
box-sizing: content-box;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
||
|
* Safari (but not Chrome) clips the cancel button when the search input has
|
||
|
* padding (and `textfield` appearance).
|
||
|
*/
|
||
|
input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration {
|
||
|
-webkit-appearance: none;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Define consistent border, margin, and padding.
|
||
|
*/
|
||
|
fieldset {
|
||
|
border: 1px solid #c0c0c0;
|
||
|
margin: 0 2px;
|
||
|
padding: 0.35em 0.625em 0.75em;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 1. Correct `color` not being inherited in IE 8/9/10/11.
|
||
|
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||
|
*/
|
||
|
legend {
|
||
|
border: 0;
|
||
|
/* 1 */
|
||
|
padding: 0;
|
||
|
/* 2 */
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Remove default vertical scrollbar in IE 8/9/10/11.
|
||
|
*/
|
||
|
textarea {
|
||
|
overflow: auto;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Don't inherit the `font-weight` (applied by a rule above).
|
||
|
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
||
|
*/
|
||
|
optgroup {
|
||
|
font-weight: bold;
|
||
|
}
|
||
|
|
||
|
/* Tables
|
||
|
========================================================================== */
|
||
|
/**
|
||
|
* Remove most spacing between table cells.
|
||
|
*/
|
||
|
table {
|
||
|
border-collapse: collapse;
|
||
|
border-spacing: 0;
|
||
|
}
|
||
|
|
||
|
td, th {
|
||
|
padding: 0;
|
||
|
}
|
||
|
|
||
|
html {
|
||
|
box-sizing: border-box;
|
||
|
}
|
||
|
|
||
|
*, *:before, *:after {
|
||
|
box-sizing: inherit;
|
||
|
}
|
||
|
|
||
|
ul {
|
||
|
list-style-type: none;
|
||
|
}
|
||
|
|
||
|
a {
|
||
|
color: #039be5;
|
||
|
text-decoration: none;
|
||
|
-webkit-tap-highlight-color: transparent;
|
||
|
}
|
||
|
|
||
|
.valign-wrapper {
|
||
|
display: -webkit-box;
|
||
|
display: -moz-box;
|
||
|
display: -ms-flexbox;
|
||
|
display: -webkit-flex;
|
||
|
display: flex;
|
||
|
-webkit-flex-align: center;
|
||
|
-ms-flex-align: center;
|
||
|
-webkit-align-items: center;
|
||
|
align-items: center;
|
||
|
}
|
||
|
|
||
|
.valign-wrapper .valign {
|
||
|
display: block;
|
||
|
}
|
||
|
|
||
|
ul {
|
||
|
padding: 0;
|
||
|
}
|
||
|
|
||
|
ul li {
|
||
|
list-style-type: none;
|
||
|
}
|
||
|
|
||
|
.clearfix {
|
||
|
clear: both;
|
||
|
}
|
||
|
|
||
|
.z-depth-1, nav, .card-panel, .card, .toast, .btn, .btn-large, .btn-floating, .dropdown-content, .collapsible, .side-nav {
|
||
|
-webkit-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
|
||
|
-moz-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
|
||
|
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
|
||
|
}
|
||
|
|
||
|
.z-depth-1-half, .btn:hover, .btn-large:hover, .btn-floating:hover {
|
||
|
-webkit-box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);
|
||
|
-moz-box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);
|
||
|
box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);
|
||
|
}
|
||
|
|
||
|
.z-depth-2 {
|
||
|
-webkit-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
|
||
|
-moz-box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
|
||
|
box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
|
||
|
}
|
||
|
|
||
|
.z-depth-3 {
|
||
|
-webkit-box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19);
|
||
|
-moz-box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19);
|
||
|
box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19);
|
||
|
}
|
||
|
|
||
|
.z-depth-4, .modal {
|
||
|
-webkit-box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21);
|
||
|
-moz-box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21);
|
||
|
box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21);
|
||
|
}
|
||
|
|
||
|
.z-depth-5 {
|
||
|
-webkit-box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22);
|
||
|
-moz-box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22);
|
||
|
box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22);
|
||
|
}
|
||
|
|
||
|
.divider {
|
||
|
height: 1px;
|
||
|
overflow: hidden;
|
||
|
background-color: #e0e0e0;
|
||
|
}
|
||
|
|
||
|
blockquote {
|
||
|
margin: 20px 0;
|
||
|
padding-left: 1.5rem;
|
||
|
border-left: 5px solid #EF9A9A;
|
||
|
}
|
||
|
|
||
|
i {
|
||
|
line-height: inherit;
|
||
|
}
|
||
|
|
||
|
i.left {
|
||
|
float: left;
|
||
|
margin-right: 15px;
|
||
|
}
|
||
|
|
||
|
i.right {
|
||
|
float: right;
|
||
|
margin-left: 15px;
|
||
|
}
|
||
|
|
||
|
i.tiny {
|
||
|
font-size: 1rem;
|
||
|
}
|
||
|
|
||
|
i.small {
|
||
|
font-size: 2rem;
|
||
|
}
|
||
|
|
||
|
i.medium {
|
||
|
font-size: 4rem;
|
||
|
}
|
||
|
|
||
|
i.large {
|
||
|
font-size: 6rem;
|
||
|
}
|
||
|
|
||
|
img.responsive-img, video.responsive-video {
|
||
|
max-width: 100%;
|
||
|
height: auto;
|
||
|
}
|
||
|
|
||
|
.pagination li {
|
||
|
font-size: 1.2rem;
|
||
|
float: left;
|
||
|
width: 30px;
|
||
|
height: 30px;
|
||
|
margin: 0 10px;
|
||
|
border-radius: 2px;
|
||
|
text-align: center;
|
||
|
}
|
||
|
|
||
|
.pagination li a {
|
||
|
color: #444;
|
||
|
}
|
||
|
|
||
|
.pagination li.active a {
|
||
|
color: #fff;
|
||
|
}
|
||
|
|
||
|
.pagination li.active {
|
||
|
background-color: #ee6e73;
|
||
|
}
|
||
|
|
||
|
.pagination li.disabled a {
|
||
|
color: #999;
|
||
|
}
|
||
|
|
||
|
.pagination li i {
|
||
|
font-size: 2rem;
|
||
|
line-height: 1.8rem;
|
||
|
}
|
||
|
|
||
|
.parallax-container {
|
||
|
position: relative;
|
||
|
overflow: hidden;
|
||
|
height: 500px;
|
||
|
}
|
||
|
|
||
|
.parallax {
|
||
|
position: absolute;
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
right: 0;
|
||
|
bottom: 0;
|
||
|
z-index: -1;
|
||
|
}
|
||
|
|
||
|
.parallax img {
|
||
|
display: none;
|
||
|
position: absolute;
|
||
|
left: 50%;
|
||
|
bottom: 0;
|
||
|
min-width: 100%;
|
||
|
min-height: 100%;
|
||
|
-webkit-transform: translate3d(0, 0, 0);
|
||
|
transform: translate3d(0, 0, 0);
|
||
|
transform: translateX(-50%);
|
||
|
}
|
||
|
|
||
|
.pin-top, .pin-bottom {
|
||
|
position: relative;
|
||
|
}
|
||
|
|
||
|
.pinned {
|
||
|
position: fixed !important;
|
||
|
}
|
||
|
|
||
|
/*********************
|
||
|
Transition Classes
|
||
|
**********************/
|
||
|
ul.staggered-list li {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
.fade-in {
|
||
|
opacity: 0;
|
||
|
transform-origin: 0 50%;
|
||
|
}
|
||
|
|
||
|
/*********************
|
||
|
Media Query Classes
|
||
|
**********************/
|
||
|
@media only screen and (max-width: 600px) {
|
||
|
.hide-on-small-only, .hide-on-small-and-down {
|
||
|
display: none !important;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (max-width: 992px) {
|
||
|
.hide-on-med-and-down {
|
||
|
display: none !important;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 601px) {
|
||
|
.hide-on-med-and-up {
|
||
|
display: none !important;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 600px) and (max-width: 992px) {
|
||
|
.hide-on-med-only {
|
||
|
display: none !important;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 993px) {
|
||
|
.hide-on-large-only {
|
||
|
display: none !important;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 993px) {
|
||
|
.show-on-large {
|
||
|
display: initial !important;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 600px) and (max-width: 992px) {
|
||
|
.show-on-medium {
|
||
|
display: initial !important;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (max-width: 600px) {
|
||
|
.show-on-small {
|
||
|
display: initial !important;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 601px) {
|
||
|
.show-on-medium-and-up {
|
||
|
display: initial !important;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (max-width: 992px) {
|
||
|
.show-on-medium-and-down {
|
||
|
display: initial !important;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (max-width: 600px) {
|
||
|
.center-on-small-only {
|
||
|
text-align: center;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
footer.page-footer {
|
||
|
margin-top: 20px;
|
||
|
padding-top: 20px;
|
||
|
background-color: #ee6e73;
|
||
|
}
|
||
|
|
||
|
footer.page-footer .footer-copyright {
|
||
|
overflow: hidden;
|
||
|
height: 50px;
|
||
|
line-height: 50px;
|
||
|
color: rgba(255, 255, 255, 0.8);
|
||
|
background-color: rgba(51, 51, 51, 0.08);
|
||
|
}
|
||
|
|
||
|
table, th, td {
|
||
|
border: none;
|
||
|
}
|
||
|
|
||
|
table {
|
||
|
width: 100%;
|
||
|
display: table;
|
||
|
}
|
||
|
|
||
|
table.bordered tr {
|
||
|
border-bottom: 1px solid #d0d0d0;
|
||
|
}
|
||
|
|
||
|
table.striped tbody tr:nth-child(odd) {
|
||
|
background-color: #f2f2f2;
|
||
|
}
|
||
|
|
||
|
table.hoverable tbody tr {
|
||
|
-webkit-transition: background-color .25s ease;
|
||
|
-moz-transition: background-color .25s ease;
|
||
|
-o-transition: background-color .25s ease;
|
||
|
-ms-transition: background-color .25s ease;
|
||
|
transition: background-color .25s ease;
|
||
|
}
|
||
|
|
||
|
table.hoverable tbody tr:hover {
|
||
|
background-color: #f2f2f2;
|
||
|
}
|
||
|
|
||
|
table.centered thead tr th, table.centered tbody tr td {
|
||
|
text-align: center;
|
||
|
}
|
||
|
|
||
|
thead {
|
||
|
border-bottom: 1px solid #d0d0d0;
|
||
|
}
|
||
|
|
||
|
td, th {
|
||
|
padding: 15px 5px;
|
||
|
display: table-cell;
|
||
|
text-align: left;
|
||
|
vertical-align: middle;
|
||
|
border-radius: 2px;
|
||
|
}
|
||
|
|
||
|
@media only screen and (max-width: 992px) {
|
||
|
table.responsive-table {
|
||
|
width: 100%;
|
||
|
border-collapse: collapse;
|
||
|
border-spacing: 0;
|
||
|
display: block;
|
||
|
position: relative;
|
||
|
/* sort out borders */
|
||
|
}
|
||
|
|
||
|
table.responsive-table th, table.responsive-table td {
|
||
|
margin: 0;
|
||
|
vertical-align: top;
|
||
|
}
|
||
|
|
||
|
table.responsive-table th {
|
||
|
text-align: left;
|
||
|
}
|
||
|
|
||
|
table.responsive-table thead {
|
||
|
display: block;
|
||
|
float: left;
|
||
|
}
|
||
|
|
||
|
table.responsive-table thead tr {
|
||
|
display: block;
|
||
|
padding: 0 10px 0 0;
|
||
|
}
|
||
|
|
||
|
table.responsive-table thead tr th::before {
|
||
|
content: "\00a0";
|
||
|
}
|
||
|
|
||
|
table.responsive-table tbody {
|
||
|
display: block;
|
||
|
width: auto;
|
||
|
position: relative;
|
||
|
overflow-x: auto;
|
||
|
white-space: nowrap;
|
||
|
}
|
||
|
|
||
|
table.responsive-table tbody tr {
|
||
|
display: inline-block;
|
||
|
vertical-align: top;
|
||
|
}
|
||
|
|
||
|
table.responsive-table th {
|
||
|
display: block;
|
||
|
text-align: right;
|
||
|
}
|
||
|
|
||
|
table.responsive-table td {
|
||
|
display: block;
|
||
|
min-height: 1.25em;
|
||
|
text-align: left;
|
||
|
}
|
||
|
|
||
|
table.responsive-table tr {
|
||
|
padding: 0 10px;
|
||
|
}
|
||
|
|
||
|
table.responsive-table thead {
|
||
|
border: 0;
|
||
|
border-right: 1px solid #d0d0d0;
|
||
|
}
|
||
|
|
||
|
table.responsive-table.bordered th {
|
||
|
border-bottom: 0;
|
||
|
border-left: 0;
|
||
|
}
|
||
|
|
||
|
table.responsive-table.bordered td {
|
||
|
border-left: 0;
|
||
|
border-right: 0;
|
||
|
border-bottom: 0;
|
||
|
}
|
||
|
|
||
|
table.responsive-table.bordered tr {
|
||
|
border: 0;
|
||
|
}
|
||
|
|
||
|
table.responsive-table.bordered tbody tr {
|
||
|
border-right: 1px solid #d0d0d0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.collection {
|
||
|
margin: 0.5rem 0 1rem 0;
|
||
|
border: 1px solid #e0e0e0;
|
||
|
border-radius: 2px;
|
||
|
overflow: hidden;
|
||
|
position: relative;
|
||
|
}
|
||
|
|
||
|
.collection .collection-item {
|
||
|
background-color: #fff;
|
||
|
line-height: 1.5rem;
|
||
|
padding: 10px 20px;
|
||
|
margin: 0;
|
||
|
border-bottom: 1px solid #e0e0e0;
|
||
|
}
|
||
|
|
||
|
.collection .collection-item.avatar {
|
||
|
height: 84px;
|
||
|
padding-left: 72px;
|
||
|
position: relative;
|
||
|
}
|
||
|
|
||
|
.collection .collection-item.avatar .circle {
|
||
|
position: absolute;
|
||
|
width: 42px;
|
||
|
height: 42px;
|
||
|
overflow: hidden;
|
||
|
left: 15px;
|
||
|
display: inline-block;
|
||
|
vertical-align: middle;
|
||
|
}
|
||
|
|
||
|
.collection .collection-item.avatar i.circle {
|
||
|
font-size: 18px;
|
||
|
line-height: 42px;
|
||
|
color: #fff;
|
||
|
background-color: #999;
|
||
|
text-align: center;
|
||
|
}
|
||
|
|
||
|
.collection .collection-item.avatar .title {
|
||
|
font-size: 16px;
|
||
|
}
|
||
|
|
||
|
.collection .collection-item.avatar p {
|
||
|
margin: 0;
|
||
|
}
|
||
|
|
||
|
.collection .collection-item.avatar .secondary-content {
|
||
|
position: absolute;
|
||
|
top: 16px;
|
||
|
right: 16px;
|
||
|
}
|
||
|
|
||
|
.collection .collection-item:last-child {
|
||
|
border-bottom: none;
|
||
|
}
|
||
|
|
||
|
.collection .collection-item.active {
|
||
|
background-color: #26a69a;
|
||
|
color: #eafaf9;
|
||
|
}
|
||
|
|
||
|
.collection a.collection-item {
|
||
|
display: block;
|
||
|
-webkit-transition: 0.25s;
|
||
|
-moz-transition: 0.25s;
|
||
|
-o-transition: 0.25s;
|
||
|
-ms-transition: 0.25s;
|
||
|
transition: 0.25s;
|
||
|
color: #26a69a;
|
||
|
}
|
||
|
|
||
|
.collection a.collection-item:not(.active):hover {
|
||
|
background-color: #ddd;
|
||
|
}
|
||
|
|
||
|
.collection.with-header .collection-header {
|
||
|
background-color: #fff;
|
||
|
border-bottom: 1px solid #e0e0e0;
|
||
|
padding: 10px 20px;
|
||
|
}
|
||
|
|
||
|
.collection.with-header .collection-item {
|
||
|
padding-left: 30px;
|
||
|
}
|
||
|
|
||
|
.secondary-content {
|
||
|
float: right;
|
||
|
color: #26a69a;
|
||
|
}
|
||
|
|
||
|
span.badge {
|
||
|
min-width: 3rem;
|
||
|
padding: 0 6px;
|
||
|
text-align: center;
|
||
|
font-size: 1rem;
|
||
|
line-height: inherit;
|
||
|
color: #757575;
|
||
|
position: absolute;
|
||
|
right: 15px;
|
||
|
-webkit-box-sizing: border-box;
|
||
|
-moz-box-sizing: border-box;
|
||
|
box-sizing: border-box;
|
||
|
}
|
||
|
|
||
|
span.badge.new {
|
||
|
font-weight: 300;
|
||
|
font-size: 0.8rem;
|
||
|
color: #fff;
|
||
|
background-color: #26a69a;
|
||
|
border-radius: 2px;
|
||
|
}
|
||
|
|
||
|
span.badge.new:after {
|
||
|
content: " new";
|
||
|
}
|
||
|
|
||
|
.video-container {
|
||
|
position: relative;
|
||
|
padding-bottom: 56.25%;
|
||
|
padding-top: 30px;
|
||
|
height: 0;
|
||
|
overflow: hidden;
|
||
|
}
|
||
|
|
||
|
.video-container.no-controls {
|
||
|
padding-top: 0;
|
||
|
}
|
||
|
|
||
|
.video-container iframe, .video-container object, .video-container embed {
|
||
|
position: absolute;
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
}
|
||
|
|
||
|
.progress {
|
||
|
position: relative;
|
||
|
height: 4px;
|
||
|
display: block;
|
||
|
width: 100%;
|
||
|
background-color: #acece6;
|
||
|
border-radius: 2px;
|
||
|
margin: 0.5rem 0 1rem 0;
|
||
|
overflow: hidden;
|
||
|
}
|
||
|
|
||
|
.progress .determinate {
|
||
|
position: absolute;
|
||
|
background-color: inherit;
|
||
|
top: 0;
|
||
|
bottom: 0;
|
||
|
background-color: #26a69a;
|
||
|
-webkit-transition: width .3s linear;
|
||
|
-moz-transition: width .3s linear;
|
||
|
-o-transition: width .3s linear;
|
||
|
-ms-transition: width .3s linear;
|
||
|
transition: width .3s linear;
|
||
|
}
|
||
|
|
||
|
.progress .indeterminate {
|
||
|
background-color: #26a69a;
|
||
|
}
|
||
|
|
||
|
.progress .indeterminate:before {
|
||
|
content: '';
|
||
|
position: absolute;
|
||
|
background-color: inherit;
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
bottom: 0;
|
||
|
will-change: left, right;
|
||
|
-webkit-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
|
||
|
-moz-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
|
||
|
-ms-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
|
||
|
-o-animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
|
||
|
animation: indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
|
||
|
}
|
||
|
|
||
|
.progress .indeterminate:after {
|
||
|
content: '';
|
||
|
position: absolute;
|
||
|
background-color: inherit;
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
bottom: 0;
|
||
|
will-change: left, right;
|
||
|
-webkit-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
|
||
|
-moz-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
|
||
|
-ms-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
|
||
|
-o-animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
|
||
|
animation: indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;
|
||
|
-webkit-animation-delay: 1.15s;
|
||
|
-moz-animation-delay: 1.15s;
|
||
|
-ms-animation-delay: 1.15s;
|
||
|
-o-animation-delay: 1.15s;
|
||
|
animation-delay: 1.15s;
|
||
|
}
|
||
|
|
||
|
@-webkit-keyframes indeterminate {
|
||
|
0% {
|
||
|
left: -35%;
|
||
|
right: 100%;
|
||
|
}
|
||
|
|
||
|
60% {
|
||
|
left: 100%;
|
||
|
right: -90%;
|
||
|
}
|
||
|
|
||
|
100% {
|
||
|
left: 100%;
|
||
|
right: -90%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@-moz-keyframes indeterminate {
|
||
|
0% {
|
||
|
left: -35%;
|
||
|
right: 100%;
|
||
|
}
|
||
|
|
||
|
60% {
|
||
|
left: 100%;
|
||
|
right: -90%;
|
||
|
}
|
||
|
|
||
|
100% {
|
||
|
left: 100%;
|
||
|
right: -90%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@keyframes indeterminate {
|
||
|
0% {
|
||
|
left: -35%;
|
||
|
right: 100%;
|
||
|
}
|
||
|
|
||
|
60% {
|
||
|
left: 100%;
|
||
|
right: -90%;
|
||
|
}
|
||
|
|
||
|
100% {
|
||
|
left: 100%;
|
||
|
right: -90%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@-webkit-keyframes indeterminate-short {
|
||
|
0% {
|
||
|
left: -200%;
|
||
|
right: 100%;
|
||
|
}
|
||
|
|
||
|
60% {
|
||
|
left: 107%;
|
||
|
right: -8%;
|
||
|
}
|
||
|
|
||
|
100% {
|
||
|
left: 107%;
|
||
|
right: -8%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@-moz-keyframes indeterminate-short {
|
||
|
0% {
|
||
|
left: -200%;
|
||
|
right: 100%;
|
||
|
}
|
||
|
|
||
|
60% {
|
||
|
left: 107%;
|
||
|
right: -8%;
|
||
|
}
|
||
|
|
||
|
100% {
|
||
|
left: 107%;
|
||
|
right: -8%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@keyframes indeterminate-short {
|
||
|
0% {
|
||
|
left: -200%;
|
||
|
right: 100%;
|
||
|
}
|
||
|
|
||
|
60% {
|
||
|
left: 107%;
|
||
|
right: -8%;
|
||
|
}
|
||
|
|
||
|
100% {
|
||
|
left: 107%;
|
||
|
right: -8%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*******************
|
||
|
Utility Classes
|
||
|
*******************/
|
||
|
.hide {
|
||
|
display: none !important;
|
||
|
}
|
||
|
|
||
|
.left-align {
|
||
|
text-align: left;
|
||
|
}
|
||
|
|
||
|
.right-align {
|
||
|
text-align: right;
|
||
|
}
|
||
|
|
||
|
.center, .center-align {
|
||
|
text-align: center;
|
||
|
}
|
||
|
|
||
|
.left {
|
||
|
float: left !important;
|
||
|
}
|
||
|
|
||
|
.right {
|
||
|
float: right !important;
|
||
|
}
|
||
|
|
||
|
.no-select, input[type=range], input[type=range] + .thumb {
|
||
|
-webkit-touch-callout: none;
|
||
|
-webkit-user-select: none;
|
||
|
-khtml-user-select: none;
|
||
|
-moz-user-select: none;
|
||
|
-ms-user-select: none;
|
||
|
user-select: none;
|
||
|
}
|
||
|
|
||
|
.circle {
|
||
|
border-radius: 50%;
|
||
|
}
|
||
|
|
||
|
.center-block {
|
||
|
display: block;
|
||
|
margin-left: auto;
|
||
|
margin-right: auto;
|
||
|
}
|
||
|
|
||
|
.truncate {
|
||
|
white-space: nowrap;
|
||
|
overflow: hidden;
|
||
|
text-overflow: ellipsis;
|
||
|
}
|
||
|
|
||
|
.no-padding {
|
||
|
padding: 0 !important;
|
||
|
}
|
||
|
|
||
|
.container {
|
||
|
padding: 0 1.5rem;
|
||
|
margin: 0 auto;
|
||
|
max-width: 1280px;
|
||
|
width: 90%;
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 601px) {
|
||
|
.container {
|
||
|
width: 85%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 993px) {
|
||
|
.container {
|
||
|
width: 70%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.container .row {
|
||
|
margin-left: -0.75rem;
|
||
|
margin-right: -0.75rem;
|
||
|
}
|
||
|
|
||
|
.section {
|
||
|
padding-top: 1rem;
|
||
|
padding-bottom: 1rem;
|
||
|
}
|
||
|
|
||
|
.section.no-pad {
|
||
|
padding: 0;
|
||
|
}
|
||
|
|
||
|
.section.no-pad-bot {
|
||
|
padding-bottom: 0;
|
||
|
}
|
||
|
|
||
|
.section.no-pad-top {
|
||
|
padding-top: 0;
|
||
|
}
|
||
|
|
||
|
.row {
|
||
|
margin-left: auto;
|
||
|
margin-right: auto;
|
||
|
margin-bottom: 20px;
|
||
|
}
|
||
|
|
||
|
.row:after {
|
||
|
content: "";
|
||
|
display: table;
|
||
|
clear: both;
|
||
|
}
|
||
|
|
||
|
.row .col {
|
||
|
float: left;
|
||
|
-webkit-box-sizing: border-box;
|
||
|
-moz-box-sizing: border-box;
|
||
|
box-sizing: border-box;
|
||
|
padding: 0 0.75rem;
|
||
|
}
|
||
|
|
||
|
.row .col.s1 {
|
||
|
width: 8.33333%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.s2 {
|
||
|
width: 16.66667%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.s3 {
|
||
|
width: 25%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.s4 {
|
||
|
width: 33.33333%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.s5 {
|
||
|
width: 41.66667%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.s6 {
|
||
|
width: 50%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.s7 {
|
||
|
width: 58.33333%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.s8 {
|
||
|
width: 66.66667%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.s9 {
|
||
|
width: 75%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.s10 {
|
||
|
width: 83.33333%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.s11 {
|
||
|
width: 91.66667%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.s12 {
|
||
|
width: 100%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-s1 {
|
||
|
margin-left: 8.33333%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-s2 {
|
||
|
margin-left: 16.66667%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-s3 {
|
||
|
margin-left: 25%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-s4 {
|
||
|
margin-left: 33.33333%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-s5 {
|
||
|
margin-left: 41.66667%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-s6 {
|
||
|
margin-left: 50%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-s7 {
|
||
|
margin-left: 58.33333%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-s8 {
|
||
|
margin-left: 66.66667%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-s9 {
|
||
|
margin-left: 75%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-s10 {
|
||
|
margin-left: 83.33333%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-s11 {
|
||
|
margin-left: 91.66667%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-s12 {
|
||
|
margin-left: 100%;
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 601px) {
|
||
|
.row .col.m1 {
|
||
|
width: 8.33333%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.m2 {
|
||
|
width: 16.66667%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.m3 {
|
||
|
width: 25%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.m4 {
|
||
|
width: 33.33333%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.m5 {
|
||
|
width: 41.66667%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.m6 {
|
||
|
width: 50%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.m7 {
|
||
|
width: 58.33333%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.m8 {
|
||
|
width: 66.66667%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.m9 {
|
||
|
width: 75%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.m10 {
|
||
|
width: 83.33333%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.m11 {
|
||
|
width: 91.66667%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.m12 {
|
||
|
width: 100%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-m1 {
|
||
|
margin-left: 8.33333%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-m2 {
|
||
|
margin-left: 16.66667%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-m3 {
|
||
|
margin-left: 25%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-m4 {
|
||
|
margin-left: 33.33333%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-m5 {
|
||
|
margin-left: 41.66667%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-m6 {
|
||
|
margin-left: 50%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-m7 {
|
||
|
margin-left: 58.33333%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-m8 {
|
||
|
margin-left: 66.66667%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-m9 {
|
||
|
margin-left: 75%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-m10 {
|
||
|
margin-left: 83.33333%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-m11 {
|
||
|
margin-left: 91.66667%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-m12 {
|
||
|
margin-left: 100%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 993px) {
|
||
|
.row .col.l1 {
|
||
|
width: 8.33333%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.l2 {
|
||
|
width: 16.66667%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.l3 {
|
||
|
width: 25%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.l4 {
|
||
|
width: 33.33333%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.l5 {
|
||
|
width: 41.66667%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.l6 {
|
||
|
width: 50%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.l7 {
|
||
|
width: 58.33333%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.l8 {
|
||
|
width: 66.66667%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.l9 {
|
||
|
width: 75%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.l10 {
|
||
|
width: 83.33333%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.l11 {
|
||
|
width: 91.66667%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.l12 {
|
||
|
width: 100%;
|
||
|
margin-left: 0;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-l1 {
|
||
|
margin-left: 8.33333%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-l2 {
|
||
|
margin-left: 16.66667%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-l3 {
|
||
|
margin-left: 25%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-l4 {
|
||
|
margin-left: 33.33333%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-l5 {
|
||
|
margin-left: 41.66667%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-l6 {
|
||
|
margin-left: 50%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-l7 {
|
||
|
margin-left: 58.33333%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-l8 {
|
||
|
margin-left: 66.66667%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-l9 {
|
||
|
margin-left: 75%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-l10 {
|
||
|
margin-left: 83.33333%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-l11 {
|
||
|
margin-left: 91.66667%;
|
||
|
}
|
||
|
|
||
|
.row .col.offset-l12 {
|
||
|
margin-left: 100%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
nav {
|
||
|
color: #fff;
|
||
|
background-color: #ee6e73;
|
||
|
width: 100%;
|
||
|
height: 56px;
|
||
|
line-height: 56px;
|
||
|
}
|
||
|
|
||
|
nav a {
|
||
|
color: #fff;
|
||
|
}
|
||
|
|
||
|
nav .nav-wrapper {
|
||
|
position: relative;
|
||
|
height: 100%;
|
||
|
}
|
||
|
|
||
|
nav .nav-wrapper i {
|
||
|
display: block;
|
||
|
font-size: 2rem;
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 993px) {
|
||
|
nav a.button-collapse {
|
||
|
display: none;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
nav .button-collapse {
|
||
|
float: left;
|
||
|
position: relative;
|
||
|
z-index: 1;
|
||
|
height: 56px;
|
||
|
}
|
||
|
|
||
|
nav .button-collapse i {
|
||
|
font-size: 2.7rem;
|
||
|
height: 56px;
|
||
|
line-height: 56px;
|
||
|
}
|
||
|
|
||
|
nav .brand-logo {
|
||
|
position: absolute;
|
||
|
color: #fff;
|
||
|
display: inline-block;
|
||
|
font-size: 2.1rem;
|
||
|
padding: 0;
|
||
|
}
|
||
|
|
||
|
nav .brand-logo.center {
|
||
|
left: 50%;
|
||
|
-webkit-transform: translateX(-50%);
|
||
|
-moz-transform: translateX(-50%);
|
||
|
-ms-transform: translateX(-50%);
|
||
|
-o-transform: translateX(-50%);
|
||
|
transform: translateX(-50%);
|
||
|
}
|
||
|
|
||
|
@media only screen and (max-width: 992px) {
|
||
|
nav .brand-logo {
|
||
|
left: 50%;
|
||
|
-webkit-transform: translateX(-50%);
|
||
|
-moz-transform: translateX(-50%);
|
||
|
-ms-transform: translateX(-50%);
|
||
|
-o-transform: translateX(-50%);
|
||
|
transform: translateX(-50%);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
nav .brand-logo.right {
|
||
|
right: 0.5rem;
|
||
|
padding: 0;
|
||
|
}
|
||
|
|
||
|
nav ul {
|
||
|
margin: 0;
|
||
|
}
|
||
|
|
||
|
nav ul li {
|
||
|
-webkit-transition: background-color .3s;
|
||
|
-moz-transition: background-color .3s;
|
||
|
-o-transition: background-color .3s;
|
||
|
-ms-transition: background-color .3s;
|
||
|
transition: background-color .3s;
|
||
|
float: left;
|
||
|
padding: 0;
|
||
|
}
|
||
|
|
||
|
nav ul li:hover, nav ul li.active {
|
||
|
background-color: rgba(0, 0, 0, 0.1);
|
||
|
}
|
||
|
|
||
|
nav ul a {
|
||
|
font-size: 1rem;
|
||
|
color: #fff;
|
||
|
display: block;
|
||
|
padding: 0 15px;
|
||
|
}
|
||
|
|
||
|
nav ul.left {
|
||
|
float: left;
|
||
|
}
|
||
|
|
||
|
nav .input-field {
|
||
|
margin: 0;
|
||
|
}
|
||
|
|
||
|
nav .input-field input {
|
||
|
height: 100%;
|
||
|
font-size: 1.2rem;
|
||
|
border: none;
|
||
|
padding-left: 2rem;
|
||
|
}
|
||
|
|
||
|
nav .input-field input:focus, nav .input-field input[type=text]:valid, nav .input-field input[type=password]:valid, nav .input-field input[type=email]:valid, nav .input-field input[type=url]:valid, nav .input-field input[type=date]:valid {
|
||
|
border: none;
|
||
|
box-shadow: none;
|
||
|
}
|
||
|
|
||
|
nav .input-field label {
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
}
|
||
|
|
||
|
nav .input-field label i {
|
||
|
color: rgba(255, 255, 255, 0.7);
|
||
|
-webkit-transition: color .3s;
|
||
|
-moz-transition: color .3s;
|
||
|
-o-transition: color .3s;
|
||
|
-ms-transition: color .3s;
|
||
|
transition: color .3s;
|
||
|
}
|
||
|
|
||
|
nav .input-field label.active i {
|
||
|
color: #fff;
|
||
|
}
|
||
|
|
||
|
nav .input-field label.active {
|
||
|
-webkit-transform: translateY(0);
|
||
|
-moz-transform: translateY(0);
|
||
|
-ms-transform: translateY(0);
|
||
|
-o-transform: translateY(0);
|
||
|
transform: translateY(0);
|
||
|
}
|
||
|
|
||
|
.navbar-fixed {
|
||
|
position: relative;
|
||
|
height: 56px;
|
||
|
z-index: 998;
|
||
|
}
|
||
|
|
||
|
.navbar-fixed nav {
|
||
|
position: fixed;
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 601px) {
|
||
|
nav, nav .nav-wrapper i, nav a.button-collapse, nav a.button-collapse i {
|
||
|
height: 64px;
|
||
|
line-height: 64px;
|
||
|
}
|
||
|
|
||
|
.navbar-fixed {
|
||
|
height: 64px;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
a {
|
||
|
text-decoration: none;
|
||
|
}
|
||
|
|
||
|
html {
|
||
|
line-height: 1.5;
|
||
|
font-family: "Helvetica Neue","Helvetica","Arial", sans-serif;
|
||
|
font-weight: normal;
|
||
|
color: rgba(0, 0, 0, 0.87);
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 0) {
|
||
|
html {
|
||
|
font-size: 14px;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 992px) {
|
||
|
html {
|
||
|
font-size: 14.5px;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 1200px) {
|
||
|
html {
|
||
|
font-size: 15px;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
h1, h2, h3, h4, h5, h6 {
|
||
|
font-weight: 400;
|
||
|
}
|
||
|
|
||
|
h1 a, h2 a, h3 a, h4 a, h5 a, h6 a {
|
||
|
font-weight: inherit;
|
||
|
}
|
||
|
|
||
|
h1 {
|
||
|
font-size: 4.2rem;
|
||
|
line-height: 4.62rem;
|
||
|
margin: 2.1rem 0 1.68rem 0;
|
||
|
}
|
||
|
|
||
|
h2 {
|
||
|
font-size: 3.56rem;
|
||
|
line-height: 3.916rem;
|
||
|
margin: 1.78rem 0 1.424rem 0;
|
||
|
}
|
||
|
|
||
|
h3 {
|
||
|
font-size: 2.92rem;
|
||
|
line-height: 3.212rem;
|
||
|
margin: 1.46rem 0 1.168rem 0;
|
||
|
}
|
||
|
|
||
|
h4 {
|
||
|
font-size: 2.28rem;
|
||
|
line-height: 2.508rem;
|
||
|
margin: 1.14rem 0 0.912rem 0;
|
||
|
}
|
||
|
|
||
|
h5 {
|
||
|
font-size: 1.64rem;
|
||
|
line-height: 1.804rem;
|
||
|
margin: 0.82rem 0 0.656rem 0;
|
||
|
}
|
||
|
|
||
|
h6 {
|
||
|
font-size: 1rem;
|
||
|
line-height: 1.1rem;
|
||
|
margin: 0.5rem 0 0.4rem 0;
|
||
|
}
|
||
|
|
||
|
em {
|
||
|
font-style: italic;
|
||
|
}
|
||
|
|
||
|
strong {
|
||
|
font-weight: 500;
|
||
|
}
|
||
|
|
||
|
small {
|
||
|
font-size: 75%;
|
||
|
}
|
||
|
|
||
|
.light, footer.page-footer .footer-copyright {
|
||
|
font-weight: 300;
|
||
|
}
|
||
|
|
||
|
.thin {
|
||
|
font-weight: 200;
|
||
|
}
|
||
|
|
||
|
.flow-text {
|
||
|
font-weight: 300;
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 360px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.2rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 0px) {
|
||
|
.flow-text {
|
||
|
line-height: .8rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 390px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.224rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 30px) {
|
||
|
.flow-text {
|
||
|
line-height: .904rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 420px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.248rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 60px) {
|
||
|
.flow-text {
|
||
|
line-height: 1.008rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 450px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.272rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 90px) {
|
||
|
.flow-text {
|
||
|
line-height: 1.112rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 480px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.296rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 120px) {
|
||
|
.flow-text {
|
||
|
line-height: 1.216rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 510px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.32rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 150px) {
|
||
|
.flow-text {
|
||
|
line-height: 1.32rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 540px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.344rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 180px) {
|
||
|
.flow-text {
|
||
|
line-height: 1.424rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 570px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.368rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 210px) {
|
||
|
.flow-text {
|
||
|
line-height: 1.528rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 600px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.392rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 240px) {
|
||
|
.flow-text {
|
||
|
line-height: 1.632rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 630px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.416rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 270px) {
|
||
|
.flow-text {
|
||
|
line-height: 1.736rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 660px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.44rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 300px) {
|
||
|
.flow-text {
|
||
|
line-height: 1.84rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 690px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.464rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 330px) {
|
||
|
.flow-text {
|
||
|
line-height: 1.944rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 720px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.488rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 360px) {
|
||
|
.flow-text {
|
||
|
line-height: 2.048rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 750px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.512rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 390px) {
|
||
|
.flow-text {
|
||
|
line-height: 2.152rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 780px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.536rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 420px) {
|
||
|
.flow-text {
|
||
|
line-height: 2.256rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 810px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.56rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 450px) {
|
||
|
.flow-text {
|
||
|
line-height: 2.36rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 840px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.584rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 480px) {
|
||
|
.flow-text {
|
||
|
line-height: 2.464rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 870px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.608rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 510px) {
|
||
|
.flow-text {
|
||
|
line-height: 2.568rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 900px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.632rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 540px) {
|
||
|
.flow-text {
|
||
|
line-height: 2.672rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 930px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.656rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 570px) {
|
||
|
.flow-text {
|
||
|
line-height: 2.776rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 960px) {
|
||
|
.flow-text {
|
||
|
font-size: 1.68rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 600px) {
|
||
|
.flow-text {
|
||
|
line-height: 2.88rem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.card-panel {
|
||
|
padding: 20px;
|
||
|
margin: 0.5rem 0 1rem 0;
|
||
|
border-radius: 2px;
|
||
|
background-color: #fff;
|
||
|
}
|
||
|
|
||
|
.card {
|
||
|
position: relative;
|
||
|
overflow: hidden;
|
||
|
margin: 0.5rem 0 1rem 0;
|
||
|
background-color: #fff;
|
||
|
border-radius: 2px;
|
||
|
}
|
||
|
|
||
|
.card .card-title {
|
||
|
color: #fff;
|
||
|
font-size: 24px;
|
||
|
font-weight: 300;
|
||
|
}
|
||
|
|
||
|
.card .card-title.activator {
|
||
|
cursor: pointer;
|
||
|
}
|
||
|
|
||
|
.card.small, .card.medium, .card.large {
|
||
|
position: relative;
|
||
|
}
|
||
|
|
||
|
.card.small .card-image, .card.medium .card-image, .card.large .card-image {
|
||
|
overflow: hidden;
|
||
|
}
|
||
|
|
||
|
.card.small .card-content, .card.medium .card-content, .card.large .card-content {
|
||
|
overflow: hidden;
|
||
|
}
|
||
|
|
||
|
.card.small .card-action, .card.medium .card-action, .card.large .card-action {
|
||
|
position: absolute;
|
||
|
bottom: 0;
|
||
|
left: 0;
|
||
|
right: 0;
|
||
|
}
|
||
|
|
||
|
.card.small {
|
||
|
height: 300px;
|
||
|
}
|
||
|
|
||
|
.card.small .card-image {
|
||
|
height: 150px;
|
||
|
}
|
||
|
|
||
|
.card.small .card-content {
|
||
|
height: 150px;
|
||
|
}
|
||
|
|
||
|
.card.medium {
|
||
|
height: 400px;
|
||
|
}
|
||
|
|
||
|
.card.medium .card-image {
|
||
|
height: 250px;
|
||
|
}
|
||
|
|
||
|
.card.medium .card-content {
|
||
|
height: 150px;
|
||
|
}
|
||
|
|
||
|
.card.large {
|
||
|
height: 500px;
|
||
|
}
|
||
|
|
||
|
.card.large .card-image {
|
||
|
height: 330px;
|
||
|
}
|
||
|
|
||
|
.card.large .card-content {
|
||
|
height: 170px;
|
||
|
}
|
||
|
|
||
|
.card .card-image {
|
||
|
position: relative;
|
||
|
}
|
||
|
|
||
|
.card .card-image img {
|
||
|
border-radius: 2px 2px 0 0;
|
||
|
position: relative;
|
||
|
left: 0;
|
||
|
right: 0;
|
||
|
top: 0;
|
||
|
bottom: 0;
|
||
|
width: 100%;
|
||
|
}
|
||
|
|
||
|
.card .card-image .card-title {
|
||
|
position: absolute;
|
||
|
bottom: 0;
|
||
|
left: 0;
|
||
|
padding: 20px;
|
||
|
}
|
||
|
|
||
|
.card .card-content {
|
||
|
padding: 20px;
|
||
|
border-radius: 0 0 2px 2px;
|
||
|
}
|
||
|
|
||
|
.card .card-content p {
|
||
|
margin: 0;
|
||
|
color: inherit;
|
||
|
}
|
||
|
|
||
|
.card .card-content .card-title {
|
||
|
line-height: 48px;
|
||
|
}
|
||
|
|
||
|
.card .card-action {
|
||
|
border-top: 1px solid rgba(160, 160, 160, 0.2);
|
||
|
padding: 20px;
|
||
|
}
|
||
|
|
||
|
.card .card-action a {
|
||
|
color: #ffab40;
|
||
|
margin-right: 20px;
|
||
|
-webkit-transition: color .3s ease;
|
||
|
-moz-transition: color .3s ease;
|
||
|
-o-transition: color .3s ease;
|
||
|
-ms-transition: color .3s ease;
|
||
|
transition: color .3s ease;
|
||
|
text-transform: uppercase;
|
||
|
}
|
||
|
|
||
|
.card .card-action a:hover {
|
||
|
color: #ffd8a6;
|
||
|
}
|
||
|
|
||
|
.card .card-reveal {
|
||
|
padding: 20px;
|
||
|
position: absolute;
|
||
|
background-color: #FFF;
|
||
|
width: 100%;
|
||
|
overflow-y: auto;
|
||
|
top: 100%;
|
||
|
height: 100%;
|
||
|
z-index: 1;
|
||
|
display: none;
|
||
|
}
|
||
|
|
||
|
.card .card-reveal .card-title {
|
||
|
cursor: pointer;
|
||
|
display: block;
|
||
|
}
|
||
|
|
||
|
#toast-container {
|
||
|
display: block;
|
||
|
position: fixed;
|
||
|
z-index: 1001;
|
||
|
}
|
||
|
|
||
|
@media only screen and (max-width: 600px) {
|
||
|
#toast-container {
|
||
|
min-width: 100%;
|
||
|
bottom: 0%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 601px) and (max-width: 992px) {
|
||
|
#toast-container {
|
||
|
min-width: 30%;
|
||
|
left: 5%;
|
||
|
bottom: 7%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 993px) {
|
||
|
#toast-container {
|
||
|
min-width: 8%;
|
||
|
top: 10%;
|
||
|
right: 7%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.toast {
|
||
|
border-radius: 2px;
|
||
|
top: 0;
|
||
|
width: auto;
|
||
|
clear: both;
|
||
|
margin-top: 10px;
|
||
|
position: relative;
|
||
|
max-width: 100%;
|
||
|
height: 48px;
|
||
|
line-height: 48px;
|
||
|
background-color: #323232;
|
||
|
padding: 0 25px;
|
||
|
font-size: 1.1rem;
|
||
|
font-weight: 300;
|
||
|
color: #fff;
|
||
|
display: -webkit-box;
|
||
|
display: -moz-box;
|
||
|
display: -ms-flexbox;
|
||
|
display: -webkit-flex;
|
||
|
display: flex;
|
||
|
-webkit-flex-align: center;
|
||
|
-ms-flex-align: center;
|
||
|
-webkit-align-items: center;
|
||
|
align-items: center;
|
||
|
-webkit-justify-content: space-between;
|
||
|
justify-content: space-between;
|
||
|
}
|
||
|
|
||
|
.toast .btn, .toast .btn-large, .toast .btn-flat {
|
||
|
margin: 0;
|
||
|
margin-left: 3rem;
|
||
|
}
|
||
|
|
||
|
.toast.rounded {
|
||
|
border-radius: 24px;
|
||
|
}
|
||
|
|
||
|
@media only screen and (max-width: 600px) {
|
||
|
.toast {
|
||
|
width: 100%;
|
||
|
border-radius: 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 601px) and (max-width: 992px) {
|
||
|
.toast {
|
||
|
float: left;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (min-width: 993px) {
|
||
|
.toast {
|
||
|
float: right;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.tabs {
|
||
|
position: relative;
|
||
|
height: 48px;
|
||
|
background-color: #fff;
|
||
|
margin: 0 auto;
|
||
|
width: 100%;
|
||
|
white-space: nowrap;
|
||
|
}
|
||
|
|
||
|
.tabs .tab {
|
||
|
display: block;
|
||
|
float: left;
|
||
|
text-align: center;
|
||
|
line-height: 48px;
|
||
|
height: 48px;
|
||
|
padding: 0 20px;
|
||
|
margin: 0;
|
||
|
text-transform: uppercase;
|
||
|
letter-spacing: .8px;
|
||
|
width: 15%;
|
||
|
}
|
||
|
|
||
|
.tabs .tab a {
|
||
|
color: #ee6e73;
|
||
|
display: block;
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
-webkit-transition: color .28s ease;
|
||
|
-moz-transition: color .28s ease;
|
||
|
-o-transition: color .28s ease;
|
||
|
-ms-transition: color .28s ease;
|
||
|
transition: color .28s ease;
|
||
|
}
|
||
|
|
||
|
.tabs .tab a:hover {
|
||
|
color: #f9c9cb;
|
||
|
}
|
||
|
|
||
|
.tabs .indicator {
|
||
|
position: absolute;
|
||
|
bottom: 0;
|
||
|
height: 2px;
|
||
|
background-color: #f6b2b5;
|
||
|
will-change: left, right;
|
||
|
}
|
||
|
|
||
|
.tabs .tab {
|
||
|
padding: 0;
|
||
|
}
|
||
|
|
||
|
.material-tooltip {
|
||
|
padding: 10px 8px;
|
||
|
font-size: 1rem;
|
||
|
z-index: 1000;
|
||
|
background-color: transparent;
|
||
|
border-radius: 2px;
|
||
|
color: #fff;
|
||
|
min-height: 36px;
|
||
|
line-height: 1rem;
|
||
|
opacity: 0;
|
||
|
display: none;
|
||
|
position: absolute;
|
||
|
text-align: center;
|
||
|
overflow: hidden;
|
||
|
left: 0;
|
||
|
top: 0;
|
||
|
will-change: top, left;
|
||
|
}
|
||
|
|
||
|
.backdrop {
|
||
|
position: absolute;
|
||
|
opacity: 0;
|
||
|
display: none;
|
||
|
height: 7px;
|
||
|
width: 14px;
|
||
|
border-radius: 0 0 14px 14px;
|
||
|
background-color: #323232;
|
||
|
z-index: -1;
|
||
|
-webkit-transform-origin: 50% 10%;
|
||
|
-moz-transform-origin: 50% 10%;
|
||
|
-ms-transform-origin: 50% 10%;
|
||
|
-o-transform-origin: 50% 10%;
|
||
|
transform-origin: 50% 10%;
|
||
|
will-change: transform, opacity;
|
||
|
}
|
||
|
|
||
|
.btn, .btn-large, .btn-flat {
|
||
|
border: none;
|
||
|
border-radius: 2px;
|
||
|
display: inline-block;
|
||
|
height: 36px;
|
||
|
line-height: 36px;
|
||
|
outline: 0;
|
||
|
padding: 0 2rem;
|
||
|
text-transform: uppercase;
|
||
|
vertical-align: middle;
|
||
|
-webkit-tap-highlight-color: transparent;
|
||
|
}
|
||
|
|
||
|
.btn.disabled, .disabled.btn-large, .btn-floating.disabled, .btn-large.disabled, .btn:disabled, .btn-large:disabled, .btn-large:disabled, .btn-floating:disabled {
|
||
|
background-color: #DFDFDF;
|
||
|
box-shadow: none;
|
||
|
color: #9F9F9F;
|
||
|
cursor: default;
|
||
|
}
|
||
|
|
||
|
.btn.disabled *, .disabled.btn-large *, .btn-floating.disabled *, .btn-large.disabled *, .btn:disabled *, .btn-large:disabled *, .btn-large:disabled *, .btn-floating:disabled * {
|
||
|
pointer-events: none;
|
||
|
}
|
||
|
|
||
|
.btn.disabled:hover, .disabled.btn-large:hover, .btn-floating.disabled:hover, .btn-large.disabled:hover, .btn:disabled:hover, .btn-large:disabled:hover, .btn-large:disabled:hover, .btn-floating:disabled:hover {
|
||
|
background-color: #DFDFDF;
|
||
|
color: #9F9F9F;
|
||
|
}
|
||
|
|
||
|
.btn i, .btn-large i, .btn-floating i, .btn-large i, .btn-flat i {
|
||
|
font-size: 1.3rem;
|
||
|
line-height: inherit;
|
||
|
}
|
||
|
|
||
|
.btn, .btn-large {
|
||
|
text-decoration: none;
|
||
|
color: #FFF;
|
||
|
background-color: #26a69a;
|
||
|
text-align: center;
|
||
|
letter-spacing: .5px;
|
||
|
-webkit-transition: .2s ease-out;
|
||
|
-moz-transition: .2s ease-out;
|
||
|
-o-transition: .2s ease-out;
|
||
|
-ms-transition: .2s ease-out;
|
||
|
transition: .2s ease-out;
|
||
|
cursor: pointer;
|
||
|
}
|
||
|
|
||
|
.btn:hover, .btn-large:hover {
|
||
|
background-color: #2bbbad;
|
||
|
}
|
||
|
|
||
|
.btn-floating {
|
||
|
display: inline-block;
|
||
|
color: #FFF;
|
||
|
position: relative;
|
||
|
overflow: hidden;
|
||
|
z-index: 1;
|
||
|
width: 37px;
|
||
|
height: 37px;
|
||
|
line-height: 37px;
|
||
|
padding: 0;
|
||
|
background-color: #26a69a;
|
||
|
border-radius: 50%;
|
||
|
transition: .3s;
|
||
|
cursor: pointer;
|
||
|
vertical-align: middle;
|
||
|
}
|
||
|
|
||
|
.btn-floating i {
|
||
|
width: inherit;
|
||
|
display: inline-block;
|
||
|
text-align: center;
|
||
|
color: #FFF;
|
||
|
font-size: 1.6rem;
|
||
|
line-height: 37px;
|
||
|
}
|
||
|
|
||
|
.btn-floating:before {
|
||
|
border-radius: 0;
|
||
|
}
|
||
|
|
||
|
.btn-floating.btn-large {
|
||
|
width: 55.5px;
|
||
|
height: 55.5px;
|
||
|
}
|
||
|
|
||
|
.btn-floating.btn-large i {
|
||
|
line-height: 55.5px;
|
||
|
}
|
||
|
|
||
|
button.btn-floating {
|
||
|
border: none;
|
||
|
}
|
||
|
|
||
|
.fixed-action-btn {
|
||
|
position: fixed;
|
||
|
right: 23px;
|
||
|
bottom: 23px;
|
||
|
padding-top: 15px;
|
||
|
margin-bottom: 0;
|
||
|
z-index: 998;
|
||
|
}
|
||
|
|
||
|
.fixed-action-btn ul {
|
||
|
left: 0;
|
||
|
right: 0;
|
||
|
text-align: center;
|
||
|
position: absolute;
|
||
|
bottom: 64px;
|
||
|
}
|
||
|
|
||
|
.fixed-action-btn ul li {
|
||
|
margin-bottom: 15px;
|
||
|
}
|
||
|
|
||
|
.fixed-action-btn ul a.btn-floating {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
.btn-flat {
|
||
|
box-shadow: none;
|
||
|
background-color: transparent;
|
||
|
color: #343434;
|
||
|
cursor: pointer;
|
||
|
}
|
||
|
|
||
|
.btn-flat.disabled {
|
||
|
color: #b3b3b3;
|
||
|
cursor: default;
|
||
|
}
|
||
|
|
||
|
.btn-large {
|
||
|
height: 54px;
|
||
|
line-height: 56px;
|
||
|
}
|
||
|
|
||
|
.btn-large i {
|
||
|
font-size: 1.6rem;
|
||
|
}
|
||
|
|
||
|
.dropdown-content {
|
||
|
background-color: #FFFFFF;
|
||
|
margin: 0;
|
||
|
display: none;
|
||
|
min-width: 100px;
|
||
|
max-height: 650px;
|
||
|
overflow-y: auto;
|
||
|
opacity: 0;
|
||
|
position: absolute;
|
||
|
white-space: nowrap;
|
||
|
z-index: 1;
|
||
|
will-change: width, height;
|
||
|
}
|
||
|
|
||
|
.dropdown-content li {
|
||
|
clear: both;
|
||
|
color: rgba(0, 0, 0, 0.87);
|
||
|
cursor: pointer;
|
||
|
line-height: 1.5rem;
|
||
|
width: 100%;
|
||
|
text-align: left;
|
||
|
text-transform: none;
|
||
|
}
|
||
|
|
||
|
.dropdown-content li:hover, .dropdown-content li.active {
|
||
|
background-color: #eee;
|
||
|
}
|
||
|
|
||
|
.dropdown-content li > a, .dropdown-content li > span {
|
||
|
font-size: 1.2rem;
|
||
|
color: #26a69a;
|
||
|
display: block;
|
||
|
padding: 1rem 1rem;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
.waves-effect {
|
||
|
position: relative;
|
||
|
cursor: pointer;
|
||
|
display: inline-block;
|
||
|
overflow: hidden;
|
||
|
-webkit-user-select: none;
|
||
|
-moz-user-select: none;
|
||
|
-ms-user-select: none;
|
||
|
user-select: none;
|
||
|
-webkit-tap-highlight-color: transparent;
|
||
|
vertical-align: middle;
|
||
|
z-index: 1;
|
||
|
will-change: opacity, transform;
|
||
|
-webkit-transition: all .3s ease-out;
|
||
|
-moz-transition: all .3s ease-out;
|
||
|
-o-transition: all .3s ease-out;
|
||
|
-ms-transition: all .3s ease-out;
|
||
|
transition: all .3s ease-out;
|
||
|
}
|
||
|
|
||
|
.waves-effect .waves-ripple {
|
||
|
position: absolute;
|
||
|
border-radius: 50%;
|
||
|
width: 20px;
|
||
|
height: 20px;
|
||
|
margin-top: -10px;
|
||
|
margin-left: -10px;
|
||
|
opacity: 0;
|
||
|
background: rgba(0, 0, 0, 0.2);
|
||
|
-webkit-transition: all 0.7s ease-out;
|
||
|
-moz-transition: all 0.7s ease-out;
|
||
|
-o-transition: all 0.7s ease-out;
|
||
|
-ms-transition: all 0.7s ease-out;
|
||
|
transition: all 0.7s ease-out;
|
||
|
-webkit-transition-property: -webkit-transform, opacity;
|
||
|
-moz-transition-property: -moz-transform, opacity;
|
||
|
-o-transition-property: -o-transform, opacity;
|
||
|
transition-property: transform, opacity;
|
||
|
-webkit-transform: scale(0);
|
||
|
-moz-transform: scale(0);
|
||
|
-ms-transform: scale(0);
|
||
|
-o-transform: scale(0);
|
||
|
transform: scale(0);
|
||
|
pointer-events: none;
|
||
|
}
|
||
|
|
||
|
.waves-effect.waves-light .waves-ripple {
|
||
|
background-color: rgba(255, 255, 255, 0.45);
|
||
|
}
|
||
|
|
||
|
.waves-effect.waves-red .waves-ripple {
|
||
|
background-color: rgba(244, 67, 54, 0.7);
|
||
|
}
|
||
|
|
||
|
.waves-effect.waves-yellow .waves-ripple {
|
||
|
background-color: rgba(255, 235, 59, 0.7);
|
||
|
}
|
||
|
|
||
|
.waves-effect.waves-orange .waves-ripple {
|
||
|
background-color: rgba(255, 152, 0, 0.7);
|
||
|
}
|
||
|
|
||
|
.waves-effect.waves-purple .waves-ripple {
|
||
|
background-color: rgba(156, 39, 176, 0.7);
|
||
|
}
|
||
|
|
||
|
.waves-effect.waves-green .waves-ripple {
|
||
|
background-color: rgba(76, 175, 80, 0.7);
|
||
|
}
|
||
|
|
||
|
.waves-effect.waves-teal .waves-ripple {
|
||
|
background-color: rgba(0, 150, 136, 0.7);
|
||
|
}
|
||
|
|
||
|
.waves-notransition {
|
||
|
-webkit-transition: none !important;
|
||
|
-moz-transition: none !important;
|
||
|
-o-transition: none !important;
|
||
|
-ms-transition: none !important;
|
||
|
transition: none !important;
|
||
|
}
|
||
|
|
||
|
.waves-circle {
|
||
|
-webkit-transform: translateZ(0);
|
||
|
-moz-transform: translateZ(0);
|
||
|
-ms-transform: translateZ(0);
|
||
|
-o-transform: translateZ(0);
|
||
|
transform: translateZ(0);
|
||
|
-webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%);
|
||
|
}
|
||
|
|
||
|
.waves-input-wrapper {
|
||
|
border-radius: 0.2em;
|
||
|
vertical-align: bottom;
|
||
|
}
|
||
|
|
||
|
.waves-input-wrapper .waves-button-input {
|
||
|
position: relative;
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
z-index: 1;
|
||
|
}
|
||
|
|
||
|
.waves-circle {
|
||
|
text-align: center;
|
||
|
width: 2.5em;
|
||
|
height: 2.5em;
|
||
|
line-height: 2.5em;
|
||
|
border-radius: 50%;
|
||
|
-webkit-mask-image: none;
|
||
|
}
|
||
|
|
||
|
.waves-block {
|
||
|
display: block;
|
||
|
}
|
||
|
|
||
|
/* Firefox Bug: link not triggered */
|
||
|
a.waves-effect .waves-ripple {
|
||
|
z-index: -1;
|
||
|
}
|
||
|
|
||
|
.modal {
|
||
|
display: none;
|
||
|
position: fixed;
|
||
|
left: 0;
|
||
|
right: 0;
|
||
|
background-color: #fafafa;
|
||
|
padding: 0;
|
||
|
max-height: 70%;
|
||
|
width: 55%;
|
||
|
margin: auto;
|
||
|
overflow-y: auto;
|
||
|
z-index: 1000;
|
||
|
border-radius: 2px;
|
||
|
-webkit-transform: translate(0);
|
||
|
-moz-transform: translate(0);
|
||
|
-ms-transform: translate(0);
|
||
|
-o-transform: translate(0);
|
||
|
transform: translate(0);
|
||
|
will-change: top, opacity;
|
||
|
}
|
||
|
|
||
|
@media only screen and (max-width: 992px) {
|
||
|
.modal {
|
||
|
width: 80%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.modal h1, .modal h2, .modal h3, .modal h4 {
|
||
|
margin-top: 0;
|
||
|
}
|
||
|
|
||
|
.modal .modal-content {
|
||
|
padding: 24px;
|
||
|
}
|
||
|
|
||
|
.modal .modal-footer {
|
||
|
border-radius: 0 0 2px 2px;
|
||
|
background-color: #fafafa;
|
||
|
padding: 4px 6px;
|
||
|
height: 56px;
|
||
|
width: 100%;
|
||
|
}
|
||
|
|
||
|
.modal .modal-footer .btn, .modal .modal-footer .btn-large, .modal .modal-footer .btn-flat {
|
||
|
float: right;
|
||
|
margin: 6px 0;
|
||
|
}
|
||
|
|
||
|
#lean-overlay {
|
||
|
position: fixed;
|
||
|
z-index: 999;
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
bottom: 0;
|
||
|
right: 0;
|
||
|
height: 115%;
|
||
|
width: 100%;
|
||
|
background: #000;
|
||
|
display: none;
|
||
|
will-change: opacity;
|
||
|
}
|
||
|
|
||
|
.modal.modal-fixed-footer {
|
||
|
padding: 0;
|
||
|
height: 70%;
|
||
|
}
|
||
|
|
||
|
.modal.modal-fixed-footer .modal-content {
|
||
|
position: fixed;
|
||
|
max-height: 100%;
|
||
|
padding-bottom: 64px;
|
||
|
width: 100%;
|
||
|
overflow-y: auto;
|
||
|
}
|
||
|
|
||
|
.modal.modal-fixed-footer .modal-footer {
|
||
|
border-top: 1px solid rgba(0, 0, 0, 0.1);
|
||
|
position: fixed;
|
||
|
bottom: 0;
|
||
|
}
|
||
|
|
||
|
.modal.bottom-sheet {
|
||
|
top: auto;
|
||
|
bottom: -100%;
|
||
|
margin: 0;
|
||
|
width: 100%;
|
||
|
max-height: 45%;
|
||
|
border-radius: 0;
|
||
|
will-change: bottom, opacity;
|
||
|
}
|
||
|
|
||
|
.collapsible {
|
||
|
border-top: 1px solid #ddd;
|
||
|
border-right: 1px solid #ddd;
|
||
|
border-left: 1px solid #ddd;
|
||
|
margin: 0.5rem 0 1rem 0;
|
||
|
}
|
||
|
|
||
|
.collapsible-header {
|
||
|
display: block;
|
||
|
cursor: pointer;
|
||
|
height: 3rem;
|
||
|
line-height: 3rem;
|
||
|
padding: 0 1rem;
|
||
|
background-color: #fff;
|
||
|
border-bottom: 1px solid #ddd;
|
||
|
}
|
||
|
|
||
|
.collapsible-header i {
|
||
|
width: 2rem;
|
||
|
font-size: 1.6rem;
|
||
|
line-height: 3rem;
|
||
|
display: block;
|
||
|
float: left;
|
||
|
text-align: center;
|
||
|
margin-right: 1rem;
|
||
|
}
|
||
|
|
||
|
.collapsible-body {
|
||
|
overflow: hidden;
|
||
|
display: none;
|
||
|
border-bottom: 1px solid #ddd;
|
||
|
-webkit-box-sizing: border-box;
|
||
|
-moz-box-sizing: border-box;
|
||
|
box-sizing: border-box;
|
||
|
}
|
||
|
|
||
|
.collapsible-body p {
|
||
|
margin: 0;
|
||
|
padding: 2rem;
|
||
|
}
|
||
|
|
||
|
.side-nav .collapsible {
|
||
|
border: none;
|
||
|
box-shadow: none;
|
||
|
}
|
||
|
|
||
|
.side-nav .collapsible li {
|
||
|
padding: 0;
|
||
|
}
|
||
|
|
||
|
.side-nav .collapsible-header {
|
||
|
background-color: transparent;
|
||
|
border: none;
|
||
|
line-height: inherit;
|
||
|
height: inherit;
|
||
|
margin: 0 1rem;
|
||
|
}
|
||
|
|
||
|
.side-nav .collapsible-header i {
|
||
|
line-height: inherit;
|
||
|
}
|
||
|
|
||
|
.side-nav .collapsible-body {
|
||
|
border: 0;
|
||
|
background-color: #FFF;
|
||
|
}
|
||
|
|
||
|
.side-nav .collapsible-body li a {
|
||
|
margin: 0 1rem 0 2rem;
|
||
|
}
|
||
|
|
||
|
.collapsible.popout {
|
||
|
border: none;
|
||
|
box-shadow: none;
|
||
|
}
|
||
|
|
||
|
.collapsible.popout > li {
|
||
|
box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);
|
||
|
transform: scaleX(.92) translate3d(0, 0, 0);
|
||
|
transition: margin .35s cubic-bezier(0.25, 0.46, 0.45, 0.94), transform .35s cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
||
|
}
|
||
|
|
||
|
.collapsible.popout > li:hover {
|
||
|
will-change: margin, transform;
|
||
|
}
|
||
|
|
||
|
.collapsible.popout > li.active {
|
||
|
box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);
|
||
|
margin: 16px 0;
|
||
|
transform: scaleX(1) translate3d(0, 0, 0);
|
||
|
}
|
||
|
|
||
|
.materialboxed {
|
||
|
cursor: zoom-in;
|
||
|
position: relative;
|
||
|
-webkit-transition: opacity .4s;
|
||
|
-moz-transition: opacity .4s;
|
||
|
-o-transition: opacity .4s;
|
||
|
-ms-transition: opacity .4s;
|
||
|
transition: opacity .4s;
|
||
|
}
|
||
|
|
||
|
.materialboxed:hover {
|
||
|
will-change: left, top, width, height;
|
||
|
}
|
||
|
|
||
|
.materialboxed:hover:not(.active) {
|
||
|
opacity: .8;
|
||
|
}
|
||
|
|
||
|
.materialboxed.active {
|
||
|
cursor: zoom-out;
|
||
|
}
|
||
|
|
||
|
#materialbox-overlay {
|
||
|
position: fixed;
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
right: 0;
|
||
|
bottom: 0;
|
||
|
background-color: #292929;
|
||
|
z-index: 999;
|
||
|
will-change: opacity;
|
||
|
}
|
||
|
|
||
|
.materialbox-caption {
|
||
|
position: fixed;
|
||
|
display: none;
|
||
|
color: #fff;
|
||
|
line-height: 50px;
|
||
|
bottom: 0;
|
||
|
width: 100%;
|
||
|
text-align: center;
|
||
|
padding: 0% 15%;
|
||
|
height: 50px;
|
||
|
z-index: 1000;
|
||
|
-webkit-font-smoothing: antialiased;
|
||
|
}
|
||
|
|
||
|
/* Remove Focus Boxes */
|
||
|
select:focus {
|
||
|
outline: 1px solid #c9f3ef;
|
||
|
}
|
||
|
|
||
|
button:focus {
|
||
|
outline: none;
|
||
|
background-color: #2ab7a9;
|
||
|
}
|
||
|
|
||
|
label {
|
||
|
font-size: 0.8rem;
|
||
|
color: #9e9e9e;
|
||
|
}
|
||
|
|
||
|
/***************************
|
||
|
Text Inputs + Textarea
|
||
|
****************************/
|
||
|
::-webkit-input-placeholder {
|
||
|
color: #d1d1d1;
|
||
|
}
|
||
|
|
||
|
:-moz-placeholder {
|
||
|
/* Firefox 18- */
|
||
|
color: #d1d1d1;
|
||
|
}
|
||
|
|
||
|
::-moz-placeholder {
|
||
|
/* Firefox 19+ */
|
||
|
color: #d1d1d1;
|
||
|
}
|
||
|
|
||
|
:-ms-input-placeholder {
|
||
|
color: #d1d1d1;
|
||
|
}
|
||
|
|
||
|
input[type=text], input[type=password], input[type=email], input[type=url], input[type=time], input[type=date], input[type=datetime-local], input[type=tel], input[type=number], input[type=search], textarea.materialize-textarea {
|
||
|
background-color: transparent;
|
||
|
border: none;
|
||
|
border-bottom: 1px solid #9e9e9e;
|
||
|
border-radius: 0;
|
||
|
outline: none;
|
||
|
height: 3rem;
|
||
|
width: 100%;
|
||
|
font-size: 1rem;
|
||
|
margin: 0 0 15px 0;
|
||
|
padding: 0;
|
||
|
box-shadow: none;
|
||
|
-webkit-box-sizing: content-box;
|
||
|
-moz-box-sizing: content-box;
|
||
|
box-sizing: content-box;
|
||
|
transition: all .3s;
|
||
|
}
|
||
|
|
||
|
input[type=text]:disabled, input[type=text][readonly="readonly"], input[type=password]:disabled, input[type=password][readonly="readonly"], input[type=email]:disabled, input[type=email][readonly="readonly"], input[type=url]:disabled, input[type=url][readonly="readonly"], input[type=time]:disabled, input[type=time][readonly="readonly"], input[type=date]:disabled, input[type=date][readonly="readonly"], input[type=datetime-local]:disabled, input[type=datetime-local][readonly="readonly"], input[type=tel]:disabled, input[type=tel][readonly="readonly"], input[type=number]:disabled, input[type=number][readonly="readonly"], input[type=search]:disabled, input[type=search][readonly="readonly"], textarea.materialize-textarea:disabled, textarea.materialize-textarea[readonly="readonly"] {
|
||
|
color: rgba(0, 0, 0, 0.26);
|
||
|
border-bottom: 1px dotted rgba(0, 0, 0, 0.26);
|
||
|
}
|
||
|
|
||
|
input[type=text]:disabled + label, input[type=text][readonly="readonly"] + label, input[type=password]:disabled + label, input[type=password][readonly="readonly"] + label, input[type=email]:disabled + label, input[type=email][readonly="readonly"] + label, input[type=url]:disabled + label, input[type=url][readonly="readonly"] + label, input[type=time]:disabled + label, input[type=time][readonly="readonly"] + label, input[type=date]:disabled + label, input[type=date][readonly="readonly"] + label, input[type=datetime-local]:disabled + label, input[type=datetime-local][readonly="readonly"] + label, input[type=tel]:disabled + label, input[type=tel][readonly="readonly"] + label, input[type=number]:disabled + label, input[type=number][readonly="readonly"] + label, input[type=search]:disabled + label, input[type=search][readonly="readonly"] + label, textarea.materialize-textarea:disabled + label, textarea.materialize-textarea[readonly="readonly"] + label {
|
||
|
color: rgba(0, 0, 0, 0.26);
|
||
|
}
|
||
|
|
||
|
input[type=text]:focus:not([readonly]), input[type=password]:focus:not([readonly]), input[type=email]:focus:not([readonly]), input[type=url]:focus:not([readonly]), input[type=time]:focus:not([readonly]), input[type=date]:focus:not([readonly]), input[type=datetime-local]:focus:not([readonly]), input[type=tel]:focus:not([readonly]), input[type=number]:focus:not([readonly]), input[type=search]:focus:not([readonly]), textarea.materialize-textarea:focus:not([readonly]) {
|
||
|
border-bottom: 1px solid #26a69a;
|
||
|
box-shadow: 0 1px 0 0 #26a69a;
|
||
|
}
|
||
|
|
||
|
input[type=text]:focus:not([readonly]) + label, input[type=password]:focus:not([readonly]) + label, input[type=email]:focus:not([readonly]) + label, input[type=url]:focus:not([readonly]) + label, input[type=time]:focus:not([readonly]) + label, input[type=date]:focus:not([readonly]) + label, input[type=datetime-local]:focus:not([readonly]) + label, input[type=tel]:focus:not([readonly]) + label, input[type=number]:focus:not([readonly]) + label, input[type=search]:focus:not([readonly]) + label, textarea.materialize-textarea:focus:not([readonly]) + label {
|
||
|
color: #26a69a;
|
||
|
}
|
||
|
|
||
|
input[type=text].valid, input[type=text]:focus.valid, input[type=password].valid, input[type=password]:focus.valid, input[type=email].valid, input[type=email]:focus.valid, input[type=url].valid, input[type=url]:focus.valid, input[type=time].valid, input[type=time]:focus.valid, input[type=date].valid, input[type=date]:focus.valid, input[type=datetime-local].valid, input[type=datetime-local]:focus.valid, input[type=tel].valid, input[type=tel]:focus.valid, input[type=number].valid, input[type=number]:focus.valid, input[type=search].valid, input[type=search]:focus.valid, textarea.materialize-textarea.valid, textarea.materialize-textarea:focus.valid {
|
||
|
border-bottom: 1px solid #4CAF50;
|
||
|
box-shadow: 0 1px 0 0 #4CAF50;
|
||
|
}
|
||
|
|
||
|
input[type=text].invalid, input[type=text]:focus.invalid, input[type=password].invalid, input[type=password]:focus.invalid, input[type=email].invalid, input[type=email]:focus.invalid, input[type=url].invalid, input[type=url]:focus.invalid, input[type=time].invalid, input[type=time]:focus.invalid, input[type=date].invalid, input[type=date]:focus.invalid, input[type=datetime-local].invalid, input[type=datetime-local]:focus.invalid, input[type=tel].invalid, input[type=tel]:focus.invalid, input[type=number].invalid, input[type=number]:focus.invalid, input[type=search].invalid, input[type=search]:focus.invalid, textarea.materialize-textarea.invalid, textarea.materialize-textarea:focus.invalid {
|
||
|
border-bottom: 1px solid #F44336;
|
||
|
box-shadow: 0 1px 0 0 #F44336;
|
||
|
}
|
||
|
|
||
|
.input-field {
|
||
|
position: relative;
|
||
|
margin-top: 1rem;
|
||
|
}
|
||
|
|
||
|
.input-field label {
|
||
|
color: #9e9e9e;
|
||
|
position: absolute;
|
||
|
top: 0.8rem;
|
||
|
left: 0.75rem;
|
||
|
font-size: 1rem;
|
||
|
cursor: text;
|
||
|
-webkit-transition: .2s ease-out;
|
||
|
-moz-transition: .2s ease-out;
|
||
|
-o-transition: .2s ease-out;
|
||
|
-ms-transition: .2s ease-out;
|
||
|
transition: .2s ease-out;
|
||
|
}
|
||
|
|
||
|
.input-field label.active {
|
||
|
font-size: 0.8rem;
|
||
|
-webkit-transform: translateY(-140%);
|
||
|
-moz-transform: translateY(-140%);
|
||
|
-ms-transform: translateY(-140%);
|
||
|
-o-transform: translateY(-140%);
|
||
|
transform: translateY(-140%);
|
||
|
}
|
||
|
|
||
|
.input-field .prefix {
|
||
|
position: absolute;
|
||
|
width: 3rem;
|
||
|
font-size: 2rem;
|
||
|
-webkit-transition: color .2s;
|
||
|
-moz-transition: color .2s;
|
||
|
-o-transition: color .2s;
|
||
|
-ms-transition: color .2s;
|
||
|
transition: color .2s;
|
||
|
}
|
||
|
|
||
|
.input-field .prefix.active {
|
||
|
color: #26a69a;
|
||
|
}
|
||
|
|
||
|
.input-field .prefix ~ input, .input-field .prefix ~ textarea {
|
||
|
margin-left: 3rem;
|
||
|
width: 92%;
|
||
|
width: calc(100% - 3rem);
|
||
|
}
|
||
|
|
||
|
.input-field .prefix ~ textarea {
|
||
|
padding-top: .8rem;
|
||
|
}
|
||
|
|
||
|
.input-field .prefix ~ label {
|
||
|
margin-left: 3rem;
|
||
|
}
|
||
|
|
||
|
@media only screen and (max-width: 992px) {
|
||
|
.input-field .prefix ~ input {
|
||
|
width: 86%;
|
||
|
width: calc(100% - 3rem);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@media only screen and (max-width: 600px) {
|
||
|
.input-field .prefix ~ input {
|
||
|
width: 80%;
|
||
|
width: calc(100% - 3rem);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.input-field input[type=search] {
|
||
|
display: block;
|
||
|
line-height: inherit;
|
||
|
padding-left: 4rem;
|
||
|
width: calc(100% - 4rem);
|
||
|
}
|
||
|
|
||
|
.input-field input[type=search]:focus {
|
||
|
background-color: #FFF;
|
||
|
border: 0;
|
||
|
box-shadow: none;
|
||
|
color: #444;
|
||
|
}
|
||
|
|
||
|
.input-field input[type=search]:focus + label i, .input-field input[type=search]:focus ~ .mdi-navigation-close {
|
||
|
color: #444;
|
||
|
}
|
||
|
|
||
|
.input-field input[type=search] + label {
|
||
|
left: 1rem;
|
||
|
}
|
||
|
|
||
|
.input-field input[type=search] ~ .mdi-navigation-close {
|
||
|
position: absolute;
|
||
|
top: 0;
|
||
|
right: 1rem;
|
||
|
color: transparent;
|
||
|
cursor: pointer;
|
||
|
font-size: 2rem;
|
||
|
transition: .3s color;
|
||
|
}
|
||
|
|
||
|
textarea {
|
||
|
width: 100%;
|
||
|
height: 3rem;
|
||
|
background-color: transparent;
|
||
|
}
|
||
|
|
||
|
textarea.materialize-textarea {
|
||
|
overflow-y: hidden;
|
||
|
/* prevents scroll bar flash */
|
||
|
padding: 1.6rem 0;
|
||
|
/* prevents text jump on Enter keypress */
|
||
|
resize: none;
|
||
|
min-height: 3rem;
|
||
|
}
|
||
|
|
||
|
.hiddendiv {
|
||
|
display: none;
|
||
|
white-space: pre-wrap;
|
||
|
word-wrap: break-word;
|
||
|
overflow-wrap: break-word;
|
||
|
/* future version of deprecated 'word-wrap' */
|
||
|
padding-top: 1.2rem;
|
||
|
/* prevents text jump on Enter keypress */
|
||
|
}
|
||
|
|
||
|
/***************
|
||
|
Radio Buttons
|
||
|
***************/
|
||
|
/* Remove default Radio Buttons */
|
||
|
[type="radio"]:not(:checked), [type="radio"]:checked {
|
||
|
position: absolute;
|
||
|
left: -9999px;
|
||
|
visibility: hidden;
|
||
|
}
|
||
|
|
||
|
[type="radio"]:not(:checked) + label, [type="radio"]:checked + label {
|
||
|
position: relative;
|
||
|
padding-left: 35px;
|
||
|
cursor: pointer;
|
||
|
display: inline-block;
|
||
|
height: 25px;
|
||
|
line-height: 25px;
|
||
|
font-size: 1rem;
|
||
|
-webkit-transition: .28s ease;
|
||
|
-moz-transition: .28s ease;
|
||
|
-o-transition: .28s ease;
|
||
|
-ms-transition: .28s ease;
|
||
|
transition: .28s ease;
|
||
|
-webkit-user-select: none;
|
||
|
/* webkit (safari, chrome) browsers */
|
||
|
-moz-user-select: none;
|
||
|
/* mozilla browsers */
|
||
|
-khtml-user-select: none;
|
||
|
/* webkit (konqueror) browsers */
|
||
|
-ms-user-select: none;
|
||
|
/* IE10+ */
|
||
|
}
|
||
|
|
||
|
[type="radio"] + label:before, [type="radio"] + label:after {
|
||
|
content: '';
|
||
|
position: absolute;
|
||
|
left: 0;
|
||
|
top: 0;
|
||
|
margin: 4px;
|
||
|
width: 16px;
|
||
|
height: 16px;
|
||
|
z-index: 0;
|
||
|
-webkit-transition: .28s ease;
|
||
|
-moz-transition: .28s ease;
|
||
|
-o-transition: .28s ease;
|
||
|
-ms-transition: .28s ease;
|
||
|
transition: .28s ease;
|
||
|
}
|
||
|
|
||
|
/* Unchecked styles */
|
||
|
[type="radio"]:not(:checked) + label:before {
|
||
|
border-radius: 50%;
|
||
|
border: 2px solid #5a5a5a;
|
||
|
}
|
||
|
|
||
|
[type="radio"]:not(:checked) + label:after {
|
||
|
border-radius: 50%;
|
||
|
border: 2px solid #5a5a5a;
|
||
|
z-index: -1;
|
||
|
-webkit-transform: scale(0);
|
||
|
-moz-transform: scale(0);
|
||
|
-ms-transform: scale(0);
|
||
|
-o-transform: scale(0);
|
||
|
transform: scale(0);
|
||
|
}
|
||
|
|
||
|
/* Checked styles */
|
||
|
[type="radio"]:checked + label:before {
|
||
|
border-radius: 50%;
|
||
|
border: 2px solid transparent;
|
||
|
}
|
||
|
|
||
|
[type="radio"]:checked + label:after {
|
||
|
border-radius: 50%;
|
||
|
border: 2px solid #26a69a;
|
||
|
background-color: #26a69a;
|
||
|
z-index: 0;
|
||
|
-webkit-transform: scale(1.02);
|
||
|
-moz-transform: scale(1.02);
|
||
|
-ms-transform: scale(1.02);
|
||
|
-o-transform: scale(1.02);
|
||
|
transform: scale(1.02);
|
||
|
}
|
||
|
|
||
|
/* Radio With gap */
|
||
|
[type="radio"].with-gap:checked + label:before {
|
||
|
border-radius: 50%;
|
||
|
border: 2px solid #26a69a;
|
||
|
}
|
||
|
|
||
|
[type="radio"].with-gap:checked + label:after {
|
||
|
border-radius: 50%;
|
||
|
border: 2px solid #26a69a;
|
||
|
background-color: #26a69a;
|
||
|
z-index: 0;
|
||
|
-webkit-transform: scale(.5);
|
||
|
-moz-transform: scale(.5);
|
||
|
-ms-transform: scale(.5);
|
||
|
-o-transform: scale(.5);
|
||
|
transform: scale(.5);
|
||
|
}
|
||
|
|
||
|
/* Disabled style */
|
||
|
[type="radio"]:disabled:not(:checked) + label:before, [type="radio"]:disabled:checked + label:before {
|
||
|
background-color: transparent;
|
||
|
border-color: rgba(0, 0, 0, 0.26);
|
||
|
}
|
||
|
|
||
|
[type="radio"]:disabled + label {
|
||
|
color: rgba(0, 0, 0, 0.26);
|
||
|
}
|
||
|
|
||
|
[type="radio"]:disabled:not(:checked) + label:hover:before {
|
||
|
border-color: rgba(0, 0, 0, 0.26);
|
||
|
}
|
||
|
|
||
|
/***************
|
||
|
Checkboxes
|
||
|
***************/
|
||
|
/* CUSTOM CSS CHECKBOXES */
|
||
|
form p {
|
||
|
margin-bottom: 10px;
|
||
|
text-align: left;
|
||
|
}
|
||
|
|
||
|
form p:last-child {
|
||
|
margin-bottom: 0;
|
||
|
}
|
||
|
|
||
|
/* Remove default checkbox */
|
||
|
[type="checkbox"]:not(:checked), [type="checkbox"]:checked {
|
||
|
position: absolute;
|
||
|
left: -9999px;
|
||
|
}
|
||
|
|
||
|
[type="checkbox"] {
|
||
|
/* checkbox aspect */
|
||
|
}
|
||
|
|
||
|
[type="checkbox"] + label {
|
||
|
position: relative;
|
||
|
padding-left: 35px;
|
||
|
cursor: pointer;
|
||
|
display: inline-block;
|
||
|
height: 25px;
|
||
|
line-height: 25px;
|
||
|
font-size: 1rem;
|
||
|
-webkit-user-select: none;
|
||
|
/* webkit (safari, chrome) browsers */
|
||
|
-moz-user-select: none;
|
||
|
/* mozilla browsers */
|
||
|
-khtml-user-select: none;
|
||
|
/* webkit (konqueror) browsers */
|
||
|
-ms-user-select: none;
|
||
|
/* IE10+ */
|
||
|
}
|
||
|
|
||
|
[type="checkbox"] + label:before {
|
||
|
content: '';
|
||
|
position: absolute;
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
width: 18px;
|
||
|
height: 18px;
|
||
|
z-index: 0;
|
||
|
border: 2px solid #5a5a5a;
|
||
|
border-radius: 1px;
|
||
|
margin-top: 2px;
|
||
|
-webkit-transition: 0.2s;
|
||
|
-moz-transition: 0.2s;
|
||
|
-o-transition: 0.2s;
|
||
|
-ms-transition: 0.2s;
|
||
|
transition: 0.2s;
|
||
|
}
|
||
|
|
||
|
[type="checkbox"]:not(:checked):disabled + label:before {
|
||
|
border: none;
|
||
|
background-color: rgba(0, 0, 0, 0.26);
|
||
|
}
|
||
|
|
||
|
[type="checkbox"]:checked + label:before {
|
||
|
top: -4px;
|
||
|
left: -3px;
|
||
|
width: 12px;
|
||
|
height: 22px;
|
||
|
border-top: 2px solid transparent;
|
||
|
border-left: 2px solid transparent;
|
||
|
border-right: 2px solid #26a69a;
|
||
|
border-bottom: 2px solid #26a69a;
|
||
|
-webkit-transform: rotate(40deg);
|
||
|
-moz-transform: rotate(40deg);
|
||
|
-ms-transform: rotate(40deg);
|
||
|
-o-transform: rotate(40deg);
|
||
|
transform: rotate(40deg);
|
||
|
-webkit-backface-visibility: hidden;
|
||
|
-webkit-transform-origin: 100% 100%;
|
||
|
-moz-transform-origin: 100% 100%;
|
||
|
-ms-transform-origin: 100% 100%;
|
||
|
-o-transform-origin: 100% 100%;
|
||
|
transform-origin: 100% 100%;
|
||
|
}
|
||
|
|
||
|
[type="checkbox"]:checked:disabled + label:before {
|
||
|
border-right: 2px solid rgba(0, 0, 0, 0.26);
|
||
|
border-bottom: 2px solid rgba(0, 0, 0, 0.26);
|
||
|
}
|
||
|
|
||
|
/* Indeterminate checkbox */
|
||
|
[type="checkbox"]:indeterminate + label:before {
|
||
|
left: -10px;
|
||
|
top: -11px;
|
||
|
width: 10px;
|
||
|
height: 22px;
|
||
|
border-top: none;
|
||
|
border-left: none;
|
||
|
border-right: 2px solid #26a69a;
|
||
|
border-bottom: none;
|
||
|
-webkit-transform: rotate(90deg);
|
||
|
-moz-transform: rotate(90deg);
|
||
|
-ms-transform: rotate(90deg);
|
||
|
-o-transform: rotate(90deg);
|
||
|
transform: rotate(90deg);
|
||
|
-webkit-backface-visibility: hidden;
|
||
|
-webkit-transform-origin: 100% 100%;
|
||
|
-moz-transform-origin: 100% 100%;
|
||
|
-ms-transform-origin: 100% 100%;
|
||
|
-o-transform-origin: 100% 100%;
|
||
|
transform-origin: 100% 100%;
|
||
|
}
|
||
|
|
||
|
[type="checkbox"]:indeterminate:disabled + label:before {
|
||
|
border-right: 2px solid rgba(0, 0, 0, 0.26);
|
||
|
background-color: transparent;
|
||
|
}
|
||
|
|
||
|
[type="checkbox"].filled-in + label:after {
|
||
|
border-radius: 2px;
|
||
|
}
|
||
|
|
||
|
[type="checkbox"].filled-in + label:before, [type="checkbox"].filled-in + label:after {
|
||
|
content: '';
|
||
|
left: 0;
|
||
|
position: absolute;
|
||
|
/* .1s delay is for check animation */
|
||
|
transition: border .25s, background-color .25s, width .2s .1s, height .2s .1s, top .2s .1s, left .2s .1s;
|
||
|
z-index: 1;
|
||
|
}
|
||
|
|
||
|
[type="checkbox"].filled-in:not(:checked) + label:before {
|
||
|
width: 0;
|
||
|
height: 0;
|
||
|
border: 3px solid transparent;
|
||
|
left: 6px;
|
||
|
top: 10px;
|
||
|
-webkit-transform: rotateZ(37deg);
|
||
|
transform: rotateZ(37deg);
|
||
|
-webkit-transform-origin: 20% 40%;
|
||
|
transform-origin: 100% 100%;
|
||
|
}
|
||
|
|
||
|
[type="checkbox"].filled-in:not(:checked) + label:after {
|
||
|
height: 20px;
|
||
|
width: 20px;
|
||
|
background-color: transparent;
|
||
|
border: 2px solid #5a5a5a;
|
||
|
top: 0px;
|
||
|
z-index: 0;
|
||
|
}
|
||
|
|
||
|
[type="checkbox"].filled-in:checked + label:before {
|
||
|
top: 0;
|
||
|
left: 1px;
|
||
|
width: 8px;
|
||
|
height: 13px;
|
||
|
border-top: 2px solid transparent;
|
||
|
border-left: 2px solid transparent;
|
||
|
border-right: 2px solid #fff;
|
||
|
border-bottom: 2px solid #fff;
|
||
|
-webkit-transform: rotateZ(37deg);
|
||
|
transform: rotateZ(37deg);
|
||
|
-webkit-transform-origin: 100% 100%;
|
||
|
transform-origin: 100% 100%;
|
||
|
}
|
||
|
|
||
|
[type="checkbox"].filled-in:checked + label:after {
|
||
|
top: 0px;
|
||
|
width: 20px;
|
||
|
height: 20px;
|
||
|
border: 2px solid #26a69a;
|
||
|
background-color: #26a69a;
|
||
|
z-index: 0;
|
||
|
}
|
||
|
|
||
|
[type="checkbox"].filled-in:disabled:not(:checked) + label:before {
|
||
|
background-color: transparent;
|
||
|
border: 2px solid transparent;
|
||
|
}
|
||
|
|
||
|
[type="checkbox"].filled-in:disabled:not(:checked) + label:after {
|
||
|
border-color: transparent;
|
||
|
background-color: #BDBDBD;
|
||
|
}
|
||
|
|
||
|
[type="checkbox"].filled-in:disabled:checked + label:before {
|
||
|
background-color: transparent;
|
||
|
}
|
||
|
|
||
|
[type="checkbox"].filled-in:disabled:checked + label:after {
|
||
|
background-color: #BDBDBD;
|
||
|
border-color: #BDBDBD;
|
||
|
}
|
||
|
|
||
|
/***************
|
||
|
Switch
|
||
|
***************/
|
||
|
.switch, .switch * {
|
||
|
-webkit-user-select: none;
|
||
|
-moz-user-select: none;
|
||
|
-khtml-user-select: none;
|
||
|
-ms-user-select: none;
|
||
|
}
|
||
|
|
||
|
.switch label {
|
||
|
cursor: pointer;
|
||
|
}
|
||
|
|
||
|
.switch label input[type=checkbox] {
|
||
|
opacity: 0;
|
||
|
width: 0;
|
||
|
height: 0;
|
||
|
}
|
||
|
|
||
|
.switch label input[type=checkbox]:checked + .lever {
|
||
|
background-color: #84c7c1;
|
||
|
}
|
||
|
|
||
|
.switch label input[type=checkbox]:checked + .lever:after {
|
||
|
background-color: #26a69a;
|
||
|
}
|
||
|
|
||
|
.switch label .lever {
|
||
|
content: "";
|
||
|
display: inline-block;
|
||
|
position: relative;
|
||
|
width: 40px;
|
||
|
height: 15px;
|
||
|
background-color: #818181;
|
||
|
border-radius: 15px;
|
||
|
margin-right: 10px;
|
||
|
transition: background 0.3s ease;
|
||
|
vertical-align: middle;
|
||
|
margin: 0 16px;
|
||
|
}
|
||
|
|
||
|
.switch label .lever:after {
|
||
|
content: "";
|
||
|
position: absolute;
|
||
|
display: inline-block;
|
||
|
width: 21px;
|
||
|
height: 21px;
|
||
|
background-color: #F1F1F1;
|
||
|
border-radius: 21px;
|
||
|
box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4);
|
||
|
left: -5px;
|
||
|
top: -3px;
|
||
|
transition: left 0.3s ease, background 0.3s ease, box-shadow 0.1s ease;
|
||
|
}
|
||
|
|
||
|
input[type=checkbox]:checked:not(:disabled) ~ .lever:active:after {
|
||
|
box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(38, 166, 154, 0.1);
|
||
|
}
|
||
|
|
||
|
input[type=checkbox]:not(:disabled) ~ .lever:active:after {
|
||
|
box-shadow: 0 1px 3px 1px rgba(0, 0, 0, 0.4), 0 0 0 15px rgba(0, 0, 0, 0.08);
|
||
|
}
|
||
|
|
||
|
.switch label input[type=checkbox]:checked + .lever:after {
|
||
|
left: 24px;
|
||
|
}
|
||
|
|
||
|
.switch input[type=checkbox][disabled] + .lever {
|
||
|
cursor: default;
|
||
|
}
|
||
|
|
||
|
.switch label input[type=checkbox][disabled] + .lever:after, .switch label input[type=checkbox][disabled]:checked + .lever:after {
|
||
|
background-color: #BDBDBD;
|
||
|
}
|
||
|
|
||
|
/***************
|
||
|
Select Field
|
||
|
***************/
|
||
|
.select-label {
|
||
|
position: absolute;
|
||
|
}
|
||
|
|
||
|
.select-wrapper {
|
||
|
position: relative;
|
||
|
}
|
||
|
|
||
|
.select-wrapper input.select-dropdown {
|
||
|
position: relative;
|
||
|
cursor: pointer;
|
||
|
background-color: transparent;
|
||
|
border: none;
|
||
|
border-bottom: 1px solid #9e9e9e;
|
||
|
outline: none;
|
||
|
height: 3rem;
|
||
|
line-height: 3rem;
|
||
|
width: 100%;
|
||
|
font-size: 1rem;
|
||
|
margin: 0 0 15px 0;
|
||
|
padding: 0;
|
||
|
display: block;
|
||
|
}
|
||
|
|
||
|
.select-wrapper .mdi-navigation-arrow-drop-down {
|
||
|
color: initial;
|
||
|
position: absolute;
|
||
|
right: 0;
|
||
|
top: 0;
|
||
|
font-size: 23px;
|
||
|
}
|
||
|
|
||
|
.select-wrapper .mdi-navigation-arrow-drop-down.disabled {
|
||
|
color: rgba(0, 0, 0, 0.26);
|
||
|
}
|
||
|
|
||
|
.select-wrapper + label {
|
||
|
position: absolute;
|
||
|
top: -14px;
|
||
|
font-size: 0.8rem;
|
||
|
}
|
||
|
|
||
|
select {
|
||
|
display: none;
|
||
|
}
|
||
|
|
||
|
select.browser-default {
|
||
|
display: block;
|
||
|
}
|
||
|
|
||
|
select:disabled {
|
||
|
color: rgba(0, 0, 0, 0.3);
|
||
|
}
|
||
|
|
||
|
.select-wrapper input.select-dropdown:disabled {
|
||
|
color: rgba(0, 0, 0, 0.3);
|
||
|
cursor: default;
|
||
|
-webkit-user-select: none;
|
||
|
/* webkit (safari, chrome) browsers */
|
||
|
-moz-user-select: none;
|
||
|
/* mozilla browsers */
|
||
|
-ms-user-select: none;
|
||
|
/* IE10+ */
|
||
|
border-bottom: 1px solid rgba(0, 0, 0, 0.3);
|
||
|
}
|
||
|
|
||
|
.select-wrapper i {
|
||
|
color: rgba(0, 0, 0, 0.3);
|
||
|
}
|
||
|
|
||
|
.select-dropdown li.disabled {
|
||
|
color: rgba(0, 0, 0, 0.3);
|
||
|
background-color: transparent;
|
||
|
}
|
||
|
|
||
|
/***************************
|
||
|
Text Inputs + Textarea
|
||
|
****************************/
|
||
|
select {
|
||
|
background-color: rgba(255, 255, 255, 0.9);
|
||
|
width: 100%;
|
||
|
padding: 5px;
|
||
|
border: 1px solid #f2f2f2;
|
||
|
border-radius: 2px;
|
||
|
height: 3rem;
|
||
|
}
|
||
|
|
||
|
/***************
|
||
|
Nav List
|
||
|
***************/
|
||
|
.table-of-contents.fixed {
|
||
|
position: fixed;
|
||
|
}
|
||
|
|
||
|
.table-of-contents li {
|
||
|
padding: 2px 0;
|
||
|
}
|
||
|
|
||
|
.table-of-contents a {
|
||
|
display: inline-block;
|
||
|
font-weight: 300;
|
||
|
color: #757575;
|
||
|
padding-left: 20px;
|
||
|
height: 1.5rem;
|
||
|
line-height: 1.5rem;
|
||
|
letter-spacing: .4;
|
||
|
display: inline-block;
|
||
|
}
|
||
|
|
||
|
.table-of-contents a:hover {
|
||
|
color: #a8a8a8;
|
||
|
padding-left: 19px;
|
||
|
border-left: 1px solid #ea4a4f;
|
||
|
}
|
||
|
|
||
|
.table-of-contents a.active {
|
||
|
font-weight: 500;
|
||
|
padding-left: 18px;
|
||
|
border-left: 2px solid #ea4a4f;
|
||
|
}
|
||
|
|
||
|
.side-nav {
|
||
|
position: fixed;
|
||
|
width: 240px;
|
||
|
left: -105%;
|
||
|
top: 0;
|
||
|
margin: 0;
|
||
|
height: 100%;
|
||
|
height: calc(100% + 60px);
|
||
|
height: -moz-calc(100%);
|
||
|
padding-bottom: 60px;
|
||
|
background-color: #FFF;
|
||
|
z-index: 999;
|
||
|
overflow-y: auto;
|
||
|
will-change: left;
|
||
|
}
|
||
|
|
||
|
.side-nav.right-aligned {
|
||
|
will-change: right;
|
||
|
right: -105%;
|
||
|
left: auto;
|
||
|
}
|
||
|
|
||
|
.side-nav .collapsible {
|
||
|
margin: 0;
|
||
|
}
|
||
|
|
||
|
.side-nav li {
|
||
|
float: none;
|
||
|
padding: 0 15px;
|
||
|
}
|
||
|
|
||
|
.side-nav li:hover, .side-nav li.active {
|
||
|
background-color: #ddd;
|
||
|
}
|
||
|
|
||
|
.side-nav a {
|
||
|
color: #444;
|
||
|
display: block;
|
||
|
font-size: 1rem;
|
||
|
height: 64px;
|
||
|
line-height: 64px;
|
||
|
padding: 0 15px;
|
||
|
}
|
||
|
|
||
|
.drag-target {
|
||
|
height: 100%;
|
||
|
width: 10px;
|
||
|
position: fixed;
|
||
|
top: 0;
|
||
|
z-index: 998;
|
||
|
}
|
||
|
|
||
|
.side-nav.fixed a {
|
||
|
display: block;
|
||
|
padding: 0 15px;
|
||
|
color: #444;
|
||
|
}
|
||
|
|
||
|
.side-nav.fixed {
|
||
|
left: 0;
|
||
|
position: fixed;
|
||
|
}
|
||
|
|
||
|
.side-nav.fixed.right-aligned {
|
||
|
right: 0;
|
||
|
left: auto;
|
||
|
}
|
||
|
|
||
|
@media only screen and (max-width: 992px) {
|
||
|
.side-nav.fixed {
|
||
|
left: -105%;
|
||
|
}
|
||
|
|
||
|
.side-nav.fixed.right-aligned {
|
||
|
right: -105%;
|
||
|
left: auto;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.side-nav .collapsible-body li.active, .side-nav.fixed .collapsible-body li.active {
|
||
|
background-color: #ee6e73;
|
||
|
}
|
||
|
|
||
|
.side-nav .collapsible-body li.active a, .side-nav.fixed .collapsible-body li.active a {
|
||
|
color: #fff;
|
||
|
}
|
||
|
|
||
|
#sidenav-overlay {
|
||
|
position: fixed;
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
right: 0;
|
||
|
height: 120vh;
|
||
|
background-color: rgba(0, 0, 0, 0.5);
|
||
|
z-index: 997;
|
||
|
will-change: opacity;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**************************/
|
||
|
/* STYLES FOR THE SPINNER */
|
||
|
/**************************/
|
||
|
/*
|
||
|
* Constants:
|
||
|
* STROKEWIDTH = 3px
|
||
|
* ARCSIZE = 270 degrees (amount of circle the arc takes up)
|
||
|
* ARCTIME = 1333ms (time it takes to expand and contract arc)
|
||
|
* ARCSTARTROT = 216 degrees (how much the start location of the arc
|
||
|
* should rotate each time, 216 gives us a
|
||
|
* 5 pointed star shape (it's 360/5 * 3).
|
||
|
* For a 7 pointed star, we might do
|
||
|
* 360/7 * 3 = 154.286)
|
||
|
* CONTAINERWIDTH = 28px
|
||
|
* SHRINK_TIME = 400ms
|
||
|
*/
|
||
|
.preloader-wrapper {
|
||
|
display: inline-block;
|
||
|
position: relative;
|
||
|
width: 48px;
|
||
|
height: 48px;
|
||
|
}
|
||
|
|
||
|
.preloader-wrapper.small {
|
||
|
width: 36px;
|
||
|
height: 36px;
|
||
|
}
|
||
|
|
||
|
.preloader-wrapper.big {
|
||
|
width: 64px;
|
||
|
height: 64px;
|
||
|
}
|
||
|
|
||
|
.preloader-wrapper.active {
|
||
|
/* duration: 360 * ARCTIME / (ARCSTARTROT + (360-ARCSIZE)) */
|
||
|
-webkit-animation: container-rotate 1568ms linear infinite;
|
||
|
animation: container-rotate 1568ms linear infinite;
|
||
|
}
|
||
|
|
||
|
@-webkit-keyframes container-rotate {
|
||
|
to {
|
||
|
-webkit-transform: rotate(360deg);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@keyframes container-rotate {
|
||
|
to {
|
||
|
transform: rotate(360deg);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.spinner-layer {
|
||
|
position: absolute;
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
.spinner-blue, .spinner-blue-only {
|
||
|
border-color: #4285f4;
|
||
|
}
|
||
|
|
||
|
.spinner-red, .spinner-red-only {
|
||
|
border-color: #db4437;
|
||
|
}
|
||
|
|
||
|
.spinner-yellow, .spinner-yellow-only {
|
||
|
border-color: #f4b400;
|
||
|
}
|
||
|
|
||
|
.spinner-green, .spinner-green-only {
|
||
|
border-color: #0f9d58;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* IMPORTANT NOTE ABOUT CSS ANIMATION PROPERTIES (keanulee):
|
||
|
*
|
||
|
* iOS Safari (tested on iOS 8.1) does not handle animation-delay very well - it doesn't
|
||
|
* guarantee that the animation will start _exactly_ after that value. So we avoid using
|
||
|
* animation-delay and instead set custom keyframes for each color (as redundant as it
|
||
|
* seems).
|
||
|
*
|
||
|
* We write out each animation in full (instead of separating animation-name,
|
||
|
* animation-duration, etc.) because under the polyfill, Safari does not recognize those
|
||
|
* specific properties properly, treats them as -webkit-animation, and overrides the
|
||
|
* other animation rules. See https://github.com/Polymer/platform/issues/53.
|
||
|
*/
|
||
|
.active .spinner-layer.spinner-blue {
|
||
|
/* durations: 4 * ARCTIME */
|
||
|
-webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
|
||
|
animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
|
||
|
}
|
||
|
|
||
|
.active .spinner-layer.spinner-red {
|
||
|
/* durations: 4 * ARCTIME */
|
||
|
-webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
|
||
|
animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
|
||
|
}
|
||
|
|
||
|
.active .spinner-layer.spinner-yellow {
|
||
|
/* durations: 4 * ARCTIME */
|
||
|
-webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
|
||
|
animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
|
||
|
}
|
||
|
|
||
|
.active .spinner-layer.spinner-green {
|
||
|
/* durations: 4 * ARCTIME */
|
||
|
-webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
|
||
|
animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both, green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
|
||
|
}
|
||
|
|
||
|
.active .spinner-layer.spinner-blue-only, .active .spinner-layer.spinner-red-only, .active .spinner-layer.spinner-yellow-only, .active .spinner-layer.spinner-green-only {
|
||
|
/* durations: 4 * ARCTIME */
|
||
|
opacity: 1;
|
||
|
-webkit-animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
|
||
|
animation: fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
|
||
|
}
|
||
|
|
||
|
@-webkit-keyframes fill-unfill-rotate {
|
||
|
/* 0.5 * ARCSIZE */
|
||
|
/* 1 * ARCSIZE */
|
||
|
/* 1.5 * ARCSIZE */
|
||
|
/* 2 * ARCSIZE */
|
||
|
/* 2.5 * ARCSIZE */
|
||
|
/* 3 * ARCSIZE */
|
||
|
/* 3.5 * ARCSIZE */
|
||
|
/* 4 * ARCSIZE */
|
||
|
12.5% {
|
||
|
-webkit-transform: rotate(135deg);
|
||
|
}
|
||
|
|
||
|
25% {
|
||
|
-webkit-transform: rotate(270deg);
|
||
|
}
|
||
|
|
||
|
37.5% {
|
||
|
-webkit-transform: rotate(405deg);
|
||
|
}
|
||
|
|
||
|
50% {
|
||
|
-webkit-transform: rotate(540deg);
|
||
|
}
|
||
|
|
||
|
62.5% {
|
||
|
-webkit-transform: rotate(675deg);
|
||
|
}
|
||
|
|
||
|
75% {
|
||
|
-webkit-transform: rotate(810deg);
|
||
|
}
|
||
|
|
||
|
87.5% {
|
||
|
-webkit-transform: rotate(945deg);
|
||
|
}
|
||
|
|
||
|
to {
|
||
|
-webkit-transform: rotate(1080deg);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@keyframes fill-unfill-rotate {
|
||
|
/* 0.5 * ARCSIZE */
|
||
|
/* 1 * ARCSIZE */
|
||
|
/* 1.5 * ARCSIZE */
|
||
|
/* 2 * ARCSIZE */
|
||
|
/* 2.5 * ARCSIZE */
|
||
|
/* 3 * ARCSIZE */
|
||
|
/* 3.5 * ARCSIZE */
|
||
|
/* 4 * ARCSIZE */
|
||
|
12.5% {
|
||
|
transform: rotate(135deg);
|
||
|
}
|
||
|
|
||
|
25% {
|
||
|
transform: rotate(270deg);
|
||
|
}
|
||
|
|
||
|
37.5% {
|
||
|
transform: rotate(405deg);
|
||
|
}
|
||
|
|
||
|
50% {
|
||
|
transform: rotate(540deg);
|
||
|
}
|
||
|
|
||
|
62.5% {
|
||
|
transform: rotate(675deg);
|
||
|
}
|
||
|
|
||
|
75% {
|
||
|
transform: rotate(810deg);
|
||
|
}
|
||
|
|
||
|
87.5% {
|
||
|
transform: rotate(945deg);
|
||
|
}
|
||
|
|
||
|
to {
|
||
|
transform: rotate(1080deg);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@-webkit-keyframes blue-fade-in-out {
|
||
|
from {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
25% {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
26% {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
89% {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
90% {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
100% {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@keyframes blue-fade-in-out {
|
||
|
from {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
25% {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
26% {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
89% {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
90% {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
100% {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@-webkit-keyframes red-fade-in-out {
|
||
|
from {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
15% {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
25% {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
50% {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
51% {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@keyframes red-fade-in-out {
|
||
|
from {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
15% {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
25% {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
50% {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
51% {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@-webkit-keyframes yellow-fade-in-out {
|
||
|
from {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
40% {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
50% {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
75% {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
76% {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@keyframes yellow-fade-in-out {
|
||
|
from {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
40% {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
50% {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
75% {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
76% {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@-webkit-keyframes green-fade-in-out {
|
||
|
from {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
65% {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
75% {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
90% {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
100% {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@keyframes green-fade-in-out {
|
||
|
from {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
65% {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
75% {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
90% {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
100% {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Patch the gap that appear between the two adjacent div.circle-clipper while the
|
||
|
* spinner is rotating (appears on Chrome 38, Safari 7.1, and IE 11).
|
||
|
*/
|
||
|
.gap-patch {
|
||
|
position: absolute;
|
||
|
top: 0;
|
||
|
left: 45%;
|
||
|
width: 10%;
|
||
|
height: 100%;
|
||
|
overflow: hidden;
|
||
|
border-color: inherit;
|
||
|
}
|
||
|
|
||
|
.gap-patch .circle {
|
||
|
width: 1000%;
|
||
|
left: -450%;
|
||
|
}
|
||
|
|
||
|
.circle-clipper {
|
||
|
display: inline-block;
|
||
|
position: relative;
|
||
|
width: 50%;
|
||
|
height: 100%;
|
||
|
overflow: hidden;
|
||
|
border-color: inherit;
|
||
|
}
|
||
|
|
||
|
.circle-clipper .circle {
|
||
|
width: 200%;
|
||
|
height: 100%;
|
||
|
border-width: 3px;
|
||
|
/* STROKEWIDTH */
|
||
|
border-style: solid;
|
||
|
border-color: inherit;
|
||
|
border-bottom-color: transparent !important;
|
||
|
border-radius: 50%;
|
||
|
-webkit-animation: none;
|
||
|
animation: none;
|
||
|
position: absolute;
|
||
|
top: 0;
|
||
|
right: 0;
|
||
|
bottom: 0;
|
||
|
}
|
||
|
|
||
|
.circle-clipper.left .circle {
|
||
|
left: 0;
|
||
|
border-right-color: transparent !important;
|
||
|
-webkit-transform: rotate(129deg);
|
||
|
transform: rotate(129deg);
|
||
|
}
|
||
|
|
||
|
.circle-clipper.right .circle {
|
||
|
left: -100%;
|
||
|
border-left-color: transparent !important;
|
||
|
-webkit-transform: rotate(-129deg);
|
||
|
transform: rotate(-129deg);
|
||
|
}
|
||
|
|
||
|
.active .circle-clipper.left .circle {
|
||
|
/* duration: ARCTIME */
|
||
|
-webkit-animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
|
||
|
animation: left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
|
||
|
}
|
||
|
|
||
|
.active .circle-clipper.right .circle {
|
||
|
/* duration: ARCTIME */
|
||
|
-webkit-animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
|
||
|
animation: right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;
|
||
|
}
|
||
|
|
||
|
@-webkit-keyframes left-spin {
|
||
|
from {
|
||
|
-webkit-transform: rotate(130deg);
|
||
|
}
|
||
|
|
||
|
50% {
|
||
|
-webkit-transform: rotate(-5deg);
|
||
|
}
|
||
|
|
||
|
to {
|
||
|
-webkit-transform: rotate(130deg);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@keyframes left-spin {
|
||
|
from {
|
||
|
transform: rotate(130deg);
|
||
|
}
|
||
|
|
||
|
50% {
|
||
|
transform: rotate(-5deg);
|
||
|
}
|
||
|
|
||
|
to {
|
||
|
transform: rotate(130deg);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@-webkit-keyframes right-spin {
|
||
|
from {
|
||
|
-webkit-transform: rotate(-130deg);
|
||
|
}
|
||
|
|
||
|
50% {
|
||
|
-webkit-transform: rotate(5deg);
|
||
|
}
|
||
|
|
||
|
to {
|
||
|
-webkit-transform: rotate(-130deg);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@keyframes right-spin {
|
||
|
from {
|
||
|
transform: rotate(-130deg);
|
||
|
}
|
||
|
|
||
|
50% {
|
||
|
transform: rotate(5deg);
|
||
|
}
|
||
|
|
||
|
to {
|
||
|
transform: rotate(-130deg);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#spinnerContainer.cooldown {
|
||
|
/* duration: SHRINK_TIME */
|
||
|
-webkit-animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);
|
||
|
animation: container-rotate 1568ms linear infinite, fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);
|
||
|
}
|
||
|
|
||
|
@-webkit-keyframes fade-out {
|
||
|
from {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
to {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@keyframes fade-out {
|
||
|
from {
|
||
|
opacity: 1;
|
||
|
}
|
||
|
|
||
|
to {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.slider {
|
||
|
position: relative;
|
||
|
height: 440px;
|
||
|
width: 100%;
|
||
|
}
|
||
|
|
||
|
.slider.fullscreen {
|
||
|
height: 100%;
|
||
|
width: 100%;
|
||
|
position: absolute;
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
right: 0;
|
||
|
bottom: 0;
|
||
|
}
|
||
|
|
||
|
.slider.fullscreen ul.slides {
|
||
|
height: 100%;
|
||
|
}
|
||
|
|
||
|
.slider.fullscreen ul.indicators {
|
||
|
z-index: 2;
|
||
|
bottom: 30px;
|
||
|
}
|
||
|
|
||
|
.slider .slides {
|
||
|
background-color: #9e9e9e;
|
||
|
margin: 0;
|
||
|
height: 400px;
|
||
|
}
|
||
|
|
||
|
.slider .slides li {
|
||
|
opacity: 0;
|
||
|
position: absolute;
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
z-index: 1;
|
||
|
width: 100%;
|
||
|
height: inherit;
|
||
|
overflow: hidden;
|
||
|
}
|
||
|
|
||
|
.slider .slides li img {
|
||
|
height: 100%;
|
||
|
width: 100%;
|
||
|
background-size: cover;
|
||
|
background-position: center;
|
||
|
}
|
||
|
|
||
|
.slider .slides li .caption {
|
||
|
color: #fff;
|
||
|
position: absolute;
|
||
|
top: 15%;
|
||
|
left: 15%;
|
||
|
width: 70%;
|
||
|
opacity: 0;
|
||
|
}
|
||
|
|
||
|
.slider .slides li .caption p {
|
||
|
color: #e0e0e0;
|
||
|
}
|
||
|
|
||
|
.slider .slides li.active {
|
||
|
z-index: 2;
|
||
|
}
|
||
|
|
||
|
.slider .indicators {
|
||
|
position: absolute;
|
||
|
text-align: center;
|
||
|
left: 0;
|
||
|
right: 0;
|
||
|
bottom: 0;
|
||
|
margin: 0;
|
||
|
}
|
||
|
|
||
|
.slider .indicators .indicator-item {
|
||
|
display: inline-block;
|
||
|
position: relative;
|
||
|
cursor: pointer;
|
||
|
height: 16px;
|
||
|
width: 16px;
|
||
|
margin: 0 12px;
|
||
|
background-color: #e0e0e0;
|
||
|
-webkit-transition: background-color .3s;
|
||
|
-moz-transition: background-color .3s;
|
||
|
-o-transition: background-color .3s;
|
||
|
-ms-transition: background-color .3s;
|
||
|
transition: background-color .3s;
|
||
|
border-radius: 50%;
|
||
|
}
|
||
|
|
||
|
.slider .indicators .indicator-item.active {
|
||
|
background-color: #4CAF50;
|
||
|
}
|
||
|
.btn-qr {
|
||
|
line-height: 25px;
|
||
|
height: 25px;
|
||
|
font-size: 60%;
|
||
|
padding: 0px 1.5rem;
|
||
|
}
|
||
|
#address_widget, #spend_key_widget, #view_key_widget,
|
||
|
#mnemonic_address, #privatekeys_address {
|
||
|
font-family: monospace;
|
||
|
overflow-wrap: break-word;
|
||
|
}
|
||
|
|
||
|
|
||
|
</style>
|
||
|
<style>
|
||
|
.print-only {
|
||
|
display: none;
|
||
|
}
|
||
|
@media print {
|
||
|
.qrcode {
|
||
|
display: inline-block !important;
|
||
|
position: relative !important;
|
||
|
margin: auto !important;
|
||
|
left: initial !important;
|
||
|
}
|
||
|
#address_widget, #spend_key_widget, #view_key_widget {
|
||
|
font-size: 1.2em !important;
|
||
|
}
|
||
|
#mnemonic_address, #privatekeys_address {
|
||
|
font-size: 0.7em !important;
|
||
|
}
|
||
|
.card-content table td{
|
||
|
display: inline-table;
|
||
|
}
|
||
|
.print_break_before {
|
||
|
margin-top: 25em;
|
||
|
}
|
||
|
.page-footer { display: none; }
|
||
|
input { display: none !important; }
|
||
|
.noprint { display: none; }
|
||
|
.print-only { display: block; }
|
||
|
}
|
||
|
</style>
|
||
|
</head>
|
||
|
<body>
|
||
|
<script>
|
||
|
|
||
|
var JSBigInt = (function () {
|
||
|
"use strict";
|
||
|
/*
|
||
|
Class: BigInteger
|
||
|
An arbitrarily-large integer.
|
||
|
|
||
|
<BigInteger> objects should be considered immutable. None of the "built-in"
|
||
|
methods modify *this* or their arguments. All properties should be
|
||
|
considered private.
|
||
|
|
||
|
All the methods of <BigInteger> instances can be called "statically". The
|
||
|
static versions are convenient if you don't already have a <BigInteger>
|
||
|
object.
|
||
|
|
||
|
As an example, these calls are equivalent.
|
||
|
|
||
|
> BigInteger(4).multiply(5); // returns BigInteger(20);
|
||
|
> BigInteger.multiply(4, 5); // returns BigInteger(20);
|
||
|
|
||
|
> var a = 42;
|
||
|
> var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
|
||
|
*/
|
||
|
|
||
|
var CONSTRUCT = {}; // Unique token to call "private" version of constructor
|
||
|
|
||
|
/*
|
||
|
Constructor: BigInteger()
|
||
|
Convert a value to a <BigInteger>.
|
||
|
|
||
|
Although <BigInteger()> is the constructor for <BigInteger> objects, it is
|
||
|
best not to call it as a constructor. If *n* is a <BigInteger> object, it is
|
||
|
simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
|
||
|
without a radix argument.
|
||
|
|
||
|
> var n0 = BigInteger(); // Same as <BigInteger.ZERO>
|
||
|
> var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
|
||
|
> var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
|
||
|
> var n3 = BigInteger(n2); // Return n2, unchanged
|
||
|
|
||
|
The constructor form only takes an array and a sign. *n* must be an
|
||
|
array of numbers in little-endian order, where each digit is between 0
|
||
|
and BigInteger.base. The second parameter sets the sign: -1 for
|
||
|
negative, +1 for positive, or 0 for zero. The array is *not copied and
|
||
|
may be modified*. If the array contains only zeros, the sign parameter
|
||
|
is ignored and is forced to zero.
|
||
|
|
||
|
> new BigInteger([5], -1): create a new BigInteger with value -5
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
n - Value to convert to a <BigInteger>.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
A <BigInteger> value.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<parse>, <BigInteger>
|
||
|
*/
|
||
|
function BigInteger(n, s, token) {
|
||
|
if (token !== CONSTRUCT) {
|
||
|
if (n instanceof BigInteger) {
|
||
|
return n;
|
||
|
} else if (typeof n === "undefined") {
|
||
|
return ZERO;
|
||
|
}
|
||
|
return BigInteger.parse(n);
|
||
|
}
|
||
|
|
||
|
n = n || []; // Provide the nullary constructor for subclasses.
|
||
|
while (n.length && !n[n.length - 1]) {
|
||
|
--n.length;
|
||
|
}
|
||
|
this._d = n;
|
||
|
this._s = n.length ? (s || 1) : 0;
|
||
|
}
|
||
|
|
||
|
BigInteger._construct = function (n, s) {
|
||
|
return new BigInteger(n, s, CONSTRUCT);
|
||
|
};
|
||
|
|
||
|
// Base-10 speedup hacks in parse, toString, exp10 and log functions
|
||
|
// require base to be a power of 10. 10^7 is the largest such power
|
||
|
// that won't cause a precision loss when digits are multiplied.
|
||
|
var BigInteger_base = 10000000;
|
||
|
var BigInteger_base_log10 = 7;
|
||
|
|
||
|
BigInteger.base = BigInteger_base;
|
||
|
BigInteger.base_log10 = BigInteger_base_log10;
|
||
|
|
||
|
var ZERO = new BigInteger([], 0, CONSTRUCT);
|
||
|
// Constant: ZERO
|
||
|
// <BigInteger> 0.
|
||
|
BigInteger.ZERO = ZERO;
|
||
|
|
||
|
var ONE = new BigInteger([1], 1, CONSTRUCT);
|
||
|
// Constant: ONE
|
||
|
// <BigInteger> 1.
|
||
|
BigInteger.ONE = ONE;
|
||
|
|
||
|
var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
|
||
|
// Constant: M_ONE
|
||
|
// <BigInteger> -1.
|
||
|
BigInteger.M_ONE = M_ONE;
|
||
|
|
||
|
// Constant: _0
|
||
|
// Shortcut for <ZERO>.
|
||
|
BigInteger._0 = ZERO;
|
||
|
|
||
|
// Constant: _1
|
||
|
// Shortcut for <ONE>.
|
||
|
BigInteger._1 = ONE;
|
||
|
|
||
|
/*
|
||
|
Constant: small
|
||
|
Array of <BigIntegers> from 0 to 36.
|
||
|
|
||
|
These are used internally for parsing, but useful when you need a "small"
|
||
|
<BigInteger>.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<ZERO>, <ONE>, <_0>, <_1>
|
||
|
*/
|
||
|
BigInteger.small = [
|
||
|
ZERO,
|
||
|
ONE,
|
||
|
/* Assuming BigInteger_base > 36 */
|
||
|
new BigInteger([2], 1, CONSTRUCT),
|
||
|
new BigInteger([3], 1, CONSTRUCT),
|
||
|
new BigInteger([4], 1, CONSTRUCT),
|
||
|
new BigInteger([5], 1, CONSTRUCT),
|
||
|
new BigInteger([6], 1, CONSTRUCT),
|
||
|
new BigInteger([7], 1, CONSTRUCT),
|
||
|
new BigInteger([8], 1, CONSTRUCT),
|
||
|
new BigInteger([9], 1, CONSTRUCT),
|
||
|
new BigInteger([10], 1, CONSTRUCT),
|
||
|
new BigInteger([11], 1, CONSTRUCT),
|
||
|
new BigInteger([12], 1, CONSTRUCT),
|
||
|
new BigInteger([13], 1, CONSTRUCT),
|
||
|
new BigInteger([14], 1, CONSTRUCT),
|
||
|
new BigInteger([15], 1, CONSTRUCT),
|
||
|
new BigInteger([16], 1, CONSTRUCT),
|
||
|
new BigInteger([17], 1, CONSTRUCT),
|
||
|
new BigInteger([18], 1, CONSTRUCT),
|
||
|
new BigInteger([19], 1, CONSTRUCT),
|
||
|
new BigInteger([20], 1, CONSTRUCT),
|
||
|
new BigInteger([21], 1, CONSTRUCT),
|
||
|
new BigInteger([22], 1, CONSTRUCT),
|
||
|
new BigInteger([23], 1, CONSTRUCT),
|
||
|
new BigInteger([24], 1, CONSTRUCT),
|
||
|
new BigInteger([25], 1, CONSTRUCT),
|
||
|
new BigInteger([26], 1, CONSTRUCT),
|
||
|
new BigInteger([27], 1, CONSTRUCT),
|
||
|
new BigInteger([28], 1, CONSTRUCT),
|
||
|
new BigInteger([29], 1, CONSTRUCT),
|
||
|
new BigInteger([30], 1, CONSTRUCT),
|
||
|
new BigInteger([31], 1, CONSTRUCT),
|
||
|
new BigInteger([32], 1, CONSTRUCT),
|
||
|
new BigInteger([33], 1, CONSTRUCT),
|
||
|
new BigInteger([34], 1, CONSTRUCT),
|
||
|
new BigInteger([35], 1, CONSTRUCT),
|
||
|
new BigInteger([36], 1, CONSTRUCT)
|
||
|
];
|
||
|
|
||
|
// Used for parsing/radix conversion
|
||
|
BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
|
||
|
|
||
|
/*
|
||
|
Method: toString
|
||
|
Convert a <BigInteger> to a string.
|
||
|
|
||
|
When *base* is greater than 10, letters are upper case.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
base - Optional base to represent the number in (default is base 10).
|
||
|
Must be between 2 and 36 inclusive, or an Error will be thrown.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
The string representation of the <BigInteger>.
|
||
|
*/
|
||
|
BigInteger.prototype.toString = function (base) {
|
||
|
base = +base || 10;
|
||
|
if (base < 2 || base > 36) {
|
||
|
throw new Error("illegal radix " + base + ".");
|
||
|
}
|
||
|
if (this._s === 0) {
|
||
|
return "0";
|
||
|
}
|
||
|
if (base === 10) {
|
||
|
var str = this._s < 0 ? "-" : "";
|
||
|
str += this._d[this._d.length - 1].toString();
|
||
|
for (var i = this._d.length - 2; i >= 0; i--) {
|
||
|
var group = this._d[i].toString();
|
||
|
while (group.length < BigInteger_base_log10) group = '0' + group;
|
||
|
str += group;
|
||
|
}
|
||
|
return str;
|
||
|
} else {
|
||
|
var numerals = BigInteger.digits;
|
||
|
base = BigInteger.small[base];
|
||
|
var sign = this._s;
|
||
|
|
||
|
var n = this.abs();
|
||
|
var digits = [];
|
||
|
var digit;
|
||
|
|
||
|
while (n._s !== 0) {
|
||
|
var divmod = n.divRem(base);
|
||
|
n = divmod[0];
|
||
|
digit = divmod[1];
|
||
|
// TODO: This could be changed to unshift instead of reversing at the end.
|
||
|
// Benchmark both to compare speeds.
|
||
|
digits.push(numerals[digit.valueOf()]);
|
||
|
}
|
||
|
return (sign < 0 ? "-" : "") + digits.reverse().join("");
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// Verify strings for parsing
|
||
|
BigInteger.radixRegex = [
|
||
|
/^$/,
|
||
|
/^$/,
|
||
|
/^[01]*$/,
|
||
|
/^[012]*$/,
|
||
|
/^[0-3]*$/,
|
||
|
/^[0-4]*$/,
|
||
|
/^[0-5]*$/,
|
||
|
/^[0-6]*$/,
|
||
|
/^[0-7]*$/,
|
||
|
/^[0-8]*$/,
|
||
|
/^[0-9]*$/,
|
||
|
/^[0-9aA]*$/,
|
||
|
/^[0-9abAB]*$/,
|
||
|
/^[0-9abcABC]*$/,
|
||
|
/^[0-9a-dA-D]*$/,
|
||
|
/^[0-9a-eA-E]*$/,
|
||
|
/^[0-9a-fA-F]*$/,
|
||
|
/^[0-9a-gA-G]*$/,
|
||
|
/^[0-9a-hA-H]*$/,
|
||
|
/^[0-9a-iA-I]*$/,
|
||
|
/^[0-9a-jA-J]*$/,
|
||
|
/^[0-9a-kA-K]*$/,
|
||
|
/^[0-9a-lA-L]*$/,
|
||
|
/^[0-9a-mA-M]*$/,
|
||
|
/^[0-9a-nA-N]*$/,
|
||
|
/^[0-9a-oA-O]*$/,
|
||
|
/^[0-9a-pA-P]*$/,
|
||
|
/^[0-9a-qA-Q]*$/,
|
||
|
/^[0-9a-rA-R]*$/,
|
||
|
/^[0-9a-sA-S]*$/,
|
||
|
/^[0-9a-tA-T]*$/,
|
||
|
/^[0-9a-uA-U]*$/,
|
||
|
/^[0-9a-vA-V]*$/,
|
||
|
/^[0-9a-wA-W]*$/,
|
||
|
/^[0-9a-xA-X]*$/,
|
||
|
/^[0-9a-yA-Y]*$/,
|
||
|
/^[0-9a-zA-Z]*$/
|
||
|
];
|
||
|
|
||
|
/*
|
||
|
Function: parse
|
||
|
Parse a string into a <BigInteger>.
|
||
|
|
||
|
*base* is optional but, if provided, must be from 2 to 36 inclusive. If
|
||
|
*base* is not provided, it will be guessed based on the leading characters
|
||
|
of *s* as follows:
|
||
|
|
||
|
- "0x" or "0X": *base* = 16
|
||
|
- "0c" or "0C": *base* = 8
|
||
|
- "0b" or "0B": *base* = 2
|
||
|
- else: *base* = 10
|
||
|
|
||
|
If no base is provided, or *base* is 10, the number can be in exponential
|
||
|
form. For example, these are all valid:
|
||
|
|
||
|
> BigInteger.parse("1e9"); // Same as "1000000000"
|
||
|
> BigInteger.parse("1.234*10^3"); // Same as 1234
|
||
|
> BigInteger.parse("56789 * 10 ** -2"); // Same as 567
|
||
|
|
||
|
If any characters fall outside the range defined by the radix, an exception
|
||
|
will be thrown.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
s - The string to parse.
|
||
|
base - Optional radix (default is to guess based on *s*).
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
a <BigInteger> instance.
|
||
|
*/
|
||
|
BigInteger.parse = function (s, base) {
|
||
|
// Expands a number in exponential form to decimal form.
|
||
|
// expandExponential("-13.441*10^5") === "1344100";
|
||
|
// expandExponential("1.12300e-1") === "0.112300";
|
||
|
// expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
|
||
|
function expandExponential(str) {
|
||
|
str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
|
||
|
|
||
|
return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function (x, s, n, f, c) {
|
||
|
c = +c;
|
||
|
var l = c < 0;
|
||
|
var i = n.length + c;
|
||
|
x = (l ? n : f).length;
|
||
|
c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
|
||
|
var z = (new Array(c + 1)).join("0");
|
||
|
var r = n + f;
|
||
|
return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
|
||
|
});
|
||
|
}
|
||
|
|
||
|
s = s.toString();
|
||
|
if (typeof base === "undefined" || +base === 10) {
|
||
|
s = expandExponential(s);
|
||
|
}
|
||
|
|
||
|
var prefixRE;
|
||
|
if (typeof base === "undefined") {
|
||
|
prefixRE = '0[xcb]';
|
||
|
} else if (base == 16) {
|
||
|
prefixRE = '0x';
|
||
|
} else if (base == 8) {
|
||
|
prefixRE = '0c';
|
||
|
} else if (base == 2) {
|
||
|
prefixRE = '0b';
|
||
|
} else {
|
||
|
prefixRE = '';
|
||
|
}
|
||
|
var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
|
||
|
if (parts) {
|
||
|
var sign = parts[1] || "+";
|
||
|
var baseSection = parts[2] || "";
|
||
|
var digits = parts[3] || "";
|
||
|
|
||
|
if (typeof base === "undefined") {
|
||
|
// Guess base
|
||
|
if (baseSection === "0x" || baseSection === "0X") { // Hex
|
||
|
base = 16;
|
||
|
} else if (baseSection === "0c" || baseSection === "0C") { // Octal
|
||
|
base = 8;
|
||
|
} else if (baseSection === "0b" || baseSection === "0B") { // Binary
|
||
|
base = 2;
|
||
|
} else {
|
||
|
base = 10;
|
||
|
}
|
||
|
} else if (base < 2 || base > 36) {
|
||
|
throw new Error("Illegal radix " + base + ".");
|
||
|
}
|
||
|
|
||
|
base = +base;
|
||
|
|
||
|
// Check for digits outside the range
|
||
|
if (!(BigInteger.radixRegex[base].test(digits))) {
|
||
|
throw new Error("Bad digit for radix " + base);
|
||
|
}
|
||
|
|
||
|
// Strip leading zeros, and convert to array
|
||
|
digits = digits.replace(/^0+/, "").split("");
|
||
|
if (digits.length === 0) {
|
||
|
return ZERO;
|
||
|
}
|
||
|
|
||
|
// Get the sign (we know it's not zero)
|
||
|
sign = (sign === "-") ? -1 : 1;
|
||
|
|
||
|
// Optimize 10
|
||
|
if (base == 10) {
|
||
|
var d = [];
|
||
|
while (digits.length >= BigInteger_base_log10) {
|
||
|
d.push(parseInt(digits.splice(digits.length - BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
|
||
|
}
|
||
|
d.push(parseInt(digits.join(''), 10));
|
||
|
return new BigInteger(d, sign, CONSTRUCT);
|
||
|
}
|
||
|
|
||
|
// Do the conversion
|
||
|
var d = ZERO;
|
||
|
base = BigInteger.small[base];
|
||
|
var small = BigInteger.small;
|
||
|
for (var i = 0; i < digits.length; i++) {
|
||
|
d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
|
||
|
}
|
||
|
return new BigInteger(d._d, sign, CONSTRUCT);
|
||
|
} else {
|
||
|
throw new Error("Invalid BigInteger format: " + s);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: add
|
||
|
Add two <BigIntegers>.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
n - The number to add to *this*. Will be converted to a <BigInteger>.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
The numbers added together.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<subtract>, <multiply>, <quotient>, <next>
|
||
|
*/
|
||
|
BigInteger.prototype.add = function (n) {
|
||
|
if (this._s === 0) {
|
||
|
return BigInteger(n);
|
||
|
}
|
||
|
|
||
|
n = BigInteger(n);
|
||
|
if (n._s === 0) {
|
||
|
return this;
|
||
|
}
|
||
|
if (this._s !== n._s) {
|
||
|
n = n.negate();
|
||
|
return this.subtract(n);
|
||
|
}
|
||
|
|
||
|
var a = this._d;
|
||
|
var b = n._d;
|
||
|
var al = a.length;
|
||
|
var bl = b.length;
|
||
|
var sum = new Array(Math.max(al, bl) + 1);
|
||
|
var size = Math.min(al, bl);
|
||
|
var carry = 0;
|
||
|
var digit;
|
||
|
|
||
|
for (var i = 0; i < size; i++) {
|
||
|
digit = a[i] + b[i] + carry;
|
||
|
sum[i] = digit % BigInteger_base;
|
||
|
carry = (digit / BigInteger_base) | 0;
|
||
|
}
|
||
|
if (bl > al) {
|
||
|
a = b;
|
||
|
al = bl;
|
||
|
}
|
||
|
for (i = size; carry && i < al; i++) {
|
||
|
digit = a[i] + carry;
|
||
|
sum[i] = digit % BigInteger_base;
|
||
|
carry = (digit / BigInteger_base) | 0;
|
||
|
}
|
||
|
if (carry) {
|
||
|
sum[i] = carry;
|
||
|
}
|
||
|
|
||
|
for (; i < al; i++) {
|
||
|
sum[i] = a[i];
|
||
|
}
|
||
|
|
||
|
return new BigInteger(sum, this._s, CONSTRUCT);
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: negate
|
||
|
Get the additive inverse of a <BigInteger>.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
A <BigInteger> with the same magnatude, but with the opposite sign.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<abs>
|
||
|
*/
|
||
|
BigInteger.prototype.negate = function () {
|
||
|
return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: abs
|
||
|
Get the absolute value of a <BigInteger>.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
A <BigInteger> with the same magnatude, but always positive (or zero).
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<negate>
|
||
|
*/
|
||
|
BigInteger.prototype.abs = function () {
|
||
|
return (this._s < 0) ? this.negate() : this;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: subtract
|
||
|
Subtract two <BigIntegers>.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
n - The number to subtract from *this*. Will be converted to a <BigInteger>.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
The *n* subtracted from *this*.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<add>, <multiply>, <quotient>, <prev>
|
||
|
*/
|
||
|
BigInteger.prototype.subtract = function (n) {
|
||
|
if (this._s === 0) {
|
||
|
return BigInteger(n).negate();
|
||
|
}
|
||
|
|
||
|
n = BigInteger(n);
|
||
|
if (n._s === 0) {
|
||
|
return this;
|
||
|
}
|
||
|
if (this._s !== n._s) {
|
||
|
n = n.negate();
|
||
|
return this.add(n);
|
||
|
}
|
||
|
|
||
|
var m = this;
|
||
|
// negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
|
||
|
if (this._s < 0) {
|
||
|
m = new BigInteger(n._d, 1, CONSTRUCT);
|
||
|
n = new BigInteger(this._d, 1, CONSTRUCT);
|
||
|
}
|
||
|
|
||
|
// Both are positive => a - b
|
||
|
var sign = m.compareAbs(n);
|
||
|
if (sign === 0) {
|
||
|
return ZERO;
|
||
|
} else if (sign < 0) {
|
||
|
// swap m and n
|
||
|
var t = n;
|
||
|
n = m;
|
||
|
m = t;
|
||
|
}
|
||
|
|
||
|
// a > b
|
||
|
var a = m._d;
|
||
|
var b = n._d;
|
||
|
var al = a.length;
|
||
|
var bl = b.length;
|
||
|
var diff = new Array(al); // al >= bl since a > b
|
||
|
var borrow = 0;
|
||
|
var i;
|
||
|
var digit;
|
||
|
|
||
|
for (i = 0; i < bl; i++) {
|
||
|
digit = a[i] - borrow - b[i];
|
||
|
if (digit < 0) {
|
||
|
digit += BigInteger_base;
|
||
|
borrow = 1;
|
||
|
} else {
|
||
|
borrow = 0;
|
||
|
}
|
||
|
diff[i] = digit;
|
||
|
}
|
||
|
for (i = bl; i < al; i++) {
|
||
|
digit = a[i] - borrow;
|
||
|
if (digit < 0) {
|
||
|
digit += BigInteger_base;
|
||
|
} else {
|
||
|
diff[i++] = digit;
|
||
|
break;
|
||
|
}
|
||
|
diff[i] = digit;
|
||
|
}
|
||
|
for (; i < al; i++) {
|
||
|
diff[i] = a[i];
|
||
|
}
|
||
|
|
||
|
return new BigInteger(diff, sign, CONSTRUCT);
|
||
|
};
|
||
|
|
||
|
(function () {
|
||
|
function addOne(n, sign) {
|
||
|
var a = n._d;
|
||
|
var sum = a.slice();
|
||
|
var carry = true;
|
||
|
var i = 0;
|
||
|
|
||
|
while (true) {
|
||
|
var digit = (a[i] || 0) + 1;
|
||
|
sum[i] = digit % BigInteger_base;
|
||
|
if (digit <= BigInteger_base - 1) {
|
||
|
break;
|
||
|
}
|
||
|
++i;
|
||
|
}
|
||
|
|
||
|
return new BigInteger(sum, sign, CONSTRUCT);
|
||
|
}
|
||
|
|
||
|
function subtractOne(n, sign) {
|
||
|
var a = n._d;
|
||
|
var sum = a.slice();
|
||
|
var borrow = true;
|
||
|
var i = 0;
|
||
|
|
||
|
while (true) {
|
||
|
var digit = (a[i] || 0) - 1;
|
||
|
if (digit < 0) {
|
||
|
sum[i] = digit + BigInteger_base;
|
||
|
} else {
|
||
|
sum[i] = digit;
|
||
|
break;
|
||
|
}
|
||
|
++i;
|
||
|
}
|
||
|
|
||
|
return new BigInteger(sum, sign, CONSTRUCT);
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
Function: next
|
||
|
Get the next <BigInteger> (add one).
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
*this* + 1.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<add>, <prev>
|
||
|
*/
|
||
|
BigInteger.prototype.next = function () {
|
||
|
switch (this._s) {
|
||
|
case 0:
|
||
|
return ONE;
|
||
|
case -1:
|
||
|
return subtractOne(this, -1);
|
||
|
// case 1:
|
||
|
default:
|
||
|
return addOne(this, 1);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: prev
|
||
|
Get the previous <BigInteger> (subtract one).
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
*this* - 1.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<next>, <subtract>
|
||
|
*/
|
||
|
BigInteger.prototype.prev = function () {
|
||
|
switch (this._s) {
|
||
|
case 0:
|
||
|
return M_ONE;
|
||
|
case -1:
|
||
|
return addOne(this, -1);
|
||
|
// case 1:
|
||
|
default:
|
||
|
return subtractOne(this, 1);
|
||
|
}
|
||
|
};
|
||
|
})();
|
||
|
|
||
|
/*
|
||
|
Function: compareAbs
|
||
|
Compare the absolute value of two <BigIntegers>.
|
||
|
|
||
|
Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
n - The number to compare to *this*. Will be converted to a <BigInteger>.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
-1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<compare>, <abs>
|
||
|
*/
|
||
|
BigInteger.prototype.compareAbs = function (n) {
|
||
|
if (this === n) {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
if (!(n instanceof BigInteger)) {
|
||
|
if (!isFinite(n)) {
|
||
|
return (isNaN(n) ? n : -1);
|
||
|
}
|
||
|
n = BigInteger(n);
|
||
|
}
|
||
|
|
||
|
if (this._s === 0) {
|
||
|
return (n._s !== 0) ? -1 : 0;
|
||
|
}
|
||
|
if (n._s === 0) {
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
var l = this._d.length;
|
||
|
var nl = n._d.length;
|
||
|
if (l < nl) {
|
||
|
return -1;
|
||
|
} else if (l > nl) {
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
var a = this._d;
|
||
|
var b = n._d;
|
||
|
for (var i = l - 1; i >= 0; i--) {
|
||
|
if (a[i] !== b[i]) {
|
||
|
return a[i] < b[i] ? -1 : 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: compare
|
||
|
Compare two <BigIntegers>.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
n - The number to compare to *this*. Will be converted to a <BigInteger>.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
-1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<compareAbs>, <isPositive>, <isNegative>, <isUnit>
|
||
|
*/
|
||
|
BigInteger.prototype.compare = function (n) {
|
||
|
if (this === n) {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
n = BigInteger(n);
|
||
|
|
||
|
if (this._s === 0) {
|
||
|
return -n._s;
|
||
|
}
|
||
|
|
||
|
if (this._s === n._s) { // both positive or both negative
|
||
|
var cmp = this.compareAbs(n);
|
||
|
return cmp * this._s;
|
||
|
} else {
|
||
|
return this._s;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: isUnit
|
||
|
Return true iff *this* is either 1 or -1.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
|
||
|
<BigInteger.ONE>, <BigInteger.M_ONE>
|
||
|
*/
|
||
|
BigInteger.prototype.isUnit = function () {
|
||
|
return this === ONE ||
|
||
|
this === M_ONE ||
|
||
|
(this._d.length === 1 && this._d[0] === 1);
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: multiply
|
||
|
Multiply two <BigIntegers>.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
n - The number to multiply *this* by. Will be converted to a
|
||
|
<BigInteger>.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
The numbers multiplied together.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<add>, <subtract>, <quotient>, <square>
|
||
|
*/
|
||
|
BigInteger.prototype.multiply = function (n) {
|
||
|
// TODO: Consider adding Karatsuba multiplication for large numbers
|
||
|
if (this._s === 0) {
|
||
|
return ZERO;
|
||
|
}
|
||
|
|
||
|
n = BigInteger(n);
|
||
|
if (n._s === 0) {
|
||
|
return ZERO;
|
||
|
}
|
||
|
if (this.isUnit()) {
|
||
|
if (this._s < 0) {
|
||
|
return n.negate();
|
||
|
}
|
||
|
return n;
|
||
|
}
|
||
|
if (n.isUnit()) {
|
||
|
if (n._s < 0) {
|
||
|
return this.negate();
|
||
|
}
|
||
|
return this;
|
||
|
}
|
||
|
if (this === n) {
|
||
|
return this.square();
|
||
|
}
|
||
|
|
||
|
var r = (this._d.length >= n._d.length);
|
||
|
var a = (r ? this : n)._d; // a will be longer than b
|
||
|
var b = (r ? n : this)._d;
|
||
|
var al = a.length;
|
||
|
var bl = b.length;
|
||
|
|
||
|
var pl = al + bl;
|
||
|
var partial = new Array(pl);
|
||
|
var i;
|
||
|
for (i = 0; i < pl; i++) {
|
||
|
partial[i] = 0;
|
||
|
}
|
||
|
|
||
|
for (i = 0; i < bl; i++) {
|
||
|
var carry = 0;
|
||
|
var bi = b[i];
|
||
|
var jlimit = al + i;
|
||
|
var digit;
|
||
|
for (var j = i; j < jlimit; j++) {
|
||
|
digit = partial[j] + bi * a[j - i] + carry;
|
||
|
carry = (digit / BigInteger_base) | 0;
|
||
|
partial[j] = (digit % BigInteger_base) | 0;
|
||
|
}
|
||
|
if (carry) {
|
||
|
digit = partial[j] + carry;
|
||
|
carry = (digit / BigInteger_base) | 0;
|
||
|
partial[j] = digit % BigInteger_base;
|
||
|
}
|
||
|
}
|
||
|
return new BigInteger(partial, this._s * n._s, CONSTRUCT);
|
||
|
};
|
||
|
|
||
|
// Multiply a BigInteger by a single-digit native number
|
||
|
// Assumes that this and n are >= 0
|
||
|
// This is not really intended to be used outside the library itself
|
||
|
BigInteger.prototype.multiplySingleDigit = function (n) {
|
||
|
if (n === 0 || this._s === 0) {
|
||
|
return ZERO;
|
||
|
}
|
||
|
if (n === 1) {
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
var digit;
|
||
|
if (this._d.length === 1) {
|
||
|
digit = this._d[0] * n;
|
||
|
if (digit >= BigInteger_base) {
|
||
|
return new BigInteger([(digit % BigInteger_base) | 0,
|
||
|
(digit / BigInteger_base) | 0], 1, CONSTRUCT);
|
||
|
}
|
||
|
return new BigInteger([digit], 1, CONSTRUCT);
|
||
|
}
|
||
|
|
||
|
if (n === 2) {
|
||
|
return this.add(this);
|
||
|
}
|
||
|
if (this.isUnit()) {
|
||
|
return new BigInteger([n], 1, CONSTRUCT);
|
||
|
}
|
||
|
|
||
|
var a = this._d;
|
||
|
var al = a.length;
|
||
|
|
||
|
var pl = al + 1;
|
||
|
var partial = new Array(pl);
|
||
|
for (var i = 0; i < pl; i++) {
|
||
|
partial[i] = 0;
|
||
|
}
|
||
|
|
||
|
var carry = 0;
|
||
|
for (var j = 0; j < al; j++) {
|
||
|
digit = n * a[j] + carry;
|
||
|
carry = (digit / BigInteger_base) | 0;
|
||
|
partial[j] = (digit % BigInteger_base) | 0;
|
||
|
}
|
||
|
if (carry) {
|
||
|
partial[j] = carry;
|
||
|
}
|
||
|
|
||
|
return new BigInteger(partial, 1, CONSTRUCT);
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: square
|
||
|
Multiply a <BigInteger> by itself.
|
||
|
|
||
|
This is slightly faster than regular multiplication, since it removes the
|
||
|
duplicated multiplcations.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
> this.multiply(this)
|
||
|
|
||
|
See Also:
|
||
|
<multiply>
|
||
|
*/
|
||
|
BigInteger.prototype.square = function () {
|
||
|
// Normally, squaring a 10-digit number would take 100 multiplications.
|
||
|
// Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
|
||
|
// This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
|
||
|
// Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
|
||
|
|
||
|
if (this._s === 0) {
|
||
|
return ZERO;
|
||
|
}
|
||
|
if (this.isUnit()) {
|
||
|
return ONE;
|
||
|
}
|
||
|
|
||
|
var digits = this._d;
|
||
|
var length = digits.length;
|
||
|
var imult1 = new Array(length + length + 1);
|
||
|
var product, carry, k;
|
||
|
var i;
|
||
|
|
||
|
// Calculate diagonal
|
||
|
for (i = 0; i < length; i++) {
|
||
|
k = i * 2;
|
||
|
product = digits[i] * digits[i];
|
||
|
carry = (product / BigInteger_base) | 0;
|
||
|
imult1[k] = product % BigInteger_base;
|
||
|
imult1[k + 1] = carry;
|
||
|
}
|
||
|
|
||
|
// Calculate repeating part
|
||
|
for (i = 0; i < length; i++) {
|
||
|
carry = 0;
|
||
|
k = i * 2 + 1;
|
||
|
for (var j = i + 1; j < length; j++, k++) {
|
||
|
product = digits[j] * digits[i] * 2 + imult1[k] + carry;
|
||
|
carry = (product / BigInteger_base) | 0;
|
||
|
imult1[k] = product % BigInteger_base;
|
||
|
}
|
||
|
k = length + i;
|
||
|
var digit = carry + imult1[k];
|
||
|
carry = (digit / BigInteger_base) | 0;
|
||
|
imult1[k] = digit % BigInteger_base;
|
||
|
imult1[k + 1] += carry;
|
||
|
}
|
||
|
|
||
|
return new BigInteger(imult1, 1, CONSTRUCT);
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: quotient
|
||
|
Divide two <BigIntegers> and truncate towards zero.
|
||
|
|
||
|
<quotient> throws an exception if *n* is zero.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
n - The number to divide *this* by. Will be converted to a <BigInteger>.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
The *this* / *n*, truncated to an integer.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<add>, <subtract>, <multiply>, <divRem>, <remainder>
|
||
|
*/
|
||
|
BigInteger.prototype.quotient = function (n) {
|
||
|
return this.divRem(n)[0];
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: divide
|
||
|
Deprecated synonym for <quotient>.
|
||
|
*/
|
||
|
BigInteger.prototype.divide = BigInteger.prototype.quotient;
|
||
|
|
||
|
/*
|
||
|
Function: remainder
|
||
|
Calculate the remainder of two <BigIntegers>.
|
||
|
|
||
|
<remainder> throws an exception if *n* is zero.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
n - The remainder after *this* is divided *this* by *n*. Will be
|
||
|
converted to a <BigInteger>.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
*this* % *n*.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<divRem>, <quotient>
|
||
|
*/
|
||
|
BigInteger.prototype.remainder = function (n) {
|
||
|
return this.divRem(n)[1];
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: divRem
|
||
|
Calculate the integer quotient and remainder of two <BigIntegers>.
|
||
|
|
||
|
<divRem> throws an exception if *n* is zero.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
n - The number to divide *this* by. Will be converted to a <BigInteger>.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
A two-element array containing the quotient and the remainder.
|
||
|
|
||
|
> a.divRem(b)
|
||
|
|
||
|
is exactly equivalent to
|
||
|
|
||
|
> [a.quotient(b), a.remainder(b)]
|
||
|
|
||
|
except it is faster, because they are calculated at the same time.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<quotient>, <remainder>
|
||
|
*/
|
||
|
BigInteger.prototype.divRem = function (n) {
|
||
|
n = BigInteger(n);
|
||
|
if (n._s === 0) {
|
||
|
throw new Error("Divide by zero");
|
||
|
}
|
||
|
if (this._s === 0) {
|
||
|
return [ZERO, ZERO];
|
||
|
}
|
||
|
if (n._d.length === 1) {
|
||
|
return this.divRemSmall(n._s * n._d[0]);
|
||
|
}
|
||
|
|
||
|
// Test for easy cases -- |n1| <= |n2|
|
||
|
switch (this.compareAbs(n)) {
|
||
|
case 0: // n1 == n2
|
||
|
return [this._s === n._s ? ONE : M_ONE, ZERO];
|
||
|
case -1: // |n1| < |n2|
|
||
|
return [ZERO, this];
|
||
|
}
|
||
|
|
||
|
var sign = this._s * n._s;
|
||
|
var a = n.abs();
|
||
|
var b_digits = this._d;
|
||
|
var b_index = b_digits.length;
|
||
|
var digits = n._d.length;
|
||
|
var quot = [];
|
||
|
var guess;
|
||
|
|
||
|
var part = new BigInteger([], 0, CONSTRUCT);
|
||
|
part._s = 1;
|
||
|
|
||
|
while (b_index) {
|
||
|
part._d.unshift(b_digits[--b_index]);
|
||
|
|
||
|
if (part.compareAbs(n) < 0) {
|
||
|
quot.push(0);
|
||
|
continue;
|
||
|
}
|
||
|
if (part._s === 0) {
|
||
|
guess = 0;
|
||
|
} else {
|
||
|
var xlen = part._d.length,
|
||
|
ylen = a._d.length;
|
||
|
var highx = part._d[xlen - 1] * BigInteger_base + part._d[xlen - 2];
|
||
|
var highy = a._d[ylen - 1] * BigInteger_base + a._d[ylen - 2];
|
||
|
if (part._d.length > a._d.length) {
|
||
|
// The length of part._d can either match a._d length,
|
||
|
// or exceed it by one.
|
||
|
highx = (highx + 1) * BigInteger_base;
|
||
|
}
|
||
|
guess = Math.ceil(highx / highy);
|
||
|
}
|
||
|
do {
|
||
|
var check = a.multiplySingleDigit(guess);
|
||
|
if (check.compareAbs(part) <= 0) {
|
||
|
break;
|
||
|
}
|
||
|
guess--;
|
||
|
} while (guess);
|
||
|
|
||
|
quot.push(guess);
|
||
|
if (!guess) {
|
||
|
continue;
|
||
|
}
|
||
|
var diff = part.subtract(check);
|
||
|
part._d = diff._d.slice();
|
||
|
if (part._d.length === 0) {
|
||
|
part._s = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
|
||
|
new BigInteger(part._d, this._s, CONSTRUCT)];
|
||
|
};
|
||
|
|
||
|
// Throws an exception if n is outside of (-BigInteger.base, -1] or
|
||
|
// [1, BigInteger.base). It's not necessary to call this, since the
|
||
|
// other division functions will call it if they are able to.
|
||
|
BigInteger.prototype.divRemSmall = function (n) {
|
||
|
var r;
|
||
|
n = +n;
|
||
|
if (n === 0) {
|
||
|
throw new Error("Divide by zero");
|
||
|
}
|
||
|
|
||
|
var n_s = n < 0 ? -1 : 1;
|
||
|
var sign = this._s * n_s;
|
||
|
n = Math.abs(n);
|
||
|
|
||
|
if (n < 1 || n >= BigInteger_base) {
|
||
|
throw new Error("Argument out of range");
|
||
|
}
|
||
|
|
||
|
if (this._s === 0) {
|
||
|
return [ZERO, ZERO];
|
||
|
}
|
||
|
|
||
|
if (n === 1 || n === -1) {
|
||
|
return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
|
||
|
}
|
||
|
|
||
|
// 2 <= n < BigInteger_base
|
||
|
|
||
|
// divide a single digit by a single digit
|
||
|
if (this._d.length === 1) {
|
||
|
var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
|
||
|
r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
|
||
|
if (sign < 0) {
|
||
|
q = q.negate();
|
||
|
}
|
||
|
if (this._s < 0) {
|
||
|
r = r.negate();
|
||
|
}
|
||
|
return [q, r];
|
||
|
}
|
||
|
|
||
|
var digits = this._d.slice();
|
||
|
var quot = new Array(digits.length);
|
||
|
var part = 0;
|
||
|
var diff = 0;
|
||
|
var i = 0;
|
||
|
var guess;
|
||
|
|
||
|
while (digits.length) {
|
||
|
part = part * BigInteger_base + digits[digits.length - 1];
|
||
|
if (part < n) {
|
||
|
quot[i++] = 0;
|
||
|
digits.pop();
|
||
|
diff = BigInteger_base * diff + part;
|
||
|
continue;
|
||
|
}
|
||
|
if (part === 0) {
|
||
|
guess = 0;
|
||
|
} else {
|
||
|
guess = (part / n) | 0;
|
||
|
}
|
||
|
|
||
|
var check = n * guess;
|
||
|
diff = part - check;
|
||
|
quot[i++] = guess;
|
||
|
if (!guess) {
|
||
|
digits.pop();
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
digits.pop();
|
||
|
part = diff;
|
||
|
}
|
||
|
|
||
|
r = new BigInteger([diff], 1, CONSTRUCT);
|
||
|
if (this._s < 0) {
|
||
|
r = r.negate();
|
||
|
}
|
||
|
return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: isEven
|
||
|
Return true iff *this* is divisible by two.
|
||
|
|
||
|
Note that <BigInteger.ZERO> is even.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
true if *this* is even, false otherwise.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<isOdd>
|
||
|
*/
|
||
|
BigInteger.prototype.isEven = function () {
|
||
|
var digits = this._d;
|
||
|
return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: isOdd
|
||
|
Return true iff *this* is not divisible by two.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
true if *this* is odd, false otherwise.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<isEven>
|
||
|
*/
|
||
|
BigInteger.prototype.isOdd = function () {
|
||
|
return !this.isEven();
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: sign
|
||
|
Get the sign of a <BigInteger>.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
* -1 if *this* < 0
|
||
|
* 0 if *this* == 0
|
||
|
* +1 if *this* > 0
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
|
||
|
*/
|
||
|
BigInteger.prototype.sign = function () {
|
||
|
return this._s;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: isPositive
|
||
|
Return true iff *this* > 0.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
true if *this*.compare(<BigInteger.ZERO>) == 1.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
|
||
|
*/
|
||
|
BigInteger.prototype.isPositive = function () {
|
||
|
return this._s > 0;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: isNegative
|
||
|
Return true iff *this* < 0.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
true if *this*.compare(<BigInteger.ZERO>) == -1.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
|
||
|
*/
|
||
|
BigInteger.prototype.isNegative = function () {
|
||
|
return this._s < 0;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: isZero
|
||
|
Return true iff *this* == 0.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
true if *this*.compare(<BigInteger.ZERO>) == 0.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
|
||
|
*/
|
||
|
BigInteger.prototype.isZero = function () {
|
||
|
return this._s === 0;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: exp10
|
||
|
Multiply a <BigInteger> by a power of 10.
|
||
|
|
||
|
This is equivalent to, but faster than
|
||
|
|
||
|
> if (n >= 0) {
|
||
|
> return this.multiply(BigInteger("1e" + n));
|
||
|
> }
|
||
|
> else { // n <= 0
|
||
|
> return this.quotient(BigInteger("1e" + -n));
|
||
|
> }
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
n - The power of 10 to multiply *this* by. *n* is converted to a
|
||
|
javascipt number and must be no greater than <BigInteger.MAX_EXP>
|
||
|
(0x7FFFFFFF), or an exception will be thrown.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
*this* * (10 ** *n*), truncated to an integer if necessary.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<pow>, <multiply>
|
||
|
*/
|
||
|
BigInteger.prototype.exp10 = function (n) {
|
||
|
n = +n;
|
||
|
if (n === 0) {
|
||
|
return this;
|
||
|
}
|
||
|
if (Math.abs(n) > Number(MAX_EXP)) {
|
||
|
throw new Error("exponent too large in BigInteger.exp10");
|
||
|
}
|
||
|
if (n > 0) {
|
||
|
var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
|
||
|
|
||
|
for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
|
||
|
k._d.unshift(0);
|
||
|
}
|
||
|
if (n == 0)
|
||
|
return k;
|
||
|
k._s = 1;
|
||
|
k = k.multiplySingleDigit(Math.pow(10, n));
|
||
|
return (this._s < 0 ? k.negate() : k);
|
||
|
} else if (-n >= this._d.length * BigInteger_base_log10) {
|
||
|
return ZERO;
|
||
|
} else {
|
||
|
var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
|
||
|
|
||
|
for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
|
||
|
k._d.shift();
|
||
|
}
|
||
|
return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: pow
|
||
|
Raise a <BigInteger> to a power.
|
||
|
|
||
|
In this implementation, 0**0 is 1.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
n - The exponent to raise *this* by. *n* must be no greater than
|
||
|
<BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
*this* raised to the *nth* power.
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<modPow>
|
||
|
*/
|
||
|
BigInteger.prototype.pow = function (n) {
|
||
|
if (this.isUnit()) {
|
||
|
if (this._s > 0) {
|
||
|
return this;
|
||
|
} else {
|
||
|
return BigInteger(n).isOdd() ? this : this.negate();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
n = BigInteger(n);
|
||
|
if (n._s === 0) {
|
||
|
return ONE;
|
||
|
} else if (n._s < 0) {
|
||
|
if (this._s === 0) {
|
||
|
throw new Error("Divide by zero");
|
||
|
} else {
|
||
|
return ZERO;
|
||
|
}
|
||
|
}
|
||
|
if (this._s === 0) {
|
||
|
return ZERO;
|
||
|
}
|
||
|
if (n.isUnit()) {
|
||
|
return this;
|
||
|
}
|
||
|
|
||
|
if (n.compareAbs(MAX_EXP) > 0) {
|
||
|
throw new Error("exponent too large in BigInteger.pow");
|
||
|
}
|
||
|
var x = this;
|
||
|
var aux = ONE;
|
||
|
var two = BigInteger.small[2];
|
||
|
|
||
|
while (n.isPositive()) {
|
||
|
if (n.isOdd()) {
|
||
|
aux = aux.multiply(x);
|
||
|
if (n.isUnit()) {
|
||
|
return aux;
|
||
|
}
|
||
|
}
|
||
|
x = x.square();
|
||
|
n = n.quotient(two);
|
||
|
}
|
||
|
|
||
|
return aux;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: modPow
|
||
|
Raise a <BigInteger> to a power (mod m).
|
||
|
|
||
|
Because it is reduced by a modulus, <modPow> is not limited by
|
||
|
<BigInteger.MAX_EXP> like <pow>.
|
||
|
|
||
|
Parameters:
|
||
|
|
||
|
exponent - The exponent to raise *this* by. Must be positive.
|
||
|
modulus - The modulus.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
*this* ^ *exponent* (mod *modulus*).
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<pow>, <mod>
|
||
|
*/
|
||
|
BigInteger.prototype.modPow = function (exponent, modulus) {
|
||
|
var result = ONE;
|
||
|
var base = this;
|
||
|
|
||
|
while (exponent.isPositive()) {
|
||
|
if (exponent.isOdd()) {
|
||
|
result = result.multiply(base).remainder(modulus);
|
||
|
}
|
||
|
|
||
|
exponent = exponent.quotient(BigInteger.small[2]);
|
||
|
if (exponent.isPositive()) {
|
||
|
base = base.square().remainder(modulus);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return result;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: log
|
||
|
Get the natural logarithm of a <BigInteger> as a native JavaScript number.
|
||
|
|
||
|
This is equivalent to
|
||
|
|
||
|
> Math.log(this.toJSValue())
|
||
|
|
||
|
but handles values outside of the native number range.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
log( *this* )
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<toJSValue>
|
||
|
*/
|
||
|
BigInteger.prototype.log = function () {
|
||
|
switch (this._s) {
|
||
|
case 0:
|
||
|
return -Infinity;
|
||
|
case -1:
|
||
|
return NaN;
|
||
|
default: // Fall through.
|
||
|
}
|
||
|
|
||
|
var l = this._d.length;
|
||
|
|
||
|
if (l * BigInteger_base_log10 < 30) {
|
||
|
return Math.log(this.valueOf());
|
||
|
}
|
||
|
|
||
|
var N = Math.ceil(30 / BigInteger_base_log10);
|
||
|
var firstNdigits = this._d.slice(l - N);
|
||
|
return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: valueOf
|
||
|
Convert a <BigInteger> to a native JavaScript integer.
|
||
|
|
||
|
This is called automatically by JavaScipt to convert a <BigInteger> to a
|
||
|
native value.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
> parseInt(this.toString(), 10)
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<toString>, <toJSValue>
|
||
|
*/
|
||
|
BigInteger.prototype.valueOf = function () {
|
||
|
return parseInt(this.toString(), 10);
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Function: toJSValue
|
||
|
Convert a <BigInteger> to a native JavaScript integer.
|
||
|
|
||
|
This is the same as valueOf, but more explicitly named.
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
> parseInt(this.toString(), 10)
|
||
|
|
||
|
See Also:
|
||
|
|
||
|
<toString>, <valueOf>
|
||
|
*/
|
||
|
BigInteger.prototype.toJSValue = function () {
|
||
|
return parseInt(this.toString(), 10);
|
||
|
};
|
||
|
|
||
|
|
||
|
/*
|
||
|
Function: lowVal
|
||
|
Author: Lucas Jones
|
||
|
*/
|
||
|
BigInteger.prototype.lowVal = function () {
|
||
|
return this._d[0] || 0;
|
||
|
};
|
||
|
|
||
|
var MAX_EXP = BigInteger(0x7FFFFFFF);
|
||
|
// Constant: MAX_EXP
|
||
|
// The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
|
||
|
BigInteger.MAX_EXP = MAX_EXP;
|
||
|
|
||
|
(function () {
|
||
|
function makeUnary(fn) {
|
||
|
return function (a) {
|
||
|
return fn.call(BigInteger(a));
|
||
|
};
|
||
|
}
|
||
|
|
||
|
function makeBinary(fn) {
|
||
|
return function (a, b) {
|
||
|
return fn.call(BigInteger(a), BigInteger(b));
|
||
|
};
|
||
|
}
|
||
|
|
||
|
function makeTrinary(fn) {
|
||
|
return function (a, b, c) {
|
||
|
return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
|
||
|
};
|
||
|
}
|
||
|
|
||
|
(function () {
|
||
|
var i, fn;
|
||
|
var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
|
||
|
var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
|
||
|
var trinary = ["modPow"];
|
||
|
|
||
|
for (i = 0; i < unary.length; i++) {
|
||
|
fn = unary[i];
|
||
|
BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
|
||
|
}
|
||
|
|
||
|
for (i = 0; i < binary.length; i++) {
|
||
|
fn = binary[i];
|
||
|
BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
|
||
|
}
|
||
|
|
||
|
for (i = 0; i < trinary.length; i++) {
|
||
|
fn = trinary[i];
|
||
|
BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
|
||
|
}
|
||
|
|
||
|
BigInteger.exp10 = function (x, n) {
|
||
|
return BigInteger(x).exp10(n);
|
||
|
};
|
||
|
})();
|
||
|
})();
|
||
|
|
||
|
return BigInteger;
|
||
|
})();
|
||
|
var cnBase58 = (function () {
|
||
|
var b58 = {};
|
||
|
|
||
|
var alphabet_str = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
||
|
var alphabet = [];
|
||
|
for (var i = 0; i < alphabet_str.length; i++) {
|
||
|
alphabet.push(alphabet_str.charCodeAt(i));
|
||
|
}
|
||
|
var encoded_block_sizes = [0, 2, 3, 5, 6, 7, 9, 10, 11];
|
||
|
|
||
|
var alphabet_size = alphabet.length;
|
||
|
var full_block_size = 8;
|
||
|
var full_encoded_block_size = 11;
|
||
|
|
||
|
var UINT64_MAX = new JSBigInt(2).pow(64);
|
||
|
|
||
|
function hextobin(hex) {
|
||
|
if (hex.length % 2 !== 0) throw "Hex string has invalid length!";
|
||
|
var res = new Uint8Array(hex.length / 2);
|
||
|
for (var i = 0; i < hex.length / 2; ++i) {
|
||
|
res[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
|
||
|
}
|
||
|
return res;
|
||
|
}
|
||
|
this.hextobin = hextobin;
|
||
|
b58.hextobin = hextobin;
|
||
|
|
||
|
function bintohex(bin) {
|
||
|
var out = [];
|
||
|
for (var i = 0; i < bin.length; ++i) {
|
||
|
out.push(("0" + bin[i].toString(16)).slice(-2));
|
||
|
}
|
||
|
return out.join("");
|
||
|
}
|
||
|
this.bintohex = bintohex;
|
||
|
b58.bintohex = bintohex;
|
||
|
|
||
|
function strtobin(str) {
|
||
|
var res = new Uint8Array(str.length);
|
||
|
for (var i = 0; i < str.length; i++) {
|
||
|
res[i] = str.charCodeAt(i);
|
||
|
}
|
||
|
return res;
|
||
|
}
|
||
|
this.strtobin = strtobin;
|
||
|
b58.strtobin = strtobin;
|
||
|
|
||
|
function bintostr(bin) {
|
||
|
var out = [];
|
||
|
for (var i = 0; i < bin.length; i++) {
|
||
|
out.push(String.fromCharCode(bin[i]));
|
||
|
}
|
||
|
return out.join("");
|
||
|
}
|
||
|
|
||
|
function uint8_be_to_64(data) {
|
||
|
if (data.length < 1 || data.length > 8) {
|
||
|
throw "Invalid input length";
|
||
|
}
|
||
|
var res = JSBigInt.ZERO;
|
||
|
var twopow8 = new JSBigInt(2).pow(8);
|
||
|
var i = 0;
|
||
|
switch (9 - data.length) {
|
||
|
case 1:
|
||
|
res = res.add(data[i++]);
|
||
|
case 2:
|
||
|
res = res.multiply(twopow8).add(data[i++]);
|
||
|
case 3:
|
||
|
res = res.multiply(twopow8).add(data[i++]);
|
||
|
case 4:
|
||
|
res = res.multiply(twopow8).add(data[i++]);
|
||
|
case 5:
|
||
|
res = res.multiply(twopow8).add(data[i++]);
|
||
|
case 6:
|
||
|
res = res.multiply(twopow8).add(data[i++]);
|
||
|
case 7:
|
||
|
res = res.multiply(twopow8).add(data[i++]);
|
||
|
case 8:
|
||
|
res = res.multiply(twopow8).add(data[i++]);
|
||
|
break;
|
||
|
default:
|
||
|
throw "Impossible condition";
|
||
|
}
|
||
|
return res;
|
||
|
}
|
||
|
|
||
|
function uint64_to_8be(num, size) {
|
||
|
var res = new Uint8Array(size);
|
||
|
if (size < 1 || size > 8) {
|
||
|
throw "Invalid input length";
|
||
|
}
|
||
|
var twopow8 = new JSBigInt(2).pow(8);
|
||
|
for (var i = size - 1; i >= 0; i--) {
|
||
|
res[i] = num.remainder(twopow8).toJSValue();
|
||
|
num = num.divide(twopow8);
|
||
|
}
|
||
|
return res;
|
||
|
}
|
||
|
|
||
|
b58.encode_block = function (data, buf, index) {
|
||
|
if (data.length < 1 || data.length > full_encoded_block_size) {
|
||
|
throw "Invalid block length: " + data.length;
|
||
|
}
|
||
|
var num = uint8_be_to_64(data);
|
||
|
var i = encoded_block_sizes[data.length] - 1;
|
||
|
// while num > 0
|
||
|
while (num.compare(0) === 1) {
|
||
|
var div = num.divRem(alphabet_size);
|
||
|
// remainder = num % alphabet_size
|
||
|
var remainder = div[1];
|
||
|
// num = num / alphabet_size
|
||
|
num = div[0];
|
||
|
buf[index + i] = alphabet[remainder.toJSValue()];
|
||
|
i--;
|
||
|
}
|
||
|
return buf;
|
||
|
};
|
||
|
|
||
|
b58.encode = function (hex) {
|
||
|
var data = hextobin(hex);
|
||
|
if (data.length === 0) {
|
||
|
return "";
|
||
|
}
|
||
|
var full_block_count = Math.floor(data.length / full_block_size);
|
||
|
var last_block_size = data.length % full_block_size;
|
||
|
var res_size = full_block_count * full_encoded_block_size + encoded_block_sizes[last_block_size];
|
||
|
|
||
|
var res = new Uint8Array(res_size);
|
||
|
var i;
|
||
|
for (i = 0; i < res_size; ++i) {
|
||
|
res[i] = alphabet[0];
|
||
|
}
|
||
|
for (i = 0; i < full_block_count; i++) {
|
||
|
res = b58.encode_block(data.subarray(i * full_block_size, i * full_block_size + full_block_size), res, i * full_encoded_block_size);
|
||
|
}
|
||
|
if (last_block_size > 0) {
|
||
|
res = b58.encode_block(data.subarray(full_block_count * full_block_size, full_block_count * full_block_size + last_block_size), res, full_block_count * full_encoded_block_size)
|
||
|
}
|
||
|
return bintostr(res);
|
||
|
};
|
||
|
|
||
|
b58.decode_block = function (data, buf, index) {
|
||
|
if (data.length < 1 || data.length > full_encoded_block_size) {
|
||
|
throw "Invalid block length: " + data.length;
|
||
|
}
|
||
|
|
||
|
var res_size = encoded_block_sizes.indexOf(data.length);
|
||
|
if (res_size <= 0) {
|
||
|
throw "Invalid block size";
|
||
|
}
|
||
|
var res_num = new JSBigInt(0);
|
||
|
var order = new JSBigInt(1);
|
||
|
for (var i = data.length - 1; i >= 0; i--) {
|
||
|
var digit = alphabet.indexOf(data[i]);
|
||
|
if (digit < 0) {
|
||
|
throw "Invalid symbol";
|
||
|
}
|
||
|
var product = order.multiply(digit).add(res_num);
|
||
|
// if product > UINT64_MAX
|
||
|
if (product.compare(UINT64_MAX) === 1) {
|
||
|
throw "Overflow";
|
||
|
}
|
||
|
res_num = product;
|
||
|
order = order.multiply(alphabet_size);
|
||
|
}
|
||
|
if (res_size < full_block_size && (new JSBigInt(2).pow(8 * res_size).compare(res_num) <= 0)) {
|
||
|
throw "Overflow 2";
|
||
|
}
|
||
|
buf.set(uint64_to_8be(res_num, res_size), index);
|
||
|
return buf;
|
||
|
};
|
||
|
|
||
|
b58.decode = function (enc) {
|
||
|
enc = strtobin(enc);
|
||
|
if (enc.length === 0) {
|
||
|
return "";
|
||
|
}
|
||
|
var full_block_count = Math.floor(enc.length / full_encoded_block_size);
|
||
|
var last_block_size = enc.length % full_encoded_block_size;
|
||
|
var last_block_decoded_size = encoded_block_sizes.indexOf(last_block_size);
|
||
|
if (last_block_decoded_size < 0) {
|
||
|
throw "Invalid encoded length";
|
||
|
}
|
||
|
var data_size = full_block_count * full_block_size + last_block_decoded_size;
|
||
|
var data = new Uint8Array(data_size);
|
||
|
for (var i = 0; i < full_block_count; i++) {
|
||
|
data = b58.decode_block(enc.subarray(i * full_encoded_block_size, i * full_encoded_block_size + full_encoded_block_size), data, i * full_block_size);
|
||
|
}
|
||
|
if (last_block_size > 0) {
|
||
|
data = b58.decode_block(enc.subarray(full_block_count * full_encoded_block_size, full_block_count * full_encoded_block_size + last_block_size), data, full_block_count * full_block_size);
|
||
|
}
|
||
|
return bintohex(data);
|
||
|
};
|
||
|
|
||
|
return b58;
|
||
|
})();
|
||
|
var crc32 = (function () {
|
||
|
'use strict';
|
||
|
var crc32 = {};
|
||
|
|
||
|
crc32.Utf8Encode = function (string) {
|
||
|
return unescape(encodeURIComponent(string));
|
||
|
};
|
||
|
|
||
|
crc32.run = function (str) {
|
||
|
var crc = new crc32.Type();
|
||
|
crc.processString(str);
|
||
|
return crc.checksum();
|
||
|
};
|
||
|
|
||
|
crc32.table = [
|
||
|
0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, 3915621685, 2657392035,
|
||
|
249268274, 2044508324, 3772115230, 2547177864, 162941995, 2125561021, 3887607047, 2428444049,
|
||
|
498536548, 1789927666, 4089016648, 2227061214, 450548861, 1843258603, 4107580753, 2211677639,
|
||
|
325883990, 1684777152, 4251122042, 2321926636, 335633487, 1661365465, 4195302755, 2366115317,
|
||
|
997073096, 1281953886, 3579855332, 2724688242, 1006888145, 1258607687, 3524101629, 2768942443,
|
||
|
901097722, 1119000684, 3686517206, 2898065728, 853044451, 1172266101, 3705015759, 2882616665,
|
||
|
651767980, 1373503546, 3369554304, 3218104598, 565507253, 1454621731, 3485111705, 3099436303,
|
||
|
671266974, 1594198024, 3322730930, 2970347812, 795835527, 1483230225, 3244367275, 3060149565,
|
||
|
1994146192, 31158534, 2563907772, 4023717930, 1907459465, 112637215, 2680153253, 3904427059,
|
||
|
2013776290, 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719, 3865271297,
|
||
|
1802195444, 476864866, 2238001368, 4066508878, 1812370925, 453092731, 2181625025, 4111451223,
|
||
|
1706088902, 314042704, 2344532202, 4240017532, 1658658271, 366619977, 2362670323, 4224994405,
|
||
|
1303535960, 984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733, 3554079995,
|
||
|
1131014506, 879679996, 2909243462, 3663771856, 1141124467, 855842277, 2852801631, 3708648649,
|
||
|
1342533948, 654459306, 3188396048, 3373015174, 1466479909, 544179635, 3110523913, 3462522015,
|
||
|
1591671054, 702138776, 2966460450, 3352799412, 1504918807, 783551873, 3082640443, 3233442989,
|
||
|
3988292384, 2596254646, 62317068, 1957810842, 3939845945, 2647816111, 81470997, 1943803523,
|
||
|
3814918930, 2489596804, 225274430, 2053790376, 3826175755, 2466906013, 167816743, 2097651377,
|
||
|
4027552580, 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225, 1852507879,
|
||
|
4275313526, 2312317920, 282753626, 1742555852, 4189708143, 2394877945, 397917763, 1622183637,
|
||
|
3604390888, 2714866558, 953729732, 1340076626, 3518719985, 2797360999, 1068828381, 1219638859,
|
||
|
3624741850, 2936675148, 906185462, 1090812512, 3747672003, 2825379669, 829329135, 1181335161,
|
||
|
3412177804, 3160834842, 628085408, 1382605366, 3423369109, 3138078467, 570562233, 1426400815,
|
||
|
3317316542, 2998733608, 733239954, 1555261956, 3268935591, 3050360625, 752459403, 1541320221,
|
||
|
2607071920, 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877, 83908371,
|
||
|
2512341634, 3803740692, 2075208622, 213261112, 2463272603, 3855990285, 2094854071, 198958881,
|
||
|
2262029012, 4057260610, 1759359992, 534414190, 2176718541, 4139329115, 1873836001, 414664567,
|
||
|
2282248934, 4279200368, 1711684554, 285281116, 2405801727, 4167216745, 1634467795, 376229701,
|
||
|
2685067896, 3608007406, 1308918612, 956543938, 2808555105, 3495958263, 1231636301, 1047427035,
|
||
|
2932959818, 3654703836, 1088359270, 936918000, 2847714899, 3736837829, 1202900863, 817233897,
|
||
|
3183342108, 3401237130, 1404277552, 615818150, 3134207493, 3453421203, 1423857449, 601450431,
|
||
|
3009837614, 3294710456, 1567103746, 711928724, 3020668471, 3272380065, 1510334235, 755167117
|
||
|
];
|
||
|
crc32.Type = function () {
|
||
|
this.rem_ = 0xFFFFFFFF;
|
||
|
this.checksum = function () {
|
||
|
return ((this.rem_ ^ 0xFFFFFFFF) >>> 0);
|
||
|
};
|
||
|
this.processString = function (str) {
|
||
|
str = crc32.Utf8Encode(str);
|
||
|
for (var i = 0; i < str.length; i++) {
|
||
|
var byte_index = ((str.charCodeAt(i) ^ this.rem_) >>> 0) & 0xFF;
|
||
|
this.rem_ = ((this.rem_ >>> 8) ^ crc32.table[byte_index]) >>> 0;
|
||
|
}
|
||
|
};
|
||
|
return this;
|
||
|
};
|
||
|
|
||
|
return crc32;
|
||
|
})();
|
||
|
// Disable any HTTP Requests:
|
||
|
XMLHttpRequest = function(){logger.warn('XMLHttpRequest created');};
|
||
|
|
||
|
var Module = {TOTAL_MEMORY: 268435456};if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function";var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);if(!ret&&filename!=nodePath["resolve"](filename)){filename=path.join(__dirname,"..","src",filename);ret=nodeFS["readFileSync"](filename)}if(ret&&!binary)ret=ret.toString();return ret};Module["readBinary"]=function readBinary(filename){return Module["read"](filename,true)};Module["load"]=function load(f){globalEval(read(f))};Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/");Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available (jsc?)"}}Module["readBinary"]=function readBinary(f){return read(f,"binary")};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}this["Module"]=Module}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.log(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WEB){window["Module"]=Module}else{Module["load"]=importScripts}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]=="undefined"&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}var Runtime={setTempRet0:(function(value){tempRet0=value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),forceAlign:(function(target,quantum){quantum=quantum||4;if(quantum==1)return target;if(isNumber(target)&&isNumber(quantum)){return Math.ceil(target/quantum)*quantum}else if(isNumber(quantum)&&isPowerOfTwo(quantum)){return"((("+target+")+"+(quantum-1)+")&"+ -quantum+")"}return"Math.ceil(("+target+")/"+quantum+")*"+quantum}),isNumberType:(function(type){return type in Runtime.INT_TYPES||type in Runtime.FLOAT_TYPES}),isPointerType:function isPointerType(type){return type[type.length-1]=="*"},isStructType:function isStructType(type){if(isPointerType(type))return false;if(isArrayType(type))return true;if(/<?\{ ?[^}]* ?\}>?/.test(type))return true;return type[0]=="%"},INT_TYPES:{"i1":0,"i8":0,"i16":0,"i32":0,"i64":0},FLOAT_TYPES:{"float":0,"double":0},or64
|
||
|
// EMSCRIPTEN_START_ASM
|
||
|
"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.STACKTOP|0;var j=env.STACK_MAX|0;var k=env.tempDoublePtr|0;var l=env.ABORT|0;var m=env.cttz_i8|0;var n=env.ctlz_i8|0;var o=0;var p=0;var q=0;var r=0;var s=+env.NaN,t=+env.Infinity;var u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0.0;var D=0;var E=0;var F=0;var G=0;var H=0;var I=0;var J=0;var K=0;var L=0;var M=0;var N=global.Math.floor;var O=global.Math.abs;var P=global.Math.sqrt;var Q=global.Math.pow;var R=global.Math.cos;var S=global.Math.sin;var T=global.Math.tan;var U=global.Math.acos;var V=global.Math.asin;var W=global.Math.atan;var X=global.Math.atan2;var Y=global.Math.exp;var Z=global.Math.log;var _=global.Math.ceil;var $=global.Math.imul;var aa=env.abort;var ba=env.assert;var ca=env.asmPrintInt;var da=env.asmPrintFloat;var ea=env.min;var fa=env.SAFE_HEAP_LOAD;var ga=env.SAFE_HEAP_STORE;var ha=env.SAFE_FT_MASK;var ia=env._free;var ja=env.___setErrNo;var ka=env._malloc;var la=env._emscripten_memcpy_big;var ma=env._fflush;var na=env.___assert_fail;var oa=0.0;
|
||
|
// EMSCRIPTEN_START_FUNCS
|
||
|
function pa(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+7&-8;return b|0}function qa(){return i|0}function ra(a){a=a|0;i=a}function sa(a,b){a=a|0;b=b|0;if((o|0)==0){o=a;p=b}}function ta(a){a=a|0;ga(k>>0|0,fa(a>>0|0,1,0,0)|0|0,1,0);ga(k+1>>0|0,fa(a+1>>0|0,1,0,0)|0|0,1,0);ga(k+2>>0|0,fa(a+2>>0|0,1,0,0)|0|0,1,0);ga(k+3>>0|0,fa(a+3>>0|0,1,0,0)|0|0,1,0)}function ua(a){a=a|0;ga(k>>0|0,fa(a>>0|0,1,0,0)|0|0,1,0);ga(k+1>>0|0,fa(a+1>>0|0,1,0,0)|0|0,1,0);ga(k+2>>0|0,fa(a+2>>0|0,1,0,0)|0|0,1,0);ga(k+3>>0|0,fa(a+3>>0|0,1,0,0)|0|0,1,0);ga(k+4>>0|0,fa(a+4>>0|0,1,0,0)|0|0,1,0);ga(k+5>>0|0,fa(a+5>>0|0,1,0,0)|0|0,1,0);ga(k+6>>0|0,fa(a+6>>0|0,1,0,0)|0|0,1,0);ga(k+7>>0|0,fa(a+7>>0|0,1,0,0)|0|0,1,0)}function va(a){a=a|0;D=a}function wa(){return D|0}function xa(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,ha=0,ia=0,ja=0,ka=0;d=i;Y=b+40|0;j=b+44|0;m=b+48|0;p=b+52|0;s=b+56|0;v=b+60|0;y=b+64|0;B=b+68|0;E=b+72|0;F=b+76|0;V=b+4|0;S=b+8|0;Q=b+12|0;h=b+16|0;n=b+20|0;r=b+24|0;w=b+28|0;A=b+32|0;P=b+36|0;ja=(fa(V|0,4,0,0)|0|0)+(fa(j|0,4,0,0)|0|0)|0;ia=(fa(S|0,4,0,0)|0|0)+(fa(m|0,4,0,0)|0|0)|0;ha=(fa(Q|0,4,0,0)|0|0)+(fa(p|0,4,0,0)|0|0)|0;ea=(fa(h|0,4,0,0)|0|0)+(fa(s|0,4,0,0)|0|0)|0;da=(fa(n|0,4,0,0)|0|0)+(fa(v|0,4,0,0)|0|0)|0;ca=(fa(r|0,4,0,0)|0|0)+(fa(y|0,4,0,0)|0|0)|0;ba=(fa(w|0,4,0,0)|0|0)+(fa(B|0,4,0,0)|0|0)|0;aa=(fa(A|0,4,0,0)|0|0)+(fa(E|0,4,0,0)|0|0)|0;$=(fa(P|0,4,0,0)|0|0)+(fa(F|0,4,0,0)|0|0)|0;ga(a|0,(fa(b|0,4,0,0)|0|0)+(fa(Y|0,4,0,0)|0|0)|0,4,0);ka=a+4|0;ga(ka|0,ja|0,4,0);ja=a+8|0;ga(ja|0,ia|0,4,0);ia=a+12|0;ga(ia|0,ha|0,4,0);ha=a+16|0;ga(ha|0,ea|0,4,0);ea=a+20|0;ga(ea|0,da|0,4,0);da=a+24|0;ga(da|0,ca|0,4,0);ca=a+28|0;ga(ca|0,ba|0,4,0);ba=a+32|0;ga(ba|0,aa|0,4,0);aa=a+36|0;ga(aa|0,$|0,4,0);$=a+40|0;V=(fa(j|0,4,0,0)|0|0)-(fa(V|0,4,0,0)|0|0)|0;S=(fa(m|0,4,0,0)|0|0)-(fa(S|0,4,0,0)|0|0)|0;Q=(fa(p|0,4,0,0)|0|0)-(fa(Q|0,4,0,0)|0|0)|0;h=(fa(s|0,4,0,0)|0|0)-(fa(h|0,4,0,0)|0|0)|0;n=(fa(v|0,4,0,0)|0|0)-(fa(n|0,4,0,0)|0|0)|0;r=(fa(y|0,4,0,0)|0|0)-(fa(r|0,4,0,0)|0|0)|0;w=(fa(B|0,4,0,0)|0|0)-(fa(w|0,4,0,0)|0|0)|0;A=(fa(E|0,4,0,0)|0|0)-(fa(A|0,4,0,0)|0|0)|0;P=(fa(F|0,4,0,0)|0|0)-(fa(P|0,4,0,0)|0|0)|0;ga($|0,(fa(Y|0,4,0,0)|0|0)-(fa(b|0,4,0,0)|0|0)|0,4,0);Y=a+44|0;ga(Y|0,V|0,4,0);V=a+48|0;ga(V|0,S|0,4,0);S=a+52|0;ga(S|0,Q|0,4,0);Q=a+56|0;ga(Q|0,h|0,4,0);h=a+60|0;ga(h|0,n|0,4,0);n=a+64|0;ga(n|0,r|0,4,0);r=a+68|0;ga(r|0,w|0,4,0);w=a+72|0;ga(w|0,A|0,4,0);A=a+76|0;ga(A|0,P|0,4,0);P=a+80|0;ya(P,a,c);ya($,$,c+40|0);F=a+120|0;ya(F,c+120|0,b+120|0);ya(a,b+80|0,c+80|0);E=(fa(a|0,4,0,0)|0)<<1;B=(fa(ka|0,4,0,0)|0)<<1;y=(fa(ja|0,4,0,0)|0)<<1;v=(fa(ia|0,4,0,0)|0)<<1;s=(fa(ha|0,4,0,0)|0)<<1;p=(fa(ea|0,4,0,0)|0)<<1;m=(fa(da|0,4,0,0)|0)<<1;j=(fa(ca|0,4,0,0)|0)<<1;f=(fa(ba|0,4,0,0)|0)<<1;c=(fa(aa|0,4,0,0)|0)<<1;Z=fa(P|0,4,0,0)|0|0;O=a+84|0;W=fa(O|0,4,0,0)|0|0;N=a+88|0;T=fa(N|0,4,0,0)|0|0;M=a+92|0;b=fa(M|0,4,0,0)|0|0;L=a+96|0;g=fa(L|0,4,0,0)|0|0;K=a+100|0;l=fa(K|0,4,0,0)|0|0;J=a+104|0;q=fa(J|0,4,0,0)|0|0;I=a+108|0;u=fa(I|0,4,0,0)|0|0;H=a+112|0;z=fa(H|0,4,0,0)|0|0;G=a+116|0;D=fa(G|0,4,0,0)|0|0;_=fa($|0,4,0,0)|0|0;X=fa(Y|0,4,0,0)|0|0;U=fa(V|0,4,0,0)|0|0;R=fa(S|0,4,0,0)|0|0;e=fa(Q|0,4,0,0)|0|0;k=fa(h|0,4,0,0)|0|0;o=fa(n|0,4,0,0)|0|0;t=fa(r|0,4,0,0)|0|0;x=fa(w|0,4,0,0)|0|0;C=fa(A|0,4,0,0)|0|0;ga(a|0,Z-_|0,4,0);ga(ka|0,W-X|0,4,0);ga(ja|0,T-U|0,4,0);ga(ia|0,b-R|0,4,0);ga(ha|0,g-e|0,4,0);ga(ea|0,l-k|0,4,0);ga(da|0,q-o|0,4,0);ga(ca|0,u-t|0,4,0);ga(ba|0,z-x|0,4,0);ga(aa|0,D-C|0,4,0);ga($|0,_+Z|0,4,0);ga(Y|0,X+W|0,4,0);ga(V|0,U+T|0,4,0);ga(S|0,R+b|0,4,0);ga(Q|0,e+g|0,4,0);ga(h|0,k+l|0,4,0);ga(n|0,o+q|0,4,0);ga(r|0,t+u|0,4,0);ga(w|0,x+z|0,4,0);ga(A|0,C+D|0,4,0);D=fa(F|0,4,0,0)|0|0;C=a+124|0;A=fa(C|0,4,0,0)|0|0;z=a+128|0;x=fa(z|0,4,0,0)|0|0;w=a+132|0;u=fa(w|0,4,0,0)|0|0;t=a+136|0;r=fa(t|0,4,0,0)|0|0;q=a+140|0;o=fa(q|0,4,0,0)|0|0;n=a+144|0;l=fa(n|0,4,0,0)|0|0;k=a+148|0;h=fa(k|0,4,0,0)|0|0;g=a+152|0;e=fa(g|0,4,0,0)|0|0;a=a+156|0;b=fa(a|0,4,0,0)|0|0;ga(P|0,D+E|0,4,0);ga(O|0,A+B|0,4,0);ga(N|0,x+y|0,
|
||
|
|
||
|
|
||
|
|
||
|
function $a(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,ib=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0;e=i;q=fa(b+2>>0|0,1,0,0)|0|0;Qa=fa(b>>0|0,1,0,1)|0|0;Ab=kb(fa(b+1>>0|0,1,0,1)|0|0|0,0,8)|0;zb=D;q=q&255;_=kb(q|0,0,16)|0;_=Ab|Qa|_&2031616;Qa=kb(fa(b+3>>0|0,1,0,1)|0|0|0,0,8)|0;Ab=D;o=kb(fa(b+4>>0|0,1,0,1)|0|0|0,0,16)|0;Ab=Ab|D;u=fa(b+5>>0|0,1,0,1)|0|0;Z=kb(u|0,0,24)|0;Ab=jb(Qa|q|o|Z|0,Ab|D|0,5)|0;Ab=Ab&2097151;Z=fa(b+7>>0|0,1,0,0)|0|0;o=kb(fa(b+6>>0|0,1,0,1)|0|0|0,0,8)|0;q=D;Z=Z&255;Qa=kb(Z|0,0,16)|0;q=jb(o|u|Qa|0,q|D|0,2)|0;q=q&2097151;Qa=kb(fa(b+8>>0|0,1,0,1)|0|0|0,0,8)|0;u=D;o=kb(fa(b+9>>0|0,1,0,1)|0|0|0,0,16)|0;u=u|D;j=fa(b+10>>0|0,1,0,1)|0|0;w=kb(j|0,0,24)|0;u=jb(Qa|Z|o|w|0,u|D|0,7)|0;u=u&2097151;w=kb(fa(b+11>>0|0,1,0,1)|0|0|0,0,8)|0;o=D;Z=kb(fa(b+12>>0|0,1,0,1)|0|0|0,0,16)|0;o=o|D;Qa=fa(b+13>>0|0,1,0,1)|0|0;na=kb(Qa|0,0,24)|0;o=jb(w|j|Z|na|0,o|D|0,4)|0;o=o&2097151;na=fa(b+15>>0|0,1,0,0)|0|0;Z=kb(fa(b+14>>0|0,1,0,1)|0|0|0,0,8)|0;j=D;na=na&255;w=kb(na|0,0,16)|0;j=jb(Z|Qa|w|0,j|D|0,1)|0;j=j&2097151;w=kb(fa(b+16>>0|0,1,0,1)|0|0|0,0,8)|0;Qa=D;Z=kb(fa(b+17>>0|0,1,0,1)|0|0|0,0,16)|0;Qa=Qa|D;Ga=fa(b+18>>0|0,1,0,1)|0|0;ya=kb(Ga|0,0,24)|0;Qa=jb(w|na|Z|ya|0,Qa|D|0,6)|0;Qa=Qa&2097151;ya=fa(b+20>>0|0,1,0,0)|0|0;Z=kb(fa(b+19>>0|0,1,0,1)|0|0|0,0,8)|0;na=D;ya=kb(ya&255|0,0,16)|0;na=jb(Z|Ga|ya|0,na|D|0,3)|0;ya=D;Ga=fa(b+23>>0|0,1,0,0)|0|0;Z=fa(b+21>>0|0,1,0,1)|0|0;w=kb(fa(b+22>>0|0,1,0,1)|0|0|0,0,8)|0;qb=D;Ga=Ga&255;Na=kb(Ga|0,0,16)|0;Na=w|Z|Na&2031616;Z=kb(fa(b+24>>0|0,1,0,1)|0|0|0,0,8)|0;w=D;mb=kb(fa(b+25>>0|0,1,0,1)|0|0|0,0,16)|0;w=w|D;x=fa(b+26>>0|0,1,0,1)|0|0;Ua=kb(x|0,0,24)|0;w=jb(Z|Ga|mb|Ua|0,w|D|0,5)|0;w=w&2097151;Ua=fa(b+28>>0|0,1,0,0)|0|0;mb=kb(fa(b+27>>0|0,1,0,1)|0|0|0,0,8)|0;Ga=D;Ua=Ua&255;Z=kb(Ua|0,0,16)|0;Ga=jb(mb|x|Z|0,Ga|D|0,2)|0;Ga=Ga&2097151;Z=kb(fa(b+29>>0|0,1,0,1)|0|0|0,0,8)|0;x=D;mb=kb(fa(b+30>>0|0,1,0,1)|0|0|0,0,16)|0;x=x|D;Ha=kb(fa(b+31>>0|0,1,0,1)|0|0|0,0,24)|0;x=jb(Z|Ua|mb|Ha|0,x|D|0,7)|0;Ha=D;mb=fa(c+2>>0|0,1,0,0)|0|0;Ua=fa(c>>0|0,1,0,1)|0|0;Z=kb(fa(c+1>>0|0,1,0,1)|0|0|0,0,8)|0;Fb=D;mb=mb&255;Eb=kb(mb|0,0,16)|0;Eb=Z|Ua|Eb&2031616;Ua=kb(fa(c+3>>0|0,1,0,1)|0|0|0,0,8)|0;Z=D;la=kb(fa(c+4>>0|0,1,0,1)|0|0|0,0,16)|0;Z=Z|D;r=fa(c+5>>0|0,1,0,1)|0|0;zc=kb(r|0,0,24)|0;Z=jb(Ua|mb|la|zc|0,Z|D|0,5)|0;Z=Z&2097151;zc=fa(c+7>>0|0,1,0,0)|0|0;la=kb(fa(c+6>>0|0,1,0,1)|0|0|0,0,8)|0;mb=D;zc=zc&255;Ua=kb(zc|0,0,16)|0;mb=jb(la|r|Ua|0,mb|D|0,2)|0;mb=mb&2097151;Ua=kb(fa(c+8>>0|0,1,0,1)|0|0|0,0,8)|0;r=D;la=kb(fa(c+9>>0|0,1,0,1)|0|0|0,0,16)|0;r=r|D;t=fa(c+10>>0|0,1,0,1)|0|0;X=kb(t|0,0,24)|0;r=jb(Ua|zc|la|X|0,r|D|0,7)|0;r=r&2097151;X=kb(fa(c+11>>0|0,1,0,1)|0|0|0,0,8)|0;la=D;zc=kb(fa(c+12>>0|0,1,0,1)|0|0|0,0,16)|0;la=la|D;Ua=fa(c+13>>0|0,1,0,1)|0|0;Bc=kb(Ua|0,0,24)|0;la=jb(X|t|zc|Bc|0,la|D|0,4)|0;la=la&2097151;Bc=fa(c+15>>0|0,1,0,0)|0|0;zc=kb(fa(c+14>>0|0,1,0,1)|0|0|0,0,8)|0;t=D;Bc=Bc&255;X=kb(Bc|0,0,16)|0;t=jb(zc|Ua|X|0,t|D|0,1)|0;t=t&2097151;X=kb(fa(c+16>>0|0,1,0,1)|0|0|0,0,8)|0;Ua=D;zc=kb(fa(c+17>>0|0,1,0,1)|0|0|0,0,16)|0;Ua=Ua|D;F=fa(c+18>>0|0,1,0,1)|0|0;A=kb(F|0,0,24)|0;Ua=jb(X|Bc|zc|A|0,Ua|D|0,6)|0;Ua=Ua&2097151;A=fa(c+20>>0|0,1,0,0)|0|0;zc=kb(fa(c+19>>0|0,1,0,1)|0|0|0,0,8)|0;Bc=D;A=kb(A&255|0,0,16)|0;Bc=jb(zc|F|A|0,Bc|D|0,3)|0;A=D;F=fa(c+23>>0|0,1,0,0)|0|0;zc=fa(c+21>>0|0,1,0,1)|0|0;X=kb(fa(c+22>>0|0,1,0,1)|0|0|0,0,8)|0;ob=D;F=F&255;za=kb(F|0,0,16)|0;za=X|zc|za&2
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// EMSCRIPTEN_END_FUNCS
|
||
|
return{_strlen:lb,_ge_mul8:Va,_keccak:db,_ge_scalarmult:Ta,_ge_fromfe_frombytes_vartime:Wa,_sc_mulsub:$a,_sc_reduce32:Ya,_bitshift64Lshr:jb,_bitshift64Shl:kb,_sc_add:Za,_bitshift64Ashr:fb,_memset:ib,_i64Add:hb,_memcpy:mb,_ge_double_scalarmult_base_vartime:Ca,_ge_p3_tobytes:Ma,_ge_double_scalarmult_precomp_vartime:Ua,_i64Subtract:gb,_ge_scalarmult_base:Pa,_ge_p1p1_to_p3:Ba,_ge_p1p1_to_p2:Ha,_ge_dsm_precomp:za,_ge_frombytes_vartime:Ia,_ge_tobytes:Ra,_sc_0:Xa,_sc_sub:_a,_sc_reduce:Sa,_ge_p3_to_cached:Aa,_sc_check:ab,_ge_add:xa,runPostSets:eb,stackAlloc:pa,stackSave:qa,stackRestore:ra,setThrew:sa,setTempRet0:va,getTempRet0:wa}
|
||
|
// EMSCRIPTEN_END_ASM
|
||
|
|
||
|
})({"Math":Math,"Int8Array":Int8Array,"Int16Array":Int16Array,"Int32Array":Int32Array,"Uint8Array":Uint8Array,"Uint16Array":Uint16Array,"Uint32Array":Uint32Array,"Float32Array":Float32Array,"Float64Array":Float64Array},{"abort":abort,"assert":assert,"asmPrintInt":asmPrintInt,"asmPrintFloat":asmPrintFloat,"min":Math_min,"SAFE_HEAP_LOAD":SAFE_HEAP_LOAD,"SAFE_HEAP_STORE":SAFE_HEAP_STORE,"SAFE_FT_MASK":SAFE_FT_MASK,"_free":_free,"___setErrNo":___setErrNo,"_malloc":_malloc,"_emscripten_memcpy_big":_emscripten_memcpy_big,"_fflush":_fflush,"___assert_fail":___assert_fail,"STACKTOP":STACKTOP,"STACK_MAX":STACK_MAX,"tempDoublePtr":tempDoublePtr,"ABORT":ABORT,"cttz_i8":cttz_i8,"ctlz_i8":ctlz_i8,"NaN":NaN,"Infinity":Infinity},buffer);var _strlen=Module["_strlen"]=asm["_strlen"];var _ge_mul8=Module["_ge_mul8"]=asm["_ge_mul8"];var _keccak=Module["_keccak"]=asm["_keccak"];var _ge_scalarmult=Module["_ge_scalarmult"]=asm["_ge_scalarmult"];var _ge_fromfe_frombytes_vartime=Module["_ge_fromfe_frombytes_vartime"]=asm["_ge_fromfe_frombytes_vartime"];var _sc_mulsub=Module["_sc_mulsub"]=asm["_sc_mulsub"];var _sc_reduce32=Module["_sc_reduce32"]=asm["_sc_reduce32"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _sc_add=Module["_sc_add"]=asm["_sc_add"];var _bitshift64Ashr=Module["_bitshift64Ashr"]=asm["_bitshift64Ashr"];var _memset=Module["_memset"]=asm["_memset"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _ge_double_scalarmult_base_vartime=Module["_ge_double_scalarmult_base_vartime"]=asm["_ge_double_scalarmult_base_vartime"];var _ge_p3_tobytes=Module["_ge_p3_tobytes"]=asm["_ge_p3_tobytes"];var _ge_double_scalarmult_precomp_vartime=Module["_ge_double_scalarmult_precomp_vartime"]=asm["_ge_double_scalarmult_precomp_vartime"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _ge_scalarmult_base=Module["_ge_scalarmult_base"]=asm["_ge_scalarmult_base"];var _ge_p1p1_to_p3=Module["_ge_p1p1_to_p3"]=asm["_ge_p1p1_to_p3"];var _ge_p1p1_to_p2=Module["_ge_p1p1_to_p2"]=asm["_ge_p1p1_to_p2"];var _ge_dsm_precomp=Module["_ge_dsm_precomp"]=asm["_ge_dsm_precomp"];var _ge_frombytes_vartime=Module["_ge_frombytes_vartime"]=asm["_ge_frombytes_vartime"];var _ge_tobytes=Module["_ge_tobytes"]=asm["_ge_tobytes"];var _sc_0=Module["_sc_0"]=asm["_sc_0"];var _sc_sub=Module["_sc_sub"]=asm["_sc_sub"];var _sc_reduce=Module["_sc_reduce"]=asm["_sc_reduce"];var _ge_p3_to_cached=Module["_ge_p3_to_cached"]=asm["_ge_p3_to_cached"];var _sc_check=Module["_sc_check"]=asm["_sc_check"];var _ge_add=Module["_ge_add"]=asm["_ge_add"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];Runtime.stackAlloc=asm["stackAlloc"];Runtime.stackSave=asm["stackSave"];Runtime.stackRestore=asm["stackRestore"];Runtime.setTempRet0=asm["setTempRet0"];Runtime.getTempRet0=asm["getTempRet0"];var i64Math=(function(){var goog={math:{}};goog.math.Long=(function(low,high){this.low_=low|0;this.high_=high|0});goog.math.Long.IntCache_={};goog.math.Long.fromInt=(function(value){if(-128<=value&&value<128){var cachedObj=goog.math.Long.IntCache_[value];if(cachedObj){return cachedObj}}var obj=new goog.math.Long(value|0,value<0?-1:0);if(-128<=value&&value<128){goog.math.Long.IntCache_[value]=obj}return obj});goog.math.Long.fromNumber=(function(value){if(isNaN(value)||!isFinite(value)){return goog.math.Long.ZERO}else if(value<=-goog.math.Long.TWO_PWR_63_DBL_){return goog.math.Long.MIN_VALUE}else if(value+1>=goog.math.Long.TWO_PWR_63_DBL_){return goog.math.Long.MAX_VALUE}else if(value<0){return goog.math.Long.fromNumber(-value).negate()}else{return new goog.math.Long(value%goog.math.Long.TWO_PWR_32_DBL_|0,value/goog.math.Long.TWO_PWR_32_DBL_|0)}});goog.math.Long.fromBits=(function(lowBits,highBits){return new goog.math.Long(lowBits,highBits)});goog.math.Long.fromString=(function(str,opt_radix){if(str.length==0){throw Error("number format error: empty string")}var radix=opt_radix||10;if(radix<2||36<radix){throw Error("radix out of range: "+radix)}if(str.charAt(0)=="-"){r
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
var moneroConfig = {
|
||
|
coinUnitPlaces: 12,
|
||
|
coinSymbol: 'XMR',
|
||
|
coinName: 'Monero',
|
||
|
coinUriPrefix: 'monero:',
|
||
|
addressPrefix: 18,
|
||
|
addressHeader: ''
|
||
|
};
|
||
|
var aeonConfig = {
|
||
|
coinUnitPlaces: 12,
|
||
|
coinSymbol: 'AEON',
|
||
|
coinName: 'Aeon',
|
||
|
coinUriPrefix: 'aeon:',
|
||
|
addressPrefix: 0xB2,
|
||
|
addressHeader: ''
|
||
|
};
|
||
|
var townforgeConfig = {
|
||
|
coinUnitPlaces: 8,
|
||
|
coinSymbol: 'None',
|
||
|
coinName: 'Townforge',
|
||
|
coinUriPrefix: 'townforge:',
|
||
|
addressPrefix: 0x78,
|
||
|
addressHeader: 'TF1M'
|
||
|
};
|
||
|
var cnUtilGen = function(initConfig) {
|
||
|
//var config = $.extend({}, initConfig);
|
||
|
var config = initConfig;
|
||
|
config.coinUnits = new JSBigInt(10).pow(config.coinUnitPlaces);
|
||
|
|
||
|
var HASH_STATE_BYTES = 200;
|
||
|
var HASH_SIZE = 32;
|
||
|
var ADDRESS_CHECKSUM_SIZE = 4;
|
||
|
var CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX = config.addressPrefix;
|
||
|
var ADDRESS_HEADER = config.addressHeader;
|
||
|
var UINT64_MAX = new JSBigInt(2).pow(64);
|
||
|
var CURRENT_TX_VERSION = 1;
|
||
|
var TX_EXTRA_NONCE_MAX_COUNT = 255;
|
||
|
var TX_EXTRA_TAGS = {
|
||
|
PADDING: '00',
|
||
|
PUBKEY: '01',
|
||
|
NONCE: '02',
|
||
|
MERGE_MINING: '03'
|
||
|
};
|
||
|
var TX_EXTRA_NONCE_TAGS = {
|
||
|
PAYMENT_ID: '00'
|
||
|
};
|
||
|
var KEY_SIZE = 32;
|
||
|
var STRUCT_SIZES = {
|
||
|
GE_P3: 160,
|
||
|
GE_P2: 120,
|
||
|
GE_P1P1: 160,
|
||
|
GE_CACHED: 160,
|
||
|
EC_SCALAR: 32,
|
||
|
EC_POINT: 32,
|
||
|
KEY_IMAGE: 32,
|
||
|
GE_DSMP: 160 * 8, // ge_cached * 8
|
||
|
SIGNATURE: 64 // ec_scalar * 2
|
||
|
};
|
||
|
|
||
|
this.valid_hex = function(hex) {
|
||
|
return /[0-9a-fA-F]+/.test(hex);
|
||
|
};
|
||
|
|
||
|
function hextobin(hex) {
|
||
|
if (hex.length % 2 !== 0) throw "Hex string has invalid length!";
|
||
|
var res = new Uint8Array(hex.length / 2);
|
||
|
for (var i = 0; i < hex.length / 2; ++i) {
|
||
|
res[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
|
||
|
}
|
||
|
return res;
|
||
|
}
|
||
|
this.hextobin = hextobin;
|
||
|
|
||
|
function bintohex(bin) {
|
||
|
var out = [];
|
||
|
for (var i = 0; i < bin.length; ++i) {
|
||
|
out.push(("0" + bin[i].toString(16)).slice(-2));
|
||
|
}
|
||
|
return out.join("");
|
||
|
}
|
||
|
|
||
|
this.sc_reduce = function(hex) {
|
||
|
var input = hextobin(hex);
|
||
|
if (input.length !== 64) {
|
||
|
throw "Invalid input length";
|
||
|
}
|
||
|
var mem = Module._malloc(64);
|
||
|
Module.HEAPU8.set(input, mem);
|
||
|
Module.ccall('sc_reduce', 'void', ['number'], [mem]);
|
||
|
var output = Module.HEAPU8.subarray(mem, mem + 64);
|
||
|
Module._free(mem);
|
||
|
return bintohex(output);
|
||
|
};
|
||
|
|
||
|
this.sc_reduce32 = function(hex) {
|
||
|
var input = hextobin(hex);
|
||
|
if (input.length !== 32) {
|
||
|
throw "Invalid input length";
|
||
|
}
|
||
|
var mem = Module._malloc(32);
|
||
|
Module.HEAPU8.set(input, mem);
|
||
|
Module.ccall('sc_reduce32', 'void', ['number'], [mem]);
|
||
|
var output = Module.HEAPU8.subarray(mem, mem + 32);
|
||
|
Module._free(mem);
|
||
|
return bintohex(output);
|
||
|
};
|
||
|
|
||
|
this.ge_scalarmult_base = function(hex) {
|
||
|
var input = hextobin(hex);
|
||
|
if (input.length !== 32) {
|
||
|
throw "Invalid input length";
|
||
|
}
|
||
|
var input_mem = Module._malloc(32);
|
||
|
Module.HEAPU8.set(input, input_mem);
|
||
|
var ge_p3 = Module._malloc(STRUCT_SIZES.GE_P3);
|
||
|
Module.ccall('ge_scalarmult_base', 'void', ['number', 'number'], [ge_p3, input_mem]);
|
||
|
var output = Module.HEAPU8.subarray(ge_p3, ge_p3 + STRUCT_SIZES.GE_P3);
|
||
|
Module._free(input_mem);
|
||
|
Module._free(ge_p3);
|
||
|
return bintohex(output);
|
||
|
};
|
||
|
|
||
|
this.ge_p3_tobytes = function(hex) {
|
||
|
var input = hextobin(hex);
|
||
|
if (input.length !== STRUCT_SIZES.GE_P3) {
|
||
|
throw "Invalid input length";
|
||
|
}
|
||
|
var ge_p3 = Module._malloc(STRUCT_SIZES.GE_P3);
|
||
|
Module.HEAPU8.set(input, ge_p3);
|
||
|
var out_mem = Module._malloc(32);
|
||
|
Module.ccall('ge_p3_tobytes', 'void', ['number', 'number'], [out_mem, ge_p3]);
|
||
|
var output = Module.HEAPU8.subarray(out_mem, out_mem + 32);
|
||
|
Module._free(ge_p3);
|
||
|
Module._free(out_mem);
|
||
|
return bintohex(output);
|
||
|
};
|
||
|
|
||
|
this.cn_fast_hash = function(input, inlen) {
|
||
|
if (inlen === undefined || !inlen) {
|
||
|
inlen = Math.floor(input.length / 2);
|
||
|
}
|
||
|
if (input.length !== inlen * 2) {
|
||
|
console.log("Input length not equal to specified");
|
||
|
}
|
||
|
var state = this.keccak(input, inlen, HASH_STATE_BYTES);
|
||
|
return state.substr(0, HASH_SIZE * 2);
|
||
|
};
|
||
|
|
||
|
this.encode_varint = function(i) {
|
||
|
i = new JSBigInt(i);
|
||
|
var out = '';
|
||
|
// While i >= b10000000
|
||
|
while (i.compare(0x80) >= 0) {
|
||
|
// out.append i & b01111111 | b10000000
|
||
|
out += ("0" + ((i.lowVal() & 0x7f) | 0x80).toString(16)).slice(-2);
|
||
|
i = i.divide(new JSBigInt(2).pow(7));
|
||
|
}
|
||
|
out += ("0" + i.toJSValue().toString(16)).slice(-2);
|
||
|
return out;
|
||
|
};
|
||
|
|
||
|
this.pubkeys_to_string = function(spend, view) {
|
||
|
var prefix = this.encode_varint(CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX);
|
||
|
var data = prefix + spend + view;
|
||
|
var checksum = this.cn_fast_hash(data);
|
||
|
return ADDRESS_HEADER + cnBase58.encode(data + checksum.slice(0, ADDRESS_CHECKSUM_SIZE * 2));
|
||
|
};
|
||
|
|
||
|
// Generate keypair from seed
|
||
|
this.generate_keys = function(seed) {
|
||
|
if (seed.length !== 64) throw "Invalid input length!";
|
||
|
var sec = this.sc_reduce32(seed);
|
||
|
var point = this.ge_scalarmult_base(sec);
|
||
|
var pub = this.ge_p3_tobytes(point);
|
||
|
return {
|
||
|
'sec': sec,
|
||
|
'pub': pub
|
||
|
};
|
||
|
};
|
||
|
|
||
|
this.sec_key_to_pub = function(sec) {
|
||
|
var point = this.ge_scalarmult_base(sec);
|
||
|
var pub = this.ge_p3_tobytes(point);
|
||
|
return pub;
|
||
|
};
|
||
|
|
||
|
this.keccak = function(hex, inlen, outlen) {
|
||
|
var input = hextobin(hex);
|
||
|
if (input.length !== inlen) {
|
||
|
throw "Invalid input length";
|
||
|
}
|
||
|
if (outlen <= 0) {
|
||
|
throw "Invalid output length";
|
||
|
}
|
||
|
var input_mem = Module._malloc(inlen);
|
||
|
Module.HEAPU8.set(input, input_mem);
|
||
|
var out_mem = Module._malloc(outlen);
|
||
|
Module._keccak(input_mem, inlen | 0, out_mem, outlen | 0);
|
||
|
var output = Module.HEAPU8.subarray(out_mem, out_mem + outlen);
|
||
|
Module._free(input_mem);
|
||
|
Module._free(out_mem);
|
||
|
return bintohex(output);
|
||
|
};
|
||
|
|
||
|
this.create_address = function(seed) {
|
||
|
var keys = {};
|
||
|
var first;
|
||
|
if (seed.length !== 64) {
|
||
|
first = this.keccak(seed, seed.length / 2, 32);
|
||
|
} else {
|
||
|
first = seed;
|
||
|
}
|
||
|
keys.spend = this.generate_keys(first);
|
||
|
var second = this.keccak(keys.spend.sec, 32, 32);
|
||
|
keys.view = this.generate_keys(second);
|
||
|
keys.public_addr = this.pubkeys_to_string(keys.spend.pub, keys.view.pub);
|
||
|
return keys;
|
||
|
};
|
||
|
|
||
|
this.create_address_if_prefix = function(seed, prefix) {
|
||
|
var keys = {};
|
||
|
var first;
|
||
|
if (seed.length !== 64) {
|
||
|
first = this.keccak(seed, seed.length / 2, 32);
|
||
|
} else {
|
||
|
first = seed;
|
||
|
}
|
||
|
keys.spend = this.generate_keys(first);
|
||
|
public_addr = this.pubkeys_to_string(keys.spend.pub, "");
|
||
|
if (public_addr.toUpperCase().slice(0, prefix.length) != prefix.toUpperCase())
|
||
|
return null;
|
||
|
var second = this.keccak(keys.spend.sec, 32, 32);
|
||
|
keys.view = this.generate_keys(second);
|
||
|
keys.public_addr = this.pubkeys_to_string(keys.spend.pub, keys.view.pub);
|
||
|
return keys;
|
||
|
};
|
||
|
|
||
|
this.create_addr_prefix = function(seed) {
|
||
|
var first;
|
||
|
if (seed.length !== 64) {
|
||
|
first = this.keccak(seed, seed.length / 2, 32);
|
||
|
} else {
|
||
|
first = seed;
|
||
|
}
|
||
|
var spend = this.generate_keys(first);
|
||
|
var prefix = this.encode_varint(CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX);
|
||
|
return ADDRESS_HEADER + cnBase58.encode(prefix + spend.pub).slice(0, 44);
|
||
|
};
|
||
|
|
||
|
this.hash_to_ec = function(key) {
|
||
|
if (key.length !== (KEY_SIZE * 2)) {
|
||
|
throw "Invalid input length";
|
||
|
}
|
||
|
var h_m = Module._malloc(HASH_SIZE);
|
||
|
var point_m = Module._malloc(STRUCT_SIZES.GE_P2);
|
||
|
var point2_m = Module._malloc(STRUCT_SIZES.GE_P1P1);
|
||
|
var res_m = Module._malloc(STRUCT_SIZES.GE_P3);
|
||
|
var hash = hextobin(this.cn_fast_hash(key, KEY_SIZE));
|
||
|
Module.HEAPU8.set(hash, h_m);
|
||
|
Module.ccall("ge_fromfe_frombytes_vartime", "void", ["number", "number"], [point_m, h_m]);
|
||
|
Module.ccall("ge_mul8", "void", ["number", "number"], [point2_m, point_m]);
|
||
|
Module.ccall("ge_p1p1_to_p3", "void", ["number", "number"], [res_m, point2_m]);
|
||
|
var res = Module.HEAPU8.subarray(res_m, res_m + STRUCT_SIZES.GE_P3);
|
||
|
Module._free(h_m);
|
||
|
Module._free(point_m);
|
||
|
Module._free(point2_m);
|
||
|
Module._free(res_m);
|
||
|
return bintohex(res);
|
||
|
};
|
||
|
|
||
|
this.decode_address = function(address) {
|
||
|
var header = address.slice(0, 4)
|
||
|
if (header != ADDRESS_HEADER) {
|
||
|
throw "Invlaid address header";
|
||
|
}
|
||
|
address = address.slice(4)
|
||
|
var dec = cnBase58.decode(address);
|
||
|
var expectedPrefix = this.encode_varint(CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX);
|
||
|
var prefix = dec.slice(0, expectedPrefix.length);
|
||
|
if (prefix !== expectedPrefix) {
|
||
|
throw "Invalid address prefix";
|
||
|
}
|
||
|
dec = dec.slice(expectedPrefix.length);
|
||
|
var spend = dec.slice(0, 64);
|
||
|
var view = dec.slice(64, 128);
|
||
|
var checksum = dec.slice(128, 128 + (ADDRESS_CHECKSUM_SIZE * 2));
|
||
|
var expectedChecksum = this.cn_fast_hash(prefix + spend + view).slice(0, ADDRESS_CHECKSUM_SIZE * 2);
|
||
|
if (checksum !== expectedChecksum) {
|
||
|
throw "Invalid checksum";
|
||
|
}
|
||
|
return {
|
||
|
spend: spend,
|
||
|
view: view
|
||
|
};
|
||
|
};
|
||
|
|
||
|
// Generate a 256-bit crypto random
|
||
|
this.rand_32 = function() {
|
||
|
return mn_random(256);
|
||
|
};
|
||
|
|
||
|
// Generate a 128-bit crypto random
|
||
|
this.rand_16 = function() {
|
||
|
return mn_random(128);
|
||
|
};
|
||
|
|
||
|
this.random_keypair = function() {
|
||
|
return this.generate_keys(this.rand_32());
|
||
|
};
|
||
|
|
||
|
this.generate_key_derivation = function(pub, sec) {
|
||
|
if (pub.length !== 64 || sec.length !== 64) {
|
||
|
throw "Invalid input length";
|
||
|
}
|
||
|
var pub_b = hextobin(pub);
|
||
|
var sec_b = hextobin(sec);
|
||
|
var pub_m = Module._malloc(KEY_SIZE);
|
||
|
Module.HEAPU8.set(pub_b, pub_m);
|
||
|
var sec_m = Module._malloc(KEY_SIZE);
|
||
|
Module.HEAPU8.set(sec_b, sec_m);
|
||
|
var ge_p3_m = Module._malloc(STRUCT_SIZES.GE_P3);
|
||
|
var ge_p2_m = Module._malloc(STRUCT_SIZES.GE_P2);
|
||
|
var ge_p1p1_m = Module._malloc(STRUCT_SIZES.GE_P1P1);
|
||
|
if (Module.ccall("ge_frombytes_vartime", "bool", ["number", "number"], [ge_p3_m, pub_m]) !== 0) {
|
||
|
throw "ge_frombytes_vartime returned non-zero error code";
|
||
|
}
|
||
|
Module.ccall("ge_scalarmult", "void", ["number", "number", "number"], [ge_p2_m, sec_m, ge_p3_m]);
|
||
|
Module.ccall("ge_mul8", "void", ["number", "number"], [ge_p1p1_m, ge_p2_m]);
|
||
|
Module.ccall("ge_p1p1_to_p2", "void", ["number", "number"], [ge_p2_m, ge_p1p1_m]);
|
||
|
var derivation_m = Module._malloc(KEY_SIZE);
|
||
|
Module.ccall("ge_tobytes", "void", ["number", "number"], [derivation_m, ge_p2_m]);
|
||
|
var res = Module.HEAPU8.subarray(derivation_m, derivation_m + KEY_SIZE);
|
||
|
Module._free(pub_m);
|
||
|
Module._free(sec_m);
|
||
|
Module._free(ge_p3_m);
|
||
|
Module._free(ge_p2_m);
|
||
|
Module._free(ge_p1p1_m);
|
||
|
Module._free(derivation_m);
|
||
|
return bintohex(res);
|
||
|
};
|
||
|
|
||
|
this.hash_to_scalar = function(buf) {
|
||
|
var hash = this.cn_fast_hash(buf);
|
||
|
var scalar = this.sc_reduce32(hash);
|
||
|
return scalar;
|
||
|
};
|
||
|
|
||
|
this.derivation_to_scalar = function(derivation, output_index) {
|
||
|
var buf = "";
|
||
|
if (derivation.length !== (STRUCT_SIZES.EC_POINT * 2)) {
|
||
|
throw "Invalid derivation length!";
|
||
|
}
|
||
|
buf += derivation;
|
||
|
var enc = encode_varint(output_index);
|
||
|
if (enc.length > 10 * 2) {
|
||
|
throw "output_index didn't fit in 64-bit varint";
|
||
|
}
|
||
|
buf += enc;
|
||
|
return this.hash_to_scalar(buf);
|
||
|
};
|
||
|
|
||
|
this.derive_public_key = function(derivation, out_index, pub) {
|
||
|
if (derivation.length !== 64 || pub.length !== 64) {
|
||
|
throw "Invalid input length!";
|
||
|
}
|
||
|
var derivation_m = Module._malloc(KEY_SIZE);
|
||
|
var derivation_b = hextobin(derivation);
|
||
|
Module.HEAPU8.set(derivation_b, derivation_m);
|
||
|
var base_m = Module._malloc(KEY_SIZE);
|
||
|
var base_b = hextobin(pub);
|
||
|
Module.HEAPU8.set(base_b, base_m);
|
||
|
var point1_m = Module._malloc(STRUCT_SIZES.GE_P3);
|
||
|
var point2_m = Module._malloc(STRUCT_SIZES.GE_P3);
|
||
|
var point3_m = Module._malloc(STRUCT_SIZES.GE_CACHED);
|
||
|
var point4_m = Module._malloc(STRUCT_SIZES.GE_P1P1);
|
||
|
var point5_m = Module._malloc(STRUCT_SIZES.GE_P2);
|
||
|
var derived_key_m = Module._malloc(KEY_SIZE);
|
||
|
if (Module.ccall("ge_frombytes_vartime", "bool", ["number", "number"], [point1_m, base_m]) !== 0) {
|
||
|
throw "ge_frombytes_vartime returned non-zero error code";
|
||
|
}
|
||
|
var scalar_m = Module._malloc(STRUCT_SIZES.EC_SCALAR);
|
||
|
var scalar_b = hextobin(this.derivation_to_scalar(
|
||
|
bintohex(Module.HEAPU8.subarray(derivation_m, derivation_m + STRUCT_SIZES.EC_POINT)), out_index));
|
||
|
Module.HEAPU8.set(scalar_b, scalar_m);
|
||
|
Module.ccall("ge_scalarmult_base", "void", ["number", "number"], [point2_m, scalar_m]);
|
||
|
Module.ccall("ge_p3_to_cached", "void", ["number", "number"], [point3_m, point2_m]);
|
||
|
Module.ccall("ge_add", "void", ["number", "number", "number"], [point4_m, point1_m, point3_m]);
|
||
|
Module.ccall("ge_p1p1_to_p2", "void", ["number", "number"], [point5_m, point4_m]);
|
||
|
Module.ccall("ge_tobytes", "void", ["number", "number"], [derived_key_m, point5_m]);
|
||
|
var res = Module.HEAPU8.subarray(derived_key_m, derived_key_m + KEY_SIZE);
|
||
|
Module._free(derivation_m);
|
||
|
Module._free(base_m);
|
||
|
Module._free(scalar_m);
|
||
|
Module._free(point1_m);
|
||
|
Module._free(point2_m);
|
||
|
Module._free(point3_m);
|
||
|
Module._free(point4_m);
|
||
|
Module._free(point5_m);
|
||
|
Module._free(derived_key_m);
|
||
|
return bintohex(res);
|
||
|
};
|
||
|
|
||
|
this.derive_secret_key = function(derivation, out_index, sec) {
|
||
|
if (derivation.length !== 64 || sec.length !== 64) {
|
||
|
throw "Invalid input length!";
|
||
|
}
|
||
|
var scalar_m = Module._malloc(STRUCT_SIZES.EC_SCALAR);
|
||
|
var scalar_b = hextobin(this.derivation_to_scalar(derivation, out_index));
|
||
|
Module.HEAPU8.set(scalar_b, scalar_m);
|
||
|
var base_m = Module._malloc(KEY_SIZE);
|
||
|
Module.HEAPU8.set(hextobin(sec), base_m);
|
||
|
var derived_m = Module._malloc(STRUCT_SIZES.EC_POINT);
|
||
|
Module.ccall("sc_add", "void", ["number", "number", "number"], [derived_m, base_m, scalar_m]);
|
||
|
var res = Module.HEAPU8.subarray(derived_m, derived_m + STRUCT_SIZES.EC_POINT);
|
||
|
Module._free(scalar_m);
|
||
|
Module._free(base_m);
|
||
|
Module._free(derived_m);
|
||
|
return bintohex(res);
|
||
|
};
|
||
|
|
||
|
// Random 32-byte ec scalar
|
||
|
this.random_scalar = function() {
|
||
|
var rand = this.sc_reduce(mn_random(64 * 8));
|
||
|
return rand.slice(0, STRUCT_SIZES.EC_SCALAR * 2);
|
||
|
};
|
||
|
|
||
|
this.valid_keys = function(view_pub, view_sec, spend_pub, spend_sec) {
|
||
|
var expected_view_pub = this.sec_key_to_pub(view_sec);
|
||
|
var expected_spend_pub = this.sec_key_to_pub(spend_sec);
|
||
|
return (expected_spend_pub === spend_pub) && (expected_view_pub === view_pub);
|
||
|
};
|
||
|
|
||
|
function trimRight(str, char) {
|
||
|
while (str[str.length - 1] == char) str = str.slice(0, -1);
|
||
|
return str;
|
||
|
}
|
||
|
|
||
|
function padLeft(str, len, char) {
|
||
|
while (str.length < len) {
|
||
|
str = char + str;
|
||
|
}
|
||
|
return str;
|
||
|
}
|
||
|
|
||
|
function assert(stmt, val) {
|
||
|
if (!stmt) {
|
||
|
throw "assert failed" + (val !== undefined ? ': ' + val : '');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return this;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
mnemonic.js : Converts between 4-byte aligned strings and a human-readable
|
||
|
sequence of words. Uses 1626 common words taken from wikipedia article:
|
||
|
http://en.wiktionary.org/wiki/Wiktionary:Frequency_lists/Contemporary_poetry
|
||
|
Originally written in python special for Electrum (lightweight Bitcoin client).
|
||
|
This version has been reimplemented in javascript and placed in public domain.
|
||
|
*/
|
||
|
var mn_default_wordset = 'english';
|
||
|
|
||
|
function mn_get_checksum_index(words, prefix_len) {
|
||
|
var trimmed_words = "";
|
||
|
for (var i = 0; i < words.length; i++) {
|
||
|
trimmed_words += words[i].slice(0, prefix_len);
|
||
|
}
|
||
|
var checksum = crc32.run(trimmed_words);
|
||
|
var index = checksum % words.length;
|
||
|
return index;
|
||
|
}
|
||
|
|
||
|
function mn_encode(str, wordset_name) {
|
||
|
'use strict';
|
||
|
wordset_name = wordset_name || mn_default_wordset;
|
||
|
var wordset = mn_words[wordset_name];
|
||
|
var out = [];
|
||
|
var n = wordset.words.length;
|
||
|
for (var j = 0; j < str.length; j += 8) {
|
||
|
str = str.slice(0, j) + mn_swap_endian_4byte(str.slice(j, j + 8)) + str.slice(j + 8);
|
||
|
}
|
||
|
for (var i = 0; i < str.length; i += 8) {
|
||
|
var x = parseInt(str.substr(i, 8), 16);
|
||
|
var w1 = (x % n);
|
||
|
var w2 = (Math.floor(x / n) + w1) % n;
|
||
|
var w3 = (Math.floor(Math.floor(x / n) / n) + w2) % n;
|
||
|
out = out.concat([wordset.words[w1], wordset.words[w2], wordset.words[w3]]);
|
||
|
}
|
||
|
if (wordset.prefix_len > 0) {
|
||
|
out.push(out[mn_get_checksum_index(out, wordset.prefix_len)]);
|
||
|
}
|
||
|
return out.join(' ');
|
||
|
}
|
||
|
|
||
|
function mn_swap_endian_4byte(str) {
|
||
|
'use strict';
|
||
|
if (str.length !== 8) throw 'Invalid input length: ' + str.length;
|
||
|
return str.slice(6, 8) + str.slice(4, 6) + str.slice(2, 4) + str.slice(0, 2);
|
||
|
}
|
||
|
|
||
|
function mn_decode(str, wordset_name) {
|
||
|
'use strict';
|
||
|
wordset_name = wordset_name || mn_default_wordset;
|
||
|
var wordset = mn_words[wordset_name];
|
||
|
var out = '';
|
||
|
var n = wordset.words.length;
|
||
|
var wlist = str.split(' ');
|
||
|
var checksum_word = '';
|
||
|
if (wlist.length < 12) throw "You've entered too few words, please try again";
|
||
|
if ((wordset.prefix_len === 0 && (wlist.length % 3 !== 0)) ||
|
||
|
(wordset.prefix_len > 0 && (wlist.length % 3 === 2))) throw "You've entered too few words, please try again";
|
||
|
if (wordset.prefix_len > 0 && (wlist.length % 3 === 0)) throw "You seem to be missing the last word in your private key, please try again";
|
||
|
if (wordset.prefix_len > 0) {
|
||
|
// Pop checksum from mnemonic
|
||
|
checksum_word = wlist.pop();
|
||
|
}
|
||
|
// Decode mnemonic
|
||
|
for (var i = 0; i < wlist.length; i += 3) {
|
||
|
var w1, w2, w3;
|
||
|
if (wordset.prefix_len === 0) {
|
||
|
w1 = wordset.words.indexOf(wlist[i]);
|
||
|
w2 = wordset.words.indexOf(wlist[i + 1]);
|
||
|
w3 = wordset.words.indexOf(wlist[i + 2]);
|
||
|
} else {
|
||
|
w1 = wordset.trunc_words.indexOf(wlist[i].slice(0, wordset.prefix_len));
|
||
|
w2 = wordset.trunc_words.indexOf(wlist[i + 1].slice(0, wordset.prefix_len));
|
||
|
w3 = wordset.trunc_words.indexOf(wlist[i + 2].slice(0, wordset.prefix_len));
|
||
|
}
|
||
|
if (w1 === -1 || w2 === -1 || w3 === -1) {
|
||
|
throw "invalid word in mnemonic";
|
||
|
}
|
||
|
var x = w1 + n * (((n - w1) + w2) % n) + n * n * (((n - w2) + w3) % n);
|
||
|
if (x % n != w1) throw 'Something went wrong when decoding your private key, please try again';
|
||
|
out += mn_swap_endian_4byte(('0000000' + x.toString(16)).slice(-8));
|
||
|
}
|
||
|
// Verify checksum
|
||
|
if (wordset.prefix_len > 0) {
|
||
|
var index = mn_get_checksum_index(wlist, wordset.prefix_len);
|
||
|
var expected_checksum_word = wlist[index];
|
||
|
if (expected_checksum_word.slice(0, wordset.prefix_len) !== checksum_word.slice(0, wordset.prefix_len)) {
|
||
|
throw "Your private key could not be verified, please try again";
|
||
|
}
|
||
|
}
|
||
|
return out;
|
||
|
}
|
||
|
|
||
|
function mn_random(bits) {
|
||
|
'use strict';
|
||
|
if (bits % 32 !== 0) throw "Something weird went wrong: Invalid number of bits - " + bits;
|
||
|
var array = new Uint32Array(bits / 32);
|
||
|
if (!window.crypto) throw "Unfortunately MyMonero only runs on browsers that support the JavaScript Crypto API";
|
||
|
var i = 0;
|
||
|
|
||
|
function arr_is_zero() {
|
||
|
for (var j = 0; j < bits / 32; ++j) {
|
||
|
if (array[j] !== 0) return false;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
do {
|
||
|
window.crypto.getRandomValues(array);
|
||
|
++i;
|
||
|
} while (i < 5 && arr_is_zero());
|
||
|
if (arr_is_zero()) {
|
||
|
throw "Something went wrong and we could not securely generate random data for your account";
|
||
|
}
|
||
|
// Convert to hex
|
||
|
var out = '';
|
||
|
for (var j = 0; j < bits / 32; ++j) {
|
||
|
out += ('0000000' + array[j].toString(16)).slice(-8);
|
||
|
}
|
||
|
return out;
|
||
|
}
|
||
|
|
||
|
var mn_words = {
|
||
|
'electrum': {
|
||
|
prefix_len: 0,
|
||
|
words: [
|
||
|
"like", "just", "love", "know", "never", "want", "time", "out", "there",
|
||
|
"make", "look", "eye", "down", "only", "think", "heart", "back", "then",
|
||
|
"into", "about", "more", "away", "still", "them", "take", "thing", "even",
|
||
|
"through", "long", "always", "world", "too", "friend", "tell", "try",
|
||
|
"hand", "thought", "over", "here", "other", "need", "smile", "again",
|
||
|
"much", "cry", "been", "night", "ever", "little", "said", "end", "some",
|
||
|
"those", "around", "mind", "people", "girl", "leave", "dream", "left",
|
||
|
"turn", "myself", "give", "nothing", "really", "off", "before",
|
||
|
"something", "find", "walk", "wish", "good", "once", "place", "ask",
|
||
|
"stop", "keep", "watch", "seem", "everything", "wait", "got", "yet",
|
||
|
"made", "remember", "start", "alone", "run", "hope", "maybe", "believe",
|
||
|
"body", "hate", "after", "close", "talk", "stand", "own", "each", "hurt",
|
||
|
"help", "home", "god", "soul", "new", "many", "two", "inside", "should",
|
||
|
"true", "first", "fear", "mean", "better", "play", "another", "gone",
|
||
|
"change", "use", "wonder", "someone", "hair", "cold", "open", "best",
|
||
|
"any", "behind", "happen", "water", "dark", "laugh", "stay", "forever",
|
||
|
"name", "work", "show", "sky", "break", "came", "deep", "door", "put",
|
||
|
"black", "together", "upon", "happy", "such", "great", "white", "matter",
|
||
|
"fill", "past", "please", "burn", "cause", "enough", "touch", "moment",
|
||
|
"soon", "voice", "scream", "anything", "stare", "sound", "red", "everyone",
|
||
|
"hide", "kiss", "truth", "death", "beautiful", "mine", "blood", "broken",
|
||
|
"very", "pass", "next", "forget", "tree", "wrong", "air", "mother",
|
||
|
"understand", "lip", "hit", "wall", "memory", "sleep", "free", "high",
|
||
|
"realize", "school", "might", "skin", "sweet", "perfect", "blue", "kill",
|
||
|
"breath", "dance", "against", "fly", "between", "grow", "strong", "under",
|
||
|
"listen", "bring", "sometimes", "speak", "pull", "person", "become",
|
||
|
"family", "begin", "ground", "real", "small", "father", "sure", "feet",
|
||
|
"rest", "young", "finally", "land", "across", "today", "different", "guy",
|
||
|
"line", "fire", "reason", "reach", "second", "slowly", "write", "eat",
|
||
|
"smell", "mouth", "step", "learn", "three", "floor", "promise", "breathe",
|
||
|
"darkness", "push", "earth", "guess", "save", "song", "above", "along",
|
||
|
"both", "color", "house", "almost", "sorry", "anymore", "brother", "okay",
|
||
|
"dear", "game", "fade", "already", "apart", "warm", "beauty", "heard",
|
||
|
"notice", "question", "shine", "began", "piece", "whole", "shadow",
|
||
|
"secret", "street", "within", "finger", "point", "morning", "whisper",
|
||
|
"child", "moon", "green", "story", "glass", "kid", "silence", "since",
|
||
|
"soft", "yourself", "empty", "shall", "angel", "answer", "baby", "bright",
|
||
|
"dad", "path", "worry", "hour", "drop", "follow", "power", "war", "half",
|
||
|
"flow", "heaven", "act", "chance", "fact", "least", "tired", "children",
|
||
|
"near", "quite", "afraid", "rise", "sea", "taste", "window", "cover",
|
||
|
"nice", "trust", "lot", "sad", "cool", "force", "peace", "return", "blind",
|
||
|
"easy", "ready", "roll", "rose", "drive", "held", "music", "beneath",
|
||
|
"hang", "mom", "paint", "emotion", "quiet", "clear", "cloud", "few",
|
||
|
"pretty", "bird", "outside", "paper", "picture", "front", "rock", "simple",
|
||
|
"anyone", "meant", "reality", "road", "sense", "waste", "bit", "leaf",
|
||
|
"thank", "happiness", "meet", "men", "smoke", "truly", "decide", "self",
|
||
|
"age", "book", "form", "alive", "carry", "escape", "damn", "instead",
|
||
|
"able", "ice", "minute", "throw", "catch", "leg", "ring", "course",
|
||
|
"goodbye", "lead", "poem", "sick", "corner", "desire", "known", "problem",
|
||
|
"remind", "shoulder", "suppose", "toward", "wave", "drink", "jump",
|
||
|
"woman", "pretend", "sister", "week", "human", "joy", "crack", "grey",
|
||
|
"pray", "surprise", "dry", "knee", "less", "search", "bleed", "caught",
|
||
|
"clean", "embrace", "future", "king", "son", "sorrow", "chest", "hug",
|
||
|
"remain", "sat", "worth", "blow", "daddy", "final", "parent", "tight",
|
||
|
"also", "create", "lonely", "safe", "cross", "dress", "evil", "silent",
|
||
|
"bone", "fate", "perhaps", "anger", "class", "scar", "snow", "tiny",
|
||
|
"tonight", "continue", "control", "dog", "edge", "mirror", "month",
|
||
|
"suddenly", "comfort", "given", "loud", "quickly", "gaze", "plan", "rush",
|
||
|
"stone", "town", "battle", "ignore", "spirit", "stood", "stupid", "yours",
|
||
|
"brown", "build", "dust", "hey", "kept", "pay", "phone", "twist",
|
||
|
"although", "ball", "beyond", "hidden", "nose", "taken", "fail", "float",
|
||
|
"pure", "somehow", "wash", "wrap", "angry", "cheek", "creature",
|
||
|
"forgotten", "heat", "rip", "single", "space", "special", "weak",
|
||
|
"whatever", "yell", "anyway", "blame", "job", "choose", "country", "curse",
|
||
|
"drift", "echo", "figure", "grew", "laughter", "neck", "suffer", "worse",
|
||
|
"yeah", "disappear", "foot", "forward", "knife", "mess", "somewhere",
|
||
|
"stomach", "storm", "beg", "idea", "lift", "offer", "breeze", "field",
|
||
|
"five", "often", "simply", "stuck", "win", "allow", "confuse", "enjoy",
|
||
|
"except", "flower", "seek", "strength", "calm", "grin", "gun", "heavy",
|
||
|
"hill", "large", "ocean", "shoe", "sigh", "straight", "summer", "tongue",
|
||
|
"accept", "crazy", "everyday", "exist", "grass", "mistake", "sent", "shut",
|
||
|
"surround", "table", "ache", "brain", "destroy", "heal", "nature", "shout",
|
||
|
"sign", "stain", "choice", "doubt", "glance", "glow", "mountain", "queen",
|
||
|
"stranger", "throat", "tomorrow", "city", "either", "fish", "flame",
|
||
|
"rather", "shape", "spin", "spread", "ash", "distance", "finish", "image",
|
||
|
"imagine", "important", "nobody", "shatter", "warmth", "became", "feed",
|
||
|
"flesh", "funny", "lust", "shirt", "trouble", "yellow", "attention",
|
||
|
"bare", "bite", "money", "protect", "amaze", "appear", "born", "choke",
|
||
|
"completely", "daughter", "fresh", "friendship", "gentle", "probably",
|
||
|
"six", "deserve", "expect", "grab", "middle", "nightmare", "river",
|
||
|
"thousand", "weight", "worst", "wound", "barely", "bottle", "cream",
|
||
|
"regret", "relationship", "stick", "test", "crush", "endless", "fault",
|
||
|
"itself", "rule", "spill", "art", "circle", "join", "kick", "mask",
|
||
|
"master", "passion", "quick", "raise", "smooth", "unless", "wander",
|
||
|
"actually", "broke", "chair", "deal", "favorite", "gift", "note", "number",
|
||
|
"sweat", "box", "chill", "clothes", "lady", "mark", "park", "poor",
|
||
|
"sadness", "tie", "animal", "belong", "brush", "consume", "dawn", "forest",
|
||
|
"innocent", "pen", "pride", "stream", "thick", "clay", "complete", "count",
|
||
|
"draw", "faith", "press", "silver", "struggle", "surface", "taught",
|
||
|
"teach", "wet", "bless", "chase", "climb", "enter", "letter", "melt",
|
||
|
"metal", "movie", "stretch", "swing", "vision", "wife", "beside", "crash",
|
||
|
"forgot", "guide", "haunt", "joke", "knock", "plant", "pour", "prove",
|
||
|
"reveal", "steal", "stuff", "trip", "wood", "wrist", "bother", "bottom",
|
||
|
"crawl", "crowd", "fix", "forgive", "frown", "grace", "loose", "lucky",
|
||
|
"party", "release", "surely", "survive", "teacher", "gently", "grip",
|
||
|
"speed", "suicide", "travel", "treat", "vein", "written", "cage", "chain",
|
||
|
"conversation", "date", "enemy", "however", "interest", "million", "page",
|
||
|
"pink", "proud", "sway", "themselves", "winter", "church", "cruel", "cup",
|
||
|
"demon", "experience", "freedom", "pair", "pop", "purpose", "respect",
|
||
|
"shoot", "softly", "state", "strange", "bar", "birth", "curl", "dirt",
|
||
|
"excuse", "lord", "lovely", "monster", "order", "pack", "pants", "pool",
|
||
|
"scene", "seven", "shame", "slide", "ugly", "among", "blade", "blonde",
|
||
|
"closet", "creek", "deny", "drug", "eternity", "gain", "grade", "handle",
|
||
|
"key", "linger", "pale", "prepare", "swallow", "swim", "tremble", "wheel",
|
||
|
"won", "cast", "cigarette", "claim", "college", "direction", "dirty",
|
||
|
"gather", "ghost", "hundred", "loss", "lung", "orange", "present", "swear",
|
||
|
"swirl", "twice", "wild", "bitter", "blanket", "doctor", "everywhere",
|
||
|
"flash", "grown", "knowledge", "numb", "pressure", "radio", "repeat",
|
||
|
"ruin", "spend", "unknown", "buy", "clock", "devil", "early", "false",
|
||
|
"fantasy", "pound", "precious", "refuse", "sheet", "teeth", "welcome",
|
||
|
"add", "ahead", "block", "bury", "caress", "content", "depth", "despite",
|
||
|
"distant", "marry", "purple", "threw", "whenever", "bomb", "dull",
|
||
|
"easily", "grasp", "hospital", "innocence", "normal", "receive", "reply",
|
||
|
"rhyme", "shade", "someday", "sword", "toe", "visit", "asleep", "bought",
|
||
|
"center", "consider", "flat", "hero", "history", "ink", "insane", "muscle",
|
||
|
"mystery", "pocket", "reflection", "shove", "silently", "smart", "soldier",
|
||
|
"spot", "stress", "train", "type", "view", "whether", "bus", "energy",
|
||
|
"explain", "holy", "hunger", "inch", "magic", "mix", "noise", "nowhere",
|
||
|
"prayer", "presence", "shock", "snap", "spider", "study", "thunder",
|
||
|
"trail", "admit", "agree", "bag", "bang", "bound", "butterfly", "cute",
|
||
|
"exactly", "explode", "familiar", "fold", "further", "pierce", "reflect",
|
||
|
"scent", "selfish", "sharp", "sink", "spring", "stumble", "universe",
|
||
|
"weep", "women", "wonderful", "action", "ancient", "attempt", "avoid",
|
||
|
"birthday", "branch", "chocolate", "core", "depress", "drunk",
|
||
|
"especially", "focus", "fruit", "honest", "match", "palm", "perfectly",
|
||
|
"pillow", "pity", "poison", "roar", "shift", "slightly", "thump", "truck",
|
||
|
"tune", "twenty", "unable", "wipe", "wrote", "coat", "constant", "dinner",
|
||
|
"drove", "egg", "eternal", "flight", "flood", "frame", "freak", "gasp",
|
||
|
"glad", "hollow", "motion", "peer", "plastic", "root", "screen", "season",
|
||
|
"sting", "strike", "team", "unlike", "victim", "volume", "warn", "weird",
|
||
|
"attack", "await", "awake", "built", "charm", "crave", "despair", "fought",
|
||
|
"grant", "grief", "horse", "limit", "message", "ripple", "sanity",
|
||
|
"scatter", "serve", "split", "string", "trick", "annoy", "blur", "boat",
|
||
|
"brave", "clearly", "cling", "connect", "fist", "forth", "imagination",
|
||
|
"iron", "jock", "judge", "lesson", "milk", "misery", "nail", "naked",
|
||
|
"ourselves", "poet", "possible", "princess", "sail", "size", "snake",
|
||
|
"society", "stroke", "torture", "toss", "trace", "wise", "bloom", "bullet",
|
||
|
"cell", "check", "cost", "darling", "during", "footstep", "fragile",
|
||
|
"hallway", "hardly", "horizon", "invisible", "journey", "midnight", "mud",
|
||
|
"nod", "pause", "relax", "shiver", "sudden", "value", "youth", "abuse",
|
||
|
"admire", "blink", "breast", "bruise", "constantly", "couple", "creep",
|
||
|
"curve", "difference", "dumb", "emptiness", "gotta", "honor", "plain",
|
||
|
"planet", "recall", "rub", "ship", "slam", "soar", "somebody", "tightly",
|
||
|
"weather", "adore", "approach", "bond", "bread", "burst", "candle",
|
||
|
"coffee", "cousin", "crime", "desert", "flutter", "frozen", "grand",
|
||
|
"heel", "hello", "language", "level", "movement", "pleasure", "powerful",
|
||
|
"random", "rhythm", "settle", "silly", "slap", "sort", "spoken", "steel",
|
||
|
"threaten", "tumble", "upset", "aside", "awkward", "bee", "blank", "board",
|
||
|
"button", "card", "carefully", "complain", "crap", "deeply", "discover",
|
||
|
"drag", "dread", "effort", "entire", "fairy", "giant", "gotten", "greet",
|
||
|
"illusion", "jeans", "leap", "liquid", "march", "mend", "nervous", "nine",
|
||
|
"replace", "rope", "spine", "stole", "terror", "accident", "apple",
|
||
|
"balance", "boom", "childhood", "collect", "demand", "depression",
|
||
|
"eventually", "faint", "glare", "goal", "group", "honey", "kitchen",
|
||
|
"laid", "limb", "machine", "mere", "mold", "murder", "nerve", "painful",
|
||
|
"poetry", "prince", "rabbit", "shelter", "shore", "shower", "soothe",
|
||
|
"stair", "steady", "sunlight", "tangle", "tease", "treasure", "uncle",
|
||
|
"begun", "bliss", "canvas", "cheer", "claw", "clutch", "commit", "crimson",
|
||
|
"crystal", "delight", "doll", "existence", "express", "fog", "football",
|
||
|
"gay", "goose", "guard", "hatred", "illuminate", "mass", "math", "mourn",
|
||
|
"rich", "rough", "skip", "stir", "student", "style", "support", "thorn",
|
||
|
"tough", "yard", "yearn", "yesterday", "advice", "appreciate", "autumn",
|
||
|
"bank", "beam", "bowl", "capture", "carve", "collapse", "confusion",
|
||
|
"creation", "dove", "feather", "girlfriend", "glory", "government",
|
||
|
"harsh", "hop", "inner", "loser", "moonlight", "neighbor", "neither",
|
||
|
"peach", "pig", "praise", "screw", "shield", "shimmer", "sneak", "stab",
|
||
|
"subject", "throughout", "thrown", "tower", "twirl", "wow", "army",
|
||
|
"arrive", "bathroom", "bump", "cease", "cookie", "couch", "courage", "dim",
|
||
|
"guilt", "howl", "hum", "husband", "insult", "led", "lunch", "mock",
|
||
|
"mostly", "natural", "nearly", "needle", "nerd", "peaceful", "perfection",
|
||
|
"pile", "price", "remove", "roam", "sanctuary", "serious", "shiny",
|
||
|
"shook", "sob", "stolen", "tap", "vain", "void", "warrior", "wrinkle",
|
||
|
"affection", "apologize", "blossom", "bounce", "bridge", "cheap",
|
||
|
"crumble", "decision", "descend", "desperately", "dig", "dot", "flip",
|
||
|
"frighten", "heartbeat", "huge", "lazy", "lick", "odd", "opinion",
|
||
|
"process", "puzzle", "quietly", "retreat", "score", "sentence", "separate",
|
||
|
"situation", "skill", "soak", "square", "stray", "taint", "task", "tide",
|
||
|
"underneath", "veil", "whistle", "anywhere", "bedroom", "bid", "bloody",
|
||
|
"burden", "careful", "compare", "concern", "curtain", "decay", "defeat",
|
||
|
"describe", "double", "dreamer", "driver", "dwell", "evening", "flare",
|
||
|
"flicker", "grandma", "guitar", "harm", "horrible", "hungry", "indeed",
|
||
|
"lace", "melody", "monkey", "nation", "object", "obviously", "rainbow",
|
||
|
"salt", "scratch", "shown", "shy", "stage", "stun", "third", "tickle",
|
||
|
"useless", "weakness", "worship", "worthless", "afternoon", "beard",
|
||
|
"boyfriend", "bubble", "busy", "certain", "chin", "concrete", "desk",
|
||
|
"diamond", "doom", "drawn", "due", "felicity", "freeze", "frost", "garden",
|
||
|
"glide", "harmony", "hopefully", "hunt", "jealous", "lightning", "mama",
|
||
|
"mercy", "peel", "physical", "position", "pulse", "punch", "quit", "rant",
|
||
|
"respond", "salty", "sane", "satisfy", "savior", "sheep", "slept",
|
||
|
"social", "sport", "tuck", "utter", "valley", "wolf", "aim", "alas",
|
||
|
"alter", "arrow", "awaken", "beaten", "belief", "brand", "ceiling",
|
||
|
"cheese", "clue", "confidence", "connection", "daily", "disguise", "eager",
|
||
|
"erase", "essence", "everytime", "expression", "fan", "flag", "flirt",
|
||
|
"foul", "fur", "giggle", "glorious", "ignorance", "law", "lifeless",
|
||
|
"measure", "mighty", "muse", "north", "opposite", "paradise", "patience",
|
||
|
"patient", "pencil", "petal", "plate", "ponder", "possibly", "practice",
|
||
|
"slice", "spell", "stock", "strife", "strip", "suffocate", "suit",
|
||
|
"tender", "tool", "trade", "velvet", "verse", "waist", "witch", "aunt",
|
||
|
"bench", "bold", "cap", "certainly", "click", "companion", "creator",
|
||
|
"dart", "delicate", "determine", "dish", "dragon", "drama", "drum", "dude",
|
||
|
"everybody", "feast", "forehead", "former", "fright", "fully", "gas",
|
||
|
"hook", "hurl", "invite", "juice", "manage", "moral", "possess", "raw",
|
||
|
"rebel", "royal", "scale", "scary", "several", "slight", "stubborn",
|
||
|
"swell", "talent", "tea", "terrible", "thread", "torment", "trickle",
|
||
|
"usually", "vast", "violence", "weave", "acid", "agony", "ashamed", "awe",
|
||
|
"belly", "blend", "blush", "character", "cheat", "common", "company",
|
||
|
"coward", "creak", "danger", "deadly", "defense", "define", "depend",
|
||
|
"desperate", "destination", "dew", "duck", "dusty", "embarrass", "engine",
|
||
|
"example", "explore", "foe", "freely", "frustrate", "generation", "glove",
|
||
|
"guilty", "health", "hurry", "idiot", "impossible", "inhale", "jaw",
|
||
|
"kingdom", "mention", "mist", "moan", "mumble", "mutter", "observe", "ode",
|
||
|
"pathetic", "pattern", "pie", "prefer", "puff", "rape", "rare", "revenge",
|
||
|
"rude", "scrape", "spiral", "squeeze", "strain", "sunset", "suspend",
|
||
|
"sympathy", "thigh", "throne", "total", "unseen", "weapon", "weary"
|
||
|
]
|
||
|
},
|
||
|
'english': {
|
||
|
prefix_len: 3,
|
||
|
words: [
|
||
|
"abbey", "abducts", "ability", "ablaze", "abnormal", "abort", "abrasive", "absorb",
|
||
|
"abyss", "academy", "aces", "aching", "acidic", "acoustic", "acquire", "across",
|
||
|
"actress", "acumen", "adapt", "addicted", "adept", "adhesive", "adjust", "adopt",
|
||
|
"adrenalin", "adult", "adventure", "aerial", "afar", "affair", "afield", "afloat",
|
||
|
"afoot", "afraid", "after", "against", "agenda", "aggravate", "agile", "aglow",
|
||
|
"agnostic", "agony", "agreed", "ahead", "aided", "ailments", "aimless", "airport",
|
||
|
"aisle", "ajar", "akin", "alarms", "album", "alchemy", "alerts", "algebra",
|
||
|
"alkaline", "alley", "almost", "aloof", "alpine", "already", "also", "altitude",
|
||
|
"alumni", "always", "amaze", "ambush", "amended", "amidst", "ammo", "amnesty",
|
||
|
"among", "amply", "amused", "anchor", "android", "anecdote", "angled", "ankle",
|
||
|
"annoyed", "answers", "antics", "anvil", "anxiety", "anybody", "apart", "apex",
|
||
|
"aphid", "aplomb", "apology", "apply", "apricot", "aptitude", "aquarium", "arbitrary",
|
||
|
"archer", "ardent", "arena", "argue", "arises", "army", "around", "arrow",
|
||
|
"arsenic", "artistic", "ascend", "ashtray", "aside", "asked", "asleep", "aspire",
|
||
|
"assorted", "asylum", "athlete", "atlas", "atom", "atrium", "attire", "auburn",
|
||
|
"auctions", "audio", "august", "aunt", "austere", "autumn", "avatar", "avidly",
|
||
|
"avoid", "awakened", "awesome", "awful", "awkward", "awning", "awoken", "axes",
|
||
|
"axis", "axle", "aztec", "azure", "baby", "bacon", "badge", "baffles",
|
||
|
"bagpipe", "bailed", "bakery", "balding", "bamboo", "banjo", "baptism", "basin",
|
||
|
"batch", "bawled", "bays", "because", "beer", "befit", "begun", "behind",
|
||
|
"being", "below", "bemused", "benches", "berries", "bested", "betting", "bevel",
|
||
|
"beware", "beyond", "bias", "bicycle", "bids", "bifocals", "biggest", "bikini",
|
||
|
"bimonthly", "binocular", "biology", "biplane", "birth", "biscuit", "bite", "biweekly",
|
||
|
"blender", "blip", "bluntly", "boat", "bobsled", "bodies", "bogeys", "boil",
|
||
|
"boldly", "bomb", "border", "boss", "both", "bounced", "bovine", "bowling",
|
||
|
"boxes", "boyfriend", "broken", "brunt", "bubble", "buckets", "budget", "buffet",
|
||
|
"bugs", "building", "bulb", "bumper", "bunch", "business", "butter", "buying",
|
||
|
"buzzer", "bygones", "byline", "bypass", "cabin", "cactus", "cadets", "cafe",
|
||
|
"cage", "cajun", "cake", "calamity", "camp", "candy", "casket", "catch",
|
||
|
"cause", "cavernous", "cease", "cedar", "ceiling", "cell", "cement", "cent",
|
||
|
"certain", "chlorine", "chrome", "cider", "cigar", "cinema", "circle", "cistern",
|
||
|
"citadel", "civilian", "claim", "click", "clue", "coal", "cobra", "cocoa",
|
||
|
"code", "coexist", "coffee", "cogs", "cohesive", "coils", "colony", "comb",
|
||
|
"cool", "copy", "corrode", "costume", "cottage", "cousin", "cowl", "criminal",
|
||
|
"cube", "cucumber", "cuddled", "cuffs", "cuisine", "cunning", "cupcake", "custom",
|
||
|
"cycling", "cylinder", "cynical", "dabbing", "dads", "daft", "dagger", "daily",
|
||
|
"damp", "dangerous", "dapper", "darted", "dash", "dating", "dauntless", "dawn",
|
||
|
"daytime", "dazed", "debut", "decay", "dedicated", "deepest", "deftly", "degrees",
|
||
|
"dehydrate", "deity", "dejected", "delayed", "demonstrate", "dented", "deodorant", "depth",
|
||
|
"desk", "devoid", "dewdrop", "dexterity", "dialect", "dice", "diet", "different",
|
||
|
"digit", "dilute", "dime", "dinner", "diode", "diplomat", "directed", "distance",
|
||
|
"ditch", "divers", "dizzy", "doctor", "dodge", "does", "dogs", "doing",
|
||
|
"dolphin", "domestic", "donuts", "doorway", "dormant", "dosage", "dotted", "double",
|
||
|
"dove", "down", "dozen", "dreams", "drinks", "drowning", "drunk", "drying",
|
||
|
"dual", "dubbed", "duckling", "dude", "duets", "duke", "dullness", "dummy",
|
||
|
"dunes", "duplex", "duration", "dusted", "duties", "dwarf", "dwelt", "dwindling",
|
||
|
"dying", "dynamite", "dyslexic", "each", "eagle", "earth", "easy", "eating",
|
||
|
"eavesdrop", "eccentric", "echo", "eclipse", "economics", "ecstatic", "eden", "edgy",
|
||
|
"edited", "educated", "eels", "efficient", "eggs", "egotistic", "eight", "either",
|
||
|
"eject", "elapse", "elbow", "eldest", "eleven", "elite", "elope", "else",
|
||
|
"eluded", "emails", "ember", "emerge", "emit", "emotion", "empty", "emulate",
|
||
|
"energy", "enforce", "enhanced", "enigma", "enjoy", "enlist", "enmity", "enough",
|
||
|
"enraged", "ensign", "entrance", "envy", "epoxy", "equip", "erase", "erected",
|
||
|
"erosion", "error", "eskimos", "espionage", "essential", "estate", "etched", "eternal",
|
||
|
"ethics", "etiquette", "evaluate", "evenings", "evicted", "evolved", "examine", "excess",
|
||
|
"exhale", "exit", "exotic", "exquisite", "extra", "exult", "fabrics", "factual",
|
||
|
"fading", "fainted", "faked", "fall", "family", "fancy", "farming", "fatal",
|
||
|
"faulty", "fawns", "faxed", "fazed", "feast", "february", "federal", "feel",
|
||
|
"feline", "females", "fences", "ferry", "festival", "fetches", "fever", "fewest",
|
||
|
"fiat", "fibula", "fictional", "fidget", "fierce", "fifteen", "fight", "films",
|
||
|
"firm", "fishing", "fitting", "five", "fixate", "fizzle", "fleet", "flippant",
|
||
|
"flying", "foamy", "focus", "foes", "foggy", "foiled", "folding", "fonts",
|
||
|
"foolish", "fossil", "fountain", "fowls", "foxes", "foyer", "framed", "friendly",
|
||
|
"frown", "fruit", "frying", "fudge", "fuel", "fugitive", "fully", "fuming",
|
||
|
"fungal", "furnished", "fuselage", "future", "fuzzy", "gables", "gadget", "gags",
|
||
|
"gained", "galaxy", "gambit", "gang", "gasp", "gather", "gauze", "gave",
|
||
|
"gawk", "gaze", "gearbox", "gecko", "geek", "gels", "gemstone", "general",
|
||
|
"geometry", "germs", "gesture", "getting", "geyser", "ghetto", "ghost", "giant",
|
||
|
"giddy", "gifts", "gigantic", "gills", "gimmick", "ginger", "girth", "giving",
|
||
|
"glass", "gleeful", "glide", "gnaw", "gnome", "goat", "goblet", "godfather",
|
||
|
"goes", "goggles", "going", "goldfish", "gone", "goodbye", "gopher", "gorilla",
|
||
|
"gossip", "gotten", "gourmet", "governing", "gown", "greater", "grunt", "guarded",
|
||
|
"guest", "guide", "gulp", "gumball", "guru", "gusts", "gutter", "guys",
|
||
|
"gymnast", "gypsy", "gyrate", "habitat", "hacksaw", "haggled", "hairy", "hamburger",
|
||
|
"happens", "hashing", "hatchet", "haunted", "having", "hawk", "haystack", "hazard",
|
||
|
"hectare", "hedgehog", "heels", "hefty", "height", "hemlock", "hence", "heron",
|
||
|
"hesitate", "hexagon", "hickory", "hiding", "highway", "hijack", "hiker", "hills",
|
||
|
"himself", "hinder", "hippo", "hire", "history", "hitched", "hive", "hoax",
|
||
|
"hobby", "hockey", "hoisting", "hold", "honked", "hookup", "hope", "hornet",
|
||
|
"hospital", "hotel", "hounded", "hover", "howls", "hubcaps", "huddle", "huge",
|
||
|
"hull", "humid", "hunter", "hurried", "husband", "huts", "hybrid", "hydrogen",
|
||
|
"hyper", "iceberg", "icing", "icon", "identity", "idiom", "idled", "idols",
|
||
|
"igloo", "ignore", "iguana", "illness", "imagine", "imbalance", "imitate", "impel",
|
||
|
"inactive", "inbound", "incur", "industrial", "inexact", "inflamed", "ingested", "initiate",
|
||
|
"injury", "inkling", "inline", "inmate", "innocent", "inorganic", "input", "inquest",
|
||
|
"inroads", "insult", "intended", "inundate", "invoke", "inwardly", "ionic", "irate",
|
||
|
"iris", "irony", "irritate", "island", "isolated", "issued", "italics", "itches",
|
||
|
"items", "itinerary", "itself", "ivory", "jabbed", "jackets", "jaded", "jagged",
|
||
|
"jailed", "jamming", "january", "jargon", "jaunt", "javelin", "jaws", "jazz",
|
||
|
"jeans", "jeers", "jellyfish", "jeopardy", "jerseys", "jester", "jetting", "jewels",
|
||
|
"jigsaw", "jingle", "jittery", "jive", "jobs", "jockey", "jogger", "joining",
|
||
|
"joking", "jolted", "jostle", "journal", "joyous", "jubilee", "judge", "juggled",
|
||
|
"juicy", "jukebox", "july", "jump", "junk", "jury", "justice", "juvenile",
|
||
|
"kangaroo", "karate", "keep", "kennel", "kept", "kernels", "kettle", "keyboard",
|
||
|
"kickoff", "kidneys", "king", "kiosk", "kisses", "kitchens", "kiwi", "knapsack",
|
||
|
"knee", "knife", "knowledge", "knuckle", "koala", "laboratory", "ladder", "lagoon",
|
||
|
"lair", "lakes", "lamb", "language", "laptop", "large", "last", "later",
|
||
|
"launching", "lava", "lawsuit", "layout", "lazy", "lectures", "ledge", "leech",
|
||
|
"left", "legion", "leisure", "lemon", "lending", "leopard", "lesson", "lettuce",
|
||
|
"lexicon", "liar", "library", "licks", "lids", "lied", "lifestyle", "light",
|
||
|
"likewise", "lilac", "limits", "linen", "lion", "lipstick", "liquid", "listen",
|
||
|
"lively", "loaded", "lobster", "locker", "lodge", "lofty", "logic", "loincloth",
|
||
|
"long", "looking", "lopped", "lordship", "losing", "lottery", "loudly", "love",
|
||
|
"lower", "loyal", "lucky", "luggage", "lukewarm", "lullaby", "lumber", "lunar",
|
||
|
"lurk", "lush", "luxury", "lymph", "lynx", "lyrics", "macro", "madness",
|
||
|
"magically", "mailed", "major", "makeup", "malady", "mammal", "maps", "masterful",
|
||
|
"match", "maul", "maverick", "maximum", "mayor", "maze", "meant", "mechanic",
|
||
|
"medicate", "meeting", "megabyte", "melting", "memoir", "menu", "merger", "mesh",
|
||
|
"metro", "mews", "mice", "midst", "mighty", "mime", "mirror", "misery",
|
||
|
"mittens", "mixture", "moat", "mobile", "mocked", "mohawk", "moisture", "molten",
|
||
|
"moment", "money", "moon", "mops", "morsel", "mostly", "motherly", "mouth",
|
||
|
"movement", "mowing", "much", "muddy", "muffin", "mugged", "mullet", "mumble",
|
||
|
"mundane", "muppet", "mural", "musical", "muzzle", "myriad", "mystery", "myth",
|
||
|
"nabbing", "nagged", "nail", "names", "nanny", "napkin", "narrate", "nasty",
|
||
|
"natural", "nautical", "navy", "nearby", "necklace", "needed", "negative", "neither",
|
||
|
"neon", "nephew", "nerves", "nestle", "network", "neutral", "never", "newt",
|
||
|
"nexus", "nibs", "niche", "niece", "nifty", "nightly", "nimbly", "nineteen",
|
||
|
"nirvana", "nitrogen", "nobody", "nocturnal", "nodes", "noises", "nomad", "noodles",
|
||
|
"northern", "nostril", "noted", "nouns", "novelty", "nowhere", "nozzle", "nuance",
|
||
|
"nucleus", "nudged", "nugget", "nuisance", "null", "number", "nuns", "nurse",
|
||
|
"nutshell", "nylon", "oaks", "oars", "oasis", "oatmeal", "obedient", "object",
|
||
|
"obliged", "obnoxious", "observant", "obtains", "obvious", "occur", "ocean", "october",
|
||
|
"odds", "odometer", "offend", "often", "oilfield", "ointment", "okay", "older",
|
||
|
"olive", "olympics", "omega", "omission", "omnibus", "onboard", "oncoming", "oneself",
|
||
|
"ongoing", "onion", "online", "onslaught", "onto", "onward", "oozed", "opacity",
|
||
|
"opened", "opposite", "optical", "opus", "orange", "orbit", "orchid", "orders",
|
||
|
"organs", "origin", "ornament", "orphans", "oscar", "ostrich", "otherwise", "otter",
|
||
|
"ouch", "ought", "ounce", "ourselves", "oust", "outbreak", "oval", "oven",
|
||
|
"owed", "owls", "owner", "oxidant", "oxygen", "oyster", "ozone", "pact",
|
||
|
"paddles", "pager", "pairing", "palace", "pamphlet", "pancakes", "paper", "paradise",
|
||
|
"pastry", "patio", "pause", "pavements", "pawnshop", "payment", "peaches", "pebbles",
|
||
|
"peculiar", "pedantic", "peeled", "pegs", "pelican", "pencil", "people", "pepper",
|
||
|
"perfect", "pests", "petals", "phase", "pheasants", "phone", "phrases", "physics",
|
||
|
"piano", "picked", "pierce", "pigment", "piloted", "pimple", "pinched", "pioneer",
|
||
|
"pipeline", "pirate", "pistons", "pitched", "pivot", "pixels", "pizza", "playful",
|
||
|
"pledge", "pliers", "plotting", "plus", "plywood", "poaching", "pockets", "podcast",
|
||
|
"poetry", "point", "poker", "polar", "ponies", "pool", "popular", "portents",
|
||
|
"possible", "potato", "pouch", "poverty", "powder", "pram", "present", "pride",
|
||
|
"problems", "pruned", "prying", "psychic", "public", "puck", "puddle", "puffin",
|
||
|
"pulp", "pumpkins", "punch", "puppy", "purged", "push", "putty", "puzzled",
|
||
|
"pylons", "pyramid", "python", "queen", "quick", "quote", "rabbits", "racetrack",
|
||
|
"radar", "rafts", "rage", "railway", "raking", "rally", "ramped", "randomly",
|
||
|
"rapid", "rarest", "rash", "rated", "ravine", "rays", "razor", "react",
|
||
|
"rebel", "recipe", "reduce", "reef", "refer", "regular", "reheat", "reinvest",
|
||
|
"rejoices", "rekindle", "relic", "remedy", "renting", "reorder", "repent", "request",
|
||
|
"reruns", "rest", "return", "reunion", "revamp", "rewind", "rhino", "rhythm",
|
||
|
"ribbon", "richly", "ridges", "rift", "rigid", "rims", "ringing", "riots",
|
||
|
"ripped", "rising", "ritual", "river", "roared", "robot", "rockets", "rodent",
|
||
|
"rogue", "roles", "romance", "roomy", "roped", "roster", "rotate", "rounded",
|
||
|
"rover", "rowboat", "royal", "ruby", "rudely", "ruffled", "rugged", "ruined",
|
||
|
"ruling", "rumble", "runway", "rural", "rustled", "ruthless", "sabotage", "sack",
|
||
|
"sadness", "safety", "saga", "sailor", "sake", "salads", "sample", "sanity",
|
||
|
"sapling", "sarcasm", "sash", "satin", "saucepan", "saved", "sawmill", "saxophone",
|
||
|
"sayings", "scamper", "scenic", "school", "science", "scoop", "scrub", "scuba",
|
||
|
"seasons", "second", "sedan", "seeded", "segments", "seismic", "selfish", "semifinal",
|
||
|
"sensible", "september", "sequence", "serving", "session", "setup", "seventh", "sewage",
|
||
|
"shackles", "shelter", "shipped", "shocking", "shrugged", "shuffled", "shyness", "siblings",
|
||
|
"sickness", "sidekick", "sieve", "sifting", "sighting", "silk", "simplest", "sincerely",
|
||
|
"sipped", "siren", "situated", "sixteen", "sizes", "skater", "skew", "skirting",
|
||
|
"skulls", "skydive", "slackens", "sleepless", "slid", "slower", "slug", "smash",
|
||
|
"smelting", "smidgen", "smog", "smuggled", "snake", "sneeze", "sniff", "snout",
|
||
|
"snug", "soapy", "sober", "soccer", "soda", "software", "soggy", "soil",
|
||
|
"solved", "somewhere", "sonic", "soothe", "soprano", "sorry", "southern", "sovereign",
|
||
|
"sowed", "soya", "space", "speedy", "sphere", "spiders", "splendid", "spout",
|
||
|
"sprig", "spud", "spying", "square", "stacking", "stellar", "stick", "stockpile",
|
||
|
"strained", "stunning", "stylishly", "subtly", "succeed", "suddenly", "suede", "suffice",
|
||
|
"sugar", "suitcase", "sulking", "summon", "sunken", "superior", "surfer", "sushi",
|
||
|
"suture", "swagger", "swept", "swiftly", "sword", "swung", "syllabus", "symptoms",
|
||
|
"syndrome", "syringe", "system", "taboo", "tacit", "tadpoles", "tagged", "tail",
|
||
|
"taken", "talent", "tamper", "tanks", "tapestry", "tarnished", "tasked", "tattoo",
|
||
|
"taunts", "tavern", "tawny", "taxi", "teardrop", "technical", "tedious", "teeming",
|
||
|
"tell", "template", "tender", "tepid", "tequila", "terminal", "testing", "tether",
|
||
|
"textbook", "thaw", "theatrics", "thirsty", "thorn", "threaten", "thumbs", "thwart",
|
||
|
"ticket", "tidy", "tiers", "tiger", "tilt", "timber", "tinted", "tipsy",
|
||
|
"tirade", "tissue", "titans", "toaster", "tobacco", "today", "toenail", "toffee",
|
||
|
"together", "toilet", "token", "tolerant", "tomorrow", "tonic", "toolbox", "topic",
|
||
|
"torch", "tossed", "total", "touchy", "towel", "toxic", "toyed", "trash",
|
||
|
"trendy", "tribal", "trolling", "truth", "trying", "tsunami", "tubes", "tucks",
|
||
|
"tudor", "tuesday", "tufts", "tugs", "tuition", "tulips", "tumbling", "tunnel",
|
||
|
"turnip", "tusks", "tutor", "tuxedo", "twang", "tweezers", "twice", "twofold",
|
||
|
"tycoon", "typist", "tyrant", "ugly", "ulcers", "ultimate", "umbrella", "umpire",
|
||
|
"unafraid", "unbending", "uncle", "under", "uneven", "unfit", "ungainly", "unhappy",
|
||
|
"union", "unjustly", "unknown", "unlikely", "unmask", "unnoticed", "unopened", "unplugs",
|
||
|
"unquoted", "unrest", "unsafe", "until", "unusual", "unveil", "unwind", "unzip",
|
||
|
"upbeat", "upcoming", "update", "upgrade", "uphill", "upkeep", "upload", "upon",
|
||
|
"upper", "upright", "upstairs", "uptight", "upwards", "urban", "urchins", "urgent",
|
||
|
"usage", "useful", "usher", "using", "usual", "utensils", "utility", "utmost",
|
||
|
"utopia", "uttered", "vacation", "vague", "vain", "value", "vampire", "vane",
|
||
|
"vapidly", "vary", "vastness", "vats", "vaults", "vector", "veered", "vegan",
|
||
|
"vehicle", "vein", "velvet", "venomous", "verification", "vessel", "veteran", "vexed",
|
||
|
"vials", "vibrate", "victim", "video", "viewpoint", "vigilant", "viking", "village",
|
||
|
"vinegar", "violin", "vipers", "virtual", "visited", "vitals", "vivid", "vixen",
|
||
|
"vocal", "vogue", "voice", "volcano", "vortex", "voted", "voucher", "vowels",
|
||
|
"voyage", "vulture", "wade", "waffle", "wagtail", "waist", "waking", "wallets",
|
||
|
"wanted", "warped", "washing", "water", "waveform", "waxing", "wayside", "weavers",
|
||
|
"website", "wedge", "weekday", "weird", "welders", "went", "wept", "were",
|
||
|
"western", "wetsuit", "whale", "when", "whipped", "whole", "wickets", "width",
|
||
|
"wield", "wife", "wiggle", "wildly", "winter", "wipeout", "wiring", "wise",
|
||
|
"withdrawn", "wives", "wizard", "wobbly", "woes", "woken", "wolf", "womanly",
|
||
|
"wonders", "woozy", "worry", "wounded", "woven", "wrap", "wrist", "wrong",
|
||
|
"yacht", "yahoo", "yanks", "yard", "yawning", "yearbook", "yellow", "yesterday",
|
||
|
"yeti", "yields", "yodel", "yoga", "younger", "yoyo", "zapped", "zeal",
|
||
|
"zebra", "zero", "zesty", "zigzags", "zinger", "zippers", "zodiac", "zombie",
|
||
|
"zones", "zoom"
|
||
|
]
|
||
|
},
|
||
|
'spanish': {
|
||
|
prefix_len: 4,
|
||
|
words: [
|
||
|
"ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo",
|
||
|
"abrir", "abuelo", "abuso", "acabar", "academia", "acceso", "acción", "aceite",
|
||
|
"acelga", "acento", "aceptar", "ácido", "aclarar", "acné", "acoger", "acoso",
|
||
|
"activo", "acto", "actriz", "actuar", "acudir", "acuerdo", "acusar", "adicto",
|
||
|
"admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
|
||
|
"afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar",
|
||
|
"agrio", "agua", "agudo", "águila", "aguja", "ahogo", "ahorro", "aire",
|
||
|
"aislar", "ajedrez", "ajeno", "ajuste", "alacrán", "alambre", "alarma", "alba",
|
||
|
"álbum", "alcalde", "aldea", "alegre", "alejar", "alerta", "aleta", "alfiler",
|
||
|
"alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
|
||
|
"altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable",
|
||
|
"amante", "amapola", "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo",
|
||
|
"amistad", "amor", "amparo", "amplio", "ancho", "anciano", "ancla", "andar",
|
||
|
"andén", "anemia", "ángulo", "anillo", "ánimo", "anís", "anotar", "antena",
|
||
|
"antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
|
||
|
"apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo",
|
||
|
"aprender", "aprobar", "apuesta", "apuro", "arado", "araña", "arar", "árbitro",
|
||
|
"árbol", "arbusto", "archivo", "arco", "arder", "ardilla", "arduo", "área",
|
||
|
"árido", "aries", "armonía", "arnés", "aroma", "arpa", "arpón", "arreglo",
|
||
|
"arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
|
||
|
"asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro",
|
||
|
"áspero", "astilla", "astro", "astuto", "asumir", "asunto", "atajo", "ataque",
|
||
|
"atar", "atento", "ateo", "ático", "atleta", "átomo", "atraer", "atroz",
|
||
|
"atún", "audaz", "audio", "auge", "aula", "aumento", "ausente", "autor",
|
||
|
"aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
|
||
|
"aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar",
|
||
|
"azufre", "azul", "baba", "babor", "bache", "bahía", "baile", "bajar",
|
||
|
"balanza", "balcón", "balde", "bambú", "banco", "banda", "baño", "barba",
|
||
|
"barco", "barniz", "barro", "báscula", "bastón", "basura", "batalla", "batería",
|
||
|
"batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
|
||
|
"beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa",
|
||
|
"boa", "bobina", "bobo", "boca", "bocina", "boda", "bodega", "boina",
|
||
|
"bola", "bolero", "bolsa", "bomba", "bondad", "bonito", "bono", "bonsái",
|
||
|
"borde", "borrar", "bosque", "bote", "botín", "bóveda", "bozal", "bravo",
|
||
|
"brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
|
||
|
"bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno",
|
||
|
"buey", "bufanda", "bufón", "búho", "buitre", "bulto", "burbuja", "burla",
|
||
|
"burro", "buscar", "butaca", "buzón", "caballo", "cabeza", "cabina", "cabra",
|
||
|
"cacao", "cadáver", "cadena", "caer", "café", "caída", "caimán", "caja",
|
||
|
"cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
|
||
|
"calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer",
|
||
|
"candil", "canela", "canguro", "canica", "canto", "caña", "cañón", "caoba",
|
||
|
"caos", "capaz", "capitán", "capote", "captar", "capucha", "cara", "carbón",
|
||
|
"cárcel", "careta", "carga", "cariño", "carne", "carpeta", "carro", "carta",
|
||
|
"casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
|
||
|
"causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso",
|
||
|
"célula", "cemento", "ceniza", "centro", "cerca", "cerdo", "cereza", "cero",
|
||
|
"cerrar", "certeza", "césped", "cetro", "chacal", "chaleco", "champú", "chancla",
|
||
|
"chapa", "charla", "chico", "chiste", "chivo", "choque", "choza", "chuleta",
|
||
|
"chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
|
||
|
"cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne",
|
||
|
"cita", "ciudad", "clamor", "clan", "claro", "clase", "clave", "cliente",
|
||
|
"clima", "clínica", "cobre", "cocción", "cochino", "cocina", "coco", "código",
|
||
|
"codo", "cofre", "coger", "cohete", "cojín", "cojo", "cola", "colcha",
|
||
|
"colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
|
||
|
"comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo",
|
||
|
"contar", "copa", "copia", "corazón", "corbata", "corcho", "cordón", "corona",
|
||
|
"correr", "coser", "cosmos", "costa", "cráneo", "cráter", "crear", "crecer",
|
||
|
"creído", "crema", "cría", "crimen", "cripta", "crisis", "cromo", "crónica",
|
||
|
"croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
|
||
|
"cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra",
|
||
|
"culpa", "culto", "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón",
|
||
|
"cúpula", "curar", "curioso", "curso", "curva", "cutis", "dama", "danza",
|
||
|
"dar", "dardo", "dátil", "deber", "débil", "década", "decir", "dedo",
|
||
|
"defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
|
||
|
"dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo",
|
||
|
"destino", "desvío", "detalle", "detener", "deuda", "día", "diablo", "diadema",
|
||
|
"diamante", "diana", "diario", "dibujo", "dictar", "diente", "dieta", "diez",
|
||
|
"difícil", "digno", "dilema", "diluir", "dinero", "directo", "dirigir", "disco",
|
||
|
"diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
|
||
|
"don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón",
|
||
|
"droga", "ducha", "duda", "duelo", "dueño", "dulce", "dúo", "duque",
|
||
|
"durar", "dureza", "duro", "ébano", "ebrio", "echar", "eco", "ecuador",
|
||
|
"edad", "edición", "edificio", "editor", "educar", "efecto", "eficaz", "eje",
|
||
|
"ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
|
||
|
"elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo",
|
||
|
"empresa", "enano", "encargo", "enchufe", "encía", "enemigo", "enero", "enfado",
|
||
|
"enfermo", "engaño", "enigma", "enlace", "enorme", "enredo", "ensayo", "enseñar",
|
||
|
"entero", "entrar", "envase", "envío", "época", "equipo", "erizo", "escala",
|
||
|
"escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
|
||
|
"espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo",
|
||
|
"estufa", "etapa", "eterno", "ética", "etnia", "evadir", "evaluar", "evento",
|
||
|
"evitar", "exacto", "examen", "exceso", "excusa", "exento", "exigir", "exilio",
|
||
|
"existir", "éxito", "experto", "explicar", "exponer", "extremo", "fábrica", "fábula",
|
||
|
"fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
|
||
|
"faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa",
|
||
|
"fase", "fatiga", "fauna", "favor", "fax", "febrero", "fecha", "feliz",
|
||
|
"feo", "feria", "feroz", "fértil", "fervor", "festín", "fiable", "fianza",
|
||
|
"fiar", "fibra", "ficción", "ficha", "fideo", "fiebre", "fiel", "fiera",
|
||
|
"fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
|
||
|
"fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha",
|
||
|
"flor", "flota", "fluir", "flujo", "flúor", "fobia", "foca", "fogata",
|
||
|
"fogón", "folio", "folleto", "fondo", "forma", "forro", "fortuna", "forzar",
|
||
|
"fosa", "foto", "fracaso", "frágil", "franja", "frase", "fraude", "freír",
|
||
|
"freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
|
||
|
"fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol",
|
||
|
"futuro", "gacela", "gafas", "gaita", "gajo", "gala", "galería", "gallo",
|
||
|
"gamba", "ganar", "gancho", "ganga", "ganso", "garaje", "garza", "gasolina",
|
||
|
"gastar", "gato", "gavilán", "gemelo", "gemir", "gen", "género", "genio",
|
||
|
"gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
|
||
|
"giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe",
|
||
|
"goma", "gordo", "gorila", "gorra", "gota", "goteo", "gozar", "grada",
|
||
|
"gráfico", "grano", "grasa", "gratis", "grave", "grieta", "grillo", "gripe",
|
||
|
"gris", "grito", "grosor", "grúa", "grueso", "grumo", "grupo", "guante",
|
||
|
"guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
|
||
|
"gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada",
|
||
|
"hallar", "hamaca", "harina", "haz", "hazaña", "hebilla", "hebra", "hecho",
|
||
|
"helado", "helio", "hembra", "herir", "hermano", "héroe", "hervir", "hielo",
|
||
|
"hierro", "hígado", "higiene", "hijo", "himno", "historia", "hocico", "hogar",
|
||
|
"hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
|
||
|
"horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo",
|
||
|
"huida", "huir", "humano", "húmedo", "humilde", "humo", "hundir", "huracán",
|
||
|
"hurto", "icono", "ideal", "idioma", "ídolo", "iglesia", "iglú", "igual",
|
||
|
"ilegal", "ilusión", "imagen", "imán", "imitar", "impar", "imperio", "imponer",
|
||
|
"impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
|
||
|
"inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir",
|
||
|
"inútil", "invierno", "ira", "iris", "ironía", "isla", "islote", "jabalí",
|
||
|
"jabón", "jamón", "jarabe", "jardín", "jarra", "jaula", "jazmín", "jefe",
|
||
|
"jeringa", "jinete", "jornada", "joroba", "joven", "joya", "juerga", "jueves",
|
||
|
"juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
|
||
|
"juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala",
|
||
|
"labio", "lacio", "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna",
|
||
|
"laico", "lamer", "lámina", "lámpara", "lana", "lancha", "langosta", "lanza",
|
||
|
"lápiz", "largo", "larva", "lástima", "lata", "látex", "latir", "laurel",
|
||
|
"lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
|
||
|
"legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión",
|
||
|
"letal", "letra", "leve", "leyenda", "libertad", "libro", "licor", "líder",
|
||
|
"lidiar", "lienzo", "liga", "ligero", "lima", "límite", "limón", "limpio",
|
||
|
"lince", "lindo", "línea", "lingote", "lino", "linterna", "líquido", "liso",
|
||
|
"lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
|
||
|
"llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción",
|
||
|
"loco", "locura", "lógica", "logro", "lombriz", "lomo", "lonja", "lote",
|
||
|
"lucha", "lucir", "lugar", "lujo", "luna", "lunes", "lupa", "lustro",
|
||
|
"luto", "luz", "maceta", "macho", "madera", "madre", "maduro", "maestro",
|
||
|
"mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
|
||
|
"mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí",
|
||
|
"manjar", "mano", "manso", "manta", "mañana", "mapa", "máquina", "mar",
|
||
|
"marco", "marea", "marfil", "margen", "marido", "mármol", "marrón", "martes",
|
||
|
"marzo", "masa", "máscara", "masivo", "matar", "materia", "matiz", "matriz",
|
||
|
"máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
|
||
|
"mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú",
|
||
|
"mercado", "merengue", "mérito", "mes", "mesón", "meta", "meter", "método",
|
||
|
"metro", "mezcla", "miedo", "miel", "miembro", "miga", "mil", "milagro",
|
||
|
"militar", "millón", "mimo", "mina", "minero", "mínimo", "minuto", "miope",
|
||
|
"mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
|
||
|
"moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino",
|
||
|
"momento", "momia", "monarca", "moneda", "monja", "monto", "moño", "morada",
|
||
|
"morder", "moreno", "morir", "morro", "morsa", "mortal", "mosca", "mostrar",
|
||
|
"motivo", "mover", "móvil", "mozo", "mucho", "mudar", "mueble", "muela",
|
||
|
"muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
|
||
|
"muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo",
|
||
|
"nácar", "nación", "nadar", "naipe", "naranja", "nariz", "narrar", "nasal",
|
||
|
"natal", "nativo", "natural", "náusea", "naval", "nave", "navidad", "necio",
|
||
|
"néctar", "negar", "negocio", "negro", "neón", "nervio", "neto", "neutro",
|
||
|
"nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
|
||
|
"nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte",
|
||
|
"nota", "noticia", "novato", "novela", "novio", "nube", "nuca", "núcleo",
|
||
|
"nudillo", "nudo", "nuera", "nueve", "nuez", "nulo", "número", "nutria",
|
||
|
"oasis", "obeso", "obispo", "objeto", "obra", "obrero", "observar", "obtener",
|
||
|
"obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
|
||
|
"octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea",
|
||
|
"oeste", "ofensa", "oferta", "oficio", "ofrecer", "ogro", "oído", "oír",
|
||
|
"ojo", "ola", "oleada", "olfato", "olivo", "olla", "olmo", "olor",
|
||
|
"olvido", "ombligo", "onda", "onza", "opaco", "opción", "ópera", "opinar",
|
||
|
"oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
|
||
|
"orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen",
|
||
|
"orilla", "oro", "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso",
|
||
|
"ostra", "otoño", "otro", "oveja", "óvulo", "óxido", "oxígeno", "oyente",
|
||
|
"ozono", "pacto", "padre", "paella", "página", "pago", "país", "pájaro",
|
||
|
"palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
|
||
|
"panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete",
|
||
|
"parar", "parcela", "pared", "parir", "paro", "párpado", "parque", "párrafo",
|
||
|
"parte", "pasar", "paseo", "pasión", "paso", "pasta", "pata", "patio",
|
||
|
"patria", "pausa", "pauta", "pavo", "payaso", "peatón", "pecado", "pecera",
|
||
|
"pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
|
||
|
"peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón",
|
||
|
"peor", "pepino", "pequeño", "pera", "percha", "perder", "pereza", "perfil",
|
||
|
"perico", "perla", "permiso", "perro", "persona", "pesa", "pesca", "pésimo",
|
||
|
"pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar", "pichón", "pie",
|
||
|
"piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
|
||
|
"pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina",
|
||
|
"piso", "pista", "pitón", "pizca", "placa", "plan", "plata", "playa",
|
||
|
"plaza", "pleito", "pleno", "plomo", "pluma", "plural", "pobre", "poco",
|
||
|
"poder", "podio", "poema", "poesía", "poeta", "polen", "policía", "pollo",
|
||
|
"polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
|
||
|
"posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado",
|
||
|
"precoz", "pregunta", "premio", "prensa", "preso", "previo", "primo", "príncipe",
|
||
|
"prisión", "privar", "proa", "probar", "proceso", "producto", "proeza", "profesor",
|
||
|
"programa", "prole", "promesa", "pronto", "propio", "próximo", "prueba", "público",
|
||
|
"puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
|
||
|
"pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila",
|
||
|
"puré", "quedar", "queja", "quemar", "querer", "queso", "quieto", "química",
|
||
|
"quince", "quitar", "rábano", "rabia", "rabo", "ración", "radical", "raíz",
|
||
|
"rama", "rampa", "rancho", "rango", "rapaz", "rápido", "rapto", "rasgo",
|
||
|
"raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
|
||
|
"rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso",
|
||
|
"red", "redondo", "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo",
|
||
|
"regir", "regla", "regreso", "rehén", "reino", "reír", "reja", "relato",
|
||
|
"relevo", "relieve", "relleno", "reloj", "remar", "remedio", "remo", "rencor",
|
||
|
"rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
|
||
|
"resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir",
|
||
|
"revés", "revista", "rey", "rezar", "rico", "riego", "rienda", "riesgo",
|
||
|
"rifa", "rígido", "rigor", "rincón", "riñón", "río", "riqueza", "risa",
|
||
|
"ritmo", "rito"
|
||
|
]
|
||
|
},
|
||
|
'portuguese': {
|
||
|
prefix_len: 3,
|
||
|
words: [
|
||
|
"abaular", "abdominal", "abeto", "abissinio", "abjeto", "ablucao", "abnegar", "abotoar",
|
||
|
"abrutalhar", "absurdo", "abutre", "acautelar", "accessorios", "acetona", "achocolatado", "acirrar",
|
||
|
"acne", "acovardar", "acrostico", "actinomicete", "acustico", "adaptavel", "adeus", "adivinho",
|
||
|
"adjunto", "admoestar", "adnominal", "adotivo", "adquirir", "adriatico", "adsorcao", "adutora",
|
||
|
"advogar", "aerossol", "afazeres", "afetuoso", "afixo", "afluir", "afortunar", "afrouxar",
|
||
|
"aftosa", "afunilar", "agentes", "agito", "aglutinar", "aiatola", "aimore", "aino",
|
||
|
"aipo", "airoso", "ajeitar", "ajoelhar", "ajudante", "ajuste", "alazao", "albumina",
|
||
|
"alcunha", "alegria", "alexandre", "alforriar", "alguns", "alhures", "alivio", "almoxarife",
|
||
|
"alotropico", "alpiste", "alquimista", "alsaciano", "altura", "aluviao", "alvura", "amazonico",
|
||
|
"ambulatorio", "ametodico", "amizades", "amniotico", "amovivel", "amurada", "anatomico", "ancorar",
|
||
|
"anexo", "anfora", "aniversario", "anjo", "anotar", "ansioso", "anturio", "anuviar",
|
||
|
"anverso", "anzol", "aonde", "apaziguar", "apito", "aplicavel", "apoteotico", "aprimorar",
|
||
|
"aprumo", "apto", "apuros", "aquoso", "arauto", "arbusto", "arduo", "aresta",
|
||
|
"arfar", "arguto", "aritmetico", "arlequim", "armisticio", "aromatizar", "arpoar", "arquivo",
|
||
|
"arrumar", "arsenio", "arturiano", "aruaque", "arvores", "asbesto", "ascorbico", "aspirina",
|
||
|
"asqueroso", "assustar", "astuto", "atazanar", "ativo", "atletismo", "atmosferico", "atormentar",
|
||
|
"atroz", "aturdir", "audivel", "auferir", "augusto", "aula", "aumento", "aurora",
|
||
|
"autuar", "avatar", "avexar", "avizinhar", "avolumar", "avulso", "axiomatico", "azerbaijano",
|
||
|
"azimute", "azoto", "azulejo", "bacteriologista", "badulaque", "baforada", "baixote", "bajular",
|
||
|
"balzaquiana", "bambuzal", "banzo", "baoba", "baqueta", "barulho", "bastonete", "batuta",
|
||
|
"bauxita", "bavaro", "bazuca", "bcrepuscular", "beato", "beduino", "begonia", "behaviorista",
|
||
|
"beisebol", "belzebu", "bemol", "benzido", "beocio", "bequer", "berro", "besuntar",
|
||
|
"betume", "bexiga", "bezerro", "biatlon", "biboca", "bicuspide", "bidirecional", "bienio",
|
||
|
"bifurcar", "bigorna", "bijuteria", "bimotor", "binormal", "bioxido", "bipolarizacao", "biquini",
|
||
|
"birutice", "bisturi", "bituca", "biunivoco", "bivalve", "bizarro", "blasfemo", "blenorreia",
|
||
|
"blindar", "bloqueio", "blusao", "boazuda", "bofete", "bojudo", "bolso", "bombordo",
|
||
|
"bonzo", "botina", "boquiaberto", "bostoniano", "botulismo", "bourbon", "bovino", "boximane",
|
||
|
"bravura", "brevidade", "britar", "broxar", "bruno", "bruxuleio", "bubonico", "bucolico",
|
||
|
"buda", "budista", "bueiro", "buffer", "bugre", "bujao", "bumerangue", "burundines",
|
||
|
"busto", "butique", "buzios", "caatinga", "cabuqui", "cacunda", "cafuzo", "cajueiro",
|
||
|
"camurca", "canudo", "caquizeiro", "carvoeiro", "casulo", "catuaba", "cauterizar", "cebolinha",
|
||
|
"cedula", "ceifeiro", "celulose", "cerzir", "cesto", "cetro", "ceus", "cevar",
|
||
|
"chavena", "cheroqui", "chita", "chovido", "chuvoso", "ciatico", "cibernetico", "cicuta",
|
||
|
"cidreira", "cientistas", "cifrar", "cigarro", "cilio", "cimo", "cinzento", "cioso",
|
||
|
"cipriota", "cirurgico", "cisto", "citrico", "ciumento", "civismo", "clavicula", "clero",
|
||
|
"clitoris", "cluster", "coaxial", "cobrir", "cocota", "codorniz", "coexistir", "cogumelo",
|
||
|
"coito", "colusao", "compaixao", "comutativo", "contentamento", "convulsivo", "coordenativa", "coquetel",
|
||
|
"correto", "corvo", "costureiro", "cotovia", "covil", "cozinheiro", "cretino", "cristo",
|
||
|
"crivo", "crotalo", "cruzes", "cubo", "cucuia", "cueiro", "cuidar", "cujo",
|
||
|
"cultural", "cunilingua", "cupula", "curvo", "custoso", "cutucar", "czarismo", "dablio",
|
||
|
"dacota", "dados", "daguerreotipo", "daiquiri", "daltonismo", "damista", "dantesco", "daquilo",
|
||
|
"darwinista", "dasein", "dativo", "deao", "debutantes", "decurso", "deduzir", "defunto",
|
||
|
"degustar", "dejeto", "deltoide", "demover", "denunciar", "deputado", "deque", "dervixe",
|
||
|
"desvirtuar", "deturpar", "deuteronomio", "devoto", "dextrose", "dezoito", "diatribe", "dicotomico",
|
||
|
"didatico", "dietista", "difuso", "digressao", "diluvio", "diminuto", "dinheiro", "dinossauro",
|
||
|
"dioxido", "diplomatico", "dique", "dirimivel", "disturbio", "diurno", "divulgar", "dizivel",
|
||
|
"doar", "dobro", "docura", "dodoi", "doer", "dogue", "doloso", "domo",
|
||
|
"donzela", "doping", "dorsal", "dossie", "dote", "doutro", "doze", "dravidico",
|
||
|
"dreno", "driver", "dropes", "druso", "dubnio", "ducto", "dueto", "dulija",
|
||
|
"dundum", "duodeno", "duquesa", "durou", "duvidoso", "duzia", "ebano", "ebrio",
|
||
|
"eburneo", "echarpe", "eclusa", "ecossistema", "ectoplasma", "ecumenismo", "eczema", "eden",
|
||
|
"editorial", "edredom", "edulcorar", "efetuar", "efigie", "efluvio", "egiptologo", "egresso",
|
||
|
"egua", "einsteiniano", "eira", "eivar", "eixos", "ejetar", "elastomero", "eldorado",
|
||
|
"elixir", "elmo", "eloquente", "elucidativo", "emaranhar", "embutir", "emerito", "emfa",
|
||
|
"emitir", "emotivo", "empuxo", "emulsao", "enamorar", "encurvar", "enduro", "enevoar",
|
||
|
"enfurnar", "enguico", "enho", "enigmista", "enlutar", "enormidade", "enpreendimento", "enquanto",
|
||
|
"enriquecer", "enrugar", "entusiastico", "enunciar", "envolvimento", "enxuto", "enzimatico", "eolico",
|
||
|
"epiteto", "epoxi", "epura", "equivoco", "erario", "erbio", "ereto", "erguido",
|
||
|
"erisipela", "ermo", "erotizar", "erros", "erupcao", "ervilha", "esburacar", "escutar",
|
||
|
"esfuziante", "esguio", "esloveno", "esmurrar", "esoterismo", "esperanca", "espirito", "espurio",
|
||
|
"essencialmente", "esturricar", "esvoacar", "etario", "eterno", "etiquetar", "etnologo", "etos",
|
||
|
"etrusco", "euclidiano", "euforico", "eugenico", "eunuco", "europio", "eustaquio", "eutanasia",
|
||
|
"evasivo", "eventualidade", "evitavel", "evoluir", "exaustor", "excursionista", "exercito", "exfoliado",
|
||
|
"exito", "exotico", "expurgo", "exsudar", "extrusora", "exumar", "fabuloso", "facultativo",
|
||
|
"fado", "fagulha", "faixas", "fajuto", "faltoso", "famoso", "fanzine", "fapesp",
|
||
|
"faquir", "fartura", "fastio", "faturista", "fausto", "favorito", "faxineira", "fazer",
|
||
|
"fealdade", "febril", "fecundo", "fedorento", "feerico", "feixe", "felicidade", "felipe",
|
||
|
"feltro", "femur", "fenotipo", "fervura", "festivo", "feto", "feudo", "fevereiro",
|
||
|
"fezinha", "fiasco", "fibra", "ficticio", "fiduciario", "fiesp", "fifa", "figurino",
|
||
|
"fijiano", "filtro", "finura", "fiorde", "fiquei", "firula", "fissurar", "fitoteca",
|
||
|
"fivela", "fixo", "flavio", "flexor", "flibusteiro", "flotilha", "fluxograma", "fobos",
|
||
|
"foco", "fofura", "foguista", "foie", "foliculo", "fominha", "fonte", "forum",
|
||
|
"fosso", "fotossintese", "foxtrote", "fraudulento", "frevo", "frivolo", "frouxo", "frutose",
|
||
|
"fuba", "fucsia", "fugitivo", "fuinha", "fujao", "fulustreco", "fumo", "funileiro",
|
||
|
"furunculo", "fustigar", "futurologo", "fuxico", "fuzue", "gabriel", "gado", "gaelico",
|
||
|
"gafieira", "gaguejo", "gaivota", "gajo", "galvanoplastico", "gamo", "ganso", "garrucha",
|
||
|
"gastronomo", "gatuno", "gaussiano", "gaviao", "gaxeta", "gazeteiro", "gear", "geiser",
|
||
|
"geminiano", "generoso", "genuino", "geossinclinal", "gerundio", "gestual", "getulista", "gibi",
|
||
|
"gigolo", "gilete", "ginseng", "giroscopio", "glaucio", "glacial", "gleba", "glifo",
|
||
|
"glote", "glutonia", "gnostico", "goela", "gogo", "goitaca", "golpista", "gomo",
|
||
|
"gonzo", "gorro", "gostou", "goticula", "gourmet", "governo", "gozo", "graxo",
|
||
|
"grevista", "grito", "grotesco", "gruta", "guaxinim", "gude", "gueto", "guizo",
|
||
|
"guloso", "gume", "guru", "gustativo", "gustavo", "gutural", "habitue", "haitiano",
|
||
|
"halterofilista", "hamburguer", "hanseniase", "happening", "harpista", "hastear", "haveres", "hebreu",
|
||
|
"hectometro", "hedonista", "hegira", "helena", "helminto", "hemorroidas", "henrique", "heptassilabo",
|
||
|
"hertziano", "hesitar", "heterossexual", "heuristico", "hexagono", "hiato", "hibrido", "hidrostatico",
|
||
|
"hieroglifo", "hifenizar", "higienizar", "hilario", "himen", "hino", "hippie", "hirsuto",
|
||
|
"historiografia", "hitlerista", "hodometro", "hoje", "holograma", "homus", "honroso", "hoquei",
|
||
|
"horto", "hostilizar", "hotentote", "huguenote", "humilde", "huno", "hurra", "hutu",
|
||
|
"iaia", "ialorixa", "iambico", "iansa", "iaque", "iara", "iatista", "iberico",
|
||
|
"ibis", "icar", "iceberg", "icosagono", "idade", "ideologo", "idiotice", "idoso",
|
||
|
"iemenita", "iene", "igarape", "iglu", "ignorar", "igreja", "iguaria", "iidiche",
|
||
|
"ilativo", "iletrado", "ilharga", "ilimitado", "ilogismo", "ilustrissimo", "imaturo", "imbuzeiro",
|
||
|
"imerso", "imitavel", "imovel", "imputar", "imutavel", "inaveriguavel", "incutir", "induzir",
|
||
|
"inextricavel", "infusao", "ingua", "inhame", "iniquo", "injusto", "inning", "inoxidavel",
|
||
|
"inquisitorial", "insustentavel", "intumescimento", "inutilizavel", "invulneravel", "inzoneiro", "iodo", "iogurte",
|
||
|
"ioio", "ionosfera", "ioruba", "iota", "ipsilon", "irascivel", "iris", "irlandes",
|
||
|
"irmaos", "iroques", "irrupcao", "isca", "isento", "islandes", "isotopo", "isqueiro",
|
||
|
"israelita", "isso", "isto", "iterbio", "itinerario", "itrio", "iuane", "iugoslavo",
|
||
|
"jabuticabeira", "jacutinga", "jade", "jagunco", "jainista", "jaleco", "jambo", "jantarada",
|
||
|
"japones", "jaqueta", "jarro", "jasmim", "jato", "jaula", "javel", "jazz",
|
||
|
"jegue", "jeitoso", "jejum", "jenipapo", "jeova", "jequitiba", "jersei", "jesus",
|
||
|
"jetom", "jiboia", "jihad", "jilo", "jingle", "jipe", "jocoso", "joelho",
|
||
|
"joguete", "joio", "jojoba", "jorro", "jota", "joule", "joviano", "jubiloso",
|
||
|
"judoca", "jugular", "juizo", "jujuba", "juliano", "jumento", "junto", "jururu",
|
||
|
"justo", "juta", "juventude", "labutar", "laguna", "laico", "lajota", "lanterninha",
|
||
|
"lapso", "laquear", "lastro", "lauto", "lavrar", "laxativo", "lazer", "leasing",
|
||
|
"lebre", "lecionar", "ledo", "leguminoso", "leitura", "lele", "lemure", "lento",
|
||
|
"leonardo", "leopardo", "lepton", "leque", "leste", "letreiro", "leucocito", "levitico",
|
||
|
"lexicologo", "lhama", "lhufas", "liame", "licoroso", "lidocaina", "liliputiano", "limusine",
|
||
|
"linotipo", "lipoproteina", "liquidos", "lirismo", "lisura", "liturgico", "livros", "lixo",
|
||
|
"lobulo", "locutor", "lodo", "logro", "lojista", "lombriga", "lontra", "loop",
|
||
|
"loquaz", "lorota", "losango", "lotus", "louvor", "luar", "lubrificavel", "lucros",
|
||
|
"lugubre", "luis", "luminoso", "luneta", "lustroso", "luto", "luvas", "luxuriante",
|
||
|
"luzeiro", "maduro", "maestro", "mafioso", "magro", "maiuscula", "majoritario", "malvisto",
|
||
|
"mamute", "manutencao", "mapoteca", "maquinista", "marzipa", "masturbar", "matuto", "mausoleu",
|
||
|
"mavioso", "maxixe", "mazurca", "meandro", "mecha", "medusa", "mefistofelico", "megera",
|
||
|
"meirinho", "melro", "memorizar", "menu", "mequetrefe", "mertiolate", "mestria", "metroviario",
|
||
|
"mexilhao", "mezanino", "miau", "microssegundo", "midia", "migratorio", "mimosa", "minuto",
|
||
|
"miosotis", "mirtilo", "misturar", "mitzvah", "miudos", "mixuruca", "mnemonico", "moagem",
|
||
|
"mobilizar", "modulo", "moer", "mofo", "mogno", "moita", "molusco", "monumento",
|
||
|
"moqueca", "morubixaba", "mostruario", "motriz", "mouse", "movivel", "mozarela", "muarra",
|
||
|
"muculmano", "mudo", "mugir", "muitos", "mumunha", "munir", "muon", "muquira",
|
||
|
"murros", "musselina", "nacoes", "nado", "naftalina", "nago", "naipe", "naja",
|
||
|
"nalgum", "namoro", "nanquim", "napolitano", "naquilo", "nascimento", "nautilo", "navios",
|
||
|
"nazista", "nebuloso", "nectarina", "nefrologo", "negus", "nelore", "nenufar", "nepotismo",
|
||
|
"nervura", "neste", "netuno", "neutron", "nevoeiro", "newtoniano", "nexo", "nhenhenhem",
|
||
|
"nhoque", "nigeriano", "niilista", "ninho", "niobio", "niponico", "niquelar", "nirvana",
|
||
|
"nisto", "nitroglicerina", "nivoso", "nobreza", "nocivo", "noel", "nogueira", "noivo",
|
||
|
"nojo", "nominativo", "nonuplo", "noruegues", "nostalgico", "noturno", "nouveau", "nuanca",
|
||
|
"nublar", "nucleotideo", "nudista", "nulo", "numismatico", "nunquinha", "nupcias", "nutritivo",
|
||
|
"nuvens", "oasis", "obcecar", "obeso", "obituario", "objetos", "oblongo", "obnoxio",
|
||
|
"obrigatorio", "obstruir", "obtuso", "obus", "obvio", "ocaso", "occipital", "oceanografo",
|
||
|
"ocioso", "oclusivo", "ocorrer", "ocre", "octogono", "odalisca", "odisseia", "odorifico",
|
||
|
"oersted", "oeste", "ofertar", "ofidio", "oftalmologo", "ogiva", "ogum", "oigale",
|
||
|
"oitavo", "oitocentos", "ojeriza", "olaria", "oleoso", "olfato", "olhos", "oliveira",
|
||
|
"olmo", "olor", "olvidavel", "ombudsman", "omeleteira", "omitir", "omoplata", "onanismo",
|
||
|
"ondular", "oneroso", "onomatopeico", "ontologico", "onus", "onze", "opalescente", "opcional",
|
||
|
"operistico", "opio", "oposto", "oprobrio", "optometrista", "opusculo", "oratorio", "orbital",
|
||
|
"orcar", "orfao", "orixa", "orla", "ornitologo", "orquidea", "ortorrombico", "orvalho",
|
||
|
"osculo", "osmotico", "ossudo", "ostrogodo", "otario", "otite", "ouro", "ousar",
|
||
|
"outubro", "ouvir", "ovario", "overnight", "oviparo", "ovni", "ovoviviparo", "ovulo",
|
||
|
"oxala", "oxente", "oxiuro", "oxossi", "ozonizar", "paciente", "pactuar", "padronizar",
|
||
|
"paete", "pagodeiro", "paixao", "pajem", "paludismo", "pampas", "panturrilha", "papudo",
|
||
|
"paquistanes", "pastoso", "patua", "paulo", "pauzinhos", "pavoroso", "paxa", "pazes",
|
||
|
"peao", "pecuniario", "pedunculo", "pegaso", "peixinho", "pejorativo", "pelvis", "penuria",
|
||
|
"pequno", "petunia", "pezada", "piauiense", "pictorico", "pierro", "pigmeu", "pijama",
|
||
|
"pilulas", "pimpolho", "pintura", "piorar", "pipocar", "piqueteiro", "pirulito", "pistoleiro",
|
||
|
"pituitaria", "pivotar", "pixote", "pizzaria", "plistoceno", "plotar", "pluviometrico", "pneumonico",
|
||
|
"poco", "podridao", "poetisa", "pogrom", "pois", "polvorosa", "pomposo", "ponderado",
|
||
|
"pontudo", "populoso", "poquer", "porvir", "posudo", "potro", "pouso", "povoar",
|
||
|
"prazo", "prezar", "privilegios", "proximo", "prussiano", "pseudopode", "psoriase", "pterossauros",
|
||
|
"ptialina", "ptolemaico", "pudor", "pueril", "pufe", "pugilista", "puir", "pujante",
|
||
|
"pulverizar", "pumba", "punk", "purulento", "pustula", "putsch", "puxe", "quatrocentos",
|
||
|
"quetzal", "quixotesco", "quotizavel", "rabujice", "racista", "radonio", "rafia", "ragu",
|
||
|
"rajado", "ralo", "rampeiro", "ranzinza", "raptor", "raquitismo", "raro", "rasurar",
|
||
|
"ratoeira", "ravioli", "razoavel", "reavivar", "rebuscar", "recusavel", "reduzivel", "reexposicao",
|
||
|
"refutavel", "regurgitar", "reivindicavel", "rejuvenescimento", "relva", "remuneravel", "renunciar", "reorientar",
|
||
|
"repuxo", "requisito", "resumo", "returno", "reutilizar", "revolvido", "rezonear", "riacho",
|
||
|
"ribossomo", "ricota", "ridiculo", "rifle", "rigoroso", "rijo", "rimel", "rins",
|
||
|
"rios", "riqueza", "riquixa", "rissole", "ritualistico", "rivalizar", "rixa", "robusto",
|
||
|
"rococo", "rodoviario", "roer", "rogo", "rojao", "rolo", "rompimento", "ronronar",
|
||
|
"roqueiro", "rorqual", "rosto", "rotundo", "rouxinol", "roxo", "royal", "ruas",
|
||
|
"rucula", "rudimentos", "ruela", "rufo", "rugoso", "ruivo", "rule", "rumoroso",
|
||
|
"runico", "ruptura", "rural", "rustico", "rutilar", "saariano", "sabujo", "sacudir",
|
||
|
"sadomasoquista", "safra", "sagui", "sais", "samurai", "santuario", "sapo", "saquear",
|
||
|
"sartriano", "saturno", "saude", "sauva", "saveiro", "saxofonista", "sazonal", "scherzo",
|
||
|
"script", "seara", "seborreia", "secura", "seduzir", "sefardim", "seguro", "seja",
|
||
|
"selvas", "sempre", "senzala", "sepultura", "sequoia", "sestercio", "setuplo", "seus",
|
||
|
"seviciar", "sezonismo", "shalom", "siames", "sibilante", "sicrano", "sidra", "sifilitico",
|
||
|
"signos", "silvo", "simultaneo", "sinusite", "sionista", "sirio", "sisudo", "situar",
|
||
|
"sivan", "slide", "slogan", "soar", "sobrio", "socratico", "sodomizar", "soerguer",
|
||
|
"software", "sogro", "soja", "solver", "somente", "sonso", "sopro", "soquete",
|
||
|
"sorveteiro", "sossego", "soturno", "sousafone", "sovinice", "sozinho", "suavizar", "subverter",
|
||
|
"sucursal", "sudoriparo", "sufragio", "sugestoes", "suite", "sujo", "sultao", "sumula",
|
||
|
"suntuoso", "suor", "supurar", "suruba", "susto", "suturar", "suvenir", "tabuleta",
|
||
|
"taco", "tadjique", "tafeta", "tagarelice", "taitiano", "talvez", "tampouco", "tanzaniano",
|
||
|
"taoista", "tapume", "taquion", "tarugo", "tascar", "tatuar", "tautologico", "tavola",
|
||
|
"taxionomista", "tchecoslovaco", "teatrologo", "tectonismo", "tedioso", "teflon", "tegumento", "teixo",
|
||
|
"telurio", "temporas", "tenue", "teosofico", "tepido", "tequila", "terrorista", "testosterona",
|
||
|
"tetrico", "teutonico", "teve", "texugo", "tiara", "tibia", "tiete", "tifoide",
|
||
|
"tigresa", "tijolo", "tilintar", "timpano", "tintureiro", "tiquete", "tiroteio", "tisico",
|
||
|
"titulos", "tive", "toar", "toboga", "tofu", "togoles", "toicinho", "tolueno",
|
||
|
"tomografo", "tontura", "toponimo", "toquio", "torvelinho", "tostar", "toto", "touro",
|
||
|
"toxina", "trazer", "trezentos", "trivialidade", "trovoar", "truta", "tuaregue", "tubular",
|
||
|
"tucano", "tudo", "tufo", "tuiste", "tulipa", "tumultuoso", "tunisino", "tupiniquim",
|
||
|
"turvo", "tutu", "ucraniano", "udenista", "ufanista", "ufologo", "ugaritico", "uiste",
|
||
|
"uivo", "ulceroso", "ulema", "ultravioleta", "umbilical", "umero", "umido", "umlaut",
|
||
|
"unanimidade", "unesco", "ungulado", "unheiro", "univoco", "untuoso", "urano", "urbano",
|
||
|
"urdir", "uretra", "urgente", "urinol", "urna", "urologo", "urro", "ursulina",
|
||
|
"urtiga", "urupe", "usavel", "usbeque", "usei", "usineiro", "usurpar", "utero",
|
||
|
"utilizar", "utopico", "uvular", "uxoricidio", "vacuo", "vadio", "vaguear", "vaivem",
|
||
|
"valvula", "vampiro", "vantajoso", "vaporoso", "vaquinha", "varziano", "vasto", "vaticinio",
|
||
|
"vaudeville", "vazio", "veado", "vedico", "veemente", "vegetativo", "veio", "veja",
|
||
|
"veludo", "venusiano", "verdade", "verve", "vestuario", "vetusto", "vexatorio", "vezes",
|
||
|
"viavel", "vibratorio", "victor", "vicunha", "vidros", "vietnamita", "vigoroso", "vilipendiar",
|
||
|
"vime", "vintem", "violoncelo", "viquingue", "virus", "visualizar", "vituperio", "viuvo",
|
||
|
"vivo", "vizir", "voar", "vociferar", "vodu", "vogar", "voile", "volver",
|
||
|
"vomito", "vontade", "vortice", "vosso", "voto", "vovozinha", "voyeuse", "vozes",
|
||
|
"vulva", "vupt", "western", "xadrez", "xale", "xampu", "xango", "xarope",
|
||
|
"xaual", "xavante", "xaxim", "xenonio", "xepa", "xerox", "xicara", "xifopago",
|
||
|
"xiita", "xilogravura", "xinxim", "xistoso", "xixi", "xodo", "xogum", "xucro",
|
||
|
"zabumba", "zagueiro", "zambiano", "zanzar", "zarpar", "zebu", "zefiro", "zeloso",
|
||
|
"zenite", "zumbi"
|
||
|
]
|
||
|
},
|
||
|
'esperanto': {
|
||
|
prefix_len: 4,
|
||
|
words: [
|
||
|
"abako", "abdiki", "abelo", "abituriento", "ablativo", "abnorma", "abonantoj", "abrikoto",
|
||
|
"absoluta", "abunda", "acetono", "acida", "adapti", "adekvata", "adheri", "adicii",
|
||
|
"adjektivo", "administri", "adolesko", "adreso", "adstringa", "adulto", "advokato", "adzo",
|
||
|
"aeroplano", "aferulo", "afgana", "afiksi", "aflaba", "aforismo", "afranki", "aftozo",
|
||
|
"afusto", "agavo", "agento", "agiti", "aglo", "agmaniero", "agnoski", "agordo",
|
||
|
"agrabla", "agtipo", "agutio", "aikido", "ailanto", "aina", "ajatolo", "ajgenvaloro",
|
||
|
"ajlobulbo", "ajnlitera", "ajuto", "ajzi", "akademio", "akcepti", "akeo", "akiri",
|
||
|
"aklamado", "akmeo", "akno", "akompani", "akrobato", "akselo", "aktiva", "akurata",
|
||
|
"akvofalo", "alarmo", "albumo", "alcedo", "aldoni", "aleo", "alfabeto", "algo",
|
||
|
"alhasti", "aligatoro", "alkoholo", "almozo", "alnomo", "alojo", "alpinisto", "alrigardi",
|
||
|
"alskribi", "alta", "alumeto", "alveni", "alzaca", "amaso", "ambasado", "amdeklaro",
|
||
|
"amebo", "amfibio", "amhara", "amiko", "amkanto", "amletero", "amnestio", "amoranto",
|
||
|
"amplekso", "amrakonto", "amsterdama", "amuzi", "ananaso", "androido", "anekdoto", "anfrakto",
|
||
|
"angulo", "anheli", "animo", "anjono", "ankro", "anonci", "anpriskribo", "ansero",
|
||
|
"antikva", "anuitato", "aorto", "aparta", "aperti", "apika", "aplikado", "apneo",
|
||
|
"apogi", "aprobi", "apsido", "apterigo", "apudesto", "araneo", "arbo", "ardeco",
|
||
|
"aresti", "argilo", "aristokrato", "arko", "arlekeno", "armi", "arniko", "aromo",
|
||
|
"arpio", "arsenalo", "artisto", "aruba", "arvorto", "asaio", "asbesto", "ascendi",
|
||
|
"asekuri", "asfalto", "asisti", "askalono", "asocio", "aspekti", "astro", "asulo",
|
||
|
"atakonto", "atendi", "atingi", "atleto", "atmosfero", "atomo", "atropino", "atuto",
|
||
|
"avataro", "aventuro", "aviadilo", "avokado", "azaleo", "azbuko", "azenino", "azilpetanto",
|
||
|
"azoto", "azteka", "babili", "bacilo", "badmintono", "bagatelo", "bahama", "bajoneto",
|
||
|
"baki", "balai", "bambuo", "bani", "baobabo", "bapti", "baro", "bastono",
|
||
|
"batilo", "bavara", "bazalto", "beata", "bebofono", "bedo", "begonio", "behaviorismo",
|
||
|
"bejlo", "bekero", "belarto", "bemolo", "benko", "bereto", "besto", "betulo",
|
||
|
"bevelo", "bezoni", "biaso", "biblioteko", "biciklo", "bidaro", "bieno", "bifsteko",
|
||
|
"bigamiulo", "bijekcio", "bikino", "bildo", "bimetalismo", "bindi", "biografio", "birdo",
|
||
|
"biskvito", "bitlibro", "bivako", "bizara", "bjalistoka", "blanka", "bleki", "blinda",
|
||
|
"blovi", "blua", "boato", "bobsledo", "bocvanano", "bodisatvo", "bofratino", "bogefratoj",
|
||
|
"bohema", "boji", "bokalo", "boli", "bombono", "bona", "bopatrino", "bordo",
|
||
|
"bosko", "botelo", "bovido", "brakpleno", "bretaro", "brikmuro", "broso", "brulema",
|
||
|
"bubalo", "buctrapi", "budo", "bufedo", "bugio", "bujabeso", "buklo", "buldozo",
|
||
|
"bumerango", "bunta", "burokrataro", "busbileto", "butero", "buzuko", "caro", "cebo",
|
||
|
"ceceo", "cedro", "cefalo", "cejana", "cekumo", "celebri", "cemento", "cent",
|
||
|
"cepo", "certa", "cetera", "cezio", "ciano", "cibeto", "cico", "cidro",
|
||
|
"cifero", "cigaredo", "ciklo", "cilindro", "cimbalo", "cinamo", "cipreso", "cirkonstanco",
|
||
|
"cisterno", "citrono", "ciumi", "civilizado", "colo", "congo", "cunamo", "cvana",
|
||
|
"dabi", "daco", "dadaismo", "dafodilo", "dago", "daimio", "dajmono", "daktilo",
|
||
|
"dalio", "damo", "danki", "darmo", "datumoj", "dazipo", "deadmoni", "debeto",
|
||
|
"decidi", "dedukti", "deerigi", "defendi", "degeli", "dehaki", "deirpunkto", "deklaracio",
|
||
|
"delikata", "demandi", "dento", "dependi", "derivi", "desegni", "detrui", "devi",
|
||
|
"deziri", "dialogo", "dicentro", "didaktika", "dieto", "diferenci", "digesti", "diino",
|
||
|
"dikfingro", "diligenta", "dimensio", "dinamo", "diodo", "diplomo", "direkte", "diskuti",
|
||
|
"diurno", "diversa", "dizajno", "dobrogitaro", "docento", "dogano", "dojeno", "doktoro",
|
||
|
"dolori", "domego", "donaci", "dopado", "dormi", "dosierujo", "dotita", "dozeno",
|
||
|
"drato", "dresi", "drinki", "droni", "druido", "duaranga", "dubi", "ducent",
|
||
|
"dudek", "duelo", "dufoje", "dugongo", "duhufa", "duilo", "dujare", "dukato",
|
||
|
"duloka", "dumtempe", "dungi", "duobla", "dupiedulo", "dura", "dusenca", "dutaga",
|
||
|
"duuma", "duvalvuloj", "duzo", "ebena", "eblecoj", "ebono", "ebria", "eburo",
|
||
|
"ecaro", "ecigi", "ecoj", "edelvejso", "editoro", "edro", "eduki", "edzino",
|
||
|
"efektiva", "efiki", "efloreski", "egala", "egeco", "egiptologo", "eglefino", "egoista",
|
||
|
"egreto", "ejakuli", "ejlo", "ekarto", "ekbruligi", "ekceli", "ekde", "ekesti",
|
||
|
"ekfirmao", "ekgliti", "ekhavi", "ekipi", "ekkapti", "eklezio", "ekmalsati", "ekonomio",
|
||
|
"ekpluvi", "ekrano", "ekster", "ektiri", "ekumeno", "ekvilibro", "ekzemplo", "elasta",
|
||
|
"elbalai", "elcento", "eldoni", "elektro", "elfari", "elgliti", "elhaki", "elipso",
|
||
|
"elkovi", "ellasi", "elmeti", "elnutri", "elokventa", "elparoli", "elrevigi", "elstari",
|
||
|
"elteni", "eluzita", "elvoki", "elzasa", "emajlo", "embaraso", "emerito", "emfazo",
|
||
|
"eminenta", "emocio", "empiria", "emulsio", "enarkivigi", "enboteligi", "enciklopedio", "endorfino",
|
||
|
"energio", "enfermi", "engluti", "enhavo", "enigmo", "enjekcio", "enketi", "enlanda",
|
||
|
"enmeti", "enorma", "enplanti", "enradiki", "enspezo", "entrepreni", "enui", "envolvi",
|
||
|
"enzimo", "eono", "eosto", "epitafo", "epoko", "epriskribebla", "epsilono", "erari",
|
||
|
"erbio", "erco", "erekti", "ergonomia", "erikejo", "ermito", "erotika", "erpilo",
|
||
|
"erupcio", "esameno", "escepti", "esenco", "eskapi", "esotera", "esperi", "estonto",
|
||
|
"etapo", "etendi", "etfingro", "etikedo", "etlitero", "etmakleristo", "etnika", "etoso",
|
||
|
"etradio", "etskala", "etullernejo", "evakui", "evento", "eviti", "evolui", "ezoko",
|
||
|
"fabriko", "facila", "fadeno", "fagoto", "fajro", "fakto", "fali", "familio",
|
||
|
"fanatiko", "farbo", "fasko", "fatala", "favora", "fazeolo", "febro", "federacio",
|
||
|
"feino", "fekunda", "felo", "femuro", "fenestro", "fermi", "festi", "fetora",
|
||
|
"fezo", "fiasko", "fibro", "fidela", "fiera", "fifama", "figuro", "fiherbo",
|
||
|
"fiinsekto", "fiksa", "filmo", "fimensa", "finalo", "fiolo", "fiparoli", "firmao",
|
||
|
"fisko", "fitingo", "fiuzanto", "fivorto", "fiziko", "fjordo", "flago", "flegi",
|
||
|
"flirti", "floro", "flugi", "fobio", "foceno", "foirejo", "fojfoje", "fokuso",
|
||
|
"folio", "fomenti", "fonto", "formulo", "fosforo", "fotografi", "fratino", "fremda",
|
||
|
"friti", "frosto", "frua", "ftizo", "fuelo", "fugo", "fuksia", "fulmilo",
|
||
|
"fumanto", "fundamento", "fuorto", "furioza", "fusilo", "futbalo", "fuzio", "gabardino",
|
||
|
"gado", "gaela", "gafo", "gagato", "gaja", "gaki", "galanta", "gamao",
|
||
|
"ganto", "gapulo", "gardi", "gasto", "gavio", "gazeto", "geamantoj", "gebani",
|
||
|
"geedzeco", "gefratoj", "geheno", "gejsero", "geko", "gelateno", "gemisto", "geniulo",
|
||
|
"geografio", "gepardo", "geranio", "gestolingvo", "geto", "geumo", "gibono", "giganta",
|
||
|
"gildo", "gimnastiko", "ginekologo", "gipsi", "girlando", "gistfungo", "gitaro", "glazuro",
|
||
|
"glebo", "gliti", "globo", "gluti", "gnafalio", "gnejso", "gnomo", "gnuo",
|
||
|
"gobio", "godetio", "goeleto", "gojo", "golfludejo", "gombo", "gondolo", "gorilo",
|
||
|
"gospelo", "gotika", "granda", "greno", "griza", "groto", "grupo", "guano",
|
||
|
"gubernatoro", "gudrotuko", "gufo", "gujavo", "guldeno", "gumi", "gupio", "guruo",
|
||
|
"gusto", "guto", "guvernistino", "gvardio", "gverilo", "gvidanto", "habitato", "hadito",
|
||
|
"hafnio", "hagiografio", "haitiano", "hajlo", "hakbloko", "halti", "hamstro", "hangaro",
|
||
|
"hapalo", "haro", "hasta", "hati", "havebla", "hazardo", "hebrea", "hedero",
|
||
|
"hegemonio", "hejmo", "hektaro", "helpi", "hemisfero", "heni", "hepato", "herbo",
|
||
|
"hesa", "heterogena", "heziti", "hiacinto", "hibrida", "hidrogeno", "hieroglifo", "higieno",
|
||
|
"hihii", "hilumo", "himno", "hindino", "hiperteksto", "hirundo", "historio", "hobio",
|
||
|
"hojli", "hokeo", "hologramo", "homido", "honesta", "hopi", "horizonto", "hospitalo",
|
||
|
"hotelo", "huadi", "hubo", "hufumo", "hugenoto", "hukero", "huligano", "humana",
|
||
|
"hundo", "huoj", "hupilo", "hurai", "husaro", "hutuo", "huzo", "iafoje",
|
||
|
"iagrade", "iamaniere", "iarelate", "iaspeca", "ibekso", "ibiso", "idaro", "ideala",
|
||
|
"idiomo", "idolo", "iele", "igluo", "ignori", "iguamo", "igvano", "ikono",
|
||
|
"iksodo", "ikto", "iliaflanke", "ilkomputilo", "ilobreto", "ilremedo", "ilumini", "imagi",
|
||
|
"imitado", "imperio", "imuna", "incidento", "industrio", "inerta", "infano", "ingenra",
|
||
|
"inhali", "iniciati", "injekti", "inklino", "inokuli", "insekto", "inteligenta", "inundi",
|
||
|
"inviti", "ioma", "ionosfero", "iperito", "ipomeo", "irana", "irejo", "irigacio",
|
||
|
"ironio", "isato", "islamo", "istempo", "itinero", "itrio", "iuloke", "iumaniere",
|
||
|
"iutempe", "izolita", "jado", "jaguaro", "jakto", "jama", "januaro", "japano",
|
||
|
"jarringo", "jazo", "jenoj", "jesulo", "jetavio", "jezuito", "jodli", "joviala",
|
||
|
"juano", "jubileo", "judismo", "jufto", "juki", "julio", "juneca", "jupo",
|
||
|
"juristo", "juste", "juvelo", "kabineto", "kadrato", "kafo", "kahelo", "kajako",
|
||
|
"kakao", "kalkuli", "kampo", "kanti", "kapitalo", "karaktero", "kaserolo", "katapulto",
|
||
|
"kaverna", "kazino", "kebabo", "kefiro", "keglo", "kejlo", "kekso", "kelka",
|
||
|
"kemio", "kerno", "kesto", "kiamaniere", "kibuco", "kidnapi", "kielo", "kikero",
|
||
|
"kilogramo", "kimono", "kinejo", "kiosko", "kirurgo", "kisi", "kitelo", "kivio",
|
||
|
"klavaro", "klerulo", "klini", "klopodi", "klubo", "knabo", "knedi", "koalo",
|
||
|
"kobalto", "kodigi", "kofro", "kohera", "koincidi", "kojoto", "kokoso", "koloro",
|
||
|
"komenci", "kontrakto", "kopio", "korekte", "kosti", "kotono", "kovri", "krajono",
|
||
|
"kredi", "krii", "krom", "kruco", "ksantino", "ksenono", "ksilofono", "ksosa",
|
||
|
"kubuto", "kudri", "kuglo", "kuiri", "kuko", "kulero", "kumuluso", "kuneco",
|
||
|
"kupro", "kuri", "kuseno", "kutimo", "kuvo", "kuzino", "kvalito", "kverko",
|
||
|
"kvin", "kvoto", "labori", "laculo", "ladbotelo", "lafo", "laguno", "laikino",
|
||
|
"laktobovino", "lampolumo", "landkarto", "laosa", "lapono", "larmoguto", "lastjare", "latitudo",
|
||
|
"lavejo", "lazanjo", "leciono", "ledosako", "leganto", "lekcio", "lemura", "lentuga",
|
||
|
"leopardo", "leporo", "lerni", "lesivo", "letero", "levilo", "lezi", "liano",
|
||
|
"libera", "liceo", "lieno", "lifto", "ligilo", "likvoro", "lila", "limono",
|
||
|
"lingvo", "lipo", "lirika", "listo", "literatura", "liveri", "lobio", "logika",
|
||
|
"lojala", "lokalo", "longa", "lordo", "lotado", "loza", "luanto", "lubriki",
|
||
|
"lucida", "ludema", "luigi", "lukso", "luli", "lumbilda", "lunde", "lupago",
|
||
|
"lustro", "lutilo", "luzerno", "maato", "maceri", "madono", "mafiano", "magazeno",
|
||
|
"mahometano", "maizo", "majstro", "maketo", "malgranda", "mamo", "mandareno", "maorio",
|
||
|
"mapigi", "marini", "masko", "mateno", "mazuto", "meandro", "meblo", "mecenato",
|
||
|
"medialo", "mefito", "megafono", "mejlo", "mekanika", "melodia", "membro", "mendi",
|
||
|
"mergi", "mespilo", "metoda", "mevo", "mezuri", "miaflanke", "micelio", "mielo",
|
||
|
"migdalo", "mikrofilmo", "militi", "mimiko", "mineralo", "miopa", "miri", "mistera",
|
||
|
"mitralo", "mizeri", "mjelo", "mnemoniko", "mobilizi", "mocio", "moderna", "mohajro",
|
||
|
"mokadi", "molaro", "momento", "monero", "mopso", "mordi", "moskito", "motoro",
|
||
|
"movimento", "mozaiko", "mueli", "mukozo", "muldi", "mumio", "munti", "muro",
|
||
|
"muskolo", "mutacio", "muzikisto", "nabo", "nacio", "nadlo", "nafto", "naiva",
|
||
|
"najbaro", "nanometro", "napo", "narciso", "naski", "naturo", "navigi", "naztruo",
|
||
|
"neatendite", "nebulo", "necesa", "nedankinde", "neebla", "nefari", "negoco", "nehavi",
|
||
|
"neimagebla", "nektaro", "nelonga", "nematura", "nenia", "neordinara", "nepra", "nervuro",
|
||
|
"nesto", "nete", "neulo", "nevino", "nifo", "nigra", "nihilisto", "nikotino",
|
||
|
"nilono", "nimfeo", "nitrogeno", "nivelo", "nobla", "nocio", "nodozo", "nokto",
|
||
|
"nomkarto", "norda", "nostalgio", "notbloko", "novico", "nuanco", "nuboza", "nuda",
|
||
|
"nugato", "nuklea", "nuligi", "numero", "nuntempe", "nupto", "nura", "nutri",
|
||
|
"oazo", "obei", "objekto", "oblikva", "obolo", "observi", "obtuza", "obuso",
|
||
|
"oceano", "odekolono", "odori", "oferti", "oficiala", "ofsajdo", "ofte", "ogivo",
|
||
|
"ogro", "ojstredoj", "okaze", "okcidenta", "okro", "oksido", "oktobro", "okulo",
|
||
|
"oldulo", "oleo", "olivo", "omaro", "ombro", "omego", "omikrono", "omleto",
|
||
|
"omnibuso", "onagro", "ondo", "oneco", "onidire", "onklino", "onlajna", "onomatopeo",
|
||
|
"ontologio", "opaka", "operacii", "opinii", "oportuna", "opresi", "optimisto", "oratoro",
|
||
|
"orbito", "ordinara", "orelo", "orfino", "organizi", "orienta", "orkestro", "orlo",
|
||
|
"orminejo", "ornami", "ortangulo", "orumi", "oscedi", "osmozo", "ostocerbo", "ovalo",
|
||
|
"ovingo", "ovoblanko", "ovri", "ovulado", "ozono", "pacama", "padeli", "pafilo",
|
||
|
"pagigi", "pajlo", "paketo", "palaco", "pampelmo", "pantalono", "papero", "paroli",
|
||
|
"pasejo", "patro", "pavimo", "peco", "pedalo", "peklita", "pelikano", "pensiono",
|
||
|
"peplomo", "pesilo", "petanto", "pezoforto", "piano", "picejo", "piede", "pigmento",
|
||
|
"pikema", "pilkoludo", "pimento", "pinglo", "pioniro", "pipromento", "pirato", "pistolo",
|
||
|
"pitoreska", "piulo", "pivoti", "pizango", "planko", "plektita", "plibonigi", "ploradi",
|
||
|
"plurlingva", "pobo", "podio", "poeto", "pogranda", "pohora", "pokalo", "politekniko",
|
||
|
"pomarbo", "ponevosto", "populara", "porcelana", "postkompreno", "poteto", "poviga", "pozitiva",
|
||
|
"prapatroj", "precize", "pridemandi", "probable", "pruntanto", "psalmo", "psikologio", "psoriazo",
|
||
|
"pterido", "publiko", "pudro", "pufo", "pugnobato", "pulovero", "pumpi", "punkto",
|
||
|
"pupo", "pureo", "puso", "putrema", "puzlo", "rabate", "racionala", "radiko",
|
||
|
"rafinado", "raguo", "rajto", "rakonti", "ralio", "rampi", "rando", "rapida",
|
||
|
"rastruma", "ratifiki", "raviolo", "razeno", "reakcio", "rebildo", "recepto", "redakti",
|
||
|
"reenigi", "reformi", "regiono", "rehavi", "reinspekti", "rejesi", "reklamo", "relativa",
|
||
|
"rememori", "renkonti", "reorganizado", "reprezenti", "respondi", "retumilo", "reuzebla", "revidi",
|
||
|
"rezulti", "rialo", "ribeli", "ricevi", "ridiga", "rifuginto", "rigardi", "rikolti",
|
||
|
"rilati", "rimarki", "rinocero", "ripozi", "riski", "ritmo", "rivero", "rizokampo",
|
||
|
"roboto", "rododendro", "rojo", "rokmuziko", "rolvorto", "romantika", "ronroni", "rosino",
|
||
|
"rotondo", "rovero", "rozeto", "rubando", "rudimenta", "rufa", "rugbeo", "ruino",
|
||
|
"ruleto", "rumoro", "runo", "rupio", "rura", "rustimuna", "ruzulo", "sabato",
|
||
|
"sadismo", "safario", "sagaca", "sakfluto", "salti", "samtage", "sandalo", "sapejo",
|
||
|
"sarongo", "satelito", "savano", "sbiro", "sciado", "seanco", "sebo", "sedativo",
|
||
|
"segligno", "sekretario", "selektiva", "semajno", "senpeza", "separeo", "servilo", "sesangulo",
|
||
|
"setli", "seurigi", "severa", "sezono", "sfagno", "sfero", "sfinkso", "siatempe",
|
||
|
"siblado", "sidejo", "siesto", "sifono", "signalo", "siklo", "silenti", "simpla",
|
||
|
"sinjoro", "siropo", "sistemo", "situacio", "siverto", "sizifa", "skatolo", "skemo",
|
||
|
"skianto", "sklavo", "skorpio", "skribisto", "skulpti", "skvamo", "slango", "sledeto",
|
||
|
"sliparo", "smeraldo", "smirgi", "smokingo", "smuto", "snoba", "snufegi", "sobra",
|
||
|
"sociano", "sodakvo", "sofo", "soifi", "sojlo", "soklo", "soldato", "somero",
|
||
|
"sonilo", "sopiri", "sorto", "soulo", "soveto", "sparkado", "speciala", "spiri",
|
||
|
"splito", "sporto", "sprita", "spuro", "stabila", "stelfiguro", "stimulo", "stomako",
|
||
|
"strato", "studanto", "subgrupo", "suden", "suferanta", "sugesti", "suito", "sukero",
|
||
|
"sulko", "sume", "sunlumo", "super", "surskribeto", "suspekti", "suturo", "svati",
|
||
|
"svenfali", "svingi", "svopo", "tabako", "taglumo", "tajloro", "taksimetro", "talento",
|
||
|
"tamen", "tanko", "taoismo", "tapioko", "tarifo", "tasko", "tatui", "taverno",
|
||
|
"teatro", "tedlaboro", "tegmento", "tehoro", "teknika", "telefono", "tempo", "tenisejo",
|
||
|
"teorie", "teraso", "testudo", "tetablo", "teujo", "tezo", "tialo", "tibio",
|
||
|
"tielnomata", "tifono", "tigro", "tikli", "timida", "tinkturo", "tiom", "tiparo",
|
||
|
"tirkesto", "titolo", "tiutempe", "tizano", "tobogano", "tofeo", "togo", "toksa",
|
||
|
"tolerema", "tombolo", "tondri", "topografio", "tordeti", "tosti", "totalo", "traduko",
|
||
|
"tredi", "triangulo", "tropika", "trumpeto", "tualeto", "tubisto", "tufgrebo", "tuja",
|
||
|
"tukano", "tulipo", "tumulto", "tunelo", "turisto", "tusi", "tutmonda", "tvisto",
|
||
|
"udono", "uesto", "ukazo", "ukelelo", "ulcero", "ulmo", "ultimato", "ululi",
|
||
|
"umbiliko", "unco", "ungego", "uniformo", "unkti", "unukolora", "uragano", "urbano",
|
||
|
"uretro", "urino", "ursido", "uskleco", "usonigi", "utero", "utila", "utopia",
|
||
|
"uverturo", "uzadi", "uzeblo", "uzino", "uzkutimo", "uzofini", "uzurpi", "uzvaloro",
|
||
|
"vadejo", "vafleto", "vagono", "vahabismo", "vajco", "vakcino", "valoro", "vampiro",
|
||
|
"vangharoj", "vaporo", "varma", "vasta", "vato", "vazaro", "veaspekta", "vedismo",
|
||
|
"vegetalo", "vehiklo", "vejno", "vekita", "velstango", "vemieno", "vendi", "vepro",
|
||
|
"verando", "vespero", "veturi", "veziko", "viando", "vibri", "vico", "videbla",
|
||
|
"vifio", "vigla", "viktimo", "vila", "vimeno", "vintro", "violo", "vippuno",
|
||
|
"virtuala", "viskoza", "vitro", "viveca", "viziti", "vobli", "vodko", "vojeto",
|
||
|
"vokegi", "volbo", "vomema", "vono", "vortaro", "vosto", "voti", "vrako",
|
||
|
"vringi", "vualo", "vulkano", "vundo", "vuvuzelo", "zamenhofa", "zapi", "zebro",
|
||
|
"zefiro", "zeloto", "zenismo", "zeolito", "zepelino", "zeto", "zigzagi", "zinko",
|
||
|
"zipo", "zirkonio", "zodiako", "zoeto", "zombio", "zono", "zoologio", "zorgi",
|
||
|
"zukino", "zumilo"
|
||
|
]
|
||
|
},
|
||
|
'japanese': {
|
||
|
prefix_len: 3,
|
||
|
words: [
|
||
|
"あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける",
|
||
|
"あこがれる", "あさい", "あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ",
|
||
|
"あたえる", "あたためる", "あたりまえ", "あたる", "あつい", "あつかう", "あっしゅく", "あつまり",
|
||
|
"あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる", "あふれる", "あまい",
|
||
|
"あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
|
||
|
"あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる",
|
||
|
"あんい", "あんがい", "あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす",
|
||
|
"いおん", "いがい", "いがく", "いきおい", "いきなり", "いきもの", "いきる", "いくじ",
|
||
|
"いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ", "いさましい", "いさん",
|
||
|
"いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
|
||
|
"いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら",
|
||
|
"いたみ", "いたりあ", "いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう",
|
||
|
"いつか", "いっしゅん", "いっせい", "いっそう", "いったん", "いっち", "いってい", "いっぽう",
|
||
|
"いてざ", "いてん", "いどう", "いとこ", "いない", "いなか", "いねむり", "いのち",
|
||
|
"いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
|
||
|
"いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん",
|
||
|
"いよく", "いらい", "いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる",
|
||
|
"いろえんぴつ", "いわい", "いわう", "いわかん", "いわば", "いわゆる", "いんげんまめ", "いんさつ",
|
||
|
"いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい", "うかぶ", "うかべる",
|
||
|
"うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
|
||
|
"うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ",
|
||
|
"うすぐらい", "うすめる", "うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり",
|
||
|
"うつくしい", "うったえる", "うつる", "うどん", "うなぎ", "うなじ", "うなずく", "うなる",
|
||
|
"うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる", "うもう", "うやまう",
|
||
|
"うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
|
||
|
"うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん",
|
||
|
"うんどう", "えいえん", "えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう",
|
||
|
"えいわ", "えおり", "えがお", "えがく", "えきたい", "えくせる", "えしゃく", "えすて",
|
||
|
"えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ", "えもの", "えらい",
|
||
|
"えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
|
||
|
"えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん",
|
||
|
"おうさま", "おうじ", "おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる",
|
||
|
"おおい", "おおう", "おおどおり", "おおや", "おおよそ", "おかえり", "おかず", "おがむ",
|
||
|
"おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな", "おくる", "おくれる",
|
||
|
"おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
|
||
|
"おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか",
|
||
|
"おちつく", "おっと", "おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす",
|
||
|
"おばさん", "おまいり", "おめでとう", "おもいで", "おもう", "おもたい", "おもちゃ", "おやつ",
|
||
|
"おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい", "おんしゃ", "おんせん",
|
||
|
"おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
|
||
|
"かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう",
|
||
|
"かいふく", "がいへき", "かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり",
|
||
|
"かかえる", "かがく", "かがし", "かがみ", "かくご", "かくとく", "かざる", "がぞう",
|
||
|
"かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん", "がっしょう", "かなざわし",
|
||
|
"かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
|
||
|
"かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか",
|
||
|
"かんけい", "かんこう", "かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい",
|
||
|
"きあつ", "きいろ", "ぎいん", "きうい", "きうん", "きえる", "きおう", "きおく",
|
||
|
"きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて", "きくばり", "きくらげ",
|
||
|
"きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
|
||
|
"ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき",
|
||
|
"きせつ", "きそう", "きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり",
|
||
|
"きつつき", "きつね", "きてい", "きどう", "きどく", "きない", "きなが", "きなこ",
|
||
|
"きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい", "きひん", "きふく",
|
||
|
"きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
|
||
|
"きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい",
|
||
|
"きらく", "きりん", "きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ",
|
||
|
"きんかくじ", "きんじょ", "きんようび", "ぐあい", "くいず", "くうかん", "くうき", "くうぐん",
|
||
|
"くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ", "くかん", "くきょう",
|
||
|
"くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
|
||
|
"くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ",
|
||
|
"くちさき", "くつした", "ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね",
|
||
|
"くのう", "くふう", "くみあわせ", "くみたてる", "くめる", "くやくしょ", "くらす", "くらべる",
|
||
|
"くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく", "ぐんたい", "ぐんて",
|
||
|
"けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
|
||
|
"けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん",
|
||
|
"げきとつ", "げきは", "げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん",
|
||
|
"けしき", "けしごむ", "けしょう", "げすと", "けたば", "けちゃっぷ", "けちらす", "けつあつ",
|
||
|
"けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい", "けつまつ", "げつようび",
|
||
|
"げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
|
||
|
"けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり",
|
||
|
"けみかる", "けむし", "けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい",
|
||
|
"けんえつ", "けんお", "けんか", "げんき", "けんげん", "けんこう", "けんさく", "けんしゅう",
|
||
|
"けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない", "けんにん", "げんぶつ",
|
||
|
"けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
|
||
|
"ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい",
|
||
|
"こうじ", "こうすい", "ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい",
|
||
|
"こうどう", "こうない", "こうはい", "ごうほう", "ごうまん", "こうもく", "こうりつ", "こえる",
|
||
|
"こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい", "こくとう", "こくない",
|
||
|
"こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
|
||
|
"こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ",
|
||
|
"こちょう", "こっか", "こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら",
|
||
|
"ことし", "ことば", "ことり", "こなごな", "こねこね", "このまま", "このみ", "このよ",
|
||
|
"ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら", "こまかい", "ごますり",
|
||
|
"こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
|
||
|
"こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ",
|
||
|
"こわもて", "こわれる", "こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて",
|
||
|
"こんとん", "こんなん", "こんびに", "こんぽん", "こんまけ", "こんや", "こんれい", "こんわく",
|
||
|
"ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ", "さいせい", "ざいたく",
|
||
|
"ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
|
||
|
"さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる",
|
||
|
"ざせき", "さたん", "さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし",
|
||
|
"さつじん", "ざっそう", "さつたば", "さつまいも", "さてい", "さといも", "さとう", "さとおや",
|
||
|
"さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ", "さほう", "さほど",
|
||
|
"さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
|
||
|
"さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく",
|
||
|
"さんこう", "さんさい", "ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま",
|
||
|
"さんみ", "さんらん", "しあい", "しあげ", "しあさって", "しあわせ", "しいく", "しいん",
|
||
|
"しうち", "しえい", "しおけ", "しかい", "しかく", "じかん", "しごと", "しすう",
|
||
|
"じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
|
||
|
"しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ",
|
||
|
"しなもの", "しなん", "しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり",
|
||
|
"しはつ", "しはらい", "しはん", "しひょう", "しふく", "じぶん", "しへい", "しほう",
|
||
|
"しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ", "しめい", "しめる",
|
||
|
"しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
|
||
|
"しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん",
|
||
|
"じゃま", "しゃりん", "しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき",
|
||
|
"しゅみ", "しゅらば", "じゅんばん", "しょうかい", "しょくたく", "しょっけん", "しょどう", "しょもつ",
|
||
|
"しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ", "しんちく", "しんりん",
|
||
|
"すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
|
||
|
"すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない",
|
||
|
"すける", "すごい", "すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり",
|
||
|
"ずっしり", "ずっと", "すてき", "すてる", "すねる", "すのこ", "すはだ", "すばらしい",
|
||
|
"ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる", "ずほう", "すぼん",
|
||
|
"すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
|
||
|
"すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう",
|
||
|
"せおう", "せかいかん", "せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう",
|
||
|
"せすじ", "せたい", "せたけ", "せっかく", "せっきゃく", "ぜっく", "せっけん", "せっこつ",
|
||
|
"せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび", "せつぶん", "せつめい",
|
||
|
"せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
|
||
|
"せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ",
|
||
|
"せんく", "せんげん", "ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ",
|
||
|
"せんたく", "せんちょう", "せんてい", "せんとう", "せんぬき", "せんねん", "せんぱい", "ぜんぶ",
|
||
|
"ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう", "せんよう", "ぜんら",
|
||
|
"ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
|
||
|
"そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの",
|
||
|
"そえん", "そがい", "そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい",
|
||
|
"そせん", "そそぐ", "そだてる", "そつう", "そつえん", "そっかん", "そつぎょう", "そっけつ",
|
||
|
"そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる", "そなた", "そふぼ",
|
||
|
"そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
|
||
|
"そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく",
|
||
|
"そんちょう", "ぞんび", "ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき",
|
||
|
"たいおう", "だいがく", "たいき", "たいぐう", "たいけん", "たいこ", "たいざい", "だいじょうぶ",
|
||
|
"だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい", "だいどころ", "たいない",
|
||
|
"たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
|
||
|
"たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる",
|
||
|
"たいわん", "たうえ", "たえる", "たおす", "たおる", "たおれる", "たかい", "たかね",
|
||
|
"たきび", "たくさん", "たこく", "たこやき", "たさい", "たしざん", "だじゃれ", "たすける",
|
||
|
"たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ", "たちばな", "だっかい",
|
||
|
"だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
|
||
|
"たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる",
|
||
|
"だむる", "ためいき", "ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす",
|
||
|
"たりきほんがん", "たりょう", "たりる", "たると", "たれる", "たれんと", "たろっと", "たわむれる",
|
||
|
"だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん", "たんご", "たんさん",
|
||
|
"たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
|
||
|
"たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ",
|
||
|
"だんろ", "だんわ", "ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい",
|
||
|
"ちから", "ちきゅう", "ちきん", "ちけいず", "ちけん", "ちこく", "ちさい", "ちしき",
|
||
|
"ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや", "ちつじょ", "ちてき",
|
||
|
"ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
|
||
|
"ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん",
|
||
|
"ちらし", "ちらみ", "ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく",
|
||
|
"ついか", "ついたち", "つうか", "つうじょう", "つうはん", "つうわ", "つかう", "つかれる",
|
||
|
"つくね", "つくる", "つけね", "つける", "つごう", "つたえる", "つづく", "つつじ",
|
||
|
"つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
|
||
|
"つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく",
|
||
|
"つわもの", "つわり", "てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき",
|
||
|
"ていけい", "ていこく", "ていさつ", "ていし", "ていせい", "ていたい", "ていど", "ていねい",
|
||
|
"ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう", "てくび", "でこぼこ",
|
||
|
"てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
|
||
|
"でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい",
|
||
|
"てぶくろ", "てふだ", "てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ",
|
||
|
"てらす", "てれび", "てわけ", "てわたし", "でんあつ", "てんいん", "てんかい", "てんき",
|
||
|
"てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう", "でんち", "てんてき",
|
||
|
"てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
|
||
|
"どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい",
|
||
|
"とおか", "とおく", "とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき",
|
||
|
"とくい", "とくしゅう", "とくてん", "とくに", "とくべつ", "とけい", "とける", "とこや",
|
||
|
"とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう", "とっくん", "とつぜん",
|
||
|
"とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
|
||
|
"どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる",
|
||
|
"とんかつ", "どんぶり", "ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう",
|
||
|
"なおす", "ながい", "なくす", "なげる", "なこうど", "なさけ", "なたでここ", "なっとう",
|
||
|
"なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか", "なふだ", "なまいき",
|
||
|
"なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
|
||
|
"ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい",
|
||
|
"にかい", "にがて", "にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき",
|
||
|
"にせもの", "にちじょう", "にちようび", "にっか", "にっき", "にっけい", "にっこう", "にっさん",
|
||
|
"にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん", "にまめ", "にもつ",
|
||
|
"にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
|
||
|
"にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ",
|
||
|
"にんまり", "にんむ", "にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう",
|
||
|
"ぬくもり", "ぬすむ", "ぬまえび", "ぬめり", "ぬらす", "ぬんちゃく", "ねあげ", "ねいき",
|
||
|
"ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ", "ねこむ", "ねさげ",
|
||
|
"ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
|
||
|
"ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい",
|
||
|
"ねもと", "ねらう", "ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ",
|
||
|
"ねんざ", "ねんし", "ねんちゃく", "ねんど", "ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう",
|
||
|
"ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり", "のこす", "のこる",
|
||
|
"のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
|
||
|
"のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき",
|
||
|
"のれん", "のんき", "ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん",
|
||
|
"はいご", "はいしん", "はいすい", "はいせん", "はいそう", "はいち", "ばいばい", "はいれつ",
|
||
|
"はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ", "はけん", "はこぶ",
|
||
|
"はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
|
||
|
"はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん",
|
||
|
"はっこう", "はっさん", "はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう",
|
||
|
"はなす", "はなび", "はにかむ", "はぶらし", "はみがき", "はむかう", "はめつ", "はやい",
|
||
|
"はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい", "はんおん", "はんかく",
|
||
|
"はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
|
||
|
"はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい",
|
||
|
"はんらん", "はんろん", "ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる",
|
||
|
"ひかん", "ひくい", "ひけつ", "ひこうき", "ひこく", "ひさい", "ひさしぶり", "ひさん",
|
||
|
"びじゅつかん", "ひしょ"
|
||
|
]
|
||
|
}
|
||
|
};
|
||
|
|
||
|
(function() {
|
||
|
'use strict';
|
||
|
for (var i in mn_words) {
|
||
|
if (mn_words.hasOwnProperty(i)) {
|
||
|
if (mn_words[i].prefix_len === 0) {
|
||
|
continue;
|
||
|
}
|
||
|
mn_words[i].trunc_words = [];
|
||
|
for (var j = 0; j < mn_words[i].words.length; ++j) {
|
||
|
mn_words[i].trunc_words.push(mn_words[i].words[j].slice(0, mn_words[i].prefix_len));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
})();
|
||
|
|
||
|
var QRCode;!function(){function a(a){this.mode=c.MODE_8BIT_BYTE,this.data=a,this.parsedData=[];for(var b=[],d=0,e=this.data.length;e>d;d++){var f=this.data.charCodeAt(d);f>65536?(b[0]=240|(1835008&f)>>>18,b[1]=128|(258048&f)>>>12,b[2]=128|(4032&f)>>>6,b[3]=128|63&f):f>2048?(b[0]=224|(61440&f)>>>12,b[1]=128|(4032&f)>>>6,b[2]=128|63&f):f>128?(b[0]=192|(1984&f)>>>6,b[1]=128|63&f):b[0]=f,this.parsedData=this.parsedData.concat(b)}this.parsedData.length!=this.data.length&&(this.parsedData.unshift(191),this.parsedData.unshift(187),this.parsedData.unshift(239))}function b(a,b){this.typeNumber=a,this.errorCorrectLevel=b,this.modules=null,this.moduleCount=0,this.dataCache=null,this.dataList=[]}function i(a,b){if(void 0==a.length)throw new Error(a.length+"/"+b);for(var c=0;c<a.length&&0==a[c];)c++;this.num=new Array(a.length-c+b);for(var d=0;d<a.length-c;d++)this.num[d]=a[d+c]}function j(a,b){this.totalCount=a,this.dataCount=b}function k(){this.buffer=[],this.length=0}function m(){return"undefined"!=typeof CanvasRenderingContext2D}function n(){var a=!1,b=navigator.userAgent;return/android/i.test(b)&&(a=!0,aMat=b.toString().match(/android ([0-9]\.[0-9])/i),aMat&&aMat[1]&&(a=parseFloat(aMat[1]))),a}function r(a,b){for(var c=1,e=s(a),f=0,g=l.length;g>=f;f++){var h=0;switch(b){case d.L:h=l[f][0];break;case d.M:h=l[f][1];break;case d.Q:h=l[f][2];break;case d.H:h=l[f][3]}if(h>=e)break;c++}if(c>l.length)throw new Error("Too long data");return c}function s(a){var b=encodeURI(a).toString().replace(/\%[0-9a-fA-F]{2}/g,"a");return b.length+(b.length!=a?3:0)}a.prototype={getLength:function(){return this.parsedData.length},write:function(a){for(var b=0,c=this.parsedData.length;c>b;b++)a.put(this.parsedData[b],8)}},b.prototype={addData:function(b){var c=new a(b);this.dataList.push(c),this.dataCache=null},isDark:function(a,b){if(0>a||this.moduleCount<=a||0>b||this.moduleCount<=b)throw new Error(a+","+b);return this.modules[a][b]},getModuleCount:function(){return this.moduleCount},make:function(){this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17,this.modules=new Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=new Array(this.moduleCount);for(var e=0;e<this.moduleCount;e++)this.modules[d][e]=null}this.setupPositionProbePattern(0,0),this.setupPositionProbePattern(this.moduleCount-7,0),this.setupPositionProbePattern(0,this.moduleCount-7),this.setupPositionAdjustPattern(),this.setupTimingPattern(),this.setupTypeInfo(a,c),this.typeNumber>=7&&this.setupTypeNumber(a),null==this.dataCache&&(this.dataCache=b.createData(this.typeNumber,this.errorCorrectLevel,this.dataList)),this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,b){for(var c=-1;7>=c;c++)if(!(-1>=a+c||this.moduleCount<=a+c))for(var d=-1;7>=d;d++)-1>=b+d||this.moduleCount<=b+d||(this.modules[a+c][b+d]=c>=0&&6>=c&&(0==d||6==d)||d>=0&&6>=d&&(0==c||6==c)||c>=2&&4>=c&&d>=2&&4>=d?!0:!1)},getBestMaskPattern:function(){for(var a=0,b=0,c=0;8>c;c++){this.makeImpl(!0,c);var d=f.getLostPoint(this);(0==c||a>d)&&(a=d,b=c)}return b},createMovieClip:function(a,b,c){var d=a.createEmptyMovieClip(b,c),e=1;this.make();for(var f=0;f<this.modules.length;f++)for(var g=f*e,h=0;h<this.modules[f].length;h++){var i=h*e,j=this.modules[f][h];j&&(d.beginFill(0,100),d.moveTo(i,g),d.lineTo(i+e,g),d.lineTo(i+e,g+e),d.lineTo(i,g+e),d.endFill())}return d},setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(var b=8;b<this.moduleCount-8;b++)null==this.modules[6][b]&&(this.modules[6][b]=0==b%2)},setupPositionAdjustPattern:function(){for(var a=f.getPatternPosition(this.typeNumber),b=0;b<a.length;b++)for(var c=0;c<a.length;c++){var d=a[b],e=a[c];if(null==this.modules[d][e])for(var g=-2;2>=g;g++)for(var h=-2;2>=h;h++)this.modules[d+g][e+h]=-2==g||2==g||-2==h||2==h||0==g&&0==h?!0:!1}},setupTypeNumber:function(a){for(var b=f.getBCHTypeNumber(this.typeNumber),c=0;18>c;c++){var d=!a&&1==(1&b>>c);this.modules[Math.floor(c/3)][c%3+this.moduleCount-8-3]=d}for(var c=0;18>c
|
||
|
|
||
|
;(function(root, undefined) {
|
||
|
'use strict';
|
||
|
|
||
|
var NODE_JS = typeof(module) != 'undefined';
|
||
|
if(NODE_JS) {
|
||
|
root = global;
|
||
|
if(root.JS_SHA3_TEST) {
|
||
|
root.navigator = { userAgent: 'Chrome'};
|
||
|
}
|
||
|
}
|
||
|
var HEX_CHARS = '0123456789abcdef'.split('');
|
||
|
var SHAKE_PADDING = [31, 7936, 2031616, 520093696];
|
||
|
var KECCAK_PADDING = [1, 256, 65536, 16777216];
|
||
|
var PADDING = [6, 1536, 393216, 100663296];
|
||
|
var SHIFT = [0, 8, 16, 24];
|
||
|
var RC = [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];
|
||
|
var BITS = [224, 256, 384, 512];
|
||
|
var SHAKE_BITS = [128, 256];
|
||
|
var OUTPUT_TYPES = ['hex', 'buffer', 'array'];
|
||
|
|
||
|
var createOutputMethod = function(bits, padding, outputType) {
|
||
|
return function(message) {
|
||
|
return new Keccak(bits, padding, bits).update(message)[outputType]();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var createShakeOutputMethod = function(bits, padding, outputType) {
|
||
|
return function(message, outputBits) {
|
||
|
return new Keccak(bits, padding, outputBits).update(message)[outputType]();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var createMethod = function(bits, padding) {
|
||
|
var method = createOutputMethod(bits, padding, 'hex');
|
||
|
method.create = function() {
|
||
|
return new Keccak(bits, padding, bits);
|
||
|
};
|
||
|
method.update = function(message) {
|
||
|
return method.create().update(message);
|
||
|
};
|
||
|
for(var i = 0;i < OUTPUT_TYPES.length;++i) {
|
||
|
var type = OUTPUT_TYPES[i];
|
||
|
method[type] = createOutputMethod(bits, padding, type);
|
||
|
}
|
||
|
return method;
|
||
|
};
|
||
|
|
||
|
var createShakeMethod = function(bits, padding) {
|
||
|
var method = createShakeOutputMethod(bits, padding, 'hex');
|
||
|
method.create = function(outputBits) {
|
||
|
return new Keccak(bits, padding, outputBits);
|
||
|
};
|
||
|
method.update = function(message, outputBits) {
|
||
|
return method.create(outputBits).update(message);
|
||
|
};
|
||
|
for(var i = 0;i < OUTPUT_TYPES.length;++i) {
|
||
|
var type = OUTPUT_TYPES[i];
|
||
|
method[type] = createShakeOutputMethod(bits, padding, type);
|
||
|
}
|
||
|
return method;
|
||
|
};
|
||
|
|
||
|
var algorithms = [
|
||
|
{name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod},
|
||
|
{name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod},
|
||
|
{name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod}
|
||
|
];
|
||
|
|
||
|
var methods = {};
|
||
|
|
||
|
for(var i = 0;i < algorithms.length;++i) {
|
||
|
var algorithm = algorithms[i];
|
||
|
var bits = algorithm.bits;
|
||
|
var createMethod = algorithm.createMethod;
|
||
|
for(var j = 0;j < bits.length;++j) {
|
||
|
var method = algorithm.createMethod(bits[j], algorithm.padding);
|
||
|
methods[algorithm.name +'_' + bits[j]] = method;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function Keccak(bits, padding, outputBits) {
|
||
|
this.blocks = [];
|
||
|
this.s = [];
|
||
|
this.padding = padding;
|
||
|
this.outputBits = outputBits;
|
||
|
this.reset = true;
|
||
|
this.block = 0;
|
||
|
this.start = 0;
|
||
|
this.blockCount = (1600 - (bits << 1)) >> 5;
|
||
|
this.byteCount = this.blockCount << 2;
|
||
|
this.outputBlocks = outputBits >> 5;
|
||
|
this.extraBytes = (outputBits & 31) >> 3;
|
||
|
|
||
|
for(var i = 0;i < 50;++i) {
|
||
|
this.s[i] = 0;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
Keccak.prototype.update = function(message) {
|
||
|
var notString = typeof(message) != 'string';
|
||
|
if(notString && message.constructor == root.ArrayBuffer) {
|
||
|
message = new Uint8Array(message);
|
||
|
}
|
||
|
var length = message.length, blocks = this.blocks, byteCount = this.byteCount,
|
||
|
blockCount = this.blockCount, index = 0, s = this.s, i, code;
|
||
|
|
||
|
while(index < length) {
|
||
|
if(this.reset) {
|
||
|
this.reset = false;
|
||
|
blocks[0] = this.block;
|
||
|
for(i = 1;i < blockCount + 1;++i) {
|
||
|
blocks[i] = 0;
|
||
|
}
|
||
|
}
|
||
|
if(notString) {
|
||
|
for (i = this.start;index < length && i < byteCount; ++index) {
|
||
|
blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
|
||
|
}
|
||
|
} else {
|
||
|
for (i = this.start;index < length && i < byteCount; ++index) {
|
||
|
code = message.charCodeAt(index);
|
||
|
if (code < 0x80) {
|
||
|
blocks[i >> 2] |= code << SHIFT[i++ & 3];
|
||
|
} else if (code < 0x800) {
|
||
|
blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
|
||
|
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
||
|
} else if (code < 0xd800 || code >= 0xe000) {
|
||
|
blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
|
||
|
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
|
||
|
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
||
|
} else {
|
||
|
code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
|
||
|
blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
|
||
|
blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];
|
||
|
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
|
||
|
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
this.lastByteIndex = i;
|
||
|
if(i >= byteCount) {
|
||
|
this.start = i - byteCount;
|
||
|
this.block = blocks[blockCount];
|
||
|
for(i = 0;i < blockCount;++i) {
|
||
|
s[i] ^= blocks[i];
|
||
|
}
|
||
|
f(s);
|
||
|
this.reset = true;
|
||
|
} else {
|
||
|
this.start = i;
|
||
|
}
|
||
|
}
|
||
|
return this;
|
||
|
};
|
||
|
|
||
|
Keccak.prototype.finalize = function() {
|
||
|
var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;
|
||
|
blocks[i >> 2] |= this.padding[i & 3];
|
||
|
if(this.lastByteIndex == this.byteCount) {
|
||
|
blocks[0] = blocks[blockCount];
|
||
|
for(i = 1;i < blockCount + 1;++i) {
|
||
|
blocks[i] = 0;
|
||
|
}
|
||
|
}
|
||
|
blocks[blockCount - 1] |= 0x80000000;
|
||
|
for(i = 0;i < blockCount;++i) {
|
||
|
s[i] ^= blocks[i];
|
||
|
}
|
||
|
f(s);
|
||
|
};
|
||
|
|
||
|
Keccak.prototype.toString = Keccak.prototype.hex = function() {
|
||
|
this.finalize();
|
||
|
|
||
|
var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,
|
||
|
extraBytes = this.extraBytes, i = 0, j = 0;
|
||
|
var hex = '', block;
|
||
|
while(j < outputBlocks) {
|
||
|
for(i = 0;i < blockCount && j < outputBlocks;++i, ++j) {
|
||
|
block = s[i];
|
||
|
hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +
|
||
|
HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +
|
||
|
HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +
|
||
|
HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];
|
||
|
}
|
||
|
if(j % blockCount == 0) {
|
||
|
f(s);
|
||
|
}
|
||
|
}
|
||
|
if(extraBytes) {
|
||
|
block = s[i];
|
||
|
if(extraBytes > 0) {
|
||
|
hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];
|
||
|
}
|
||
|
if(extraBytes > 1) {
|
||
|
hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];
|
||
|
}
|
||
|
if(extraBytes > 2) {
|
||
|
hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];
|
||
|
}
|
||
|
}
|
||
|
return hex;
|
||
|
};
|
||
|
|
||
|
Keccak.prototype.buffer = function() {
|
||
|
this.finalize();
|
||
|
|
||
|
var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,
|
||
|
extraBytes = this.extraBytes, i = 0, j = 0;
|
||
|
var bytes = this.outputBits >> 3;
|
||
|
var buffer;
|
||
|
if(extraBytes) {
|
||
|
buffer = new ArrayBuffer((outputBlocks + 1) << 2);
|
||
|
} else {
|
||
|
buffer = new ArrayBuffer(bytes);
|
||
|
}
|
||
|
var array = new Uint32Array(buffer);
|
||
|
while(j < outputBlocks) {
|
||
|
for(i = 0;i < blockCount && j < outputBlocks;++i, ++j) {
|
||
|
array[j] = s[i];
|
||
|
}
|
||
|
if(j % blockCount == 0) {
|
||
|
f(s);
|
||
|
}
|
||
|
}
|
||
|
if(extraBytes) {
|
||
|
array[i] = s[i];
|
||
|
buffer = buffer.slice(0, bytes);
|
||
|
}
|
||
|
return buffer;
|
||
|
};
|
||
|
|
||
|
Keccak.prototype.digest = Keccak.prototype.array = function() {
|
||
|
this.finalize();
|
||
|
|
||
|
var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,
|
||
|
extraBytes = this.extraBytes, i = 0, j = 0;
|
||
|
var array = [], offset, block;
|
||
|
while(j < outputBlocks) {
|
||
|
for(i = 0;i < blockCount && j < outputBlocks;++i, ++j) {
|
||
|
offset = j << 2;
|
||
|
block = s[i];
|
||
|
array[offset] = block & 0xFF;
|
||
|
array[offset + 1] = (block >> 8) & 0xFF;
|
||
|
array[offset + 2] = (block >> 16) & 0xFF;
|
||
|
array[offset + 3] = (block >> 24) & 0xFF;
|
||
|
}
|
||
|
if(j % blockCount == 0) {
|
||
|
f(s);
|
||
|
}
|
||
|
}
|
||
|
if(extraBytes) {
|
||
|
offset = j << 2;
|
||
|
block = s[i];
|
||
|
if(extraBytes > 0) {
|
||
|
array[offset] = block & 0xFF;
|
||
|
}
|
||
|
if(extraBytes > 1) {
|
||
|
array[offset + 1] = (block >> 8) & 0xFF;
|
||
|
}
|
||
|
if(extraBytes > 2) {
|
||
|
array[offset + 2] = (block >> 16) & 0xFF;
|
||
|
}
|
||
|
}
|
||
|
return array;
|
||
|
};
|
||
|
|
||
|
var f = function(s) {
|
||
|
var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,
|
||
|
b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,
|
||
|
b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,
|
||
|
b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;
|
||
|
for(n = 0; n < 48; n += 2) {
|
||
|
c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];
|
||
|
c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];
|
||
|
c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];
|
||
|
c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];
|
||
|
c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];
|
||
|
c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];
|
||
|
c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];
|
||
|
c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];
|
||
|
c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];
|
||
|
c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];
|
||
|
|
||
|
h = c8 ^ ((c2 << 1) | (c3 >>> 31));
|
||
|
l = c9 ^ ((c3 << 1) | (c2 >>> 31));
|
||
|
s[0] ^= h;
|
||
|
s[1] ^= l;
|
||
|
s[10] ^= h;
|
||
|
s[11] ^= l;
|
||
|
s[20] ^= h;
|
||
|
s[21] ^= l;
|
||
|
s[30] ^= h;
|
||
|
s[31] ^= l;
|
||
|
s[40] ^= h;
|
||
|
s[41] ^= l;
|
||
|
h = c0 ^ ((c4 << 1) | (c5 >>> 31));
|
||
|
l = c1 ^ ((c5 << 1) | (c4 >>> 31));
|
||
|
s[2] ^= h;
|
||
|
s[3] ^= l;
|
||
|
s[12] ^= h;
|
||
|
s[13] ^= l;
|
||
|
s[22] ^= h;
|
||
|
s[23] ^= l;
|
||
|
s[32] ^= h;
|
||
|
s[33] ^= l;
|
||
|
s[42] ^= h;
|
||
|
s[43] ^= l;
|
||
|
h = c2 ^ ((c6 << 1) | (c7 >>> 31));
|
||
|
l = c3 ^ ((c7 << 1) | (c6 >>> 31));
|
||
|
s[4] ^= h;
|
||
|
s[5] ^= l;
|
||
|
s[14] ^= h;
|
||
|
s[15] ^= l;
|
||
|
s[24] ^= h;
|
||
|
s[25] ^= l;
|
||
|
s[34] ^= h;
|
||
|
s[35] ^= l;
|
||
|
s[44] ^= h;
|
||
|
s[45] ^= l;
|
||
|
h = c4 ^ ((c8 << 1) | (c9 >>> 31));
|
||
|
l = c5 ^ ((c9 << 1) | (c8 >>> 31));
|
||
|
s[6] ^= h;
|
||
|
s[7] ^= l;
|
||
|
s[16] ^= h;
|
||
|
s[17] ^= l;
|
||
|
s[26] ^= h;
|
||
|
s[27] ^= l;
|
||
|
s[36] ^= h;
|
||
|
s[37] ^= l;
|
||
|
s[46] ^= h;
|
||
|
s[47] ^= l;
|
||
|
h = c6 ^ ((c0 << 1) | (c1 >>> 31));
|
||
|
l = c7 ^ ((c1 << 1) | (c0 >>> 31));
|
||
|
s[8] ^= h;
|
||
|
s[9] ^= l;
|
||
|
s[18] ^= h;
|
||
|
s[19] ^= l;
|
||
|
s[28] ^= h;
|
||
|
s[29] ^= l;
|
||
|
s[38] ^= h;
|
||
|
s[39] ^= l;
|
||
|
s[48] ^= h;
|
||
|
s[49] ^= l;
|
||
|
|
||
|
b0 = s[0];
|
||
|
b1 = s[1];
|
||
|
b32 = (s[11] << 4) | (s[10] >>> 28);
|
||
|
b33 = (s[10] << 4) | (s[11] >>> 28);
|
||
|
b14 = (s[20] << 3) | (s[21] >>> 29);
|
||
|
b15 = (s[21] << 3) | (s[20] >>> 29);
|
||
|
b46 = (s[31] << 9) | (s[30] >>> 23);
|
||
|
b47 = (s[30] << 9) | (s[31] >>> 23);
|
||
|
b28 = (s[40] << 18) | (s[41] >>> 14);
|
||
|
b29 = (s[41] << 18) | (s[40] >>> 14);
|
||
|
b20 = (s[2] << 1) | (s[3] >>> 31);
|
||
|
b21 = (s[3] << 1) | (s[2] >>> 31);
|
||
|
b2 = (s[13] << 12) | (s[12] >>> 20);
|
||
|
b3 = (s[12] << 12) | (s[13] >>> 20);
|
||
|
b34 = (s[22] << 10) | (s[23] >>> 22);
|
||
|
b35 = (s[23] << 10) | (s[22] >>> 22);
|
||
|
b16 = (s[33] << 13) | (s[32] >>> 19);
|
||
|
b17 = (s[32] << 13) | (s[33] >>> 19);
|
||
|
b48 = (s[42] << 2) | (s[43] >>> 30);
|
||
|
b49 = (s[43] << 2) | (s[42] >>> 30);
|
||
|
b40 = (s[5] << 30) | (s[4] >>> 2);
|
||
|
b41 = (s[4] << 30) | (s[5] >>> 2);
|
||
|
b22 = (s[14] << 6) | (s[15] >>> 26);
|
||
|
b23 = (s[15] << 6) | (s[14] >>> 26);
|
||
|
b4 = (s[25] << 11) | (s[24] >>> 21);
|
||
|
b5 = (s[24] << 11) | (s[25] >>> 21);
|
||
|
b36 = (s[34] << 15) | (s[35] >>> 17);
|
||
|
b37 = (s[35] << 15) | (s[34] >>> 17);
|
||
|
b18 = (s[45] << 29) | (s[44] >>> 3);
|
||
|
b19 = (s[44] << 29) | (s[45] >>> 3);
|
||
|
b10 = (s[6] << 28) | (s[7] >>> 4);
|
||
|
b11 = (s[7] << 28) | (s[6] >>> 4);
|
||
|
b42 = (s[17] << 23) | (s[16] >>> 9);
|
||
|
b43 = (s[16] << 23) | (s[17] >>> 9);
|
||
|
b24 = (s[26] << 25) | (s[27] >>> 7);
|
||
|
b25 = (s[27] << 25) | (s[26] >>> 7);
|
||
|
b6 = (s[36] << 21) | (s[37] >>> 11);
|
||
|
b7 = (s[37] << 21) | (s[36] >>> 11);
|
||
|
b38 = (s[47] << 24) | (s[46] >>> 8);
|
||
|
b39 = (s[46] << 24) | (s[47] >>> 8);
|
||
|
b30 = (s[8] << 27) | (s[9] >>> 5);
|
||
|
b31 = (s[9] << 27) | (s[8] >>> 5);
|
||
|
b12 = (s[18] << 20) | (s[19] >>> 12);
|
||
|
b13 = (s[19] << 20) | (s[18] >>> 12);
|
||
|
b44 = (s[29] << 7) | (s[28] >>> 25);
|
||
|
b45 = (s[28] << 7) | (s[29] >>> 25);
|
||
|
b26 = (s[38] << 8) | (s[39] >>> 24);
|
||
|
b27 = (s[39] << 8) | (s[38] >>> 24);
|
||
|
b8 = (s[48] << 14) | (s[49] >>> 18);
|
||
|
b9 = (s[49] << 14) | (s[48] >>> 18);
|
||
|
|
||
|
s[0] = b0 ^ (~b2 & b4);
|
||
|
s[1] = b1 ^ (~b3 & b5);
|
||
|
s[10] = b10 ^ (~b12 & b14);
|
||
|
s[11] = b11 ^ (~b13 & b15);
|
||
|
s[20] = b20 ^ (~b22 & b24);
|
||
|
s[21] = b21 ^ (~b23 & b25);
|
||
|
s[30] = b30 ^ (~b32 & b34);
|
||
|
s[31] = b31 ^ (~b33 & b35);
|
||
|
s[40] = b40 ^ (~b42 & b44);
|
||
|
s[41] = b41 ^ (~b43 & b45);
|
||
|
s[2] = b2 ^ (~b4 & b6);
|
||
|
s[3] = b3 ^ (~b5 & b7);
|
||
|
s[12] = b12 ^ (~b14 & b16);
|
||
|
s[13] = b13 ^ (~b15 & b17);
|
||
|
s[22] = b22 ^ (~b24 & b26);
|
||
|
s[23] = b23 ^ (~b25 & b27);
|
||
|
s[32] = b32 ^ (~b34 & b36);
|
||
|
s[33] = b33 ^ (~b35 & b37);
|
||
|
s[42] = b42 ^ (~b44 & b46);
|
||
|
s[43] = b43 ^ (~b45 & b47);
|
||
|
s[4] = b4 ^ (~b6 & b8);
|
||
|
s[5] = b5 ^ (~b7 & b9);
|
||
|
s[14] = b14 ^ (~b16 & b18);
|
||
|
s[15] = b15 ^ (~b17 & b19);
|
||
|
s[24] = b24 ^ (~b26 & b28);
|
||
|
s[25] = b25 ^ (~b27 & b29);
|
||
|
s[34] = b34 ^ (~b36 & b38);
|
||
|
s[35] = b35 ^ (~b37 & b39);
|
||
|
s[44] = b44 ^ (~b46 & b48);
|
||
|
s[45] = b45 ^ (~b47 & b49);
|
||
|
s[6] = b6 ^ (~b8 & b0);
|
||
|
s[7] = b7 ^ (~b9 & b1);
|
||
|
s[16] = b16 ^ (~b18 & b10);
|
||
|
s[17] = b17 ^ (~b19 & b11);
|
||
|
s[26] = b26 ^ (~b28 & b20);
|
||
|
s[27] = b27 ^ (~b29 & b21);
|
||
|
s[36] = b36 ^ (~b38 & b30);
|
||
|
s[37] = b37 ^ (~b39 & b31);
|
||
|
s[46] = b46 ^ (~b48 & b40);
|
||
|
s[47] = b47 ^ (~b49 & b41);
|
||
|
s[8] = b8 ^ (~b0 & b2);
|
||
|
s[9] = b9 ^ (~b1 & b3);
|
||
|
s[18] = b18 ^ (~b10 & b12);
|
||
|
s[19] = b19 ^ (~b11 & b13);
|
||
|
s[28] = b28 ^ (~b20 & b22);
|
||
|
s[29] = b29 ^ (~b21 & b23);
|
||
|
s[38] = b38 ^ (~b30 & b32);
|
||
|
s[39] = b39 ^ (~b31 & b33);
|
||
|
s[48] = b48 ^ (~b40 & b42);
|
||
|
s[49] = b49 ^ (~b41 & b43);
|
||
|
|
||
|
s[0] ^= RC[n];
|
||
|
s[1] ^= RC[n + 1];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(!root.JS_SHA3_TEST && NODE_JS) {
|
||
|
module.exports = methods;
|
||
|
} else if(root) {
|
||
|
for(var key in methods) {
|
||
|
root[key] = methods[key];
|
||
|
}
|
||
|
}
|
||
|
}(this));
|
||
|
|
||
|
</script>
|
||
|
|
||
|
<style type="text/css">
|
||
|
html { font-family: sans-serif }
|
||
|
.private { background-color: #FF8080 }
|
||
|
.public { background-color: #80FF80 }
|
||
|
.qrcode {
|
||
|
position: fixed;
|
||
|
background: none repeat #FFF;
|
||
|
top: 50%; left: 50%;
|
||
|
width: 312px; height: 312px;
|
||
|
margin: -128px 0px 0px -128px;
|
||
|
padding: 24px;
|
||
|
border: 2px solid;
|
||
|
box-shadow: 0px 0px 10px rgba(0,0,0,0.25);
|
||
|
z-index: 1007;
|
||
|
display: none;
|
||
|
}
|
||
|
</style>
|
||
|
|
||
|
<nav class="grey lighten-3">
|
||
|
<div class="nav-wrapper">
|
||
|
<a href="#" class="brand-logo center">
|
||
|
<img style="height:60px;" src="data:image/svg+xml;base64,
|
||
|
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFk
|
||
|
b2JlIElsbHVzdHJhdG9yIDE4LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246
|
||
|
IDYuMDAgQnVpbGQgMCkgIC0tPgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZH
|
||
|
IDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5k
|
||
|
dGQiPgo8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3Zn
|
||
|
IiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIw
|
||
|
cHgiCgkgdmlld0JveD0iMTM1LjIgMjY3LjUgMzE1IDEwOS41IiBlbmFibGUtYmFja2dyb3VuZD0i
|
||
|
bmV3IDEzNS4yIDI2Ny41IDMxNSAxMDkuNSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxnIGlkPSJH
|
||
|
dWlkZXNfRm9yX0FydGJvYXJkIj4KPC9nPgo8ZyBpZD0iTGF5ZXJfMSI+Cgk8cGF0aCBpZD0iXzE0
|
||
|
OTkzMTAzMl8yXyIgZmlsbD0iI0ZGNjYwMCIgZD0iTTE5Mi40LDI4Ni44Yy0yMC40LDAtMzYuOSwx
|
||
|
Ni41LTM2LjksMzYuOWMwLDQuMSwwLjcsOCwxLjksMTEuN2gxMXYtMzFsMjQsMjRsMjQtMjR2MzEK
|
||
|
CQloMTFjMS4yLTMuNywxLjktNy42LDEuOS0xMS43QzIyOS4zLDMwMy4zLDIxMi44LDI4Ni44LDE5
|
||
|
Mi40LDI4Ni44TDE5Mi40LDI4Ni44eiIvPgoJPHBhdGggaWQ9Il8xNDk5MzExNjBfMl8iIGZpbGw9
|
||
|
IiM0QzRDNEMiIGQ9Ik0xODYuOSwzMzMuOGwtMTAuNS0xMC41djE5LjVoLTRoLTRoLTcuNWM2LjUs
|
||
|
MTAuNiwxOC4yLDE3LjcsMzEuNSwxNy43CgkJczI1LjEtNy4xLDMxLjUtMTcuN2gtNy41aC03LjJo
|
||
|
LTAuOHYtMTkuNUwxOTgsMzMzLjhsLTUuNSw1LjVMMTg2LjksMzMzLjhMMTg2LjksMzMzLjh6Ii8+
|
||
|
Cgk8cGF0aCBmaWxsPSIjNEM0QzRDIiBkPSJNNDMxLjksMzE1LjNjLTMuMS0zLjItNi45LTQuNy0x
|
||
|
MS4yLTQuN2MtMi45LDAtNS42LDAuNy04LDIuMmMtMi41LDEuNC00LjUsMy40LTUuOSw1LjkKCQlj
|
||
|
LTEuNCwyLjUtMi4xLDUuMi0yLjEsOC4xYzAsNC40LDEuNSw4LjIsNC42LDExLjRjMy4xLDMuMiw2
|
||
|
LjksNC44LDExLjUsNC44YzQuNCwwLDguMi0xLjYsMTEuMy00LjdjMy4xLTMuMSw0LjYtNi45LDQu
|
||
|
Ni0xMS40CgkJQzQzNi42LDMyMi4zLDQzNS4xLDMxOC40LDQzMS45LDMxNS4zeiBNNDI3LjgsMzM0
|
||
|
LjJjLTIsMi00LjMsMy03LjEsM2MtMi41LDAtNC42LTAuOC02LjUtMi4zYy0yLjQtMi0zLjctNC43
|
||
|
LTMuNy04LjEKCQljMC0zLjEsMS01LjYsMi45LTcuNmMxLjktMiw0LjMtMyw3LjItM2MyLjgsMCw1
|
||
|
LjIsMSw3LjIsM2MyLDIsMyw0LjUsMyw3LjRDNDMwLjgsMzI5LjcsNDI5LjgsMzMyLjIsNDI3Ljgs
|
||
|
MzM0LjJ6Ii8+Cgk8cGF0aCBmaWxsPSIjNEM0QzRDIiBkPSJNMzk0LjQsMzI4LjVjMi0wLjcsMy42
|
||
|
LTEuOCw0LjYtMy4yYzEtMS40LDEuNS0zLjIsMS41LTUuM2MwLTItMC41LTMuOC0xLjQtNS4zYy0w
|
||
|
LjktMS41LTIuMS0yLjUtMy43LTMuMgoJCXMtNC4xLTEtNy42LTFoLTExLjN2MzIuM2g2LjJ2LTEz
|
||
|
LjdoNS40bDcuMywxMy43aDYuN0wzOTQuNCwzMjguNXogTTM5My40LDMyMi40Yy0wLjcsMC41LTEu
|
||
|
MSwwLjgtMy4xLDAuOGgtNy43di02LjZoNy41CgkJYzEuNSwwLDEuOCwwLjEsMi40LDAuM2MwLjYs
|
||
|
MC4yLDEuMSwwLjYsMS41LDEuMWMwLjQsMC41LDAuNSwxLjEsMC41LDEuOEMzOTQuNSwzMjEuMSwz
|
||
|
OTQuMiwzMjEuOSwzOTMuNCwzMjIuNHoiLz4KCTxwb2x5Z29uIGZpbGw9IiM0QzRDNEMiIHBvaW50
|
||
|
cz0iMzQ4LjksMzEwLjYgMzY5LjksMzEwLjYgMzY5LjksMzE2LjYgMzU1LDMxNi42IDM1NSwzMjMu
|
||
|
MiAzNjkuOSwzMjMuMiAzNjkuOSwzMjkuMSAzNTUsMzI5LjEgCgkJMzU1LDMzNi44IDM2OS45LDMz
|
||
|
Ni44IDM2OS45LDM0Mi45IDM0OC45LDM0Mi45IDM0OC45LDMxMC42IAkiLz4KCTxwb2x5Z29uIGZp
|
||
|
bGw9IiM0QzRDNEMiIHBvaW50cz0iMzE2LjQsMzEwLjYgMzIyLjMsMzEwLjYgMzM2LjIsMzMxLjgg
|
||
|
MzM2LjIsMzEwLjYgMzQyLjMsMzEwLjYgMzQyLjMsMzQyLjkgMzM2LjQsMzQyLjkgCgkJMzIyLjYs
|
||
|
MzIxLjcgMzIyLjYsMzQyLjkgMzE2LjQsMzQyLjkgCSIvPgoJPHBhdGggZmlsbD0iIzRDNEM0QyIg
|
||
|
ZD0iTTMwNi45LDMxNS4zYy0zLjEtMy4xLTYuOS00LjctMTEuMi00LjdjLTIuOSwwLTUuNSwwLjct
|
||
|
OCwyLjJjLTIuNSwxLjQtNC40LDMuNC01LjksNS45CgkJYy0xLjQsMi41LTIuMSw1LjItMi4xLDgu
|
||
|
MWMwLDQuNCwxLjUsOC4yLDQuNiwxMS40YzMsMy4yLDYuOSw0LjgsMTEuNSw0LjhjNC40LDAsOC4x
|
||
|
LTEuNSwxMS4yLTQuN2MzLjEtMy4xLDQuNi02LjksNC42LTExLjQKCQlDMzExLjUsMzIyLjMsMzEw
|
||
|
LDMxOC40LDMwNi45LDMxNS4zeiBNMzAyLjgsMzM0LjFjLTEuOSwyLTQuMywzLTcuMSwzYy0yLjUs
|
||
|
MC00LjYtMC44LTYuNS0yLjNjLTIuNC0yLTMuNy00LjctMy43LTguMQoJCWMwLTMsMS01LjYsMi45
|
||
|
LTcuNWMxLjktMiw0LjMtMyw3LjItM2MyLjgsMCw1LjIsMSw3LjIsM2MyLDIsMyw0LjUsMyw3LjRD
|
||
|
MzA1LjcsMzI5LjcsMzA0LjcsMzMyLjEsMzAyLjgsMzM0LjF6Ii8+Cgk8cGF0aCBpZD0iXzc0NzQ5
|
||
|
MDg4XzJfIiBmaWxsPSIjNEM0QzRDIiBkPSJNMjQ0LjgsMzEwLjZoNmw3LjUsMjIuNmw3LjYtMjIu
|
||
|
Nmg1LjlsNS40LDMyLjNoLTUuOWwtMy41LTIwLjRsLTYuOSwyMC40aC01LjRsLTYuOC0yMC40CgkJ
|
||
|
bC0zLjUsMjAuNGgtNkwyNDQuOCwzMTAuNkwyNDQuOCwzMTAuNnoiLz4KPC9nPgo8L3N2Zz4K">
|
||
|
</a>
|
||
|
|
||
|
</div>
|
||
|
</nav>
|
||
|
|
||
|
<div class="row noprint"> </div>
|
||
|
<div class="row center-align noprint">
|
||
|
<div class="col s12">
|
||
|
<h4 style="color: #555;">Offline wallet generator</h4>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="row center-align print-only">
|
||
|
<div class="col s12">
|
||
|
<h4 style="color: #555;">Offline wallet</h4>
|
||
|
<p id="date"></p>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
|
||
|
<div class="row noprint">
|
||
|
<div class="col s12">
|
||
|
<p>
|
||
|
This page generates a new
|
||
|
<select id="currencyDropDownList" onchange="js:setCoin(this.selectedIndex);genwallet();restore_old_selection_index();" class="waves-effect waves-light btn" style="max-width: 20%">
|
||
|
<option>Monero</option>
|
||
|
<option>Aeon</option>
|
||
|
<option>Townforge</option>
|
||
|
</select>
|
||
|
wallet. It is self contained and
|
||
|
does all the necessary calculations locally, so is suitable for generating a new wallet on a machine
|
||
|
that is not connected to the network, and may even never be. This way, you can create
|
||
|
a Monero/Aeon/Townforge wallet without risking the keys. This file is GPG signed, see <a href="#gpg-instructions">GPG instructions</a>.
|
||
|
You can check for up to date versions of this page
|
||
|
<a href="https://github.com/moneromooo-monero/monero-wallet-generator/blob/master/monero-wallet-generator.html">here</a>.
|
||
|
</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="row valign-wrapper noprint">
|
||
|
<div class="col s4 right-align ">
|
||
|
<input class="btn orange" type="button" onclick="js:genwallet(null);"
|
||
|
value="Generate wallet" id="gen_with_custom_entropy_button" action=""/>
|
||
|
<p>Custom entropy for deterministic wallet (leave empty to use the browser's PRNG)</p>
|
||
|
<input type="text" value="" id="user_entropy_widget" oninput="js:checkEntropy();" onKeyPress="if (event.keyCode == 13) js:genwallet(null);" />
|
||
|
<div style="color: red; display: none" id="user_entropy_warning_widget">WARNING: entropy is way too low for the wallet to be secure: aim for 256 bits (about a hundred dice throws)</div>
|
||
|
</div>
|
||
|
<div class="col s1 offset-s1"><h4>or</h4></div>
|
||
|
<div class="col s5 offset-s1">
|
||
|
<form>
|
||
|
<input class="btn deep-orange" type="button" onclick="js:genwallet_prefix();" value="Generate wallet with prefix" action="" id="gen_prefix_widget"/>
|
||
|
<p>(very slow for more than a few characters)</p>
|
||
|
<input type="text" value="4" id="prefix_widget" oninput="js:check_prefix_validity()"; onKeyPress="if (event.keyCode == 13){ js:genwallet_prefix(); return false;}" />
|
||
|
</form>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="row center-align noprint">
|
||
|
<div class="col s12">
|
||
|
<form>
|
||
|
<input class="waves-effect waves-light btn" type="button" onclick="js:genwallet('english');" value="English" action=""/ id=lang_en>
|
||
|
<input class="waves-effect waves-light btn" type="button" onclick="js:genwallet('spanish');" value="Spanish" action=""/ id=lang_es>
|
||
|
<!-- portuguese word list has a few prefix collisions
|
||
|
<input type="button" onclick="js:genwallet('portuguese');" value="Portuguese" action=""/ id=lang_pt>
|
||
|
-->
|
||
|
<input class="waves-effect waves-light btn" type="button" onclick="js:genwallet('japanese');" value="Japanese" action=""/ id=lang_jp>
|
||
|
<input class="waves-effect waves-light btn" type="button" onclick="js:genwallet('esperanto');" value="Esperanto" action=""/ id=lang_eo>
|
||
|
<br>
|
||
|
<font size="-1">(restoring non English language seeds needs a recent simplewallet)</font>
|
||
|
</form>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="row">
|
||
|
<div class="col s12">
|
||
|
<div class="card light-green lighten-5">
|
||
|
<div class="card-content light-green-text text-darken-4">
|
||
|
<span class="card-title light-green-text text-darken-4">
|
||
|
Public address
|
||
|
<input type="button" class="waves-effect waves-light btn btn-qr" onclick="js:toggle_address_qr();" value="Show QR code" action=""id="show_qr_code"/>
|
||
|
</span>
|
||
|
|
||
|
<p class="noprint">This is the address you give to third parties to send aeon/monero to you.
|
||
|
<br><b>It is the only information here that's meant to be public.</b>
|
||
|
</p>
|
||
|
</div>
|
||
|
<div class="card-action center-align">
|
||
|
<span class="center-align" id="address_widget">generating...</span>
|
||
|
</div>
|
||
|
<div class="card-action center-align">
|
||
|
<span class="qrcode" id="address_qr_widget" onclick="js:toggle_address_qr();"></span>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="row print-only">
|
||
|
<div class="col l12">
|
||
|
<p><b>Credits:</b>
|
||
|
Made by moneromooo, based on code from <a href="https://mymonero.com/">MyMonero</a>. Copyright notices in the source.
|
||
|
</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="row print_break_before">
|
||
|
<div class="col s12">
|
||
|
<div class="card pink lighten-5">
|
||
|
<div class="card-content pink-text text-darken-5">
|
||
|
<span class="card-title pink-text text-darken-5">Private Mnemonic seed
|
||
|
<input type="button" class="waves-effect waves-light btn btn-qr" onclick="js:toggle_priv_mnemonic_qr();" value="Show QR code" action="" id="show_priv_mnemonic_qr_code"/>
|
||
|
</span>
|
||
|
<p class="noprint">
|
||
|
The mnemonic seed is a string that comprises 25 words and allows you to recreate your
|
||
|
private keys. <b>Keep it secure!</b>
|
||
|
</p>
|
||
|
<p class="print-only" id="mnemonic_address">Generating...</p>
|
||
|
</div>
|
||
|
<div class="card-action center-align">
|
||
|
<h5 class="grey-text text-darken-4" id="mnemonic_widget">Generating... </h5>
|
||
|
<span class="qrcode" id="priv_mnemonic_qr_widget" onclick="js:toggle_priv_mnemonic_qr();"></span>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="row print_break_before">
|
||
|
<div class="col s12">
|
||
|
<div class="card indigo lighten-5">
|
||
|
<div class="card-content indigo-text text-darken-4">
|
||
|
<span class="card-title indigo-text text-darken-4">Private keys <span class="noprint">(optional)</span></span>
|
||
|
|
||
|
<p class="noprint">
|
||
|
The spend key and view key are the raw private keys for the
|
||
|
new wallet.
|
||
|
<b>They are here for your information, since they can be recovered using the mnemonic
|
||
|
seed in the above box</b>.
|
||
|
If you decide to keep them, keep them secure.
|
||
|
</p>
|
||
|
<p class="print-only" id="privatekeys_address">Generating...</p>
|
||
|
</div>
|
||
|
<div class="card-action center-align">
|
||
|
<div class="row">
|
||
|
<div class="col s3">
|
||
|
<span class="label">Spend key:</span>
|
||
|
</div>
|
||
|
<div class="col s9">
|
||
|
<span id="spend_key_widget">Generating...</span>
|
||
|
<span class="qrcode" id="priv_spend_qr_widget" onclick="js:toggle_priv_spend_qr();"></span>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="row">
|
||
|
<div class="col s3">
|
||
|
<span class="label">View key:</span>
|
||
|
</div>
|
||
|
<div class="col s9">
|
||
|
<span id="view_key_widget">Generating...</span>
|
||
|
<span class="qrcode" id="priv_view_qr_widget" onclick="js:toggle_priv_view_qr();"></span>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="row">
|
||
|
<div class="col s6">
|
||
|
<input type="button" class="waves-effect waves-light btn btn-qr" onclick="js:toggle_priv_spend_qr();" value="Show Spend Key as QR code" action="" id="show_priv_spend_qr_code"/>
|
||
|
</div>
|
||
|
<div class="col s6">
|
||
|
<input type="button" class="waves-effect waves-light btn btn-qr" onclick="js:toggle_priv_view_qr();" value="Show View Key as QR code" action="" id="show_priv_view_qr_code"/>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<div class="row noprint"> </div>
|
||
|
<footer class="page-footer grey lighten-3 grey-text text-darken-4 noprint">
|
||
|
<div class="container">
|
||
|
<div class="row">
|
||
|
<div class="col l12">
|
||
|
<h5>Credits</h5>
|
||
|
<p>
|
||
|
Made by moneromooo, based on code from <a href="https://mymonero.com/">MyMonero</a>. Copyright notices in the source.
|
||
|
<br>
|
||
|
Thanks to antanst for the CSS, and to luigi1111 for crypto fixes and improvements.
|
||
|
<br>
|
||
|
If you found this useful, a donation would be appreciated:
|
||
|
<br>
|
||
|
<pre>Monero: 4AfUP827TeRZ1cck3tZThgZbRCEwBrpcJTkA1LCiyFVuMH4b5y59bKMZHGb9y58K3gSjWDCBsB4RkGsGDhsmMG5R2qmbLeW</pre>
|
||
|
<br>
|
||
|
<pre>Aeon: WmtXcFZj5iGY21JxAtFsJVQmQQyo7jgoJP8V4zLWVzDeeTfvbP8Mzb5gbNpQEc6BkeUYUqjGntHDSDyA6LKjdGBQ1w9iEpfVw</pre>
|
||
|
<br>
|
||
|
<pre>Townforge: TF1MMDuPzx7CVoCDSjxEHGLQPvdRy5Mjjyg4KG8QY3qkZZVtBobvGkvv4JLbycx1UQrosqEyqZT9ye7zrZR3ucZp6iBp1YaRzLK</pre>
|
||
|
|
||
|
<br>
|
||
|
Thanks, and welcome to Monero!
|
||
|
</p>
|
||
|
<h5 id="gpg-instructions">How to verify GPG signatures</h5>
|
||
|
|
||
|
<p>
|
||
|
All released versions of this page will be GPG signed by moneromooo, to avoid trojaned versions
|
||
|
being passed around. It is in your interest to check the signature.
|
||
|
</p>
|
||
|
<p>
|
||
|
This page is maintained as a
|
||
|
<a href="https://github.com/moneromooo-monero/monero-wallet-generator/">git repository</a>.
|
||
|
All commits are signed. In addition, released versions of the page are signed separately.
|
||
|
In order to check either, you first need to import
|
||
|
<a href="https://raw.githubusercontent.com/monero-project/bitmonero/master/utils/gpg_keys/moneromooo.asc">moneromooo's GPG key</a>
|
||
|
from the Monero source tree:
|
||
|
</p>
|
||
|
|
||
|
<code>
|
||
|
gpg --import moneromooo.asc
|
||
|
</code>
|
||
|
|
||
|
<h5>Checking a standalone signature</h5>
|
||
|
|
||
|
<p>
|
||
|
You need to get the signature file corresponding to the version of the page you're using.
|
||
|
Original signature files are
|
||
|
<a href="https://raw.githubusercontent.com/moneromooo-monero/monero-wallet-generator/master/monero-wallet-generator.html.asc">in the git repository</a>
|
||
|
as well. Save it as monero-wallet-generator.html.asc, then:
|
||
|
</p>
|
||
|
|
||
|
<code>
|
||
|
gpg --verify monero-wallet-generator.html.asc
|
||
|
</code>
|
||
|
|
||
|
<p>
|
||
|
You should see a message similar to:
|
||
|
</p>
|
||
|
|
||
|
<code>
|
||
|
gpg: Good signature from "moneromooo-monero <moneromooo-monero@users.noreply.github.com>"
|
||
|
</code>
|
||
|
|
||
|
<p>
|
||
|
Check the signature is from the key you imported previously! If not, you may be checking
|
||
|
that file was properly signed by an attacker instead of moneromooo. Beware that anyone can
|
||
|
place any email address in a new GPG key, so the right email being shown is no guarantee.
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
NOTE: you will probably also see a warning like this:
|
||
|
</p>
|
||
|
|
||
|
<code>
|
||
|
gpg: WARNING: This key is not certified with a trusted signature!
|
||
|
</code>
|
||
|
|
||
|
<p>
|
||
|
That is expected, as you only told GPG to import the signature in the steps above, but not
|
||
|
to trust it. Look for tutorials on GPG if you want to do this, but it is not necessary here.
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
If you want to verify an old version of the file, you will have to retrieve the matching
|
||
|
signature file from git.
|
||
|
</p>
|
||
|
|
||
|
<h5>Checking a git commit's signature</h5>
|
||
|
|
||
|
<p>
|
||
|
If you're using git to get the latest and greatest, it's even simpler:
|
||
|
</p>
|
||
|
|
||
|
<code>
|
||
|
git show --show-signature
|
||
|
</code>
|
||
|
|
||
|
<p>
|
||
|
You should see a message similar to:
|
||
|
</p>
|
||
|
|
||
|
<code>
|
||
|
gpg: Good signature from "moneromooo-monero <moneromooo-monero@users.noreply.github.com>"
|
||
|
</code>
|
||
|
|
||
|
<p>
|
||
|
Check the signature is from the key you imported previously! If not, you may be checking
|
||
|
that file was properly signed by an attacker instead of moneromooo. Beware that anyone can
|
||
|
place any email address in a new GPG key, so the right email being shown is no guarantee.
|
||
|
</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</footer>
|
||
|
|
||
|
<script>
|
||
|
window.onbeforeunload = function(e) {
|
||
|
return '';
|
||
|
};
|
||
|
function poor_mans_kdf(str)
|
||
|
{
|
||
|
var hex = cnBase58.bintohex(cnBase58.strtobin(str));
|
||
|
for (var n = 0; n < 10000; ++n)
|
||
|
hex = keccak_256(cnBase58.hextobin(hex));
|
||
|
return hex;
|
||
|
}
|
||
|
keys = null;
|
||
|
function genwallet(lang)
|
||
|
{
|
||
|
if(keys && !confirm('Are you sure? This wallet cannot be recovered once a new wallet is generated.')) {
|
||
|
oldSelectionIndex = true;
|
||
|
return;
|
||
|
}
|
||
|
spend_key_widget = document.getElementById("spend_key_widget");
|
||
|
view_key_widget = document.getElementById("view_key_widget");
|
||
|
address_widget = document.getElementById("address_widget");
|
||
|
address_qr_widget = document.getElementById("address_qr_widget");
|
||
|
priv_mnemonic_qr_widget = document.getElementById("priv_mnemonic_qr_widget");
|
||
|
priv_spend_qr_widget = document.getElementById("priv_spend_qr_widget");
|
||
|
priv_view_qr_widget = document.getElementById("priv_view_qr_widget");
|
||
|
privatekeys_address = document.getElementById("privatekeys_address");
|
||
|
mnemonic_widget = document.getElementById("mnemonic_widget");
|
||
|
mnemonic_address = document.getElementById("mnemonic_address");
|
||
|
user_entropy_widget = document.getElementById("user_entropy_widget")
|
||
|
date_widget = document.getElementById("date");
|
||
|
|
||
|
date_widget.innerHTML = new Date().toISOString();
|
||
|
iso_date = new Date().toISOString().substr(0, 10);
|
||
|
|
||
|
if (lang!=null) {
|
||
|
current_lang = lang;
|
||
|
}
|
||
|
else {
|
||
|
var user_entropy = user_entropy_widget.value;
|
||
|
if (user_entropy === "") {
|
||
|
seed = cnUtil.sc_reduce32(cnUtil.rand_32());
|
||
|
}
|
||
|
else {
|
||
|
seed = cnUtil.sc_reduce32(poor_mans_kdf(user_entropy));
|
||
|
}
|
||
|
keys = cnUtil.create_address(seed);
|
||
|
}
|
||
|
mnemonic = mn_encode(seed,current_lang);
|
||
|
|
||
|
spend_key_widget.innerHTML = keys.spend.sec;
|
||
|
view_key_widget.innerHTML = keys.view.sec;
|
||
|
address_widget.innerHTML = cnUtil.pubkeys_to_string(keys.spend.pub, keys.view.pub);
|
||
|
mnemonic_address.innerHTML = address_widget.innerHTML;
|
||
|
privatekeys_address.innerHTML = address_widget.innerHTML;
|
||
|
address_qr_widget.innerHTML = "";
|
||
|
priv_mnemonic_qr_widget.innerHTML = "";
|
||
|
priv_spend_qr_widget.innerHTML = "";
|
||
|
priv_view_qr_widget.innerHTML = "";
|
||
|
mnemonic_widget.innerHTML = mnemonic;
|
||
|
|
||
|
// only monero has the URI scheme
|
||
|
if (prefix_widget.value == "4") {
|
||
|
qr=new QRCode(address_qr_widget, {correctLevel:QRCode.CorrectLevel.L});
|
||
|
qr.makeCode("monero:"+keys.public_addr);
|
||
|
qr_priv_mnemonic=new QRCode(priv_mnemonic_qr_widget, {correctLevel:QRCode.CorrectLevel.L});
|
||
|
qr_priv_mnemonic.makeCode(
|
||
|
"monero_wallet:"+keys.public_addr+
|
||
|
"?mnemonic_seed="+encodeURIComponent(mnemonic)+
|
||
|
"&iso_date="+iso_date);
|
||
|
qr_priv_spend=new QRCode(priv_spend_qr_widget, {correctLevel:QRCode.CorrectLevel.L});
|
||
|
qr_priv_spend.makeCode(
|
||
|
"monero_wallet:"+keys.public_addr+
|
||
|
"?spend_key="+keys.spend.sec+
|
||
|
"&iso_date="+iso_date);
|
||
|
qr_priv_view=new QRCode(priv_view_qr_widget, {correctLevel:QRCode.CorrectLevel.L});
|
||
|
qr_priv_view.makeCode(
|
||
|
"monero_wallet:"+keys.public_addr+
|
||
|
"?view_key="+keys.view.sec+
|
||
|
"&iso_date="+iso_date);
|
||
|
}
|
||
|
else {
|
||
|
qr = null;
|
||
|
qr_priv_mnemonic = null;
|
||
|
qr_priv_spend = null;
|
||
|
qr_priv_view = null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
previous_button_text = "";
|
||
|
prefix = "";
|
||
|
function genwallet_prefix_worker()
|
||
|
{
|
||
|
attempts = 0;
|
||
|
try {
|
||
|
while (true) {
|
||
|
attempts++;
|
||
|
seed = cnUtil.sc_reduce32(cnUtil.rand_32());
|
||
|
keys = cnUtil.create_address_if_prefix(seed,prefix);
|
||
|
if (keys != null) {
|
||
|
gen_prefix_widget = document.getElementById("gen_prefix_widget");
|
||
|
prefix_widget = document.getElementById("prefix_widget");
|
||
|
gen_prefix_widget.value = previous_button_text;
|
||
|
prefix_widget.disabled = false;
|
||
|
generating = false;
|
||
|
break;
|
||
|
}
|
||
|
if (attempts == 10) {
|
||
|
if (generating)
|
||
|
setTimeout(genwallet_prefix_worker, 0);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
catch(e) {
|
||
|
gen_prefix_widget = document.getElementById("gen_prefix_widget");
|
||
|
prefix_widget = document.getElementById("prefix_widget");
|
||
|
gen_prefix_widget.value = previous_button_text;
|
||
|
prefix_widget.disabled = false;
|
||
|
generating = false;
|
||
|
alert('Error: maybe out of memory')
|
||
|
return;
|
||
|
}
|
||
|
mnemonic = mn_encode(seed,current_lang);
|
||
|
|
||
|
spend_key_widget = document.getElementById("spend_key_widget");
|
||
|
view_key_widget = document.getElementById("view_key_widget");
|
||
|
address_widget = document.getElementById("address_widget");
|
||
|
address_qr_widget = document.getElementById("address_qr_widget");
|
||
|
priv_mnemonic_qr_widget = document.getElementById("priv_mnemonic_qr_widget");
|
||
|
priv_spend_qr_widget = document.getElementById("priv_spend_qr_widget");
|
||
|
priv_view_qr_widget = document.getElementById("priv_view_qr_widget");
|
||
|
privatekeys_address = document.getElementById("privatekeys_address");
|
||
|
mnemonic_widget = document.getElementById("mnemonic_widget");
|
||
|
mnemonic_address = document.getElementById("mnemonic_address");
|
||
|
date_widget = document.getElementById("date");
|
||
|
|
||
|
date_widget.innerHTML = new Date().toISOString();
|
||
|
iso_date = new Date().toISOString().substr(0, 10);
|
||
|
|
||
|
spend_key_widget.innerHTML = keys.spend.sec;
|
||
|
view_key_widget.innerHTML = keys.view.sec;
|
||
|
address_widget.innerHTML = keys.public_addr;
|
||
|
mnemonic_address.innerHTML = address_widget.innerHTML;
|
||
|
privatekeys_address.innerHTML = address_widget.innerHTML;
|
||
|
address_qr_widget.innerHTML = "";
|
||
|
priv_mnemonic_qr_widget.innerHTML = "";
|
||
|
priv_spend_qr_widget.innerHTML = "";
|
||
|
priv_view_qr_widget.innerHTML = "";
|
||
|
mnemonic_widget.innerHTML = mnemonic;
|
||
|
|
||
|
qr=new QRCode(address_qr_widget, {correctLevel:QRCode.CorrectLevel.L});
|
||
|
qr.makeCode("monero:"+keys.public_addr);
|
||
|
qr_priv_mnemonic=new QRCode(priv_mnemonic_qr_widget, {correctLevel:QRCode.CorrectLevel.L});
|
||
|
qr_priv_mnemonic.makeCode(
|
||
|
"monero_wallet:"+keys.public_addr+
|
||
|
"?mnemonic_seed="+encodeURIComponent(mnemonic)+
|
||
|
"&iso_date="+iso_date);
|
||
|
qr_priv_spend=new QRCode(priv_spend_qr_widget, {correctLevel:QRCode.CorrectLevel.L});
|
||
|
qr_priv_spend.makeCode(
|
||
|
"monero_wallet:"+keys.public_addr+
|
||
|
"?spend_key="+keys.spend.sec+
|
||
|
"&iso_date="+iso_date);
|
||
|
qr_priv_view=new QRCode(priv_view_qr_widget, {correctLevel:QRCode.CorrectLevel.L});
|
||
|
qr_priv_view.makeCode(
|
||
|
"monero_wallet:"+keys.public_addr+
|
||
|
"?view_key="+keys.view.sec+
|
||
|
"&iso_date="+iso_date);
|
||
|
}
|
||
|
|
||
|
var zerohex="0000000000000000000000000000000000000000000000000000000000000000";
|
||
|
var ffhex="ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff";
|
||
|
|
||
|
function is_valid_prefix(prefix)
|
||
|
{
|
||
|
if (prefix.length <= 0 || prefix.length >= 95)
|
||
|
return false;
|
||
|
var lowest_address=cnUtil.pubkeys_to_string(zerohex,zerohex);
|
||
|
var highest_address=cnUtil.pubkeys_to_string(ffhex,ffhex);
|
||
|
var lowest=lowest_address.substr(0,prefix.length);
|
||
|
var highest=highest_address.substr(0,prefix.length);
|
||
|
if (prefix<lowest)
|
||
|
return false;
|
||
|
if (prefix>highest)
|
||
|
return false;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
function check_prefix_validity()
|
||
|
{
|
||
|
gen_prefix_widget = document.getElementById("gen_prefix_widget");
|
||
|
prefix_widget = document.getElementById("prefix_widget");
|
||
|
if (gen_prefix_widget.value == "STOP")
|
||
|
return;
|
||
|
prefix=prefix_widget.value;
|
||
|
if (is_valid_prefix(prefix)) {
|
||
|
gen_prefix_widget.value = "Generate wallet with prefix";
|
||
|
gen_prefix_widget.disabled = false;
|
||
|
}
|
||
|
else {
|
||
|
gen_prefix_widget.value = "Invalid prefix";
|
||
|
gen_prefix_widget.disabled = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
generating = false;
|
||
|
function genwallet_prefix()
|
||
|
{
|
||
|
if(keys && !confirm('Are you sure? This wallet cannot be recovered once a new wallet is generated.')) {
|
||
|
return;
|
||
|
}
|
||
|
gen_prefix_widget = document.getElementById("gen_prefix_widget");
|
||
|
prefix_widget = document.getElementById("prefix_widget");
|
||
|
if (generating) {
|
||
|
generating = false;
|
||
|
gen_prefix_widget.value = previous_button_text;
|
||
|
prefix_widget.disabled = false;
|
||
|
}
|
||
|
else {
|
||
|
prefix_widget = document.getElementById("prefix_widget");
|
||
|
prefix = prefix_widget.value;
|
||
|
prefix.trim();
|
||
|
if (prefix.length < 2) {
|
||
|
alert("Bad prefix should be at least two characters");
|
||
|
return;
|
||
|
}
|
||
|
if (!is_valid_prefix(prefix)) {
|
||
|
alert("Bad prefix "+prefix+" is not a valid address prefix");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
generating = true;
|
||
|
previous_button_text = gen_prefix_widget.value;
|
||
|
gen_prefix_widget.value = "STOP";
|
||
|
prefix_widget.disabled = true;
|
||
|
setTimeout(genwallet_prefix_worker, 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function checkEntropy()
|
||
|
{
|
||
|
var good = true;
|
||
|
var button = document.getElementById("gen_with_custom_entropy_button")
|
||
|
var user_entropy_widget = document.getElementById("user_entropy_widget")
|
||
|
var user_entropy = user_entropy_widget.value;
|
||
|
var user_entropy_warning_widget = document.getElementById("user_entropy_warning_widget")
|
||
|
if (user_entropy.length === 0) {
|
||
|
user_entropy_warning_widget.style.display = "none"
|
||
|
return
|
||
|
}
|
||
|
|
||
|
var count = new Int32Array(256);
|
||
|
for (var n = 0; n < 256; ++n)
|
||
|
count[n] = 0
|
||
|
for (var n = 0; n < user_entropy.length; ++n)
|
||
|
count[user_entropy.charCodeAt(n)]++;
|
||
|
var e = 0
|
||
|
for (var n = 0; n < 256; ++n) {
|
||
|
if (count[n] > 0) {
|
||
|
var p = count[n] / user_entropy.length
|
||
|
p *= Math.log(p) / Math.log(2)
|
||
|
e -= p
|
||
|
}
|
||
|
}
|
||
|
e *= user_entropy.length
|
||
|
if (e < 128)
|
||
|
good = false
|
||
|
if (good)
|
||
|
user_entropy_warning_widget.style.display = "none"
|
||
|
else
|
||
|
user_entropy_warning_widget.style.display = "block"
|
||
|
}
|
||
|
|
||
|
function hide_qr()
|
||
|
{
|
||
|
address_qr_widget = document.getElementById("address_qr_widget");
|
||
|
priv_mnemonic_qr_widget = document.getElementById("priv_mnemonic_qr_widget");
|
||
|
priv_spend_qr_widget = document.getElementById("priv_spend_qr_widget");
|
||
|
priv_view_qr_widget = document.getElementById("priv_view_qr_widget");
|
||
|
spend_key_widget = document.getElementById("spend_key_widget");
|
||
|
view_key_widget = document.getElementById("view_key_widget");
|
||
|
mnemonic_widget = document.getElementById("mnemonic_widget");
|
||
|
|
||
|
address_qr_widget.style.display = "none";
|
||
|
priv_mnemonic_qr_widget.style.display = "none";
|
||
|
priv_spend_qr_widget.style.display = "none";
|
||
|
priv_view_qr_widget.style.display = "none";
|
||
|
spend_key_widget.style.display = "block";
|
||
|
view_key_widget.style.display = "block";
|
||
|
mnemonic_widget.style.display = "block";
|
||
|
}
|
||
|
|
||
|
function toggle_address_qr()
|
||
|
{
|
||
|
address_qr_widget = document.getElementById("address_qr_widget");
|
||
|
priv_mnemonic_qr_widget = document.getElementById("priv_mnemonic_qr_widget");
|
||
|
priv_spend_qr_widget = document.getElementById("priv_spend_qr_widget");
|
||
|
priv_view_qr_widget = document.getElementById("priv_view_qr_widget");
|
||
|
spend_key_widget = document.getElementById("spend_key_widget");
|
||
|
view_key_widget = document.getElementById("view_key_widget");
|
||
|
mnemonic_widget = document.getElementById("mnemonic_widget");
|
||
|
if (address_qr_widget.style.display=="block") {
|
||
|
hide_qr();
|
||
|
}
|
||
|
else {
|
||
|
address_qr_widget.style.display = "block";
|
||
|
priv_mnemonic_qr_widget.style.display = "none";
|
||
|
priv_spend_qr_widget.style.display = "none";
|
||
|
priv_view_qr_widget.style.display = "none";
|
||
|
spend_key_widget.style.display = "none";
|
||
|
view_key_widget.style.display = "none";
|
||
|
mnemonic_widget.style.display = "none";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function toggle_priv_mnemonic_qr()
|
||
|
{
|
||
|
address_qr_widget = document.getElementById("address_qr_widget");
|
||
|
priv_mnemonic_qr_widget = document.getElementById("priv_mnemonic_qr_widget");
|
||
|
priv_spend_qr_widget = document.getElementById("priv_spend_qr_widget");
|
||
|
priv_view_qr_widget = document.getElementById("priv_view_qr_widget");
|
||
|
spend_key_widget = document.getElementById("spend_key_widget");
|
||
|
view_key_widget = document.getElementById("view_key_widget");
|
||
|
mnemonic_widget = document.getElementById("mnemonic_widget");
|
||
|
if (priv_mnemonic_qr_widget.style.display=="block") {
|
||
|
hide_qr();
|
||
|
}
|
||
|
else {
|
||
|
address_qr_widget.style.display = "none";
|
||
|
priv_mnemonic_qr_widget.style.display = "block";
|
||
|
priv_spend_qr_widget.style.display = "none";
|
||
|
priv_view_qr_widget.style.display = "none";
|
||
|
spend_key_widget.style.display = "none";
|
||
|
view_key_widget.style.display = "none";
|
||
|
mnemonic_widget.style.display = "none";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function toggle_priv_spend_qr()
|
||
|
{
|
||
|
address_qr_widget = document.getElementById("address_qr_widget");
|
||
|
priv_mnemonic_qr_widget = document.getElementById("priv_mnemonic_qr_widget");
|
||
|
priv_spend_qr_widget = document.getElementById("priv_spend_qr_widget");
|
||
|
priv_view_qr_widget = document.getElementById("priv_view_qr_widget");
|
||
|
spend_key_widget = document.getElementById("spend_key_widget");
|
||
|
view_key_widget = document.getElementById("view_key_widget");
|
||
|
mnemonic_widget = document.getElementById("mnemonic_widget");
|
||
|
if (priv_spend_qr_widget.style.display=="block") {
|
||
|
hide_qr();
|
||
|
}
|
||
|
else {
|
||
|
address_qr_widget.style.display = "none";
|
||
|
priv_mnemonic_qr_widget.style.display = "none";
|
||
|
priv_spend_qr_widget.style.display = "block";
|
||
|
priv_view_qr_widget.style.display = "none";
|
||
|
spend_key_widget.style.display = "none";
|
||
|
view_key_widget.style.display = "none";
|
||
|
mnemonic_widget.style.display = "none";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function toggle_priv_view_qr()
|
||
|
{
|
||
|
address_qr_widget = document.getElementById("address_qr_widget");
|
||
|
priv_mnemonic_qr_widget = document.getElementById("priv_mnemonic_qr_widget");
|
||
|
priv_spend_qr_widget = document.getElementById("priv_spend_qr_widget");
|
||
|
priv_view_qr_widget = document.getElementById("priv_view_qr_widget");
|
||
|
spend_key_widget = document.getElementById("spend_key_widget");
|
||
|
view_key_widget = document.getElementById("view_key_widget");
|
||
|
mnemonic_widget = document.getElementById("mnemonic_widget");
|
||
|
if (priv_view_qr_widget.style.display=="block") {
|
||
|
hide_qr();
|
||
|
}
|
||
|
else {
|
||
|
address_qr_widget.style.display = "none";
|
||
|
priv_mnemonic_qr_widget.style.display = "none";
|
||
|
priv_spend_qr_widget.style.display = "none";
|
||
|
priv_view_qr_widget.style.display = "block";
|
||
|
spend_key_widget.style.display = "none";
|
||
|
view_key_widget.style.display = "none";
|
||
|
mnemonic_widget.style.display = "none";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function enableElement(id, enable)
|
||
|
{
|
||
|
var el = document.getElementById(id)
|
||
|
if (el) {
|
||
|
if (enable)
|
||
|
el.disabled = false;
|
||
|
else
|
||
|
el.disabled = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function enableLanguage(code, enable)
|
||
|
{
|
||
|
enableElement("lang_" + code, enable)
|
||
|
}
|
||
|
|
||
|
var cnUtil;
|
||
|
var current_lang;
|
||
|
function setCoin(index)
|
||
|
{
|
||
|
var enable
|
||
|
prefix_widget = document.getElementById("prefix_widget");
|
||
|
if (index == 0) {
|
||
|
cnUtil = cnUtilGen(moneroConfig);
|
||
|
prefix_widget.value = "4";
|
||
|
enable = true;
|
||
|
current_lang = 'english';
|
||
|
}
|
||
|
else if (index == 1) {
|
||
|
cnUtil = cnUtilGen(aeonConfig);
|
||
|
prefix_widget.value = "Wm";
|
||
|
enable = true;
|
||
|
current_lang = 'english';
|
||
|
}
|
||
|
else if (index == 2) {
|
||
|
cnUtil = cnUtilGen(townforgeConfig);
|
||
|
prefix_widget.value = "TF1M";
|
||
|
enable = true;
|
||
|
current_lang = 'english';
|
||
|
}
|
||
|
enableLanguage("en", enable)
|
||
|
enableLanguage("es", enable)
|
||
|
enableLanguage("pt", enable)
|
||
|
enableLanguage("jp", enable)
|
||
|
enableLanguage("eo", enable)
|
||
|
enableElement("show_qr_code", enable)
|
||
|
enableElement("show_priv_mnemonic_qr_code", enable)
|
||
|
enableElement("show_priv_spend_qr_code", enable)
|
||
|
enableElement("show_priv_view_qr_code", enable)
|
||
|
}
|
||
|
|
||
|
var oldSelectionIndex = false;
|
||
|
function restore_old_selection_index()
|
||
|
{
|
||
|
if (oldSelectionIndex && document.getElementById("currencyDropDownList").value == "Monero") {
|
||
|
document.getElementById("currencyDropDownList").value = "Aeon";
|
||
|
setCoin(1);
|
||
|
oldSelectionIndex = false;
|
||
|
}
|
||
|
else if (oldSelectionIndex && document.getElementById("currencyDropDownList").value == "Aeon") {
|
||
|
document.getElementById("currencyDropDownList").value = "Monero";
|
||
|
setCoin(0);
|
||
|
oldSelectionIndex = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
setCoin(document.getElementById("currencyDropDownList").selectedIndex);
|
||
|
genwallet();
|
||
|
</script>
|
||
|
|
||
|
</body>
|
||
|
</html>
|