]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/commitdiff
Merge branch 'master' into master
authorSuat Özgür <s.oezguer@gmail.com>
Mon, 17 Dec 2018 00:59:05 +0000 (01:59 +0100)
committerGitHub <noreply@github.com>
Mon, 17 Dec 2018 00:59:05 +0000 (01:59 +0100)
1  2 
src/index.html
src/js/index.js

diff --combined src/index.html
index d3333b54c00ad911a54b5a1aa01367e87498f318,36d753b84c401a759d054a1931447408e5b6e43d..a3d6c0ce929b6c36c22e76f6de4cc2c72d5276bc
@@@ -15,7 -15,7 +15,7 @@@
          <div class="container">
  
              <h1 class="text-center">Mnemonic Code Converter</h1>
-             <p class="version">v0.3.2</p>
+             <p class="version">v0.3.9</p>
              <hr>
              <div class="row">
                  <div class="col-md-12">
@@@ -36,8 -36,8 +36,8 @@@
                              <div class="col-sm-10">
                                  <div class="form-inline">
                                      <div class="input-group-inline">
-                                         <span>Generate a random mnemonic, or enter your own below</span>:
-                                         <button class="btn generate">Generate</button>
+                                          <span>Generate a random mnemonic</span>:
+                                         <button class="btn generate" ><b>GENERATE</b></button>
                                          <select id="strength" class="strength form-control">
                                              <option value="3">3</option>
                                              <option value="6">6</option>
                                              <option value="21">21</option>
                                              <option value="24">24</option>
                                          </select>
-                                         <span>words</span>
+                                         <span>words, or enter your own below</span>.
+                                         <p class="warning help-block hidden">
+                                             <span class="text-danger">
+                                                 Mnemonics with less than 12 words have low entropy and may be guessed by an attacker.
+                                             </span>
+                                         </p>
                                      </div>
                                  </div>
                              </div>
@@@ -64,7 -69,7 +69,7 @@@
                              <div class="form-group">
                                  <label for="entropy" class="col-sm-2 control-label">Entropy</label>
                                  <div class="col-sm-7">
-                                     <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts either binary, base 6, 6-sided dice, base 10, hexadecimal or cards"></textarea>
+                                     <textarea id="entropy" rows="2" class="entropy private-data form-control" placeholder="Accepts either binary, base 6, 6-sided dice, base 10, hexadecimal or cards"></textarea>
                                      <div class="row filter-warning text-danger hidden">
                                          <p class="col-sm-12">
                                          <strong>
                                          <div class="bits col-sm-3 form-control-static"></div>
                                      </div>
                                      <label class="col-sm-3 control-label">Filtered Entropy</label>
-                                     <div class="filtered col-sm-9 form-control-static"></div>
+                                     <div class="filtered private-data col-sm-9 form-control-static"></div>
                                      <label class="col-sm-3 control-label">Raw Binary</label>
-                                     <div class="binary col-sm-9 form-control-static"></div>
+                                     <div class="binary private-data col-sm-9 form-control-static"></div>
+                                     <label class="col-sm-3 control-label">Binary Checksum</label>
+                                     <div class="checksum private-data col-sm-9 form-control-static">&nbsp;</div>
                                      <label class="col-sm-3 control-label">Word Indexes</label>
-                                     <div class="word-indexes col-sm-9 form-control-static">&nbsp;</div>
+                                     <div class="word-indexes private-data col-sm-9 form-control-static">&nbsp;</div>
                                      <label class="col-sm-3 control-label">Mnemonic Length</label>
                                      <div class="col-sm-9">
                                          <select class="mnemonic-length form-control">
                                              <option value="raw" selected>Use Raw Entropy (3 words per 32 bits)</option>
                                              <option value="12">12 <span>Words</span></option>
-                                             <option value="15">15 <span>Words</option>
+                                             <option value="15">15 <span>Words</span></option>
                                              <option value="18">18 <span>Words</span></option>
                                              <option value="21">21 <span>Words</span></option>
                                              <option value="24">24 <span>Words</span></option>
                                          </select>
+                                         <p class="weak-entropy-override-warning hidden">
+                                             <span class="text-danger">
+                                                 The mnemonic will appear more secure than it really is.
+                                             </span>
+                                         </p>
                                      </div>
                                  </div>
                                  <div class="col-sm-3">
                                  </label>
                              </div>
                          </div>
+                         <div class="form-group">
+                             <div class="col-sm-2"></div>
+                             <div class="col-sm-10 checkbox">
+                                 <label>
+                                     <input type="checkbox" class="privacy-screen-toggle">
+                                     <span>Hide all private info</span>
+                                 </label>
+                             </div>
+                         </div>
                          <div class="form-group">
                              <label class="col-sm-2 control-label">Mnemonic Language</label>
                              <div class="col-sm-10 languages">
                                      <a href="#chinese_traditional"  title="Chinese (Traditional)">中文(繁體)</a>
                                      <a href="#french"  title="French">Français</a>
                                      <a href="#italian"  title="Italian">Italiano</a>
+                                     <a href="#korean"  title="Korean">한국어</a>
                                  </div>
                              </div>
                          </div>
                          <div class="form-group">
                              <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
                              <div class="col-sm-10">
-                                 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
+                                 <textarea id="phrase" class="phrase private-data form-control" data-show-qr></textarea>
                              </div>
                          </div>
                          <div class="form-group">
                              <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
                              <div class="col-sm-10">
-                                 <textarea id="passphrase" class="passphrase form-control"></textarea>
+                                 <textarea id="passphrase" class="passphrase private-data form-control"></textarea>
                              </div>
                          </div>
                          <div class="form-group">
                              <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
                              <div class="col-sm-10">
-                                 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
+                                 <textarea id="seed" class="seed private-data form-control" readonly="readonly" data-show-qr></textarea>
                              </div>
                          </div>
                          <div class="form-group">
                          <div class="form-group">
                              <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
                              <div class="col-sm-10">
-                                 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
+                                 <textarea id="root-key" class="root-key private-data form-control" data-show-qr></textarea>
                              </div>
                          </div>
                          <div class="form-group litecoin-ltub-container hidden">
                                      </p>
                                  </div>
                                  <div class="form-group">
-                                     <label for="purpose" class="col-sm-2 control-label">
+                                     <label for="purpose-bip44" class="col-sm-2 control-label">
                                          <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
                                      </label>
                                      <div class="col-sm-10">
-                                         <input id="purpose" type="text" class="purpose form-control" value="44" readonly>
+                                         <input id="purpose-bip44" type="text" class="purpose form-control" value="44" readonly>
                                      </div>
                                  </div>
                                  <div class="form-group">
-                                     <label for="coin" class="col-sm-2 control-label">
+                                     <label for="coin-bip44" class="col-sm-2 control-label">
                                          <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
                                      </label>
                                      <div class="col-sm-10">
-                                         <input id="coin" type="text" class="coin form-control" value="0" readonly>
+                                         <input id="coin-bip44" type="text" class="coin form-control" value="0" readonly>
                                      </div>
                                  </div>
                                  <div class="form-group">
-                                     <label for="account" class="col-sm-2 control-label">
+                                     <label for="account-bip44" class="col-sm-2 control-label">
                                          <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
                                      </label>
                                      <div class="col-sm-10">
-                                         <input id="account" type="text" class="account form-control" value="0">
+                                         <input id="account-bip44" type="text" class="account form-control" value="0">
                                      </div>
                                  </div>
                                  <div class="form-group">
-                                     <label for="change" class="col-sm-2 control-label">
+                                     <label for="change-bip44" class="col-sm-2 control-label">
                                          <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
                                      </label>
                                      <div class="col-sm-10">
-                                         <input id="change" type="text" class="change form-control" value="0">
+                                         <input id="change-bip44" type="text" class="change form-control" value="0">
                                      </div>
                                  </div>
                                  <div class="form-group">
                                          <span>Account Extended Private Key</span>
                                      </label>
                                      <div class="col-sm-10">
-                                         <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
+                                         <textarea id="account-xprv-bip44" type="text" class="account-xprv private-data form-control" readonly data-show-qr></textarea>
                                      </div>
                                  </div>
                                  <div class="form-group">
                                          <span>Account Extended Public Key</span>
                                      </label>
                                      <div class="col-sm-10">
-                                         <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
+                                         <textarea id="account-xpub-bip44" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
                                      </div>
                                  </div>
                                  <div class="form-group">
                                          </p>
                                      </div>
                                      <div class="form-group">
-                                         <label for="purpose" class="col-sm-2 control-label">
+                                         <label for="purpose-bip49" class="col-sm-2 control-label">
                                              <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
                                          </label>
                                          <div class="col-sm-10">
-                                             <input id="purpose" type="text" class="purpose form-control" value="49" readonly>
+                                             <input id="purpose-bip49" type="text" class="purpose form-control" value="49" readonly>
                                          </div>
                                      </div>
                                      <div class="form-group">
-                                         <label for="coin" class="col-sm-2 control-label">
+                                         <label for="coin-bip49" class="col-sm-2 control-label">
                                              <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
                                          </label>
                                          <div class="col-sm-10">
-                                             <input id="coin" type="text" class="coin form-control" value="0" readonly>
+                                             <input id="coin-bip49" type="text" class="coin form-control" value="0" readonly>
                                          </div>
                                      </div>
                                      <div class="form-group">
-                                         <label for="account" class="col-sm-2 control-label">
+                                         <label for="account-bip49" class="col-sm-2 control-label">
                                              <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
                                          </label>
                                          <div class="col-sm-10">
-                                             <input id="account" type="text" class="account form-control" value="0">
+                                             <input id="account-bip49" type="text" class="account form-control" value="0">
                                          </div>
                                      </div>
                                      <div class="form-group">
-                                         <label for="change" class="col-sm-2 control-label">
+                                         <label for="change-bip49" class="col-sm-2 control-label">
                                              <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
                                          </label>
                                          <div class="col-sm-10">
-                                             <input id="change" type="text" class="change form-control" value="0">
+                                             <input id="change-bip49" type="text" class="change form-control" value="0">
                                          </div>
                                      </div>
                                      <div class="form-group">
                                              <span>Account Extended Private Key</span>
                                          </label>
                                          <div class="col-sm-10">
-                                             <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
+                                             <textarea id="account-xprv-bip49" type="text" class="account-xprv private-data form-control" readonly data-show-qr></textarea>
                                          </div>
                                      </div>
                                      <div class="form-group">
                                              <span>Account Extended Public Key</span>
                                          </label>
                                          <div class="col-sm-10">
-                                             <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
+                                             <textarea id="account-xpub-bip49" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
                                          </div>
                                      </div>
                                      <div class="form-group">
                          <div id="bip84" class="tab-pane">
                              <form class="form-horizontal" role="form">
                                  <br>
-                                 <div class="col-sm-2"></div>
-                                 <div class="col-sm-10">
-                                     <p>
-                                         For more info see the
-                                         <a href="https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki" target="_blank">BIP84 spec</a>.
-                                     </p>
-                                 </div>
-                                 <div class="form-group">
-                                     <label for="purpose" class="col-sm-2 control-label">
-                                         Purpose
-                                     </label>
-                                     <div class="col-sm-10">
-                                         <input id="purpose" type="text" class="purpose form-control" value="84" readonly>
+                                 <div class="unavailable hidden">
+                                     <div class="form-group">
+                                         <div class="col-sm-2"></div>
+                                         <div class="col-sm-10">
+                                             <p>BIP84 is unavailable for this coin.</p>
+                                         </div>
                                      </div>
                                  </div>
-                                 <div class="form-group">
-                                     <label for="coin" class="col-sm-2 control-label">
-                                         Coin
-                                     </label>
+                                 <div class="available">
+                                     <div class="col-sm-2"></div>
                                      <div class="col-sm-10">
-                                         <input id="coin" type="text" class="coin form-control" value="0" readonly>
+                                         <p>
+                                             For more info see the
+                                             <a href="https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki" target="_blank">BIP84 spec</a>.
+                                         </p>
                                      </div>
-                                 </div>
-                                 <div class="form-group">
-                                     <label for="account" class="col-sm-2 control-label">
-                                         Account
-                                     </label>
-                                     <div class="col-sm-10">
-                                         <input id="account" type="text" class="account form-control" value="0">
+                                     <div class="form-group">
+                                         <label for="purpose-bip84" class="col-sm-2 control-label">
+                                             Purpose
+                                         </label>
+                                         <div class="col-sm-10">
+                                             <input id="purpose-bip84" type="text" class="purpose form-control" value="84" readonly>
+                                         </div>
                                      </div>
-                                 </div>
-                                 <div class="form-group">
-                                     <label for="change" class="col-sm-2 control-label">
-                                         External / Internal
-                                     </label>
-                                     <div class="col-sm-10">
-                                         <input id="change" type="text" class="change form-control" value="0">
+                                     <div class="form-group">
+                                         <label for="coin-bip84" class="col-sm-2 control-label">
+                                             Coin
+                                         </label>
+                                         <div class="col-sm-10">
+                                             <input id="coin-bip84" type="text" class="coin form-control" value="0" readonly>
+                                         </div>
                                      </div>
-                                 </div>
-                                 <div class="form-group">
-                                     <label class="col-sm-2 control-label">
-                                     </label>
-                                     <div class="col-sm-10">
-                                         <p>The account extended keys can be used for importing to most BIP84 compatible wallets.</p>
+                                     <div class="form-group">
+                                         <label for="account-bip84" class="col-sm-2 control-label">
+                                             Account
+                                         </label>
+                                         <div class="col-sm-10">
+                                             <input id="account-bip84" type="text" class="account form-control" value="0">
+                                         </div>
                                      </div>
-                                 </div>
-                                 <div class="form-group">
-                                     <label for="account-xprv" class="col-sm-2 control-label">
-                                         <span>Account Extended Private Key</span>
-                                     </label>
-                                     <div class="col-sm-10">
-                                         <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
+                                     <div class="form-group">
+                                         <label for="change-bip84" class="col-sm-2 control-label">
+                                             External / Internal
+                                         </label>
+                                         <div class="col-sm-10">
+                                             <input id="change-bip84" type="text" class="change form-control" value="0">
+                                         </div>
                                      </div>
-                                 </div>
-                                 <div class="form-group">
-                                     <label for="account-xpub" class="col-sm-2 control-label">
-                                         <span>Account Extended Public Key</span>
-                                     </label>
-                                     <div class="col-sm-10">
-                                         <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
+                                     <div class="form-group">
+                                         <label class="col-sm-2 control-label">
+                                         </label>
+                                         <div class="col-sm-10">
+                                             <p>The account extended keys can be used for importing to most BIP84 compatible wallets.</p>
+                                         </div>
                                      </div>
-                                 </div>
-                                 <div class="form-group">
-                                     <label class="col-sm-2 control-label">
-                                     </label>
-                                     <div class="col-sm-10">
-                                         <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
+                                     <div class="form-group">
+                                         <label for="account-xprv" class="col-sm-2 control-label">
+                                             <span>Account Extended Private Key</span>
+                                         </label>
+                                         <div class="col-sm-10">
+                                             <textarea id="account-xprv-bip84" type="text" class="account-xprv private-data form-control" readonly data-show-qr></textarea>
+                                         </div>
                                      </div>
-                                 </div>
-                                 <div class="form-group">
-                                     <label for="bip84-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
-                                     <div class="col-sm-10">
-                                         <input id="bip84-path" type="text" class="path form-control" value="m/84'/0'/0'/0" readonly="readonly">
+                                     <div class="form-group">
+                                         <label for="account-xpub" class="col-sm-2 control-label">
+                                             <span>Account Extended Public Key</span>
+                                         </label>
+                                         <div class="col-sm-10">
+                                             <textarea id="account-xpub-bip84" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
+                                         </div>
+                                     </div>
+                                     <div class="form-group">
+                                         <label class="col-sm-2 control-label">
+                                         </label>
+                                         <div class="col-sm-10">
+                                             <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
+                                         </div>
+                                     </div>
+                                     <div class="form-group">
+                                         <label for="bip84-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
+                                         <div class="col-sm-10">
+                                             <input id="bip84-path" type="text" class="path form-control" value="m/84'/0'/0'/0" readonly="readonly">
+                                         </div>
                                      </div>
                                  </div>
                              </form>
                          <div class="form-group">
                              <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Private Key</label>
                              <div class="col-sm-10">
-                                 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
+                                 <textarea id="extended-priv-key" class="extended-priv-key private-data form-control" readonly="readonly" data-show-qr></textarea>
                              </div>
                          </div>
                          <div class="form-group">
                      <h2>Derived Addresses</h2>
                      <p>Note these addresses are derived from the BIP32 Extended Key</p>
                  </div>
-                 <div class="col-md-12 use-bitpay-addresses-container hidden">
-                     <div class="checkbox">
+                 <div class="col-md-12 bch-addr-type-container hidden">
+                     <div class="radio">
+                         <label>
+                             <input type="radio" value="cashaddr" name="bch-addr-type" class="use-bch-cashaddr-addresses" checked="checked">
+                             <span>Use CashAddr addresses for Bitcoin Cash (ie starting with 'q' instead of '1')</span>
+                         </label>
+                     </div>
+                     <div class="radio">
                          <label>
-                             <input type="checkbox" class="use-bitpay-addresses">
+                             <input type="radio" value="bitpay" name="bch-addr-type" class="use-bch-bitpay-addresses">
                              <span>Use BitPay-style addresses for Bitcoin Cash (ie starting with 'C' instead of '1')</span>
                          </label>
                      </div>
+                     <div class="radio">
+                         <label>
+                             <input type="radio" value="legacy" name="bch-addr-type" class="use-bch-legacy-addresses">
+                             <span>Use legacy addresses for Bitcoin Cash (ie starting with '1')</span>
+                         </label>
+                     </div>
+                 </div>
+                 <div class="col-md-12">
+                     <div class="checkbox">
+                         <label>
+                             <input type="checkbox" class="use-bip38">
+                             <span>Encrypt private keys using BIP38 and this password:</span>
+                         </label>
+                         <input class="bip38-password private-data">
+                         <span>Enabling BIP38 means each key will take several minutes to generate.</span>
+                     </div>
                  </div>
                  <ul class="addresses-type nav nav-tabs" role="tablist">
                      <li id="table-tab" class="active">
                          <span>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
                      </p>
                      <h3 id="entropy-notes">Entropy</h3>
+                     <p>
+                         <span>Entropy values should not include the BIP39 checksum. This is automatically added by the tool.</span>
+                     </p>
                      <p>
                          <span>
                              Entropy values must be sourced from a
                  <td class="index"><span></span></td>
                  <td class="address"><span data-show-qr></span></td>
                  <td class="pubkey"><span data-show-qr></span></td>
-                 <td class="privkey"><span data-show-qr></span></td>
+                 <td class="privkey private-data"><span data-show-qr></span></td>
              </tr>
          </script>
          <script src="js/polyfill.es6.js"></script>
          <script src="js/bootstrap-3.3.7.js"></script>
          <script src="js/levenshtein.js"></script>
          <script src="js/kjua-0.1.1.min.js"></script>
-         <script src="js/bitcoinjs-3.3.0.js"></script>
+         <script src="js/bitcoinjs-3.3.2.js"></script>
          <script src="js/bitcoinjs-extensions.js"></script>
+         <script src="js/bitcoinjs-bip38-2.0.2.js"></script>
          <script src="js/segwit-parameters.js"></script>
          <script src="js/ethereumjs-util.js"></script>
          <script src="js/ripple-util.js"></script>
+         <script src="js/bchaddrjs-0.2.1.js"></script>
          <script src="js/sjcl-bip39.js"></script>
          <script src="js/wordlist_english.js"></script>
          <script src="js/wordlist_japanese.js"></script>
          <script src="js/wordlist_chinese_traditional.js"></script>
          <script src="js/wordlist_french.js"></script>
          <script src="js/wordlist_italian.js"></script>
+         <script src="js/wordlist_korean.js"></script>
          <script src="js/jsbip39.js"></script>
          <script src="js/biginteger.js"></script>
          <script src="js/zxcvbn.js"></script>
          <script src="js/entropy.js"></script>
 +        <script src="js/stellar-util.js"></script>
          <script src="js/index.js"></script>
      </body>
  </html>
diff --combined src/js/index.js
index b887a67857cc2403131b0f61ed13389131ecaadb,460184881c925611fba16504f06bbe433eee2836..690fff76b4ac11253f23cbd0a0263bff79246794
@@@ -23,6 -23,7 +23,7 @@@
      var generationProcesses = [];
  
      var DOM = {};
+     DOM.privacyScreenToggle = $(".privacy-screen-toggle");
      DOM.network = $(".network");
      DOM.bip32Client = $("#bip32-client");
      DOM.phraseNetwork = $("#network-phrase");
@@@ -38,7 -39,9 +39,9 @@@
      DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
      DOM.entropyBinary = DOM.entropyContainer.find(".binary");
      DOM.entropyWordIndexes = DOM.entropyContainer.find(".word-indexes");
+     DOM.entropyChecksum = DOM.entropyContainer.find(".checksum");
      DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
+     DOM.entropyWeakEntropyOverrideWarning = DOM.entropyContainer.find(".weak-entropy-override-warning");
      DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning");
      DOM.phrase = $(".phrase");
      DOM.passphrase = $(".passphrase");
@@@ -75,6 -78,8 +78,8 @@@
      DOM.bip49accountXprv = $("#bip49 .account-xprv");
      DOM.bip49accountXpub = $("#bip49 .account-xpub");
      DOM.bip49change = $("#bip49 .change");
+     DOM.bip84unavailable = $("#bip84 .unavailable");
+     DOM.bip84available = $("#bip84 .available");
      DOM.bip84path = $("#bip84-path");
      DOM.bip84purpose = $("#bip84 .purpose");
      DOM.bip84coin = $("#bip84 .coin");
      DOM.bip141path = $("#bip141-path");
      DOM.bip141semantics = $(".bip141-semantics");
      DOM.generatedStrength = $(".generate-container .strength");
+     DOM.generatedStrengthWarning = $(".generate-container .warning");
      DOM.hardenedAddresses = $(".hardened-addresses");
-     DOM.useBitpayAddressesContainer = $(".use-bitpay-addresses-container");
-     DOM.useBitpayAddresses = $(".use-bitpay-addresses");
+     DOM.bitcoinCashAddressTypeContainer = $(".bch-addr-type-container");
+     DOM.bitcoinCashAddressType = $("[name=bch-addr-type]")
+     DOM.useBip38 = $(".use-bip38");
+     DOM.bip38Password = $(".bip38-password");
      DOM.addresses = $(".addresses");
      DOM.csvTab = $("#csv-tab a");
      DOM.csv = $(".csv");
  
      function init() {
          // Events
+         DOM.privacyScreenToggle.on("change", privacyScreenToggled);
+         DOM.generatedStrength.on("change", generatedStrengthChanged);
          DOM.network.on("change", networkChanged);
          DOM.bip32Client.on("change", bip32ClientChanged);
          DOM.useEntropy.on("change", setEntropyVisibility);
          DOM.bip141semantics.on("change", tabChanged);
          DOM.tab.on("shown.bs.tab", tabChanged);
          DOM.hardenedAddresses.on("change", calcForDerivationPath);
+         DOM.useBip38.on("change", calcForDerivationPath);
+         DOM.bip38Password.on("change", calcForDerivationPath);
          DOM.indexToggle.on("click", toggleIndexes);
          DOM.addressToggle.on("click", toggleAddresses);
          DOM.publicKeyToggle.on("click", togglePublicKeys);
          DOM.privateKeyToggle.on("click", togglePrivateKeys);
          DOM.csvTab.on("click", updateCsv);
          DOM.languages.on("click", languageChanged);
-         DOM.useBitpayAddresses.on("change", useBitpayAddressesChange);
+         DOM.bitcoinCashAddressType.on("change", bitcoinCashAddressTypeChange);
          setQrEvents(DOM.showQrEls);
          disableForms();
          hidePending();
  
      // Event handlers
  
+     function generatedStrengthChanged() {
+         var strength = parseInt(DOM.generatedStrength.val());
+         if (strength < 12) {
+             DOM.generatedStrengthWarning.removeClass("hidden");
+         }
+         else {
+             DOM.generatedStrengthWarning.addClass("hidden");
+         }
+     }
      function networkChanged(e) {
          clearDerivedKeys();
          clearAddressesList();
          DOM.litecoinLtubContainer.addClass("hidden");
-         DOM.useBitpayAddressesContainer.addClass("hidden");
+         DOM.bitcoinCashAddressTypeContainer.addClass("hidden");
          var networkIndex = e.target.value;
          var network = networks[networkIndex];
          network.onSelect();
-         if (network.segwitAvailable) {
-             adjustNetworkForSegwit();
-             showSegwitAvailable();
-         }
-         else {
-             showSegwitUnavailable();
-         }
+         adjustNetworkForSegwit();
          if (seed != null) {
              phraseChanged();
          }
          showPending();
          // Don't show segwit if it's selected but network doesn't support it
          if (segwitSelected() && !networkHasSegwit()) {
+             showSegwitUnavailable();
+             hidePending();
              return;
          }
+         showSegwitAvailable();
          // Get the derivation path
          var derivationPath = getDerivationPath();
          var errorText = findDerivationPathErrors(derivationPath);
          }, 50);
      }
  
-     function useBitpayAddressesChange() {
-         setBitcoinCashNetworkValues();
+     function bitcoinCashAddressTypeChange() {
          phraseChanged();
      }
  
          $("td.privkey span").toggleClass("invisible");
      }
  
+     function privacyScreenToggled() {
+         // private-data contains elements added to DOM at runtime
+         // so catch all by adding visual privacy class to the root of the DOM
+         if (DOM.privacyScreenToggle.prop("checked")) {
+             $("body").addClass("visual-privacy");
+         }
+         else {
+             $("body").removeClass("visual-privacy");
+         }
+     }
      // Private methods
  
      function generateRandomPhrase() {
      }
  
      function calcBip32RootKeyFromBase58(rootKeyBase58) {
+         // try parsing with various segwit network params since this extended
+         // key may be from any one of them.
+         if (networkHasSegwit()) {
+             var n = network;
+             if ("baseNetwork" in n) {
+                 n = bitcoinjs.bitcoin.networks[n.baseNetwork];
+             }
+             // try parsing using base network params
+             try {
+                 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n);
+                 return;
+             }
+             catch (e) {}
+             // try parsing using p2wpkh params
+             if ("p2wpkh" in n) {
+                 try {
+                     bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkh);
+                     return;
+                 }
+                 catch (e) {}
+             }
+             // try parsing using p2wpkh-in-p2sh network params
+             if ("p2wpkhInP2sh" in n) {
+                 try {
+                     bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh);
+                     return;
+                 }
+                 catch (e) {}
+             }
+         }
+         // try the network params as currently specified
          bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
      }
  
      }
  
      function validateRootKey(rootKeyBase58) {
+         // try various segwit network params since this extended key may be from
+         // any one of them.
+         if (networkHasSegwit()) {
+             var n = network;
+             if ("baseNetwork" in n) {
+                 n = bitcoinjs.bitcoin.networks[n.baseNetwork];
+             }
+             // try parsing using base network params
+             try {
+                 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n);
+                 return "";
+             }
+             catch (e) {}
+             // try parsing using p2wpkh params
+             if ("p2wpkh" in n) {
+                 try {
+                     bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkh);
+                     return "";
+                 }
+                 catch (e) {}
+             }
+             // try parsing using p2wpkh-in-p2sh network params
+             if ("p2wpkhInP2sh" in n) {
+                 try {
+                     bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh);
+                     return "";
+                 }
+                 catch (e) {}
+             }
+         }
+         // try the network params as currently specified
          try {
              bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
          }
          DOM.extendedPubKey.val(extendedPubKey);
          // Display the addresses and privkeys
          clearAddressesList();
-         displayAddresses(0, 20);
+         var initialAddressCount = parseInt(DOM.rowsToAdd.val());
+         displayAddresses(0, initialAddressCount);
      }
  
      function displayAddresses(start, total) {
          var self = this;
          this.shouldGenerate = true;
          var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
+         var useBip38 = DOM.useBip38.prop("checked");
+         var bip38password = DOM.bip38Password.val();
          var isSegwit = segwitSelected();
          var segwitAvailable = networkHasSegwit();
          var isP2wpkh = p2wpkhSelected();
                  if (!self.shouldGenerate) {
                      return;
                  }
+                 // derive HDkey for this row of the table
                  var key = "NA";
                  if (useHardenedAddresses) {
                      key = bip32ExtendedKey.deriveHardened(index);
                  else {
                      key = bip32ExtendedKey.derive(index);
                  }
-                 var address = key.getAddress().toString();
+                 // bip38 requires uncompressed keys
+                 // see https://github.com/iancoleman/bip39/issues/140#issuecomment-352164035
+                 var keyPair = key.keyPair;
+                 var useUncompressed = useBip38;
+                 if (useUncompressed) {
+                     keyPair = new bitcoinjs.bitcoin.ECPair(keyPair.d, null, { network: network, compressed: false });
+                 }
+                 // get address
+                 var address = keyPair.getAddress().toString();
+                 // get privkey
+                 var hasPrivkey = !key.isNeutered();
                  var privkey = "NA";
-                 if (!key.isNeutered()) {
-                     privkey = key.keyPair.toWIF(network);
+                 if (hasPrivkey) {
+                     privkey = keyPair.toWIF();
+                     // BIP38 encode private key if required
+                     if (useBip38) {
+                         privkey = bitcoinjsBip38.encrypt(keyPair.d.toBuffer(), false, bip38password, function(p) {
+                             console.log("Progressed " + p.percent.toFixed(1) + "% for index " + index);
+                         });
+                     }
                  }
-                 var pubkey = key.getPublicKeyBuffer().toString('hex');
+                 // get pubkey
+                 var pubkey = keyPair.getPublicKeyBuffer().toString('hex');
                  var indexText = getDerivationPath() + "/" + index;
                  if (useHardenedAddresses) {
                      indexText = indexText + "'";
                  }
                  // Ethereum values are different
-                 if (networks[DOM.network.val()].name == "ETH - Ethereum") {
-                     var privKeyBuffer = key.keyPair.d.toBuffer(32);
+                 if ((networks[DOM.network.val()].name == "ETH - Ethereum")
+                     || (networks[DOM.network.val()].name == "ETC - Ethereum Classic")
+                     || (networks[DOM.network.val()].name == "PIRL - Pirl")
+                     || (networks[DOM.network.val()].name == "MIX - MIX")
+                     || (networks[DOM.network.val()].name == "MUSIC - Musicoin")
+                     || (networks[DOM.network.val()].name == "POA - Poa")
+                     || (networks[DOM.network.val()].name == "EXP - Expanse")
+                     || (networks[DOM.network.val()].name == "CLO - Callisto")) {
+                     var privKeyBuffer = keyPair.d.toBuffer(32);
                      privkey = privKeyBuffer.toString('hex');
                      var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
                      var hexAddress = addressBuffer.toString('hex');
                      privkey = ethUtil.addHexPrefix(privkey);
                      pubkey = ethUtil.addHexPrefix(pubkey);
                  }
 +                // Stellar is different
 +                if (networks[DOM.network.val()].name == "XLM - Stellar") {
 +                    var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
 +                    var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
 +                    var path = "m/";
 +                        path += purpose + "'/";
 +                        path += coin + "'/" + index + "'";
 +                    var keypair = stellarUtil.getKeypair(path, seed);
 +                    indexText = path;
 +                    privkey = keypair.secret();
 +                    pubkey = address = keypair.publicKey();
 +                }
                  // Ripple values are different
                  if (networks[DOM.network.val()].name == "XRP - Ripple") {
                      privkey = convertRipplePriv(privkey);
                      address = convertRippleAdrr(address);
                  }
+                 // Bitcoin Cash address format may vary
+                 if (networks[DOM.network.val()].name == "BCH - Bitcoin Cash") {
+                     var bchAddrType = DOM.bitcoinCashAddressType.filter(":checked").val();
+                     if (bchAddrType == "cashaddr") {
+                         address = bchaddr.toCashAddress(address);
+                     }
+                     else if (bchAddrType == "bitpay") {
+                         address = bchaddr.toBitpayAddress(address);
+                     }
+                 }
                  // Segwit addresses are different
                  if (isSegwit) {
                      if (!segwitAvailable) {
              mnemonicLength = parseInt(mnemonicLength);
              var numberOfBits = 32 * mnemonicLength / 3;
              bits = bits.substring(0, numberOfBits);
+             // show warning for weak entropy override
+             if (mnemonicLength / 3 * 32 > entropy.binaryStr.length) {
+                 DOM.entropyWeakEntropyOverrideWarning.removeClass("hidden");
+             }
+             else {
+                 DOM.entropyWeakEntropyOverrideWarning.addClass("hidden");
+             }
+         }
+         else {
+             // hide warning for weak entropy override
+             DOM.entropyWeakEntropyOverrideWarning.addClass("hidden");
          }
          // Discard trailing entropy
          var bitsToUse = Math.floor(bits.length / 32) * 32;
          DOM.phrase.val(phrase);
          // Show the word indexes
          showWordIndexes();
+         // Show the checksum
+         showChecksum();
      }
  
      function clearEntropyFeedback() {
          var entropyTypeStr = getEntropyTypeStr(entropy);
          var wordCount = Math.floor(numberOfBits / 32) * 3;
          var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
+         var spacedBinaryStr = addSpacesEveryElevenBits(entropy.binaryStr);
          DOM.entropyFiltered.html(entropy.cleanHtml);
          DOM.entropyType.text(entropyTypeStr);
          DOM.entropyCrackTime.text(timeToCrack);
          DOM.entropyEventCount.text(entropy.base.ints.length);
          DOM.entropyBits.text(numberOfBits);
          DOM.entropyWordCount.text(wordCount);
-         DOM.entropyBinary.text(entropy.binaryStr);
+         DOM.entropyBinary.text(spacedBinaryStr);
          DOM.entropyBitsPerEvent.text(bitsPerEvent);
          // detect and warn of filtering
          var rawNoSpaces = DOM.entropy.val().replace(/\s/g, "");
      }
  
      function networkHasSegwit() {
-         return networks[DOM.network.val()].segwitAvailable;
+         var n = network;
+         if ("baseNetwork" in network) {
+             n = bitcoinjs.bitcoin.networks[network.baseNetwork];
+         }
+         // check if only p2wpkh params are required
+         if (p2wpkhSelected()) {
+             return "p2wpkh" in n;
+         }
+         // check if only p2wpkh-in-p2sh params are required
+         else if (p2wpkhInP2shSelected()) {
+             return "p2wpkhInP2sh" in n;
+         }
+         // require both if it's unclear which params are required
+         return "p2wpkh" in n && "p2wpkhInP2sh" in n;
      }
  
      function bip49TabSelected() {
      function showSegwitAvailable() {
          DOM.bip49unavailable.addClass("hidden");
          DOM.bip49available.removeClass("hidden");
+         DOM.bip84unavailable.addClass("hidden");
+         DOM.bip84available.removeClass("hidden");
          DOM.bip141unavailable.addClass("hidden");
          DOM.bip141available.removeClass("hidden");
      }
      function showSegwitUnavailable() {
          DOM.bip49available.addClass("hidden");
          DOM.bip49unavailable.removeClass("hidden");
+         DOM.bip84available.addClass("hidden");
+         DOM.bip84unavailable.removeClass("hidden");
          DOM.bip141available.addClass("hidden");
          DOM.bip141unavailable.removeClass("hidden");
      }
  
-     function useBitpayAddresses() {
-         return !(DOM.useBitpayAddresses.prop("checked"));
-     }
-     function setBitcoinCashNetworkValues() {
-         if (useBitpayAddresses()) {
-             network = bitcoinjs.bitcoin.networks.bitcoin;
-         }
-         else {
-             network = bitcoinjs.bitcoin.networks.bitcoinCashBitbpay;
-         }
-     }
      function adjustNetworkForSegwit() {
          // If segwit is selected the xpub/xprv prefixes need to be adjusted
          // to avoid accidentally importing BIP49 xpub to BIP44 watch only
          DOM.entropyWordIndexes.text(wordIndexesStr);
      }
  
+     function showChecksum() {
+         var phrase = DOM.phrase.val();
+         var words = phraseToWordArray(phrase);
+         var checksumBitlength = words.length / 3;
+         var checksum = "";
+         var binaryStr = "";
+         var language = getLanguage();
+         for (var i=words.length-1; i>=0; i--) {
+             var word = words[i];
+             var wordIndex = WORDLISTS[language].indexOf(word);
+             var wordBinary = wordIndex.toString(2);
+             while (wordBinary.length < 11) {
+                 wordBinary = "0" + wordBinary;
+             }
+             var binaryStr = wordBinary + binaryStr;
+             if (binaryStr.length >= checksumBitlength) {
+                 var start = binaryStr.length - checksumBitlength;
+                 var end = binaryStr.length;
+                 checksum = binaryStr.substring(start, end);
+                 // add spaces so the last group is 11 bits, not the first
+                 checksum = checksum.split("").reverse().join("")
+                 checksum = addSpacesEveryElevenBits(checksum);
+                 checksum = checksum.split("").reverse().join("")
+                 break;
+             }
+         }
+         DOM.entropyChecksum.text(checksum);
+     }
      function updateCsv() {
          var tableCsv = "path,address,public key,private key\n";
          var rows = DOM.addresses.find("tr");
          DOM.csv.val(tableCsv);
      }
  
+     function addSpacesEveryElevenBits(binaryStr) {
+         return binaryStr.match(/.{1,11}/g).join(" ");
+     }
      var networks = [
+         {
+             name: "AC - Asiacoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.asiacoin;
+                 setHdCoin(51);
+             },
+         },
+         {
+             name: "ACC - Adcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.adcoin;
+                 setHdCoin(161);
+             },
+         },
+         {
+             name: "AUR - Auroracoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.auroracoin;
+                 setHdCoin(85);
+             },
+         },
          {
              name: "AXE - Axe",
-             segwitAvailable: false,
              onSelect: function() {
                  network = bitcoinjs.bitcoin.networks.axe;
-                 setHdCoin(0);
+                 setHdCoin(4242);
+             },
+               },
+               {
+             name: "ANON - ANON",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.anon;
+                 setHdCoin(220);
+             },
+         },
+         {
+             name: "BCA - Bitcoin Atom",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.atom;
+                 setHdCoin(185);
              },
          },
          {
              name: "BCH - Bitcoin Cash",
-             segwitAvailable: false,
              onSelect: function() {
-                 DOM.useBitpayAddressesContainer.removeClass("hidden");
-                 setBitcoinCashNetworkValues();
+                 DOM.bitcoinCashAddressTypeContainer.removeClass("hidden");
                  setHdCoin(145);
              },
          },
          {
-             name: "BTC - Bitcoin",
-             segwitAvailable: true,
+             name: "BEET - Beetlecoin",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.bitcoin;
-                 setHdCoin(0);
+                 network = bitcoinjs.bitcoin.networks.beetlecoin;
+                 setHdCoin(800);
              },
          },
          {
-             name: "BTC - Bitcoin Testnet",
-             segwitAvailable: true,
+             name: "BELA - Belacoin",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.testnet;
+                 network = bitcoinjs.bitcoin.networks.belacoin;
+                 setHdCoin(73);
+             },
+         },
+         {
+             name: "BLK - BlackCoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.blackcoin;
+                 setHdCoin(10);
+             },
+         },
+         {
+             name: "BND - Blocknode",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.blocknode;
+                 setHdCoin(2941);
+             },
+         },    
+               {
+             name: "tBND - Blocknode Testnet",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.blocknode_testnet;
                  setHdCoin(1);
              },
          },
          {
-             name: "BTG - Bitcoin Gold",
-             segwitAvailable: true,
+             name: "BRIT - Britcoin",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.bgold;
-                 setHdCoin(0);
+                 network = bitcoinjs.bitcoin.networks.britcoin;
+                 setHdCoin(70);
              },
          },
          {
-             name: "CLAM - Clams",
-             segwitAvailable: false,
+             name: "BSD - Bitsend",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.clam;
-                 setHdCoin(23);
+                 network = bitcoinjs.bitcoin.networks.bitsend;
+                 setHdCoin(91);
              },
          },
          {
-             name: "CRW - Crown",
-             segwitAvailable: false,
+             name: "BTA - Bata",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.crown;
-                 setHdCoin(72);
+                 network = bitcoinjs.bitcoin.networks.bata;
+                 setHdCoin(89);
              },
          },
          {
-             name: "DASH - Dash",
-             segwitAvailable: false,
+             name: "BTC - Bitcoin",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.dash;
-                 setHdCoin(5);
+                 network = bitcoinjs.bitcoin.networks.bitcoin;
+                 setHdCoin(0);
              },
          },
          {
-             name: "DASH - Dash Testnet",
-             segwitAvailable: false,
+             name: "BTC - Bitcoin Testnet",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.dashtn;
+                 network = bitcoinjs.bitcoin.networks.testnet;
                  setHdCoin(1);
              },
+         },
+               {
+             name: "BITG - Bitcoin Green",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.bitcoingreen;
+                 setHdCoin(222);
+             },
          },
          {
-             name: "DOGE - Dogecoin",
-             segwitAvailable: false,
+             name: "BTCP - Bitcoin Private",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.dogecoin;
-                 setHdCoin(3);
+                 network = bitcoinjs.bitcoin.networks.bitcoinprivate;
+                 setHdCoin(183);
              },
          },
          {
-             name: "ETH - Ethereum",
-             segwitAvailable: false,
+             name: "BTCZ - Bitcoinz",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.bitcoin;
-                 setHdCoin(60);
+                 network = bitcoinjs.bitcoin.networks.bitcoinz;
+                 setHdCoin(177);
              },
          },
          {
-             name: "FJC - Fujicoin",
-             segwitAvailable: false,
+             name: "BTDX - BitCloud",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.fujicoin;
-                 setHdCoin(75);
+                 network = bitcoinjs.bitcoin.networks.bitcloud;
+                 setHdCoin(218);
              },
          },
          {
-             name: "GAME - GameCredits",
-             segwitAvailable: false,
+             name: "BTG - Bitcoin Gold",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.game;
-                 setHdCoin(101);
+                 network = bitcoinjs.bitcoin.networks.bgold;
+                 setHdCoin(156);
              },
          },
          {
-             name: "JBS - Jumbucks",
-             segwitAvailable: false,
+             name: "BTX - Bitcore",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.jumbucks;
-                 setHdCoin(26);
+                 network = bitcoinjs.bitcoin.networks.bitcore;
+                 setHdCoin(160);
              },
          },
          {
-             name: "KMD - Komodo",
-             bip49available: false,
+             name: "CCN - Cannacoin",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.komodo;
-                 setHdCoin(141);
+                 network = bitcoinjs.bitcoin.networks.cannacoin;
+                 setHdCoin(19);
              },
          },
          {
-             name: "LTC - Litecoin",
-             segwitAvailable: true,
+             name: "CESC - Cryptoescudo",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.litecoin;
-                 setHdCoin(2);
-                 DOM.litecoinLtubContainer.removeClass("hidden");
+                 network = bitcoinjs.bitcoin.networks.cannacoin;
+                 setHdCoin(111);
              },
          },
          {
-             name: "MAZA - Maza",
-             segwitAvailable: false,
+             name: "CDN - Canadaecoin",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.maza;
-                 setHdCoin(13);
+                 network = bitcoinjs.bitcoin.networks.canadaecoin;
+                 setHdCoin(34);
              },
          },
          {
-             name: "MONA - Monacoin",
-             segwitAvailable: true,
+             name: "CLAM - Clams",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.monacoin,
-                 setHdCoin(22);
+                 network = bitcoinjs.bitcoin.networks.clam;
+                 setHdCoin(23);
              },
          },
          {
-             name: "NMC - Namecoin",
+             name: "CLO - Callisto",
              segwitAvailable: false,
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.namecoin;
-                 setHdCoin(7);
+                 network = bitcoinjs.bitcoin.networks.bitcoin;
+                 setHdCoin(820);
              },
          },
          {
-             name: "ONX - Onixcoin",
-             segwitAvailable: false,
+             name: "CLUB - Clubcoin",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.onixcoin;
-                 setHdCoin(174);
+                 network = bitcoinjs.bitcoin.networks.clubcoin;
+                 setHdCoin(79);
              },
          },
          {
-             name: "PIVX - PIVX",
-             segwitAvailable: false,
+             name: "CMP - Compcoin",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.pivx;
-                 setHdCoin(119);
+                 network = bitcoinjs.bitcoin.networks.compcoin;
+                 setHdCoin(71);
              },
          },
          {
-             name: "PIVX - PIVX Testnet",
-             segwitAvailable: false,
+             name: "CRAVE - Crave",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.pivxtestnet;
-                 setHdCoin(1);
+                 network = bitcoinjs.bitcoin.networks.crave;
+                 setHdCoin(186);
              },
          },
          {
-             name: "PPC - Peercoin",
-             segwitAvailable: false,
+             name: "CRW - Crown",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.peercoin;
-                 setHdCoin(6);
+                 network = bitcoinjs.bitcoin.networks.crown;
+                 setHdCoin(72);
              },
          },
          {
-             name: "SDC - ShadowCash",
-             segwitAvailable: false,
+             name: "DASH - Dash",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.shadow;
-                 setHdCoin(35);
+                 network = bitcoinjs.bitcoin.networks.dash;
+                 setHdCoin(5);
              },
          },
          {
-             name: "SDC - ShadowCash Testnet",
-             segwitAvailable: false,
+             name: "DASH - Dash Testnet",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.shadowtn;
+                 network = bitcoinjs.bitcoin.networks.dashtn;
                  setHdCoin(1);
              },
          },
          {
-             name: "SLM - Slimcoin",
-             segwitAvailable: false,
+             name: "DFC - Defcoin",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.slimcoin;
-                 setHdCoin(63);
+                 network = bitcoinjs.bitcoin.networks.defcoin;
+                 setHdCoin(1337);
              },
          },
          {
-             name: "SLM - Slimcoin Testnet",
-             segwitAvailable: false,
+             name: "DGB - Digibyte",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.slimcointn;
-                 setHdCoin(111);
+                 network = bitcoinjs.bitcoin.networks.digibyte;
+                 setHdCoin(20);
              },
          },
          {
-             name: "USNBT - NuBits",
-             segwitAvailable: false,
+             name: "DGC - Digitalcoin",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.nubits;
-                 setHdCoin(12);
+                 network = bitcoinjs.bitcoin.networks.digitalcoin;
+                 setHdCoin(18);
              },
          },
          {
-             name: "VIA - Viacoin",
-             segwitAvailable: false,
+             name: "DMD - Diamond",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.viacoin;
-                 setHdCoin(14);
+                 network = bitcoinjs.bitcoin.networks.diamond;
+                 setHdCoin(152);
              },
          },
          {
-             name: "VIA - Viacoin Testnet",
-             segwitAvailable: false,
+             name: "DNR - Denarius",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.viacointestnet;
-                 setHdCoin(1);
+                 network = bitcoinjs.bitcoin.networks.denarius;
+                 setHdCoin(116);
              },
          },
          {
-             name: "XLM - Stellar",
+             name: "DOGE - Dogecoin",
              onSelect: function() {
-                 segwitAvailable: false,
-                 network = null;
-                 setHdCoin(148);
+                 network = bitcoinjs.bitcoin.networks.dogecoin;
+                 setHdCoin(3);
              },
          },
          {
-             name: "XMY - Myriadcoin",
-             segwitAvailable: false,
+             name: "ECN - Ecoin",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.myriadcoin;
-                 setHdCoin(90);
+                 network = bitcoinjs.bitcoin.networks.ecoin;
+                 setHdCoin(115);
              },
          },
          {
-             name: "XRP - Ripple",
-             segwitAvailable: false,
+             name: "EDRC - Edrcoin",
              onSelect: function() {
-                 network = bitcoinjs.bitcoin.networks.bitcoin;
-                 setHdCoin(144);
+                 network = bitcoinjs.bitcoin.networks.edrcoin;
+                 setHdCoin(56);
              },
-         }
-     ]
-     var clients = [
+         },
          {
-             name: "Bitcoin Core",
+             name: "EFL - Egulden",
              onSelect: function() {
-                 DOM.bip32path.val("m/0'/0'");
-                 DOM.hardenedAddresses.prop('checked', true);
+                 network = bitcoinjs.bitcoin.networks.egulden;
+                 setHdCoin(78);
              },
          },
          {
-             name: "blockchain.info",
+             name: "EMC2 - Einsteinium",
              onSelect: function() {
-                 DOM.bip32path.val("m/44'/0'/0'");
-                 DOM.hardenedAddresses.prop('checked', false);
+                 network = bitcoinjs.bitcoin.networks.einsteinium;
+                 setHdCoin(41);
              },
          },
          {
-             name: "MultiBit HD",
+             name: "ERC - Europecoin",
              onSelect: function() {
-                 DOM.bip32path.val("m/0'/0");
+                 network = bitcoinjs.bitcoin.networks.europecoin;
+                 setHdCoin(151);
+             },
+         },
+         {
+             name: "ETC - Ethereum Classic",
+             segwitAvailable: false,
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.bitcoin;
+                 setHdCoin(61);
+             },
+         },
+         {
+             name: "ETH - Ethereum",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.bitcoin;
+                 setHdCoin(60);
+             },
+         },
+         {
+             name: "EXCL - Exclusivecoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.exclusivecoin;
+                 setHdCoin(190);
+             },
+         },
+         {
+             name: "EXCC - ExchangeCoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.exchangecoin;
+                 setHdCoin(0);
+             },
+         },
+         {
+             name: "EXP - Expanse",
+             segwitAvailable: false,
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.bitcoin;
+                 setHdCoin(40);
+             },
+         },
+         {
+             name: "FJC - Fujicoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.fujicoin;
+                 setHdCoin(75);
+             },
+         },
+         {
+             name: "FLASH - Flashcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.flashcoin;
+                 setHdCoin(120);
+             },
+         },
+         {
+             name: "FRST - Firstcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.firstcoin;
+                 setHdCoin(167);
+             },
+         },
+         {
+             name: "FTC - Feathercoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.feathercoin;
+                 setHdCoin(8);
+             },
+         },
+         {
+             name: "GAME - GameCredits",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.game;
+                 setHdCoin(101);
+             },
+         },
+         {
+             name: "GBX - Gobyte",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.gobyte;
+                 setHdCoin(176);
+             },
+         },
+         {
+             name: "GCR - GCRCoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.gcr;
+                 setHdCoin(79);
+             },
+         },
+         {
+             name: "GRC - Gridcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.gridcoin;
+                 setHdCoin(84);
+             },
+         },
+         {
+             name: "HNC - Helleniccoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.helleniccoin;
+                 setHdCoin(168);
+             },
+         },
+               {
+             name: "HUSH - Hush",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.hush;
+                 setHdCoin(197);
+             },
+         },
+         {
+             name: "INSN - Insane",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.insane;
+                 setHdCoin(68);
+             },
+         },
+         {
+             name: "IOP - Iop",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.iop;
+                 setHdCoin(66);
+             },
+         },
+         {
+             name: "IXC - Ixcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.ixcoin;
+                 setHdCoin(86);
+             },
+         },
+         {
+             name: "JBS - Jumbucks",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.jumbucks;
+                 setHdCoin(26);
+             },
+         },
+         {
+             name: "KMD - Komodo",
+             bip49available: false,
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.komodo;
+                 setHdCoin(141);
+             },
+         },
+         {
+             name: "KOBO - Kobocoin",
+             bip49available: false,
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.kobocoin;
+                 setHdCoin(196);
+             },
+         },
+         {
+             name: "LBC - Library Credits",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.lbry;
+                 setHdCoin(140);
+             },
+         },
+         {
+             name: "LCC - Litecoincash",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.litecoincash;
+                 setHdCoin(192);
+             },
+         },
+         {
+             name: "LDCN - Landcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.landcoin;
+                 setHdCoin(63);
+             },
+         },
+         {
+             name: "LINX - Linx",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.linx;
+                 setHdCoin(114);
+             },
+         },
+         {
+             name: "LTC - Litecoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.litecoin;
+                 setHdCoin(2);
+                 DOM.litecoinLtubContainer.removeClass("hidden");
+             },
+         },
+         {
+             name: "LTZ - LitecoinZ",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.litecoinz;
+                 setHdCoin(221);
+             },
+         },
+         {
+             name: "LYNX - Lynx",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.lynx;
+                 setHdCoin(191);
+             },
+         },
+         {
+             name: "MAZA - Maza",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.maza;
+                 setHdCoin(13);
+             },
+         },
+         {
+             name: "MEC - Megacoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.megacoin;
+                 setHdCoin(217);
+             },
+         },
+         {
+             name: "MIX - MIX",
+             segwitAvailable: false,
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.bitcoin;
+                 setHdCoin(76);
+             },
+         },
+         {
+             name: "MNX - Minexcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.minexcoin;
+                 setHdCoin(182);
+             },
+         },
+         {
+             name: "MONA - Monacoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.monacoin,
+                 setHdCoin(22);
+             },
+         },
+         {
+             name: "MUSIC - Musicoin",
+             segwitAvailable: false,
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.bitcoin;
+                 setHdCoin(184);
+             },
+         },
+         {
+             name: "NAV - Navcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.navcoin;
+                 setHdCoin(130);
+             },
+         },
+         {
+             name: "NEBL - Neblio",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.neblio;
+                 setHdCoin(146);
+             },
+         },
+         {
+             name: "NEOS - Neoscoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.neoscoin;
+                 setHdCoin(25);
+             },
+         },
+         {
+             name: "NLG - Gulden",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.gulden;
+                 setHdCoin(87);
+             },
+         },
+         {
+             name: "NMC - Namecoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.namecoin;
+                 setHdCoin(7);
+             },
+         },
+         {
+             name: "NRG - Energi",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.energi;
+                 setHdCoin(204);
+             },
+         },
+         {
+             name: "NRO - Neurocoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.neurocoin;
+                 setHdCoin(110);
+             },
+         },
+         {
+             name: "NSR - Nushares",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.nushares;
+                 setHdCoin(11);
+             },
+         },
+         {
+             name: "NYC - Newyorkc",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.newyorkc;
+                 setHdCoin(179);
+             },
+         },
+         {
+             name: "NVC - Novacoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.novacoin;
+                 setHdCoin(50);
+             },
+         },
+         {
+             name: "OK - Okcash",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.okcash;
+                 setHdCoin(69);
+             },
+         },
+         {
+             name: "OMNI - Omnicore",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.omnicore;
+                 setHdCoin(200);
+             },
+         },
+         {
+             name: "ONX - Onixcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.onixcoin;
+                 setHdCoin(174);
+             },
+         },
+               {
+             name: "PHR - Phore",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.phore;
+                 setHdCoin(444);
+             },
+         },
+         {
+             name: "PINK - Pinkcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.pinkcoin;
+                 setHdCoin(117);
+             },
+         },
+         {
+             name: "PIRL - Pirl",
+             segwitAvailable: false,
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.bitcoin;
+                 setHdCoin(164);
+             },
+         },
+         {
+             name: "PIVX - PIVX",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.pivx;
+                 setHdCoin(119);
+             },
+         },
+         {
+             name: "PIVX - PIVX Testnet",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.pivxtestnet;
+                 setHdCoin(1);
+             },
+         },
+         {
+             name: "POA - Poa",
+             segwitAvailable: false,
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.bitcoin;
+                 setHdCoin(178);
+             },
+         },
+         {
+             name: "POSW - POSWcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.poswcoin;
+                 setHdCoin(47);
+             },
+         },
+         {
+             name: "POT - Potcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.potcoin;
+                 setHdCoin(81);
+             },
+         },
+         {
+             name: "PPC - Peercoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.peercoin;
+                 setHdCoin(6);
+             },
+         },
+               {
+             name: "PRJ - ProjectCoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.projectcoin;
+                 setHdCoin(533);
+             },
+         },
+         {
+             name: "PSB - Pesobit",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.pesobit;
+                 setHdCoin(62);
+             },
+         },
+         {
+             name: "PUT - Putincoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.putincoin;
+                 setHdCoin(122);
+             },
+         },
+         {
+             name: "RVN - Ravencoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.ravencoin;
+                 setHdCoin(175);
+             },
+         },
+         {
+             name: "RBY - Rubycoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.rubycoin;
+                 setHdCoin(16);
+             },
+         },
+         {
+             name: "RDD - Reddcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.reddcoin;
+                 setHdCoin(4);
+             },
+         },
+         {
+             name: "RVR - RevolutionVR",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.revolutionvr;
+                 setHdCoin(129);
+             },
+         },
+         {
+           name: "SAFE - Safecoin",
+           onSelect: function() {
+               network = bitcoinjs.bitcoin.networks.safecoin;
+               setHdCoin(19165);
+             },
+         },
+       {
+           name: "SLS - Salus",
+           onSelect: function() {
+               network = bitcoinjs.bitcoin.networks.salus;
+               setHdCoin(63);
+             },
+         },
+         {
+             name: "SDC - ShadowCash",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.shadow;
+                 setHdCoin(35);
+             },
+         },
+         {
+             name: "SDC - ShadowCash Testnet",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.shadowtn;
+                 setHdCoin(1);
+             },
+         },
+         {
+             name: "SLM - Slimcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.slimcoin;
+                 setHdCoin(63);
+             },
+         },
+         {
+             name: "SLM - Slimcoin Testnet",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.slimcointn;
+                 setHdCoin(111);
+             },
+         },
+         {
+             name: "SLR - Solarcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.solarcoin;
+                 setHdCoin(58);
+             },
+         },
+         {
+             name: "SMLY - Smileycoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.smileycoin;
+                 setHdCoin(59);
+             },
+         },
+         {
+             name: "STASH - Stash",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.stash;
+                 setHdCoin(0xC0C0);
+             },
+         },
+         {
+             name: "STASH - Stash Testnet",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.stashtn;
+                 setHdCoin(0xCAFE);
+             },
+         },
+         {
+             name: "STRAT - Stratis",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.stratis;
+                 setHdCoin(105);
+             },
+         },
+         {
+             name: "TSTRAT - Stratis Testnet",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.stratistest;
+                 setHdCoin(105);
+             },
+         },
+         {
+             name: "SYS - Syscoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.syscoin;
+                 setHdCoin(57);
+             },
+         },
+         {
+             name: "THC - Hempcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.hempcoin;
+                 setHdCoin(113);
+             },
+         },
+         {
+             name: "TOA - Toa",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.toa;
+                 setHdCoin(159);
+             },
+         },
+         {
+             name: "USC - Ultimatesecurecash",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.ultimatesecurecash;
+                 setHdCoin(112);
+             },
+         },
+         {
+             name: "USNBT - NuBits",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.nubits;
+                 setHdCoin(12);
+             },
+         },
+         {
+             name: "UNO - Unobtanium",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.unobtanium;
+                 setHdCoin(92);
+             },
+         },
+         {
+             name: "VASH - Vpncoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.vpncoin;
+                 setHdCoin(33);
+             },
+         },
+         {
+             name: "VIA - Viacoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.viacoin;
+                 setHdCoin(14);
+             },
+         },
+         {
+             name: "VIA - Viacoin Testnet",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.viacointestnet;
+                 setHdCoin(1);
+             },
+         },
+         {
+             name: "VIVO - Vivo",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.vivo;
+                 setHdCoin(166);
+             },
+         },
+         {
+             name: "VTC - Vertcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.vertcoin;
+                 setHdCoin(28);
+             },
+         },
+         {
+             name: "WC - Wincoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.wincoin;
+                 setHdCoin(181);
+             },
+         },
+               {
+             name: "XAX - Artax",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.artax;
+                 setHdCoin(219);
+             },
+         },
+         {
+             name: "XBC - Bitcoinplus",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.bitcoinplus;
+                 setHdCoin(65);
+             },
+         },
++        {
++            name: "XLM - Stellar",
++            onSelect: function() {
++                segwitAvailable: false,
++                network = null;
++                setHdCoin(148);
++            },
++        },
+         {
+             name: "XMY - Myriadcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.myriadcoin;
+                 setHdCoin(90);
+             },
+         },
+         {
+             name: "XRP - Ripple",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.bitcoin;
+                 setHdCoin(144);
+             },
+         },
+         {
+             name: "XVC - Vcash",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.vcash;
+                 setHdCoin(127);
+             },
+         },
+         {
+             name: "XVG - Verge",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.verge;
+                 setHdCoin(77);
+             },
+         },
+         {
+             name: "XUEZ - Xuez",
+             segwitAvailable: false,
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.xuez;
+                 setHdCoin(225);
+             },
+         },
+         {
+             name: "XWC - Whitecoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.whitecoin;
+                 setHdCoin(155);
+             },
+         },
+         {
+             name: "XZC - Zcoin",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.zcoin;
+                 setHdCoin(136);
+             },
+         },
+         {
+             name: "ZCL - Zclassic",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.zclassic;
+                 setHdCoin(147);
+             },
+         },
+         {
+             name: "ZEC - Zcash",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.zcash;
+                 setHdCoin(133);
+             },
+         },
+         {
+             name: "ZEN - Zencash",
+             onSelect: function() {
+                 network = bitcoinjs.bitcoin.networks.zencash;
+                 setHdCoin(121);
+             },
+         },
+     ]
+     var clients = [
+         {
+             name: "Bitcoin Core",
+             onSelect: function() {
+                 DOM.bip32path.val("m/0'/0'");
+                 DOM.hardenedAddresses.prop('checked', true);
+             },
+         },
+         {
+             name: "blockchain.info",
+             onSelect: function() {
+                 DOM.bip32path.val("m/44'/0'/0'");
+                 DOM.hardenedAddresses.prop('checked', false);
+             },
+         },
+         {
+             name: "MultiBit HD",
+             onSelect: function() {
+                 DOM.bip32path.val("m/0'/0");
+                 DOM.hardenedAddresses.prop('checked', false);
+             },
+         },
+         {
+             name: "Coinomi, Ledger",
+             onSelect: function() {
+                 DOM.bip32path.val("m/44'/"+DOM.bip44coin.val()+"'/0'");
                  DOM.hardenedAddresses.prop('checked', false);
              },
          }