diff -crB ./configure.ac ../../komodo-jl777/configure.ac
*** ./configure.ac	2017-01-03 10:40:50.155326332 +0000
--- ../../komodo-jl777/configure.ac	2017-01-03 09:49:08.848505929 +0000
***************
*** 2,8 ****
  AC_PREREQ([2.60])
  define(_CLIENT_VERSION_MAJOR, 1)
  define(_CLIENT_VERSION_MINOR, 0)
! define(_CLIENT_VERSION_REVISION, 0)
  define(_CLIENT_VERSION_BUILD, 50)
  define(_ZC_BUILD_VAL, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, m4_incr(_CLIENT_VERSION_BUILD), m4_eval(_CLIENT_VERSION_BUILD < 50), 1, m4_eval(_CLIENT_VERSION_BUILD - 24), m4_eval(_CLIENT_VERSION_BUILD == 50), 1, , m4_eval(_CLIENT_VERSION_BUILD - 50)))
  define(_CLIENT_VERSION_SUFFIX, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, _CLIENT_VERSION_REVISION-beta$1, m4_eval(_CLIENT_VERSION_BUILD < 50), 1, _CLIENT_VERSION_REVISION-rc$1, m4_eval(_CLIENT_VERSION_BUILD == 50), 1, _CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION-$1)))
--- 2,8 ----
  AC_PREREQ([2.60])
  define(_CLIENT_VERSION_MAJOR, 1)
  define(_CLIENT_VERSION_MINOR, 0)
! define(_CLIENT_VERSION_REVISION, 3)
  define(_CLIENT_VERSION_BUILD, 50)
  define(_ZC_BUILD_VAL, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, m4_incr(_CLIENT_VERSION_BUILD), m4_eval(_CLIENT_VERSION_BUILD < 50), 1, m4_eval(_CLIENT_VERSION_BUILD - 24), m4_eval(_CLIENT_VERSION_BUILD == 50), 1, , m4_eval(_CLIENT_VERSION_BUILD - 50)))
  define(_CLIENT_VERSION_SUFFIX, m4_if(m4_eval(_CLIENT_VERSION_BUILD < 25), 1, _CLIENT_VERSION_REVISION-beta$1, m4_eval(_CLIENT_VERSION_BUILD < 50), 1, _CLIENT_VERSION_REVISION-rc$1, m4_eval(_CLIENT_VERSION_BUILD == 50), 1, _CLIENT_VERSION_REVISION, _CLIENT_VERSION_REVISION-$1)))
Only in ../../komodo-jl777/contrib: bitcoin-cli.bash-completion
diff -crB ./contrib/bitcoind.bash-completion ../../komodo-jl777/contrib/bitcoind.bash-completion
*** ./contrib/bitcoind.bash-completion	2017-01-03 10:40:50.159326534 +0000
--- ../../komodo-jl777/contrib/bitcoind.bash-completion	2017-01-03 09:49:08.848505929 +0000
***************
*** 1,102 ****
! # bash programmable completion for bitcoind(1) and bitcoin-cli(1)
! # Copyright (c) 2012,2014 Christian von Roques <roques@mti.ag>
  # Distributed under the MIT software license, see the accompanying
  # file COPYING or http://www.opensource.org/licenses/mit-license.php.
  
! have bitcoind && {
! 
! # call $bitcoind for RPC
! _bitcoin_rpc() {
!     # determine already specified args necessary for RPC
!     local rpcargs=()
!     for i in ${COMP_LINE}; do
!         case "$i" in
!             -conf=*|-proxy*|-rpc*)
!                 rpcargs=( "${rpcargs[@]}" "$i" )
!                 ;;
!         esac
!     done
!     $bitcoind "${rpcargs[@]}" "$@"
! }
! 
! # Add bitcoin accounts to COMPREPLY
! _bitcoin_accounts() {
!     local accounts
!     accounts=$(_bitcoin_rpc listaccounts | awk '/".*"/ { a=$1; gsub(/"/, "", a); print a}')
!     COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W "$accounts" -- "$cur" ) )
! }
! 
! _bitcoind() {
      local cur prev words=() cword
      local bitcoind
  
!     # save and use original argument to invoke bitcoind
!     # bitcoind might not be in $PATH
      bitcoind="$1"
  
      COMPREPLY=()
      _get_comp_words_by_ref -n = cur prev words cword
  
-     if ((cword > 4)); then
-         case ${words[cword-4]} in
-             listtransactions)
-                 COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
-                 return 0
-                 ;;
-             signrawtransaction)
-                 COMPREPLY=( $( compgen -W "ALL NONE SINGLE ALL|ANYONECANPAY NONE|ANYONECANPAY SINGLE|ANYONECANPAY" -- "$cur" ) )
-                 return 0
-                 ;;
-         esac
-     fi
- 
-     if ((cword > 3)); then
-         case ${words[cword-3]} in
-             addmultisigaddress)
-                 _bitcoin_accounts
-                 return 0
-                 ;;
-             getbalance|gettxout|importaddress|importprivkey|listreceivedbyaccount|listreceivedbyaddress|listsinceblock)
-                 COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
-                 return 0
-                 ;;
-         esac
-     fi
- 
-     if ((cword > 2)); then
-         case ${words[cword-2]} in
-             addnode)
-                 COMPREPLY=( $( compgen -W "add remove onetry" -- "$cur" ) )
-                 return 0
-                 ;;
-             getblock|getrawtransaction|gettransaction|listaccounts|listreceivedbyaccount|listreceivedbyaddress|sendrawtransaction)
-                 COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
-                 return 0
-                 ;;
-             move|setaccount)
-                 _bitcoin_accounts
-                 return 0
-                 ;;
-         esac
-     fi
- 
-     case "$prev" in
-         backupwallet|dumpwallet|importwallet)
-             _filedir
-             return 0
-             ;;
-         getmempool|lockunspent|setgenerate)
-             COMPREPLY=( $( compgen -W "true false" -- "$cur" ) )
-             return 0
-             ;;
-         getaccountaddress|getaddressesbyaccount|getbalance|getnewaddress|getreceivedbyaccount|listtransactions|move|sendfrom|sendmany)
-             _bitcoin_accounts
-             return 0
-             ;;
-     esac
- 
      case "$cur" in
!         -conf=*|-pid=*|-loadblock=*|-wallet=*|-rpcsslcertificatechainfile=*|-rpcsslprivatekeyfile=*)
              cur="${cur#*=}"
              _filedir
              return 0
--- 1,21 ----
! # bash programmable completion for bitcoind(1) and bitcoin-qt(1)
! # Copyright (c) 2012-2016 The Bitcoin Core developers
  # Distributed under the MIT software license, see the accompanying
  # file COPYING or http://www.opensource.org/licenses/mit-license.php.
  
! _zcashd() {
      local cur prev words=() cword
      local bitcoind
  
!     # save and use original argument to invoke bitcoind for -help
!     # it might not be in $PATH
      bitcoind="$1"
  
      COMPREPLY=()
      _get_comp_words_by_ref -n = cur prev words cword
  
      case "$cur" in
!         -conf=*|-pid=*|-loadblock=*|-rootcertificates=*|-rpccookiefile=*|-wallet=*|-rpcsslcertificatechainfile=*|-rpcsslprivatekeyfile=*)
              cur="${cur#*=}"
              _filedir
              return 0
***************
*** 110,129 ****
              return 0
              ;;
          *)
-             local helpopts commands
  
!             # only parse --help if senseful
              if [[ -z "$cur" || "$cur" =~ ^- ]]; then
!                 helpopts=$($bitcoind --help 2>&1 | awk '$1 ~ /^-/ { sub(/=.*/, "="); print $1 }' )
              fi
  
-             # only parse help if senseful
-             if [[ -z "$cur" || "$cur" =~ ^[a-z] ]]; then
-                 commands=$(_bitcoin_rpc help 2>/dev/null | awk '$1 ~ /^[a-z]/ { print $1; }')
-             fi
- 
-             COMPREPLY=( $( compgen -W "$helpopts $commands" -- "$cur" ) )
- 
              # Prevent space if an argument is desired
              if [[ $COMPREPLY == *= ]]; then
                  compopt -o nospace
--- 29,42 ----
              return 0
              ;;
          *)
  
!             # only parse -help if senseful
              if [[ -z "$cur" || "$cur" =~ ^- ]]; then
!                 local helpopts
!                 helpopts=$($bitcoind -help 2>&1 | awk '$1 ~ /^-/ { sub(/=.*/, "="); print $1 }' )
!                 COMPREPLY=( $( compgen -W "$helpopts" -- "$cur" ) )
              fi
  
              # Prevent space if an argument is desired
              if [[ $COMPREPLY == *= ]]; then
                  compopt -o nospace
***************
*** 131,140 ****
              return 0
              ;;
      esac
! }
! 
! complete -F _bitcoind bitcoind bitcoin-cli
! }
  
  # Local variables:
  # mode: shell-script
--- 44,51 ----
              return 0
              ;;
      esac
! } &&
! complete -F _zcashd zcashd
  
  # Local variables:
  # mode: shell-script
Only in ../../komodo-jl777/contrib: bitcoin-tx.bash-completion
diff -crB ./contrib/DEBIAN/changelog ../../komodo-jl777/contrib/DEBIAN/changelog
*** ./contrib/DEBIAN/changelog	2017-01-03 10:40:50.155326332 +0000
--- ../../komodo-jl777/contrib/DEBIAN/changelog	2017-01-03 09:49:08.848505929 +0000
***************
*** 1,3 ****
--- 1,21 ----
+ zcash (1.0.3) jessie; urgency=medium
+ 
+   * 1.0.3 release.
+ 
+  -- Zcash Company <team@z.cash>  Wed, 17 Nov 2016 15:56:00 -0700
+ 
+ zcash (1.0.2) jessie; urgency=medium
+ 
+   * 1.0.2 release.
+ 
+  -- Zcash Company <team@z.cash>  Mon, 07 Nov 2016 19:01:35 -0600
+ 
+ zcash (1.0.1) jessie; urgency=medium
+ 
+   * 1.0.1 release.
+ 
+  -- Zcash Company <team@z.cash>  Thu, 03 Nov 2016 23:21:09 -0500
+ 
  zcash (1.0.0-sprout) jessie; urgency=medium
  
    * 1.0.0 release.
diff -crB ./contrib/DEBIAN/control ../../komodo-jl777/contrib/DEBIAN/control
*** ./contrib/DEBIAN/control	2017-01-03 10:40:50.155326332 +0000
--- ../../komodo-jl777/contrib/DEBIAN/control	2017-01-03 09:49:08.848505929 +0000
***************
*** 10,16 ****
  Vcs-Git: https://github.com/zcash/zcash.git
  Vcs-Browser: https://github.com/zcash/zcash
  Package: zcash
! Version: 1.0.0-sprout
  Architecture: amd64
  Depends: libgomp1
  Description: An implementation of the "Zerocash" protocol.
--- 10,16 ----
  Vcs-Git: https://github.com/zcash/zcash.git
  Vcs-Browser: https://github.com/zcash/zcash
  Package: zcash
! Version: 1.0.3
  Architecture: amd64
  Depends: libgomp1
  Description: An implementation of the "Zerocash" protocol.
diff -crB ./contrib/DEBIAN/manpages/zcash-cli.1 ../../komodo-jl777/contrib/DEBIAN/manpages/zcash-cli.1
*** ./contrib/DEBIAN/manpages/zcash-cli.1	2017-01-03 10:40:50.155326332 +0000
--- ../../komodo-jl777/contrib/DEBIAN/manpages/zcash-cli.1	2017-01-03 09:49:08.848505929 +0000
***************
*** 1,9 ****
  .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.47.3.
! .TH ZCASH-CLI "1" "October 2016" "Zcash RPC client version v1.0.0-409dcb7" "User Commands"
  .SH NAME
  zcash-cli \- RPC client for the Zcash daemon
  .SH DESCRIPTION
! Zcash RPC client version v1.0.0
  .SS "Usage:"
  .TP
  zcash\-cli [options] <command> [params]
--- 1,9 ----
  .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.47.3.
! .TH ZCASH-CLI "1" "November 2016" "Zcash RPC client version v1.0.3" "User Commands"
  .SH NAME
  zcash-cli \- RPC client for the Zcash daemon
  .SH DESCRIPTION
! Zcash RPC client version v1.0.3
  .SS "Usage:"
  .TP
  zcash\-cli [options] <command> [params]
diff -crB ./contrib/DEBIAN/manpages/zcashd.1 ../../komodo-jl777/contrib/DEBIAN/manpages/zcashd.1
*** ./contrib/DEBIAN/manpages/zcashd.1	2017-01-03 10:40:50.155326332 +0000
--- ../../komodo-jl777/contrib/DEBIAN/manpages/zcashd.1	2017-01-03 09:49:08.848505929 +0000
***************
*** 1,9 ****
  .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.47.3.
! .TH ZCASHD "1" "October 2016" "Zcash Daemon version v1.0.0-409dcb7" "User Commands"
  .SH NAME
  zcashd \- Network daemon for interacting with the Zcash blockchain
  .SH DESCRIPTION
! Zcash Daemon version v1.0.0
  .SS "Usage:"
  .TP
  zcashd [options]
--- 1,9 ----
  .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.47.3.
! .TH ZCASHD "1" "November 2016" "Zcash Daemon version v1.0.3" "User Commands"
  .SH NAME
  zcashd \- Network daemon for interacting with the Zcash blockchain
  .SH DESCRIPTION
! Zcash Daemon version v1.0.3
  .SS "Usage:"
  .TP
  zcashd [options]
***************
*** 62,68 ****
  .HP
  \fB\-par=\fR<n>
  .IP
! Set the number of script verification threads (\fB\-4\fR to 16, 0 = auto, <0 =
  leave that many cores free, default: 0)
  .HP
  \fB\-pid=\fR<file>
--- 62,68 ----
  .HP
  \fB\-par=\fR<n>
  .IP
! Set the number of script verification threads (\fB\-8\fR to 16, 0 = auto, <0 =
  leave that many cores free, default: 0)
  .HP
  \fB\-pid=\fR<file>
diff -crB ./contrib/gitian-descriptors/gitian-linux.yml ../../komodo-jl777/contrib/gitian-descriptors/gitian-linux.yml
*** ./contrib/gitian-descriptors/gitian-linux.yml	2017-01-03 10:40:50.159326534 +0000
--- ../../komodo-jl777/contrib/gitian-descriptors/gitian-linux.yml	2017-01-03 09:49:08.848505929 +0000
***************
*** 1,5 ****
  ---
! name: "zcash-1.0.0"
  enable_cache: true
  distro: "debian"
  suites:
--- 1,5 ----
  ---
! name: "zcash-1.0.3"
  enable_cache: true
  distro: "debian"
  suites:
diff -crB ./depends/packages/miniupnpc.mk ../../komodo-jl777/depends/packages/miniupnpc.mk
*** ./depends/packages/miniupnpc.mk	2017-01-03 10:40:50.179327547 +0000
--- ../../komodo-jl777/depends/packages/miniupnpc.mk	2017-01-03 09:49:08.848505929 +0000
***************
*** 3,8 ****
--- 3,9 ----
  $(package)_download_path=http://miniupnp.free.fr/files
  $(package)_file_name=$(package)-$($(package)_version).tar.gz
  $(package)_sha256_hash=d434ceb8986efbe199c5ca53f90ed53eab290b1e6d0530b717eb6fa49d61f93b
+ $(package)_patches=fix-solaris-compilation.patch strlen-before-memcmp.patch patch-strlen-patch.patch
  
  define $(package)_set_vars
  $(package)_build_opts=CC="$($(package)_cc)"
***************
*** 14,20 ****
  define $(package)_preprocess_cmds
    mkdir dll && \
    sed -e 's|MINIUPNPC_VERSION_STRING \"version\"|MINIUPNPC_VERSION_STRING \"$($(package)_version)\"|' -e 's|OS/version|$(host)|' miniupnpcstrings.h.in > miniupnpcstrings.h && \
!   sed -i.old "s|miniupnpcstrings.h: miniupnpcstrings.h.in wingenminiupnpcstrings|miniupnpcstrings.h: miniupnpcstrings.h.in|" Makefile.mingw
  endef
  
  define $(package)_build_cmds
--- 15,24 ----
  define $(package)_preprocess_cmds
    mkdir dll && \
    sed -e 's|MINIUPNPC_VERSION_STRING \"version\"|MINIUPNPC_VERSION_STRING \"$($(package)_version)\"|' -e 's|OS/version|$(host)|' miniupnpcstrings.h.in > miniupnpcstrings.h && \
!   sed -i.old "s|miniupnpcstrings.h: miniupnpcstrings.h.in wingenminiupnpcstrings|miniupnpcstrings.h: miniupnpcstrings.h.in|" Makefile.mingw && \
!   patch -p2 < $($(package)_patch_dir)/fix-solaris-compilation.patch && \
!   patch -p2 < $($(package)_patch_dir)/strlen-before-memcmp.patch && \
!   patch -p2 < $($(package)_patch_dir)/patch-strlen-patch.patch
  endef
  
  define $(package)_build_cmds
Only in ../../komodo-jl777/depends/patches: miniupnpc
Only in ../../komodo-jl777/doc: authors.md
diff -crB ./doc/developer-notes.md ../../komodo-jl777/doc/developer-notes.md
*** ./doc/developer-notes.md	2017-01-03 10:40:50.191328153 +0000
--- ../../komodo-jl777/doc/developer-notes.md	2017-01-03 09:49:08.848505929 +0000
***************
*** 102,108 ****
  If the code is behaving strangely, take a look in the debug.log file in the data directory;
  error and debugging messages are written there.
  
! The -debug=... command-line option controls debugging; running with just -debug will turn
  on all categories (and give you a very large debug.log file).
  
  The Qt code routes qDebug() output to debug.log under category "qt": run with -debug=qt
--- 102,108 ----
  If the code is behaving strangely, take a look in the debug.log file in the data directory;
  error and debugging messages are written there.
  
! The -debug=... command-line option controls debugging; running with just -debug or -debug=1 will turn
  on all categories (and give you a very large debug.log file).
  
  The Qt code routes qDebug() output to debug.log under category "qt": run with -debug=qt
diff -crB ./doc/payment-api.md ../../komodo-jl777/doc/payment-api.md
*** ./doc/payment-api.md	2017-01-03 10:40:50.191328153 +0000
--- ../../komodo-jl777/doc/payment-api.md	2017-01-03 09:49:08.848505929 +0000
***************
*** 29,35 ****
  RPC calls by category:
  
  * Accounting: z_getbalance, z_gettotalbalance
! * Addresses : z_getnewaddress, z_listaddresses
  * Keys : z_exportkey, z_importkey, z_exportwallet, z_importwallet
  * Operation: z_getoperationresult, z_getoperationstatus, z_listoperationids
  * Payment : z_listreceivedbyaddress, z_sendmany
--- 29,35 ----
  RPC calls by category:
  
  * Accounting: z_getbalance, z_gettotalbalance
! * Addresses : z_getnewaddress, z_listaddresses, z_validateaddress
  * Keys : z_exportkey, z_importkey, z_exportwallet, z_importwallet
  * Operation: z_getoperationresult, z_getoperationstatus, z_listoperationids
  * Payment : z_listreceivedbyaddress, z_sendmany
***************
*** 55,60 ****
--- 55,61 ----
  --- | --- | ---
  z_getnewaddress | | Return a new zaddr for sending and receiving payments. The spending key for this zaddr will be added to the node’s wallet.<br><br>Output:<br>zN68D8hSs3...
  z_listaddresses | | Returns a list of all the zaddrs in this node’s wallet for which you have a spending key.<br><br>Output:<br>{ [“z123…”, “z456...”, “z789...”] }
+ z_validateaddress | | Return information about a given zaddr.<br><br>Output:<br>{"isvalid" : true,<br>"address" : "zcWsmq...",<br>"payingkey" : "f5bb3c...",<br>"transmissionkey" : "7a58c7...",<br>"ismine" : true}
  
  ### Key Management
  
***************
*** 70,76 ****
  Command | Parameters | Description
  --- | --- | ---
  z_listreceivedbyaddress<br> | zaddr [minconf=1] | Return a list of amounts received by a zaddr belonging to the node’s wallet.<br><br>Optionally set the minimum number of confirmations which a received amount must have in order to be included in the result.  Use 0 to count unconfirmed transactions.<br><br>Output:<br>[{<br>“txid”: “4a0f…”,<br>“amount”: 0.54,<br>“memo”:”F0FF…”,}, {...}, {...}<br>]
! z_sendmany<br> | fromaddress amounts [minconf=1] | _This is an Asynchronous RPC call_<br><br>Send funds from an address to multiple outputs.  The address can be either a taddr or a zaddr.<br><br>Amounts is a list containing key/value pairs corresponding to the addresses and amount to pay.  Each output address can be in taddr or zaddr format.<br><br>When sending to a zaddr, you also have the option of attaching a memo in hexadecimal format.<br><br>**NOTE:**When sending coinbase funds to a zaddr, the node's wallet does not allow any change. Put another way, spending a partial amount of a coinbase utxo is not allowed. This is not a consensus rule but a local wallet rule due to the current implementation of z_sendmany. In future, this rule may be removed.<br><br>Example of Outputs parameter:<br>[{“address”:”t123…”, “amount”:0.005},<br>,{“address”:”z010…”,”amount”:0.03, “memo”:”f508af…”}]<br><br>Optionally set the minimum number of confirmations which a private or transparent transaction must have in order to be used as an input.<br><br>The transaction fee will be determined by the node’s wallet.  Any transparent change will be sent to a new transparent address.  Any private change will be sent back to the zaddr being used as the source of funds.<br><br>Returns an operationid.  You use the operationid value with z_getoperationstatus and z_getoperationresult to obtain the result of sending funds, which if successful, will be a txid.
  
  ### Operations
  
--- 71,77 ----
  Command | Parameters | Description
  --- | --- | ---
  z_listreceivedbyaddress<br> | zaddr [minconf=1] | Return a list of amounts received by a zaddr belonging to the node’s wallet.<br><br>Optionally set the minimum number of confirmations which a received amount must have in order to be included in the result.  Use 0 to count unconfirmed transactions.<br><br>Output:<br>[{<br>“txid”: “4a0f…”,<br>“amount”: 0.54,<br>“memo”:”F0FF…”,}, {...}, {...}<br>]
! z_sendmany<br> | fromaddress amounts [minconf=1] [fee=0.0001] | _This is an Asynchronous RPC call_<br><br>Send funds from an address to multiple outputs.  The address can be either a taddr or a zaddr.<br><br>Amounts is a list containing key/value pairs corresponding to the addresses and amount to pay.  Each output address can be in taddr or zaddr format.<br><br>When sending to a zaddr, you also have the option of attaching a memo in hexadecimal format.<br><br>**NOTE:**When sending coinbase funds to a zaddr, the node's wallet does not allow any change. Put another way, spending a partial amount of a coinbase utxo is not allowed. This is not a consensus rule but a local wallet rule due to the current implementation of z_sendmany. In future, this rule may be removed.<br><br>Example of Outputs parameter:<br>[{“address”:”t123…”, “amount”:0.005},<br>,{“address”:”z010…”,”amount”:0.03, “memo”:”f508af…”}]<br><br>Optionally set the minimum number of confirmations which a private or transparent transaction must have in order to be used as an input.<br><br>Optionally set a transaction fee, which by default is 0.0001 ZEC.<br><br>Any transparent change will be sent to a new transparent address.  Any private change will be sent back to the zaddr being used as the source of funds.<br><br>Returns an operationid.  You use the operationid value with z_getoperationstatus and z_getoperationresult to obtain the result of sending funds, which if successful, will be a txid.
  
  ### Operations
  
***************
*** 97,99 ****
--- 98,168 ----
  z_getoperationresult <br>| [operationids] | Return OperationStatus JSON objects for all completed operations the node is currently aware of, and then remove the operation from memory.<br><br>Operationids is an optional array to filter which operations you want to receive status objects for.<br><br>Output is a list of operation status objects, where the status is either "failed", "cancelled" or "success".<br>[<br>{“operationid”: “opid-11ee…”,<br>“status”: “cancelled”},<br>{“operationid”: “opid-9876”, “status”: ”failed”},<br>{“operationid”: “opid-0e0e”,<br>“status”:”success”,<br>“execution_time”:”25”,<br>“result”: {“txid”:”af3887654…”,...}<br>},<br>]
  z_getoperationstatus <br>| [operationids] | Return OperationStatus JSON objects for all operations the node is currently aware of.<br><br>Operationids is an optional array to filter which operations you want to receive status objects for.<br><br>Output is a list of operation status objects.<br>[<br>{“operationid”: “opid-12ee…”,<br>“status”: “queued”},<br>{“operationid”: “opd-098a…”, “status”: ”executing”},<br>{“operationid”: “opid-9876”, “status”: ”failed”}<br>]<br><br>When the operation succeeds, the status object will also include the result.<br><br>{“operationid”: “opid-0e0e”,<br>“status”:”success”,<br>“execution_time”:”25”,<br>“result”: {“txid”:”af3887654…”,...}<br>}
  z_listoperationids <br>| [state] | Return a list of operationids for all operations which the node is currently aware of.<br><br>State is an optional string parameter to filter the operations you want listed by their state.  Acceptable parameter values are ‘queued’, ‘executing’, ‘success’, ‘failed’, ‘cancelled’.<br><br>[“opid-0e0e…”, “opid-1af4…”, … ]
+ 
+ ## Asynchronous RPC call Error Codes
+ 
+ Zcash error codes are defined in https://github.com/zcash/zcash/blob/master/src/rpcprotocol.h
+ 
+ ### z_sendmany error codes
+ 
+ RPC_INVALID_PARAMETER (-8) | _Invalid, missing or duplicate parameter_
+ ---------------------------| -------------------------------------------------
+ "Minconf cannot be negative" | Cannot accept negative minimum confirmation number.
+ "Minimum number of confirmations cannot be less than 0" | Cannot accept negative minimum confirmation number.
+ "From address parameter missing" | Missing an address to send funds from.
+ "No recipients" | Missing recipient addresses.
+ "Memo must be in hexadecimal format" | Encrypted memo field data must be in hexadecimal format.
+ "Memo size of __ is too big, maximum allowed is __ " | Encrypted memo field data exceeds maximum size of 512 bytes.
+ "From address does not belong to this node, zaddr spending key not found." | Sender address spending key not found.
+ "Invalid parameter, expected object" | Expected object.
+ "Invalid parameter, unknown key: __" | Unknown key.
+ "Invalid parameter, expected valid size" | Invalid size.
+ "Invalid parameter, expected hex txid" | Invalid txid.
+ "Invalid parameter, vout must be positive" | Invalid vout.
+ "Invalid parameter, duplicated address" | Address is duplicated.
+ "Invalid parameter, amounts array is empty" | Amounts array is empty.
+ "Invalid parameter, unknown key" | Key not found.
+ "Invalid parameter, unknown address format" | Unknown address format.
+ "Invalid parameter, size of memo" | Invalid memo field size.
+ "Invalid parameter, amount must be positive" | Invalid or negative amount.
+ "Invalid parameter, too many zaddr outputs" | z_address outputs exceed maximum allowed.
+ "Invalid parameter, expected memo data in hexadecimal format" | Encrypted memo field is not in hexadecimal format.
+ "Invalid parameter, size of memo is larger than maximum allowed __ " | Encrypted memo field data exceeds maximum size of 512 bytes.
+ 
+ 
+ RPC_INVALID_ADDRESS_OR_KEY (-5) | _Invalid address or key_
+ --------------------------------| ---------------------------
+ "Invalid from address, no spending key found for zaddr" | z_address spending key not found.
+ "Invalid output address, not a valid taddr."            | Transparent output address is invalid.
+ "Invalid from address, should be a taddr or zaddr."     | Sender address is invalid.
+ "From address does not belong to this node, zaddr spending key not found."  | Sender address spending key not found.
+ 
+ 
+ RPC_WALLET_INSUFFICIENT_FUNDS (-6) | _Not enough funds in wallet or account_
+ -----------------------------------| ------------------------------------------
+ "Insufficient funds, no UTXOs found for taddr from address." | Insufficient funds for sending address.
+ "Could not find any non-coinbase UTXOs to spend. Coinbase UTXOs can only be sent to a single zaddr recipient." | Must send Coinbase UTXO to a single z_address.
+ "Could not find any non-coinbase UTXOs to spend." | No available non-coinbase UTXOs.
+ "Insufficient funds, no unspent notes found for zaddr from address." | Insufficient funds for sending address.
+ "Insufficient transparent funds, have __, need __ plus fee __" | Insufficient funds from transparent address.
+ "Insufficient protected funds, have __, need __ plus fee __" | Insufficient funds from shielded address.
+ 
+ RPC_WALLET_ERROR (-4) | _Unspecified problem with wallet_
+ ----------------------| -------------------------------------
+ "Could not find previous JoinSplit anchor" | Try restarting node with `-reindex`.
+ "Error decrypting output note of previous JoinSplit: __"  |
+ "Could not find witness for note commitment" | Try restarting node with `-reindex`.
+ "Witness for note commitment is null" | Missing witness for note commitement.
+ "Witness for spendable note does not have same anchor as change input" | Invalid anchor for spendable note witness.
+ "Not enough funds to pay miners fee" | Retry with sufficient funds.
+ "Missing hex data for raw transaction" | Raw transaction data is null.
+ "Missing hex data for signed transaction" | Hex value for signed transaction is null.
+ "Send raw transaction did not return an error or a txid." |
+ 
+ RPC_WALLET_ENCRYPTION_FAILED (-16)                                       | _Failed to encrypt the wallet_
+ -------------------------------------------------------------------------| -------------------------------------
+ "Failed to sign transaction"                                             | Transaction was not signed, sign transaction and retry.
+ 
+ RPC_WALLET_KEYPOOL_RAN_OUT (-12)                                         | _Keypool ran out, call keypoolrefill first_
+ -------------------------------------------------------------------------| -----------------------------------------------
+ "Could not generate a taddr to use as a change address"                  | Call keypoolrefill and retry.
diff -crB ./doc/release-notes/release-notes-0.11.2.z6.md ../../komodo-jl777/doc/release-notes/release-notes-0.11.2.z6.md
*** ./doc/release-notes/release-notes-0.11.2.z6.md	2017-01-03 10:40:50.191328153 +0000
--- ../../komodo-jl777/doc/release-notes/release-notes-0.11.2.z6.md	2017-01-03 09:49:08.848505929 +0000
***************
*** 1,19 ****
! Jack Grigg:
        Equihash: Only compare the first n/(k+1) bits when sorting.
        Randomise the nonce in the block header.
        Clear mempool before using it for benchmark test, fix parameter name.
        Fix memory leak in large tx benchmark.
  
! Sean Bowe:
        Increase block size to 2MB and update performance test.
        Make sigop limit `20000` just as in Bitcoin, ignoring our change to the blocksize limit.
        Remove the mainnet checkpoints.
        Fix performance test for block verification.
        Make `validatelargetx` test more accurate.
  
! Taylor Hornby:
        Add example mock test of CheckTransaction.
  
! aniemerg:
        Suppress Libsnark Debugging Info.
- 
--- 1,18 ----
! Jack Grigg (4):
        Equihash: Only compare the first n/(k+1) bits when sorting.
        Randomise the nonce in the block header.
        Clear mempool before using it for benchmark test, fix parameter name.
        Fix memory leak in large tx benchmark.
  
! Sean Bowe (5):
        Increase block size to 2MB and update performance test.
        Make sigop limit `20000` just as in Bitcoin, ignoring our change to the blocksize limit.
        Remove the mainnet checkpoints.
        Fix performance test for block verification.
        Make `validatelargetx` test more accurate.
  
! Taylor Hornby (1):
        Add example mock test of CheckTransaction.
  
! aniemerg (1):
        Suppress Libsnark Debugging Info.
diff -crB ./doc/release-notes/release-notes-0.11.2.z9.md ../../komodo-jl777/doc/release-notes/release-notes-0.11.2.z9.md
*** ./doc/release-notes/release-notes-0.11.2.z9.md	2017-01-03 10:40:50.191328153 +0000
--- ../../komodo-jl777/doc/release-notes/release-notes-0.11.2.z9.md	2017-01-03 09:49:08.848505929 +0000
***************
*** 1,5 ****
! 
! Sean Bowe:
        Change memo field size and relocate `ciphertexts` field of JoinSplit description.
        Implement zkSNARK compression.
        Perform curve parameter initialization at start of gtest suite.
--- 1,4 ----
! Sean Bowe (6):
        Change memo field size and relocate `ciphertexts` field of JoinSplit description.
        Implement zkSNARK compression.
        Perform curve parameter initialization at start of gtest suite.
***************
*** 7,13 ****
        Enable MONTGOMERY_OUTPUT everywhere.
        Update proving/verifying keys.
  
! Jack Grigg:
        Add support for spending keys to the basic key store.
        Merge AddSpendingKeyPaymentAddress into AddSpendingKey to simplify API.
        Add methods for byte array expansion and compression.
--- 6,12 ----
        Enable MONTGOMERY_OUTPUT everywhere.
        Update proving/verifying keys.
  
! Jack Grigg (11):
        Add support for spending keys to the basic key store.
        Merge AddSpendingKeyPaymentAddress into AddSpendingKey to simplify API.
        Add methods for byte array expansion and compression.
***************
*** 20,26 ****
        Add separate lock for SpendingKey key store operations.
        Test conversion between solution indices and minimal representation.
  
! Daira Hopwood:
        Move bigint arithmetic implementations to libsnark.
        Add mostly-static checks on consistency of Equihash parameters, MAX_HEADERS_RESULTS, and MAX_PROTOCOL_MESSAGE_LENGTH.
        Change some asserts in equihash.cpp to be static.
--- 19,25 ----
        Add separate lock for SpendingKey key store operations.
        Test conversion between solution indices and minimal representation.
  
! Daira Hopwood (6):
        Move bigint arithmetic implementations to libsnark.
        Add mostly-static checks on consistency of Equihash parameters, MAX_HEADERS_RESULTS, and MAX_PROTOCOL_MESSAGE_LENGTH.
        Change some asserts in equihash.cpp to be static.
***************
*** 28,57 ****
        Increment version numbers for z9 release.
        Add these release notes for z9.
  
! Taylor Hornby:
        Disable hardening when building for coverage reports.
        Upgrade libsodium for AVX2-detection bugfix.
        Fix inconsistent optimization flags; single source of truth.
        Add -fwrapv -fno-strict-aliasing; fix libzcash flags.
        Use libsodium's s < L check, instead checking that libsodium checks that.
  
! Simon Liu:
        Fixes #1193 so that during verification benchmarking it does not unncessarily create thousands of CTransaction objects.
        Closes #701 by adding documentation about the Payment RPC interface.
        Add note about zkey and encrypted wallets.
  
! Gaurav Rana:
        Update zcash-cli stop message.
  
! Tom Ritter:
        Clarify comment about nonce space for Note Encryption.
  
! Robert C. Seacord:
        Memory safety and correctness fixes found in NCC audit.
  
! Patrick Strateman (merged by Taylor Hornby):
        Pull in some DoS mitigations from upstream. (#1258)
  
! Wladimir J. van der Laan:
        net: correctly initialize nMinPingUsecTime.
- 
--- 27,55 ----
        Increment version numbers for z9 release.
        Add these release notes for z9.
  
! Taylor Hornby (5):
        Disable hardening when building for coverage reports.
        Upgrade libsodium for AVX2-detection bugfix.
        Fix inconsistent optimization flags; single source of truth.
        Add -fwrapv -fno-strict-aliasing; fix libzcash flags.
        Use libsodium's s < L check, instead checking that libsodium checks that.
  
! Simon Liu (3):
        Fixes #1193 so that during verification benchmarking it does not unncessarily create thousands of CTransaction objects.
        Closes #701 by adding documentation about the Payment RPC interface.
        Add note about zkey and encrypted wallets.
  
! Gaurav Rana (1):
        Update zcash-cli stop message.
  
! Tom Ritter (1):
        Clarify comment about nonce space for Note Encryption.
  
! Robert C. Seacord (1):
        Memory safety and correctness fixes found in NCC audit.
  
! Patrick Strateman (1):
        Pull in some DoS mitigations from upstream. (#1258)
  
! Wladimir J. van der Laan (1):
        net: correctly initialize nMinPingUsecTime.
Only in ../../komodo-jl777/doc/release-notes: release-notes-1.0.1.md
Only in ../../komodo-jl777/doc/release-notes: release-notes-1.0.2.md
Only in ../../komodo-jl777/doc/release-notes: release-notes-1.0.3.md
diff -crB ./doc/release-process.md ../../komodo-jl777/doc/release-process.md
*** ./doc/release-process.md	2017-01-03 10:40:50.191328153 +0000
--- ../../komodo-jl777/doc/release-process.md	2017-01-03 09:49:08.848505929 +0000
***************
*** 38,43 ****
--- 38,45 ----
      contrib/DEBIAN/control
      contrib/gitian-descriptors/gitian-linux.yml
  
+     Build and commit to update versions, and then perform the following commands:
+ 
      help2man -n "RPC client for the Zcash daemon" src/zcash-cli > contrib/DEBIAN/manpages/zcash-cli.1
      help2man -n "Network daemon for interacting with the Zcash blockchain" src/zcashd > contrib/DEBIAN/manpages/zcashd.1
  
***************
*** 57,66 ****
  
  ### B2. Write release notes
  
! git shortlog helps a lot, for example:
  
!     $ git shortlog --no-merges v${ZCASH_RELEASE_PREV}..HEAD \
!         > ./doc/release-notes/release-notes-${ZCASH_RELEASE}.md
  
  Update the Debian package changelog:
  
--- 59,67 ----
  
  ### B2. Write release notes
  
! Run the release-notes.py script to generate release notes and update authors.md file. For example:
  
!     $ python zcutil/release-notes.py --version $ZCASH_RELEASE
  
  Update the Debian package changelog:
  
diff -crB ./doc/security-warnings.md ../../komodo-jl777/doc/security-warnings.md
*** ./doc/security-warnings.md	2017-01-03 10:40:50.191328153 +0000
--- ../../komodo-jl777/doc/security-warnings.md	2017-01-03 09:49:08.848505929 +0000
***************
*** 35,44 ****
    from the earlier issue).
  
  - We were concerned about the resistance of the algorithm used to derive wallet
!   encryption keys (inherited from Bitcoin) to dictionary attacks by a powerful
!   attacker. If and when we re-enable wallet encryption, it is likely to be with
!   a modern passphrase-based key derivation algorithm designed for greater
!   resistance to dictionary attack, such as Argon2i.
  
  You should use full-disk encryption (or encryption of your home directory) to
  protect your wallet at rest, and should assume (even unprivileged) users who are
--- 35,44 ----
    from the earlier issue).
  
  - We were concerned about the resistance of the algorithm used to derive wallet
!   encryption keys (inherited from [Bitcoin](https://bitcoin.org/en/secure-your-wallet))
!   to dictionary attacks by a powerful attacker. If and when we re-enable wallet 
!   encryption, it is likely to be with a modern passphrase-based key derivation 
!   algorithm designed for greater resistance to dictionary attack, such as Argon2i.
  
  You should use full-disk encryption (or encryption of your home directory) to
  protect your wallet at rest, and should assume (even unprivileged) users who are
diff -crB ./doc/tor.md ../../komodo-jl777/doc/tor.md
*** ./doc/tor.md	2017-01-03 10:40:50.191328153 +0000
--- ../../komodo-jl777/doc/tor.md	2017-01-03 09:49:08.848505929 +0000
***************
*** 18,24 ****
  	-proxy=ip:port  Set the proxy server. If SOCKS5 is selected (default), this proxy
  	                server will be used to try to reach .onion addresses as well.
  
! 	-onion=ip:port  Set the proxy server to use for tor hidden services. You do not
  	                need to set this if it's the same as -proxy. You can use -noonion
  	                to explicitly disable access to hidden service.
  
--- 18,24 ----
  	-proxy=ip:port  Set the proxy server. If SOCKS5 is selected (default), this proxy
  	                server will be used to try to reach .onion addresses as well.
  
! 	-onion=ip:port  Set the proxy server to use for Tor hidden services. You do not
  	                need to set this if it's the same as -proxy. You can use -noonion
  	                to explicitly disable access to hidden service.
  
diff -crB ./Dockerfile ../../komodo-jl777/Dockerfile
*** ./Dockerfile	2017-01-03 10:40:50.151326129 +0000
--- ../../komodo-jl777/Dockerfile	2017-01-03 09:49:08.848505929 +0000
***************
*** 1,15 ****
! FROM ubuntu:16.04
! MAINTAINER Mihail Fedorov <mit-license@fedorov.net>
! 
! # All the stuff
! # And clean out packages, keep space minimal
! RUN apt-get -y update && \
!     apt-get -y upgrade && \
!     apt-get -y install build-essential pkg-config libc6-dev m4 g++-multilib autoconf libtool ncurses-dev \
!     unzip python zlib1g-dev wget bsdmainutils automake libboost-all-dev libssl-dev libprotobuf-dev \
!     protobuf-compiler libqt4-dev libqrencode-dev libdb++-dev software-properties-common libcurl4-openssl-dev && \
!     apt-get clean && \
!     rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
  
  ADD ./ /komodo
  ENV HOME /komodo
--- 1,5 ----
! FROM kolobus/ubuntu:komodo
! MAINTAINER Mihail Fedorov <tech@fedorov.net>
  
  ADD ./ /komodo
  ENV HOME /komodo
***************
*** 19,25 ****
  RUN cd /komodo && \
      ./autogen.sh && \
      ./configure --with-incompatible-bdb --with-gui || true && \
!     ./zcutil/build.sh -j4
  
  # Unknown stuff goes here
  
--- 9,15 ----
  RUN cd /komodo && \
      ./autogen.sh && \
      ./configure --with-incompatible-bdb --with-gui || true && \
!     ./zcutil/build.sh -j$(nproc)
  
  # Unknown stuff goes here
  
diff -crB ./.git/config ../../komodo-jl777/.git/config
*** ./.git/config	2017-01-03 10:40:50.131325117 +0000
--- ../../komodo-jl777/.git/config	2017-01-03 09:49:08.884507813 +0000
***************
*** 4,11 ****
  	bare = false
  	logallrefupdates = true
  [remote "origin"]
! 	url = https://github.com/j-cimb-barker/komodo.git
  	fetch = +refs/heads/*:refs/remotes/origin/*
  [branch "master"]
  	remote = origin
  	merge = refs/heads/master
--- 4,14 ----
  	bare = false
  	logallrefupdates = true
  [remote "origin"]
! 	url = https://github.com/jl777/komodo.git
  	fetch = +refs/heads/*:refs/remotes/origin/*
  [branch "master"]
  	remote = origin
  	merge = refs/heads/master
+ [branch "dev"]
+ 	remote = origin
+ 	merge = refs/heads/dev
diff -crB ./.git/HEAD ../../komodo-jl777/.git/HEAD
*** ./.git/HEAD	2017-01-03 10:40:50.131325117 +0000
--- ../../komodo-jl777/.git/HEAD	2017-01-03 09:49:08.884507813 +0000
***************
*** 1 ****
! ref: refs/heads/master
--- 1 ----
! ref: refs/heads/dev
Binary files ./.git/index and ../../komodo-jl777/.git/index differ
diff -crB ./.git/logs/HEAD ../../komodo-jl777/.git/logs/HEAD
*** ./.git/logs/HEAD	2017-01-03 10:40:50.131325117 +0000
--- ../../komodo-jl777/.git/logs/HEAD	2017-01-03 09:49:08.884507813 +0000
***************
*** 1 ****
! 0000000000000000000000000000000000000000 d03fbd981fce86504b78d2a9582e4da988d59823 joel <joel@abigail> 1483440050 +0000	clone: from https://github.com/j-cimb-barker/komodo.git
--- 1,2 ----
! 0000000000000000000000000000000000000000 d03fbd981fce86504b78d2a9582e4da988d59823 joel <joel@abigail> 1483436901 +0000	clone: from https://github.com/jl777/komodo.git
! d03fbd981fce86504b78d2a9582e4da988d59823 26ac06c4f5a6b4dc3163b36a1e5d24bfa7eccbd2 joel <joel@abigail> 1483436948 +0000	checkout: moving from master to dev
Only in ../../komodo-jl777/.git/logs/refs/heads: dev
diff -crB ./.git/logs/refs/heads/master ../../komodo-jl777/.git/logs/refs/heads/master
*** ./.git/logs/refs/heads/master	2017-01-03 10:40:50.131325117 +0000
--- ../../komodo-jl777/.git/logs/refs/heads/master	2017-01-03 09:48:21.598032424 +0000
***************
*** 1 ****
! 0000000000000000000000000000000000000000 d03fbd981fce86504b78d2a9582e4da988d59823 joel <joel@abigail> 1483440050 +0000	clone: from https://github.com/j-cimb-barker/komodo.git
--- 1 ----
! 0000000000000000000000000000000000000000 d03fbd981fce86504b78d2a9582e4da988d59823 joel <joel@abigail> 1483436901 +0000	clone: from https://github.com/jl777/komodo.git
diff -crB ./.git/logs/refs/remotes/origin/HEAD ../../komodo-jl777/.git/logs/refs/remotes/origin/HEAD
*** ./.git/logs/refs/remotes/origin/HEAD	2017-01-03 10:40:50.131325117 +0000
--- ../../komodo-jl777/.git/logs/refs/remotes/origin/HEAD	2017-01-03 09:48:21.598032424 +0000
***************
*** 1 ****
! 0000000000000000000000000000000000000000 d03fbd981fce86504b78d2a9582e4da988d59823 joel <joel@abigail> 1483440050 +0000	clone: from https://github.com/j-cimb-barker/komodo.git
--- 1 ----
! 0000000000000000000000000000000000000000 d03fbd981fce86504b78d2a9582e4da988d59823 joel <joel@abigail> 1483436901 +0000	clone: from https://github.com/jl777/komodo.git
Only in ./.git/objects/pack: pack-12e7bdf654b29f95604673fb1b3ee01a9bd52369.idx
Only in ./.git/objects/pack: pack-12e7bdf654b29f95604673fb1b3ee01a9bd52369.pack
Only in ../../komodo-jl777/.git/objects/pack: pack-3d08e40e89111c75a81ccd6099e05e09fd0e0f08.idx
Only in ../../komodo-jl777/.git/objects/pack: pack-3d08e40e89111c75a81ccd6099e05e09fd0e0f08.pack
diff -crB ./.git/packed-refs ../../komodo-jl777/.git/packed-refs
*** ./.git/packed-refs	2017-01-03 10:40:50.131325117 +0000
--- ../../komodo-jl777/.git/packed-refs	2017-01-03 09:48:21.598032424 +0000
***************
*** 2,10 ****
  fcd361184f09fe17546698b0d13caddac5b63500 refs/remotes/origin/PoS
  730a5006cbbfb0607ed93067db1a74d57584eb1f refs/remotes/origin/acspeed
  80259d4b4f193c7c438f3c057ce70af3beb1a099 refs/remotes/origin/auto
! 060c9a92939c62bbedb5fe560bf8ef6856e2b8f1 refs/remotes/origin/beta
  ba9104dd7e9b6ba2b68ad352253ac8f3298092f4 refs/remotes/origin/dPoW
! cb42e5518262235ed4e4dbff43179e0308114d6a refs/remotes/origin/dev
  76b6eacf41395ddd2badd5d5dc3352e603c59df2 refs/remotes/origin/kolo
  bb40eb8b043a1e63c3dc3b1c2e4d0f6e67e771d4 refs/remotes/origin/kolo-dev
  d03fbd981fce86504b78d2a9582e4da988d59823 refs/remotes/origin/master
--- 2,10 ----
  fcd361184f09fe17546698b0d13caddac5b63500 refs/remotes/origin/PoS
  730a5006cbbfb0607ed93067db1a74d57584eb1f refs/remotes/origin/acspeed
  80259d4b4f193c7c438f3c057ce70af3beb1a099 refs/remotes/origin/auto
! f6f296f1acf8c2b177451ed0c9f8660f3a80ec3d refs/remotes/origin/beta
  ba9104dd7e9b6ba2b68ad352253ac8f3298092f4 refs/remotes/origin/dPoW
! 26ac06c4f5a6b4dc3163b36a1e5d24bfa7eccbd2 refs/remotes/origin/dev
  76b6eacf41395ddd2badd5d5dc3352e603c59df2 refs/remotes/origin/kolo
  bb40eb8b043a1e63c3dc3b1c2e4d0f6e67e771d4 refs/remotes/origin/kolo-dev
  d03fbd981fce86504b78d2a9582e4da988d59823 refs/remotes/origin/master
Only in ../../komodo-jl777/.git/refs/heads: dev
diff -crB ./.gitignore ../../komodo-jl777/.gitignore
*** ./.gitignore	2017-01-03 10:40:50.151326129 +0000
--- ../../komodo-jl777/.gitignore	2017-01-03 09:49:08.848505929 +0000
***************
*** 65,70 ****
--- 65,71 ----
  *.a
  *.pb.cc
  *.pb.h
+ .vscode
  
  *.log
  *.trs
diff -crB ./Makefile.am ../../komodo-jl777/Makefile.am
*** ./Makefile.am	2017-01-03 10:40:50.151326129 +0000
--- ../../komodo-jl777/Makefile.am	2017-01-03 09:49:08.848505929 +0000
***************
*** 258,267 ****
  	@qa/pull-tester/run-bitcoind-for-test.sh $(JAVA) -jar $(JAVA_COMPARISON_TOOL) qa/tmp/compTool $(COMPARISON_TOOL_REORG_TESTS) 2>&1
  endif
  
! dist_noinst_SCRIPTS = autogen.sh
  
  EXTRA_DIST = $(top_srcdir)/share/genbuild.sh qa/pull-tester/rpc-tests.sh qa/pull-tester/run-bitcoin-cli qa/rpc-tests qa/zcash $(DIST_DOCS) $(BIN_CHECKS)
  
  CLEANFILES = $(OSX_DMG) $(BITCOIN_WIN_INSTALLER)
  
  .INTERMEDIATE: $(COVERAGE_INFO)
--- 258,271 ----
  	@qa/pull-tester/run-bitcoind-for-test.sh $(JAVA) -jar $(JAVA_COMPARISON_TOOL) qa/tmp/compTool $(COMPARISON_TOOL_REORG_TESTS) 2>&1
  endif
  
! dist_bin_SCRIPTS = zcutil/fetch-params.sh
! dist_noinst_SCRIPTS = autogen.sh zcutil/build-debian-package.sh zcutil/build.sh
  
  EXTRA_DIST = $(top_srcdir)/share/genbuild.sh qa/pull-tester/rpc-tests.sh qa/pull-tester/run-bitcoin-cli qa/rpc-tests qa/zcash $(DIST_DOCS) $(BIN_CHECKS)
  
+ install-exec-hook:
+ 	mv $(DESTDIR)$(bindir)/fetch-params.sh $(DESTDIR)$(bindir)/zcash-fetch-params
+ 
  CLEANFILES = $(OSX_DMG) $(BITCOIN_WIN_INSTALLER)
  
  .INTERMEDIATE: $(COVERAGE_INFO)
Only in .: patches
diff -crB ./qa/pull-tester/rpc-tests.sh ../../komodo-jl777/qa/pull-tester/rpc-tests.sh
*** ./qa/pull-tester/rpc-tests.sh	2017-01-03 10:40:50.195328356 +0000
--- ../../komodo-jl777/qa/pull-tester/rpc-tests.sh	2017-01-03 09:49:08.848505929 +0000
***************
*** 11,16 ****
--- 11,17 ----
  #Run the tests
  
  testScripts=(
+     'wallet_treestate.py'
      'wallet_protectcoinbase.py'
      'wallet.py'
      'wallet_nullifiers.py'
diff -crB ./qa/rpc-tests/httpbasics.py ../../komodo-jl777/qa/rpc-tests/httpbasics.py
*** ./qa/rpc-tests/httpbasics.py	2017-01-03 10:40:50.195328356 +0000
--- ../../komodo-jl777/qa/rpc-tests/httpbasics.py	2017-01-03 09:49:08.856506348 +0000
***************
*** 38,50 ****
          conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
          out1 = conn.getresponse().read();
          assert_equal('"error":null' in out1, True)
!         assert_equal(conn.sock!=None, True) #according to http/1.1 connection must still be open!
!         
!         #send 2nd request without closing connection
!         conn.request('POST', '/', '{"method": "getchaintips"}', headers)
!         out2 = conn.getresponse().read();
!         assert_equal('"error":null' in out1, True) #must also response with a correct json-rpc message
!         assert_equal(conn.sock!=None, True) #according to http/1.1 connection must still be open!
          conn.close()
          
          #same should be if we add keep-alive because this should be the std. behaviour
--- 38,46 ----
          conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
          out1 = conn.getresponse().read();
          assert_equal('"error":null' in out1, True)
! 
!         # TODO #1856: Re-enable support for persistent connections.
!         assert_equal(conn.sock!=None, False)
          conn.close()
          
          #same should be if we add keep-alive because this should be the std. behaviour
***************
*** 55,67 ****
          conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
          out1 = conn.getresponse().read();
          assert_equal('"error":null' in out1, True)
!         assert_equal(conn.sock!=None, True) #according to http/1.1 connection must still be open!
!         
!         #send 2nd request without closing connection
!         conn.request('POST', '/', '{"method": "getchaintips"}', headers)
!         out2 = conn.getresponse().read();
!         assert_equal('"error":null' in out1, True) #must also response with a correct json-rpc message
!         assert_equal(conn.sock!=None, True) #according to http/1.1 connection must still be open!
          conn.close()
          
          #now do the same with "Connection: close"
--- 51,59 ----
          conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
          out1 = conn.getresponse().read();
          assert_equal('"error":null' in out1, True)
! 
!         # TODO #1856: Re-enable support for persistent connections.
!         assert_equal(conn.sock!=None, False)
          conn.close()
          
          #now do the same with "Connection: close"
***************
*** 96,102 ****
          conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
          out1 = conn.getresponse().read();
          assert_equal('"error":null' in out1, True)
!         assert_equal(conn.sock!=None, True) #connection must be closed because bitcoind should use keep-alive by default
          
  if __name__ == '__main__':
      HTTPBasicsTest ().main ()
--- 88,97 ----
          conn.request('POST', '/', '{"method": "getbestblockhash"}', headers)
          out1 = conn.getresponse().read();
          assert_equal('"error":null' in out1, True)
! 
!         # TODO #1856: Re-enable support for persistent connections.
!         assert_equal(conn.sock!=None, False)
!         conn.close()
          
  if __name__ == '__main__':
      HTTPBasicsTest ().main ()
diff -crB ./qa/rpc-tests/wallet_protectcoinbase.py ../../komodo-jl777/qa/rpc-tests/wallet_protectcoinbase.py
*** ./qa/rpc-tests/wallet_protectcoinbase.py	2017-01-03 10:40:50.199328558 +0000
--- ../../komodo-jl777/qa/rpc-tests/wallet_protectcoinbase.py	2017-01-03 09:49:08.856506348 +0000
***************
*** 8,14 ****
  from test_framework.util import *
  from time import *
  
! class Wallet2Test (BitcoinTestFramework):
  
      def setup_chain(self):
          print("Initializing test directory "+self.options.tmpdir)
--- 8,14 ----
  from test_framework.util import *
  from time import *
  
! class WalletProtectCoinbaseTest (BitcoinTestFramework):
  
      def setup_chain(self):
          print("Initializing test directory "+self.options.tmpdir)
***************
*** 23,43 ****
          self.is_network_split=False
          self.sync_all()
  
!     def wait_for_operationd_success(self, myopid):
          print('waiting for async operation {}'.format(myopid))
          opids = []
          opids.append(myopid)
!         timeout = 120
          status = None
          for x in xrange(1, timeout):
              results = self.nodes[0].z_getoperationresult(opids)
              if len(results)==0:
                  sleep(1)
              else:
                  status = results[0]["status"]
                  break
          print('...returned status: {}'.format(status))
!         assert_equal("success", status)
  
      def run_test (self):
          print "Mining blocks..."
--- 23,55 ----
          self.is_network_split=False
          self.sync_all()
  
!     # Returns txid if operation was a success or None
!     def wait_and_assert_operationid_status(self, myopid, in_status='success', in_errormsg=None):
          print('waiting for async operation {}'.format(myopid))
          opids = []
          opids.append(myopid)
!         timeout = 300
          status = None
+         errormsg = None
+         txid = None
          for x in xrange(1, timeout):
              results = self.nodes[0].z_getoperationresult(opids)
              if len(results)==0:
                  sleep(1)
              else:
                  status = results[0]["status"]
+                 if status == "failed":
+                     errormsg = results[0]['error']['message']
+                 elif status == "success":
+                     txid = results[0]['result']['txid']
                  break
          print('...returned status: {}'.format(status))
!         assert_equal(in_status, status)
!         if errormsg is not None:
!             assert(in_errormsg is not None)
!             assert_equal(in_errormsg in errormsg, True)
!             print('...returned error: {}'.format(errormsg))
!         return txid
  
      def run_test (self):
          print "Mining blocks..."
***************
*** 94,100 ****
          recipients = []
          recipients.append({"address":myzaddr, "amount": Decimal('20.0') - Decimal('0.0001')})
          myopid = self.nodes[0].z_sendmany(mytaddr, recipients)
!         self.wait_for_operationd_success(myopid)
          self.sync_all()
          self.nodes[1].generate(1)
          self.sync_all()
--- 106,112 ----
          recipients = []
          recipients.append({"address":myzaddr, "amount": Decimal('20.0') - Decimal('0.0001')})
          myopid = self.nodes[0].z_sendmany(mytaddr, recipients)
!         self.wait_and_assert_operationid_status(myopid)
          self.sync_all()
          self.nodes[1].generate(1)
          self.sync_all()
***************
*** 109,116 ****
          recipients = []
          recipients.append({"address":mytaddr, "amount":Decimal('10.0')})
          myopid = self.nodes[0].z_sendmany(myzaddr, recipients)
!         self.wait_for_operationd_success(myopid)
          self.sync_all()
          self.nodes[1].generate(1)
          self.sync_all()
  
--- 121,134 ----
          recipients = []
          recipients.append({"address":mytaddr, "amount":Decimal('10.0')})
          myopid = self.nodes[0].z_sendmany(myzaddr, recipients)
!         mytxid = self.wait_and_assert_operationid_status(myopid)
!         assert(mytxid is not None)
          self.sync_all()
+ 
+         # check that priority of the tx sending from a zaddr is not 0
+         mempool = self.nodes[0].getrawmempool(True)
+         assert(Decimal(mempool[mytxid]['startingpriority']) >= Decimal('1000000000000'))
+ 
          self.nodes[1].generate(1)
          self.sync_all()
  
***************
*** 120,125 ****
--- 138,152 ----
          assert_equal(Decimal(resp["private"]), Decimal('9.9998'))
          assert_equal(Decimal(resp["total"]), Decimal('39.9998'))
  
+         # z_sendmany will return an error if there is transparent change output considered dust.
+         # UTXO selection in z_sendmany sorts in ascending order, so smallest utxos are consumed first.
+         # At this point in time, unspent notes all have a value of 10.0 and standard z_sendmany fee is 0.0001.
+         recipients = []
+         amount = Decimal('10.0') - Decimal('0.00010000') - Decimal('0.00000001')    # this leaves change at 1 zatoshi less than dust threshold
+         recipients.append({"address":self.nodes[0].getnewaddress(), "amount":amount })
+         myopid = self.nodes[0].z_sendmany(mytaddr, recipients)
+         self.wait_and_assert_operationid_status(myopid, "failed", "Insufficient transparent funds, have 10.00, need 0.00000545 more to avoid creating invalid change output 0.00000001 (dust threshold is 0.00000546)")
+ 
          # Send will fail because send amount is too big, even when including coinbase utxos
          errorString = ""
          try:
***************
*** 128,133 ****
--- 155,168 ----
              errorString = e.error['message']
          assert_equal("Insufficient funds" in errorString, True)
  
+         # z_sendmany will fail because of insufficient funds
+         recipients = []
+         recipients.append({"address":self.nodes[1].getnewaddress(), "amount":Decimal('10000.0')})
+         myopid = self.nodes[0].z_sendmany(mytaddr, recipients)
+         self.wait_and_assert_operationid_status(myopid, "failed", "Insufficient transparent funds, have 10.00, need 10000.0001")
+         myopid = self.nodes[0].z_sendmany(myzaddr, recipients)
+         self.wait_and_assert_operationid_status(myopid, "failed", "Insufficient protected funds, have 9.9998, need 10000.0001")
+ 
          # Send will fail because of insufficient funds unless sender uses coinbase utxos
          try:
              self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 21)
***************
*** 135,140 ****
--- 170,227 ----
              errorString = e.error['message']
          assert_equal("Insufficient funds, coinbase funds can only be spent after they have been sent to a zaddr" in errorString, True)
  
+         # Verify that mempools accept tx with joinsplits which have at least the default z_sendmany fee.
+         # If this test passes, it confirms that issue #1851 has been resolved, where sending from
+         # a zaddr to 1385 taddr recipients fails because the default fee was considered too low
+         # given the tx size, resulting in mempool rejection.
+         errorString = ''
+         recipients = []
+         num_t_recipients = 2500
+         amount_per_recipient = Decimal('0.00000546') # dust threshold
+         # Note that regtest chainparams does not require standard tx, so setting the amount to be
+         # less than the dust threshold, e.g. 0.00000001 will not result in mempool rejection.
+         for i in xrange(0,num_t_recipients):
+             newtaddr = self.nodes[2].getnewaddress()
+             recipients.append({"address":newtaddr, "amount":amount_per_recipient})
+         myopid = self.nodes[0].z_sendmany(myzaddr, recipients)
+         try:
+             self.wait_and_assert_operationid_status(myopid)
+         except JSONRPCException as e:
+             print("JSONRPC error: "+e.error['message'])
+             assert(False)
+         except Exception as e:
+             print("Unexpected exception caught during testing: "+str(sys.exc_info()[0]))
+             assert(False)
+ 
+         self.sync_all()
+         self.nodes[1].generate(1)
+         self.sync_all()
+ 
+         # check balance
+         node2balance = amount_per_recipient * num_t_recipients
+         assert_equal(self.nodes[2].getbalance(), node2balance)
+ 
+         # Send will fail because fee is negative
+         try:
+             self.nodes[0].z_sendmany(myzaddr, recipients, 1, -1)
+         except JSONRPCException,e:
+             errorString = e.error['message']
+         assert_equal("Invalid amount" in errorString, True)
+ 
+         # Send will fail because fee is larger than MAX_MONEY
+         try:
+             self.nodes[0].z_sendmany(myzaddr, recipients, 1, Decimal('21000000.00000001'))
+         except JSONRPCException,e:
+             errorString = e.error['message']
+         assert_equal("Invalid amount" in errorString, True)
+ 
+         # Send will fail because fee is larger than sum of outputs
+         try:
+             self.nodes[0].z_sendmany(myzaddr, recipients, 1, (amount_per_recipient * num_t_recipients) + Decimal('0.00000001'))
+         except JSONRPCException,e:
+             errorString = e.error['message']
+         assert_equal("is greater than the sum of outputs" in errorString, True)
+ 
          # Send will succeed because the balance of non-coinbase utxos is 10.0
          try:
              self.nodes[0].sendtoaddress(self.nodes[2].getnewaddress(), 9)
***************
*** 146,152 ****
          self.sync_all()
  
          # check balance
!         assert_equal(self.nodes[2].getbalance(), 9)
  
  if __name__ == '__main__':
!     Wallet2Test ().main ()
--- 233,263 ----
          self.sync_all()
  
          # check balance
!         node2balance = node2balance + 9
!         assert_equal(self.nodes[2].getbalance(), node2balance)
! 
!         # Check that chained joinsplits in a single tx are created successfully.
!         recipients = []
!         num_recipients = 3
!         amount_per_recipient = Decimal('0.002')
!         minconf = 1
!         send_amount = num_recipients * amount_per_recipient
!         custom_fee = Decimal('0.00012345')
!         zbalance = self.nodes[0].z_getbalance(myzaddr)
!         for i in xrange(0,num_recipients):
!             newzaddr = self.nodes[2].z_getnewaddress()
!             recipients.append({"address":newzaddr, "amount":amount_per_recipient})
!         myopid = self.nodes[0].z_sendmany(myzaddr, recipients, minconf, custom_fee)
!         self.wait_and_assert_operationid_status(myopid)
!         self.sync_all()
!         self.nodes[1].generate(1)
!         self.sync_all()
! 
!         # check balances
!         resp = self.nodes[2].z_gettotalbalance()
!         assert_equal(Decimal(resp["private"]), send_amount)
!         resp = self.nodes[0].z_getbalance(myzaddr)
!         assert_equal(Decimal(resp), zbalance - custom_fee - send_amount)
  
  if __name__ == '__main__':
!     WalletProtectCoinbaseTest().main()
diff -crB ./qa/rpc-tests/wallet.py ../../komodo-jl777/qa/rpc-tests/wallet.py
*** ./qa/rpc-tests/wallet.py	2017-01-03 10:40:50.199328558 +0000
--- ../../komodo-jl777/qa/rpc-tests/wallet.py	2017-01-03 09:49:08.856506348 +0000
***************
*** 244,249 ****
--- 244,295 ----
          myvjoinsplits = mytxdetails["vjoinsplit"]
          assert_equal(0, len(myvjoinsplits))
  
+         # z_sendmany is expected to fail if tx size breaks limit
+         myzaddr = self.nodes[0].z_getnewaddress()
+ 
+         recipients = []
+         num_t_recipients = 3000
+         amount_per_recipient = Decimal('0.00000001')
+         errorString = ''
+         for i in xrange(0,num_t_recipients):
+             newtaddr = self.nodes[2].getnewaddress()
+             recipients.append({"address":newtaddr, "amount":amount_per_recipient})
+         try:
+             self.nodes[0].z_sendmany(myzaddr, recipients)
+         except JSONRPCException,e:
+             errorString = e.error['message']
+         assert("Too many outputs, size of raw transaction" in errorString)
+ 
+         recipients = []
+         num_t_recipients = 2000
+         num_z_recipients = 50
+         amount_per_recipient = Decimal('0.00000001')
+         errorString = ''
+         for i in xrange(0,num_t_recipients):
+             newtaddr = self.nodes[2].getnewaddress()
+             recipients.append({"address":newtaddr, "amount":amount_per_recipient})
+         for i in xrange(0,num_z_recipients):
+             newzaddr = self.nodes[2].z_getnewaddress()
+             recipients.append({"address":newzaddr, "amount":amount_per_recipient})
+         try:
+             self.nodes[0].z_sendmany(myzaddr, recipients)
+         except JSONRPCException,e:
+             errorString = e.error['message']
+         assert("size of raw transaction would be larger than limit" in errorString)
+ 
+         recipients = []
+         num_z_recipients = 100
+         amount_per_recipient = Decimal('0.00000001')
+         errorString = ''
+         for i in xrange(0,num_z_recipients):
+             newzaddr = self.nodes[2].z_getnewaddress()
+             recipients.append({"address":newzaddr, "amount":amount_per_recipient})
+         try:
+             self.nodes[0].z_sendmany(myzaddr, recipients)
+         except JSONRPCException,e:
+             errorString = e.error['message']
+         assert("Invalid parameter, too many zaddr outputs" in errorString)
+ 
          # add zaddr to node 2
          myzaddr = self.nodes[2].z_getnewaddress()
  
Only in ../../komodo-jl777/qa/rpc-tests: wallet_treestate.py
diff -crB ./qa/rpc-tests/zcjoinsplit.py ../../komodo-jl777/qa/rpc-tests/zcjoinsplit.py
*** ./qa/rpc-tests/zcjoinsplit.py	2017-01-03 10:40:50.203328760 +0000
--- ../../komodo-jl777/qa/rpc-tests/zcjoinsplit.py	2017-01-03 09:49:08.856506348 +0000
***************
*** 36,41 ****
--- 36,49 ----
          receive_result = self.nodes[0].zcrawreceive(zcsecretkey, joinsplit_result["encryptednote1"])
          assert_equal(receive_result["exists"], True)
  
+         # The pure joinsplit we create should be mined in the next block
+         # despite other transactions being in the mempool.
+         addrtest = self.nodes[0].getnewaddress()
+         for xx in range(0,10):
+             self.nodes[0].generate(1)
+             for x in range(0,50):
+                 self.nodes[0].sendtoaddress(addrtest, 0.01);
+ 
          joinsplit_tx = self.nodes[0].createrawtransaction([], {})
          joinsplit_result = self.nodes[0].zcrawjoinsplit(joinsplit_tx, {receive_result["note"] : zcsecretkey}, {zcaddress: 39.8}, 0, 0.1)
  
diff -crB ./qa/zcash/performance-measurements.sh ../../komodo-jl777/qa/zcash/performance-measurements.sh
*** ./qa/zcash/performance-measurements.sh	2017-01-03 10:40:50.203328760 +0000
--- ../../komodo-jl777/qa/zcash/performance-measurements.sh	2017-01-03 09:49:08.856506348 +0000
***************
*** 88,93 ****
--- 88,99 ----
              validatelargetx)
                  zcash_rpc zcbenchmark validatelargetx 5
                  ;;
+             trydecryptnotes)
+                 zcash_rpc zcbenchmark trydecryptnotes 1000 "${@:3}"
+                 ;;
+             incnotewitnesses)
+                 zcash_rpc zcbenchmark incnotewitnesses 100 "${@:3}"
+                 ;;
              *)
                  zcashd_stop
                  echo "Bad arguments."
***************
*** 116,121 ****
--- 122,133 ----
              verifyequihash)
                  zcash_rpc zcbenchmark verifyequihash 1
                  ;;
+             trydecryptnotes)
+                 zcash_rpc zcbenchmark trydecryptnotes 1 "${@:3}"
+                 ;;
+             incnotewitnesses)
+                 zcash_rpc zcbenchmark incnotewitnesses 1 "${@:3}"
+                 ;;
              *)
                  zcashd_massif_stop
                  echo "Bad arguments."
***************
*** 145,150 ****
--- 157,168 ----
              verifyequihash)
                  zcash_rpc zcbenchmark verifyequihash 1
                  ;;
+             trydecryptnotes)
+                 zcash_rpc zcbenchmark trydecryptnotes 1 "${@:3}"
+                 ;;
+             incnotewitnesses)
+                 zcash_rpc zcbenchmark incnotewitnesses 1 "${@:3}"
+                 ;;
              *)
                  zcashd_valgrind_stop
                  echo "Bad arguments."
diff -crB ./README.md ../../komodo-jl777/README.md
*** ./README.md	2017-01-03 10:40:50.151326129 +0000
--- ../../komodo-jl777/README.md	2017-01-03 09:49:08.848505929 +0000
***************
*** 1,43 ****
- <<<<<<< HEAD
  
- Zcash
- =====
-  
- https://z.cash/
-  
- Where do I begin?
- -----------------
- 
- We have a guide for joining the public testnet: https://github.com/zcash/zcash/wiki/Beta-Guide
- 
- What is Zcash?
- --------------
-  
- Zcash is an implementation of the "Zerocash" protocol. Based on Bitcoin's code, it intends to
- offer a far higher standard of privacy and anonymity through a sophisticiated zero-knowledge
- proving scheme which preserves confidentiality of transaction metadata.
-  
- **Zcash is unfinished and highly experimental.** Use at your own risk.
-  
- Participation in the Zcash project is subject to a [Code of Conduct](code_of_conduct.md).
-  
- =======
- Zcash 1.0.0
- ===========
  
  What is Zcash?
  --------------
  
  [Zcash](https://z.cash/) is an implementation of the "Zerocash" protocol.
  Based on Bitcoin's code, it intends to offer a far higher standard of privacy
! and anonymity through a sophisticated zero-knowledge proving scheme that
! preserves confidentiality of transaction metadata. Technical details are
! available in our [Protocol Specification](https://github.com/zcash/zips/raw/master/protocol/protocol.pdf).
  
  This software is the Zcash client. It downloads and stores the entire history
  of Zcash transactions; depending on the speed of your computer and network
  connection, the synchronization process could take a day or more once the
! block chain has reached a significant size.
  
  Security Warnings
  -----------------
--- 1,18 ----
  
  
  What is Zcash?
  --------------
  
  [Zcash](https://z.cash/) is an implementation of the "Zerocash" protocol.
  Based on Bitcoin's code, it intends to offer a far higher standard of privacy
! through a sophisticated zero-knowledge proving scheme that preserves
! confidentiality of transaction metadata. Technical details are available
! in our [Protocol Specification](https://github.com/zcash/zips/raw/master/protocol/protocol.pdf).
  
  This software is the Zcash client. It downloads and stores the entire history
  of Zcash transactions; depending on the speed of your computer and network
  connection, the synchronization process could take a day or more once the
! blockchain has reached a significant size.
  
  Security Warnings
  -----------------
***************
*** 165,173 ****
  
  Where do I begin?
  -----------------
! 
! We have a guide for joining the public testnet:
! https://github.com/zcash/zcash/wiki/Beta-Guide
  
  ### Need Help?
  
--- 140,147 ----
  
  Where do I begin?
  -----------------
! We have a guide for joining the main Zcash network:
! https://github.com/zcash/zcash/wiki/1.0-User-Guide
  
  ### Need Help?
  
***************
*** 182,188 ****
  --------
  
  Build Zcash along with most dependencies from source by running
! ./zcutil/build.sh. Currently only Linux is supported.
  
  License
  -------
--- 156,162 ----
  --------
  
  Build Zcash along with most dependencies from source by running
! ./zcutil/build.sh. Currently only Linux is officially supported.
  
  License
  -------
diff -crB ./src/assetchains ../../komodo-jl777/src/assetchains
*** ./src/assetchains	2017-01-03 10:40:50.211329166 +0000
--- ../../komodo-jl777/src/assetchains	2017-01-03 09:49:08.856506348 +0000
***************
*** 3,96 ****
  source pubkey.txt
  echo $pubkey
  
! ./komodod -pubkey=$pubkey -ac_name=REVS -ac_supply=1300000 -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=SUPERNET -ac_supply=816061 -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=DEX -ac_supply=999999 -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=PANGEA -ac_supply=999999 -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=JUMBLR -ac_supply=999999 -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=BET -ac_supply=999999 -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=CRYPTO -ac_supply=999999 -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=HODL -ac_supply=9999999 -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=SHARK -ac_supply=1401 -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=BOTS -ac_supply=999999 -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=MGW -ac_supply=999999 -addnode=78.47.196.146 $1 &
  
! ./komodod -pubkey=$pubkey -ac_name=USD -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=EUR -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=JPY -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=GBP -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=AUD -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=CAD -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=CHF -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=NZD -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=CNY -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=RUB -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=MXN -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=BRL -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=INR -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=HKD -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=TRY -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=ZAR -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=PLN -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=NOK -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=SEK -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=DKK -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=CZK -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=HUF -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=ILS -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=KRW -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=MYR -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=PHP -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=RON -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=SGD -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=THB -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=BGN -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=IDR -addnode=78.47.196.146 $1 &
! ./komodod -pubkey=$pubkey -ac_name=HRK -addnode=78.47.196.146 $1 &
! 
! curl --url "http://127.0.0.1:7776" --data "{\"timeout\":60000,\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"REVS\",\"pubkey\":\"$pubkey\"}"
! 
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"SUPERNET\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"DEX\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"PANGEA\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"JUMBLR\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"BET\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"CRYPTO\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"HODL\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"SHARK\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"BOTS\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MGW\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"USD\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"EUR\",\"pubkey\":\"$pubkey\"}"
!  
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"JPY\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"GBP\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"AUD\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"CAD\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"CHF\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"NZD\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"CNY\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"RUB\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MXN\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"BRL\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"INR\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"HKD\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"TRY\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"ZAR\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"PLN\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"NOK\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"SEK\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"DKK\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"CZK\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"HUF\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"ILS\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"KRW\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MYR\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"PHP\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"RON\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"SGD\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"THB\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"BGN\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"IDR\",\"pubkey\":\"$pubkey\"}"
! curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"HRK\",\"pubkey\":\"$pubkey\"}"
  
--- 3,50 ----
  source pubkey.txt
  echo $pubkey
  
! ./komodod -pubkey=$pubkey -ac_name=REVS -ac_supply=1300000 -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=SUPERNET -ac_supply=816061 -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=DEX -ac_supply=999999 -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=PANGEA -ac_supply=999999 -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=JUMBLR -ac_supply=999999 -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=BET -ac_supply=999999 -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=CRYPTO -ac_supply=999999 -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=HODL -ac_supply=9999999 -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=SHARK -ac_supply=1401 -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=BOTS -ac_supply=999999 -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=MGW -ac_supply=999999 -addnode=78.47.196.146 $1 -gen &
  
! ./komodod -pubkey=$pubkey -ac_name=USD -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=EUR -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=JPY -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=GBP -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=AUD -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=CAD -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=CHF -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=NZD -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=CNY -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=RUB -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=MXN -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=BRL -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=INR -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=HKD -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=TRY -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=ZAR -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=PLN -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=NOK -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=SEK -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=DKK -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=CZK -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=HUF -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=ILS -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=KRW -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=MYR -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=PHP -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=RON -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=SGD -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=THB -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=BGN -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=IDR -addnode=78.47.196.146 $1 -gen &
! ./komodod -pubkey=$pubkey -ac_name=HRK -addnode=78.47.196.146 $1 -gen &
  
diff -crB ./src/bitcoind.cpp ../../komodo-jl777/src/bitcoind.cpp
*** ./src/bitcoind.cpp	2017-01-03 10:40:50.215329368 +0000
--- ../../komodo-jl777/src/bitcoind.cpp	2017-01-03 09:49:08.856506348 +0000
***************
*** 41,47 ****
      // Tell the main threads to shutdown.
      while (!fShutdown)
      {
!         MilliSleep(10000);
          komodo_passport_iteration();
          fShutdown = ShutdownRequested();
      }
--- 41,47 ----
      // Tell the main threads to shutdown.
      while (!fShutdown)
      {
!         MilliSleep(16000);
          komodo_passport_iteration();
          fShutdown = ShutdownRequested();
      }
diff -crB ./src/chainparams.cpp ../../komodo-jl777/src/chainparams.cpp
*** ./src/chainparams.cpp	2017-01-03 10:40:50.215329368 +0000
--- ../../komodo-jl777/src/chainparams.cpp	2017-01-03 09:49:08.856506348 +0000
***************
*** 43,48 ****
--- 43,49 ----
      CMainParams()
      {
          strNetworkID = "main";
+         strCurrencyUnits = "KMD";
          consensus.fCoinbaseMustBeProtected = false;//true;
          consensus.nSubsidySlowStartInterval = 20000;
          consensus.nSubsidyHalvingInterval = 840000;
***************
*** 119,129 ****
          checkpointData = (Checkpoints::CCheckpointData)
          {
              boost::assign::map_list_of
!             ( 0, consensus.hashGenesisBlock),
!             genesis.nTime, // * UNIX timestamp of last checkpoint block
!             0,   // * total number of transactions between genesis and last checkpoint
!                  //   (the tx=... number in the SetBestChain debug.log lines)
!             0    // * estimated number of transactions per day after checkpoint
          };
          if ( pthread_create((pthread_t *)malloc(sizeof(pthread_t)),NULL,chainparams_commandline,(void *)&consensus) != 0 )
          {
--- 120,134 ----
          checkpointData = (Checkpoints::CCheckpointData)
          {
              boost::assign::map_list_of
!             (0, consensus.hashGenesisBlock),
!             //(2500, uint256S("0x0e6a3d5a46eba97c4e7618d66a39f115729e1176433c98481124c2bf733aa54e"))
!             //(15000, uint256S("0x00f0bd236790e903321a2d22f85bd6bf8a505f6ef4eddb20458a65d37e14d142")),
!             //(100000, uint256S("0x0f02eb1f3a4b89df9909fec81a4bd7d023e32e24e1f5262d9fc2cc36a715be6f")),
!             1481120910,     // * UNIX timestamp of last checkpoint block
!             110415,         // * total number of transactions between genesis and last checkpoint
!                             //   (the tx=... number in the SetBestChain debug.log lines)
!             4240            // * estimated number of transactions per day after checkpoint
!                             //   total number of tx / (checkpoint block height / (24 * 24))
          };
          if ( pthread_create((pthread_t *)malloc(sizeof(pthread_t)),NULL,chainparams_commandline,(void *)&consensus) != 0 )
          {
***************
*** 160,165 ****
--- 165,171 ----
  public:
      CTestNetParams() {
          strNetworkID = "test";
+         strCurrencyUnits = "TAZ";
          consensus.nMajorityEnforceBlockUpgrade = 51;
          consensus.nMajorityRejectBlockOutdated = 75;
          consensus.nMajorityWindow = 400;
***************
*** 222,227 ****
--- 228,234 ----
  public:
      CRegTestParams() {
          strNetworkID = "regtest";
+         strCurrencyUnits = "REG";
          consensus.fCoinbaseMustBeProtected = false;
          consensus.nSubsidySlowStartInterval = 0;
          consensus.nSubsidyHalvingInterval = 150;
diff -crB ./src/chainparams.h ../../komodo-jl777/src/chainparams.h
*** ./src/chainparams.h	2017-01-03 10:40:50.215329368 +0000
--- ../../komodo-jl777/src/chainparams.h	2017-01-03 09:49:08.856506348 +0000
***************
*** 69,74 ****
--- 69,75 ----
      int64_t PruneAfterHeight() const { return nPruneAfterHeight; }
      unsigned int EquihashN() const { return nEquihashN; }
      unsigned int EquihashK() const { return nEquihashK; }
+     std::string CurrencyUnits() const { return strCurrencyUnits; }
      /** Make miner stop after a block is found. In RPC, don't return until nGenProcLimit blocks are generated */
      bool MineBlocksOnDemand() const { return fMineBlocksOnDemand; }
      /** In the future use NetworkIDString() for RPC fields */
***************
*** 107,112 ****
--- 108,114 ----
      std::vector<CDNSSeedData> vSeeds;
      std::vector<unsigned char> base58Prefixes[MAX_BASE58_TYPES];
      std::string strNetworkID;
+     std::string strCurrencyUnits;
      CBlock genesis;
      std::vector<SeedSpec6> vFixedSeeds;
      bool fRequireRPCPassword = false;
diff -crB ./src/clientversion.h ../../komodo-jl777/src/clientversion.h
*** ./src/clientversion.h	2017-01-03 10:40:50.215329368 +0000
--- ../../komodo-jl777/src/clientversion.h	2017-01-03 09:49:08.856506348 +0000
***************
*** 16,22 ****
  //! These need to be macros, as clientversion.cpp's and bitcoin*-res.rc's voodoo requires it
  #define CLIENT_VERSION_MAJOR 1
  #define CLIENT_VERSION_MINOR 0
! #define CLIENT_VERSION_REVISION 0
  #define CLIENT_VERSION_BUILD 50
  
  //! Set to true for release, false for prerelease or test build
--- 16,22 ----
  //! These need to be macros, as clientversion.cpp's and bitcoin*-res.rc's voodoo requires it
  #define CLIENT_VERSION_MAJOR 1
  #define CLIENT_VERSION_MINOR 0
! #define CLIENT_VERSION_REVISION 3
  #define CLIENT_VERSION_BUILD 50
  
  //! Set to true for release, false for prerelease or test build
diff -crB ./src/coins.cpp ../../komodo-jl777/src/coins.cpp
*** ./src/coins.cpp	2017-01-03 10:40:50.215329368 +0000
--- ../../komodo-jl777/src/coins.cpp	2017-01-03 09:49:08.856506348 +0000
***************
*** 6,11 ****
--- 6,12 ----
  
  #include "memusage.h"
  #include "random.h"
+ #include "version.h"
  
  #include <assert.h>
  
***************
*** 176,186 ****
      // case restoring the "old" anchor during a reorg must
      // have no effect.
      if (currentRoot != newrt) {
!         CAnchorsMap::iterator ret = cacheAnchors.insert(std::make_pair(currentRoot, CAnchorsCacheEntry())).first;
  
!         ret->second.entered = false;
!         ret->second.flags = CAnchorsCacheEntry::DIRTY;
  
          hashAnchor = newrt;
      }
  }
--- 177,196 ----
      // case restoring the "old" anchor during a reorg must
      // have no effect.
      if (currentRoot != newrt) {
!         // Bring the current best anchor into our local cache
!         // so that its tree exists in memory.
!         {
!             ZCIncrementalMerkleTree tree;
!             assert(GetAnchorAt(currentRoot, tree));
!         }
  
!         // Mark the anchor as unentered, removing it from view
!         cacheAnchors[currentRoot].entered = false;
  
+         // Mark the cache entry as dirty so it's propagated
+         cacheAnchors[currentRoot].flags = CAnchorsCacheEntry::DIRTY;
+ 
+         // Mark the new root as the best anchor
          hashAnchor = newrt;
      }
  }
***************
*** 303,318 ****
              CAnchorsMap::iterator parent_it = cacheAnchors.find(child_it->first);
  
              if (parent_it == cacheAnchors.end()) {
!                 if (child_it->second.entered) {
!                     // Parent doesn't have an entry, but child has a new commitment root.
! 
!                     CAnchorsCacheEntry& entry = cacheAnchors[child_it->first];
!                     entry.entered = true;
!                     entry.tree = child_it->second.tree;
!                     entry.flags = CAnchorsCacheEntry::DIRTY;
  
!                     cachedCoinsUsage += memusage::DynamicUsage(entry.tree);
!                 }
              } else {
                  if (parent_it->second.entered != child_it->second.entered) {
                      // The parent may have removed the entry.
--- 313,324 ----
              CAnchorsMap::iterator parent_it = cacheAnchors.find(child_it->first);
  
              if (parent_it == cacheAnchors.end()) {
!                 CAnchorsCacheEntry& entry = cacheAnchors[child_it->first];
!                 entry.entered = child_it->second.entered;
!                 entry.tree = child_it->second.tree;
!                 entry.flags = CAnchorsCacheEntry::DIRTY;
  
!                 cachedCoinsUsage += memusage::DynamicUsage(entry.tree);
              } else {
                  if (parent_it->second.entered != child_it->second.entered) {
                      // The parent may have removed the entry.
***************
*** 332,345 ****
              CNullifiersMap::iterator parent_it = cacheNullifiers.find(child_it->first);
  
              if (parent_it == cacheNullifiers.end()) {
!                 if (child_it->second.entered) {
!                     // Parent doesn't have an entry, but child has a SPENT nullifier.
!                     // Move the spent nullifier up.
! 
!                     CNullifiersCacheEntry& entry = cacheNullifiers[child_it->first];
!                     entry.entered = true;
!                     entry.flags = CNullifiersCacheEntry::DIRTY;
!                 }
              } else {
                  if (parent_it->second.entered != child_it->second.entered) {
                      parent_it->second.entered = child_it->second.entered;
--- 338,346 ----
              CNullifiersMap::iterator parent_it = cacheNullifiers.find(child_it->first);
  
              if (parent_it == cacheNullifiers.end()) {
!                 CNullifiersCacheEntry& entry = cacheNullifiers[child_it->first];
!                 entry.entered = child_it->second.entered;
!                 entry.flags = CNullifiersCacheEntry::DIRTY;
              } else {
                  if (parent_it->second.entered != child_it->second.entered) {
                      parent_it->second.entered = child_it->second.entered;
***************
*** 469,474 ****
--- 470,476 ----
  {
      if (tx.IsCoinBase())
          return 0.0;
+     CAmount nTotalIn = 0;
      double dResult = 0.0;
      BOOST_FOREACH(const CTxIn& txin, tx.vin)
      {
***************
*** 477,484 ****
--- 479,512 ----
          if (!coins->IsAvailable(txin.prevout.n)) continue;
          if (coins->nHeight < nHeight) {
              dResult += coins->vout[txin.prevout.n].nValue * (nHeight-coins->nHeight);
+             nTotalIn += coins->vout[txin.prevout.n].nValue;
          }
      }
+ 
+     // If a transaction contains a joinsplit, we boost the priority of the transaction.
+     // Joinsplits do not reveal any information about the value or age of a note, so we
+     // cannot apply the priority algorithm used for transparent utxos.  Instead, we pick a
+     // very large number and multiply it by the transaction's fee per 1000 bytes of data.
+     // One trillion, 1000000000000, is equivalent to 1 ZEC utxo * 10000 blocks (~17 days).
+     if (tx.vjoinsplit.size() > 0) {
+         unsigned int nTxSize = ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION);
+         nTotalIn += tx.GetJoinSplitValueIn();
+         CAmount fee = nTotalIn - tx.GetValueOut();
+         CFeeRate feeRate(fee, nTxSize);
+         CAmount feePerK = feeRate.GetFeePerK();
+ 
+         if (feePerK == 0) {
+             feePerK = 1;
+         }
+ 
+         dResult += 1000000000000 * double(feePerK);
+         // We cast feePerK from int64_t to double because if feePerK is a large number, say
+         // close to MAX_MONEY, the multiplication operation will result in an integer overflow.
+         // The variable dResult should never overflow since a 64-bit double in C++ is typically
+         // a double-precision floating-point number as specified by IEE 754, with a maximum
+         // value DBL_MAX of 1.79769e+308.
+     }
+ 
      return tx.ComputePriority(dResult);
  }
  
Only in ../../komodo-jl777/src: dpowassets
Only in ../../komodo-jl777/src: fundnotaries
diff -crB ./src/gtest/test_checkblock.cpp ../../komodo-jl777/src/gtest/test_checkblock.cpp
*** ./src/gtest/test_checkblock.cpp	2017-01-03 10:40:50.227329975 +0000
--- ../../komodo-jl777/src/gtest/test_checkblock.cpp	2017-01-03 09:49:08.856506348 +0000
***************
*** 29,31 ****
--- 29,74 ----
      EXPECT_CALL(state, DoS(100, false, REJECT_INVALID, "version-too-low", false)).Times(1);
      EXPECT_FALSE(CheckBlock(0,0,block, state, false, false));
  }
+ 
+ TEST(ContextualCheckBlock, BadCoinbaseHeight) {
+     SelectParams(CBaseChainParams::MAIN);
+ 
+     // Create a block with no height in scriptSig
+     CMutableTransaction mtx;
+     mtx.vin.resize(1);
+     mtx.vin[0].prevout.SetNull();
+     mtx.vin[0].scriptSig = CScript() << OP_0;
+     mtx.vout.resize(1);
+     mtx.vout[0].scriptPubKey = CScript() << OP_TRUE;
+     mtx.vout[0].nValue = 0;
+     CTransaction tx {mtx};
+     CBlock block;
+     block.vtx.push_back(tx);
+ 
+     // Treating block as genesis should pass
+     MockCValidationState state;
+     EXPECT_TRUE(ContextualCheckBlock(block, state, NULL));
+ 
+     // Treating block as non-genesis should fail
+     mtx.vout.push_back(CTxOut(GetBlockSubsidy(1, Params().GetConsensus())/5, Params().GetFoundersRewardScriptAtHeight(1)));
+     CTransaction tx2 {mtx};
+     block.vtx[0] = tx2;
+     CBlock prev;
+     CBlockIndex indexPrev {prev};
+     indexPrev.nHeight = 0;
+     EXPECT_CALL(state, DoS(100, false, REJECT_INVALID, "bad-cb-height", false)).Times(1);
+     EXPECT_FALSE(ContextualCheckBlock(block, state, &indexPrev));
+ 
+     // Setting to an incorrect height should fail
+     mtx.vin[0].scriptSig = CScript() << 2 << OP_0;
+     CTransaction tx3 {mtx};
+     block.vtx[0] = tx3;
+     EXPECT_CALL(state, DoS(100, false, REJECT_INVALID, "bad-cb-height", false)).Times(1);
+     EXPECT_FALSE(ContextualCheckBlock(block, state, &indexPrev));
+ 
+     // After correcting the scriptSig, should pass
+     mtx.vin[0].scriptSig = CScript() << 1 << OP_0;
+     CTransaction tx4 {mtx};
+     block.vtx[0] = tx4;
+     EXPECT_TRUE(ContextualCheckBlock(block, state, &indexPrev));
+ }
diff -crB ./src/gtest/test_joinsplit.cpp ../../komodo-jl777/src/gtest/test_joinsplit.cpp
*** ./src/gtest/test_joinsplit.cpp	2017-01-03 10:40:50.227329975 +0000
--- ../../komodo-jl777/src/gtest/test_joinsplit.cpp	2017-01-03 09:49:08.856506348 +0000
***************
*** 15,20 ****
--- 15,23 ----
  
  void test_full_api(ZCJoinSplit* js)
  {
+     // Create verification context.
+     auto verifier = libzcash::ProofVerifier::Strict();
+ 
      // The recipient's information.
      SpendingKey recipient_key = SpendingKey::random();
      PaymentAddress recipient_addr = recipient_key.address();
***************
*** 69,74 ****
--- 72,78 ----
      // Verify the transaction:
      ASSERT_TRUE(js->verify(
          proof,
+         verifier,
          pubKeyHash,
          randomSeed,
          macs,
***************
*** 143,148 ****
--- 147,153 ----
      // Verify the transaction:
      ASSERT_TRUE(js->verify(
          proof,
+         verifier,
          pubKeyHash,
          randomSeed,
          macs,
***************
*** 154,159 ****
--- 159,222 ----
      ));
  }
  
+ // Invokes the API (but does not compute a proof)
+ // to test exceptions
+ void invokeAPI(
+     ZCJoinSplit* js,
+     const boost::array<JSInput, 2>& inputs,
+     const boost::array<JSOutput, 2>& outputs,
+     uint64_t vpub_old,
+     uint64_t vpub_new,
+     const uint256& rt
+ ) {
+     uint256 ephemeralKey;
+     uint256 randomSeed;
+     uint256 pubKeyHash = random_uint256();
+     boost::array<uint256, 2> macs;
+     boost::array<uint256, 2> nullifiers;
+     boost::array<uint256, 2> commitments;
+     boost::array<ZCNoteEncryption::Ciphertext, 2> ciphertexts;
+ 
+     boost::array<Note, 2> output_notes;
+ 
+     ZCProof proof = js->prove(
+         inputs,
+         outputs,
+         output_notes,
+         ciphertexts,
+         ephemeralKey,
+         pubKeyHash,
+         randomSeed,
+         macs,
+         nullifiers,
+         commitments,
+         vpub_old,
+         vpub_new,
+         rt,
+         false
+     );
+ }
+ 
+ void invokeAPIFailure(
+     ZCJoinSplit* js,
+     const boost::array<JSInput, 2>& inputs,
+     const boost::array<JSOutput, 2>& outputs,
+     uint64_t vpub_old,
+     uint64_t vpub_new,
+     const uint256& rt,
+     std::string reason
+ )
+ {
+     try {
+         invokeAPI(js, inputs, outputs, vpub_old, vpub_new, rt);
+         FAIL() << "It worked, when it shouldn't have!";
+     } catch(std::invalid_argument const & err) {
+         EXPECT_EQ(err.what(), reason);
+     } catch(...) {
+         FAIL() << "Expected invalid_argument exception.";
+     }
+ }
+ 
  TEST(joinsplit, h_sig)
  {
      auto js = ZCJoinSplit::Unopened();
***************
*** 233,242 ****
--- 296,515 ----
      delete js;
  }
  
+ void increment_note_witnesses(
+     const uint256& element,
+     std::vector<ZCIncrementalWitness>& witnesses,
+     ZCIncrementalMerkleTree& tree
+ )
+ {
+     tree.append(element);
+     for (ZCIncrementalWitness& w : witnesses) {
+         w.append(element);
+     }
+     witnesses.push_back(tree.witness());
+ }
+ 
  TEST(joinsplit, full_api_test)
  {
      auto js = ZCJoinSplit::Generate();
  
+     {
+         std::vector<ZCIncrementalWitness> witnesses;
+         ZCIncrementalMerkleTree tree;
+         increment_note_witnesses(uint256(), witnesses, tree);
+         SpendingKey sk = SpendingKey::random();
+         PaymentAddress addr = sk.address();
+         Note note1(addr.a_pk, 100, random_uint256(), random_uint256());
+         increment_note_witnesses(note1.cm(), witnesses, tree);
+         Note note2(addr.a_pk, 100, random_uint256(), random_uint256());
+         increment_note_witnesses(note2.cm(), witnesses, tree);
+         Note note3(addr.a_pk, 2100000000000001, random_uint256(), random_uint256());
+         increment_note_witnesses(note3.cm(), witnesses, tree);
+         Note note4(addr.a_pk, 1900000000000000, random_uint256(), random_uint256());
+         increment_note_witnesses(note4.cm(), witnesses, tree);
+         Note note5(addr.a_pk, 1900000000000000, random_uint256(), random_uint256());
+         increment_note_witnesses(note5.cm(), witnesses, tree);
+ 
+         // Should work
+         invokeAPI(js,
+         {
+             JSInput(),
+             JSInput()
+         },
+         {
+             JSOutput(),
+             JSOutput()
+         },
+         0,
+         0,
+         tree.root());
+ 
+         // lhs > MAX_MONEY
+         invokeAPIFailure(js,
+         {
+             JSInput(),
+             JSInput()
+         },
+         {
+             JSOutput(),
+             JSOutput()
+         },
+         2100000000000001,
+         0,
+         tree.root(),
+         "nonsensical vpub_old value");
+ 
+         // rhs > MAX_MONEY
+         invokeAPIFailure(js,
+         {
+             JSInput(),
+             JSInput()
+         },
+         {
+             JSOutput(),
+             JSOutput()
+         },
+         0,
+         2100000000000001,
+         tree.root(),
+         "nonsensical vpub_new value");
+ 
+         // input witness for the wrong element
+         invokeAPIFailure(js,
+         {
+             JSInput(witnesses[0], note1, sk),
+             JSInput()
+         },
+         {
+             JSOutput(),
+             JSOutput()
+         },
+         0,
+         100,
+         tree.root(),
+         "witness of wrong element for joinsplit input");
+ 
+         // input witness doesn't match up with
+         // real root
+         invokeAPIFailure(js,
+         {
+             JSInput(witnesses[1], note1, sk),
+             JSInput()
+         },
+         {
+             JSOutput(),
+             JSOutput()
+         },
+         0,
+         100,
+         uint256(),
+         "joinsplit not anchored to the correct root");
+ 
+         // input is in the tree now! this should work
+         invokeAPI(js,
+         {
+             JSInput(witnesses[1], note1, sk),
+             JSInput()
+         },
+         {
+             JSOutput(),
+             JSOutput()
+         },
+         0,
+         100,
+         tree.root());
+ 
+         // Wrong secret key
+         invokeAPIFailure(js,
+         {
+             JSInput(witnesses[1], note1, SpendingKey::random()),
+             JSInput()
+         },
+         {
+             JSOutput(),
+             JSOutput()
+         },
+         0,
+         0,
+         tree.root(),
+         "input note not authorized to spend with given key");
+ 
+         // Absurd input value
+         invokeAPIFailure(js,
+         {
+             JSInput(witnesses[3], note3, sk),
+             JSInput()
+         },
+         {
+             JSOutput(),
+             JSOutput()
+         },
+         0,
+         0,
+         tree.root(),
+         "nonsensical input note value");
+ 
+         // Absurd total input value
+         invokeAPIFailure(js,
+         {
+             JSInput(witnesses[4], note4, sk),
+             JSInput(witnesses[5], note5, sk)
+         },
+         {
+             JSOutput(),
+             JSOutput()
+         },
+         0,
+         0,
+         tree.root(),
+         "nonsensical left hand size of joinsplit balance");
+ 
+         // Absurd output value
+         invokeAPIFailure(js,
+         {
+             JSInput(),
+             JSInput()
+         },
+         {
+             JSOutput(addr, 2100000000000001),
+             JSOutput()
+         },
+         0,
+         0,
+         tree.root(),
+         "nonsensical output value");
+ 
+         // Absurd total output value
+         invokeAPIFailure(js,
+         {
+             JSInput(),
+             JSInput()
+         },
+         {
+             JSOutput(addr, 1900000000000000),
+             JSOutput(addr, 1900000000000000)
+         },
+         0,
+         0,
+         tree.root(),
+         "nonsensical right hand side of joinsplit balance");
+ 
+         // Absurd total output value
+         invokeAPIFailure(js,
+         {
+             JSInput(),
+             JSInput()
+         },
+         {
+             JSOutput(addr, 1900000000000000),
+             JSOutput()
+         },
+         0,
+         0,
+         tree.root(),
+         "invalid joinsplit balance");
+     }
+ 
      test_full_api(js);
  
      js->saveProvingKey("./zcashTest.pk");
diff -crB ./src/gtest/test_merkletree.cpp ../../komodo-jl777/src/gtest/test_merkletree.cpp
*** ./src/gtest/test_merkletree.cpp	2017-01-03 10:40:50.227329975 +0000
--- ../../komodo-jl777/src/gtest/test_merkletree.cpp	2017-01-03 09:49:08.856506348 +0000
***************
*** 5,10 ****
--- 5,11 ----
  #include "test/data/merkle_serialization.json.h"
  #include "test/data/merkle_witness_serialization.json.h"
  #include "test/data/merkle_path.json.h"
+ #include "test/data/merkle_commitments.json.h"
  
  #include <iostream>
  
***************
*** 55,86 ****
  }
  
  template<typename Tree, typename Witness>
! void test_tree(Array root_tests, Array ser_tests, Array witness_ser_tests, Array path_tests) {
      Array::iterator root_iterator = root_tests.begin();
      Array::iterator ser_iterator = ser_tests.begin();
      Array::iterator witness_ser_iterator = witness_ser_tests.begin();
      Array::iterator path_iterator = path_tests.begin();
  
-     uint256 test_commitment = uint256S("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
- 
      Tree tree;
  
      // The root of the tree at this point is expected to be the root of the
      // empty tree.
      ASSERT_TRUE(tree.root() == Tree::empty_root());
  
      // We need to witness at every single point in the tree, so
      // that the consistency of the tree and the merkle paths can
      // be checked.
      vector<Witness> witnesses;
  
      for (size_t i = 0; i < 16; i++) {
          // Witness here
          witnesses.push_back(tree.witness());
  
          // Now append a commitment to the tree
          tree.append(test_commitment);
  
          // Check tree root consistency
          expect_test_vector(root_iterator, tree.root());
  
--- 56,101 ----
  }
  
  template<typename Tree, typename Witness>
! void test_tree(
!     Array commitment_tests,
!     Array root_tests,
!     Array ser_tests,
!     Array witness_ser_tests,
!     Array path_tests
! )
! {
!     Array::iterator commitment_iterator = commitment_tests.begin();
      Array::iterator root_iterator = root_tests.begin();
      Array::iterator ser_iterator = ser_tests.begin();
      Array::iterator witness_ser_iterator = witness_ser_tests.begin();
      Array::iterator path_iterator = path_tests.begin();
  
      Tree tree;
  
      // The root of the tree at this point is expected to be the root of the
      // empty tree.
      ASSERT_TRUE(tree.root() == Tree::empty_root());
  
+     // The tree doesn't have a 'last' element added since it's blank.
+     ASSERT_THROW(tree.last(), std::runtime_error);
+ 
      // We need to witness at every single point in the tree, so
      // that the consistency of the tree and the merkle paths can
      // be checked.
      vector<Witness> witnesses;
  
      for (size_t i = 0; i < 16; i++) {
+         uint256 test_commitment = uint256S((commitment_iterator++)->get_str());
+ 
          // Witness here
          witnesses.push_back(tree.witness());
  
          // Now append a commitment to the tree
          tree.append(test_commitment);
  
+         // Last element added to the tree was `test_commitment`
+         ASSERT_TRUE(tree.last() == test_commitment);
+ 
          // Check tree root consistency
          expect_test_vector(root_iterator, tree.root());
  
***************
*** 95,100 ****
--- 110,116 ----
  
              if (first) {
                  ASSERT_THROW(wit.path(), std::runtime_error);
+                 ASSERT_THROW(wit.element(), std::runtime_error);
              } else {
                  auto path = wit.path();
  
***************
*** 119,125 ****
  
                      std::vector<bool> commitment_bv;
                      {
!                         std::vector<unsigned char> commitment_v(test_commitment.begin(), test_commitment.end());
                          commitment_bv = convertBytesVectorToVector(commitment_v);
                      }
  
--- 135,142 ----
  
                      std::vector<bool> commitment_bv;
                      {
!                         uint256 witnessed_commitment = wit.element();
!                         std::vector<unsigned char> commitment_v(witnessed_commitment.begin(), witnessed_commitment.end());
                          commitment_bv = convertBytesVectorToVector(commitment_v);
                      }
  
***************
*** 174,181 ****
      Array ser_tests = read_json(std::string(json_tests::merkle_serialization, json_tests::merkle_serialization + sizeof(json_tests::merkle_serialization)));
      Array witness_ser_tests = read_json(std::string(json_tests::merkle_witness_serialization, json_tests::merkle_witness_serialization + sizeof(json_tests::merkle_witness_serialization)));
      Array path_tests = read_json(std::string(json_tests::merkle_path, json_tests::merkle_path + sizeof(json_tests::merkle_path)));
  
!     test_tree<ZCTestingIncrementalMerkleTree, ZCTestingIncrementalWitness>(root_tests, ser_tests, witness_ser_tests, path_tests);
  }
  
  TEST(merkletree, emptyroots) {
--- 191,199 ----
      Array ser_tests = read_json(std::string(json_tests::merkle_serialization, json_tests::merkle_serialization + sizeof(json_tests::merkle_serialization)));
      Array witness_ser_tests = read_json(std::string(json_tests::merkle_witness_serialization, json_tests::merkle_witness_serialization + sizeof(json_tests::merkle_witness_serialization)));
      Array path_tests = read_json(std::string(json_tests::merkle_path, json_tests::merkle_path + sizeof(json_tests::merkle_path)));
+     Array commitment_tests = read_json(std::string(json_tests::merkle_commitments, json_tests::merkle_commitments + sizeof(json_tests::merkle_commitments)));
  
!     test_tree<ZCTestingIncrementalMerkleTree, ZCTestingIncrementalWitness>(commitment_tests, root_tests, ser_tests, witness_ser_tests, path_tests);
  }
  
  TEST(merkletree, emptyroots) {
Only in ../../komodo-jl777/src/gtest: test_metrics.cpp
diff -crB ./src/gtest/test_proofs.cpp ../../komodo-jl777/src/gtest/test_proofs.cpp
*** ./src/gtest/test_proofs.cpp	2017-01-03 10:40:50.227329975 +0000
--- ../../komodo-jl777/src/gtest/test_proofs.cpp	2017-01-03 09:49:08.856506348 +0000
***************
*** 336,341 ****
--- 336,364 ----
      auto example = libsnark::generate_r1cs_example_with_field_input<curve_Fr>(250, 4);
      example.constraint_system.swap_AB_if_beneficial();
      auto kp = libsnark::r1cs_ppzksnark_generator<curve_pp>(example.constraint_system);
+     auto vkprecomp = libsnark::r1cs_ppzksnark_verifier_process_vk(kp.vk);
+ 
+     for (size_t i = 0; i < 20; i++) {
+         auto badproof = ZCProof::random_invalid();
+         auto proof = badproof.to_libsnark_proof<libsnark::r1cs_ppzksnark_proof<curve_pp>>();
+         
+         auto verifierEnabled = ProofVerifier::Strict();
+         auto verifierDisabled = ProofVerifier::Disabled();
+         // This verifier should catch the bad proof
+         ASSERT_FALSE(verifierEnabled.check(
+             kp.vk,
+             vkprecomp,
+             example.primary_input,
+             proof
+         ));
+         // This verifier won't!
+         ASSERT_TRUE(verifierDisabled.check(
+             kp.vk,
+             vkprecomp,
+             example.primary_input,
+             proof
+         ));
+     }
  
      for (size_t i = 0; i < 20; i++) {
          auto proof = libsnark::r1cs_ppzksnark_prover<curve_pp>(
***************
*** 345,350 ****
--- 368,390 ----
              example.constraint_system
          );
  
+         {
+             auto verifierEnabled = ProofVerifier::Strict();
+             auto verifierDisabled = ProofVerifier::Disabled();
+             ASSERT_TRUE(verifierEnabled.check(
+                 kp.vk,
+                 vkprecomp,
+                 example.primary_input,
+                 proof
+             ));
+             ASSERT_TRUE(verifierDisabled.check(
+                 kp.vk,
+                 vkprecomp,
+                 example.primary_input,
+                 proof
+             ));
+         }
+ 
          ASSERT_TRUE(libsnark::r1cs_ppzksnark_verifier_strong_IC<curve_pp>(
              kp.vk,
              example.primary_input,
diff -crB ./src/gtest/test_random.cpp ../../komodo-jl777/src/gtest/test_random.cpp
*** ./src/gtest/test_random.cpp	2017-01-03 10:40:50.227329975 +0000
--- ../../komodo-jl777/src/gtest/test_random.cpp	2017-01-03 09:49:08.856506348 +0000
***************
*** 24,27 ****
--- 24,35 ----
      std::vector<int> em2 {0, 1, 2, 3, 4};
      EXPECT_EQ(ea2, a2);
      EXPECT_EQ(em2, m2);
+ 
+     auto a3 = a;
+     auto m3 = m;
+     MappedShuffle(a3.begin(), m3.begin(), a3.size(), GenIdentity);
+     std::vector<int> ea3 {8, 4, 6, 3, 5};
+     std::vector<int> em3 {0, 1, 2, 3, 4};
+     EXPECT_EQ(ea3, a3);
+     EXPECT_EQ(em3, m3);
  }
diff -crB ./src/init.cpp ../../komodo-jl777/src/init.cpp
*** ./src/init.cpp	2017-01-03 10:40:50.227329975 +0000
--- ../../komodo-jl777/src/init.cpp	2017-01-03 09:49:08.856506348 +0000
***************
*** 62,68 ****
  bool fFeeEstimatesInitialized = false;
  
  #ifdef WIN32
! // Win32 LevelDB doesn't use filedescriptors, and the ones used for
  // accessing block files don't count towards the fd_set size limit
  // anyway.
  #define MIN_CORE_FILEDESCRIPTORS 0
--- 62,68 ----
  bool fFeeEstimatesInitialized = false;
  
  #ifdef WIN32
! // Win32 LevelDB doesn't use file descriptors, and the ones used for
  // accessing block files don't count towards the fd_set size limit
  // anyway.
  #define MIN_CORE_FILEDESCRIPTORS 0
***************
*** 348,354 ****
          strUsage += HelpMessageOpt("-mintxfee=<amt>", strprintf("Fees (in BTC/Kb) smaller than this are considered zero fee for transaction creation (default: %s)",
              FormatMoney(CWallet::minTxFee.GetFeePerK())));
      strUsage += HelpMessageOpt("-paytxfee=<amt>", strprintf(_("Fee (in BTC/kB) to add to transactions you send (default: %s)"), FormatMoney(payTxFee.GetFeePerK())));
!     strUsage += HelpMessageOpt("-rescan", _("Rescan the block chain for missing wallet transactions") + " " + _("on startup"));
      strUsage += HelpMessageOpt("-salvagewallet", _("Attempt to recover private keys from a corrupt wallet.dat") + " " + _("on startup"));
      strUsage += HelpMessageOpt("-sendfreetransactions", strprintf(_("Send transactions as zero-fee transactions if possible (default: %u)"), 0));
      strUsage += HelpMessageOpt("-spendzeroconfchange", strprintf(_("Spend unconfirmed change when sending transactions (default: %u)"), 1));
--- 348,354 ----
          strUsage += HelpMessageOpt("-mintxfee=<amt>", strprintf("Fees (in BTC/Kb) smaller than this are considered zero fee for transaction creation (default: %s)",
              FormatMoney(CWallet::minTxFee.GetFeePerK())));
      strUsage += HelpMessageOpt("-paytxfee=<amt>", strprintf(_("Fee (in BTC/kB) to add to transactions you send (default: %s)"), FormatMoney(payTxFee.GetFeePerK())));
!     strUsage += HelpMessageOpt("-rescan", _("Rescan the blockchain for missing wallet transactions") + " " + _("on startup"));
      strUsage += HelpMessageOpt("-salvagewallet", _("Attempt to recover private keys from a corrupt wallet.dat") + " " + _("on startup"));
      strUsage += HelpMessageOpt("-sendfreetransactions", strprintf(_("Send transactions as zero-fee transactions if possible (default: %u)"), 0));
      strUsage += HelpMessageOpt("-spendzeroconfchange", strprintf(_("Spend unconfirmed change when sending transactions (default: %u)"), 1));
***************
*** 380,386 ****
      if (mode == HMM_BITCOIN_QT)
          debugCategories += ", qt";
      strUsage += HelpMessageOpt("-debug=<category>", strprintf(_("Output debugging information (default: %u, supplying <category> is optional)"), 0) + ". " +
!         _("If <category> is not supplied, output all debugging information.") + _("<category> can be:") + " " + debugCategories + ".");
  #ifdef ENABLE_WALLET
      strUsage += HelpMessageOpt("-gen", strprintf(_("Generate coins (default: %u)"), 0));
      strUsage += HelpMessageOpt("-genproclimit=<n>", strprintf(_("Set the number of threads for coin generation if enabled (-1 = all cores, default: %d)"), 1));
--- 380,386 ----
      if (mode == HMM_BITCOIN_QT)
          debugCategories += ", qt";
      strUsage += HelpMessageOpt("-debug=<category>", strprintf(_("Output debugging information (default: %u, supplying <category> is optional)"), 0) + ". " +
!         _("If <category> is not supplied or if <category> = 1, output all debugging information.") + _("<category> can be:") + " " + debugCategories + ".");
  #ifdef ENABLE_WALLET
      strUsage += HelpMessageOpt("-gen", strprintf(_("Generate coins (default: %u)"), 0));
      strUsage += HelpMessageOpt("-genproclimit=<n>", strprintf(_("Set the number of threads for coin generation if enabled (-1 = all cores, default: %d)"), 1));
***************
*** 425,431 ****
      strUsage += HelpMessageOpt("-rpcport=<port>", strprintf(_("Listen for JSON-RPC connections on <port> (default: %u or testnet: %u)"), 8232, 18232));
      strUsage += HelpMessageOpt("-rpcallowip=<ip>", _("Allow JSON-RPC connections from specified source. Valid for <ip> are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This option can be specified multiple times"));
      strUsage += HelpMessageOpt("-rpcthreads=<n>", strprintf(_("Set the number of threads to service RPC calls (default: %d)"), 4));
!     strUsage += HelpMessageOpt("-rpckeepalive", strprintf(_("RPC support for HTTP persistent connections (default: %d)"), 1));
  
      // Disabled until we can lock notes and also tune performance of libsnark which by default uses multiple threads
      //strUsage += HelpMessageOpt("-rpcasyncthreads=<n>", strprintf(_("Set the number of threads to service Async RPC calls (default: %d)"), 1));
--- 425,434 ----
      strUsage += HelpMessageOpt("-rpcport=<port>", strprintf(_("Listen for JSON-RPC connections on <port> (default: %u or testnet: %u)"), 8232, 18232));
      strUsage += HelpMessageOpt("-rpcallowip=<ip>", _("Allow JSON-RPC connections from specified source. Valid for <ip> are a single IP (e.g. 1.2.3.4), a network/netmask (e.g. 1.2.3.4/255.255.255.0) or a network/CIDR (e.g. 1.2.3.4/24). This option can be specified multiple times"));
      strUsage += HelpMessageOpt("-rpcthreads=<n>", strprintf(_("Set the number of threads to service RPC calls (default: %d)"), 4));
! 
!     // TODO #1856: Re-enable support for persistent connections.
!     // Disabled to avoid rpc deadlock #1680, until we backport upstream changes which replace boost::asio with libevent, or another solution is implemented.
!     //strUsage += HelpMessageOpt("-rpckeepalive", strprintf(_("RPC support for HTTP persistent connections (default: %d)"), 1));
  
      // Disabled until we can lock notes and also tune performance of libsnark which by default uses multiple threads
      //strUsage += HelpMessageOpt("-rpcasyncthreads=<n>", strprintf(_("Set the number of threads to service Async RPC calls (default: %d)"), 1));
***************
*** 447,452 ****
--- 450,460 ----
          strUsage += HelpMessageOpt("-min", _("Start minimized"));
          strUsage += HelpMessageOpt("-rootcertificates=<file>", _("Set SSL root certificates for payment request (default: -system-)"));
          strUsage += HelpMessageOpt("-splash", _("Show splash screen on startup (default: 1)"));
+     } else if (mode == HMM_BITCOIND) {
+         strUsage += HelpMessageGroup(_("Metrics Options (only if -daemon and -printtoconsole are not set):"));
+         strUsage += HelpMessageOpt("-showmetrics", _("Show metrics on stdout (default: 1 if running in a console, 0 otherwise)"));
+         strUsage += HelpMessageOpt("-metricsui", _("Set to 1 for a persistent metrics screen, 0 for sequential metrics output (default: 1 if running in a console, 0 otherwise)"));
+         strUsage += HelpMessageOpt("-metricsrefreshtime", strprintf(_("Number of seconds between metrics refreshes (default: %u if running in a console, %u otherwise)"), 1, 600));
      }
  
      return strUsage;
***************
*** 538,548 ****
      RenameThread("zcash-loadblk");
      // -reindex
      if (fReindex) {
- #ifdef ENABLE_WALLET
-         if (pwalletMain) {
-             pwalletMain->ClearNoteWitnessCache();
-         }
- #endif
          CImportingNow imp;
          int nFile = 0;
          while (true) {
--- 546,551 ----
***************
*** 980,1000 ****
      CScheduler::Function serviceLoop = boost::bind(&CScheduler::serviceQueue, &scheduler);
      threadGroup.create_thread(boost::bind(&TraceThread<CScheduler::Function>, "scheduler", serviceLoop));
  
      if ((chainparams.NetworkIDString() != "regtest") &&
!             GetBoolArg("-showmetrics", false) &&
              !fPrintToConsole && !GetBoolArg("-daemon", false)) {
          // Start the persistent metrics interface
          ConnectMetricsScreen();
          threadGroup.create_thread(&ThreadShowMetricsScreen);
      }
  
-     // Initialize Zcash circuit parameters
-     ZC_LoadParams();
      // These must be disabled for now, they are buggy and we probably don't
      // want any of libsnark's profiling in production anyway.
      libsnark::inhibit_profiling_info = true;
      libsnark::inhibit_profiling_counters = true;
  
      /* Start the RPC server already.  It will be started in "warmup" mode
       * and not really process calls already (but it will signify connections
       * that the server is there and will be ready later).  Warmup mode will
--- 983,1007 ----
      CScheduler::Function serviceLoop = boost::bind(&CScheduler::serviceQueue, &scheduler);
      threadGroup.create_thread(boost::bind(&TraceThread<CScheduler::Function>, "scheduler", serviceLoop));
  
+     // Count uptime
+     MarkStartTime();
+ 
      if ((chainparams.NetworkIDString() != "regtest") &&
!             GetBoolArg("-showmetrics", 0) &&
              !fPrintToConsole && !GetBoolArg("-daemon", false)) {
          // Start the persistent metrics interface
          ConnectMetricsScreen();
          threadGroup.create_thread(&ThreadShowMetricsScreen);
      }
  
      // These must be disabled for now, they are buggy and we probably don't
      // want any of libsnark's profiling in production anyway.
      libsnark::inhibit_profiling_info = true;
      libsnark::inhibit_profiling_counters = true;
  
+     // Initialize Zcash circuit parameters
+     ZC_LoadParams();
+ 
      /* Start the RPC server already.  It will be started in "warmup" mode
       * and not really process calls already (but it will signify connections
       * that the server is there and will be ready later).  Warmup mode will
***************
*** 1379,1385 ****
--- 1386,1395 ----
  
          CBlockIndex *pindexRescan = chainActive.Tip();
          if (GetBoolArg("-rescan", false))
+         {
+             pwalletMain->ClearNoteWitnessCache();
              pindexRescan = chainActive.Genesis();
+         }
          else
          {
              CWalletDB walletdb(strWalletFile);
diff -crB ./src/komodo_gateway.h ../../komodo-jl777/src/komodo_gateway.h
*** ./src/komodo_gateway.h	2017-01-03 10:40:50.231330177 +0000
--- ../../komodo-jl777/src/komodo_gateway.h	2017-01-03 09:49:08.856506348 +0000
***************
*** 87,95 ****
--- 87,105 ----
      return(pax);
  }
  
+ void komodo_paxdelete(struct pax_transaction *pax)
+ {
+     return; // breaks when out of order
+     pthread_mutex_lock(&komodo_mutex);
+     HASH_DELETE(hh,PAX,pax);
+     pthread_mutex_unlock(&komodo_mutex);
+ }
+ 
  void komodo_gateway_deposit(char *coinaddr,uint64_t value,char *symbol,uint64_t fiatoshis,uint8_t *rmd160,uint256 txid,uint16_t vout,uint8_t type,int32_t height,int32_t otherheight,char *source,int32_t approved) // assetchain context
  {
      struct pax_transaction *pax; uint8_t buf[35]; int32_t addflag = 0; struct komodo_state *sp; char str[16],dest[16],*s;
+     if ( KOMODO_PAX == 0 )
+         return;
      sp = komodo_stateptr(str,dest);
      pthread_mutex_lock(&komodo_mutex);
      pax_keyset(buf,txid,vout,type);
***************
*** 178,190 ****
  int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,int64_t *values,int64_t *srcvalues,int32_t *kmdheights,int32_t *otherheights,int8_t *baseids,uint8_t *rmd160s,uint8_t *opretbuf,int32_t opretlen,int32_t iskomodo)
  {
      struct pax_transaction p,*pax; int32_t i,n=0,j,len=0,incr,height,otherheight; uint8_t type,rmd160[20]; uint64_t fiatoshis; char symbol[16];
!     incr = 34 + (iskomodo * (2*sizeof(fiatoshis) + 2*sizeof(height) + 20 + 4));
!     for (i=0; i<4; i++)
!         base[i] = opretbuf[opretlen-4+i];
      //for (i=0; i<opretlen; i++)
      //    printf("%02x",opretbuf[i]);
      //printf(" opretlen.%d (%s)\n",opretlen,base);
!     //printf(" opretlen.%d vs %d incr.%d\n",opretlen,(int32_t)(2*sizeof(fiatoshis) + 2*sizeof(height) + 20 + 4),incr);
      //if ( ASSETCHAINS_SYMBOL[0] == 0 || strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0 )
      {
          type = opretbuf[0];
--- 188,201 ----
  int32_t komodo_issued_opreturn(char *base,uint256 *txids,uint16_t *vouts,int64_t *values,int64_t *srcvalues,int32_t *kmdheights,int32_t *otherheights,int8_t *baseids,uint8_t *rmd160s,uint8_t *opretbuf,int32_t opretlen,int32_t iskomodo)
  {
      struct pax_transaction p,*pax; int32_t i,n=0,j,len=0,incr,height,otherheight; uint8_t type,rmd160[20]; uint64_t fiatoshis; char symbol[16];
!     if ( KOMODO_PAX == 0 )
!         return(0);
!     incr = 34 + (iskomodo * (2*sizeof(fiatoshis) + 2*sizeof(height) + 20));
!     //41e77b91cb68dc2aa02fa88550eae6b6d44db676a7e935337b6d1392d9718f03cb0200305c90660400000000fbcbeb1f000000bde801006201000058e7945ad08ddba1eac9c9b6c8e1e97e8016a2d152
      //for (i=0; i<opretlen; i++)
      //    printf("%02x",opretbuf[i]);
      //printf(" opretlen.%d (%s)\n",opretlen,base);
!     //printf(" opretlen.%d vs %d incr.%d (%d)\n",opretlen,(int32_t)(2*sizeof(fiatoshis) + 2*sizeof(height) + 20 + 2),incr,opretlen/incr);
      //if ( ASSETCHAINS_SYMBOL[0] == 0 || strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0 )
      {
          type = opretbuf[0];
***************
*** 215,220 ****
--- 226,233 ----
              }
              else
              {
+                 for (i=0; i<4; i++)
+                     base[i] = opretbuf[opretlen-4+i];
                  for (j=0; j<32; j++)
                  {
                      ((uint8_t *)&txids[n])[j] = opretbuf[len++];
***************
*** 238,259 ****
      return(n);
  }
  
  uint64_t komodo_paxtotal()
  {
      struct pax_transaction *pax,*pax2,*tmp,*tmp2; char symbol[16],dest[16],*str; int32_t i,ht; int64_t checktoshis; uint64_t seed,total = 0; struct komodo_state *basesp;
      if ( komodo_isrealtime(&ht) == 0 )
          return(0);
      else
      {
          HASH_ITER(hh,PAX,pax,tmp)
          {
              if ( pax->type == 'A' || pax->type == 'D' || pax->type == 'X' )
                  str = pax->symbol;
              else str = pax->source;
              basesp = komodo_stateptrget(str);
!             if ( basesp != 0 && pax->didstats == 0 && pax->type == 'I' )
              {
!                 if ( (pax2= komodo_paxfind(pax->txid,pax->vout,'D')) != 0 )
                  {
                      if ( pax2->fiatoshis != 0 )
                      {
--- 251,300 ----
      return(n);
  }
  
+ int32_t komodo_paxcmp(char *symbol,int32_t kmdheight,uint64_t value,uint64_t checkvalue,uint64_t seed)
+ {
+     int32_t ratio;
+     if ( seed == 0 && checkvalue != 0 )
+     {
+         ratio = ((value << 6) / checkvalue);
+         if ( ratio >= 63 && ratio <= 65 )
+             return(0);
+         else
+         {
+             if ( kmdheight >= 86150 )
+                 printf("ht.%d ignore mismatched %s value %lld vs checkvalue %lld -> ratio.%d\n",kmdheight,symbol,(long long)value,(long long)checkvalue,ratio);
+             return(-1);
+         }
+     }
+     else if ( checkvalue != 0 )
+     {
+         ratio = ((value << 10) / checkvalue);
+         if ( ratio >= 1023 && ratio <= 1025 )
+             return(0);
+     }
+     return(value != checkvalue);
+ }
+ 
  uint64_t komodo_paxtotal()
  {
      struct pax_transaction *pax,*pax2,*tmp,*tmp2; char symbol[16],dest[16],*str; int32_t i,ht; int64_t checktoshis; uint64_t seed,total = 0; struct komodo_state *basesp;
+     if ( KOMODO_PAX == 0 )
+         return(0);
      if ( komodo_isrealtime(&ht) == 0 )
          return(0);
      else
      {
          HASH_ITER(hh,PAX,pax,tmp)
          {
+             if ( pax->marked != 0 )
+                 continue;
              if ( pax->type == 'A' || pax->type == 'D' || pax->type == 'X' )
                  str = pax->symbol;
              else str = pax->source;
              basesp = komodo_stateptrget(str);
!             if ( basesp != 0 && pax->didstats == 0 )
              {
!                 if ( pax->type == 'I' && (pax2= komodo_paxfind(pax->txid,pax->vout,'D')) != 0 )
                  {
                      if ( pax2->fiatoshis != 0 )
                      {
***************
*** 267,305 ****
                          pax->marked = pax->height;
                      }
                  }
              }
          }
      }
      komodo_stateptr(symbol,dest);
      HASH_ITER(hh,PAX,pax,tmp)
      {
!         //printf("pax.%s marked.%d %.8f -> %.8f\n",pax->symbol,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis));
!         if ( strcmp(symbol,pax->symbol) == 0 )
          {
              if ( pax->marked == 0 )
              {
                  if ( komodo_is_issuer() != 0 )
!                     total += pax->fiatoshis;
!                 else if ( pax->approved != 0 )
                  {
                      if ( pax->validated != 0 )
                          total += pax->komodoshis;
                      else
                      {
                          seed = 0;
                          checktoshis = komodo_paxprice(&seed,pax->height,pax->source,(char *)"KMD",(uint64_t)pax->fiatoshis);
                          //printf("PAX_fiatdest ht.%d price %s %.8f -> KMD %.8f vs %.8f\n",pax->height,pax->symbol,(double)pax->fiatoshis/COIN,(double)pax->komodoshis/COIN,(double)checktoshis/COIN);
                          //printf(" v%d %.8f k.%d ht.%d\n",pax->vout,dstr(pax->komodoshis),pax->height,pax->otherheight);
!                         if ( seed != 0 )
                          {
!                             if ( checktoshis >= pax->komodoshis )
                              {
                                  total += pax->komodoshis;
                                  pax->validated = pax->komodoshis;
                              } else pax->marked = pax->height;
                          }
                      }
                  }
              }
          }
      }
--- 308,382 ----
                          pax->marked = pax->height;
                      }
                  }
+                 else if ( pax->type == 'W' )
+                 {
+                     //bitcoin_address(coinaddr,addrtype,rmd160,20);
+                     if ( (checktoshis= komodo_paxprice(&seed,pax->height,pax->source,(char *)"KMD",(uint64_t)pax->fiatoshis)) != 0 )
+                     {
+                         if ( komodo_paxcmp(pax->source,pax->height,pax->komodoshis,checktoshis,seed) != 0 )
+                         {
+                             pax->marked = pax->height;
+                             //printf("WITHDRAW.%s mark <- %d %.8f != %.8f\n",pax->source,pax->height,dstr(checktoshis),dstr(pax->komodoshis));
+                         }
+                         else if ( pax->validated == 0 )
+                         {
+                             pax->validated = pax->komodoshis = checktoshis;
+                             //int32_t j; for (j=0; j<32; j++)
+                             //    printf("%02x",((uint8_t *)&pax->txid)[j]);
+                             //if ( strcmp(str,ASSETCHAINS_SYMBOL) == 0 )
+                             //    printf(" v%d %p got WITHDRAW.%s kmd.%d ht.%d %.8f -> %.8f/%.8f\n",pax->vout,pax,pax->source,pax->height,pax->otherheight,dstr(pax->fiatoshis),dstr(pax->komodoshis),dstr(checktoshis));
+                         }
+                     }
+                 }
              }
          }
      }
      komodo_stateptr(symbol,dest);
      HASH_ITER(hh,PAX,pax,tmp)
      {
!         pax->ready = 0;
!         if ( 0 && pax->type == 'A' )
!             printf("%p pax.%s <- %s marked.%d %.8f -> %.8f validated.%d approved.%d\n",pax,pax->symbol,pax->source,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis),pax->validated != 0,pax->approved != 0);
!         if ( pax->marked != 0 )
!             continue;
!         if ( strcmp(symbol,pax->symbol) == 0 || pax->type == 'A' )
          {
              if ( pax->marked == 0 )
              {
                  if ( komodo_is_issuer() != 0 )
!                 {
!                     if ( pax->validated != 0 && pax->type == 'D' )
!                     {
!                         total += pax->fiatoshis;
!                         pax->ready = 1;
!                     }
!                 }
!                 else if ( pax->approved != 0 && pax->type == 'A' )
                  {
                      if ( pax->validated != 0 )
+                     {
                          total += pax->komodoshis;
+                         pax->ready = 1;
+                     }
                      else
                      {
                          seed = 0;
                          checktoshis = komodo_paxprice(&seed,pax->height,pax->source,(char *)"KMD",(uint64_t)pax->fiatoshis);
                          //printf("PAX_fiatdest ht.%d price %s %.8f -> KMD %.8f vs %.8f\n",pax->height,pax->symbol,(double)pax->fiatoshis/COIN,(double)pax->komodoshis/COIN,(double)checktoshis/COIN);
                          //printf(" v%d %.8f k.%d ht.%d\n",pax->vout,dstr(pax->komodoshis),pax->height,pax->otherheight);
!                         if ( seed != 0 && checktoshis != 0 )
                          {
!                             if ( checktoshis == pax->komodoshis )
                              {
                                  total += pax->komodoshis;
                                  pax->validated = pax->komodoshis;
+                                 pax->ready = 1;
                              } else pax->marked = pax->height;
                          }
                      }
                  }
+                 if ( 0 && pax->ready != 0 )
+                     printf("%p (%c) pax.%s marked.%d %.8f -> %.8f validated.%d approved.%d\n",pax,pax->type,pax->symbol,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis),pax->validated != 0,pax->approved != 0);
              }
          }
      }
***************
*** 307,373 ****
      return(total);
  }
  
! int32_t komodo_pending_withdraws(char *opretstr)
  {
!     struct pax_transaction *pax,*tmp; uint8_t opretbuf[16384]; int32_t ht,len=0; uint64_t total = 0;
      if ( komodo_isrealtime(&ht) == 0 || ASSETCHAINS_SYMBOL[0] != 0 )
          return(0);
      HASH_ITER(hh,PAX,pax,tmp)
      {
!         //printf("pax %s marked.%u approved.%u\n",pax->symbol,pax->marked,pax->approved);
!         if ( pax->marked == 0 && strcmp((char *)"KMD",pax->symbol) == 0 && pax->approved == 0 )
          {
!             // add 'A' opreturn entry
!             if ( len == 0 )
!                 opretbuf[len++] = 'A';
!             len += komodo_rwapproval(1,&opretbuf[len],pax);
!             //printf("%s.(marked.%u approved.%d) %p\n",pax->source,pax->marked,pax->approved,pax);
          }
      }
!     if ( len > 0 )
!         init_hexbytes_noT(opretstr,opretbuf,len);
!     else opretstr[0] = 0;
!     fprintf(stderr,"komodo_pending_withdraws len.%d PAXTOTAL %.8f\n",len,dstr(komodo_paxtotal()));
      return(len);
  }
  
  int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t tokomodo)
  {
      struct pax_transaction *pax,*tmp; char symbol[16],dest[16]; uint8_t *script,opcode,opret[16384],data[16384]; int32_t i,baseid,ht,len=0,opretlen=0,numvouts=1; struct komodo_state *sp; uint64_t available,deposited,issued,withdrawn,approved,redeemed,mask;
      sp = komodo_stateptr(symbol,dest);
      strcpy(symbol,base);
      PENDING_KOMODO_TX = 0;
      if ( tokomodo == 0 )
      {
          opcode = 'I';
          if ( komodo_isrealtime(&ht) == 0 )
              return(0);
!     } else opcode = 'X';
      HASH_ITER(hh,PAX,pax,tmp)
      {
-         //printf("pax.%s marked.%d %.8f -> %.8f\n",pax->symbol,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis));
-         if ( strcmp(symbol,"KMD") == 0 && pax->approved == 0 )
-             continue;
-         //else if ( strcmp(symbol,"KMD") != 0 )
          {
  #ifdef KOMODO_ASSETCHAINS_WAITNOTARIZE
!             struct komodo_state *kmdsp = komodo_stateptrget((char *)"KMD");
!             if ( kmdsp != 0 && kmdsp->NOTARIZED_HEIGHT >= pax->height ) // assumes same chain as notarize
                  pax->validated = pax->komodoshis; //kmdsp->NOTARIZED_HEIGHT;
  #endif
          }
!         if ( pax_fiatstatus(&available,&deposited,&issued,&withdrawn,&approved,&redeemed,symbol) != 0 || available < pax->fiatoshis )
          {
!             printf("miner: skip %s %.8f when avail %.8f\n",symbol,dstr(pax->fiatoshis),dstr(available));
              continue;
          }
!         if ( pax->marked != 0 )
              continue;
!         if ( strcmp(pax->symbol,symbol) != 0 || pax->validated == 0 )
          {
              //printf("pax->symbol.%s != %s or null pax->validated %.8f\n",pax->symbol,symbol,dstr(pax->validated));
              continue;
          }
          if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 )
              printf("pax.%s marked.%d %.8f -> %.8f\n",ASSETCHAINS_SYMBOL,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis));
          txNew->vout.resize(numvouts+1);
--- 384,518 ----
      return(total);
  }
  
! static int _paxorder(const void *a,const void *b)
  {
! #define pax_a (*(struct pax_transaction **)a)
! #define pax_b (*(struct pax_transaction **)b)
!     uint64_t aval,bval;
!     aval = pax_a->fiatoshis + pax_a->komodoshis + pax_a->height;
!     bval = pax_b->fiatoshis + pax_b->komodoshis + pax_b->height;
! 	if ( bval > aval )
! 		return(-1);
! 	else if ( bval < aval )
! 		return(1);
! 	return(0);
! #undef pax_a
! #undef pax_b
! }
! 
! int32_t komodo_pending_withdraws(char *opretstr) // todo: enforce deterministic order
! {
!     struct pax_transaction *pax,*pax2,*tmp,*paxes[64]; uint8_t opretbuf[16384]; int32_t i,n,ht,len=0; uint64_t total = 0;
!     if ( KOMODO_PAX == 0 )
!         return(0);
      if ( komodo_isrealtime(&ht) == 0 || ASSETCHAINS_SYMBOL[0] != 0 )
          return(0);
+     n = 0;
      HASH_ITER(hh,PAX,pax,tmp)
      {
!         if ( pax->type == 'W' )
          {
!             if ( (pax2= komodo_paxfind(pax->txid,pax->vout,'A')) != 0 )
!             {
!                 if ( pax2->approved != 0 )
!                     pax->approved = pax2->approved;
!             }
!             else if ( (pax2= komodo_paxfind(pax->txid,pax->vout,'X')) != 0 )
!                 pax->approved = pax->height;
!                 //printf("pax %s marked.%u approved.%u validated.%llu\n",pax->symbol,pax->marked,pax->approved,(long long)pax->validated);
!             if ( pax->marked == 0 && strcmp((char *)"KMD",pax->symbol) == 0 && pax->approved == 0 && pax->validated != 0 )
!             {
!                 if ( n < sizeof(paxes)/sizeof(*paxes) )
!                 {
!                     paxes[n++] = pax;
!                     //int32_t j; for (j=0; j<32; j++)
!                     //    printf("%02x",((uint8_t *)&pax->txid)[j]);
!                     //printf(" %s.(kmdht.%d ht.%d marked.%u approved.%d validated %.8f) %.8f\n",pax->source,pax->height,pax->otherheight,pax->marked,pax->approved,dstr(pax->validated),dstr(pax->komodoshis));
!                 }
!             }
          }
      }
!     opretstr[0] = 0;
!     if ( n > 0 )
!     {
!         opretbuf[len++] = 'A';
!         qsort(paxes,n,sizeof(*paxes),_paxorder);
!         for (i=0; i<n; i++)
!         {
!             if ( len < (sizeof(opretbuf)>>3)*7 )
!                 len += komodo_rwapproval(1,&opretbuf[len],paxes[i]);
!         }
!         if ( len > 0 )
!             init_hexbytes_noT(opretstr,opretbuf,len);
!     }
!     //fprintf(stderr,"komodo_pending_withdraws len.%d PAXTOTAL %.8f\n",len,dstr(komodo_paxtotal()));
      return(len);
  }
  
  int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *base,int32_t tokomodo)
  {
      struct pax_transaction *pax,*tmp; char symbol[16],dest[16]; uint8_t *script,opcode,opret[16384],data[16384]; int32_t i,baseid,ht,len=0,opretlen=0,numvouts=1; struct komodo_state *sp; uint64_t available,deposited,issued,withdrawn,approved,redeemed,mask;
+     if ( KOMODO_PAX == 0 )
+         return(0);
+     struct komodo_state *kmdsp = komodo_stateptrget((char *)"KMD");
      sp = komodo_stateptr(symbol,dest);
      strcpy(symbol,base);
+     if ( ASSETCHAINS_SYMBOL[0] != 0 && komodo_baseid(ASSETCHAINS_SYMBOL) < 0 )
+         return(0);
      PENDING_KOMODO_TX = 0;
      if ( tokomodo == 0 )
      {
          opcode = 'I';
          if ( komodo_isrealtime(&ht) == 0 )
              return(0);
!     }
!     else
!     {
!         opcode = 'X';
!         if ( komodo_paxtotal() == 0 )
!             return(0);
!     }
      HASH_ITER(hh,PAX,pax,tmp)
      {
          {
  #ifdef KOMODO_ASSETCHAINS_WAITNOTARIZE
!             if ( kmdsp != 0 && (kmdsp->NOTARIZED_HEIGHT >= pax->height || kmdsp->CURRENT_HEIGHT > pax->height+30) ) // assumes same chain as notarize
                  pax->validated = pax->komodoshis; //kmdsp->NOTARIZED_HEIGHT;
+             else pax->validated = pax->ready = 0;
  #endif
          }
!         if ( ASSETCHAINS_SYMBOL[0] != 0 && (pax_fiatstatus(&available,&deposited,&issued,&withdrawn,&approved,&redeemed,symbol) != 0 || available < pax->fiatoshis) )
          {
!             if ( strcmp(ASSETCHAINS_SYMBOL,symbol) == 0 )
!                 printf("miner.[%s]: skip %s %.8f when avail %.8f\n",ASSETCHAINS_SYMBOL,symbol,dstr(pax->fiatoshis),dstr(available));
              continue;
          }
!         /*printf("pax.%s marked.%d %.8f -> %.8f ready.%d validated.%d\n",pax->symbol,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis),pax->ready!=0,pax->validated!=0);
!         if ( pax->marked != 0 || (pax->type != 'D' && pax->type != 'A') || pax->ready == 0 )
!         {
!             printf("reject 2\n");
              continue;
!         }*/
!         if ( ASSETCHAINS_SYMBOL[0] != 0 && (strcmp(pax->symbol,symbol) != 0 || pax->validated == 0) )
          {
              //printf("pax->symbol.%s != %s or null pax->validated %.8f\n",pax->symbol,symbol,dstr(pax->validated));
              continue;
          }
+         if ( pax->ready == 0 )
+             continue;
+         if ( pax->type == 'A' && ASSETCHAINS_SYMBOL[0] == 0 )
+         {
+             if ( kmdsp != 0 )
+             {
+                 if ( (baseid= komodo_baseid(pax->symbol)) < 0 || ((1LL << baseid) & sp->RTmask) == 0 )
+                 {
+                     printf("not RT for (%s) %llx baseid.%d %llx\n",pax->symbol,(long long)sp->RTmask,baseid,(long long)(1LL<<baseid));
+                     continue;
+                 }
+             } else continue;
+         }
+ 
+         //printf("redeem.%d? (%c) %p pax.%s marked.%d %.8f -> %.8f ready.%d validated.%d approved.%d\n",tokomodo,pax->type,pax,pax->symbol,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis),pax->ready!=0,pax->validated!=0,pax->approved!=0);
          if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 )
              printf("pax.%s marked.%d %.8f -> %.8f\n",ASSETCHAINS_SYMBOL,pax->marked,dstr(pax->komodoshis),dstr(pax->fiatoshis));
          txNew->vout.resize(numvouts+1);
***************
*** 392,398 ****
          {
              len += komodo_rwapproval(1,&data[len],pax);
              PENDING_KOMODO_TX += pax->komodoshis;
!             //printf(" vout.%u DEPOSIT %.8f <- pax.%s pending %.8f | ",pax->vout,(double)txNew->vout[numvouts].nValue/COIN,symbol,dstr(PENDING_KOMODO_TX));
          }
          if ( numvouts++ >= 64 )
              break;
--- 537,543 ----
          {
              len += komodo_rwapproval(1,&data[len],pax);
              PENDING_KOMODO_TX += pax->komodoshis;
!             printf(" vout.%u DEPOSIT %.8f <- pax.%s pending %.8f | ",pax->vout,(double)txNew->vout[numvouts].nValue/COIN,symbol,dstr(PENDING_KOMODO_TX));
          }
          if ( numvouts++ >= 64 )
              break;
***************
*** 419,424 ****
--- 564,571 ----
  int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above block is valid pax pricing
  {
      int32_t i,j,n,num,opretlen,offset=1,errs=0,matched=0,kmdheights[64],otherheights[64]; uint256 hash,txids[64]; char symbol[16],base[16]; uint16_t vouts[64]; int8_t baseids[64]; uint8_t *script,opcode,rmd160s[64*20]; uint64_t available,deposited,issued,withdrawn,approved,redeemed; int64_t values[64],srcvalues[64]; struct pax_transaction *pax;
+     if ( KOMODO_PAX == 0 )
+         return(0);
      memset(baseids,0xff,sizeof(baseids));
      memset(values,0,sizeof(values));
      memset(srcvalues,0,sizeof(srcvalues));
***************
*** 442,447 ****
--- 589,603 ----
      {
          strcpy(symbol,ASSETCHAINS_SYMBOL);
          opcode = 'I';
+         if ( komodo_baseid(symbol) < 0 )
+         {
+             if ( block.vtx[0].vout.size() != 1 )
+             {
+                 printf("%s has more than one coinbase?\n",symbol);
+                 return(-1);
+             }
+             return(0);
+         }
      }
      if ( script[offset] == opcode && opretlen < block.vtx[0].vout[n-1].scriptPubKey.size() )
      {
***************
*** 449,455 ****
          {
              for (i=1; i<n-1; i++)
              {
!                 if ( (pax= komodo_paxfinds(txids[i-1],vouts[i-1])) != 0 )
                  {
                      pax->type = opcode;
                      if ( opcode == 'I' && pax_fiatstatus(&available,&deposited,&issued,&withdrawn,&approved,&redeemed,symbol) != 0 || available < pax->fiatoshis )
--- 605,611 ----
          {
              for (i=1; i<n-1; i++)
              {
!                 if ( (pax= komodo_paxfinds(txids[i-1],vouts[i-1])) != 0 ) // finds... make sure right one
                  {
                      pax->type = opcode;
                      if ( opcode == 'I' && pax_fiatstatus(&available,&deposited,&issued,&withdrawn,&approved,&redeemed,symbol) != 0 || available < pax->fiatoshis )
***************
*** 461,476 ****
                      {
                          if ( pax->marked != 0 && height >= 80820 )
                          {
!                             printf("%c errs.%d i.%d match %.8f vs %.8f pax.%p\n",opcode,errs,i,dstr(opcode == 'I' ? pax->fiatoshis : pax->komodoshis),dstr(block.vtx[0].vout[i].nValue),pax);
                              errs++;
!                         } else matched++;
                      }
                      else
                      {
                          for (j=0; j<32; j++)
                              printf("%02x",((uint8_t *)&txids[i-1])[j]);
                          printf(" cant paxfind %c txid\n",opcode);
!                         printf("%c errs.%d i.%d match %.8f vs %.8f pax.%p\n",opcode,errs,i,dstr(opcode == 'I' ? pax->fiatoshis : pax->komodoshis),dstr(block.vtx[0].vout[i].nValue),pax);
                      }
                  }
                  else
--- 617,638 ----
                      {
                          if ( pax->marked != 0 && height >= 80820 )
                          {
!                             printf(">>>>>>>>>>> %c errs.%d i.%d match %.8f vs %.8f pax.%p\n",opcode,errs,i,dstr(opcode == 'I' ? pax->fiatoshis : pax->komodoshis),dstr(block.vtx[0].vout[i].nValue),pax);
                              errs++;
!                         }
!                         else
!                         {
!                             if ( opcode == 'X' )
!                                 printf("check deposit validates %s %.8f -> %.8f\n",CURRENCIES[baseids[i]],dstr(srcvalues[i]),dstr(values[i]));
!                             matched++;
!                         }
                      }
                      else
                      {
                          for (j=0; j<32; j++)
                              printf("%02x",((uint8_t *)&txids[i-1])[j]);
                          printf(" cant paxfind %c txid\n",opcode);
!                         printf(">>>>>>>>>>> %c errs.%d i.%d match %.8f vs %.8f pax.%p\n",opcode,errs,i,dstr(opcode == 'I' ? pax->fiatoshis : pax->komodoshis),dstr(block.vtx[0].vout[i].nValue),pax);
                      }
                  }
                  else
***************
*** 478,491 ****
                      hash = block.GetHash();
                      for (j=0; j<32; j++)
                          printf("%02x",((uint8_t *)&hash)[j]);
!                     printf(" ht.%d blockhash X couldnt find vout.[%d]\n",height,i);
                  }
              }
!             if ( matched != num )
              {
                  printf("WOULD REJECT %s: ht.%d (%c) matched.%d vs num.%d\n",symbol,height,opcode,matched,num);
                  // can easily happen depending on order of loading
!                 if ( height > 100000 ) //&& opcode == 'X' )
                  {
                      printf("REJECT: ht.%d (%c) matched.%d vs num.%d\n",height,opcode,matched,num);
                      return(-1);
--- 640,653 ----
                      hash = block.GetHash();
                      for (j=0; j<32; j++)
                          printf("%02x",((uint8_t *)&hash)[j]);
!                     printf(" kht.%d ht.%d %.8f %.8f blockhash couldnt find vout.[%d]\n",kmdheights[i-1],otherheights[i-1],dstr(values[i-1]),dstr(srcvalues[i]),i);
                  }
              }
!             if ( height <= chainActive.Tip()->nHeight && matched != num )
              {
                  printf("WOULD REJECT %s: ht.%d (%c) matched.%d vs num.%d\n",symbol,height,opcode,matched,num);
                  // can easily happen depending on order of loading
!                 if ( height > 200000 )
                  {
                      printf("REJECT: ht.%d (%c) matched.%d vs num.%d\n",height,opcode,matched,num);
                      return(-1);
***************
*** 497,530 ****
      return(0);
  }
  
- int32_t komodo_paxcmp(char *symbol,int32_t kmdheight,uint64_t value,uint64_t checkvalue,uint64_t seed)
- {
-     int32_t ratio;
-     if ( seed == 0 && checkvalue != 0 )
-     {
-         ratio = ((value << 6) / checkvalue);
-         if ( ratio >= 63 && ratio <= 65 )
-             return(0);
-         else
-         {
-             if ( kmdheight >= 86150 )
-                 printf("ht.%d ignore mismatched %s value %lld vs checkvalue %lld -> ratio.%d\n",kmdheight,symbol,(long long)value,(long long)checkvalue,ratio);
-             return(-1);
-         }
-     }
-     else if ( checkvalue != 0 )
-     {
-         ratio = ((value << 10) / checkvalue);
-         if ( ratio >= 1023 && ratio <= 1025 )
-             return(0);
-     }
-     return(value != checkvalue);
- }
- 
  const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int32_t opretlen,uint256 txid,uint16_t vout,char *source)
  {
      uint8_t rmd160[20],rmd160s[64*20],addrtype,shortflag,pubkey33[33]; int32_t didstats,i,j,n,len,tokomodo,kmdheight,otherheights[64],kmdheights[64]; int8_t baseids[64]; char base[4],coinaddr[64],destaddr[64]; uint256 txids[64]; uint16_t vouts[64]; uint64_t convtoshis,seed; int64_t fiatoshis,komodoshis,checktoshis,values[64],srcvalues[64]; struct pax_transaction *pax,*pax2; struct komodo_state *basesp; double diff;
      const char *typestr = "unknown";
      memset(baseids,0xff,sizeof(baseids));
      memset(values,0,sizeof(values));
      memset(srcvalues,0,sizeof(srcvalues));
--- 659,675 ----
      return(0);
  }
  
  const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int32_t opretlen,uint256 txid,uint16_t vout,char *source)
  {
      uint8_t rmd160[20],rmd160s[64*20],addrtype,shortflag,pubkey33[33]; int32_t didstats,i,j,n,len,tokomodo,kmdheight,otherheights[64],kmdheights[64]; int8_t baseids[64]; char base[4],coinaddr[64],destaddr[64]; uint256 txids[64]; uint16_t vouts[64]; uint64_t convtoshis,seed; int64_t fiatoshis,komodoshis,checktoshis,values[64],srcvalues[64]; struct pax_transaction *pax,*pax2; struct komodo_state *basesp; double diff;
      const char *typestr = "unknown";
+     if ( KOMODO_PAX == 0 )
+         return("nopax");
+     if ( ASSETCHAINS_SYMBOL[0] != 0 && komodo_baseid(ASSETCHAINS_SYMBOL) < 0 )
+     {
+         //printf("komodo_opreturn skip %s\n",ASSETCHAINS_SYMBOL);
+         return("assetchain");
+     }
      memset(baseids,0xff,sizeof(baseids));
      memset(values,0,sizeof(values));
      memset(srcvalues,0,sizeof(srcvalues));
***************
*** 546,552 ****
              if ( kmdheight <= height )
              {
                  didstats = 0;
!                 if ( strcmp(base,ASSETCHAINS_SYMBOL) == 0 )
                  {
                      printf("(%s) (%s) kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,base,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed);
                      for (i=0; i<32; i++)
--- 691,697 ----
              if ( kmdheight <= height )
              {
                  didstats = 0;
!                 if ( 0 && strcmp(base,ASSETCHAINS_SYMBOL) == 0 )
                  {
                      printf("(%s) (%s) kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,base,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed);
                      for (i=0; i<32; i++)
***************
*** 592,598 ****
                              pax2->fiatoshis = pax->fiatoshis;
                              pax2->komodoshis = pax->komodoshis;
                              pax->marked = pax2->marked = pax->height;
!                             pax->otherheight = height;
                              if ( pax2->didstats == 0 )
                              {
                                  if ( (basesp= komodo_stateptrget(base)) != 0 )
--- 737,743 ----
                              pax2->fiatoshis = pax->fiatoshis;
                              pax2->komodoshis = pax->komodoshis;
                              pax->marked = pax2->marked = pax->height;
!                             pax2->height = pax->height = height;
                              if ( pax2->didstats == 0 )
                              {
                                  if ( (basesp= komodo_stateptrget(base)) != 0 )
***************
*** 632,638 ****
                      {
                          pax->type = opretbuf[0];
                          strcpy(pax->source,(char *)&opretbuf[opretlen-4]);
!                         if ( (pax2= komodo_paxfind(txids[i],vouts[i],'D')) != 0 )
                          {
                              // realtime path?
                              pax->fiatoshis = pax2->fiatoshis;
--- 777,783 ----
                      {
                          pax->type = opretbuf[0];
                          strcpy(pax->source,(char *)&opretbuf[opretlen-4]);
!                         if ( (pax2= komodo_paxfind(txids[i],vouts[i],'D')) != 0 && pax2->fiatoshis != 0 && pax2->komodoshis != 0 )
                          {
                              // realtime path?
                              pax->fiatoshis = pax2->fiatoshis;
***************
*** 651,665 ****
                                  }
                              }
                          }
-                         komodo_paxmark(pax->height,txids[i],vouts[i],'D',height);
                      }
                  }
              } else printf("opreturn none issued?\n");
          }
-         if ( strcmp(source,ASSETCHAINS_SYMBOL) == 0 )
-             printf("source.%s opreturn[I] matches %s\n",source,(char *)&opretbuf[opretlen-4]);
      }
!     else if ( opretbuf[0] == 'W' && opretlen >= 38 )
      {
          tokomodo = 1;
          iguana_rwnum(0,&opretbuf[34],sizeof(kmdheight),&kmdheight);
--- 796,811 ----
                                  }
                              }
                          }
                      }
+                     if ( (pax= komodo_paxmark(height,txids[i],vouts[i],'I',height)) != 0 )
+                         komodo_paxdelete(pax);
+                     if ( (pax= komodo_paxmark(height,txids[i],vouts[i],'D',height)) != 0 )
+                         komodo_paxdelete(pax);
                  }
              } else printf("opreturn none issued?\n");
          }
      }
!     else if ( opretbuf[0] == 'W' )//&& opretlen >= 38 )
      {
          tokomodo = 1;
          iguana_rwnum(0,&opretbuf[34],sizeof(kmdheight),&kmdheight);
***************
*** 668,676 ****
          bitcoin_address(coinaddr,addrtype,rmd160,20);
          checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,value);
          typestr = "withdraw";
!         //printf("%s.height.%d vs height.%d check %.8f/%.8f vs %.8f tokomodo.%d %d seed.%llx -> (%s)\n",ASSETCHAINS_SYMBOL,kmdheight,height,dstr(checktoshis),dstr(komodoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed,coinaddr);
          didstats = 0;
!         if ( komodo_paxcmp(base,kmdheight,komodoshis,checktoshis,seed) == 0 )
          {
              if ( value != 0 && ((pax= komodo_paxfind(txid,vout,'W')) == 0 || pax->didstats == 0) )
              {
--- 814,823 ----
          bitcoin_address(coinaddr,addrtype,rmd160,20);
          checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,value);
          typestr = "withdraw";
!         if ( 0 && strcmp(base,"RUB") == 0 )
!             printf("RUB WITHDRAW %s.height.%d vs height.%d check %.8f/%.8f vs %.8f tokomodo.%d %d seed.%llx -> (%s) len.%d\n",ASSETCHAINS_SYMBOL,kmdheight,height,dstr(checktoshis),dstr(komodoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed,coinaddr,opretlen);
          didstats = 0;
!         //if ( komodo_paxcmp(base,kmdheight,komodoshis,checktoshis,seed) == 0 )
          {
              if ( value != 0 && ((pax= komodo_paxfind(txid,vout,'W')) == 0 || pax->didstats == 0) )
              {
***************
*** 679,697 ****
                      basesp->withdrawn += value;
                      didstats = 1;
                      if ( strcmp(base,ASSETCHAINS_SYMBOL) == 0 )
!                         printf("########### %p withdrawn %s += %.8f\n",basesp,base,dstr(value));
                  }
!                 //printf("notarize %s %.8f -> %.8f kmd.%d other.%d\n",ASSETCHAINS_SYMBOL,dstr(value),dstr(komodoshis),kmdheight,height);
              }
!             komodo_gateway_deposit(coinaddr,komodoshis,(char *)"KMD",value,rmd160,txid,vout,'W',kmdheight,height,source,0);
              if ( (pax= komodo_paxfind(txid,vout,'W')) != 0 )
              {
-                 if ( didstats != 0 )
-                     pax->didstats = 1;
                  pax->type = opretbuf[0];
!                 pax->validated = komodoshis;
              }
!         }
      }
      else if ( tokomodo != 0 && opretbuf[0] == 'A' )
      {
--- 826,848 ----
                      basesp->withdrawn += value;
                      didstats = 1;
                      if ( strcmp(base,ASSETCHAINS_SYMBOL) == 0 )
!                         printf("########### %p withdrawn %s += %.8f check %.8f\n",basesp,base,dstr(value),dstr(checktoshis));
                  }
!                 if ( 0 && strcmp(base,"RUB") == 0 && (pax == 0 || pax->approved == 0) )
!                     printf("notarize %s %.8f -> %.8f kmd.%d other.%d\n",ASSETCHAINS_SYMBOL,dstr(value),dstr(komodoshis),kmdheight,height);
              }
!             komodo_gateway_deposit(coinaddr,0,(char *)"KMD",value,rmd160,txid,vout,'W',kmdheight,height,source,0);
              if ( (pax= komodo_paxfind(txid,vout,'W')) != 0 )
              {
                  pax->type = opretbuf[0];
!                 strcpy(pax->source,base);
!                 strcpy(pax->symbol,"KMD");
!                 pax->height = kmdheight;
!                 pax->otherheight = height;
!                 pax->komodoshis = komodoshis;
              }
!         } // else printf("withdraw %s paxcmp ht.%d %d error value %.8f -> %.8f vs %.8f\n",base,kmdheight,height,dstr(value),dstr(komodoshis),dstr(checktoshis));
!         // need to allocate pax
      }
      else if ( tokomodo != 0 && opretbuf[0] == 'A' )
      {
***************
*** 700,756 ****
          {
              for (i=0; i<opretlen; i++)
                  printf("%02x",opretbuf[i]);
!             printf(" opret[%c] else path tokomodo.%d ht.%d before %.8f\n",opretbuf[0],tokomodo,height,dstr(komodo_paxtotal()));
          }
          if ( (n= komodo_issued_opreturn(base,txids,vouts,values,srcvalues,kmdheights,otherheights,baseids,rmd160s,opretbuf,opretlen,1)) > 0 )
          {
              for (i=0; i<n; i++)
              {
                  if ( baseids[i] < 0 )
-                     continue;
-                 didstats = 0;
-                 seed = 0;
-                 checktoshis = komodo_paxprice(&seed,kmdheights[i],CURRENCIES[baseids[i]],(char *)"KMD",(uint64_t)srcvalues[i]);
-                 /*printf("PAX_fiatdest ht.%d price %s %.8f -> KMD %.8f vs %.8f\n",kmdheights[i],CURRENCIES[baseids[i]],(double)srcvalues[i]/COIN,(double)values[i]/COIN,(double)checktoshis/COIN);
-                 for (j=0; j<32; j++)
-                     printf("%02x",((uint8_t *)&txids[i])[j]);
-                 printf(" v%d %.8f k.%d ht.%d base.%d\n",vouts[i],dstr(values[i]),kmdheights[i],otherheights[i],baseids[i]);*/
-                 if ( (pax= komodo_paxfind(txids[i],vouts[i],'A')) == 0 )
                  {
!                     bitcoin_address(coinaddr,60,&rmd160s[i*20],20);
!                     komodo_gateway_deposit(coinaddr,values[i],CURRENCIES[baseids[i]],srcvalues[i],&rmd160s[i*20],txids[i],vouts[i],'A',kmdheights[i],otherheights[i],CURRENCIES[baseids[i]],kmdheights[i]);
!                     komodo_paxmark(height,txids[i],vouts[i],'W',height);
!                     komodo_paxmark(height,txids[i],vouts[i],'A',height);
!                     if ( srcvalues[i] != 0 && (basesp= komodo_stateptrget(CURRENCIES[baseids[i]])) != 0 )
                      {
!                         basesp->approved += srcvalues[i];
!                         didstats = 1;
!                         if ( strcmp(CURRENCIES[baseids[i]],ASSETCHAINS_SYMBOL) == 0 )
!                             printf("########### %p approved %s += %.8f\n",basesp,CURRENCIES[baseids[i]],dstr(srcvalues[i]));
                      }
!                     //printf(" i.%d (%s) <- %.8f ADDFLAG APPROVED\n",i,coinaddr,dstr(values[i]));
                  }
!                 else if ( pax->didstats == 0 && srcvalues[i] != 0 )
!                 {
!                     if ( (basesp= komodo_stateptrget(CURRENCIES[baseids[i]])) != 0 )
                      {
!                         basesp->approved += srcvalues[i];
!                         didstats = 1;
!                         if ( strcmp(CURRENCIES[baseids[i]],ASSETCHAINS_SYMBOL) == 0 )
!                             printf("########### %p approved %s += %.8f\n",basesp,CURRENCIES[baseids[i]],dstr(srcvalues[i]));
                      }
-                 } //else printf(" i.%d of n.%d pax.%p baseids[] %d\n",i,n,pax,baseids[i]);
-                 if ( (pax= komodo_paxfind(txids[i],vouts[i],'A')) != 0 )
-                 {
-                     pax->type = opretbuf[0];
-                     pax->approved = kmdheights[i];
-                     if ( didstats != 0 )
-                         pax->didstats = 1;
-                     if ( strcmp(CURRENCIES[baseids[i]],ASSETCHAINS_SYMBOL) == 0 )
-                         printf(" i.%d approved.%d <<<<<<<<<<<<< APPROVED %p\n",i,kmdheights[i],pax);
                  }
              }
!         }
          //printf("extra.[%d] after %.8f\n",n,dstr(komodo_paxtotal()));
      }
      else if ( opretbuf[0] == 'X' )
--- 851,928 ----
          {
              for (i=0; i<opretlen; i++)
                  printf("%02x",opretbuf[i]);
!             printf(" opret[%c] else path tokomodo.%d ht.%d before %.8f opretlen.%d\n",opretbuf[0],tokomodo,height,dstr(komodo_paxtotal()),opretlen);
          }
          if ( (n= komodo_issued_opreturn(base,txids,vouts,values,srcvalues,kmdheights,otherheights,baseids,rmd160s,opretbuf,opretlen,1)) > 0 )
          {
              for (i=0; i<n; i++)
              {
+                 //for (j=0; j<32; j++)
+                 //    printf("%02x",((uint8_t *)&txids[i])[j]);
+                 //printf(" v%d %.8f %.8f k.%d ht.%d base.%d\n",vouts[i],dstr(values[i]),dstr(srcvalues[i]),kmdheights[i],otherheights[i],baseids[i]);
                  if ( baseids[i] < 0 )
                  {
!                     for (i=0; i<opretlen; i++)
!                         printf("%02x",opretbuf[i]);
!                     printf(" opret[%c] else path tokomodo.%d ht.%d before %.8f opretlen.%d\n",opretbuf[0],tokomodo,height,dstr(komodo_paxtotal()),opretlen);
!                     //printf("baseids[%d] %d\n",i,baseids[i]);
!                     if ( (pax= komodo_paxfind(txids[i],vouts[i],'W')) != 0 || (pax= komodo_paxfind(txids[i],vouts[i],'X')) != 0 )
                      {
!                         baseids[i] = komodo_baseid(pax->symbol);
!                         printf("override neg1 with (%s)\n",pax->symbol);
                      }
!                     if ( baseids[i] < 0 )
!                         continue;
                  }
!                 didstats = 0;
!                 seed = 0;
!                 checktoshis = komodo_paxprice(&seed,kmdheights[i],CURRENCIES[baseids[i]],(char *)"KMD",(uint64_t)values[i]);
!                 //printf("PAX_fiatdest ht.%d price %s %.8f -> KMD %.8f vs %.8f\n",kmdheights[i],CURRENCIES[baseids[i]],(double)values[i]/COIN,(double)srcvalues[i]/COIN,(double)checktoshis/COIN);
!                 if ( srcvalues[i] == checktoshis )
!                 {
!                     if ( (pax= komodo_paxfind(txids[i],vouts[i],'A')) == 0 )
!                     {
!                         bitcoin_address(coinaddr,60,&rmd160s[i*20],20);
!                         komodo_gateway_deposit(coinaddr,srcvalues[i],CURRENCIES[baseids[i]],values[i],&rmd160s[i*20],txids[i],vouts[i],'A',kmdheights[i],otherheights[i],CURRENCIES[baseids[i]],kmdheights[i]);
!                         if ( (pax= komodo_paxfind(txids[i],vouts[i],'A')) == 0 )
!                             printf("unexpected null pax for approve\n");
!                         else pax->validated = checktoshis;
!                         if ( (pax2= komodo_paxfind(txids[i],vouts[i],'W')) != 0 )
!                             pax2->approved = kmdheights[i];
!                         komodo_paxmark(height,txids[i],vouts[i],'W',height);
!                         //komodo_paxmark(height,txids[i],vouts[i],'A',height);
!                         if ( values[i] != 0 && (basesp= komodo_stateptrget(CURRENCIES[baseids[i]])) != 0 )
!                         {
!                             basesp->approved += values[i];
!                             didstats = 1;
!                             if ( strcmp(CURRENCIES[baseids[i]],ASSETCHAINS_SYMBOL) == 0 )
!                                 printf("pax.%p ########### %p approved %s += %.8f -> %.8f/%.8f kht.%d %d\n",pax,basesp,CURRENCIES[baseids[i]],dstr(values[i]),dstr(srcvalues[i]),dstr(checktoshis),kmdheights[i],otherheights[i]);
!                         }
!                         //printf(" i.%d (%s) <- %.8f ADDFLAG APPROVED\n",i,coinaddr,dstr(values[i]));
!                     }
!                     else if ( pax->didstats == 0 && srcvalues[i] != 0 )
                      {
!                         if ( (basesp= komodo_stateptrget(CURRENCIES[baseids[i]])) != 0 )
!                         {
!                             basesp->approved += values[i];
!                             didstats = 1;
!                             if ( strcmp(CURRENCIES[baseids[i]],ASSETCHAINS_SYMBOL) == 0 )
!                                 printf("pax.%p ########### %p approved %s += %.8f -> %.8f/%.8f\n",pax,basesp,CURRENCIES[baseids[i]],dstr(values[i]),dstr(srcvalues[i]),dstr(checktoshis));
!                         }
!                     } //else printf(" i.%d of n.%d pax.%p baseids[] %d\n",i,n,pax,baseids[i]);
!                     if ( (pax= komodo_paxfind(txids[i],vouts[i],'A')) != 0 )
!                     {
!                         pax->type = opretbuf[0];
!                         pax->approved = kmdheights[i];
!                         pax->validated = checktoshis;
!                         if ( didstats != 0 )
!                             pax->didstats = 1;
!                         //if ( strcmp(CURRENCIES[baseids[i]],ASSETCHAINS_SYMBOL) == 0 )
!                         //printf(" i.%d approved.%d <<<<<<<<<<<<< APPROVED %p\n",i,kmdheights[i],pax);
                      }
                  }
              }
!         } else printf("n.%d from opreturns\n",n);
          //printf("extra.[%d] after %.8f\n",n,dstr(komodo_paxtotal()));
      }
      else if ( opretbuf[0] == 'X' )
***************
*** 770,783 ****
                  if ( (pax= komodo_paxfind(txids[i],vouts[i],'X')) != 0 )
                  {
                      pax->type = opretbuf[0];
!                     if ( baseids[i] >= 0 && srcvalues[i] != 0 && (basesp= komodo_stateptrget(CURRENCIES[baseids[i]])) != 0 )
                      {
!                         basesp->redeemed += srcvalues[i];
                          pax->didstats = 1;
!                         if ( strcmp(CURRENCIES[baseids[i]],ASSETCHAINS_SYMBOL) == 0 )
!                             printf("########### %p redeemed %s += %.8f\n",basesp,CURRENCIES[baseids[i]],dstr(srcvalues[i]));
                      }
                  }
              }
          } //else printf("komodo_issued_opreturn returned %d\n",n);
      }
--- 942,964 ----
                  if ( (pax= komodo_paxfind(txids[i],vouts[i],'X')) != 0 )
                  {
                      pax->type = opretbuf[0];
!                     if ( height < 121842 ) // fields got switched around due to legacy issues and approves
!                         value = srcvalues[i];
!                     else value = values[i];
!                     if ( baseids[i] >= 0 && value != 0 && (basesp= komodo_stateptrget(CURRENCIES[baseids[i]])) != 0 )
                      {
!                         basesp->redeemed += value;
                          pax->didstats = 1;
!                         //if ( strcmp(CURRENCIES[baseids[i]],ASSETCHAINS_SYMBOL) == 0 )
!                             printf("ht.%d %.8f ########### %p redeemed %s += %.8f %.8f kht.%d ht.%d\n",height,dstr(value),basesp,CURRENCIES[baseids[i]],dstr(value),dstr(srcvalues[i]),kmdheights[i],otherheights[i]);
                      }
                  }
+                 if ( (pax= komodo_paxmark(height,txids[i],vouts[i],'W',height)) != 0 )
+                     komodo_paxdelete(pax);
+                 if ( (pax= komodo_paxmark(height,txids[i],vouts[i],'A',height)) != 0 )
+                     komodo_paxdelete(pax);
+                 if ( (pax= komodo_paxmark(height,txids[i],vouts[i],'X',height)) != 0 )
+                     komodo_paxdelete(pax);
              }
          } //else printf("komodo_issued_opreturn returned %d\n",n);
      }
***************
*** 788,802 ****
  {
      static long lastpos[34]; static char userpass[33][1024];
      FILE *fp; int32_t baseid,isrealtime,refid,blocks,longest; struct komodo_state *sp,*refsp; char *retstr,fname[512],*base,symbol[16],dest[16]; uint32_t buf[3]; cJSON *infoobj,*result; uint64_t RTmask = 0;
      while ( KOMODO_INITDONE == 0 )
      {
!         fprintf(stderr,"PASSPORT iteration waiting for KOMODO_INITDONE\n");
          sleep(3);
      }
      refsp = komodo_stateptr(symbol,dest);
      if ( ASSETCHAINS_SYMBOL[0] == 0 )
          refid = 33;
!     else refid = komodo_baseid(ASSETCHAINS_SYMBOL)+1; // illegal base -> baseid.-1 -> 0
      //printf("PASSPORT %s refid.%d\n",ASSETCHAINS_SYMBOL,refid);
      for (baseid=32; baseid>=0; baseid--)
      {
--- 969,997 ----
  {
      static long lastpos[34]; static char userpass[33][1024];
      FILE *fp; int32_t baseid,isrealtime,refid,blocks,longest; struct komodo_state *sp,*refsp; char *retstr,fname[512],*base,symbol[16],dest[16]; uint32_t buf[3]; cJSON *infoobj,*result; uint64_t RTmask = 0;
+     //printf("PASSPORT.(%s)\n",ASSETCHAINS_SYMBOL);
      while ( KOMODO_INITDONE == 0 )
      {
!         fprintf(stderr,"[%s] PASSPORT iteration waiting for KOMODO_INITDONE\n",ASSETCHAINS_SYMBOL);
          sleep(3);
      }
      refsp = komodo_stateptr(symbol,dest);
      if ( ASSETCHAINS_SYMBOL[0] == 0 )
          refid = 33;
!     else
!     {
!         refid = komodo_baseid(ASSETCHAINS_SYMBOL)+1; // illegal base -> baseid.-1 -> 0
!         if ( refid == 0 )
!         {
!             KOMODO_PASSPORT_INITDONE = 1;
!             return;
!         }
!     }
!     if ( KOMODO_PAX == 0 )
!     {
!         KOMODO_PASSPORT_INITDONE = 1;
!         return;
!     }
      //printf("PASSPORT %s refid.%d\n",ASSETCHAINS_SYMBOL,refid);
      for (baseid=32; baseid>=0; baseid--)
      {
***************
*** 807,813 ****
          {
              komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"komodostate");
              komodo_nameset(symbol,dest,base);
!             if ( (fp= fopen(fname,"rb")) != 0 && (sp= komodo_stateptrget(symbol)) != 0 )
              {
                  fseek(fp,0,SEEK_END);
                  if ( ftell(fp) > lastpos[baseid] )
--- 1002,1009 ----
          {
              komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"komodostate");
              komodo_nameset(symbol,dest,base);
!             sp = komodo_stateptrget(symbol);
!             if ( (fp= fopen(fname,"rb")) != 0 && sp != 0 )
              {
                  fseek(fp,0,SEEK_END);
                  if ( ftell(fp) > lastpos[baseid] )
***************
*** 822,840 ****
                          printf("from.(%s) lastpos[%s] %ld\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseid],lastpos[baseid]);
                  } //else fprintf(stderr,"%s.%ld ",CURRENCIES[baseid],ftell(fp));
                  fclose(fp);
!             }
              komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"realtime");
              if ( (fp= fopen(fname,"rb")) != 0 )
              {
                  if ( fread(buf,1,sizeof(buf),fp) == sizeof(buf) )
                  {
                      sp->CURRENT_HEIGHT = buf[0];
!                     if ( buf[0] != 0 && buf[0] == buf[1] && buf[2] > time(NULL)-60 )
                      {
                          isrealtime = 1;
                          RTmask |= (1LL << baseid);
                          memcpy(refsp->RTbufs[baseid+1],buf,sizeof(refsp->RTbufs[baseid+1]));
!                     } //else fprintf(stderr,"%s not RT\n",base);
                  } //else fprintf(stderr,"%s size error RT\n",base);
                  fclose(fp);
              } //else fprintf(stderr,"%s open error RT\n",base);
--- 1018,1036 ----
                          printf("from.(%s) lastpos[%s] %ld\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseid],lastpos[baseid]);
                  } //else fprintf(stderr,"%s.%ld ",CURRENCIES[baseid],ftell(fp));
                  fclose(fp);
!             } else printf("error.(%s) %p\n",fname,sp);
              komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"realtime");
              if ( (fp= fopen(fname,"rb")) != 0 )
              {
                  if ( fread(buf,1,sizeof(buf),fp) == sizeof(buf) )
                  {
                      sp->CURRENT_HEIGHT = buf[0];
!                     if ( buf[0] != 0 && buf[0] >= buf[1] && buf[2] > time(NULL)-300 )
                      {
                          isrealtime = 1;
                          RTmask |= (1LL << baseid);
                          memcpy(refsp->RTbufs[baseid+1],buf,sizeof(refsp->RTbufs[baseid+1]));
!                     } else fprintf(stderr,"[%s]: %s not RT %u %u %d\n",ASSETCHAINS_SYMBOL,base,buf[0],buf[1],(int32_t)(time(NULL)-buf[2]));
                  } //else fprintf(stderr,"%s size error RT\n",base);
                  fclose(fp);
              } //else fprintf(stderr,"%s open error RT\n",base);
***************
*** 849,855 ****
                  if ( buf[0] != 0 && buf[0] == buf[1] )
                  {
                      buf[2] = (uint32_t)time(NULL);
!                     RTmask |= (1LL << baseid) | 1;
                      memcpy(refsp->RTbufs[baseid+1],buf,sizeof(refsp->RTbufs[baseid+1]));
                      if ( refid != 0 )
                          memcpy(refsp->RTbufs[0],buf,sizeof(refsp->RTbufs[0]));
--- 1045,1051 ----
                  if ( buf[0] != 0 && buf[0] == buf[1] )
                  {
                      buf[2] = (uint32_t)time(NULL);
!                     RTmask |= (1LL << baseid);
                      memcpy(refsp->RTbufs[baseid+1],buf,sizeof(refsp->RTbufs[baseid+1]));
                      if ( refid != 0 )
                          memcpy(refsp->RTbufs[0],buf,sizeof(refsp->RTbufs[0]));
***************
*** 865,869 ****
--- 1061,1066 ----
      komodo_paxtotal();
      refsp->RTmask = RTmask;
      KOMODO_PASSPORT_INITDONE = 1;
+     //printf("done PASSPORT %s refid.%d\n",ASSETCHAINS_SYMBOL,refid);
  }
  
diff -crB ./src/komodo_globals.h ../../komodo-jl777/src/komodo_globals.h
*** ./src/komodo_globals.h	2017-01-03 10:40:50.231330177 +0000
--- ../../komodo-jl777/src/komodo_globals.h	2017-01-03 09:49:08.856506348 +0000
***************
*** 36,42 ****
  
  int COINBASE_MATURITY = 100;
  
! int32_t IS_KOMODO_NOTARY,KOMODO_REWIND,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES,KOMODO_PASSPORT_INITDONE;
  std::string NOTARY_PUBKEY,ASSETCHAINS_NOTARIES;
  uint8_t NOTARY_PUBKEY33[33];
  
--- 36,42 ----
  
  int COINBASE_MATURITY = 100;
  
! int32_t IS_KOMODO_NOTARY,KOMODO_REWIND,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAINS_SEED,KOMODO_ON_DEMAND,KOMODO_EXTERNAL_NOTARIES,KOMODO_PASSPORT_INITDONE,KOMODO_PAX;
  std::string NOTARY_PUBKEY,ASSETCHAINS_NOTARIES;
  uint8_t NOTARY_PUBKEY33[33];
  
diff -crB ./src/komodo.h ../../komodo-jl777/src/komodo.h
*** ./src/komodo.h	2017-01-03 10:40:50.231330177 +0000
--- ../../komodo-jl777/src/komodo.h	2017-01-03 09:49:08.856506348 +0000
***************
*** 23,29 ****
  // a. automate notarization fee payouts
  // b. automated distribution of test REVS snapshot
  
! //#define KOMODO_ASSETCHAINS_WAITNOTARIZE
  #define KOMODO_PAXMAX (10000 * COIN)
  
  #include <stdint.h>
--- 23,29 ----
  // a. automate notarization fee payouts
  // b. automated distribution of test REVS snapshot
  
! #define KOMODO_ASSETCHAINS_WAITNOTARIZE
  #define KOMODO_PAXMAX (10000 * COIN)
  
  #include <stdint.h>
***************
*** 194,200 ****
--- 194,203 ----
      static FILE *fp; static int32_t errs;
      struct komodo_state *sp; char fname[512],symbol[16],dest[16]; int32_t ht,func; uint8_t num,pubkeys[64][33];
      if ( (sp= komodo_stateptr(symbol,dest)) == 0 )
+     {
+         KOMODO_INITDONE = (uint32_t)time(NULL);
          return;
+     }
      if ( fp == 0 )
      {
          komodo_statefname(fname,ASSETCHAINS_SYMBOL,(char *)"komodostate");
***************
*** 281,287 ****
                  errs++;
              //komodo_eventadd_utxo(sp,symbol,height,notaryid,txhash,voutmask,numvouts);
          }
- //#ifdef KOMODO_PAX
          else if ( pvals != 0 && numpvals > 0 )
          {
              int32_t i,nonz = 0;
--- 284,289 ----
***************
*** 301,307 ****
              }
              //printf("save pvals height.%d numpvals.%d\n",height,numpvals);
          }
- //#endif
          else if ( height != 0 )
          {
              //printf("ht.%d func N ht.%d errs.%d\n",height,NOTARIZED_HEIGHT,errs);
--- 303,308 ----
diff -crB ./src/komodo_interest.h ../../komodo-jl777/src/komodo_interest.h
*** ./src/komodo_interest.h	2017-01-03 10:40:50.231330177 +0000
--- ../../komodo-jl777/src/komodo_interest.h	2017-01-03 09:49:08.856506348 +0000
***************
*** 21,29 ****
      uint64_t total; int32_t ind,incr = 100000;
      if ( height >= maxheight )
      {
!         interests = (uint64_t *)realloc(interests,(maxheight + incr) * sizeof(*interests) * 2);
!         memset(&interests[maxheight << 1],0,incr * sizeof(*interests) * 2);
!         maxheight += incr;
      }
      ind = (height << 1);
      if ( paidinterest < 0 ) // request
--- 21,37 ----
      uint64_t total; int32_t ind,incr = 100000;
      if ( height >= maxheight )
      {
!         if ( interests == 0 )
!         {
!             maxheight = height + incr;
!             interests = (uint64_t *)calloc(maxheight,sizeof(*interests) * 2);
!         }
!         else
!         {
!             interests = (uint64_t *)realloc(interests,(maxheight + incr) * sizeof(*interests) * 2);
!             memset(&interests[maxheight << 1],0,incr * sizeof(*interests) * 2);
!             maxheight += incr;
!         }
      }
      ind = (height << 1);
      if ( paidinterest < 0 ) // request
diff -crB ./src/komodo_pax.h ../../komodo-jl777/src/komodo_pax.h
*** ./src/komodo_pax.h	2017-01-03 10:40:50.231330177 +0000
--- ../../komodo-jl777/src/komodo_pax.h	2017-01-03 09:49:08.856506348 +0000
***************
*** 429,434 ****
--- 429,435 ----
          height -= 10;
      if ( (baseid= komodo_baseid(base)) >= 0 && (relid= komodo_baseid(rel)) >= 0 )
      {
+         portable_mutex_lock(&komodo_mutex);
          for (i=NUM_PRICES-1; i>=0; i--)
          {
              ptr = &PVALS[36 * i];
***************
*** 439,450 ****
                      *kmdbtcp = ptr[MAX_CURRENCIES + 1] / 539;
                      *btcusdp = ptr[MAX_CURRENCIES + 2] / 539;
                  }
                  if ( kmdbtc != 0 && btcusd != 0 )
                      return(komodo_paxcalc(&ptr[1],baseid,relid,basevolume,kmdbtc,btcusd));
                  else return(0);
              }
          }
!     } else printf("paxprice invalid base.%s %d, rel.%s %d\n",base,baseid,rel,relid);
      return(0);
  }
  
--- 440,453 ----
                      *kmdbtcp = ptr[MAX_CURRENCIES + 1] / 539;
                      *btcusdp = ptr[MAX_CURRENCIES + 2] / 539;
                  }
+                 portable_mutex_unlock(&komodo_mutex);
                  if ( kmdbtc != 0 && btcusd != 0 )
                      return(komodo_paxcalc(&ptr[1],baseid,relid,basevolume,kmdbtc,btcusd));
                  else return(0);
              }
          }
!         portable_mutex_unlock(&komodo_mutex);
!     } //else printf("paxprice invalid base.%s %d, rel.%s %d\n",base,baseid,rel,relid);
      return(0);
  }
  
***************
*** 473,479 ****
      }
      kmdbtc = komodo_paxcorrelation(kmdbtcs,numvotes,*seedp) * 539;
      btcusd = komodo_paxcorrelation(btcusds,numvotes,*seedp) * 539;
-     //printf("kmdbtc %llu btcusd %llu\n",(long long)kmdbtc,(long long)btcusd);
      for (i=nonz=0; i<numvotes; i++)
      {
          if ( (votes[numvotes-1-i]= _komodo_paxprice(0,0,height-i,base,rel,100000,kmdbtc,btcusd)) == 0 )
--- 476,481 ----
***************
*** 481,487 ****
--- 483,493 ----
          else nonz++;
      }
      if ( nonz <= (numvotes >> 1) )
+     {
+         //printf("kmdbtc %llu btcusd %llu\n",(long long)kmdbtc,(long long)btcusd);
+         //printf("komodo_paxprice nonz.%d of numvotes.%d\n",nonz,numvotes);
          return(0);
+     }
      return(komodo_paxcorrelation(votes,numvotes,*seedp) * basevolume / 100000);
  }
  
***************
*** 527,533 ****
      if ( fiatoshis < 0 )
          shortflag = 1, fiatoshis = -fiatoshis;
      komodoshis = komodo_paxprice(seedp,height,base,(char *)"KMD",(uint64_t)fiatoshis);
!     //printf("PAX_fiatdest ht.%d price %s %.8f -> KMD %.8f seed.%llx\n",height,base,(double)fiatoshis/COIN,(double)komodoshis/COIN,(long long)*seedp);
      if ( bitcoin_addr2rmd160(&addrtype,rmd160,coinaddr) == 20 )
      {
          PAX_pubkey(1,pubkey33,&addrtype,rmd160,base,&shortflag,tokomodo != 0 ? &komodoshis : &fiatoshis);
--- 533,540 ----
      if ( fiatoshis < 0 )
          shortflag = 1, fiatoshis = -fiatoshis;
      komodoshis = komodo_paxprice(seedp,height,base,(char *)"KMD",(uint64_t)fiatoshis);
!     if ( 0 && strcmp(base,"RUB") == 0 )
!         printf("PAX_fiatdest ht.%d price %s %.8f -> KMD %.8f seed.%llx\n",height,base,(double)fiatoshis/COIN,(double)komodoshis/COIN,(long long)*seedp);
      if ( bitcoin_addr2rmd160(&addrtype,rmd160,coinaddr) == 20 )
      {
          PAX_pubkey(1,pubkey33,&addrtype,rmd160,base,&shortflag,tokomodo != 0 ? &komodoshis : &fiatoshis);
diff -crB ./src/komodo_structs.h ../../komodo-jl777/src/komodo_structs.h
*** ./src/komodo_structs.h	2017-01-03 10:40:50.231330177 +0000
--- ../../komodo-jl777/src/komodo_structs.h	2017-01-03 09:49:08.856506348 +0000
***************
*** 57,63 ****
      UT_hash_handle hh;
      uint256 txid;
      uint64_t komodoshis,fiatoshis,validated;
!     int32_t marked,height,otherheight,approved,didstats;
      uint16_t vout;
      char symbol[16],source[16],coinaddr[64]; uint8_t rmd160[20],type,buf[35];
  };
--- 57,63 ----
      UT_hash_handle hh;
      uint256 txid;
      uint64_t komodoshis,fiatoshis,validated;
!     int32_t marked,height,otherheight,approved,didstats,ready;
      uint16_t vout;
      char symbol[16],source[16],coinaddr[64]; uint8_t rmd160[20],type,buf[35];
  };
diff -crB ./src/komodo_utils.h ../../komodo-jl777/src/komodo_utils.h
*** ./src/komodo_utils.h	2017-01-03 10:40:50.235330381 +0000
--- ../../komodo-jl777/src/komodo_utils.h	2017-01-03 09:49:08.856506348 +0000
***************
*** 1448,1454 ****
--- 1448,1457 ----
      IS_KOMODO_NOTARY = GetBoolArg("-notary", false);
      NOTARY_PUBKEY = GetArg("-pubkey", "");
      if ( strlen(NOTARY_PUBKEY.c_str()) == 66 )
+     {
          USE_EXTERNAL_PUBKEY = 1;
+         KOMODO_PAX = 1;
+     } else KOMODO_PAX = GetArg("-pax",0);
      name = GetArg("-ac_name","");
      if ( (KOMODO_REWIND= GetArg("-rewind",0)) != 0 )
          ;
diff -crB ./src/main.cpp ../../komodo-jl777/src/main.cpp
*** ./src/main.cpp	2017-01-03 10:40:50.255331392 +0000
--- ../../komodo-jl777/src/main.cpp	2017-01-03 09:49:08.864506767 +0000
***************
*** 26,31 ****
--- 26,32 ----
  #include "util.h"
  #include "utilmoneystr.h"
  #include "validationinterface.h"
+ #include "wallet/asyncrpcoperation_sendmany.h"
  
  #include <sstream>
  
***************
*** 70,76 ****
  bool fAlerts = DEFAULT_ALERTS;
  
  /** Fees smaller than this (in satoshi) are considered zero fee (for relaying and mining) */
! CFeeRate minRelayTxFee = CFeeRate(5000);
  
  CTxMemPool mempool(::minRelayTxFee);
  
--- 71,77 ----
  bool fAlerts = DEFAULT_ALERTS;
  
  /** Fees smaller than this (in satoshi) are considered zero fee (for relaying and mining) */
! CFeeRate minRelayTxFee = CFeeRate(DEFAULT_MIN_RELAY_TX_FEE);
  
  CTxMemPool mempool(::minRelayTxFee);
  
***************
*** 550,556 ****
  
  // Komodo globals
  
- #define KOMODO_PAX
  #define KOMODO_ZCASH
  #include "komodo.h"
  
--- 551,556 ----
***************
*** 871,878 ****
          return false;
      } else {
          // Ensure that zk-SNARKs verify
          BOOST_FOREACH(const JSDescription &joinsplit, tx.vjoinsplit) {
!             if (!joinsplit.Verify(*pzcashParams, tx.joinSplitPubKey)) {
                  return state.DoS(100, error("CheckTransaction(): joinsplit does not verify"),
                                      REJECT_INVALID, "bad-txns-joinsplit-verification-failed");
              }
--- 871,879 ----
          return false;
      } else {
          // Ensure that zk-SNARKs verify
+         auto verifier = libzcash::ProofVerifier::Strict();
          BOOST_FOREACH(const JSDescription &joinsplit, tx.vjoinsplit) {
!             if (!joinsplit.Verify(*pzcashParams, verifier, tx.joinSplitPubKey)) {
                  return state.DoS(100, error("CheckTransaction(): joinsplit does not verify"),
                                      REJECT_INVALID, "bad-txns-joinsplit-verification-failed");
              }
***************
*** 1211,1222 ****
          CTxMemPoolEntry entry(tx, nFees, GetTime(), dPriority, chainActive.Height(), mempool.HasNoInputsOf(tx));
          unsigned int nSize = entry.GetTxSize();
  
!         // Don't accept it if it can't get into a block
!         CAmount txMinFee = GetMinRelayFee(tx, nSize, true);
!         if (fLimitFree && nFees < txMinFee)
!             return state.DoS(0, error("AcceptToMemoryPool: not enough fees %s, %d < %d",
!                                       hash.ToString(), nFees, txMinFee),
!                              REJECT_INSUFFICIENTFEE, "insufficient fee");
  
          // Require that free transactions have sufficient priority to be mined in the next block.
          if (GetBoolArg("-relaypriority", false) && nFees < ::minRelayTxFee.GetFee(nSize) && !AllowFree(view.GetPriority(tx, chainActive.Height() + 1))) {
--- 1212,1228 ----
          CTxMemPoolEntry entry(tx, nFees, GetTime(), dPriority, chainActive.Height(), mempool.HasNoInputsOf(tx));
          unsigned int nSize = entry.GetTxSize();
  
!         // Accept a tx if it contains joinsplits and has at least the default fee specified by z_sendmany.
!         if (tx.vjoinsplit.size() > 0 && nFees >= ASYNC_RPC_OPERATION_DEFAULT_MINERS_FEE) {
!             // In future we will we have more accurate and dynamic computation of fees for tx with joinsplits.
!         } else {
!             // Don't accept it if it can't get into a block
!             CAmount txMinFee = GetMinRelayFee(tx, nSize, true);
!             if (fLimitFree && nFees < txMinFee)
!                 return state.DoS(0, error("AcceptToMemoryPool: not enough fees %s, %d < %d",
!                                         hash.ToString(), nFees, txMinFee),
!                                 REJECT_INSUFFICIENTFEE, "insufficient fee");
!         }
  
          // Require that free transactions have sufficient priority to be mined in the next block.
          if (GetBoolArg("-relaypriority", false) && nFees < ::minRelayTxFee.GetFee(nSize) && !AllowFree(view.GetPriority(tx, chainActive.Height() + 1))) {
***************
*** 1566,1572 ****
      }
  
      // We define a condition where we should warn the user about as a fork of at least 7 blocks
!     // with a tip within 72 blocks (+/- 12 hours if no one mines it) of ours
      // We use 7 blocks rather arbitrarily as it represents just under 10% of sustained network
      // hash rate operating on the fork.
      // or a chain that is entirely longer than ours and invalid (note that this should be detected by both)
--- 1572,1578 ----
      }
  
      // We define a condition where we should warn the user about as a fork of at least 7 blocks
!     // with a tip within 72 blocks (+/- 3 hours if no one mines it) of ours
      // We use 7 blocks rather arbitrarily as it represents just under 10% of sustained network
      // hash rate operating on the fork.
      // or a chain that is entirely longer than ours and invalid (note that this should be detected by both)
***************
*** 3213,3219 ****
  
      // Enforce block.nVersion=2 rule that the coinbase starts with serialized block height
      // if 750 of the last 1,000 blocks are version 2 or greater (51/100 if testnet):
!     if (block.nVersion >= 2)
      {
          CScript expect = CScript() << nHeight;
          if (block.vtx[0].vin[0].scriptSig.size() < expect.size() ||
--- 3219,3228 ----
  
      // Enforce block.nVersion=2 rule that the coinbase starts with serialized block height
      // if 750 of the last 1,000 blocks are version 2 or greater (51/100 if testnet):
!     // Since MIN_BLOCK_VERSION = 4 all blocks with nHeight > 0 should satisfy this.
!     // This rule is not applied to the genesis block, which didn't include the height
!     // in the coinbase.
!     if (nHeight > 0)
      {
          CScript expect = CScript() << nHeight;
          if (block.vtx[0].vin[0].scriptSig.size() < expect.size() ||
diff -crB ./src/main.h ../../komodo-jl777/src/main.h
*** ./src/main.h	2017-01-03 10:40:50.255331392 +0000
--- ../../komodo-jl777/src/main.h	2017-01-03 09:49:08.864506767 +0000
***************
*** 48,57 ****
  struct CNodeStateStats;
  
  /** Default for -blockmaxsize and -blockminsize, which control the range of sizes the mining code will create **/
! static const unsigned int DEFAULT_BLOCK_MAX_SIZE = 750000;
  static const unsigned int DEFAULT_BLOCK_MIN_SIZE = 0;
  /** Default for -blockprioritysize, maximum space for zero/low-fee transactions **/
! static const unsigned int DEFAULT_BLOCK_PRIORITY_SIZE = 50000;
  /** Default for accepting alerts from the P2P network. */
  static const bool DEFAULT_ALERTS = true;
  /** Minimum alert priority for enabling safe mode. */
--- 48,57 ----
  struct CNodeStateStats;
  
  /** Default for -blockmaxsize and -blockminsize, which control the range of sizes the mining code will create **/
! static const unsigned int DEFAULT_BLOCK_MAX_SIZE = MAX_BLOCK_SIZE;
  static const unsigned int DEFAULT_BLOCK_MIN_SIZE = 0;
  /** Default for -blockprioritysize, maximum space for zero/low-fee transactions **/
! static const unsigned int DEFAULT_BLOCK_PRIORITY_SIZE = DEFAULT_BLOCK_MAX_SIZE / 2;
  /** Default for accepting alerts from the P2P network. */
  static const bool DEFAULT_ALERTS = true;
  /** Minimum alert priority for enabling safe mode. */
***************
*** 60,65 ****
--- 60,67 ----
  static const unsigned int MAX_P2SH_SIGOPS = 15;
  /** The maximum number of sigops we're willing to relay/mine in a single tx */
  static const unsigned int MAX_STANDARD_TX_SIGOPS = MAX_BLOCK_SIGOPS/5;
+ /** Default for -minrelaytxfee, minimum relay fee for transactions */
+ static const unsigned int DEFAULT_MIN_RELAY_TX_FEE = 1000;
  /** Default for -maxorphantx, maximum number of orphan transactions kept in memory */
  static const unsigned int DEFAULT_MAX_ORPHAN_TRANSACTIONS = 100;
  /** The maximum size of a blk?????.dat file (since 0.8) */
***************
*** 91,96 ****
--- 93,102 ----
  /** Maximum length of reject messages. */
  static const unsigned int MAX_REJECT_MESSAGE_LENGTH = 111;
  
+ // Sanity check the magic numbers when we change them
+ BOOST_STATIC_ASSERT(DEFAULT_BLOCK_MAX_SIZE <= MAX_BLOCK_SIZE);
+ BOOST_STATIC_ASSERT(DEFAULT_BLOCK_PRIORITY_SIZE <= DEFAULT_BLOCK_MAX_SIZE);
+ 
  #define equihash_parameters_acceptable(N, K) \
      ((CBlockHeader::HEADER_SIZE + equihash_solution_size(N, K))*MAX_HEADERS_RESULTS < \
       MAX_PROTOCOL_MESSAGE_LENGTH-1000)
diff -crB ./src/Makefile.am ../../komodo-jl777/src/Makefile.am
*** ./src/Makefile.am	2017-01-03 10:40:50.211329166 +0000
--- ../../komodo-jl777/src/Makefile.am	2017-01-03 09:49:08.856506348 +0000
***************
*** 232,237 ****
--- 232,239 ----
  # when wallet enabled
  libbitcoin_wallet_a_CPPFLAGS = $(BITCOIN_INCLUDES)
  libbitcoin_wallet_a_SOURCES = \
+   utiltest.cpp \
+   utiltest.h \
    zcbenchmarks.cpp \
    zcbenchmarks.h \
    wallet/asyncrpcoperation_sendmany.cpp \
***************
*** 516,525 ****
  	@test -f $(PROTOC)
  	$(AM_V_GEN) $(PROTOC) --cpp_out=$(@D) --proto_path=$(abspath $(<D) $<)
  
! if ENABLE_TESTS
! include Makefile.test.include
! include Makefile.gtest.include
! endif
  
  if ENABLE_QT
  include Makefile.qt.include
--- 518,527 ----
  	@test -f $(PROTOC)
  	$(AM_V_GEN) $(PROTOC) --cpp_out=$(@D) --proto_path=$(abspath $(<D) $<)
  
! #if ENABLE_TESTS
! #include Makefile.test.include
! #include Makefile.gtest.include
! #endif
  
  if ENABLE_QT
  include Makefile.qt.include
diff -crB ./src/Makefile.gtest.include ../../komodo-jl777/src/Makefile.gtest.include
*** ./src/Makefile.gtest.include	2017-01-03 10:40:50.211329166 +0000
--- ../../komodo-jl777/src/Makefile.gtest.include	2017-01-03 09:49:08.856506348 +0000
***************
*** 5,11 ****
  komodo_gtest_SOURCES = \
  	gtest/main.cpp \
  	gtest/utils.cpp \
- 	gtest/test_checkblock.cpp \
  	gtest/test_checktransaction.cpp \
  	gtest/json_test_vectors.cpp \
          gtest/json_test_vectors.h \
--- 5,10 ----
***************
*** 18,23 ****
--- 17,23 ----
  	gtest/test_keystore.cpp \
  	gtest/test_noteencryption.cpp \
  	gtest/test_merkletree.cpp \
+ 	gtest/test_metrics.cpp \
  	gtest/test_pow.cpp \
  	gtest/test_random.cpp \
  	gtest/test_rpc.cpp \
***************
*** 26,32 ****
--- 26,36 ----
  	gtest/test_txid.cpp \
  	gtest/test_libzcash_utils.cpp \
  	gtest/test_proofs.cpp \
+ 	gtest/test_checkblock.cpp
+ if ENABLE_WALLET
+ zcash_gtest_SOURCES += \
  	wallet/gtest/test_wallet.cpp
+ endif
  
  komodo_gtest_CPPFLAGS = -DMULTICORE -fopenmp -DBINARY_OUTPUT -DCURVE_ALT_BN128 -DSTATIC
  
diff -crB ./src/Makefile.test.include ../../komodo-jl777/src/Makefile.test.include
*** ./src/Makefile.test.include	2017-01-03 10:40:50.211329166 +0000
--- ../../komodo-jl777/src/Makefile.test.include	2017-01-03 09:49:08.856506348 +0000
***************
*** 31,36 ****
--- 31,37 ----
    test/data/merkle_serialization.json \
    test/data/merkle_witness_serialization.json \
    test/data/merkle_path.json \
+   test/data/merkle_commitments.json \
    test/data/g1_compressed.json \
    test/data/g2_compressed.json
  
diff -crB ./src/metrics.cpp ../../komodo-jl777/src/metrics.cpp
*** ./src/metrics.cpp	2017-01-03 10:40:50.255331392 +0000
--- ../../komodo-jl777/src/metrics.cpp	2017-01-03 09:49:08.864506767 +0000
***************
*** 5,13 ****
--- 5,15 ----
  #include "metrics.h"
  
  #include "chainparams.h"
+ #include "main.h"
  #include "ui_interface.h"
  #include "util.h"
  #include "utiltime.h"
+ #include "utilmoneystr.h"
  
  #include <boost/thread.hpp>
  #include <boost/thread/synchronized_value.hpp>
***************
*** 15,29 ****
--- 17,65 ----
  #include <sys/ioctl.h>
  #include <unistd.h>
  
+ CCriticalSection cs_metrics;
+ 
+ boost::synchronized_value<int64_t> nNodeStartTime;
  AtomicCounter transactionsValidated;
  AtomicCounter ehSolverRuns;
  AtomicCounter solutionTargetChecks;
  AtomicCounter minedBlocks;
  
+ boost::synchronized_value<std::list<uint256>> trackedBlocks;
+ 
  boost::synchronized_value<std::list<std::string>> messageBox;
  boost::synchronized_value<std::string> initMessage;
  bool loaded = false;
  
+ extern int64_t GetNetworkHashPS(int lookup, int height);
+ 
+ void TrackMinedBlock(uint256 hash)
+ {
+     LOCK(cs_metrics);
+     minedBlocks.increment();
+     trackedBlocks->push_back(hash);
+ }
+ 
+ void MarkStartTime()
+ {
+     *nNodeStartTime = GetTime();
+ }
+ 
+ int64_t GetUptime()
+ {
+     return GetTime() - *nNodeStartTime;
+ }
+ 
+ double GetLocalSolPS_INTERNAL(int64_t uptime)
+ {
+     return uptime > 0 ? (double)solutionTargetChecks.get() / uptime : 0;
+ }
+ 
+ double GetLocalSolPS()
+ {
+     return GetLocalSolPS_INTERNAL(GetUptime());
+ }
+ 
  static bool metrics_ThreadSafeMessageBox(const std::string& message,
                                        const std::string& caption,
                                        unsigned int style)
***************
*** 64,71 ****
      uiInterface.InitMessage.connect(metrics_InitMessage);
  }
  
! void printMiningStatus(bool mining)
  {
      if (mining) {
          int nThreads = GetArg("-genproclimit", 1);
          if (nThreads < 0) {
--- 100,122 ----
      uiInterface.InitMessage.connect(metrics_InitMessage);
  }
  
! int printNetworkStats()
! {
!     LOCK2(cs_main, cs_vNodes);
! 
!     std::cout << "           " << _("Block height") << " | " << chainActive.Height() << std::endl;
!     std::cout << "  " << _("Network solution rate") << " | " << GetNetworkHashPS(120, -1) << " Sol/s" << std::endl;
!     std::cout << "            " << _("Connections") << " | " << vNodes.size() << std::endl;
!     std::cout << std::endl;
! 
!     return 4;
! }
! 
! int printMiningStatus(bool mining)
  {
+     // Number of lines that are always displayed
+     int lines = 1;
+ 
      if (mining) {
          int nThreads = GetArg("-genproclimit", 1);
          if (nThreads < 0) {
***************
*** 75,95 ****
              else
                  nThreads = boost::thread::hardware_concurrency();
          }
!         std::cout << strprintf(_("You are running %d mining threads."), nThreads) << std::endl;
      } else {
          std::cout << _("You are currently not mining.") << std::endl;
          std::cout << _("To enable mining, add 'gen=1' to your zcash.conf and restart.") << std::endl;
      }
      std::cout << std::endl;
  }
  
! int printMetrics(size_t cols, int64_t nStart, bool mining)
  {
      // Number of lines that are always displayed
      int lines = 3;
  
      // Calculate uptime
!     int64_t uptime = GetTime() - nStart;
      int days = uptime / (24 * 60 * 60);
      int hours = (uptime - (days * 24 * 60 * 60)) / (60 * 60);
      int minutes = (uptime - (((days * 24) + hours) * 60 * 60)) / 60;
--- 126,151 ----
              else
                  nThreads = boost::thread::hardware_concurrency();
          }
!         std::cout << strprintf(_("You are mining with the %s solver on %d threads."),
!                                GetArg("-equihashsolver", "default"), nThreads) << std::endl;
!         lines++;
      } else {
          std::cout << _("You are currently not mining.") << std::endl;
          std::cout << _("To enable mining, add 'gen=1' to your zcash.conf and restart.") << std::endl;
+         lines += 2;
      }
      std::cout << std::endl;
+ 
+     return lines;
  }
  
! int printMetrics(size_t cols, bool mining)
  {
      // Number of lines that are always displayed
      int lines = 3;
  
      // Calculate uptime
!     int64_t uptime = GetUptime();
      int days = uptime / (24 * 60 * 60);
      int hours = (uptime - (days * 24 * 60 * 60)) / (60 * 60);
      int minutes = (uptime - (((days * 24) + hours) * 60 * 60)) / 60;
***************
*** 110,128 ****
      std::cout << strDuration << std::endl;
      lines += (strDuration.size() / cols);
  
!     std::cout << "- " << strprintf(_("You have validated %d transactions!"), transactionsValidated.get()) << std::endl;
  
!     if (mining) {
!         double solps = uptime > 0 ? (double)solutionTargetChecks.get() / uptime : 0;
          std::string strSolps = strprintf("%.4f Sol/s", solps);
          std::cout << "- " << strprintf(_("You have contributed %s on average to the network solution rate."), strSolps) << std::endl;
          std::cout << "- " << strprintf(_("You have completed %d Equihash solver runs."), ehSolverRuns.get()) << std::endl;
          lines += 2;
  
!         int mined = minedBlocks.get();
          if (mined > 0) {
              std::cout << "- " << strprintf(_("You have mined %d blocks!"), mined) << std::endl;
!             lines++;
          }
      }
      std::cout << std::endl;
--- 166,233 ----
      std::cout << strDuration << std::endl;
      lines += (strDuration.size() / cols);
  
!     int validatedCount = transactionsValidated.get();
!     if (validatedCount > 1) {
!       std::cout << "- " << strprintf(_("You have validated %d transactions!"), validatedCount) << std::endl;
!     } else if (validatedCount == 1) {
!       std::cout << "- " << _("You have validated a transaction!") << std::endl;
!     } else {
!       std::cout << "- " << _("You have validated no transactions.") << std::endl;
!     }
  
!     if (mining && loaded) {
!         double solps = GetLocalSolPS_INTERNAL(uptime);
          std::string strSolps = strprintf("%.4f Sol/s", solps);
          std::cout << "- " << strprintf(_("You have contributed %s on average to the network solution rate."), strSolps) << std::endl;
          std::cout << "- " << strprintf(_("You have completed %d Equihash solver runs."), ehSolverRuns.get()) << std::endl;
          lines += 2;
  
!         int mined = 0;
!         int orphaned = 0;
!         CAmount immature {0};
!         CAmount mature {0};
!         {
!             LOCK2(cs_main, cs_metrics);
!             boost::strict_lock_ptr<std::list<uint256>> u = trackedBlocks.synchronize();
!             auto consensusParams = Params().GetConsensus();
!             auto tipHeight = chainActive.Height();
! 
!             // Update orphans and calculate subsidies
!             std::list<uint256>::iterator it = u->begin();
!             while (it != u->end()) {
!                 auto hash = *it;
!                 if (mapBlockIndex.count(hash) > 0 &&
!                         chainActive.Contains(mapBlockIndex[hash])) {
!                     int height = mapBlockIndex[hash]->nHeight;
!                     CAmount subsidy = GetBlockSubsidy(height, consensusParams);
!                     if ((height > 0) && (height <= consensusParams.GetLastFoundersRewardBlockHeight())) {
!                         subsidy -= subsidy/5;
!                     }
!                     if (std::max(0, COINBASE_MATURITY - (tipHeight - height)) > 0) {
!                         immature += subsidy;
!                     } else {
!                         mature += subsidy;
!                     }
!                     it++;
!                 } else {
!                     it = u->erase(it);
!                 }
!             }
! 
!             mined = minedBlocks.get();
!             orphaned = mined - u->size();
!         }
! 
          if (mined > 0) {
+             std::string units = Params().CurrencyUnits();
              std::cout << "- " << strprintf(_("You have mined %d blocks!"), mined) << std::endl;
!             std::cout << "  "
!                       << strprintf(_("Orphaned: %d blocks, Immature: %u %s, Mature: %u %s"),
!                                      orphaned,
!                                      FormatMoney(immature), units,
!                                      FormatMoney(mature), units)
!                       << std::endl;
!             lines += 2;
          }
      }
      std::cout << std::endl;
***************
*** 171,194 ****
      // Make this thread recognisable as the metrics screen thread
      RenameThread("zcash-metrics-screen");
  
!     // Clear screen
!     std::cout << "\e[2J";
! 
!     // Print art
!     std::cout << METRICS_ART << std::endl;
!     std::cout << std::endl;
! 
!     // Thank you text
!     std::cout << _("Thank you for running a Zcash node!") << std::endl;
!     std::cout << _("You're helping to strengthen the network and contributing to a social good :)") << std::endl;
!     std::cout << std::endl;
! 
!     // Miner status
!     bool mining = GetBoolArg("-gen", false);
!     printMiningStatus(mining);
! 
!     // Count uptime
!     int64_t nStart = GetTime();
  
      while (true) {
          // Number of lines that are always displayed
--- 276,299 ----
      // Make this thread recognisable as the metrics screen thread
      RenameThread("zcash-metrics-screen");
  
!     // Determine whether we should render a persistent UI or rolling metrics
!     bool isTTY = isatty(STDOUT_FILENO);
!     bool isScreen = GetBoolArg("-metricsui", isTTY);
!     int64_t nRefresh = GetArg("-metricsrefreshtime", isTTY ? 1 : 600);
! 
!     if (isScreen) {
!         // Clear screen
!         std::cout << "\e[2J";
! 
!         // Print art
!         std::cout << METRICS_ART << std::endl;
!         std::cout << std::endl;
! 
!         // Thank you text
!         std::cout << _("Thank you for running a Zcash node!") << std::endl;
!         std::cout << _("You're helping to strengthen the network and contributing to a social good :)") << std::endl;
!         std::cout << std::endl;
!     }
  
      while (true) {
          // Number of lines that are always displayed
***************
*** 196,202 ****
          int cols = 80;
  
          // Get current window size
!         if (isatty(STDOUT_FILENO)) {
              struct winsize w;
              w.ws_col = 0;
              if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) != -1 && w.ws_col != 0) {
--- 301,307 ----
          int cols = 80;
  
          // Get current window size
!         if (isTTY) {
              struct winsize w;
              w.ws_col = 0;
              if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &w) != -1 && w.ws_col != 0) {
***************
*** 204,223 ****
              }
          }
  
!         // Erase below current position
!         std::cout << "\e[J";
  
!         lines += printMetrics(cols, nStart, mining);
          lines += printMessageBox(cols);
          lines += printInitMessage();
  
!         // Explain how to exit
!         std::cout << "[" << _("Press Ctrl+C to exit") << "] [" << _("Set 'showmetrics=0' to hide") << "]" << std::endl;;
  
!         boost::this_thread::interruption_point();
!         MilliSleep(1000);
  
!         // Return to the top of the updating section
!         std::cout << "\e[" << lines << "A";
      }
  }
--- 309,347 ----
              }
          }
  
!         if (isScreen) {
!             // Erase below current position
!             std::cout << "\e[J";
!         }
! 
!         // Miner status
!         bool mining = GetBoolArg("-gen", false);
  
!         if (loaded) {
!             lines += printNetworkStats();
!         }
!         lines += printMiningStatus(mining);
!         lines += printMetrics(cols, mining);
          lines += printMessageBox(cols);
          lines += printInitMessage();
  
!         if (isScreen) {
!             // Explain how to exit
!             std::cout << "[" << _("Press Ctrl+C to exit") << "] [" << _("Set 'showmetrics=0' to hide") << "]" << std::endl;
!         } else {
!             // Print delineator
!             std::cout << "----------------------------------------" << std::endl;
!         }
  
!         int64_t nWaitEnd = GetTime() + nRefresh;
!         while (GetTime() < nWaitEnd) {
!             boost::this_thread::interruption_point();
!             MilliSleep(200);
!         }
  
!         if (isScreen) {
!             // Return to the top of the updating section
!             std::cout << "\e[" << lines << "A";
!         }
      }
  }
diff -crB ./src/metrics.h ../../komodo-jl777/src/metrics.h
*** ./src/metrics.h	2017-01-03 10:40:50.255331392 +0000
--- ../../komodo-jl777/src/metrics.h	2017-01-03 09:49:08.864506767 +0000
***************
*** 2,12 ****
  // Distributed under the MIT software license, see the accompanying
  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
  
  #include <atomic>
  #include <string>
  
  struct AtomicCounter {
!     std::atomic<int> value;
  
      AtomicCounter() : value {0} { }
  
--- 2,14 ----
  // Distributed under the MIT software license, see the accompanying
  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
  
+ #include "uint256.h"
+ 
  #include <atomic>
  #include <string>
  
  struct AtomicCounter {
!     std::atomic<uint64_t> value;
  
      AtomicCounter() : value {0} { }
  
***************
*** 26,32 ****
  extern AtomicCounter transactionsValidated;
  extern AtomicCounter ehSolverRuns;
  extern AtomicCounter solutionTargetChecks;
! extern AtomicCounter minedBlocks;
  
  void ConnectMetricsScreen();
  void ThreadShowMetricsScreen();
--- 28,38 ----
  extern AtomicCounter transactionsValidated;
  extern AtomicCounter ehSolverRuns;
  extern AtomicCounter solutionTargetChecks;
! 
! void TrackMinedBlock(uint256 hash);
! 
! void MarkStartTime();
! double GetLocalSolPS();
  
  void ConnectMetricsScreen();
  void ThreadShowMetricsScreen();
diff -crB ./src/miner.cpp ../../komodo-jl777/src/miner.cpp
*** ./src/miner.cpp	2017-01-03 10:40:50.255331392 +0000
--- ../../komodo-jl777/src/miner.cpp	2017-01-03 09:49:08.864506767 +0000
***************
*** 99,105 ****
  }
  
  #define ASSETCHAINS_MINHEIGHT 100
! #define ROUNDROBIN_DELAY 58
  extern int32_t ASSETCHAINS_SEED,IS_KOMODO_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAIN_INIT,KOMODO_INITDONE,KOMODO_ON_DEMAND,KOMODO_INITDONE;
  extern char ASSETCHAINS_SYMBOL[16];
  extern std::string NOTARY_PUBKEY;
--- 99,106 ----
  }
  
  #define ASSETCHAINS_MINHEIGHT 100
! #define KOMODO_ELECTION_GAP 2000
! #define ROUNDROBIN_DELAY 55
  extern int32_t ASSETCHAINS_SEED,IS_KOMODO_NOTARY,USE_EXTERNAL_PUBKEY,KOMODO_CHOSEN_ONE,ASSETCHAIN_INIT,KOMODO_INITDONE,KOMODO_ON_DEMAND,KOMODO_INITDONE;
  extern char ASSETCHAINS_SYMBOL[16];
  extern std::string NOTARY_PUBKEY;
***************
*** 109,114 ****
--- 110,116 ----
  int32_t komodo_is_special(int32_t height,uint8_t pubkey33[33]);
  int32_t komodo_pax_opreturn(uint8_t *opret,int32_t maxsize);
  uint64_t komodo_paxtotal();
+ int32_t komodo_baseid(char *origbase);
  int32_t komodo_is_issuer();
  int32_t komodo_gateway_deposits(CMutableTransaction *txNew,char *symbol,int32_t tokomodo);
  int32_t komodo_isrealtime(int32_t *kmdheightp);
***************
*** 121,137 ****
      if(!pblocktemplate.get())
          return NULL;
      CBlock *pblock = &pblocktemplate->block; // pointer for convenience
!     if ( ASSETCHAINS_SYMBOL[0] != 0 && chainActive.Tip()->nHeight > ASSETCHAINS_MINHEIGHT )
      {
          isrealtime = komodo_isrealtime(&kmdheight);
!         while ( KOMODO_ON_DEMAND == 0 )
          {
              deposits = komodo_paxtotal();
!             if ( KOMODO_INITDONE == 0 || (isrealtime= komodo_isrealtime(&kmdheight)) == 0 )
              {
                  //fprintf(stderr,"INITDONE.%d RT.%d deposits %.8f ht.%d\n",KOMODO_INITDONE,isrealtime,(double)deposits/COIN,kmdheight);
              }
!             else if ( deposits != 0 )
              {
                  fprintf(stderr,"start CreateNewBlock %s initdone.%d deposit %.8f mempool.%d RT.%u KOMODO_ON_DEMAND.%d\n",ASSETCHAINS_SYMBOL,KOMODO_INITDONE,(double)komodo_paxtotal()/COIN,(int32_t)mempool.GetTotalTxSize(),isrealtime,KOMODO_ON_DEMAND);
                  break;
--- 123,140 ----
      if(!pblocktemplate.get())
          return NULL;
      CBlock *pblock = &pblocktemplate->block; // pointer for convenience
!     if ( ASSETCHAINS_SYMBOL[0] != 0 && chainActive.Tip()->nHeight >= ASSETCHAINS_MINHEIGHT )
      {
          isrealtime = komodo_isrealtime(&kmdheight);
!         deposits = komodo_paxtotal();
!         while ( KOMODO_ON_DEMAND == 0 && deposits == 0 && (int32_t)mempool.GetTotalTxSize() == 0 )
          {
              deposits = komodo_paxtotal();
!             if ( KOMODO_INITDONE == 0 || (komodo_baseid(ASSETCHAINS_SYMBOL) >= 0 && (isrealtime= komodo_isrealtime(&kmdheight)) == 0) )
              {
                  //fprintf(stderr,"INITDONE.%d RT.%d deposits %.8f ht.%d\n",KOMODO_INITDONE,isrealtime,(double)deposits/COIN,kmdheight);
              }
!             else if ( deposits != 0 || (int32_t)mempool.GetTotalTxSize() > 0 )
              {
                  fprintf(stderr,"start CreateNewBlock %s initdone.%d deposit %.8f mempool.%d RT.%u KOMODO_ON_DEMAND.%d\n",ASSETCHAINS_SYMBOL,KOMODO_INITDONE,(double)komodo_paxtotal()/COIN,(int32_t)mempool.GetTotalTxSize(),isrealtime,KOMODO_ON_DEMAND);
                  break;
***************
*** 242,247 ****
--- 245,252 ----
  
                  dPriority += (double)nValueIn * nConf;
              }
+             nTotalIn += tx.GetJoinSplitValueIn();
+ 
              if (fMissingInputs) continue;
  
              // Priority is sum(valuein * age) / modified_txsize
***************
*** 419,425 ****
          if ( !TestBlockValidity(state, *pblock, pindexPrev, false, false))
          {
              fprintf(stderr,"testblockvalidity failed\n");
!             //throw std::runtime_error("CreateNewBlock(): TestBlockValidity failed");
          }
      }
  
--- 424,430 ----
          if ( !TestBlockValidity(state, *pblock, pindexPrev, false, false))
          {
              fprintf(stderr,"testblockvalidity failed\n");
!             throw std::runtime_error("CreateNewBlock(): TestBlockValidity failed");
          }
      }
  
***************
*** 473,479 ****
          script[34] = OP_CHECKSIG;
          //scriptPubKey = CScript() << ToByteVector(pubkey) << OP_CHECKSIG;
      }
!     if ( 0 && ASSETCHAINS_SYMBOL[0] == 0 )
      {
          for (i=0; i<65; i++)
              fprintf(stderr,"%d ",komodo_minerid(chainActive.Tip()->nHeight-i));
--- 478,484 ----
          script[34] = OP_CHECKSIG;
          //scriptPubKey = CScript() << ToByteVector(pubkey) << OP_CHECKSIG;
      }
!     if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 )
      {
          for (i=0; i<65; i++)
              fprintf(stderr,"%d ",komodo_minerid(chainActive.Tip()->nHeight-i));
***************
*** 509,515 ****
      if (!ProcessNewBlock(chainActive.Tip()->nHeight+1,state, NULL, pblock, true, NULL))
          return error("KomodoMiner: ProcessNewBlock, block not accepted");
  
!     minedBlocks.increment();
  
      return true;
  }
--- 514,520 ----
      if (!ProcessNewBlock(chainActive.Tip()->nHeight+1,state, NULL, pblock, true, NULL))
          return error("KomodoMiner: ProcessNewBlock, block not accepted");
  
!     TrackMinedBlock(pblock->GetHash());
  
      return true;
  }
***************
*** 614,627 ****
              arith_uint256 hashTarget = arith_uint256().SetCompact(pblock->nBits);
              if ( ASSETCHAINS_SYMBOL[0] == 0 && komodo_is_special(pindexPrev->nHeight+1,NOTARY_PUBKEY33) > 0 )
              {
!                 hashTarget = arith_uint256().SetCompact(KOMODO_MINDIFF_NBITS);
!                 fprintf(stderr,"I am the chosen one for %s ht.%d\n",ASSETCHAINS_SYMBOL,pindexPrev->nHeight+1);
              } else Mining_start = 0;
              while (true)
              {
!                 if ( ASSETCHAINS_SYMBOL[0] != 0 && pblock->vtx[0].vout.size() == 1 && Mining_height > ASSETCHAINS_MINHEIGHT )
                  {
!                     //fprintf(stderr,"skip generating %s on-demand block, no tx avail\n",ASSETCHAINS_SYMBOL);
                      sleep(10);
                      break;
                  }
--- 619,635 ----
              arith_uint256 hashTarget = arith_uint256().SetCompact(pblock->nBits);
              if ( ASSETCHAINS_SYMBOL[0] == 0 && komodo_is_special(pindexPrev->nHeight+1,NOTARY_PUBKEY33) > 0 )
              {
!                 if ( (Mining_height % KOMODO_ELECTION_GAP) > 64 || (Mining_height % KOMODO_ELECTION_GAP) == 0 )
!                 {
!                     hashTarget = arith_uint256().SetCompact(KOMODO_MINDIFF_NBITS);
!                     fprintf(stderr,"I am the chosen one for %s ht.%d\n",ASSETCHAINS_SYMBOL,pindexPrev->nHeight+1);
!                 } else Mining_start = 0;
              } else Mining_start = 0;
              while (true)
              {
!                 if ( 0 && ASSETCHAINS_SYMBOL[0] != 0 && pblock->vtx[0].vout.size() == 1 && Mining_height > ASSETCHAINS_MINHEIGHT )
                  {
!                     fprintf(stderr,"skip generating %s on-demand block, no tx avail\n",ASSETCHAINS_SYMBOL);
                      sleep(10);
                      break;
                  }
***************
*** 784,794 ****
--- 792,804 ----
      }
      catch (const boost::thread_interrupted&)
      {
+         c.disconnect();
          LogPrintf("KomodoMiner terminated\n");
          throw;
      }
      catch (const std::runtime_error &e)
      {
+         c.disconnect();
          LogPrintf("KomodoMiner runtime error: %s\n", e.what());
          return;
      }
diff -crB ./src/pow.cpp ../../komodo-jl777/src/pow.cpp
*** ./src/pow.cpp	2017-01-03 10:40:50.259331594 +0000
--- ../../komodo-jl777/src/pow.cpp	2017-01-03 09:49:08.864506767 +0000
***************
*** 113,119 ****
  bool CheckProofOfWork(int32_t height,uint8_t *pubkey33,uint256 hash, unsigned int nBits, const Consensus::Params& params)
  {
      extern int32_t KOMODO_REWIND;
!     bool fNegative,fOverflow; int32_t i,nonz=0,special,special2,notaryid=-1,flag = 0;
      arith_uint256 bnTarget;
  
      bnTarget.SetCompact(nBits, &fNegative, &fOverflow);
--- 113,119 ----
  bool CheckProofOfWork(int32_t height,uint8_t *pubkey33,uint256 hash, unsigned int nBits, const Consensus::Params& params)
  {
      extern int32_t KOMODO_REWIND;
!     bool fNegative,fOverflow; int32_t i,nonz=0,special=0,special2=0,notaryid=-1,flag = 0;
      arith_uint256 bnTarget;
  
      bnTarget.SetCompact(nBits, &fNegative, &fOverflow);
***************
*** 130,144 ****
          if ( nonz == 0 )
              return(true); // will come back via different path with pubkey set
          special2 = komodo_is_special(height,pubkey33);
!         if ( notaryid >= 0 && ((height >= 64000 && height <= 90065) || (height % KOMODO_ELECTION_GAP) > 64) )
          {
-             //if ( special2 == -2 )
-             //    printf("height.%d special2.%d special.%d\n",height,special2,special);
              if ( (height >= 64000 && height <= 90065) || (height % KOMODO_ELECTION_GAP) == 0 || (height < 80000 && (special != 0 || special2 > 0)) || (height >= 80000 && special2 > 0) )
              {
                  bnTarget.SetCompact(KOMODO_MINDIFF_NBITS,&fNegative,&fOverflow);
                  flag = 1;
              }
          }
      }
      if (fNegative || bnTarget == 0 || fOverflow || bnTarget > UintToArith256(params.powLimit))
--- 130,153 ----
          if ( nonz == 0 )
              return(true); // will come back via different path with pubkey set
          special2 = komodo_is_special(height,pubkey33);
!         /*if ( notaryid >= 0 && ((height >= 64000 && height <= 90065) || (height % KOMODO_ELECTION_GAP) > 64) )
          {
              if ( (height >= 64000 && height <= 90065) || (height % KOMODO_ELECTION_GAP) == 0 || (height < 80000 && (special != 0 || special2 > 0)) || (height >= 80000 && special2 > 0) )
              {
                  bnTarget.SetCompact(KOMODO_MINDIFF_NBITS,&fNegative,&fOverflow);
                  flag = 1;
              }
+         }*/
+         if ( notaryid >= 0 )
+         {
+             if ( height > 10000 && height < 80000 && (special != 0 || special2 > 0) )
+                 flag = 1;
+             else if ( height >= 80000 && height < 108000 && special2 > 0 )
+                 flag = 1;
+             else if ( height >= 108000 && special2 > 0 )
+                 flag = ((height % KOMODO_ELECTION_GAP) > 64 || (height % KOMODO_ELECTION_GAP) == 0);
+             if ( flag != 0 )
+                 bnTarget.SetCompact(KOMODO_MINDIFF_NBITS,&fNegative,&fOverflow);
          }
      }
      if (fNegative || bnTarget == 0 || fOverflow || bnTarget > UintToArith256(params.powLimit))
***************
*** 146,160 ****
      // Check proof of work matches claimed amount
      if ( UintToArith256(hash) > bnTarget )
      {
!         int32_t i;
!         for (i=31; i>=0; i--)
!             printf("%02x",((uint8_t *)&hash)[i]);
!         printf(" hash vs ");
!         for (i=31; i>=0; i--)
!             printf("%02x",((uint8_t *)&bnTarget)[i]);
!         printf(" ht.%d REWIND.%d special.%d notaryid.%d ht.%d mod.%d error\n",height,KOMODO_REWIND,special,notaryid,height,(height % 35));
!         if ( height <= KOMODO_REWIND )
!             return error("CheckProofOfWork(): hash doesn't match nBits");
      }
      return true;
  }
--- 155,171 ----
      // Check proof of work matches claimed amount
      if ( UintToArith256(hash) > bnTarget )
      {
!         {
!             int32_t i;
!             for (i=31; i>=0; i--)
!                 printf("%02x",((uint8_t *)&hash)[i]);
!             printf(" hash vs ");
!             for (i=31; i>=0; i--)
!                 printf("%02x",((uint8_t *)&bnTarget)[i]);
!             printf(" ht.%d REWIND.%d special.%d notaryid.%d ht.%d mod.%d error\n",height,KOMODO_REWIND,special,notaryid,height,(height % 35));
!             if ( height < 90000 || (height > 110000 && KOMODO_REWIND == 0) )
!                 return error("CheckProofOfWork(): hash doesn't match nBits");
!         }
      }
      return true;
  }
diff -crB ./src/primitives/block.h ../../komodo-jl777/src/primitives/block.h
*** ./src/primitives/block.h	2017-01-03 10:40:50.259331594 +0000
--- ../../komodo-jl777/src/primitives/block.h	2017-01-03 09:49:08.864506767 +0000
***************
*** 200,205 ****
--- 200,209 ----
      {
          return vHave.empty();
      }
+ 
+     friend bool operator==(const CBlockLocator& a, const CBlockLocator& b) {
+         return (a.vHave == b.vHave);
+     }
  };
  
  #endif // BITCOIN_PRIMITIVES_BLOCK_H
diff -crB ./src/primitives/transaction.cpp ../../komodo-jl777/src/primitives/transaction.cpp
*** ./src/primitives/transaction.cpp	2017-01-03 10:40:50.259331594 +0000
--- ../../komodo-jl777/src/primitives/transaction.cpp	2017-01-03 09:49:08.864506767 +0000
***************
*** 62,67 ****
--- 62,70 ----
      // Randomize the order of the inputs and outputs
      inputMap = {0, 1};
      outputMap = {0, 1};
+ 
+     assert(gen);
+ 
      MappedShuffle(inputs.begin(), inputMap.begin(), ZC_NUM_JS_INPUTS, gen);
      MappedShuffle(outputs.begin(), outputMap.begin(), ZC_NUM_JS_OUTPUTS, gen);
  
***************
*** 72,81 ****
--- 75,86 ----
  
  bool JSDescription::Verify(
      ZCJoinSplit& params,
+     libzcash::ProofVerifier& verifier,
      const uint256& pubKeyHash
  ) const {
      return params.verify(
          proof,
+         verifier,
          pubKeyHash,
          randomSeed,
          macs,
diff -crB ./src/primitives/transaction.h ../../komodo-jl777/src/primitives/transaction.h
*** ./src/primitives/transaction.h	2017-01-03 10:40:50.259331594 +0000
--- ../../komodo-jl777/src/primitives/transaction.h	2017-01-03 09:49:08.864506767 +0000
***************
*** 101,107 ****
      );
  
      // Verifies that the JoinSplit proof is correct.
!     bool Verify(ZCJoinSplit& params, const uint256& pubKeyHash) const;
  
      // Returns the calculated h_sig
      uint256 h_sig(ZCJoinSplit& params, const uint256& pubKeyHash) const;
--- 101,111 ----
      );
  
      // Verifies that the JoinSplit proof is correct.
!     bool Verify(
!         ZCJoinSplit& params,
!         libzcash::ProofVerifier& verifier,
!         const uint256& pubKeyHash
!     ) const;
  
      // Returns the calculated h_sig
      uint256 h_sig(ZCJoinSplit& params, const uint256& pubKeyHash) const;
diff -crB ./src/random.cpp ../../komodo-jl777/src/random.cpp
*** ./src/random.cpp	2017-01-03 10:40:50.339335643 +0000
--- ../../komodo-jl777/src/random.cpp	2017-01-03 09:49:08.864506767 +0000
***************
*** 137,139 ****
--- 137,144 ----
          insecure_rand_Rw = tmp;
      }
  }
+ 
+ int GenIdentity(int n)
+ {
+     return n-1;
+ }
diff -crB ./src/random.h ../../komodo-jl777/src/random.h
*** ./src/random.h	2017-01-03 10:40:50.339335643 +0000
--- ../../komodo-jl777/src/random.h	2017-01-03 09:49:08.864506767 +0000
***************
*** 26,31 ****
--- 26,36 ----
  uint256 GetRandHash();
  
  /**
+  * Identity function for MappedShuffle, so that elements retain their original order.
+  */
+  int GenIdentity(int n);
+ 
+ /**
   * Rearranges the elements in the range [first,first+len) randomly, assuming
   * that gen is a uniform random number generator. Follows the same algorithm as
   * std::shuffle in C++11 (a Durstenfeld shuffle).
diff -crB ./src/rpcclient.cpp ../../komodo-jl777/src/rpcclient.cpp
*** ./src/rpcclient.cpp	2017-01-03 10:40:50.343335845 +0000
--- ../../komodo-jl777/src/rpcclient.cpp	2017-01-03 09:49:08.864506767 +0000
***************
*** 103,108 ****
--- 103,109 ----
      { "z_gettotalbalance", 0},
      { "z_sendmany", 1},
      { "z_sendmany", 2},
+     { "z_sendmany", 3},
      { "z_getoperationstatus", 0},
      { "z_getoperationresult", 0},
      { "z_importkey", 1 },
diff -crB ./src/rpcmining.cpp ../../komodo-jl777/src/rpcmining.cpp
*** ./src/rpcmining.cpp	2017-01-03 10:40:50.343335845 +0000
--- ../../komodo-jl777/src/rpcmining.cpp	2017-01-03 09:49:08.864506767 +0000
***************
*** 37,43 ****
   * or over the difficulty averaging window if 'lookup' is nonpositive.
   * If 'height' is nonnegative, compute the estimate at the time when a given block was found.
   */
! Value GetNetworkHashPS(int lookup, int height) {
      CBlockIndex *pb = chainActive.Tip();
  
      if (height >= 0 && height < chainActive.Height())
--- 37,43 ----
   * or over the difficulty averaging window if 'lookup' is nonpositive.
   * If 'height' is nonnegative, compute the estimate at the time when a given block was found.
   */
! int64_t GetNetworkHashPS(int lookup, int height) {
      CBlockIndex *pb = chainActive.Tip();
  
      if (height >= 0 && height < chainActive.Height())
***************
*** 74,92 ****
      return (int64_t)(workDiff.getdouble() / timeDiff);
  }
  
  Value getnetworkhashps(const Array& params, bool fHelp)
  {
      if (fHelp || params.size() > 2)
          throw runtime_error(
              "getnetworkhashps ( blocks height )\n"
!             "\nReturns the estimated network hashes per second based on the last n blocks.\n"
              "Pass in [blocks] to override # of blocks, -1 specifies over difficulty averaging window.\n"
              "Pass in [height] to estimate the network speed at the time when a certain block was found.\n"
              "\nArguments:\n"
              "1. blocks     (numeric, optional, default=120) The number of blocks, or -1 for blocks over difficulty averaging window.\n"
              "2. height     (numeric, optional, default=-1) To estimate at the time of the given height.\n"
              "\nResult:\n"
!             "x             (numeric) Hashes per second estimated\n"
              "\nExamples:\n"
              + HelpExampleCli("getnetworkhashps", "")
              + HelpExampleRpc("getnetworkhashps", "")
--- 74,133 ----
      return (int64_t)(workDiff.getdouble() / timeDiff);
  }
  
+ Value getlocalsolps(const Array& params, bool fHelp)
+ {
+     if (fHelp)
+         throw runtime_error(
+             "getlocalsolps\n"
+             "\nReturns the average local solutions per second since this node was started.\n"
+             "This is the same information shown on the metrics screen (if enabled).\n"
+             "\nResult:\n"
+             "xxx.xxxxx     (numeric) Solutions per second average\n"
+             "\nExamples:\n"
+             + HelpExampleCli("getlocalsolps", "")
+             + HelpExampleRpc("getlocalsolps", "")
+        );
+ 
+     LOCK(cs_main);
+     return GetLocalSolPS();
+ }
+ 
+ Value getnetworksolps(const Array& params, bool fHelp)
+ {
+     if (fHelp || params.size() > 2)
+         throw runtime_error(
+             "getnetworksolps ( blocks height )\n"
+             "\nReturns the estimated network solutions per second based on the last n blocks.\n"
+             "Pass in [blocks] to override # of blocks, -1 specifies over difficulty averaging window.\n"
+             "Pass in [height] to estimate the network speed at the time when a certain block was found.\n"
+             "\nArguments:\n"
+             "1. blocks     (numeric, optional, default=120) The number of blocks, or -1 for blocks over difficulty averaging window.\n"
+             "2. height     (numeric, optional, default=-1) To estimate at the time of the given height.\n"
+             "\nResult:\n"
+             "x             (numeric) Solutions per second estimated\n"
+             "\nExamples:\n"
+             + HelpExampleCli("getnetworksolps", "")
+             + HelpExampleRpc("getnetworksolps", "")
+        );
+ 
+     LOCK(cs_main);
+     return GetNetworkHashPS(params.size() > 0 ? params[0].get_int() : 120, params.size() > 1 ? params[1].get_int() : -1);
+ }
+ 
  Value getnetworkhashps(const Array& params, bool fHelp)
  {
      if (fHelp || params.size() > 2)
          throw runtime_error(
              "getnetworkhashps ( blocks height )\n"
!             "\nDEPRECATED - left for backwards-compatibility. Use getnetworksolps instead.\n"
!             "\nReturns the estimated network solutions per second based on the last n blocks.\n"
              "Pass in [blocks] to override # of blocks, -1 specifies over difficulty averaging window.\n"
              "Pass in [height] to estimate the network speed at the time when a certain block was found.\n"
              "\nArguments:\n"
              "1. blocks     (numeric, optional, default=120) The number of blocks, or -1 for blocks over difficulty averaging window.\n"
              "2. height     (numeric, optional, default=-1) To estimate at the time of the given height.\n"
              "\nResult:\n"
!             "x             (numeric) Solutions per second estimated\n"
              "\nExamples:\n"
              + HelpExampleCli("getnetworkhashps", "")
              + HelpExampleRpc("getnetworkhashps", "")
***************
*** 209,215 ****
          CValidationState state;
          if (!ProcessNewBlock(chainActive.Tip()->nHeight+1,state, NULL, pblock, true, NULL))
              throw JSONRPCError(RPC_INTERNAL_ERROR, "ProcessNewBlock, block not accepted");
-         minedBlocks.increment();
          ++nHeight;
          blockHashes.push_back(pblock->GetHash().GetHex());
      }
--- 250,255 ----
***************
*** 280,285 ****
--- 320,327 ----
              "  \"errors\": \"...\"          (string) Current errors\n"
              "  \"generate\": true|false     (boolean) If the generation is on or off (see getgenerate or setgenerate calls)\n"
              "  \"genproclimit\": n          (numeric) The processor limit for generation. -1 if no generation. (see getgenerate or setgenerate calls)\n"
+             "  \"localsolps\": xxx.xxxxx    (numeric) The average local solution rate in Sol/s since this node was started\n"
+             "  \"networksolps\": x          (numeric) The estimated network solution rate in Sol/s\n"
              "  \"pooledtx\": n              (numeric) The size of the mem pool\n"
              "  \"testnet\": true|false      (boolean) If using testnet or not\n"
              "  \"chain\": \"xxxx\",         (string) current network name as defined in BIP70 (main, test, regtest)\n"
***************
*** 299,305 ****
      obj.push_back(Pair("difficulty",       (double)GetNetworkDifficulty()));
      obj.push_back(Pair("errors",           GetWarnings("statusbar")));
      obj.push_back(Pair("genproclimit",     (int)GetArg("-genproclimit", -1)));
!     obj.push_back(Pair("networkhashps",    getnetworkhashps(params, false)));
      obj.push_back(Pair("pooledtx",         (uint64_t)mempool.size()));
      obj.push_back(Pair("testnet",          Params().TestnetToBeDeprecatedFieldRPC()));
      obj.push_back(Pair("chain",            Params().NetworkIDString()));
--- 341,349 ----
      obj.push_back(Pair("difficulty",       (double)GetNetworkDifficulty()));
      obj.push_back(Pair("errors",           GetWarnings("statusbar")));
      obj.push_back(Pair("genproclimit",     (int)GetArg("-genproclimit", -1)));
!     obj.push_back(Pair("localsolps"  ,     getlocalsolps(params, false)));
!     obj.push_back(Pair("networksolps",     getnetworksolps(params, false)));
!     obj.push_back(Pair("networkhashps",    getnetworksolps(params, false)));
      obj.push_back(Pair("pooledtx",         (uint64_t)mempool.size()));
      obj.push_back(Pair("testnet",          Params().TestnetToBeDeprecatedFieldRPC()));
      obj.push_back(Pair("chain",            Params().NetworkIDString()));
***************
*** 483,492 ****
          throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid mode");
  
      if (vNodes.empty())
!         throw JSONRPCError(RPC_CLIENT_NOT_CONNECTED, "Bitcoin is not connected!");
  
      if (IsInitialBlockDownload())
!         throw JSONRPCError(RPC_CLIENT_IN_INITIAL_DOWNLOAD, "Bitcoin is downloading blocks...");
  
      static unsigned int nTransactionsUpdatedLast;
  
--- 527,536 ----
          throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid mode");
  
      if (vNodes.empty())
!         throw JSONRPCError(RPC_CLIENT_NOT_CONNECTED, "Zcash is not connected!");
  
      if (IsInitialBlockDownload())
!         throw JSONRPCError(RPC_CLIENT_IN_INITIAL_DOWNLOAD, "Zcash is downloading blocks...");
  
      static unsigned int nTransactionsUpdatedLast;
  
diff -crB ./src/rpcmisc.cpp ../../komodo-jl777/src/rpcmisc.cpp
*** ./src/rpcmisc.cpp	2017-01-03 10:40:50.343335845 +0000
--- ../../komodo-jl777/src/rpcmisc.cpp	2017-01-03 09:49:08.864506767 +0000
***************
*** 23,28 ****
--- 23,30 ----
  #include "json/json_spirit_utils.h"
  #include "json/json_spirit_value.h"
  
+ #include "zcash/Address.hpp"
+ 
  using namespace json_spirit;
  using namespace std;
  
***************
*** 236,241 ****
--- 238,306 ----
      return ret;
  }
  
+ 
+ Value z_validateaddress(const Array& params, bool fHelp)
+ {
+     if (fHelp || params.size() != 1)
+         throw runtime_error(
+             "z_validateaddress \"zaddr\"\n"
+             "\nReturn information about the given z address.\n"
+             "\nArguments:\n"
+             "1. \"zaddr\"     (string, required) The z address to validate\n"
+             "\nResult:\n"
+             "{\n"
+             "  \"isvalid\" : true|false,      (boolean) If the address is valid or not. If not, this is the only property returned.\n"
+             "  \"address\" : \"zaddr\",         (string) The z address validated\n"
+             "  \"ismine\" : true|false,       (boolean) If the address is yours or not\n"
+             "  \"payingkey\" : \"hex\",         (string) The hex value of the paying key, a_pk\n"
+             "  \"transmissionkey\" : \"hex\",   (string) The hex value of the transmission key, pk_enc\n"
+ 
+             "}\n"
+             "\nExamples:\n"
+             + HelpExampleCli("validateaddress", "\"zcWsmqT4X2V4jgxbgiCzyrAfRT1vi1F4sn7M5Pkh66izzw8Uk7LBGAH3DtcSMJeUb2pi3W4SQF8LMKkU2cUuVP68yAGcomL\"")
+         );
+ 
+ 
+ #ifdef ENABLE_WALLET
+     LOCK2(cs_main, pwalletMain->cs_wallet);
+ #else
+     LOCK(cs_main);
+ #endif
+ 
+     bool isValid = false;
+     bool isMine = false;
+     std::string payingKey, transmissionKey;
+ 
+     string strAddress = params[0].get_str();
+     try {
+         CZCPaymentAddress address(strAddress);
+         libzcash::PaymentAddress addr = address.Get();
+ 
+ #ifdef ENABLE_WALLET
+         isMine = pwalletMain->HaveSpendingKey(addr);
+ #endif
+         payingKey = addr.a_pk.GetHex();
+         transmissionKey = addr.pk_enc.GetHex();
+         isValid = true;
+     } catch (std::runtime_error e) {
+         // address is invalid, nop here as isValid is false.
+     }
+ 
+     Object ret;
+     ret.push_back(Pair("isvalid", isValid));
+     if (isValid)
+     {
+         ret.push_back(Pair("address", strAddress));
+         ret.push_back(Pair("payingkey", payingKey));
+         ret.push_back(Pair("transmissionkey", transmissionKey));
+ #ifdef ENABLE_WALLET
+         ret.push_back(Pair("ismine", isMine));
+ #endif
+     }
+     return ret;
+ }
+ 
+ 
  /**
   * Used by addmultisigaddress / createmultisig:
   */
diff -crB ./src/rpcprotocol.cpp ../../komodo-jl777/src/rpcprotocol.cpp
*** ./src/rpcprotocol.cpp	2017-01-03 10:40:50.343335845 +0000
--- ../../komodo-jl777/src/rpcprotocol.cpp	2017-01-03 09:49:08.864506767 +0000
***************
*** 33,39 ****
  
  /**
   * HTTP protocol
!  * 
   * This ain't Apache.  We're just using HTTP header for the length field
   * and to be compatible with other JSON-RPC implementations.
   */
--- 33,39 ----
  
  /**
   * HTTP protocol
!  *
   * This ain't Apache.  We're just using HTTP header for the length field
   * and to be compatible with other JSON-RPC implementations.
   */
***************
*** 42,48 ****
  {
      ostringstream s;
      s << "POST / HTTP/1.1\r\n"
!       << "User-Agent: bitcoin-json-rpc/" << FormatFullVersion() << "\r\n"
        << "Host: 127.0.0.1\r\n"
        << "Content-Type: application/json\r\n"
        << "Content-Length: " << strMsg.size() << "\r\n"
--- 42,48 ----
  {
      ostringstream s;
      s << "POST / HTTP/1.1\r\n"
!       << "User-Agent: zcash-json-rpc/" << FormatFullVersion() << "\r\n"
        << "Host: 127.0.0.1\r\n"
        << "Content-Type: application/json\r\n"
        << "Content-Length: " << strMsg.size() << "\r\n"
***************
*** 77,83 ****
      if (nStatus == HTTP_UNAUTHORIZED)
          return strprintf("HTTP/1.0 401 Authorization Required\r\n"
              "Date: %s\r\n"
!             "Server: bitcoin-json-rpc/%s\r\n"
              "WWW-Authenticate: Basic realm=\"jsonrpc\"\r\n"
              "Content-Type: text/html\r\n"
              "Content-Length: 296\r\n"
--- 77,83 ----
      if (nStatus == HTTP_UNAUTHORIZED)
          return strprintf("HTTP/1.0 401 Authorization Required\r\n"
              "Date: %s\r\n"
!             "Server: zcash-json-rpc/%s\r\n"
              "WWW-Authenticate: Basic realm=\"jsonrpc\"\r\n"
              "Content-Type: text/html\r\n"
              "Content-Length: 296\r\n"
***************
*** 104,110 ****
              "Connection: %s\r\n"
              "Content-Length: %u\r\n"
              "Content-Type: %s\r\n"
!             "Server: bitcoin-json-rpc/%s\r\n"
              "\r\n",
          nStatus,
          httpStatusDescription(nStatus),
--- 104,110 ----
              "Connection: %s\r\n"
              "Content-Length: %u\r\n"
              "Content-Type: %s\r\n"
!             "Server: zcash-json-rpc/%s\r\n"
              "\r\n",
          nStatus,
          httpStatusDescription(nStatus),
***************
*** 248,254 ****
   * JSON-RPC protocol.  Bitcoin speaks version 1.0 for maximum compatibility,
   * but uses JSON-RPC 1.1/2.0 standards for parts of the 1.0 standard that were
   * unspecified (HTTP errors and contents of 'error').
!  * 
   * 1.0 spec: http://json-rpc.org/wiki/specification
   * 1.2 spec: http://jsonrpc.org/historical/json-rpc-over-http.html
   * http://www.codeproject.com/KB/recipes/JSON_Spirit.aspx
--- 248,254 ----
   * JSON-RPC protocol.  Bitcoin speaks version 1.0 for maximum compatibility,
   * but uses JSON-RPC 1.1/2.0 standards for parts of the 1.0 standard that were
   * unspecified (HTTP errors and contents of 'error').
!  *
   * 1.0 spec: http://json-rpc.org/wiki/specification
   * 1.2 spec: http://jsonrpc.org/historical/json-rpc-over-http.html
   * http://www.codeproject.com/KB/recipes/JSON_Spirit.aspx
diff -crB ./src/rpcserver.cpp ../../komodo-jl777/src/rpcserver.cpp
*** ./src/rpcserver.cpp	2017-01-03 10:40:50.343335845 +0000
--- ../../komodo-jl777/src/rpcserver.cpp	2017-01-03 09:49:08.864506767 +0000
***************
*** 309,314 ****
--- 309,316 ----
      /* Mining */
      { "mining",             "getblocktemplate",       &getblocktemplate,       true  },
      { "mining",             "getmininginfo",          &getmininginfo,          true  },
+     { "mining",             "getlocalsolps",          &getlocalsolps,          true  },
+     { "mining",             "getnetworksolps",        &getnetworksolps,        true  },
      { "mining",             "getnetworkhashps",       &getnetworkhashps,       true  },
      { "mining",             "prioritisetransaction",  &prioritisetransaction,  true  },
      { "mining",             "submitblock",            &submitblock,            true  },
***************
*** 335,340 ****
--- 337,343 ----
      { "util",               "verifymessage",          &verifymessage,          true  },
      { "util",               "estimatefee",            &estimatefee,            true  },
      { "util",               "estimatepriority",       &estimatepriority,       true  },
+     { "util",               "z_validateaddress",      &z_validateaddress,      true  }, /* uses wallet if enabled */
  
      /* Not shown in help */
      { "hidden",             "invalidateblock",        &invalidateblock,        true  },
***************
*** 1034,1042 ****
--- 1037,1051 ----
          // Read HTTP message headers and body
          ReadHTTPMessage(conn->stream(), mapHeaders, strRequest, nProto, MAX_SIZE);
  
+         // TODO #1856: Re-enable support for persistent connections.
+         // We have disabled support for HTTP Keep-Alive until resolution of #1680, upstream rpc deadlock.
+         // Close connection immediately.
+         fRun = false;
+         /*
          // HTTP Keep-Alive is false; close connection immediately
          if ((mapHeaders["connection"] == "close") || (!GetBoolArg("-rpckeepalive", true)))
              fRun = false;
+         */
  
          // Process via JSON-RPC API
          if (strURI == "/") {
diff -crB ./src/rpcserver.h ../../komodo-jl777/src/rpcserver.h
*** ./src/rpcserver.h	2017-01-03 10:40:50.343335845 +0000
--- ../../komodo-jl777/src/rpcserver.h	2017-01-03 09:49:08.864506767 +0000
***************
*** 169,174 ****
--- 169,176 ----
  extern json_spirit::Value getgenerate(const json_spirit::Array& params, bool fHelp); // in rpcmining.cpp
  extern json_spirit::Value setgenerate(const json_spirit::Array& params, bool fHelp);
  extern json_spirit::Value generate(const json_spirit::Array& params, bool fHelp);
+ extern json_spirit::Value getlocalsolps(const json_spirit::Array& params, bool fHelp);
+ extern json_spirit::Value getnetworksolps(const json_spirit::Array& params, bool fHelp);
  extern json_spirit::Value getnetworkhashps(const json_spirit::Array& params, bool fHelp);
  extern json_spirit::Value getmininginfo(const json_spirit::Array& params, bool fHelp);
  extern json_spirit::Value prioritisetransaction(const json_spirit::Array& params, bool fHelp);
***************
*** 270,275 ****
--- 272,278 ----
  extern json_spirit::Value z_getoperationstatus(const json_spirit::Array& params, bool fHelp); // in rpcwallet.cpp
  extern json_spirit::Value z_getoperationresult(const json_spirit::Array& params, bool fHelp); // in rpcwallet.cpp
  extern json_spirit::Value z_listoperationids(const json_spirit::Array& params, bool fHelp); // in rpcwallet.cpp
+ extern json_spirit::Value z_validateaddress(const json_spirit::Array& params, bool fHelp); // in rpcmisc.cpp
  
  
  // in rest.cpp
diff -crB ./src/test/coins_tests.cpp ../../komodo-jl777/src/test/coins_tests.cpp
*** ./src/test/coins_tests.cpp	2017-01-03 10:40:50.375337465 +0000
--- ../../komodo-jl777/src/test/coins_tests.cpp	2017-01-03 09:49:08.868506976 +0000
***************
*** 166,171 ****
--- 166,414 ----
  
  BOOST_FIXTURE_TEST_SUITE(coins_tests, BasicTestingSetup)
  
+ BOOST_AUTO_TEST_CASE(nullifier_regression_test)
+ {
+     // Correct behavior:
+     {
+         CCoinsViewTest base;
+         CCoinsViewCacheTest cache1(&base);
+ 
+         // Insert a nullifier into the base.
+         uint256 nf = GetRandHash();
+         cache1.SetNullifier(nf, true);
+         cache1.Flush(); // Flush to base.
+ 
+         // Remove the nullifier from cache
+         cache1.SetNullifier(nf, false);
+ 
+         // The nullifier now should be `false`.
+         BOOST_CHECK(!cache1.GetNullifier(nf));
+     }
+ 
+     // Also correct behavior:
+     {
+         CCoinsViewTest base;
+         CCoinsViewCacheTest cache1(&base);
+ 
+         // Insert a nullifier into the base.
+         uint256 nf = GetRandHash();
+         cache1.SetNullifier(nf, true);
+         cache1.Flush(); // Flush to base.
+ 
+         // Remove the nullifier from cache
+         cache1.SetNullifier(nf, false);
+         cache1.Flush(); // Flush to base.
+ 
+         // The nullifier now should be `false`.
+         BOOST_CHECK(!cache1.GetNullifier(nf));
+     }
+ 
+     // Works because we bring it from the parent cache:
+     {
+         CCoinsViewTest base;
+         CCoinsViewCacheTest cache1(&base);
+ 
+         // Insert a nullifier into the base.
+         uint256 nf = GetRandHash();
+         cache1.SetNullifier(nf, true);
+         cache1.Flush(); // Empties cache.
+ 
+         // Create cache on top.
+         {
+             // Remove the nullifier.
+             CCoinsViewCacheTest cache2(&cache1);
+             BOOST_CHECK(cache2.GetNullifier(nf));
+             cache2.SetNullifier(nf, false);
+             cache2.Flush(); // Empties cache, flushes to cache1.
+         }
+ 
+         // The nullifier now should be `false`.
+         BOOST_CHECK(!cache1.GetNullifier(nf));
+     }
+ 
+     // Was broken:
+     {
+         CCoinsViewTest base;
+         CCoinsViewCacheTest cache1(&base);
+ 
+         // Insert a nullifier into the base.
+         uint256 nf = GetRandHash();
+         cache1.SetNullifier(nf, true);
+         cache1.Flush(); // Empties cache.
+ 
+         // Create cache on top.
+         {
+             // Remove the nullifier.
+             CCoinsViewCacheTest cache2(&cache1);
+             cache2.SetNullifier(nf, false);
+             cache2.Flush(); // Empties cache, flushes to cache1.
+         }
+ 
+         // The nullifier now should be `false`.
+         BOOST_CHECK(!cache1.GetNullifier(nf));
+     }
+ }
+ 
+ BOOST_AUTO_TEST_CASE(anchor_pop_regression_test)
+ {
+     // Correct behavior:
+     {
+         CCoinsViewTest base;
+         CCoinsViewCacheTest cache1(&base);
+ 
+         // Create dummy anchor/commitment
+         ZCIncrementalMerkleTree tree;
+         uint256 cm = GetRandHash();
+         tree.append(cm);
+ 
+         // Add the anchor
+         cache1.PushAnchor(tree);
+         cache1.Flush();
+ 
+         // Remove the anchor
+         cache1.PopAnchor(ZCIncrementalMerkleTree::empty_root());
+         cache1.Flush();
+ 
+         // Add the anchor back
+         cache1.PushAnchor(tree);
+         cache1.Flush();
+ 
+         // The base contains the anchor, of course!
+         {
+             ZCIncrementalMerkleTree checktree;
+             BOOST_CHECK(cache1.GetAnchorAt(tree.root(), checktree));
+             BOOST_CHECK(checktree.root() == tree.root());
+         }
+     }
+ 
+     // Previously incorrect behavior
+     {
+         CCoinsViewTest base;
+         CCoinsViewCacheTest cache1(&base);
+ 
+         // Create dummy anchor/commitment
+         ZCIncrementalMerkleTree tree;
+         uint256 cm = GetRandHash();
+         tree.append(cm);
+ 
+         // Add the anchor and flush to disk
+         cache1.PushAnchor(tree);
+         cache1.Flush();
+ 
+         // Remove the anchor, but don't flush yet!
+         cache1.PopAnchor(ZCIncrementalMerkleTree::empty_root());
+ 
+         {
+             CCoinsViewCacheTest cache2(&cache1); // Build cache on top
+             cache2.PushAnchor(tree); // Put the same anchor back!
+             cache2.Flush(); // Flush to cache1
+         }
+ 
+         // cache2's flush kinda worked, i.e. cache1 thinks the
+         // tree is there, but it didn't bring down the correct
+         // treestate...
+         {
+             ZCIncrementalMerkleTree checktree;
+             BOOST_CHECK(cache1.GetAnchorAt(tree.root(), checktree));
+             BOOST_CHECK(checktree.root() == tree.root()); // Oh, shucks.
+         }
+ 
+         // Flushing cache won't help either, just makes the inconsistency
+         // permanent.
+         cache1.Flush();
+         {
+             ZCIncrementalMerkleTree checktree;
+             BOOST_CHECK(cache1.GetAnchorAt(tree.root(), checktree));
+             BOOST_CHECK(checktree.root() == tree.root()); // Oh, shucks.
+         }
+     }
+ }
+ 
+ BOOST_AUTO_TEST_CASE(anchor_regression_test)
+ {
+     // Correct behavior:
+     {
+         CCoinsViewTest base;
+         CCoinsViewCacheTest cache1(&base);
+ 
+         // Insert anchor into base.
+         ZCIncrementalMerkleTree tree;
+         uint256 cm = GetRandHash();
+         tree.append(cm);
+         cache1.PushAnchor(tree);
+         cache1.Flush();
+ 
+         cache1.PopAnchor(ZCIncrementalMerkleTree::empty_root());
+         BOOST_CHECK(cache1.GetBestAnchor() == ZCIncrementalMerkleTree::empty_root());
+         BOOST_CHECK(!cache1.GetAnchorAt(tree.root(), tree));
+     }
+ 
+     // Also correct behavior:
+     {
+         CCoinsViewTest base;
+         CCoinsViewCacheTest cache1(&base);
+ 
+         // Insert anchor into base.
+         ZCIncrementalMerkleTree tree;
+         uint256 cm = GetRandHash();
+         tree.append(cm);
+         cache1.PushAnchor(tree);
+         cache1.Flush();
+ 
+         cache1.PopAnchor(ZCIncrementalMerkleTree::empty_root());
+         cache1.Flush();
+         BOOST_CHECK(cache1.GetBestAnchor() == ZCIncrementalMerkleTree::empty_root());
+         BOOST_CHECK(!cache1.GetAnchorAt(tree.root(), tree));
+     }
+ 
+     // Works because we bring the anchor in from parent cache.
+     {
+         CCoinsViewTest base;
+         CCoinsViewCacheTest cache1(&base);
+ 
+         // Insert anchor into base.
+         ZCIncrementalMerkleTree tree;
+         uint256 cm = GetRandHash();
+         tree.append(cm);
+         cache1.PushAnchor(tree);
+         cache1.Flush();
+ 
+         {
+             // Pop anchor.
+             CCoinsViewCacheTest cache2(&cache1);
+             BOOST_CHECK(cache2.GetAnchorAt(tree.root(), tree));
+             cache2.PopAnchor(ZCIncrementalMerkleTree::empty_root());
+             cache2.Flush();
+         }
+ 
+         BOOST_CHECK(cache1.GetBestAnchor() == ZCIncrementalMerkleTree::empty_root());
+         BOOST_CHECK(!cache1.GetAnchorAt(tree.root(), tree));
+     }
+ 
+     // Was broken:
+     {
+         CCoinsViewTest base;
+         CCoinsViewCacheTest cache1(&base);
+ 
+         // Insert anchor into base.
+         ZCIncrementalMerkleTree tree;
+         uint256 cm = GetRandHash();
+         tree.append(cm);
+         cache1.PushAnchor(tree);
+         cache1.Flush();
+ 
+         {
+             // Pop anchor.
+             CCoinsViewCacheTest cache2(&cache1);
+             cache2.PopAnchor(ZCIncrementalMerkleTree::empty_root());
+             cache2.Flush();
+         }
+ 
+         BOOST_CHECK(cache1.GetBestAnchor() == ZCIncrementalMerkleTree::empty_root());
+         BOOST_CHECK(!cache1.GetAnchorAt(tree.root(), tree));
+     }
+ }
+ 
  BOOST_AUTO_TEST_CASE(nullifiers_test)
  {
      CCoinsViewTest base;
Only in ../../komodo-jl777/src/test/data: merkle_commitments.json
diff -crB ./src/test/data/merkle_path.json ../../komodo-jl777/src/test/data/merkle_path.json
*** ./src/test/data/merkle_path.json	2017-01-03 10:40:50.395338477 +0000
--- ../../komodo-jl777/src/test/data/merkle_path.json	2017-01-03 09:49:08.872507185 +0000
***************
*** 1,123 ****
  [
!     "04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101010001010001000001000100010100010000010100000001000101010101000000000100010101010001010100000101000101000100000001010001000001000101000000010000000101000001010001000100010101010000010100000100010101000101010100000101010101010001010101010001010000010001000100000001010000010101000001000101010001000100000100000100000001010100000000000001010001000001000001010000000100000100000000010101000101010001000101010101010100010101010100000101010100010001000000000101000000000001010001010101000100010000010101000101000000fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000100000000000100010001000001010101000000000000000101010001010000000001000000010101010001010001010101010001010001000001000000010000010001000000010101000001000100010100010101010100000001000100000001010001010001000000000100010101000000000100000100010001010101010001000100000001010001010001000100010101010100010000010101010000010001010100000101010100010100000001010101010101000101000001010001000000000100000001010001010101000101000100000001010100010100010101000100010001010001010101010000000001000001000000010000000001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000100000000000100010001000001010101000000000000000101010001010000000001000000010101010001010001010101010001010001000001000000010000010001000000010101000001000100010100010101010100000001000100000001010001010001000000000100010101000000000100000100010001010101010001000100000001010001010001000100010101010100010000010101010000010001010100000101010100010100000001010101010101000101000001010001000000000100000001010001010101000101000100000001010100010100010101000100010001010001010101010000000001000001000000010000000001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000001000101000101010100000000000001000000000001000100000000010000010001000100010000000100010101010000000000010001010001000001010001010100000001000001010101010100000001010000000000000000000101000000010100000000000001010100010001010100010101000000010000010001010000000001000100000101000100010100000001000001000001000100010000000001000001010000010101000100010000000001010100010101010000010001000000010000000100010100010100010100010100000101010001010101010000010000000100000001000101010000010001000001010000000001fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000001000101000101010100000000000001000000000001000100000000010000010001000100010000000100010101010000000000010001010001000001010001010100000001000001010101010100000001010000000000000000000101000000010100000000000001010100010001010100010101000000010000010001010000000001000100000101000100010100000001000001000001000100010000000001000001010000010101000100010000000001010100010101010000010001000000010000000100010100010100010100010100000101010001010101010000010000000100000001000101010000010001000001010000000001fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000001000101000101010100000000000001000000000001000100000000010000010001000100010000000100010101010000000000010001010001000001010001010100000001000001010101010100000001010000000000000000000101000000010100000000000001010100010001010100010101000000010000010001010000000001000100000101000100010100000001000001000001000100010000000001000001010000010101000100010000000001010100010101010000010001000000010000000100010100010100010100010100000101010001010101010000010000000100000001000101010000010001000001010000000001fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000001000101000101010100000000000001000000000001000100000000010000010001000100010000000100010101010000000000010001010001000001010001010100000001000001010101010100000001010000000000000000000101000000010100000000000001010100010001010100010101000000010000010001010000000001000100000101000100010100000001000001000001000100010000000001000001010000010101000100010000000001010100010101010000010001000000010000000100010100010100010100010100000101010001010101010000010000000100000001000101010000010001000001010000000001fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010000010000010100010101000100010000000001010100000001000100010000010100000000010100000000010000010100000001000100010000000000010001000100000101000101000101010101000001000100000101000000000101000101000101000101000001010101010001010000000101000001000101010000010001010001000000000001000001000100000000010001010100000101000000010001010000000100010000000001000001010001000001000100010001010000010101010001010101010000000100010100010001000000000001000000010101000001010001000001000001010100000101010000010101fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010000010000010100010101000100010000000001010100000001000100010000010100000000010100000000010000010100000001000100010000000000010001000100000101000101000101010101000001000100000101000000000101000101000101000101000001010101010001010000000101000001000101010000010001010001000000000001000001000100000000010001010100000101000000010001010000000100010000000001000001010001000001000100010001010000010101010001010101010000000100010100010001000000000001000000010101000001010001000001000001010100000101010000010101fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010000010000010100010101000100010000000001010100000001000100010000010100000000010100000000010000010100000001000100010000000000010001000100000101000101000101010101000001000100000101000000000101000101000101000101000001010101010001010000000101000001000101010000010001010001000000000001000001000100000000010001010100000101000000010001010000000100010000000001000001010001000001000100010001010000010101010001010101010000000100010100010001000000000001000000010101000001010001000001000001010100000101010000010101fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010000010000010100010101000100010000000001010100000001000100010000010100000000010100000000010000010100000001000100010000000000010001000100000101000101000101010101000001000100000101000000000101000101000101000101000001010101010001010000000101000001000101010000010001010001000000000001000001000100000000010001010100000101000000010001010000000100010000000001000001010001000001000100010001010000010101010001010101010000000100010100010001000000000001000000010101000001010001000001000001010100000101010000010101fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101010001010001000001000100010100010000010100000001000101010101000000000100010101010001010100000101000101000100000001010001000001000101000000010000000101000001010001000100010101010000010100000100010101000101010100000101010101010001010101010001010000010001000100000001010000010101000001000101010001000100000100000100000001010100000000000001010001000001000001010000000100000100000000010101000101010001000101010101010100010101010100000101010100010001000000000101000000000001010001010101000100010000010101000101000000fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010101010001010000010001000000010100000001010100000000010001000000000101010101000001000100010100010000010001010001010101010000010101000101010100010001000000010100000001010100010001000000000100000101010001000000000100010100000001010000010001000000000000010101000000010101010001000101010101010100010100000000010100010101000101000100010101000000010101000000010101000001000001000101010000000101010000000000000001010101010001010001010100010000000001010100000101000000000101010001010100000101000101010000010000000100fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010101010001010000010001000000010100000001010100000000010001000000000101010101000001000100010100010000010001010001010101010000010101000101010100010001000000010100000001010100010001000000000100000101010001000000000100010100000001010000010001000000000000010101000000010101010001000101010101010100010100000000010100010101000101000100010101000000010101000000010101000001000001000101010000000101010000000000000001010101010001010001010100010000000001010100000101000000000101010001010100000101000101010000010000000100fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010101010001010000010001000000010100000001010100000000010001000000000101010101000001000100010100010000010001010001010101010000010101000101010100010001000000010100000001010100010001000000000100000101010001000000000100010100000001010000010001000000000000010101000000010101010001000101010101010100010100000000010100010101000101000100010101000000010101000000010101000001000001000101010000000101010000000000000001010101010001010001010100010000000001010100000101000000000101010001010100000101000101010000010000000100fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010101010001010000010001000000010100000001010100000000010001000000000101010101000001000100010100010000010001010001010101010000010101000101010100010001000000010100000001010100010001000000000100000101010001000000000100010100000001010000010001000000000000010101000000010101010001000101010101010100010100000000010100010101000101000100010101000000010101000000010101000001000001000101010000000101010000000000000001010101010001010001010100010000000001010100000101000000000101010001010100000101000101010000010000000100fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000100000000000100010001000001010101000000000000000101010001010000000001000000010101010001010001010101010001010001000001000000010000010001000000010101000001000100010100010101010100000001000100000001010001010001000000000100010101000000000100000100010001010101010001000100000001010001010001000100010101010100010000010101010000010001010100000101010100010100000001010101010101000101000001010001000000000100000001010001010101000101000100000001010100010100010101000100010001010001010101010000000001000001000000010000000001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000100000000000100010001000001010101000000000000000101010001010000000001000000010101010001010001010101010001010001000001000000010000010001000000010101000001000100010100010101010100000001000100000001010001010001000000000100010101000000000100000100010001010101010001000100000001010001010001000100010101010100010000010101010000010001010100000101010100010100000001010101010101000101000001010001000000000100000001010001010101000101000100000001010100010100010101000100010001010001010101010000000001000001000000010000000001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010100",
! 	"04fd000101010001000100000000010100010000000100000000000100010000010001010000010001010101000000010001010000010101010100010100010101000100000100010101000101000101010100000000010101000101010000010001000000000101010000010001010000000000010001000100000001000100010101010100000001010101010101010100000001000000000000000001000000000000000001000101000001000001010000010000000101000101000000010100000100000001010101000001010101000001000000010101000001000100000100010100010101000000010001000000000100000100000000010100000100000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
! 	"04fd000101010001000100000000010100010000000100000000000100010000010001010000010001010101000000010001010000010101010100010100010101000100000100010101000101000101010100000000010101000101010000010001000000000101010000010001010000000000010001000100000001000100010101010100000001010101010101010100000001000000000000000001000000000000000001000101000001000001010000010000000101000101000000010100000100000001010101000001010101000001000000010101000001000100000100010100010101000000010001000000000100000100000000010100000100000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
! 	"04fd000101010001000100000000010100010000000100000000000100010000010001010000010001010101000000010001010000010101010100010100010101000100000100010101000101000101010100000000010101000101010000010001000000000101010000010001010000000000010001000100000001000100010101010100000001010101010101010100000001000000000000000001000000000000000001000101000001000001010000010000000101000101000000010100000100000001010101000001010101000001000000010101000001000100000100010100010101000000010001000000000100000100000000010100000100000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
! 	"04fd000101010001000100000000010100010000000100000000000100010000010001010000010001010101000000010001010000010101010100010100010101000100000100010101000101000101010100000000010101000101010000010001000000000101010000010001010000000000010001000100000001000100010101010100000001010101010101010100000001000000000000000001000000000000000001000101000001000001010000010000000101000101000000010100000100000001010101000001010101000001000000010101000001000100000100010100010101000000010001000000000100000100000000010100000100000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
! 	"04fd000101010001000100000000010100010000000100000000000100010000010001010000010001010101000000010001010000010101010100010100010101000100000100010101000101000101010100000000010101000101010000010001000000000101010000010001010000000000010001000100000001000100010101010100000001010101010101010100000001000000000000000001000000000000000001000101000001000001010000010000000101000101000000010100000100000001010101000001010101000001000000010101000001000100000100010100010101000000010001000000000100000100000000010100000100000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
! 	"04fd000101010001000100000000010100010000000100000000000100010000010001010000010001010101000000010001010000010101010100010100010101000100000100010101000101000101010100000000010101000101010000010001000000000101010000010001010000000000010001000100000001000100010101010100000001010101010101010100000001000000000000000001000000000000000001000101000001000001010000010000000101000101000000010100000100000001010101000001010101000001000000010101000001000100000100010100010101000000010001000000000100000100000000010100000100000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
! 	"04fd000101010001000100000000010100010000000100000000000100010000010001010000010001010101000000010001010000010101010100010100010101000100000100010101000101000101010100000000010101000101010000010001000000000101010000010001010000000000010001000100000001000100010101010100000001010101010101010100000001000000000000000001000000000000000001000101000001000001010000010000000101000101000000010100000100000001010101000001010101000001000000010101000001000100000100010100010101000000010001000000000100000100000000010100000100000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010100",
! 	"04fd000101010001000100000000010100010000000100000000000100010000010001010000010001010101000000010001010000010101010100010100010101000100000100010101000101000101010100000000010101000101010000010001000000000101010000010001010000000000010001000100000001000100010101010100000001010101010101010100000001000000000000000001000000000000000001000101000001000001010000010000000101000101000000010100000100000001010101000001010101000001000000010101000001000100000100010100010101000000010001000000000100000100000000010100000100000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010101",
! 	"04fd000101000101010001010100010100010001010101010100000101010000010101000001010001000100000000010101000101000101010001010001000101010001010001010000000100000101010000000000000101000001010001010101000001010000000000000101010101010001010101010000000000010000010000000000000001000101000001010100010100000001010001000000010000000000010101000101010000000001000000000100000000010101000101000001000000000100000000010100000001010101000100010101000001010001010101010001000000000000010001000000010101000100010000010000000001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
! 	"04fd000101000101010001010100010100010001010101010100000101010000010101000001010001000100000000010101000101000101010001010001000101010001010001010000000100000101010000000000000101000001010001010101000001010000000000000101010101010001010101010000000000010000010000000000000001000101000001010100010100000001010001000000010000000000010101000101010000000001000000000100000000010101000101000001000000000100000000010100000001010101000100010101000001010001010101010001000000000000010001000000010101000100010000010000000001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
! 	"04fd000101000101010001010100010100010001010101010100000101010000010101000001010001000100000000010101000101000101010001010001000101010001010001010000000100000101010000000000000101000001010001010101000001010000000000000101010101010001010101010000000000010000010000000000000001000101000001010100010100000001010001000000010000000000010101000101010000000001000000000100000000010101000101000001000000000100000000010100000001010101000100010101000001010001010101010001000000000000010001000000010101000100010000010000000001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
! 	"04fd000101000101010001010100010100010001010101010100000101010000010101000001010001000100000000010101000101000101010001010001000101010001010001010000000100000101010000000000000101000001010001010101000001010000000000000101010101010001010101010000000000010000010000000000000001000101000001010100010100000001010001000000010000000000010101000101010000000001000000000100000000010101000101000001000000000100000000010100000001010101000100010101000001010001010101010001000000000000010001000000010101000100010000010000000001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
! 	"04fd000101000101010001010100010100010001010101010100000101010000010101000001010001000100000000010101000101000101010001010001000101010001010001010000000100000101010000000000000101000001010001010101000001010000000000000101010101010001010101010000000000010000010000000000000001000101000001010100010100000001010001000000010000000000010101000101010000000001000000000100000000010101000101000001000000000100000000010100000001010101000100010101000001010001010101010001000000000000010001000000010101000100010000010000000001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
! 	"04fd000101000101010001010100010100010001010101010100000101010000010101000001010001000100000000010101000101000101010001010001000101010001010001010000000100000101010000000000000101000001010001010101000001010000000000000101010101010001010101010000000000010000010000000000000001000101000001010100010100000001010001000000010000000000010101000101010000000001000000000100000000010101000101000001000000000100000000010100000001010101000100010101000001010001010101010001000000000000010001000000010101000100010000010000000001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
! 	"04fd000101000101010001010100010100010001010101010100000101010000010101000001010001000100000000010101000101000101010001010001000101010001010001010000000100000101010000000000000101000001010001010101000001010000000000000101010101010001010101010000000000010000010000000000000001000101000001010100010100000001010001000000010000000000010101000101010000000001000000000100000000010101000101000001000000000100000000010100000001010101000100010101000001010001010101010001000000000000010001000000010101000100010000010000000001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010100",
! 	"04fd000101000101010001010100010100010001010101010100000101010000010101000001010001000100000000010101000101000101010001010001000101010001010001010000000100000101010000000000000101000001010001010101000001010000000000000101010101010001010101010000000000010000010000000000000001000101000001010100010100000001010001000000010000000000010101000101010000000001000000000100000000010101000101000001000000000100000000010100000001010101000100010101000001010001010101010001000000000000010001000000010101000100010000010000000001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010101",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101010001010001000001000100010100010000010100000001000101010101000000000100010101010001010100000101000101000100000001010001000001000101000000010000000101000001010001000100010101010000010100000100010101000101010100000101010101010001010101010001010000010001000100000001010000010101000001000101010001000100000100000100000001010100000000000001010001000001000001010000000100000100000000010101000101010001000101010101010100010101010100000101010100010001000000000101000000000001010001010101000100010000010101000101000000fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000000",
! 	"04fd000100010100000101010000000000010101000000010001010100000001000100010000010101000101010000000101010001010101000000010000010000000100000101010101000100010001010001010001010101010001000000000001010000010000000001010000000000010001010001010000000100010101000101000001010001010101010100010100000101010000010101010000000000010001000000010100000101010101000100010100000001000101000001000101000101010000000100010100000100000101010000000100010000000100010001000101010001000000000001010001010100000000000100010100000000000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
! 	"04fd000100010100000101010000000000010101000000010001010100000001000100010000010101000101010000000101010001010101000000010000010000000100000101010101000100010001010001010001010101010001000000000001010000010000000001010000000000010001010001010000000100010101000101000001010001010101010100010100000101010000010101010000000000010001000000010100000101010101000100010100000001000101000001000101000101010000000100010100000100000101010000000100010000000100010001000101010001000000000001010001010100000000000100010100000000000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
! 	"04fd000100010100000101010000000000010101000000010001010100000001000100010000010101000101010000000101010001010101000000010000010000000100000101010101000100010001010001010001010101010001000000000001010000010000000001010000000000010001010001010000000100010101000101000001010001010101010100010100000101010000010101010000000000010001000000010100000101010101000100010100000001000101000001000101000101010000000100010100000100000101010000000100010000000100010001000101010001000000000001010001010100000000000100010100000000000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
! 	"04fd000100010100000101010000000000010101000000010001010100000001000100010000010101000101010000000101010001010101000000010000010000000100000101010101000100010001010001010001010101010001000000000001010000010000000001010000000000010001010001010000000100010101000101000001010001010101010100010100000101010000010101010000000000010001000000010100000101010101000100010100000001000101000001000101000101010000000100010100000100000101010000000100010000000100010001000101010001000000000001010001010100000000000100010100000000000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
! 	"04fd000100010100000101010000000000010101000000010001010100000001000100010000010101000101010000000101010001010101000000010000010000000100000101010101000100010001010001010001010101010001000000000001010000010000000001010000000000010001010001010000000100010101000101000001010001010101010100010100000101010000010101010000000000010001000000010100000101010101000100010100000001000101000001000101000101010000000100010100000100000101010000000100010000000100010001000101010001000000000001010001010100000000000100010100000000000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
! 	"04fd000100010100000101010000000000010101000000010001010100000001000100010000010101000101010000000101010001010101000000010000010000000100000101010101000100010001010001010001010101010001000000000001010000010000000001010000000000010001010001010000000100010101000101000001010001010101010100010100000101010000010101010000000000010001000000010100000101010101000100010100000001000101000001000101000101010000000100010100000100000101010000000100010000000100010001000101010001000000000001010001010100000000000100010100000000000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
! 	"04fd000100010100000101010000000000010101000000010001010100000001000100010000010101000101010000000101010001010101000000010000010000000100000101010101000100010001010001010001010101010001000000000001010000010000000001010000000000010001010001010000000100010101000101000001010001010101010100010100000101010000010101010000000000010001000000010100000101010101000100010100000001000101000001000101000101010000000100010100000100000101010000000100010000000100010001000101010001000000000001010001010100000000000100010100000000000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010100",
! 	"04fd000100010100000101010000000000010101000000010001010100000001000100010000010101000101010000000101010001010101000000010000010000000100000101010101000100010001010001010001010101010001000000000001010000010000000001010000000000010001010001010000000100010101000101000001010001010101010100010100000101010000010101010000000000010001000000010100000101010101000100010100000001000101000001000101000101010000000100010100000100000101010000000100010000000100010001000101010001000000000001010001010100000000000100010100000000000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010101",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000100000000000100010001000001010101000000000000000101010001010000000001000000010101010001010001010101010001010001000001000000010000010001000000010101000001000100010100010101010100000001000100000001010001010001000000000100010101000000000100000100010001010101010001000100000001010001010001000100010101010100010000010101010000010001010100000101010100010100000001010101010101000101000001010001000000000100000001010001010101000101000100000001010100010100010101000100010001010001010101010000000001000001000000010000000001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000000",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000100000000000100010001000001010101000000000000000101010001010000000001000000010101010001010001010101010001010001000001000000010000010001000000010101000001000100010100010101010100000001000100000001010001010001000000000100010101000000000100000100010001010101010001000100000001010001010001000100010101010100010000010101010000010001010100000101010100010100000001010101010101000101000001010001000000000100000001010001010101000101000100000001010100010100010101000100010001010001010101010000000001000001000000010000000001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000001",
! 	"04fd000101010100010100000001010000010101010101000100010101010100010101010101000001010001000101010001010000000100000101000101000101000100010001000100000001010100000101010001000000000000010000010101000000010000000001010001000000010100010000000000010100000000000000010000000000000001010100010100010100010101010100010001010000000001000101010000000001010001000000010000000001010000010101010001000100010001010101000000010100000101010100010000000001000101010001010001000000010000010101000000000000000101010000010101010100000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
! 	"04fd000101010100010100000001010000010101010101000100010101010100010101010101000001010001000101010001010000000100000101000101000101000100010001000100000001010100000101010001000000000000010000010101000000010000000001010001000000010100010000000000010100000000000000010000000000000001010100010100010100010101010100010001010000000001000101010000000001010001000000010000000001010000010101010001000100010001010101000000010100000101010100010000000001000101010001010001000000010000010101000000000000000101010000010101010100000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
! 	"04fd000101010100010100000001010000010101010101000100010101010100010101010101000001010001000101010001010000000100000101000101000101000100010001000100000001010100000101010001000000000000010000010101000000010000000001010001000000010100010000000000010100000000000000010000000000000001010100010100010100010101010100010001010000000001000101010000000001010001000000010000000001010000010101010001000100010001010101000000010100000101010100010000000001000101010001010001000000010000010101000000000000000101010000010101010100000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
! 	"04fd000101010100010100000001010000010101010101000100010101010100010101010101000001010001000101010001010000000100000101000101000101000100010001000100000001010100000101010001000000000000010000010101000000010000000001010001000000010100010000000000010100000000000000010000000000000001010100010100010100010101010100010001010000000001000101010000000001010001000000010000000001010000010101010001000100010001010101000000010100000101010100010000000001000101010001010001000000010000010101000000000000000101010000010101010100000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
! 	"04fd000101010100010100000001010000010101010101000100010101010100010101010101000001010001000101010001010000000100000101000101000101000100010001000100000001010100000101010001000000000000010000010101000000010000000001010001000000010100010000000000010100000000000000010000000000000001010100010100010100010101010100010001010000000001000101010000000001010001000000010000000001010000010101010001000100010001010101000000010100000101010100010000000001000101010001010001000000010000010101000000000000000101010000010101010100000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
! 	"04fd000101010100010100000001010000010101010101000100010101010100010101010101000001010001000101010001010000000100000101000101000101000100010001000100000001010100000101010001000000000000010000010101000000010000000001010001000000010100010000000000010100000000000000010000000000000001010100010100010100010101010100010001010000000001000101010000000001010001000000010000000001010000010101010001000100010001010101000000010100000101010100010000000001000101010001010001000000010000010101000000000000000101010000010101010100000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
! 	"04fd000101010100010100000001010000010101010101000100010101010100010101010101000001010001000101010001010000000100000101000101000101000100010001000100000001010100000101010001000000000000010000010101000000010000000001010001000000010100010000000000010100000000000000010000000000000001010100010100010100010101010100010001010000000001000101010000000001010001000000010000000001010000010101010001000100010001010101000000010100000101010100010000000001000101010001010001000000010000010101000000000000000101010000010101010100000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010100",
! 	"04fd000101010100010100000001010000010101010101000100010101010100010101010101000001010001000101010001010000000100000101000101000101000100010001000100000001010100000101010001000000000000010000010101000000010000000001010001000000010100010000000000010100000000000000010000000000000001010100010100010100010101010100010001010000000001000101010000000001010001000000010000000001010000010101010001000100010001010101000000010100000101010100010000000001000101010001010001000000010000010101000000000000000101010000010101010100000001fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010101",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000000",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000001",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000100",
! 	"04fd000100010000010100000001010100010101010000010000010001010100000000010100010001000100010001010001000000000000010000000001000000000100000101000000000001010101000100000000010101000101000001000001000000010101010100000100010000010101010101010001000100000101010001010001000000010001000000010000010000010100010001010001000101010101010000000100010100000100000101010000010001010100000100000100000101000001000101010100000000000000000000010000000101010000010001010000000101000001010001010001010000010000010101000101000000000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
! 	"04fd000100010000010100000001010100010101010000010000010001010100000000010100010001000100010001010001000000000000010000000001000000000100000101000000000001010101000100000000010101000101000001000001000000010101010100000100010000010101010101010001000100000101010001010001000000010001000000010000010000010100010001010001000101010101010000000100010100000100000101010000010001010100000100000100000101000001000101010100000000000000000000010000000101010000010001010000000101000001010001010001010000010000010101000101000000000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
! 	"04fd000100010000010100000001010100010101010000010000010001010100000000010100010001000100010001010001000000000000010000000001000000000100000101000000000001010101000100000000010101000101000001000001000000010101010100000100010000010101010101010001000100000101010001010001000000010001000000010000010000010100010001010001000101010101010000000100010100000100000101010000010001010100000100000100000101000001000101010100000000000000000000010000000101010000010001010000000101000001010001010001010000010000010101000101000000000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
! 	"04fd000100010000010100000001010100010101010000010000010001010100000000010100010001000100010001010001000000000000010000000001000000000100000101000000000001010101000100000000010101000101000001000001000000010101010100000100010000010101010101010001000100000101010001010001000000010001000000010000010000010100010001010001000101010101010000000100010100000100000101010000010001010100000100000100000101000001000101010100000000000000000000010000000101010000010001010000000101000001010001010001010000010000010101000101000000000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
! 	"04fd000100010000010100000001010100010101010000010000010001010100000000010100010001000100010001010001000000000000010000000001000000000100000101000000000001010101000100000000010101000101000001000001000000010101010100000100010000010101010101010001000100000101010001010001000000010001000000010000010000010100010001010001000101010101010000000100010100000100000101010000010001010100000100000100000101000001000101010100000000000000000000010000000101010000010001010000000101000001010001010001010000010000010101000101000000000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
! 	"04fd000100010000010100000001010100010101010000010000010001010100000000010100010001000100010001010001000000000000010000000001000000000100000101000000000001010101000100000000010101000101000001000001000000010101010100000100010000010101010101010001000100000101010001010001000000010001000000010000010000010100010001010001000101010101010000000100010100000100000101010000010001010100000100000100000101000001000101010100000000000000000000010000000101010000010001010000000101000001010001010001010000010000010101000101000000000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
! 	"04fd000100010000010100000001010100010101010000010000010001010100000000010100010001000100010001010001000000000000010000000001000000000100000101000000000001010101000100000000010101000101000001000001000000010101010100000100010000010101010101010001000100000101010001010001000000010001000000010000010000010100010001010001000101010101010000000100010100000100000101010000010001010100000100000100000101000001000101010100000000000000000000010000000101010000010001010000000101000001010001010001010000010000010101000101000000000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010100",
! 	"04fd000100010000010100000001010100010101010000010000010001010100000000010100010001000100010001010001000000000000010000000001000000000100000101000000000001010101000100000000010101000101000001000001000000010101010100000100010000010101010101010001000100000101010001010001000000010001000000010000010000010100010001010001000101010101010000000100010100000100000101010000010001010100000100000100000101000001000101010100000000000000000000010000000101010000010001010000000101000001010001010001010000010000010101000101000000000100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010101",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000100000001000101000101010100000000000001000000000001000100000000010000010001000100010000000100010101010000000000010001010001000001010001010100000001000001010101010100000001010000000000000000000101000000010100000000000001010100010001010100010101000000010000010001010000000001000100000101000100010100000001000001000001000100010000000001000001010000010101000100010000000001010100010101010000010001000000010000000100010100010100010100010100000101010001010101010000010000000100000001000101010000010001000001010000000001fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000000",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000100000001000101000101010100000000000001000000000001000100000000010000010001000100010000000100010101010000000000010001010001000001010001010100000001000001010101010100000001010000000000000000000101000000010100000000000001010100010001010100010101000000010000010001010000000001000100000101000100010100000001000001000001000100010000000001000001010000010101000100010000000001010100010101010000010001000000010000000100010100010100010100010100000101010001010101010000010000000100000001000101010000010001000001010000000001fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000001",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000100000001000101000101010100000000000001000000000001000100000000010000010001000100010000000100010101010000000000010001010001000001010001010100000001000001010101010100000001010000000000000000000101000000010100000000000001010100010001010100010101000000010000010001010000000001000100000101000100010100000001000001000001000100010000000001000001010000010101000100010000000001010100010101010000010001000000010000000100010100010100010100010100000101010001010101010000010000000100000001000101010000010001000001010000000001fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000100",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000100000001000101000101010100000000000001000000000001000100000000010000010001000100010000000100010101010000000000010001010001000001010001010100000001000001010101010100000001010000000000000000000101000000010100000000000001010100010001010100010101000000010000010001010000000001000100000101000100010100000001000001000001000100010000000001000001010000010101000100010000000001010100010101010000010001000000010000000100010100010100010100010100000101010001010101010000010000000100000001000101010000010001000001010000000001fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000101",
! 	"04fd000100010000000001010001010001000000000100000001010100010001000000010101010000010000000000010101010000010101000101010101000101010001000100000001000000000001010101000100000100000101000000010101000100010000000101010101000000000100000000010000000101010000010100000001000000010001000000000000010000010100010101010101000001000100000000010100000101010100010000000000010101010100000001000001000100010001000000010001000000010001010100000101010101010000000001000100000001000100000000000000010100010001000101000001000001010100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
! 	"04fd000100010000000001010001010001000000000100000001010100010001000000010101010000010000000000010101010000010101000101010101000101010001000100000001000000000001010101000100000100000101000000010101000100010000000101010101000000000100000000010000000101010000010100000001000000010001000000000000010000010100010101010101000001000100000000010100000101010100010000000000010101010100000001000001000100010001000000010001000000010001010100000101010101010000000001000100000001000100000000000000010100010001000101000001000001010100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
! 	"04fd000100010000000001010001010001000000000100000001010100010001000000010101010000010000000000010101010000010101000101010101000101010001000100000001000000000001010101000100000100000101000000010101000100010000000101010101000000000100000000010000000101010000010100000001000000010001000000000000010000010100010101010101000001000100000000010100000101010100010000000000010101010100000001000001000100010001000000010001000000010001010100000101010101010000000001000100000001000100000000000000010100010001000101000001000001010100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
! 	"04fd000100010000000001010001010001000000000100000001010100010001000000010101010000010000000000010101010000010101000101010101000101010001000100000001000000000001010101000100000100000101000000010101000100010000000101010101000000000100000000010000000101010000010100000001000000010001000000000000010000010100010101010101000001000100000000010100000101010100010000000000010101010100000001000001000100010001000000010001000000010001010100000101010101010000000001000100000001000100000000000000010100010001000101000001000001010100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
! 	"04fd000100010000000001010001010001000000000100000001010100010001000000010101010000010000000000010101010000010101000101010101000101010001000100000001000000000001010101000100000100000101000000010101000100010000000101010101000000000100000000010000000101010000010100000001000000010001000000000000010000010100010101010101000001000100000000010100000101010100010000000000010101010100000001000001000100010001000000010001000000010001010100000101010101010000000001000100000001000100000000000000010100010001000101000001000001010100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
! 	"04fd000100010000000001010001010001000000000100000001010100010001000000010101010000010000000000010101010000010101000101010101000101010001000100000001000000000001010101000100000100000101000000010101000100010000000101010101000000000100000000010000000101010000010100000001000000010001000000000000010000010100010101010101000001000100000000010100000101010100010000000000010101010100000001000001000100010001000000010001000000010001010100000101010101010000000001000100000001000100000000000000010100010001000101000001000001010100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
! 	"04fd000100010000000001010001010001000000000100000001010100010001000000010101010000010000000000010101010000010101000101010101000101010001000100000001000000000001010101000100000100000101000000010101000100010000000101010101000000000100000000010000000101010000010100000001000000010001000000000000010000010100010101010101000001000100000000010100000101010100010000000000010101010100000001000001000100010001000000010001000000010001010100000101010101010000000001000100000001000100000000000000010100010001000101000001000001010100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010100",
! 	"04fd000100010000000001010001010001000000000100000001010100010001000000010101010000010000000000010101010000010101000101010101000101010001000100000001000000000001010101000100000100000101000000010101000100010000000101010101000000000100000000010000000101010000010100000001000000010001000000000000010000010100010101010101000001000100000000010100000101010100010000000000010101010100000001000001000100010001000000010001000000010001010100000101010101010000000001000100000001000100000000000000010100010001000101000001000001010100fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010101",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010000010000010100010101000100010000000001010100000001000100010000010100000000010100000000010000010100000001000100010000000000010001000100000101000101000101010101000001000100000101000000000101000101000101000101000001010101010001010000000101000001000101010000010001010001000000000001000001000100000000010001010100000101000000010001010000000100010000000001000001010001000001000100010001010000010101010001010101010000000100010100010001000000000001000000010101000001010001000001000001010100000101010000010101fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000000",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010000010000010100010101000100010000000001010100000001000100010000010100000000010100000000010000010100000001000100010000000000010001000100000101000101000101010101000001000100000101000000000101000101000101000101000001010101010001010000000101000001000101010000010001010001000000000001000001000100000000010001010100000101000000010001010000000100010000000001000001010001000001000100010001010000010101010001010101010000000100010100010001000000000001000000010101000001010001000001000001010100000101010000010101fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000001",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010000010000010100010101000100010000000001010100000001000100010000010100000000010100000000010000010100000001000100010000000000010001000100000101000101000101010101000001000100000101000000000101000101000101000101000001010101010001010000000101000001000101010000010001010001000000000001000001000100000000010001010100000101000000010001010000000100010000000001000001010001000001000100010001010000010101010001010101010000000100010100010001000000000001000000010101000001010001000001000001010100000101010000010101fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000100",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010000010000010100010101000100010000000001010100000001000100010000010100000000010100000000010000010100000001000100010000000000010001000100000101000101000101010101000001000100000101000000000101000101000101000101000001010101010001010000000101000001000101010000010001010001000000000001000001000100000000010001010100000101000000010001010000000100010000000001000001010001000001000100010001010000010101010001010101010000000100010100010001000000000001000000010101000001010001000001000001010100000101010000010101fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000101",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101010001010001000001000100010100010000010100000001000101010101000000000100010101010001010100000101000101000100000001010001000001000101000000010000000101000001010001000100010101010000010100000100010101000101010100000101010101010001010101010001010000010001000100000001010000010101000001000101010001000100000100000100000001010100000000000001010001000001000001010000000100000100000000010101000101010001000101010101010100010101010100000101010100010001000000000101000000000001010001010101000100010000010101000101000000fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401010000",
! 	"04fd000101000000000101000100000101010000010000000101010000010100010101010000000101010001010101000101000100000001010000000001010000010001010001000100010000010001000001010000010000010100010101000101010001010101000000010100010000000100000001000000010101000101010101000101000000000001000000000001010100010000010100000101010101000101000100010001000000000000000001000001010101010100000001000100000101000001010101010001010100000001000000010100000101000101010101000001000001000101010100010001010100010000010100010001010001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
! 	"04fd000101000000000101000100000101010000010000000101010000010100010101010000000101010001010101000101000100000001010000000001010000010001010001000100010000010001000001010000010000010100010101000101010001010101000000010100010000000100000001000000010101000101010101000101000000000001000000000001010100010000010100000101010101000101000100010001000000000000000001000001010101010100000001000100000101000001010101010001010100000001000000010100000101000101010101000001000001000101010100010001010100010000010100010001010001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
! 	"04fd000101000000000101000100000101010000010000000101010000010100010101010000000101010001010101000101000100000001010000000001010000010001010001000100010000010001000001010000010000010100010101000101010001010101000000010100010000000100000001000000010101000101010101000101000000000001000000000001010100010000010100000101010101000101000100010001000000000000000001000001010101010100000001000100000101000001010101010001010100000001000000010100000101000101010101000001000001000101010100010001010100010000010100010001010001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
! 	"04fd000101000000000101000100000101010000010000000101010000010100010101010000000101010001010101000101000100000001010000000001010000010001010001000100010000010001000001010000010000010100010101000101010001010101000000010100010000000100000001000000010101000101010101000101000000000001000000000001010100010000010100000101010101000101000100010001000000000000000001000001010101010100000001000100000101000001010101010001010100000001000000010100000101000101010101000001000001000101010100010001010100010000010100010001010001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
! 	"04fd000101000000000101000100000101010000010000000101010000010100010101010000000101010001010101000101000100000001010000000001010000010001010001000100010000010001000001010000010000010100010101000101010001010101000000010100010000000100000001000000010101000101010101000101000000000001000000000001010100010000010100000101010101000101000100010001000000000000000001000001010101010100000001000100000101000001010101010001010100000001000000010100000101000101010101000001000001000101010100010001010100010000010100010001010001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
! 	"04fd000101000000000101000100000101010000010000000101010000010100010101010000000101010001010101000101000100000001010000000001010000010001010001000100010000010001000001010000010000010100010101000101010001010101000000010100010000000100000001000000010101000101010101000101000000000001000000000001010100010000010100000101010101000101000100010001000000000000000001000001010101010100000001000100000101000001010101010001010100000001000000010100000101000101010101000001000001000101010100010001010100010000010100010001010001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
! 	"04fd000101000000000101000100000101010000010000000101010000010100010101010000000101010001010101000101000100000001010000000001010000010001010001000100010000010001000001010000010000010100010101000101010001010101000000010100010000000100000001000000010101000101010101000101000000000001000000000001010100010000010100000101010101000101000100010001000000000000000001000001010101010100000001000100000101000001010101010001010100000001000000010100000101000101010101000001000001000101010100010001010100010000010100010001010001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010100",
! 	"04fd000101000000000101000100000101010000010000000101010000010100010101010000000101010001010101000101000100000001010000000001010000010001010001000100010000010001000001010000010000010100010101000101010001010101000000010100010000000100000001000000010101000101010101000101000000000001000000000001010100010000010100000101010101000101000100010001000000000000000001000001010101010100000001000100000101000001010101010001010100000001000000010100000101000101010101000001000001000101010100010001010100010000010100010001010001000000fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010101",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000100010101010001010000010001000000010100000001010100000000010001000000000101010101000001000100010100010000010001010001010101010000010101000101010100010001000000010100000001010100010001000000000100000101010001000000000100010100000001010000010001000000000000010101000000010101010001000101010101010100010100000000010100010101000101000100010101000000010101000000010101000001000001000101010000000101010000000000000001010101010001010001010100010000000001010100000101000000000101010001010100000101000101010000010000000100fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000000",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000100010101010001010000010001000000010100000001010100000000010001000000000101010101000001000100010100010000010001010001010101010000010101000101010100010001000000010100000001010100010001000000000100000101010001000000000100010100000001010000010001000000000000010101000000010101010001000101010101010100010100000000010100010101000101000100010101000000010101000000010101000001000001000101010000000101010000000000000001010101010001010001010100010000000001010100000101000000000101010001010100000101000101010000010000000100fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000001",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000100010101010001010000010001000000010100000001010100000000010001000000000101010101000001000100010100010000010001010001010101010000010101000101010100010001000000010100000001010100010001000000000100000101010001000000000100010100000001010000010001000000000000010101000000010101010001000101010101010100010100000000010100010101000101000100010101000000010101000000010101000001000001000101010000000101010000000000000001010101010001010001010100010000000001010100000101000000000101010001010100000101000101010000010000000100fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000100",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000100010101010001010000010001000000010100000001010100000000010001000000000101010101000001000100010100010000010001010001010101010000010101000101010100010001000000010100000001010100010001000000000100000101010001000000000100010100000001010000010001000000000000010101000000010101010001000101010101010100010100000000010100010101000101000100010101000000010101000000010101000001000001000101010000000101010000000000000001010101010001010001010100010000000001010100000101000000000101010001010100000101000101010000010000000100fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000101",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000100000000000100010001000001010101000000000000000101010001010000000001000000010101010001010001010101010001010001000001000000010000010001000000010101000001000100010100010101010100000001000100000001010001010001000000000100010101000000000100000100010001010101010001000100000001010001010001000100010101010100010000010101010000010001010100000101010100010100000001010101010101000101000001010001000000000100000001010001010101000101000100000001010100010100010101000100010001010001010101010000000001000001000000010000000001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401010000",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000100000000000100010001000001010101000000000000000101010001010000000001000000010101010001010001010101010001010001000001000000010000010001000000010101000001000100010100010101010100000001000100000001010001010001000000000100010101000000000100000100010001010101010001000100000001010001010001000100010101010100010000010101010000010001010100000101010100010100000001010101010101000101000001010001000000000100000001010001010101000101000100000001010100010100010101000100010001010001010101010000000001000001000000010000000001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401010001",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000000",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000001",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000100",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400000101",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010000",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010001",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010100",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010400010101",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000000",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000001",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000100",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401000101",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401010000",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401010001",
! 	"04fd000100010001000100010001010000010000010100010100000100010101000101010000010000000001000100000001000101010001000001000101010000010001000001010100010100000000000001000101000101010100000001000101000101000000010101000000010000000100010001010000000100000000010001000100000000000100000000000001010000000001000100000101010000000000010100010100000001000000010101000100010101010001010100010001000001000000010100010101000101010000000101010000000101010101000000000100010101000001010001010100010001000001000100000001000000000101fd000101010001010100000000010100000101010100000100010001000001000000000101010001000000000101000000000001000100010001010001010000010101000101010000000001010001010000000000010001000101010001000100000101000000010101010000010000000000010101000100010001010100000101000101000100010001010101000000010001010000010001000100000101000100000101000000010101010101000101000000010101010101000101000100000101000101000100000000000001010100000001010101000001010101000101010000010001010100000000010000010000000001010100010001010001010000fd000101000000000101000100000100010001010000000001010100000101010100010001010000000101010101000101000000000000010001010101000001010100010101000100010001010001010001010001000101000101010101010001000001010000010100000101000000010100000101010000010000000101010001000101000001000000000000000000010101010000000000010100000000000100000101000101010101010000000101010101000001010101010001010000010100010000010101010101000000010101000101000000000101000000000000000000010100000000000100010100010001010100000001000001010101010001fd0001000100010001000101000101010000000001000100000100000101010100000000000001010001010100000101000001010000010001000101000100000100000001000001010000010000010000010101000001010001010001010000010000010101000001000000010000000000010100010001010100000001000001010100000100000100000100010101000001000101000101010101000001010000010101000001000000010101010001000001010101010001010100000101000100000000010001000000000001010100000101010101010000010000010100000000010000000001000101000000010000010001010000000001010100000001010401010100"
! 
  ]
--- 1,122 ----
  [
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101010001010001000001000100010100010000010100000001000101010101000000000100010101010001010100000101000101000100000001010001000001000101000000010000000101000001010001000100010101010000010100000100010101000101010100000101010101010001010101010001010000010001000100000001010000010101000001000101010001000100000100000100000001010100000000000001010001000001000001010000000100000100000000010101000101010001000101010101010100010101010100000101010100010001000000000101000000000001010001010101000100010000010101000101000000fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000100000100010000010101010000010001000001000001000100000001010101010001000001000100000001000001000100010100010101000100000001000000010001000100000001000001010000010001000001010101010101010100000100000101010000000101000100010100000100000101010001000100010101000000010001000001010000010001000101010101000001010101000001010101000001000100000101000101010000000000010001010000010101010000010000000100010000010101000000000001000001000001010001010101010001010001000101010001000000000101000000000100010100000000010000000000fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000100000100010000010101010000010001000001000001000100000001010101010001000001000100000001000001000100010100010101000100000001000000010001000100000001000001010000010001000001010101010101010100000100000101010000000101000100010100000100000101010001000100010101000000010001000001010000010001000101010101000001010101000001010101000001000100000101000101010000000000010001010000010101010000010000000100010000010101000000000001000001000001010001010101010001010001000101010001000000000101000000000100010100000000010000000000fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010000000000010100000001000100000100010100010000010001010000000101010101010101010100000000000000010101010100010001000101000001000001010001000101010100000000010000010001010001010101010100010001000100010001010001000100010101000000000000010001000100000100000000000001000100000101000100000101010101010000010100000001010100000001000000010100010100010000010100010100000001010001000100010000000101010000010101010000010101000100010000010001010101000001010101000100000001010000010101000001010101000100000001000100010000fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010000000000010100000001000100000100010100010000010001010000000101010101010101010100000000000000010101010100010001000101000001000001010001000101010100000000010000010001010001010101010100010001000100010001010001000100010101000000000000010001000100000100000000000001000100000101000100000101010101010000010100000001010100000001000000010100010100010000010100010100000001010001000100010000000101010000010101010000010101000100010000010001010101000001010101000100000001010000010101000001010101000100000001000100010000fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010000000000010100000001000100000100010100010000010001010000000101010101010101010100000000000000010101010100010001000101000001000001010001000101010100000000010000010001010001010101010100010001000100010001010001000100010101000000000000010001000100000100000000000001000100000101000100000101010101010000010100000001010100000001000000010100010100010000010100010100000001010001000100010000000101010000010101010000010101000100010000010001010101000001010101000100000001010000010101000001010101000100000001000100010000fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101010000000000010100000001000100000100010100010000010001010000000101010101010101010100000000000000010101010100010001000101000001000001010001000101010100000000010000010001010001010101010100010001000100010001010001000100010101000000000000010001000100000100000000000001000100000101000100000101010101010000010100000001010100000001000000010100010100010000010100010100000001010001000100010000000101010000010101010000010101000100010000010001010101000001010101000100000001010000010101000001010101000100000001000100010000fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101000001000100010101010100000001000101000001000001010100000001010100010001000001000101000001010100010001010000010000010100010101010001000000000001010101000101010001010000010001010101010101000001000001010101000101010100010001000000010001010100010000010001010101010001000000000000000101000101000101000101010001010000010101000101010100010100000001010001000000000101010000010000010101000000010100010101000101000001000001000001000000000100000000000001000001000100000100000000010100000100010000010101010000010001010101fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101000001000100010101010100000001000101000001000001010100000001010100010001000001000101000001010100010001010000010000010100010101010001000000000001010101000101010001010000010001010101010101000001000001010101000101010100010001000000010001010100010000010001010101010001000000000000000101000101000101000101010001010000010101000101010100010100000001010001000000000101010000010000010101000000010100010101000101000001000001000001000000000100000000000001000001000100000100000000010100000100010000010101010000010001010101fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101000001000100010101010100000001000101000001000001010100000001010100010001000001000101000001010100010001010000010000010100010101010001000000000001010101000101010001010000010001010101010101000001000001010101000101010100010001000000010001010100010000010001010101010001000000000000000101000101000101000101010001010000010101000101010100010100000001010001000000000101010000010000010101000000010100010101000101000001000001000001000000000100000000000001000001000100000100000000010100000100010000010101010000010001010101fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000101000001000100010101010100000001000101000001000001010100000001010100010001000001000101000001010100010001010000010000010100010101010001000000000001010101000101010001010000010001010101010101000001000001010101000101010100010001000000010001010100010000010001010101010001000000000000000101000101000101000101010001010000010101000101010100010100000001010001000000000101010000010000010101000000010100010101000101000001000001000001000000000100000000000001000001000100000100000000010100000100010000010101010000010001010101fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101010001010001000001000100010100010000010100000001000101010101000000000100010101010001010100000101000101000100000001010001000001000101000000010000000101000001010001000100010101010000010100000100010101000101010100000101010101010001010101010001010000010001000100000001010000010101000001000101010001000100000100000100000001010100000000000001010001000001000001010000000100000100000000010101000101010001000101010101010100010101010100000101010100010001000000000101000000000001010001010101000100010000010101000101000000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000100010100010000010001000001010100000000010100010000000001000000010100010101010101000000010001010000000100000001000001010101000101000101000001010000010101000000010001000100000101000100000100010100010101010101010001010000010001010100010100000101000001010001000101000000000100010000000000000000000001010000000000010000000001010000000000010000000001010101010100010101010001000101010000010000000000010000010100000100010100010001010100000101000001000001000101000101010001000000000100010000000100000000010001010100fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000100010100010000010001000001010100000000010100010000000001000000010100010101010101000000010001010000000100000001000001010101000101000101000001010000010101000000010001000100000101000100000100010100010101010101010001010000010001010100010100000101000001010001000101000000000100010000000000000000000001010000000000010000000001010000000000010000000001010101010100010101010001000101010000010000000000010000010100000100010100010001010100000101000001000001000101000101010001000000000100010000000100000000010001010100fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000100010100010000010001000001010100000000010100010000000001000000010100010101010101000000010001010000000100000001000001010101000101000101000001010000010101000000010001000100000101000100000100010100010101010101010001010000010001010100010100000101000001010001000101000000000100010000000000000000000001010000000000010000000001010000000000010000000001010101010100010101010001000101010000010000000000010000010100000100010100010001010100000101000001000001000101000101010001000000000100010000000100000000010001010100fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000100010100010000010001000001010100000000010100010000000001000000010100010101010101000000010001010000000100000001000001010101000101000101000001010000010101000000010001000100000101000100000100010100010101010101010001010000010001010100010100000101000001010001000101000000000100010000000000000000000001010000000000010000000001010000000000010000000001010101010100010101010001000101010000010000000000010000010100000100010100010001010100000101000001000001000101000101010001000000000100010000000100000000010001010100fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101010001010001000101000100000101000000010101000100010101010001000101000000000000010100000000010001010100000000010001010101010100010101010101010101010001000001000000010100000101010100010001010000010000010001010001010101000101000101010000010000010100000100000001010101000100010000000101010000000100000000000000000101010101010100000100010100000101000001000101000101000101010000010100010101010000010101010101010000010100000101000001010001000101010101000101010001010101000101010001000000010100000100010001010000010001fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101010001010001000101000100000101000000010101000100010101010001000101000000000000010100000000010001010100000000010001010101010100010101010101010101010001000001000000010100000101010100010001010000010000010001010001010101000101000101010000010000010100000100000001010101000100010000000101010000000100000000000000000101010101010100000100010100000101000001000101000101000101010000010100010101010000010101010101010000010100000101000001010001000101010101000101010001010101000101010001000000010100000100010001010000010001fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
! 	"04fd000100000101010101010000000001000100000100000000000000010100000000010100000000000001000000010000000000010001010000010001010001000000010101010101000101000100010101000101010000000101000000000001010000010101010000010101010000000101000001000001010100000101010100000001010000010100010001010001010100000100010001010101010101000001010001000001010101010101000100010101000101010100010001010100010101010101000001010100010100010001010001000000000001000100000001000001010001010100000001010001000101000001010101010100000100000100fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001000100010000000001010000000000000100010100010000000001010000000000010100000000010101000000000101010000010000000101000001000000010101000000000101010101000101000000010001000001000100000100010101000001010001000000000101000001000100000001000101000101010101010101000001010100000100010001010101010101000100010100010100010101010101000100000001000101000000010001010000010100000001000001000001010001000001000000010000010000010001000100010000000100000000010001010001010000010001000001000001010000010100010000000100010100010400010100",
! 	"04fd000101000001000101000001000001010101010100010101000001000000010000010101010001000000010000000001010101000001010101010000000100000001010101000100010000000000010000000001010101000000010101010000000101000001010001000001000000010001010000010101010101010000000100010000010101000000010101000000010001010001010101010101000000000101010100000000010100000000000000010000000101010100010000010001000101010101000000010000010001010100000001010101010001000100010000010100010100010100000001000101000001010100000101010101000000010000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
! 	"04fd000101000001000101000001000001010101010100010101000001000000010000010101010001000000010000000001010101000001010101010000000100000001010101000100010000000000010000000001010101000000010101010000000101000001010001000001000000010001010000010101010101010000000100010000010101000000010101000000010001010001010101010101000000000101010100000000010100000000000000010000000101010100010000010001000101010101000000010000010001010100000001010101010001000100010000010100010100010100000001000101000001010100000101010101000000010000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
! 	"04fd000101000001000101000001000001010101010100010101000001000000010000010101010001000000010000000001010101000001010101010000000100000001010101000100010000000000010000000001010101000000010101010000000101000001010001000001000000010001010000010101010101010000000100010000010101000000010101000000010001010001010101010101000000000101010100000000010100000000000000010000000101010100010000010001000101010101000000010000010001010100000001010101010001000100010000010100010100010100000001000101000001010100000101010101000000010000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
! 	"04fd000101000001000101000001000001010101010100010101000001000000010000010101010001000000010000000001010101000001010101010000000100000001010101000100010000000000010000000001010101000000010101010000000101000001010001000001000000010001010000010101010101010000000100010000010101000000010101000000010001010001010101010101000000000101010100000000010100000000000000010000000101010100010000010001000101010101000000010000010001010100000001010101010001000100010000010100010100010100000001000101000001010100000101010101000000010000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
! 	"04fd000101000001000101000001000001010101010100010101000001000000010000010101010001000000010000000001010101000001010101010000000100000001010101000100010000000000010000000001010101000000010101010000000101000001010001000001000000010001010000010101010101010000000100010000010101000000010101000000010001010001010101010101000000000101010100000000010100000000000000010000000101010100010000010001000101010101000000010000010001010100000001010101010001000100010000010100010100010100000001000101000001010100000101010101000000010000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
! 	"04fd000101000001000101000001000001010101010100010101000001000000010000010101010001000000010000000001010101000001010101010000000100000001010101000100010000000000010000000001010101000000010101010000000101000001010001000001000000010001010000010101010101010000000100010000010101000000010101000000010001010001010101010101000000000101010100000000010100000000000000010000000101010100010000010001000101010101000000010000010001010100000001010101010001000100010000010100010100010100000001000101000001010100000101010101000000010000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
! 	"04fd000101000001000101000001000001010101010100010101000001000000010000010101010001000000010000000001010101000001010101010000000100000001010101000100010000000000010000000001010101000000010101010000000101000001010001000001000000010001010000010101010101010000000100010000010101000000010101000000010001010001010101010101000000000101010100000000010100000000000000010000000101010100010000010001000101010101000000010000010001010100000001010101010001000100010000010100010100010100000001000101000001010100000101010101000000010000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001000100010000000001010000000000000100010100010000000001010000000000010100000000010101000000000101010000010000000101000001000000010101000000000101010101000101000000010001000001000100000100010101000001010001000000000101000001000100000001000101000101010101010101000001010100000100010001010101010101000100010100010100010101010101000100000001000101000000010001010000010100000001000001000001010001000001000000010000010000010001000100010000000100000000010001010001010000010001000001000001010000010100010000000100010100010400010100",
! 	"04fd000101000001000101000001000001010101010100010101000001000000010000010101010001000000010000000001010101000001010101010000000100000001010101000100010000000000010000000001010101000000010101010000000101000001010001000001000000010001010000010101010101010000000100010000010101000000010101000000010001010001010101010101000000000101010100000000010100000000000000010000000101010100010000010001000101010101000000010000010001010100000001010101010001000100010000010100010100010100000001000101000001010100000101010101000000010000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001010000000100010100000001000101000101000001010001000001010101010001010000000100000001000001000000000101010001000101010100000100000100000000010001000101000101010000000101000000000000010100010000000100000101000000000000010001010001000001000100000101000100000001000100000101000101010101000001000001000100000101000100000101000100000001000101010101000001000100000001000000010001010101000101000001000000010000010001010001010100000000000000010000010000010000010100000001010000000000000001010101000001010101000101000000010400010101",
! 	"04fd000100010001000100000101010000010101010001000001000101010001010101000000000000010100010101000001010001010000000001000001010000000101000001000101000100000000000001010001010001000100000001010101000100010101000000000100000101000001010100000101010101010101010101000101010101010000010001010000010001010100000001000101010001010001000001010001010001000101010100010100010100000001010000000000010100010101010000000100010101010100000001000001000101010001000101010000000000010001010000000101000100000100010100000100000001010001fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
! 	"04fd000100010001000100000101010000010101010001000001000101010001010101000000000000010100010101000001010001010000000001000001010000000101000001000101000100000000000001010001010001000100000001010101000100010101000000000100000101000001010100000101010101010101010101000101010101010000010001010000010001010100000001000101010001010001000001010001010001000101010100010100010100000001010000000000010100010101010000000100010101010100000001000001000101010001000101010000000000010001010000000101000100000100010100000100000001010001fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
! 	"04fd000100010001000100000101010000010101010001000001000101010001010101000000000000010100010101000001010001010000000001000001010000000101000001000101000100000000000001010001010001000100000001010101000100010101000000000100000101000001010100000101010101010101010101000101010101010000010001010000010001010100000001000101010001010001000001010001010001000101010100010100010100000001010000000000010100010101010000000100010101010100000001000001000101010001000101010000000000010001010000000101000100000100010100000100000001010001fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
! 	"04fd000100010001000100000101010000010101010001000001000101010001010101000000000000010100010101000001010001010000000001000001010000000101000001000101000100000000000001010001010001000100000001010101000100010101000000000100000101000001010100000101010101010101010101000101010101010000010001010000010001010100000001000101010001010001000001010001010001000101010100010100010100000001010000000000010100010101010000000100010101010100000001000001000101010001000101010000000000010001010000000101000100000100010100000100000001010001fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
! 	"04fd000100010001000100000101010000010101010001000001000101010001010101000000000000010100010101000001010001010000000001000001010000000101000001000101000100000000000001010001010001000100000001010101000100010101000000000100000101000001010100000101010101010101010101000101010101010000010001010000010001010100000001000101010001010001000001010001010001000101010100010100010100000001010000000000010100010101010000000100010101010100000001000001000101010001000101010000000000010001010000000101000100000100010100000100000001010001fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
! 	"04fd000100010001000100000101010000010101010001000001000101010001010101000000000000010100010101000001010001010000000001000001010000000101000001000101000100000000000001010001010001000100000001010101000100010101000000000100000101000001010100000101010101010101010101000101010101010000010001010000010001010100000001000101010001010001000001010001010001000101010100010100010100000001010000000000010100010101010000000100010101010100000001000001000101010001000101010000000000010001010000000101000100000100010100000100000001010001fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
! 	"04fd000100010001000100000101010000010101010001000001000101010001010101000000000000010100010101000001010001010000000001000001010000000101000001000101000100000000000001010001010001000100000001010101000100010101000000000100000101000001010100000101010101010101010101000101010101010000010001010000010001010100000001000101010001010001000001010001010001000101010100010100010100000001010000000000010100010101010000000100010101010100000001000001000101010001000101010000000000010001010000000101000100000100010100000100000001010001fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001000100010000000001010000000000000100010100010000000001010000000000010100000000010101000000000101010000010000000101000001000000010101000000000101010101000101000000010001000001000100000100010101000001010001000000000101000001000100000001000101000101010101010101000001010100000100010001010101010101000100010100010100010101010101000100000001000101000000010001010000010100000001000001000001010001000001000000010000010000010001000100010000000100000000010001010001010000010001000001000001010000010100010000000100010100010400010100",
! 	"04fd000100010001000100000101010000010101010001000001000101010001010101000000000000010100010101000001010001010000000001000001010000000101000001000101000100000000000001010001010001000100000001010101000100010101000000000100000101000001010100000101010101010101010101000101010101010000010001010000010001010100000001000101010001010001000001010001010001000101010100010100010100000001010000000000010100010101010000000100010101010100000001000001000101010001000101010000000000010001010000000101000100000100010100000100000001010001fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001010000000100010100000001000101000101000001010001000001010101010001010000000100000001000001000000000101010001000101010100000100000100000000010001000101000101010000000101000000000000010100010000000100000101000000000000010001010001000001000100000101000100000001000100000101000101010101000001000001000100000101000100000101000100000001000101010101000001000100000001000000010001010101000101000001000000010000010001010001010100000000000000010000010000010000010100000001010000000000000001010101000001010101000101000000010400010101",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101010001010001000001000100010100010000010100000001000101010101000000000100010101010001010100000101000101000100000001010001000001000101000000010000000101000001010001000100010101010000010100000100010101000101010100000101010101010001010101010001010000010001000100000001010000010101000001000101010001000100000100000100000001010100000000000001010001000001000001010000000100000100000000010101000101010001000101010101010100010101010100000101010100010001000000000101000000000001010001010101000100010000010101000101000000fd0001010100010100000000000001010101000101010100010100000100000100010000000000000000000001010000000101000100010001010100000101010100010100000000000000010100000101000100000101000001000000010000000100000001000101000101000000010100010000000000010000010100010101010001000101010001010101010001000000000000000001010100000101000100000001000101000100010100010001010101000100010101010000010001010100010000010101010001010001010101010000000001010101000100000001000001000101010100010101010101000100010101010100000000000001000101010401000000",
! 	"04fd000101000100010100010000010001010100010101010000000001010000000100000001010001010000000000000101000101000000000000000101010001000101010101000100010000010101000100010001010101000000000000000101000100010001010001000101010100000000000101010001010100000101010100010100010101000000000001010000010100000000010001010101000001010000000100000101010101000101010000000100000100000101010100010000010000010101010001000001010000010100010001000101010001000000010000000000000000010101010101010100010100000101010000000000000001010000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
! 	"04fd000101000100010100010000010001010100010101010000000001010000000100000001010001010000000000000101000101000000000000000101010001000101010101000100010000010101000100010001010101000000000000000101000100010001010001000101010100000000000101010001010100000101010100010100010101000000000001010000010100000000010001010101000001010000000100000101010101000101010000000100000100000101010100010000010000010101010001000001010000010100010001000101010001000000010000000000000000010101010101010100010100000101010000000000000001010000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
! 	"04fd000101000100010100010000010001010100010101010000000001010000000100000001010001010000000000000101000101000000000000000101010001000101010101000100010000010101000100010001010101000000000000000101000100010001010001000101010100000000000101010001010100000101010100010100010101000000000001010000010100000000010001010101000001010000000100000101010101000101010000000100000100000101010100010000010000010101010001000001010000010100010001000101010001000000010000000000000000010101010101010100010100000101010000000000000001010000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
! 	"04fd000101000100010100010000010001010100010101010000000001010000000100000001010001010000000000000101000101000000000000000101010001000101010101000100010000010101000100010001010101000000000000000101000100010001010001000101010100000000000101010001010100000101010100010100010101000000000001010000010100000000010001010101000001010000000100000101010101000101010000000100000100000101010100010000010000010101010001000001010000010100010001000101010001000000010000000000000000010101010101010100010100000101010000000000000001010000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
! 	"04fd000101000100010100010000010001010100010101010000000001010000000100000001010001010000000000000101000101000000000000000101010001000101010101000100010000010101000100010001010101000000000000000101000100010001010001000101010100000000000101010001010100000101010100010100010101000000000001010000010100000000010001010101000001010000000100000101010101000101010000000100000100000101010100010000010000010101010001000001010000010100010001000101010001000000010000000000000000010101010101010100010100000101010000000000000001010000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
! 	"04fd000101000100010100010000010001010100010101010000000001010000000100000001010001010000000000000101000101000000000000000101010001000101010101000100010000010101000100010001010101000000000000000101000100010001010001000101010100000000000101010001010100000101010100010100010101000000000001010000010100000000010001010101000001010000000100000101010101000101010000000100000100000101010100010000010000010101010001000001010000010100010001000101010001000000010000000000000000010101010101010100010100000101010000000000000001010000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
! 	"04fd000101000100010100010000010001010100010101010000000001010000000100000001010001010000000000000101000101000000000000000101010001000101010101000100010000010101000100010001010101000000000000000101000100010001010001000101010100000000000101010001010100000101010100010100010101000000000001010000010100000000010001010101000001010000000100000101010101000101010000000100000100000101010100010000010000010101010001000001010000010100010001000101010001000000010000000000000000010101010101010100010100000101010000000000000001010000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001000100010000000001010000000000000100010100010000000001010000000000010100000000010101000000000101010000010000000101000001000000010101000000000101010101000101000000010001000001000100000100010101000001010001000000000101000001000100000001000101000101010101010101000001010100000100010001010101010101000100010100010100010101010101000100000001000101000000010001010000010100000001000001000001010001000001000000010000010000010001000100010000000100000000010001010001010000010001000001000001010000010100010000000100010100010400010100",
! 	"04fd000101000100010100010000010001010100010101010000000001010000000100000001010001010000000000000101000101000000000000000101010001000101010101000100010000010101000100010001010101000000000000000101000100010001010001000101010100000000000101010001010100000101010100010100010101000000000001010000010100000000010001010101000001010000000100000101010101000101010000000100000100000101010100010000010000010101010001000001010000010100010001000101010001000000010000000000000000010101010101010100010100000101010000000000000001010000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001010000000100010100000001000101000101000001010001000001010101010001010000000100000001000001000000000101010001000101010100000100000100000000010001000101000101010000000101000000000000010100010000000100000101000000000000010001010001000001000100000101000100000001000100000101000101010101000001000001000100000101000100000101000100000001000101010101000001000100000001000000010001010101000101000001000000010000010001010001010100000000000000010000010000010000010100000001010000000000000001010101000001010101000101000000010400010101",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000100010101000100000100000000010100010100010000010001010101010100010100010100000000010100000001010101010101000001000001010001010101010000010000000001010101010001000101000000000001010000000001010000010001000100010101000101000100000100010101010000000100000100000100010100000100000001000001000001000101000100000101000101000101000101010000000000000100000100000100000101010000010000000001000001000001000001010101000000010100000101000101010001000101010100000100000001000100010100000101000001010000000100000101010000000001fd0001010100010100000000000001010101000101010100010100000100000100010000000000000000000001010000000101000100010001010100000101010100010100000000000000010100000101000100000101000001000000010000000100000001000101000101000000010100010000000000010000010100010101010001000101010001010101010001000000000000000001010100000101000100000001000101000100010100010001010101000100010101010000010001010100010000010101010001010001010101010000000001010101000100000001000001000101010100010101010101000100010101010100000000000001000101010401000000",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000100010101000100000100000000010100010100010000010001010101010100010100010100000000010100000001010101010101000001000001010001010101010000010000000001010101010001000101000000000001010000000001010000010001000100010101000101000100000100010101010000000100000100000100010100000100000001000001000001000101000100000101000101000101000101010000000000000100000100000100000101010000010000000001000001000001000001010101000000010100000101000101010001000101010100000100000001000100010100000101000001010000000100000101010000000001fd0001000101010000000001010101010101010101000101010001000100010101010101000100000000000101010100000101010001000101010001000100000000010100000001000101010100010001000000010101000000000000000001010101000000010100010001010000000001000101010000000100010101000000000000000101010100000101010100010001010100010001000001000101000101010100010101000000000100010001010101010100010000000101000101010001010000010000010101000101010000000001010000000100010001000100000000000101000000010100000101000101010000010001010000010001000001010401000001",
! 	"04fd000100010000010101000101000001000001000000000101010101000100000001000001000100010000000100010100000100000100000000010101000000010100010000010101000100000001000100010100000101000100010101010101000001010001000100010100010000000101000101000100000101010001010101010101010000010100010000000000010100010101000000000001000100000000000001010000000000010000000101010001000100000101010100010001000100010100000100000101000101010000000101010000000100010001000101000101010100010000000001010100010000000101000101010101010100000101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
! 	"04fd000100010000010101000101000001000001000000000101010101000100000001000001000100010000000100010100000100000100000000010101000000010100010000010101000100000001000100010100000101000100010101010101000001010001000100010100010000000101000101000100000101010001010101010101010000010100010000000000010100010101000000000001000100000000000001010000000000010000000101010001000100000101010100010001000100010100000100000101000101010000000101010000000100010001000101000101010100010000000001010100010000000101000101010101010100000101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
! 	"04fd000100010000010101000101000001000001000000000101010101000100000001000001000100010000000100010100000100000100000000010101000000010100010000010101000100000001000100010100000101000100010101010101000001010001000100010100010000000101000101000100000101010001010101010101010000010100010000000000010100010101000000000001000100000000000001010000000000010000000101010001000100000101010100010001000100010100000100000101000101010000000101010000000100010001000101000101010100010000000001010100010000000101000101010101010100000101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
! 	"04fd000100010000010101000101000001000001000000000101010101000100000001000001000100010000000100010100000100000100000000010101000000010100010000010101000100000001000100010100000101000100010101010101000001010001000100010100010000000101000101000100000101010001010101010101010000010100010000000000010100010101000000000001000100000000000001010000000000010000000101010001000100000101010100010001000100010100000100000101000101010000000101010000000100010001000101000101010100010000000001010100010000000101000101010101010100000101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
! 	"04fd000100010000010101000101000001000001000000000101010101000100000001000001000100010000000100010100000100000100000000010101000000010100010000010101000100000001000100010100000101000100010101010101000001010001000100010100010000000101000101000100000101010001010101010101010000010100010000000000010100010101000000000001000100000000000001010000000000010000000101010001000100000101010100010001000100010100000100000101000101010000000101010000000100010001000101000101010100010000000001010100010000000101000101010101010100000101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
! 	"04fd000100010000010101000101000001000001000000000101010101000100000001000001000100010000000100010100000100000100000000010101000000010100010000010101000100000001000100010100000101000100010101010101000001010001000100010100010000000101000101000100000101010001010101010101010000010100010000000000010100010101000000000001000100000000000001010000000000010000000101010001000100000101010100010001000100010100000100000101000101010000000101010000000100010001000101000101010100010000000001010100010000000101000101010101010100000101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
! 	"04fd000100010000010101000101000001000001000000000101010101000100000001000001000100010000000100010100000100000100000000010101000000010100010000010101000100000001000100010100000101000100010101010101000001010001000100010100010000000101000101000100000101010001010101010101010000010100010000000000010100010101000000000001000100000000000001010000000000010000000101010001000100000101010100010001000100010100000100000101000101010000000101010000000100010001000101000101010100010000000001010100010000000101000101010101010100000101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001000100010000000001010000000000000100010100010000000001010000000000010100000000010101000000000101010000010000000101000001000000010101000000000101010101000101000000010001000001000100000100010101000001010001000000000101000001000100000001000101000101010101010101000001010100000100010001010101010101000100010100010100010101010101000100000001000101000000010001010000010100000001000001000001010001000001000000010000010000010001000100010000000100000000010001010001010000010001000001000001010000010100010000000100010100010400010100",
! 	"04fd000100010000010101000101000001000001000000000101010101000100000001000001000100010000000100010100000100000100000000010101000000010100010000010101000100000001000100010100000101000100010101010101000001010001000100010100010000000101000101000100000101010001010101010101010000010100010000000000010100010101000000000001000100000000000001010000000000010000000101010001000100000101010100010001000100010100000100000101000101010000000101010000000100010001000101000101010100010000000001010100010000000101000101010101010100000101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001010000000100010100000001000101000101000001010001000001010101010001010000000100000001000001000000000101010001000101010100000100000100000000010001000101000101010000000101000000000000010100010000000100000101000000000000010001010001000001000100000101000100000001000100000101000101010101000001000001000100000101000100000101000100000001000101010101000001000100000001000000010001010101000101000001000000010000010001010001010100000000000000010000010000010000010100000001010000000000000001010101000001010101000101000000010400010101",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001010100010100000000000001010101000101010100010100000100000100010000000000000000000001010000000101000100010001010100000101010100010100000000000000010100000101000100000101000001000000010000000100000001000101000101000000010100010000000000010000010100010101010001000101010001010101010001000000000000000001010100000101000100000001000101000100010100010001010101000100010101010000010001010100010000010101010001010001010101010000000001010101000100000001000001000101010100010101010101000100010101010100000000000001000101010401000000",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001000101010000000001010101010101010101000101010001000100010101010101000100000000000101010100000101010001000101010001000100000000010100000001000101010100010001000000010101000000000000000001010101000000010100010001010000000001000101010000000100010101000000000000000101010100000101010100010001010100010001000001000101000101010100010101000000000100010001010101010100010000000101000101010001010000010000010101000101010000000001010000000100010001000100000000000101000000010100000101000101010000010001010000010001000001010401000001",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010001010100000001010100010100000101000101010101000100010001010001000001000001000001000101000001010000010101010000010101010001000000010101010000010000010000010101000100010000010101010000010100010101000100000100010100010001000001000000010100010001010101010100010000010001000101000001000100000000000101000100010001000100010100000000010000000100000001000001000001010001000001010100000101010101010000010001000000000101010101010101000001010001000100000100000100000100000000000000010001000001000101010001000001010000fd000101010101010101000000000101000001000000000101000100010001010101000000010101000101010101000100010001010101000000010000000001000000000100000101000000000001010001010000000101010000010001010001010000010100000001000000000101010001000001000001010000000100010100000000000001010000010100010100000001010000010100010000000100010100000100000001000100010000010101000101010100000000000000010100000001000000000100000001000000000001010001000100010101010101000000000001000101010001000001010001000100010100010001000001000000000001fd0001000000000001000001010100010000010001010000000101010001000100010100010101000001010000000101010100000100000100010001000100010001000100010001000100010101010100000100000101000000010101000000000101010100000000000000000101010000010101010001000100010000000101000001000001010100010001010101000001000000000001000000000001000101000000010101000001000001010001010001010100000000010100000101000100010000000100000100000100010000010001000000000101000100000101000101000100010000010100010001010001010101000100010101000100000001010401000100",
! 	"04fd000101000100010101010000010001010100000001010000010101000101000001000100000001010100010000000101010101000001010101010101010101000101010100010000000000000001000001000101010000000100010001010100000100010101000000000001010001010101000100010100000001010000000100010001000101010100010000000001010000010100010000010000000100010001000001010100010101000000000100000101000001000101000101000101000100010000000101010000000001000101010000010101010001000101010000010100010001010101000001000100000100010001000101010101000100010101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
! 	"04fd000101000100010101010000010001010100000001010000010101000101000001000100000001010100010000000101010101000001010101010101010101000101010100010000000000000001000001000101010000000100010001010100000100010101000000000001010001010101000100010100000001010000000100010001000101010100010000000001010000010100010000010000000100010001000001010100010101000000000100000101000001000101000101000101000100010000000101010000000001000101010000010101010001000101010000010100010001010101000001000100000100010001000101010101000100010101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
! 	"04fd000101000100010101010000010001010100000001010000010101000101000001000100000001010100010000000101010101000001010101010101010101000101010100010000000000000001000001000101010000000100010001010100000100010101000000000001010001010101000100010100000001010000000100010001000101010100010000000001010000010100010000010000000100010001000001010100010101000000000100000101000001000101000101000101000100010000000101010000000001000101010000010101010001000101010000010100010001010101000001000100000100010001000101010101000100010101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
! 	"04fd000101000100010101010000010001010100000001010000010101000101000001000100000001010100010000000101010101000001010101010101010101000101010100010000000000000001000001000101010000000100010001010100000100010101000000000001010001010101000100010100000001010000000100010001000101010100010000000001010000010100010000010000000100010001000001010100010101000000000100000101000001000101000101000101000100010000000101010000000001000101010000010101010001000101010000010100010001010101000001000100000100010001000101010101000100010101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
! 	"04fd000101000100010101010000010001010100000001010000010101000101000001000100000001010100010000000101010101000001010101010101010101000101010100010000000000000001000001000101010000000100010001010100000100010101000000000001010001010101000100010100000001010000000100010001000101010100010000000001010000010100010000010000000100010001000001010100010101000000000100000101000001000101000101000101000100010000000101010000000001000101010000010101010001000101010000010100010001010101000001000100000100010001000101010101000100010101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
! 	"04fd000101000100010101010000010001010100000001010000010101000101000001000100000001010100010000000101010101000001010101010101010101000101010100010000000000000001000001000101010000000100010001010100000100010101000000000001010001010101000100010100000001010000000100010001000101010100010000000001010000010100010000010000000100010001000001010100010101000000000100000101000001000101000101000101000100010000000101010000000001000101010000010101010001000101010000010100010001010101000001000100000100010001000101010101000100010101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
! 	"04fd000101000100010101010000010001010100000001010000010101000101000001000100000001010100010000000101010101000001010101010101010101000101010100010000000000000001000001000101010000000100010001010100000100010101000000000001010001010101000100010100000001010000000100010001000101010100010000000001010000010100010000010000000100010001000001010100010101000000000100000101000001000101000101000101000100010000000101010000000001000101010000010101010001000101010000010100010001010101000001000100000100010001000101010101000100010101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001000100010000000001010000000000000100010100010000000001010000000000010100000000010101000000000101010000010000000101000001000000010101000000000101010101000101000000010001000001000100000100010101000001010001000000000101000001000100000001000101000101010101010101000001010100000100010001010101010101000100010100010100010101010101000100000001000101000000010001010000010100000001000001000001010001000001000000010000010000010001000100010000000100000000010001010001010000010001000001000001010000010100010000000100010100010400010100",
! 	"04fd000101000100010101010000010001010100000001010000010101000101000001000100000001010100010000000101010101000001010101010101010101000101010100010000000000000001000001000101010000000100010001010100000100010101000000000001010001010101000100010100000001010000000100010001000101010100010000000001010000010100010000010000000100010001000001010100010101000000000100000101000001000101000101000101000100010000000101010000000001000101010000010101010001000101010000010100010001010101000001000100000100010001000101010101000100010101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001010000000100010100000001000101000101000001010001000001010101010001010000000100000001000001000000000101010001000101010100000100000100000000010001000101000101010000000101000000000000010100010000000100000101000000000000010001010001000001000100000101000100000001000100000101000101010101000001000001000100000101000100000101000100000001000101010101000001000100000001000000010001010101000101000001000000010000010001010001010100000000000000010000010000010000010100000001010000000000000001010101000001010101000101000000010400010101",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100000100010000000001000101000100010001010100010001000101010000010100010101010101010001000101010100000100000000010101010000010101010100010000000000010100000100010101010000010100010100000101010001000000000001010000010000000001010100000000000000010100000000010100000100000000010001010000010101010101010001000100010001010100000101010000000101000101010100000101010100010101000100000001000000010100000101000001000100010000000001010101000001010100010001000000010100000001000001010001000100010000010101010101000101000000fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001010100010100000000000001010101000101010100010100000100000100010000000000000000000001010000000101000100010001010100000101010100010100000000000000010100000101000100000101000001000000010000000100000001000101000101000000010100010000000000010000010100010101010001000101010001010101010001000000000000000001010100000101000100000001000101000100010100010001010101000100010101010000010001010100010000010101010001010001010101010000000001010101000100000001000001000101010100010101010101000100010101010100000000000001000101010401000000",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100000100010000000001000101000100010001010100010001000101010000010100010101010101010001000101010100000100000000010101010000010101010100010000000000010100000100010101010000010100010100000101010001000000000001010000010000000001010100000000000000010100000000010100000100000000010001010000010101010101010001000100010001010100000101010000000101000101010100000101010100010101000100000001000000010100000101000001000100010000000001010101000001010100010001000000010100000001000001010001000100010000010101010101000101000000fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001000101010000000001010101010101010101000101010001000100010101010101000100000000000101010100000101010001000101010001000100000000010100000001000101010100010001000000010101000000000000000001010101000000010100010001010000000001000101010000000100010101000000000000000101010100000101010100010001010100010001000001000101000101010100010101000000000100010001010101010100010000000101000101010001010000010000010101000101010000000001010000000100010001000100000000000101000000010100000101000101010000010001010000010001000001010401000001",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100000100010000000001000101000100010001010100010001000101010000010100010101010101010001000101010100000100000000010101010000010101010100010000000000010100000100010101010000010100010100000101010001000000000001010000010000000001010100000000000000010100000000010100000100000000010001010000010101010101010001000100010001010100000101010000000101000101010100000101010100010101000100000001000000010100000101000001000100010000000001010101000001010100010001000000010100000001000001010001000100010000010101010101000101000000fd000101010101010101000000000101000001000000000101000100010001010101000000010101000101010101000100010001010101000000010000000001000000000100000101000000000001010001010000000101010000010001010001010000010100000001000000000101010001000001000001010000000100010100000000000001010000010100010100000001010000010100010000000100010100000100000001000100010000010101000101010100000000000000010100000001000000000100000001000000000001010001000100010101010101000000000001000101010001000001010001000100010100010001000001000000000001fd0001000000000001000001010100010000010001010000000101010001000100010100010101000001010000000101010100000100000100010001000100010001000100010001000100010101010100000100000101000000010101000000000101010100000000000000000101010000010101010001000100010000000101000001000001010100010001010101000001000000000001000000000001000101000000010101000001000001010001010001010100000000010100000101000100010000000100000100000100010000010001000000000101000100000101000101000100010000010100010001010001010101000100010101000100000001010401000100",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100000100010000000001000101000100010001010100010001000101010000010100010101010101010001000101010100000100000000010101010000010101010100010000000000010100000100010101010000010100010100000101010001000000000001010000010000000001010100000000000000010100000000010100000100000000010001010000010101010101010001000100010001010100000101010000000101000101010100000101010100010101000100000001000000010100000101000001000100010000000001010101000001010100010001000000010100000001000001010001000100010000010101010101000101000000fd000101010101010101000000000101000001000000000101000100010001010101000000010101000101010101000100010001010101000000010000000001000000000100000101000000000001010001010000000101010000010001010001010000010100000001000000000101010001000001000001010000000100010100000000000001010000010100010100000001010000010100010000000100010100000100000001000100010000010101000101010100000000000000010100000001000000000100000001000000000001010001000100010101010101000000000001000101010001000001010001000100010100010001000001000000000001fd0001010000000100010101000001000001000100010000010000010101000101000000010100010000010001000000000100000101010000000101010101010101000000000101000101000000010001010001010000010100000000000001010100010001000100000001000100000100000000010100000101010001010101010100000001010000010101010000010101010000000101010001000101000100010101000001000100000101010000010100000101010100000101000000000001000001010001010101010101000001010100000001010100000100010101010001010000010001010000000000010001000101010100000001000001010001010401000101",
! 	"04fd000100000101010001000000010100000101010000000101000101000000010001010000000000010000000001010101000001010000010101000000000000000001010001000101010101010000000001000100000001010001000000010001000001000101000000000101000101000101000101010000000100000000010100010000000101010000010001010001010000010001010101010100000000010001010000010100000100010001010100010001000000000101010101000001000101010000010101000101000101000101000001000101000001010000010101000100000000000100000001010101010100010001000100000000000001010001fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
! 	"04fd000100000101010001000000010100000101010000000101000101000000010001010000000000010000000001010101000001010000010101000000000000000001010001000101010101010000000001000100000001010001000000010001000001000101000000000101000101000101000101010000000100000000010100010000000101010000010001010001010000010001010101010100000000010001010000010100000100010001010100010001000000000101010101000001000101010000010101000101000101000101000001000101000001010000010101000100000000000100000001010101010100010001000100000000000001010001fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
! 	"04fd000100000101010001000000010100000101010000000101000101000000010001010000000000010000000001010101000001010000010101000000000000000001010001000101010101010000000001000100000001010001000000010001000001000101000000000101000101000101000101010000000100000000010100010000000101010000010001010001010000010001010101010100000000010001010000010100000100010001010100010001000000000101010101000001000101010000010101000101000101000101000001000101000001010000010101000100000000000100000001010101010100010001000100000000000001010001fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
! 	"04fd000100000101010001000000010100000101010000000101000101000000010001010000000000010000000001010101000001010000010101000000000000000001010001000101010101010000000001000100000001010001000000010001000001000101000000000101000101000101000101010000000100000000010100010000000101010000010001010001010000010001010101010100000000010001010000010100000100010001010100010001000000000101010101000001000101010000010101000101000101000101000001000101000001010000010101000100000000000100000001010101010100010001000100000000000001010001fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
! 	"04fd000100000101010001000000010100000101010000000101000101000000010001010000000000010000000001010101000001010000010101000000000000000001010001000101010101010000000001000100000001010001000000010001000001000101000000000101000101000101000101010000000100000000010100010000000101010000010001010001010000010001010101010100000000010001010000010100000100010001010100010001000000000101010101000001000101010000010101000101000101000101000001000101000001010000010101000100000000000100000001010101010100010001000100000000000001010001fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
! 	"04fd000100000101010001000000010100000101010000000101000101000000010001010000000000010000000001010101000001010000010101000000000000000001010001000101010101010000000001000100000001010001000000010001000001000101000000000101000101000101000101010000000100000000010100010000000101010000010001010001010000010001010101010100000000010001010000010100000100010001010100010001000000000101010101000001000101010000010101000101000101000101000001000101000001010000010101000100000000000100000001010101010100010001000100000000000001010001fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
! 	"04fd000100000101010001000000010100000101010000000101000101000000010001010000000000010000000001010101000001010000010101000000000000000001010001000101010101010000000001000100000001010001000000010001000001000101000000000101000101000101000101010000000100000000010100010000000101010000010001010001010000010001010101010100000000010001010000010100000100010001010100010001000000000101010101000001000101010000010101000101000101000101000001000101000001010000010101000100000000000100000001010101010100010001000100000000000001010001fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001000100010000000001010000000000000100010100010000000001010000000000010100000000010101000000000101010000010000000101000001000000010101000000000101010101000101000000010001000001000100000100010101000001010001000000000101000001000100000001000101000101010101010101000001010100000100010001010101010101000100010100010100010101010101000100000001000101000000010001010000010100000001000001000001010001000001000000010000010000010001000100010000000100000000010001010001010000010001000001000001010000010100010000000100010100010400010100",
! 	"04fd000100000101010001000000010100000101010000000101000101000000010001010000000000010000000001010101000001010000010101000000000000000001010001000101010101010000000001000100000001010001000000010001000001000101000000000101000101000101000101010000000100000000010100010000000101010000010001010001010000010001010101010100000000010001010000010100000100010001010100010001000000000101010101000001000101010000010101000101000101000101000001000101000001010000010101000100000000000100000001010101010100010001000100000000000001010001fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001010000000100010100000001000101000101000001010001000001010101010001010000000100000001000001000000000101010001000101010100000100000100000000010001000101000101010000000101000000000000010100010000000100000101000000000000010001010001000001000100000101000100000001000100000101000101010101000001000001000100000101000100000101000100000001000101010101000001000100000001000000010001010101000101000001000000010000010001010001010100000000000000010000010000010000010100000001010000000000000001010101000001010101000101000000010400010101",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101000100000101010000000101000101000101010001010000000001010101010001010101000001010000000101010000000000000001010100000001010101000000010101010101010001010000000001010100010000010101010001000000010100010000010000000101000101010000000101000100000000000000010000010100010000010101010001000101010100010101010100000101000000000000010001010001010100010101010101010000010101010001010101010000000000010001010100000100010101000101010100010001000000010001000001010000010001010001000000000101000100010100010100010100010000fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001010100010100000000000001010101000101010100010100000100000100010000000000000000000001010000000101000100010001010100000101010100010100000000000000010100000101000100000101000001000000010000000100000001000101000101000000010100010000000000010000010100010101010001000101010001010101010001000000000000000001010100000101000100000001000101000100010100010001010101000100010101010000010001010100010000010101010001010001010101010000000001010101000100000001000001000101010100010101010101000100010101010100000000000001000101010401000000",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101000100000101010000000101000101000101010001010000000001010101010001010101000001010000000101010000000000000001010100000001010101000000010101010101010001010000000001010100010000010101010001000000010100010000010000000101000101010000000101000100000000000000010000010100010000010101010001000101010100010101010100000101000000000000010001010001010100010101010101010000010101010001010101010000000000010001010100000100010101000101010100010001000000010001000001010000010001010001000000000101000100010100010100010100010000fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001000101010000000001010101010101010101000101010001000100010101010101000100000000000101010100000101010001000101010001000100000000010100000001000101010100010001000000010101000000000000000001010101000000010100010001010000000001000101010000000100010101000000000000000101010100000101010100010001010100010001000001000101000101010100010101000000000100010001010101010100010000000101000101010001010000010000010101000101010000000001010000000100010001000100000000000101000000010100000101000101010000010001010000010001000001010401000001",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101000100000101010000000101000101000101010001010000000001010101010001010101000001010000000101010000000000000001010100000001010101000000010101010101010001010000000001010100010000010101010001000000010100010000010000000101000101010000000101000100000000000000010000010100010000010101010001000101010100010101010100000101000000000000010001010001010100010101010101010000010101010001010101010000000000010001010100000100010101000101010100010001000000010001000001010000010001010001000000000101000100010100010100010100010000fd000101010101010101000000000101000001000000000101000100010001010101000000010101000101010101000100010001010101000000010000000001000000000100000101000000000001010001010000000101010000010001010001010000010100000001000000000101010001000001000001010000000100010100000000000001010000010100010100000001010000010100010000000100010100000100000001000100010000010101000101010100000000000000010100000001000000000100000001000000000001010001000100010101010101000000000001000101010001000001010001000100010100010001000001000000000001fd0001000000000001000001010100010000010001010000000101010001000100010100010101000001010000000101010100000100000100010001000100010001000100010001000100010101010100000100000101000000010101000000000101010100000000000000000101010000010101010001000100010000000101000001000001010100010001010101000001000000000001000000000001000101000000010101000001000001010001010001010100000000010100000101000100010000000100000100000100010000010001000000000101000100000101000101000100010000010100010001010001010101000100010101000100000001010401000100",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101000100000101010000000101000101000101010001010000000001010101010001010101000001010000000101010000000000000001010100000001010101000000010101010101010001010000000001010100010000010101010001000000010100010000010000000101000101010000000101000100000000000000010000010100010000010101010001000101010100010101010100000101000000000000010001010001010100010101010101010000010101010001010101010000000000010001010100000100010101000101010100010001000000010001000001010000010001010001000000000101000100010100010100010100010000fd000101010101010101000000000101000001000000000101000100010001010101000000010101000101010101000100010001010101000000010000000001000000000100000101000000000001010001010000000101010000010001010001010000010100000001000000000101010001000001000001010000000100010100000000000001010000010100010100000001010000010100010000000100010100000100000001000100010000010101000101010100000000000000010100000001000000000100000001000000000001010001000100010101010101000000000001000101010001000001010001000100010100010001000001000000000001fd0001010000000100010101000001000001000100010000010000010101000101000000010100010000010001000000000100000101010000000101010101010101000000000101000101000000010001010001010000010100000000000001010100010001000100000001000100000100000000010100000101010001010101010100000001010000010101010000010101010000000101010001000101000100010101000001000100000101010000010100000101010100000101000000000001000001010001010101010101000001010100000001010100000100010101010001010000010001010000000000010001000101010100000001000001010001010401000101",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010100010100000001000001000101000000010001000000010001010000000100010000000101010100000101010101000000000000000001000100000001010000010100000101000000000000000000010101000100000000010000010000000101000000010101010001000001000000000001010001000101010001000000000001000001000100010101010101000001000101000100000101000100000100010001010100010101000100010101000001000100000100000100010001010000000101010000010100000101000100000100000000010000000101010000010101010100000101010000000001010101000101000000010000010001fd000101010001010001000001000100010100010000010100000001000101010101000000000100010101010001010100000101000101000100000001010001000001000101000000010000000101000001010001000100010101010000010100000100010101000101010100000101010101010001010101010001010000010001000100000001010000010101000001000101010001000100000100000100000001010100000000000001010001000001000001010000000100000100000000010101000101010001000101010101010100010101010100000101010100010001000000000101000000000001010001010101000100010000010101000101000000fd0001000000010100000001000000000000000100000100010100000101010101010101010000010000000000010000000100000101000000010101000000000000000100010001000000000100000100000101010000000101000000010100010001000001010000010001000101010001010100010000010100000101010100000101000001000000000101010100010101010100010000000001000100000000010000000001010100010000010101000001000001000000000100010101000000000100000100000001010101000100010100000001010001000101000000010100010000010000010001000100010101010100000001010001010100010000010401010000",
! 	"04fd000100000101010000010001000101000101000101010100010101010000010000000001000100000100000101010101010100000000000100010101000001010100000101000000000101000000000100010101010000000100010001000001000001010100010100010101000001000001010001010001010000000001010101010001010100000100010101010100010001000000000101000001000000000001000001000101010001010001010100010101010001000101010100010001000000000000000001010001010101000001000100000001010001000101000100000101010100010001000100010101000000010001000101000000000101000000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
! 	"04fd000100000101010000010001000101000101000101010100010101010000010000000001000100000100000101010101010100000000000100010101000001010100000101000000000101000000000100010101010000000100010001000001000001010100010100010101000001000001010001010001010000000001010101010001010100000100010101010100010001000000000101000001000000000001000001000101010001010001010100010101010001000101010100010001000000000000000001010001010101000001000100000001010001000101000100000101010100010001000100010101000000010001000101000000000101000000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
! 	"04fd000100000101010000010001000101000101000101010100010101010000010000000001000100000100000101010101010100000000000100010101000001010100000101000000000101000000000100010101010000000100010001000001000001010100010100010101000001000001010001010001010000000001010101010001010100000100010101010100010001000000000101000001000000000001000001000101010001010001010100010101010001000101010100010001000000000000000001010001010101000001000100000001010001000101000100000101010100010001000100010101000000010001000101000000000101000000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
! 	"04fd000100000101010000010001000101000101000101010100010101010000010000000001000100000100000101010101010100000000000100010101000001010100000101000000000101000000000100010101010000000100010001000001000001010100010100010101000001000001010001010001010000000001010101010001010100000100010101010100010001000000000101000001000000000001000001000101010001010001010100010101010001000101010100010001000000000000000001010001010101000001000100000001010001000101000100000101010100010001000100010101000000010001000101000000000101000000fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
! 	"04fd000100000101010000010001000101000101000101010100010101010000010000000001000100000100000101010101010100000000000100010101000001010100000101000000000101000000000100010101010000000100010001000001000001010100010100010101000001000001010001010001010000000001010101010001010100000100010101010100010001000000000101000001000000000001000001000101010001010001010100010101010001000101010100010001000000000000000001010001010101000001000100000001010001000101000100000101010100010001000100010101000000010001000101000000000101000000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
! 	"04fd000100000101010000010001000101000101000101010100010101010000010000000001000100000100000101010101010100000000000100010101000001010100000101000000000101000000000100010101010000000100010001000001000001010100010100010101000001000001010001010001010000000001010101010001010100000100010101010100010001000000000101000001000000000001000001000101010001010001010100010101010001000101010100010001000000000000000001010001010101000001000100000001010001000101000100000101010100010001000100010101000000010001000101000000000101000000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
! 	"04fd000100000101010000010001000101000101000101010100010101010000010000000001000100000100000101010101010100000000000100010101000001010100000101000000000101000000000100010101010000000100010001000001000001010100010100010101000001000001010001010001010000000001010101010001010100000100010101010100010001000000000101000001000000000001000001000101010001010001010100010101010001000101010100010001000000000000000001010001010101000001000100000001010001000101000100000101010100010001000100010101000000010001000101000000000101000000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001000100010000000001010000000000000100010100010000000001010000000000010100000000010101000000000101010000010000000101000001000000010101000000000101010101000101000000010001000001000100000100010101000001010001000000000101000001000100000001000101000101010101010101000001010100000100010001010101010101000100010100010100010101010101000100000001000101000000010001010000010100000001000001000001010001000001000000010000010000010001000100010000000100000000010001010001010000010001000001000001010000010100010000000100010100010400010100",
! 	"04fd000100000101010000010001000101000101000101010100010101010000010000000001000100000100000101010101010100000000000100010101000001010100000101000000000101000000000100010101010000000100010001000001000001010100010100010101000001000001010001010001010000000001010101010001010100000100010101010100010001000000000101000001000000000001000001000101010001010001010100010101010001000101010100010001000000000000000001010001010101000001000100000001010001000101000100000101010100010001000100010101000000010001000101000000000101000000fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001010000000100010100000001000101000101000001010001000001010101010001010000000100000001000001000000000101010001000101010100000100000100000000010001000101000101010000000101000000000000010100010000000100000101000000000000010001010001000001000100000101000100000001000100000101000101010101000001000001000100000101000100000101000100000001000101010101000001000100000001000000010001010101000101000001000000010000010001010001010100000000000000010000010000010000010100000001010000000000000001010101000001010101000101000000010400010101",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100010101000101000100000001000100000100010100000100010000000001000100010000000000010100000101000100010001000101010100010101000000010000000001010100010001010000010001000101000001010101010001000000000000000000000000000100000101010100000100000101000000000001000001010100000001000001000000000101010100010100010000010100010001010100000000000000010101000101000001000101000001000101000000000001000100010101000001010101010100000101010000010101010000010000000101010001010100010101000001010001010001000100000001000100010000fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001010100010100000000000001010101000101010100010100000100000100010000000000000000000001010000000101000100010001010100000101010100010100000000000000010100000101000100000101000001000000010000000100000001000101000101000000010100010000000000010000010100010101010001000101010001010101010001000000000000000001010100000101000100000001000101000100010100010001010101000100010101010000010001010100010000010101010001010001010101010000000001010101000100000001000001000101010100010101010101000100010101010100000000000001000101010401000000",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100010101000101000100000001000100000100010100000100010000000001000100010000000000010100000101000100010001000101010100010101000000010000000001010100010001010000010001000101000001010101010001000000000000000000000000000100000101010100000100000101000000000001000001010100000001000001000000000101010100010100010000010100010001010100000000000000010101000101000001000101000001000101000000000001000100010101000001010101010100000101010000010101010000010000000101010001010100010101000001010001010001000100000001000100010000fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001000101010000000001010101010101010101000101010001000100010101010101000100000000000101010100000101010001000101010001000100000000010100000001000101010100010001000000010101000000000000000001010101000000010100010001010000000001000101010000000100010101000000000000000101010100000101010100010001010100010001000001000101000101010100010101000000000100010001010101010100010000000101000101010001010000010000010101000101010000000001010000000100010001000100000000000101000000010100000101000101010000010001010000010001000001010401000001",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100010101000101000100000001000100000100010100000100010000000001000100010000000000010100000101000100010001000101010100010101000000010000000001010100010001010000010001000101000001010101010001000000000000000000000000000100000101010100000100000101000000000001000001010100000001000001000000000101010100010100010000010100010001010100000000000000010101000101000001000101000001000101000000000001000100010101000001010101010100000101010000010101010000010000000101010001010100010101000001010001010001000100000001000100010000fd000101010101010101000000000101000001000000000101000100010001010101000000010101000101010101000100010001010101000000010000000001000000000100000101000000000001010001010000000101010000010001010001010000010100000001000000000101010001000001000001010000000100010100000000000001010000010100010100000001010000010100010000000100010100000100000001000100010000010101000101010100000000000000010100000001000000000100000001000000000001010001000100010101010101000000000001000101010001000001010001000100010100010001000001000000000001fd0001000000000001000001010100010000010001010000000101010001000100010100010101000001010000000101010100000100000100010001000100010001000100010001000100010101010100000100000101000000010101000000000101010100000000000000000101010000010101010001000100010000000101000001000001010100010001010101000001000000000001000000000001000101000000010101000001000001010001010001010100000000010100000101000100010000000100000100000100010000010001000000000101000100000101000101000100010000010100010001010001010101000100010101000100000001010401000100",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100010101000101000100000001000100000100010100000100010000000001000100010000000000010100000101000100010001000101010100010101000000010000000001010100010001010000010001000101000001010101010001000000000000000000000000000100000101010100000100000101000000000001000001010100000001000001000000000101010100010100010000010100010001010100000000000000010101000101000001000101000001000101000000000001000100010101000001010101010100000101010000010101010000010000000101010001010100010101000001010001010001000100000001000100010000fd000101010101010101000000000101000001000000000101000100010001010101000000010101000101010101000100010001010101000000010000000001000000000100000101000000000001010001010000000101010000010001010001010000010100000001000000000101010001000001000001010000000100010100000000000001010000010100010100000001010000010100010000000100010100000100000001000100010000010101000101010100000000000000010100000001000000000100000001000000000001010001000100010101010101000000000001000101010001000001010001000100010100010001000001000000000001fd0001010000000100010101000001000001000100010000010000010101000101000000010100010000010001000000000100000101010000000101010101010101000000000101000101000000010001010001010000010100000000000001010100010001000100000001000100000100000000010100000101010001010101010100000001010000010101010000010101010000000101010001000101000100010101000001000100000101010000010100000101010100000101000000000001000001010001010101010101000001010100000001010100000100010101010001010000010001010000000000010001000101010100000001000001010001010401000101",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010100010100000001000001000101000000010001000000010001010000000100010000000101010100000101010101000000000000000001000100000001010000010100000101000000000000000000010101000100000000010000010000000101000000010101010001000001000000000001010001000101010001000000000001000001000100010101010101000001000101000100000101000100000100010001010100010101000100010101000001000100000100000100010001010000000101010000010100000101000100000100000000010000000101010000010101010100000101010000000001010101000101000000010000010001fd000100000001010000000000000001010000000001010101000100000001010100000100010000000000000001010100010100010001000100010000000101000001010001000001010000010001000100010000000101010100010101000101000001000000010001010101010100000001000101000000010100000100000000000000000000000100010101010001010100010000010000000000010100000000000001010000000100000101000001000101010100000101000000000000000000000101000101000100010001000000000100000001000000000000000001000100000001010001000100000101010100000101010101000100000100010100fd0001000000010100000001000000000000000100000100010100000101010101010101010000010000000000010000000100000101000000010101000000000000000100010001000000000100000100000101010000000101000000010100010001000001010000010001000101010001010100010000010100000101010100000101000001000000000101010100010101010100010000000001000100000000010000000001010100010000010101000001000001000000000100010101000000000100000100000001010101000100010100000001010001000101000000010100010000010000010001000100010101010100000001010001010100010000010401010000",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010100010100000001000001000101000000010001000000010001010000000100010000000101010100000101010101000000000000000001000100000001010000010100000101000000000000000000010101000100000000010000010000000101000000010101010001000001000000000001010001000101010001000000000001000001000100010101010101000001000101000100000101000100000100010001010100010101000100010101000001000100000100000100010001010000000101010000010100000101000100000100000000010000000101010000010101010100000101010000000001010101000101000000010000010001fd000100000001010000000000000001010000000001010101000100000001010100000100010000000000000001010100010100010001000100010000000101000001010001000001010000010001000100010000000101010100010101000101000001000000010001010101010100000001000101000000010100000100000000000000000000000100010101010001010100010000010000000000010100000000000001010000000100000101000001000101010100000101000000000000000000000101000101000100010001000000000100000001000000000000000001000100000001010001000100000101010100000101010101000100000100010100fd0001010001010101010000000101010101010001010001010000000000010100000000000001010101010000000100010100000001000100000000000100000100000000000101000001000000010101010001010000010101010000000101010101000101010100000001010000010001000101010000000101010101010101010101000101000000000101000101010001010101010101000101000100000101000001010100000001010001010100010101000001000001010000010000010101000101010101000001010100000101000101010001000101010100000100000100000100000000000000000101000100000000000100000100000001000001000401010001",
! 	"04fd000100010000000100010100000001010000010001000100010100010000000100000100000100000100010100000101010001000000010000010101000000010100010001010001000100000000000000010001010000000001010101000000000000010001010000000000010101010000000001000000000100000001000100010101010000010101010000010000000000000000010100010100010101000001000101000001000001000100000100010000010101000101000100000100000101010100000000010001000100000100010000000000010001000000010100010001010001000100000001010100000101000001000000010100010001010101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000100000001010100010001010000010100010001010001010101000000010001010101000000000101010001010100010100010101000000000000000100010000010101000101000000000100010101000000010100000001010100000101000000010101000100000000010101010001010000010101010001000001010001000100000100000100010101000101010100010001010100000001000000010001010000010100000000000101000001010101010100010000010101000001010000010001000101010000000001000100010001000000010001000101000101000001000100010000010000010100000100000100010000000001010400000000",
! 	"04fd000100010000000100010100000001010000010001000100010100010000000100000100000100000100010100000101010001000000010000010101000000010100010001010001000100000000000000010001010000000001010101000000000000010001010000000000010101010000000001000000000100000001000100010101010000010101010000010000000000000000010100010100010101000001000101000001000001000100000100010000010101000101000100000100000101010100000000010001000100000100010000000000010001000000010100010001010001000100000001010100000101000001000000010100010001010101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000100000101000001010000000101000101010101000000000101000001010000000001000000010001010001010101000101010000000101010000010100010101000100010001000101010100000000010101010000010000010101000000000101010001010101000100010100000101010000010001000101000100010001010001000000010100010001010100000101010100000100000001010001010101000001000001010000010101010000000100010000010100000100010000000100010001000000000000000000000100000101010101010101000001000000000001010000010000000001010001010000000101010100010001010100fd0001000101000000010001010101010100010100010001010001010000010100010101010101010001010101010100000001000101010101000000000101010000000101010001000100000101000000010000010100010001000100000101010000010000010100010101000000010001000101010101000000010001000001010100010000010000000101010000010100010001010001000000000101000101000001010101010000010000000001000001000001000100000101000001000100010101010000000001010000010001000001000101000001000001000100000101000001010000010101010001000000010001010001010001000101010001000400000001",
! 	"04fd000100010000000100010100000001010000010001000100010100010000000100000100000100000100010100000101010001000000010000010101000000010100010001010001000100000000000000010001010000000001010101000000000000010001010000000000010101010000000001000000000100000001000100010101010000010101010000010000000000000000010100010100010101000001000101000001000001000100000100010000010101000101000100000100000101010100000000010001000100000100010000000000010001000000010100010001010001000100000001010100000101000001000000010100010001010101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000010000010000010000010000010100000001000100010000000000010001000001000100010101010001000100000001010001010001010001000100010100000100000101010101000100010001010100010101000001010101010000010001010100000001000101000100010001000101000101010101000000010101000100000001010101010000000101000101010100010101000000000000010100000000010001010100010000010101000000000000000001010100010100010000010000010100000001010000000001000000000000000100010001000001010000010100010001000100010101000100000100010001010100000100000400000100",
! 	"04fd000100010000000100010100000001010000010001000100010100010000000100000100000100000100010100000101010001000000010000010101000000010100010001010001000100000000000000010001010000000001010101000000000000010001010000000000010101010000000001000000000100000001000100010101010000010101010000010000000000000000010100010100010101000001000101000001000001000100000100010000010101000101000100000100000101010100000000010001000100000100010000000000010001000000010100010001010001000100000001010100000101000001000000010100010001010101fd000100000001000000010000010001010100000101010100000101000100010101010001010000000000000000010100010001000100010001000000010101010000000000000100010000010000010000000101010000010100010100000000010100010101010000010000010100000000010100000101000001000100010100010001000001000101000100010100010000000101000001010001000000000000010001000000010100010101000001010100010000000001000100000101000100010101010001010001010101000001000101000100000100010101010101000001000101010100010101000001010100000101000000000101000101010001fd000101000001010101010001000101000101000001000100010100000001010101000001000001000101010101010001010101010100000101010000010100000001010000000101000100000000010001000000000101010101000100000000000100010101010100000100010000010100010001010101000001000100000001010001010000000000000101010001010100000000000001000001000101000101000001010101000100000001000000010101010000000000000101010001000001000101010000010001000001010000010100010001000100010001010100000101010001000001010101010000010101000000000101000000000101000000fd0001010000000000010100010100000000000001000000010001000100000100000000010000000000000001010100010101010100000101010100010100000001010100000100000000000000010100000000010000010101000100010000010101010100000101000100010000010000000100010100010000000101000000000001010100000001000101000100000000010101010000010000000100010001010000010000000100010000010000010101000101000101000100000100010100000001010000010101000101010001010000000100010001000001000000010100000001000100000100010000010100010000010000010001010101010001010400000101",
! 	"04fd000100010000000100010100000001010000010001000100010100010000000100000100000100000100010100000101010001000000010000010101000000010100010001010001000100000000000000010001010000000001010101000000000000010001010000000000010101010000000001000000000100000001000100010101010000010101010000010000000000000000010100010100010101000001000101000001000001000100000100010000010101000101000100000100000101010100000000010001000100000100010000000000010001000000010100010001010001000100000001010100000101000001000000010100010001010101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001000101000100000001010000000100000101000100000000010101010001010001000001010100010000000101010101000000010100000001000101000101010001000100010100010100000000010001010100010101000100000000010101000100010101000000000001000100000101010100000001010100000001010001010000010100010000010101000000000101000100000000000100010101000001010100000001000100010101000101010100010100010000000100010000010001010101010100010101010101000000010101010000000000010101000000010001000101000000000100000000010101000100000101010101010100000400010000",
! 	"04fd000100010000000100010100000001010000010001000100010100010000000100000100000100000100010100000101010001000000010000010101000000010100010001010001000100000000000000010001010000000001010101000000000000010001010000000000010101010000000001000000000100000001000100010101010000010101010000010000000000000000010100010100010101000001000101000001000001000100000100010000010101000101000100000100000101010100000000010001000100000100010000000000010001000000010100010001010001000100000001010100000101000001000000010100010001010101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000100000000000100010000000001000100000101010001000100000101010001010100010100010000000000010100000100010101000001000000010101000100010001010100010100010101010101010000010000000100000100000100000000010100010100000000010001000100000101010000000101000000000001000101010000000101010000010000000001010101000100000001010101000001000001000001010100010000000001010001000101000101010100000000010001010000000001000101010100010101010101010101000101000100010000010000010101000100010100010000000100000000000100000001010100010000fd0001010101010101010100010101010100000000010100010100000000000000010100010101000100000100010000010100000100010000000001000000010001000101010000000000010000010000000000010000010100000001010101000000000001000000000100000100000101010101010101010101000100010101000101010000010101000100000100000000010000010000000101000000010101010000010101010100010101000100000000000001010100000101010101000001000001000101010001010101000000010100010100010100010000010100010001010101010001010100000001000101010101010001000000010000000001010400010001",
! 	"04fd000100010000000100010100000001010000010001000100010100010000000100000100000100000100010100000101010001000000010000010101000000010100010001010001000100000000000000010001010000000001010101000000000000010001010000000000010101010000000001000000000100000001000100010101010000010101010000010000000000000000010100010100010101000001000101000001000001000100000100010000010101000101000100000100000101010100000000010001000100000100010000000000010001000000010100010001010001000100000001010100000101000001000000010100010001010101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001000100010000000001010000000000000100010100010000000001010000000000010100000000010101000000000101010000010000000101000001000000010101000000000101010101000101000000010001000001000100000100010101000001010001000000000101000001000100000001000101000101010101010101000001010100000100010001010101010101000100010100010100010101010101000100000001000101000000010001010000010100000001000001000001010001000001000000010000010000010001000100010000000100000000010001010001010000010001000001000001010000010100010000000100010100010400010100",
! 	"04fd000100010000000100010100000001010000010001000100010100010000000100000100000100000100010100000101010001000000010000010101000000010100010001010001000100000000000000010001010000000001010101000000000000010001010000000000010101010000000001000000000100000001000100010101010000010101010000010000000000000000010100010100010101000001000101000001000001000100000100010000010101000101000100000100000101010100000000010001000100000100010000000000010001000000010100010001010001000100000001010100000101000001000000010100010001010101fd000100010000000101000101000000000100010101010101010000010001000000000101010001000000010100000001010000010100010001000100000001000101000100000000000000000100010001010101000101010101000000000001010100000001010101010001000100000100010100000001010101010101000100010000000001000001010101010001010101000100000000000001000000010001010000010001010101010101000001010000000101000000010000000001010001000101000001000100000000000100000001010101010000000100010000000100000001000100010000010000010100010100010100010100000101010101fd000101000100010101000101000100010001000000010100010001010100000001010000000101010101000100010100000100010101010101010100000100010101000101000100010101000100010100000000000001010101000101000000010001010000010100010001000101010100000100010001010000000101000001000000000000000101010101000100010001010001000100000100010100010001000001000000000000000100010100010001010000010000000100010100000101010000000100010101000100010000000100010001000000010100000101000101000101010001000101010000010100010101010001000101010100000100fd0001010000000100010100000001000101000101000001010001000001010101010001010000000100000001000001000000000101010001000101010100000100000100000000010001000101000101010000000101000000000000010100010000000100000101000000000000010001010001000001000100000101000100000001000100000101000101010101000001000001000100000101000100000101000100000001000101010101000001000100000001000000010001010101000101000001000000010000010001010001010100000000000000010000010000010000010100000001010000000000000001010101000001010101000101000000010400010101",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100000101000000000001000100000100000000000001000101010001010001010100010101010100010100000100010001000101000101010100010100000000000000010101010001010000000001000001000100000101010000000001000000010100000101010101000000000100010101010101010000010000000000010101010100010101010000000001000000010001010101000100010100010000000100010001000001000000000101010100010101010000010101010000010001010101000101010101000100010101010001010101000100010001000001000000010000000000000101010101010100010100000100000001000000000001fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001010100010100000000000001010101000101010100010100000100000100010000000000000000000001010000000101000100010001010100000101010100010100000000000000010100000101000100000101000001000000010000000100000001000101000101000000010100010000000000010000010100010101010001000101010001010101010001000000000000000001010100000101000100000001000101000100010100010001010101000100010101010000010001010100010000010101010001010001010101010000000001010101000100000001000001000101010100010101010101000100010101010100000000000001000101010401000000",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100000101000000000001000100000100000000000001000101010001010001010100010101010100010100000100010001000101000101010100010100000000000000010101010001010000000001000001000100000101010000000001000000010100000101010101000000000100010101010101010000010000000000010101010100010101010000000001000000010001010101000100010100010000000100010001000001000000000101010100010101010000010101010000010001010101000101010101000100010101010001010101000100010001000001000000010000000000000101010101010100010100000100000001000000000001fd000101000100000000010101010000000001000001000101000001010001000101010100010101000101010000000101000100010001000001010000000000000001000101000101000001000101010101010000000000010101000001000100000101010000010101010101000000000001010001010101010001000100010100010100000000010101000100010100000101000100010000010101010001000001000101010100010000010101010101000100010100010001000000000100010000010000000000010001010001000100000001000001010101010000010101000101000100000000000101010101010000010101000100010001000100000000fd0001000101010000000001010101010101010101000101010001000100010101010101000100000000000101010100000101010001000101010001000100000000010100000001000101010100010001000000010101000000000000000001010101000000010100010001010000000001000101010000000100010101000000000000000101010100000101010100010001010100010001000001000101000101010100010101000000000100010001010101010100010000000101000101010001010000010000010101000101010000000001010000000100010001000100000000000101000000010100000101000101010000010001010000010001000001010401000001",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100000101000000000001000100000100000000000001000101010001010001010100010101010100010100000100010001000101000101010100010100000000000000010101010001010000000001000001000100000101010000000001000000010100000101010101000000000100010101010101010000010000000000010101010100010101010000000001000000010001010101000100010100010000000100010001000001000000000101010100010101010000010101010000010001010101000101010101000100010101010001010101000100010001000001000000010000000000000101010101010100010100000100000001000000000001fd000101010101010101000000000101000001000000000101000100010001010101000000010101000101010101000100010001010101000000010000000001000000000100000101000000000001010001010000000101010000010001010001010000010100000001000000000101010001000001000001010000000100010100000000000001010000010100010100000001010000010100010000000100010100000100000001000100010000010101000101010100000000000000010100000001000000000100000001000000000001010001000100010101010101000000000001000101010001000001010001000100010100010001000001000000000001fd0001000000000001000001010100010000010001010000000101010001000100010100010101000001010000000101010100000100000100010001000100010001000100010001000100010101010100000100000101000000010101000000000101010100000000000000000101010000010101010001000100010000000101000001000001010100010001010101000001000000000001000000000001000101000000010101000001000001010001010001010100000000010100000101000100010000000100000100000100010000010001000000000101000100000101000101000100010000010100010001010001010101000100010101000100000001010401000100",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000100000101000000000001000100000100000000000001000101010001010001010100010101010100010100000100010001000101000101010100010100000000000000010101010001010000000001000001000100000101010000000001000000010100000101010101000000000100010101010101010000010000000000010101010100010101010000000001000000010001010101000100010100010000000100010001000001000000000101010100010101010000010101010000010001010101000101010101000100010101010001010101000100010001000001000000010000000000000101010101010100010100000100000001000000000001fd000101010101010101000000000101000001000000000101000100010001010101000000010101000101010101000100010001010101000000010000000001000000000100000101000000000001010001010000000101010000010001010001010000010100000001000000000101010001000001000001010000000100010100000000000001010000010100010100000001010000010100010000000100010100000100000001000100010000010101000101010100000000000000010100000001000000000100000001000000000001010001000100010101010101000000000001000101010001000001010001000100010100010001000001000000000001fd0001010000000100010101000001000001000100010000010000010101000101000000010100010000010001000000000100000101010000000101010101010101000000000101000101000000010001010001010000010100000000000001010100010001000100000001000100000100000000010100000101010001010101010100000001010000010101010000010101010000000101010001000101000100010101000001000100000101010000010100000101010100000101000000000001000001010001010101010101000001010100000001010100000100010101010001010000010001010000000000010001000101010100000001000001010001010401000101",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010100010100000001000001000101000000010001000000010001010000000100010000000101010100000101010101000000000000000001000100000001010000010100000101000000000000000000010101000100000000010000010000000101000000010101010001000001000000000001010001000101010001000000000001000001000100010101010101000001000101000100000101000100000100010001010100010101000100010101000001000100000100000100010001010000000101010000010100000101000100000100000000010000000101010000010101010100000101010000000001010101000101000000010000010001fd000100000100010101010001010101000100010000010001010001010100010100000101000000010101000001000001000100010100010000010001000000010001000001010000010101000100010000010100000101000001010100010100010100010100000101010100000000010100010101010001010000000000000000010001010001000101010100000101010101010001010100000100010000010001010100000100000100000101000100010000010100000001000100010000000101000000000001010001010101010101010001000101010100010000000001010101000101000001000001010101000000010001000000000101010001010101fd0001000000010100000001000000000000000100000100010100000101010101010101010000010000000000010000000100000101000000010101000000000000000100010001000000000100000100000101010000000101000000010100010001000001010000010001000101010001010100010000010100000101010100000101000001000000000101010100010101010100010000000001000100000000010000000001010100010000010101000001000001000000000100010101000000000100000100000001010101000100010100000001010001000101000000010100010000010000010001000100010101010100000001010001010100010000010401010000",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010100010100000001000001000101000000010001000000010001010000000100010000000101010100000101010101000000000000000001000100000001010000010100000101000000000000000000010101000100000000010000010000000101000000010101010001000001000000000001010001000101010001000000000001000001000100010101010101000001000101000100000101000100000100010001010100010101000100010101000001000100000100000100010001010000000101010000010100000101000100000100000000010000000101010000010101010100000101010000000001010101000101000000010000010001fd000100000100010101010001010101000100010000010001010001010100010100000101000000010101000001000001000100010100010000010001000000010001000001010000010101000100010000010100000101000001010100010100010100010100000101010100000000010100010101010001010000000000000000010001010001000101010100000101010101010001010100000100010000010001010100000100000100000101000100010000010100000001000100010000000101000000000001010001010101010101010001000101010100010000000001010101000101000001000001010101000000010001000000000101010001010101fd0001010001010101010000000101010101010001010001010000000000010100000000000001010101010000000100010100000001000100000000000100000100000000000101000001000000010101010001010000010101010000000101010101000101010100000001010000010001000101010000000101010101010101010101000101000000000101000101010001010101010101000101000100000101000001010100000001010001010100010101000001000001010000010000010101000101010101000001010100000101000101010001000101010100000100000100000100000000000000000101000100000000000100000100000001000001000401010001",
! 	"04fd000100010100010100000100010101000101010101010101000000000001010000000000010101000100000000010000000000000001000101010100000000010001010000010101000000010100010001000000000001000000010000000100000000000101010000000100010001010100000100000100000000010101010001010101010001000000000100000000010100000100000000010000010000010101000100000100010000000000000001010100000100010101000101010000010101000100000001010001000101000101000100000000010100010000010001010001010100010100000000010000000001000100010000000000000000010100fd000101010100010100000001000001000101000000010001000000010001010000000100010000000101010100000101010101000000000000000001000100000001010000010100000101000000000000000000010101000100000000010000010000000101000000010101010001000001000000000001010001000101010001000000000001000001000100010101010101000001000101000100000101000100000100010001010100010101000100010101000001000100000100000100010001010000000101010000010100000101000100000100000000010000000101010000010101010100000101010000000001010101000101000000010000010001fd000101010100010000010001010101010101000000010001010001000100010100010000000100010000000001010000010100010001010000010100000101000001010000010101000001000001000000000100010000010101010100010000010001000100000001010101010000010101010100010100010001000100010000010001000001000100010100010100000101000000000000000100000000010000000001000000010000000100000101000101000101000001000001010000010000000101010100010000010101010101000100000101010100000000010001000100010100010100000001000001000000010100000000000100010000010101fd0001010000000001000001010000010000000000010100010000010101000001010101010000010001010000010101000000010100010001010001010101000000000100000001010001010000000000010001010101000100010101000001010101000100000100000000000101010000010100010101000000010000010000010000000000000000010100000000010001000000010001010100010000010001010000000100000001010100000001010101000100010101010001010100010101000000010101010101010001000001010100000001010001010100010000000000000100010001010000010000000000000101000100010000000100000000000401010100"
  ]
diff -crB ./src/test/data/merkle_roots.json ../../komodo-jl777/src/test/data/merkle_roots.json
*** ./src/test/data/merkle_roots.json	2017-01-03 10:40:50.395338477 +0000
--- ../../komodo-jl777/src/test/data/merkle_roots.json	2017-01-03 09:49:08.872507185 +0000
***************
*** 1,18 ****
  [
! 	"26ee6e3f8c28892382264d72789c9c65a8577549fe35d3d6df86e0f07cc80057",
! 	"0e54a14ab674813f2a558b18df630ae095f2cb775d0bc37677073acb1f8f3443",
! 	"d06e16c2e6ee0b28d8f07c76a17976fea549ce2dd1debae260dc3215d265fddb",
! 	"52dc4b76365472537ff15cb18a71be54c91d207f5d62fb89bd74af9010ac0e01",
! 	"8dd27a2340e34015cd9b00a2ddc011dcdab03d38a49497490d631f71ce9c495e",
! 	"0cb8ae3ff2483ea7124237b62d0ac4388477b41e83d3811c6e0dd6fec0b365e6",
! 	"a67c1f145456880502a3d020d538fecf0515bd285edd6e3fcae26eb53c1f56d3",
! 	"7fb0adeb50e1084359414071486d89ead9c9a3700c64c9892f510f87af6ec27f",
! 	"45cd6f71215eabb2c25206471e9293bed2bc924ce5bbc16a8f728ec1e310886f",
! 	"01d1f338c2abee217962120611dafe0a0e9de76c18de77cbb1e3a6d3261e887c",
! 	"2700b09aa19ce460d509fc3bccfbc80f8381d156a4a52a7f3d4e8b852b5c10ea",
! 	"ac96cc858674f67d6c6119f933080cd69c10950409722468d2ac7b81e2cc2bba",
! 	"f4930affd93232b6051fe3a5f744a357201bff4363312d1115762a595261f030",
! 	"50b48f5226a69a62206f365ac5347c723b43faf9691c04b872225d5c08876eed",
! 	"a867397884b157b1db4dd03dc2fd6c40c4650e70b61441d4325e0b18d5280fb6",
! 	"52c8456d3538eed3b73778c596c1993ac6d6c337ae5e338391ce6cae58296dec"
  ]
--- 1,18 ----
  [
! 	"95bf71d8e803b8601c14b5949d0f92690181154ef9d82eb3e24852266823317a",
! 	"73f18d3f9cd11010aa01d4f444039e566f14ef282109df9649b2eb75e7a53ed1",
! 	"dcde8a273c9672bee1a894d7f7f4abb81078f52b498e095f2a87d0aec5addf25",
! 	"4677d481ec6d1e97969afbc530958d1cbb4f1c047af6fdad4687cd10830e02bd",
! 	"74cd9d82de30c4222a06d420b75522ae1273729c1d8419446adf1184df61dc69",
! 	"2ff57f5468c6afdad30ec0fb6c2cb67289f12584e2c20c4e0065f66748697d77",
! 	"27e4ce010670801911c5765a003b15f75cde31d7378bd36540f593c8a44b3011",
! 	"62231ef2ec8c4da461072871ab7bc9de10253fcb40e164ddbad05b47e0b7fb69",
! 	"733a4ce688fdf07efb9e9f5a4b2dafff87cfe198fbe1dff71e028ef4cdee1f1b",
! 	"df39ed31924facdd69a93db07311d45fceac7a4987c091648044f37e6ecbb0d2",
! 	"87795c069bdb55281c666b9cb872d13174334ce135c12823541e9536489a9107",
! 	"438c80f532903b283230446514e400c329b29483db4fe9e279fdfc79e8f4347d",
! 	"08afb2813eda17e94aba1ab28ec191d4af99283cd4f1c5a04c0c2bc221bc3119",
! 	"a8b3ab3284f3288f7caa21bd2b69789a159ab4188b0908825b34723305c1228c",
! 	"db9b289e620de7dca2ae8fdac96808752e32e7a2c6d97ce0755dcebaa03123ab",
! 	"0bf622cb9f901b7532433ea2e7c1b7632f5935899b62dcf897a71551997dc8cc"
  ]
diff -crB ./src/test/data/merkle_serialization.json ../../komodo-jl777/src/test/data/merkle_serialization.json
*** ./src/test/data/merkle_serialization.json	2017-01-03 10:40:50.399338679 +0000
--- ../../komodo-jl777/src/test/data/merkle_serialization.json	2017-01-03 09:49:08.872507185 +0000
***************
*** 1,18 ****
  [
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e302018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30003018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e303018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30003018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e303018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443"
! ]
\ No newline at end of file
--- 1,18 ----
  [
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0000",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c94300",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f38618",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f38618",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f",
! 	"0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965300030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806",
! 	"0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806",
! 	"018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806",
! 	"018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806",
! 	"01be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200030001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806",
! 	"01be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9030001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806",
! 	"01c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000301e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806",
! 	"01c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e0184c834e7cb38d6f08d82f5cf4839b8920185174b11c7af771fd38dd02b206a200301e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806"
! ]
diff -crB ./src/test/data/merkle_witness_serialization.json ../../komodo-jl777/src/test/data/merkle_witness_serialization.json
*** ./src/test/data/merkle_witness_serialization.json	2017-01-03 10:40:50.399338679 +0000
--- ../../komodo-jl777/src/test/data/merkle_witness_serialization.json	2017-01-03 09:49:08.872507185 +0000
***************
*** 1,138 ****
  [
! 	"0000000155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0000000255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0000000255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0000000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0000000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0000000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0000000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0000000455b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0000000455b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e302018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0000000455b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e302018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0000000455b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e302018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0000000455b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e302018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30003018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0000000455b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e302018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30003018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e303018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0000000455b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e302018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30003018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e303018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300",
! 	"0000000455b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e302018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30003018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e303018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300010155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30000",
! 	"0000000555b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c5564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300000455b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c5564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300038695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c5564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30001018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d0355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c5564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e301018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d02dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c5564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d5564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3020001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d5564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30002018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c0255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e35564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e302018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944300",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430355b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030000015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443028695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27ddc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30003018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e303018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba944301dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c00",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300030001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430255b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e38695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e3030001dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba9443018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d00",
! 	"0155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e30003018695873d63ec0bceeadb5bf4ccc6723ac803c1826fc7cfb34fc76180305ae27d01dc33ca90e860ab6770d82ba98f20eae6d5e2ca9a63f63f69b40e3cf72e121d6c015564d9772145d2e53b02de2d8e22b10a820614e0d88ebdd48ddc71f0b9ba94430155b852781b9995a44c939b64e441ae2724b96f99c8f4fb9a141cfc9842c4b0e300"
! ]
\ No newline at end of file
--- 1,138 ----
  [
! 	"0000000162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00",
! 	"0000000262fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c94300",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c94300",
! 	"0000000262fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430101836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0000",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430101836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0000",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c94300000101836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0000",
! 	"0000000362fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae00",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000268eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae00",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430001a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae00",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae400",
! 	"0000000362fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae0101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430000",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000268eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae0101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430000",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430001a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae0101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430000",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae40101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430000",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f38618000101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430000",
! 	"0000000362fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae0101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc00",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000268eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae0101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc00",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430001a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae0101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc00",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae40101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc00",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f38618000101ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc00",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc00",
! 	"0000000362fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae01018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000101aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af2",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000268eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae01018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000101aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af2",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430001a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae01018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000101aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af2",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000101aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af2",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180001018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000101aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af2",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc01018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10000",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0001018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10000",
! 	"0000000462fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd00",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000368eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd00",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430002a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd00",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180292498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae4112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd00",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f3861801112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd00",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0268c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad1047400",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f01050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad1047400",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d00",
! 	"0000000462fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b96530000",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000368eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b96530000",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430002a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b96530000",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180292498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae4112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b96530000",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f3861801112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b96530000",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0268c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad10474010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b96530000",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f01050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad10474010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b96530000",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b96530000",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f00010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b96530000",
! 	"0000000462fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000368eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430002a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180292498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae4112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f3861801112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0268c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad10474010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f01050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad10474010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f00010170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
! 	"0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965300030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80601d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81700",
! 	"0000000462fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000368eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430002a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180292498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae4112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f3861801112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0268c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad1047401018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f01050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad1047401018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0001018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
! 	"0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965300030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80601d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf81701018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0000",
! 	"0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a8060001018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0000",
! 	"0000000462fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000368eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430002a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180292498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae4112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f3861801112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0268c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad1047401018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f01050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad1047401018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d01018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0001018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a41",
! 	"0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965300030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80602d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e755000",
! 	"0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80601a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e755000",
! 	"018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a8060104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba300",
! 	"0000000462fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000368eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430002a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180292498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae4112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f3861801112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0268c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad104740101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f01050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad104740101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f000101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965300030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80602d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e75500101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a09120000",
! 	"0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80601a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e75500101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a09120000",
! 	"018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a8060104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a09120000",
! 	"018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806000101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a09120000",
! 	"0000000462fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000368eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430002a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180292498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae4112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f3861801112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0268c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad104740101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f01050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad104740101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f000101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9020001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965300030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80602d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e75500101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e900",
! 	"0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80601a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e75500101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e900",
! 	"018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a8060104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e900",
! 	"018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806000101be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e900",
! 	"01be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200030001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e900",
! 	"0000000462fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000201e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000368eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000201e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430002a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000201e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180292498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae4112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000201e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f3861801112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd0101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000201e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0268c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad104740101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000201e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f01050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad104740101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000201e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000201e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f000101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000201e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625",
! 	"0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965300030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80602d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e75500101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000101e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a7",
! 	"0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80601a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e75500101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000101e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a7",
! 	"018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a8060104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000101e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a7",
! 	"018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806000101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000101e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a7",
! 	"01be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200030001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e90101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e0000",
! 	"01be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9030001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806000101c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e0000",
! 	"0000000562fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba68eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd458cab4492ce89c6b50161e0583c2115e7900db964a53b49e152828d6a3991af00",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba00000468eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c943a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd458cab4492ce89c6b50161e0583c2115e7900db964a53b49e152828d6a3991af00",
! 	"0162fdad9bfbf17c38ea626a9c9b8af8a748e6b4367c8494caf0ca592999e8b6ba0168eb35bc5e1ddb80a761718e63a1ecf4d4977ae22cc19fa732b85515b2a4c9430003a6637c3308b7b8e6eabc3c9c3bd672b568d73c8de4cf14ca2a004ff20c86c7ae112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd458cab4492ce89c6b50161e0583c2115e7900db964a53b49e152828d6a3991af00",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0001019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f386180392498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae4112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd458cab4492ce89c6b50161e0583c2115e7900db964a53b49e152828d6a3991af00",
! 	"01836045484077cf6390184ea7cd48b460e2d0f22b2293b69633bb152314a692fb0192498a8295ea36d593eaee7cb8b55be3a3e37b8185d3807693184054cd574ae401019f5b2b1e4bf7e7318d0a1f417ca6bca36077025b3d11e074b94cd55ce9f3861802112e79af601aaa3c0a48e6c37930ccad4b5a3340a373a14d7b79697e5ee730dd458cab4492ce89c6b50161e0583c2115e7900db964a53b49e152828d6a3991af00",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430002000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0368c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad10474458cab4492ce89c6b50161e0583c2115e7900db964a53b49e152828d6a3991af00",
! 	"01ff7c360374a6508ae0904c782127ff5dce90918f3ee81cf92ef1b69afb8bf4430168c4d0f69d1f18b756c2ee875c14f1c6cd38682e715ded14bf7e3c1c5610e9fc02000146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f02050a753bb419723abb7f22486c2a7182e390f47927435bc2c2f7fda93ad10474458cab4492ce89c6b50161e0583c2115e7900db964a53b49e152828d6a3991af00",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b1000201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f0250c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d458cab4492ce89c6b50161e0583c2115e7900db964a53b49e152828d6a3991af00",
! 	"018b16cd3ec44875e4856e30344c0b4a68a6f929a68be5117b225b80926301e7b10150c0b43061c39191c3ec529734328b7f9cafeb6fd162cc49a4495442d9499a2d0201aed51ae31f597f976bac0f62cd5e563203ead4b5202d6459c5d45466dd737af20146c2fe50e8c66a8b402bdf071f52c7f509f7a04597f31886b2823e288a936d9f01458cab4492ce89c6b50161e0583c2115e7900db964a53b49e152828d6a3991af00",
! 	"0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965300030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80603d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e7550305205dbbecab7b01ec2538467c2fe41f7845eb45487bcf2f7d7bd52207f644100",
! 	"0170ffdd5fa0f3aea18bd4700f1ac2e2e03cf5d4b7b857e8dd93b862a8319b965301d81ef64a0063573d80cd32222d8d04debbe807345ad7af2e9edf0f44bdfaf817030000016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80602a1e12cd7bb8d53016cbf0729cfc1bead8759a9e97a7eb50a416a27ced07e7550305205dbbecab7b01ec2538467c2fe41f7845eb45487bcf2f7d7bd52207f644100",
! 	"018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b000301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a8060204e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba3305205dbbecab7b01ec2538467c2fe41f7845eb45487bcf2f7d7bd52207f644100",
! 	"018b92a4ec694271fe1b16cc0ea8a433bf19e78eb5ca733cc137f38e5ecb05789b0104e963ab731e4aaaaaf931c3c039ea8c9d7904163936e19a8929434da9adeba30301fe190d5e3beaf1084c1b1cb6621d262c0cd8cd16454ef0188441abf05d356a4100016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a80601305205dbbecab7b01ec2538467c2fe41f7845eb45487bcf2f7d7bd52207f644100",
! 	"01be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a091200030001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806021880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e92f7a96ecc725694533a999db6786f6016bcfdca5c9353151837faf43d93c50ef00",
! 	"01be3f6c181f162824191ecf1f78cae3ffb0ddfda671bb93277ce6ebc9201a0912011880967fc8226380a849c63532bba67990f7d0a10e9c90b848f58d634957c6e9030001ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a806012f7a96ecc725694533a999db6786f6016bcfdca5c9353151837faf43d93c50ef00",
! 	"01c465bb2893cba233351094f259396301c23d73a6cf6f92bc63428a43f0dd8f8e000301e97f16ad143359999c90a7d2a3e7daa94ad980842226d9323d3f4f0ab62460a701ec4b1458a3cf805199803a1231e906ba095f969a5775ca4ac73348473e70f625016cbbfc183a1017859c6a088838ae487be84321274a039773a35b434b7610a8060184c834e7cb38d6f08d82f5cf4839b8920185174b11c7af771fd38dd02b206a2000"
! ]
diff -crB ./src/test/rpc_wallet_tests.cpp ../../komodo-jl777/src/test/rpc_wallet_tests.cpp
*** ./src/test/rpc_wallet_tests.cpp	2017-01-03 10:40:50.419339691 +0000
--- ../../komodo-jl777/src/test/rpc_wallet_tests.cpp	2017-01-03 09:49:08.872507185 +0000
***************
*** 295,307 ****
      BOOST_CHECK_THROW(CallRPC("z_listreceivedbyaddress tnRZ8bPq2pff3xBWhTJhNkVUkm2uhzksDeW5PvEa7aFKGT9Qi3YgTALZfjaY4jU3HLVKBtHdSXxoPoLA3naMPcHBcY88FcF 1"), runtime_error);
  }
  
  /*
   * This test covers RPC command z_exportwallet
   */
  BOOST_AUTO_TEST_CASE(rpc_wallet_z_exportwallet)
  {
      LOCK2(cs_main, pwalletMain->cs_wallet);
!     
      // wallet should be empty
      std::set<libzcash::PaymentAddress> addrs;
      pwalletMain->GetPaymentAddresses(addrs);
--- 295,353 ----
      BOOST_CHECK_THROW(CallRPC("z_listreceivedbyaddress tnRZ8bPq2pff3xBWhTJhNkVUkm2uhzksDeW5PvEa7aFKGT9Qi3YgTALZfjaY4jU3HLVKBtHdSXxoPoLA3naMPcHBcY88FcF 1"), runtime_error);
  }
  
+ /**
+  * This test covers RPC command z_validateaddress
+  */
+ BOOST_AUTO_TEST_CASE(rpc_wallet_z_validateaddress)
+ {
+     SelectParams(CBaseChainParams::MAIN);
+ 
+     LOCK2(cs_main, pwalletMain->cs_wallet);
+ 
+     Value retValue;
+ 
+     // Check number of args
+     BOOST_CHECK_THROW(CallRPC("z_validateaddress"), runtime_error);
+     BOOST_CHECK_THROW(CallRPC("z_validateaddress toomany args"), runtime_error);
+ 
+     // Wallet should be empty
+     std::set<libzcash::PaymentAddress> addrs;
+     pwalletMain->GetPaymentAddresses(addrs);
+     BOOST_CHECK(addrs.size()==0);
+ 
+     // This address is not valid, it belongs to another network
+     BOOST_CHECK_NO_THROW(retValue = CallRPC("z_validateaddress ztaaga95QAPyp1kSQ1hD2kguCpzyMHjxWZqaYDEkzbvo7uYQYAw2S8X4Kx98AvhhofMtQL8PAXKHuZsmhRcanavKRKmdCzk"));
+     Object resultObj = retValue.get_obj();
+     bool b = find_value(resultObj, "isvalid").get_bool();
+     BOOST_CHECK_EQUAL(b, false);
+ 
+     // This address is valid, but the spending key is not in this wallet
+     BOOST_CHECK_NO_THROW(retValue = CallRPC("z_validateaddress zcfA19SDAKRYHLoRDoShcoz4nPohqWxuHcqg8WAxsiB2jFrrs6k7oSvst3UZvMYqpMNSRBkxBsnyjjngX5L55FxMzLKach8"));
+     resultObj = retValue.get_obj();
+     b = find_value(resultObj, "isvalid").get_bool();
+     BOOST_CHECK_EQUAL(b, true);
+     b = find_value(resultObj, "ismine").get_bool();
+     BOOST_CHECK_EQUAL(b, false);
+ 
+     // Let's import a spending key to the wallet and validate its payment address
+     BOOST_CHECK_NO_THROW(CallRPC("z_importkey SKxoWv77WGwFnUJitQKNEcD636bL4X5Gd6wWmgaA4Q9x8jZBPJXT"));
+     BOOST_CHECK_NO_THROW(retValue = CallRPC("z_validateaddress zcWsmqT4X2V4jgxbgiCzyrAfRT1vi1F4sn7M5Pkh66izzw8Uk7LBGAH3DtcSMJeUb2pi3W4SQF8LMKkU2cUuVP68yAGcomL"));
+     resultObj = retValue.get_obj();
+     b = find_value(resultObj, "isvalid").get_bool();
+     BOOST_CHECK_EQUAL(b, true);
+     b = find_value(resultObj, "ismine").get_bool();
+     BOOST_CHECK_EQUAL(b, true);
+     BOOST_CHECK_EQUAL(find_value(resultObj, "payingkey").get_str(), "f5bb3c888ccc9831e3f6ba06e7528e26a312eec3acc1823be8918b6a3a5e20ad");
+     BOOST_CHECK_EQUAL(find_value(resultObj, "transmissionkey").get_str(), "7a58c7132446564e6b810cf895c20537b3528357dc00150a8e201f491efa9c1a");
+ }
+ 
  /*
   * This test covers RPC command z_exportwallet
   */
  BOOST_AUTO_TEST_CASE(rpc_wallet_z_exportwallet)
  {
      LOCK2(cs_main, pwalletMain->cs_wallet);
! 
      // wallet should be empty
      std::set<libzcash::PaymentAddress> addrs;
      pwalletMain->GetPaymentAddresses(addrs);
***************
*** 774,780 ****
  
      BOOST_CHECK_THROW(CallRPC("z_sendmany"), runtime_error);
      BOOST_CHECK_THROW(CallRPC("z_sendmany toofewargs"), runtime_error);
!     BOOST_CHECK_THROW(CallRPC("z_sendmany too many args here"), runtime_error);
  
      // bad from address
      BOOST_CHECK_THROW(CallRPC("z_sendmany "
--- 820,826 ----
  
      BOOST_CHECK_THROW(CallRPC("z_sendmany"), runtime_error);
      BOOST_CHECK_THROW(CallRPC("z_sendmany toofewargs"), runtime_error);
!     BOOST_CHECK_THROW(CallRPC("z_sendmany just too many args here"), runtime_error);
  
      // bad from address
      BOOST_CHECK_THROW(CallRPC("z_sendmany "
***************
*** 795,800 ****
--- 841,867 ----
              " {\"address\":\"tmQP9L3s31cLsghVYf2Jb5MhKj1jRBPoeQn\", \"amount\":12.0} ]"
              ), runtime_error);
  
+     // invalid fee amount, cannot be negative
+     BOOST_CHECK_THROW(CallRPC("z_sendmany "
+             "tmRr6yJonqGK23UVhrKuyvTpF8qxQQjKigJ "
+             "[{\"address\":\"tmQP9L3s31cLsghVYf2Jb5MhKj1jRBPoeQn\", \"amount\":50.0}] "
+             "1 -0.0001"
+             ), runtime_error);
+ 
+     // invalid fee amount, bigger than MAX_MONEY
+     BOOST_CHECK_THROW(CallRPC("z_sendmany "
+             "tmRr6yJonqGK23UVhrKuyvTpF8qxQQjKigJ "
+             "[{\"address\":\"tmQP9L3s31cLsghVYf2Jb5MhKj1jRBPoeQn\", \"amount\":50.0}] "
+             "1 21000001"
+             ), runtime_error);
+ 
+     // fee amount is bigger than sum of outputs
+     BOOST_CHECK_THROW(CallRPC("z_sendmany "
+             "tmRr6yJonqGK23UVhrKuyvTpF8qxQQjKigJ "
+             "[{\"address\":\"tmQP9L3s31cLsghVYf2Jb5MhKj1jRBPoeQn\", \"amount\":50.0}] "
+             "1 50.00000001"
+             ), runtime_error);
+ 
      // memo bigger than allowed length of ZC_MEMO_SIZE
      std::vector<char> v (2 * (ZC_MEMO_SIZE+1));     // x2 for hexadecimal string format
      std::fill(v.begin(),v.end(), 'A');
diff -crB ./src/test/transaction_tests.cpp ../../komodo-jl777/src/test/transaction_tests.cpp
*** ./src/test/transaction_tests.cpp	2017-01-03 10:40:50.423339894 +0000
--- ../../komodo-jl777/src/test/transaction_tests.cpp	2017-01-03 09:49:08.872507185 +0000
***************
*** 341,349 ****
          libzcash::JSOutput(addr, 50)
      };
  
      {
          JSDescription jsdesc(*p, pubKeyHash, rt, inputs, outputs, 0, 0);
!         BOOST_CHECK(jsdesc.Verify(*p, pubKeyHash));
  
          CDataStream ss(SER_DISK, CLIENT_VERSION);
          ss << jsdesc;
--- 341,351 ----
          libzcash::JSOutput(addr, 50)
      };
  
+     auto verifier = libzcash::ProofVerifier::Strict();
+ 
      {
          JSDescription jsdesc(*p, pubKeyHash, rt, inputs, outputs, 0, 0);
!         BOOST_CHECK(jsdesc.Verify(*p, verifier, pubKeyHash));
  
          CDataStream ss(SER_DISK, CLIENT_VERSION);
          ss << jsdesc;
***************
*** 352,358 ****
          ss >> jsdesc_deserialized;
  
          BOOST_CHECK(jsdesc_deserialized == jsdesc);
!         BOOST_CHECK(jsdesc_deserialized.Verify(*p, pubKeyHash));
      }
  
      {
--- 354,360 ----
          ss >> jsdesc_deserialized;
  
          BOOST_CHECK(jsdesc_deserialized == jsdesc);
!         BOOST_CHECK(jsdesc_deserialized.Verify(*p, verifier, pubKeyHash));
      }
  
      {
***************
*** 365,371 ****
          // Ensure that it won't verify if the root is changed.
          auto test = JSDescription(*p, pubKeyHash, rt, inputs, outputs, 0, 0);
          test.anchor = GetRandHash();
!         BOOST_CHECK(!test.Verify(*p, pubKeyHash));
      }
  }
  
--- 367,373 ----
          // Ensure that it won't verify if the root is changed.
          auto test = JSDescription(*p, pubKeyHash, rt, inputs, outputs, 0, 0);
          test.anchor = GetRandHash();
!         BOOST_CHECK(!test.Verify(*p, verifier, pubKeyHash));
      }
  }
  
diff -crB ./src/util.cpp ../../komodo-jl777/src/util.cpp
*** ./src/util.cpp	2017-01-03 10:40:50.427340097 +0000
--- ../../komodo-jl777/src/util.cpp	2017-01-03 09:49:08.872507185 +0000
***************
*** 217,222 ****
--- 217,223 ----
  
          // if not debugging everything and not debugging specific category, LogPrint does nothing.
          if (setCategories.count(string("")) == 0 &&
+             setCategories.count(string("1")) == 0 &&
              setCategories.count(string(category)) == 0)
              return false;
      }
***************
*** 526,532 ****
          path /= BaseParams().DataDir();
  
      fs::create_directories(path);
! 
      return path;
  }
  
--- 527,534 ----
          path /= BaseParams().DataDir();
  
      fs::create_directories(path);
!     //std::string assetpath = path + "/assets";
!     //boost::filesystem::create_directory(assetpath);
      return path;
  }
  
Only in ../../komodo-jl777/src: utiltest.cpp
Only in ../../komodo-jl777/src: utiltest.h
diff -crB ./src/wallet/asyncrpcoperation_sendmany.cpp ../../komodo-jl777/src/wallet/asyncrpcoperation_sendmany.cpp
*** ./src/wallet/asyncrpcoperation_sendmany.cpp	2017-01-03 10:40:50.427340097 +0000
--- ../../komodo-jl777/src/wallet/asyncrpcoperation_sendmany.cpp	2017-01-03 09:49:08.872507185 +0000
***************
*** 52,60 ****
          std::string fromAddress,
          std::vector<SendManyRecipient> tOutputs,
          std::vector<SendManyRecipient> zOutputs,
!         int minDepth) :
!         fromaddress_(fromAddress), t_outputs_(tOutputs), z_outputs_(zOutputs), mindepth_(minDepth)
  {
      if (minDepth < 0) {
          throw JSONRPCError(RPC_INVALID_PARAMETER, "Minconf cannot be negative");
      }
--- 52,63 ----
          std::string fromAddress,
          std::vector<SendManyRecipient> tOutputs,
          std::vector<SendManyRecipient> zOutputs,
!         int minDepth,
!         CAmount fee) :
!         fromaddress_(fromAddress), t_outputs_(tOutputs), z_outputs_(zOutputs), mindepth_(minDepth), fee_(fee)
  {
+     assert(fee_ > 0);
+ 
      if (minDepth < 0) {
          throw JSONRPCError(RPC_INVALID_PARAMETER, "Minconf cannot be negative");
      }
***************
*** 149,156 ****
      bool isSingleZaddrOutput = (t_outputs_.size()==0 && z_outputs_.size()==1);
      bool isMultipleZaddrOutput = (t_outputs_.size()==0 && z_outputs_.size()>=1);
      bool isPureTaddrOnlyTx = (isfromtaddr_ && z_outputs_.size() == 0);
!     CAmount minersFee = ASYNC_RPC_OPERATION_DEFAULT_MINERS_FEE;
!     
      // When spending coinbase utxos, you can only specify a single zaddr as the change must go somewhere
      // and if there are multiple zaddrs, we don't know where to send it.
      if (isfromtaddr_) {
--- 152,159 ----
      bool isSingleZaddrOutput = (t_outputs_.size()==0 && z_outputs_.size()==1);
      bool isMultipleZaddrOutput = (t_outputs_.size()==0 && z_outputs_.size()>=1);
      bool isPureTaddrOnlyTx = (isfromtaddr_ && z_outputs_.size() == 0);
!     CAmount minersFee = fee_;
! 
      // When spending coinbase utxos, you can only specify a single zaddr as the change must go somewhere
      // and if there are multiple zaddrs, we don't know where to send it.
      if (isfromtaddr_) {
***************
*** 202,218 ****
      assert(!isfromzaddr_ || t_inputs_total == 0);
  
      if (isfromtaddr_ && (t_inputs_total < targetAmount)) {
!         throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS, strprintf("Insufficient transparent funds, have %ld, need %ld", t_inputs_total, targetAmount));
      }
      
      if (isfromzaddr_ && (z_inputs_total < targetAmount)) {
!         throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS, strprintf("Insufficient protected funds, have %ld, need %ld", z_inputs_total, targetAmount));
      }
  
      // If from address is a taddr, select UTXOs to spend
      CAmount selectedUTXOAmount = 0;
      bool selectedUTXOCoinbase = false;
      if (isfromtaddr_) {
          std::vector<SendManyInputUTXO> selectedTInputs;
          for (SendManyInputUTXO & t : t_inputs_) {
              bool b = std::get<3>(t);
--- 205,233 ----
      assert(!isfromzaddr_ || t_inputs_total == 0);
  
      if (isfromtaddr_ && (t_inputs_total < targetAmount)) {
!         throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS,
!             strprintf("Insufficient transparent funds, have %s, need %s",
!             FormatMoney(t_inputs_total), FormatMoney(targetAmount)));
      }
      
      if (isfromzaddr_ && (z_inputs_total < targetAmount)) {
!         throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS,
!             strprintf("Insufficient protected funds, have %s, need %s",
!             FormatMoney(z_inputs_total), FormatMoney(targetAmount)));
      }
  
      // If from address is a taddr, select UTXOs to spend
      CAmount selectedUTXOAmount = 0;
      bool selectedUTXOCoinbase = false;
      if (isfromtaddr_) {
+         // Get dust threshold
+         CKey secret;
+         secret.MakeNewKey(true);
+         CScript scriptPubKey = GetScriptForDestination(secret.GetPubKey().GetID());
+         CTxOut out(CAmount(1), scriptPubKey);
+         CAmount dustThreshold = out.GetDustThreshold(minRelayTxFee);
+         CAmount dustChange = -1;
+ 
          std::vector<SendManyInputUTXO> selectedTInputs;
          for (SendManyInputUTXO & t : t_inputs_) {
              bool b = std::get<3>(t);
***************
*** 222,230 ****
              selectedUTXOAmount += std::get<2>(t);
              selectedTInputs.push_back(t);
              if (selectedUTXOAmount >= targetAmount) {
!                 break;
              }
          }
          t_inputs_ = selectedTInputs;
          t_inputs_total = selectedUTXOAmount;
  
--- 237,257 ----
              selectedUTXOAmount += std::get<2>(t);
              selectedTInputs.push_back(t);
              if (selectedUTXOAmount >= targetAmount) {
!                 // Select another utxo if there is change less than the dust threshold.
!                 dustChange = selectedUTXOAmount - targetAmount;
!                 if (dustChange == 0 || dustChange >= dustThreshold) {
!                     break;
!                 }
              }
          }
+ 
+         // If there is transparent change, is it valid or is it dust?
+         if (dustChange < dustThreshold && dustChange != 0) {
+             throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS,
+                 strprintf("Insufficient transparent funds, have %s, need %s more to avoid creating invalid change output %s (dust threshold is %s)",
+                 FormatMoney(t_inputs_total), FormatMoney(dustThreshold - dustChange), FormatMoney(dustChange), FormatMoney(dustThreshold)));
+         }
+ 
          t_inputs_ = selectedTInputs;
          t_inputs_total = selectedUTXOAmount;
  
***************
*** 298,304 ****
          zOutputsDeque.push_back(o);
      }
  
!     
      /**
       * SCENARIO #2
       * 
--- 325,346 ----
          zOutputsDeque.push_back(o);
      }
  
!     // When spending notes, take a snapshot of note witnesses and anchors as the treestate will
!     // change upon arrival of new blocks which contain joinsplit transactions.  This is likely
!     // to happen as creating a chained joinsplit transaction can take longer than the block interval.
!     if (z_inputs_.size() > 0) {
!         LOCK2(cs_main, pwalletMain->cs_wallet);
!         for (auto t : z_inputs_) {
!             JSOutPoint jso = std::get<0>(t);
!             std::vector<JSOutPoint> vOutPoints = { jso };
!             uint256 inputAnchor;
!             std::vector<boost::optional<ZCIncrementalWitness>> vInputWitnesses;
!             pwalletMain->GetNoteWitnesses(vOutPoints, vInputWitnesses, inputAnchor);
!             jsopWitnessAnchorMap[ jso.ToString() ] = WitnessAnchorData{ vInputWitnesses[0], inputAnchor };
!         }
!     }
! 
! 
      /**
       * SCENARIO #2
       * 
***************
*** 321,327 ****
              if (selectedUTXOCoinbase) {
                  assert(isSingleZaddrOutput);
                  throw JSONRPCError(RPC_WALLET_ERROR, strprintf(
!                     "Change %ld not allowed. When protecting coinbase funds, the wallet does not allow any change as there is currently no way to specify a change address in z_sendmany.", change));
              } else {
                  add_taddr_change_output_to_tx(change);
                  LogPrint("zrpc", "%s: transparent change in transaction output (amount=%s)\n",
--- 363,371 ----
              if (selectedUTXOCoinbase) {
                  assert(isSingleZaddrOutput);
                  throw JSONRPCError(RPC_WALLET_ERROR, strprintf(
!                     "Change %s not allowed. When protecting coinbase funds, the wallet does not "
!                     "allow any change as there is currently no way to specify a change address "
!                     "in z_sendmany.", FormatMoney(change)));
              } else {
                  add_taddr_change_output_to_tx(change);
                  LogPrint("zrpc", "%s: transparent change in transaction output (amount=%s)\n",
***************
*** 496,510 ****
                      throw JSONRPCError(RPC_WALLET_ERROR, "Could not find previous JoinSplit anchor");
                  }
                  
                  for (const uint256& commitment : prevJoinSplit.commitments) {
                      tree.append(commitment);
!                     previousCommitments.push_back(commitment);                   
                  }
!                 ZCIncrementalWitness changeWitness = tree.witness();
!                 jsAnchor = changeWitness.root();
!                 uint256 changeCommitment = prevJoinSplit.commitments[changeOutputIndex];
!                 intermediates.insert(std::make_pair(tree.root(), tree));
!                 witnesses.push_back(changeWitness);
  
                  // Decrypt the change note's ciphertext to retrieve some data we need
                  ZCNoteDecryption decryptor(spendingkey_.viewing_key());
--- 540,562 ----
                      throw JSONRPCError(RPC_WALLET_ERROR, "Could not find previous JoinSplit anchor");
                  }
                  
+                 assert(changeOutputIndex != -1);
+                 boost::optional<ZCIncrementalWitness> changeWitness;
+                 int n = 0;
                  for (const uint256& commitment : prevJoinSplit.commitments) {
                      tree.append(commitment);
!                     previousCommitments.push_back(commitment);
!                     if (!changeWitness && changeOutputIndex == n++) {
!                         changeWitness = tree.witness();
!                     } else if (changeWitness) {
!                         changeWitness.get().append(commitment);
!                     }
                  }
!                 if (changeWitness) {
!                         witnesses.push_back(changeWitness);
!                 }
!                 jsAnchor = tree.root();
!                 intermediates.insert(std::make_pair(tree.root(), tree));    // chained js are interstitial (found in between block boundaries)
  
                  // Decrypt the change note's ciphertext to retrieve some data we need
                  ZCNoteDecryption decryptor(spendingkey_.viewing_key());
***************
*** 538,543 ****
--- 590,596 ----
              //
              std::vector<Note> vInputNotes;
              std::vector<JSOutPoint> vOutPoints;
+             std::vector<boost::optional<ZCIncrementalWitness>> vInputWitnesses;
              uint256 inputAnchor;
              int numInputsNeeded = (jsChange>0) ? 1 : 0;
              while (numInputsNeeded++ < ZC_NUM_JS_INPUTS && zInputsDeque.size() > 0) {
***************
*** 547,552 ****
--- 600,613 ----
                  CAmount noteFunds = std::get<2>(t);
                  zInputsDeque.pop_front();
  
+                 WitnessAnchorData wad = jsopWitnessAnchorMap[ jso.ToString() ];
+                 vInputWitnesses.push_back(wad.witness);
+                 if (inputAnchor.IsNull()) {
+                     inputAnchor = wad.anchor;
+                 } else if (inputAnchor != wad.anchor) {
+                     throw JSONRPCError(RPC_WALLET_ERROR, "Selected input notes do not share the same anchor");
+                 }
+ 
                  vOutPoints.push_back(jso);
                  vInputNotes.push_back(note);
                  
***************
*** 563,574 ****
                          
              // Add history of previous commitments to witness 
              if (vInputNotes.size() > 0) {
!                 std::vector<boost::optional<ZCIncrementalWitness>> vInputWitnesses;
!                 {
!                     LOCK(cs_main);
!                     pwalletMain->GetNoteWitnesses(vOutPoints, vInputWitnesses, inputAnchor);
!                 }
!        
                  if (vInputWitnesses.size()==0) {
                      throw JSONRPCError(RPC_WALLET_ERROR, "Could not find witness for note commitment");
                  }
--- 624,630 ----
                          
              // Add history of previous commitments to witness 
              if (vInputNotes.size() > 0) {
! 
                  if (vInputWitnesses.size()==0) {
                      throw JSONRPCError(RPC_WALLET_ERROR, "Could not find witness for note commitment");
                  }
***************
*** 760,765 ****
--- 816,826 ----
          t_inputs_.push_back(utxo);
      }
  
+     // sort in ascending order, so smaller utxos appear first
+     std::sort(t_inputs_.begin(), t_inputs_.end(), [](SendManyInputUTXO i, SendManyInputUTXO j) -> bool {
+         return ( std::get<2>(i) < std::get<2>(j));
+     });
+ 
      return t_inputs_.size() > 0;
  }
  
***************
*** 894,901 ****
              info.vpub_new,
              !this->testmode);
  
!     if (!(jsdesc.Verify(*pzcashParams, joinSplitPubKey_))) {
!         throw std::runtime_error("error verifying joinsplit");
      }
  
      mtx.vjoinsplit.push_back(jsdesc);
--- 955,965 ----
              info.vpub_new,
              !this->testmode);
  
!     {
!         auto verifier = libzcash::ProofVerifier::Strict();
!         if (!(jsdesc.Verify(*pzcashParams, verifier, joinSplitPubKey_))) {
!             throw std::runtime_error("error verifying joinsplit");
!         }
      }
  
      mtx.vjoinsplit.push_back(jsdesc);
diff -crB ./src/wallet/asyncrpcoperation_sendmany.h ../../komodo-jl777/src/wallet/asyncrpcoperation_sendmany.h
*** ./src/wallet/asyncrpcoperation_sendmany.h	2017-01-03 10:40:50.427340097 +0000
--- ../../komodo-jl777/src/wallet/asyncrpcoperation_sendmany.h	2017-01-03 09:49:08.872507185 +0000
***************
*** 14,22 ****
  #include "json/json_spirit_value.h"
  #include "wallet.h"
  
  #include <tuple>
  
! // TODO: Compute fee based on a heuristic, e.g. (num tx output * dust threshold) + joinsplit bytes * ?
  #define ASYNC_RPC_OPERATION_DEFAULT_MINERS_FEE   10000
  
  using namespace libzcash;
--- 14,23 ----
  #include "json/json_spirit_value.h"
  #include "wallet.h"
  
+ #include <unordered_map>
  #include <tuple>
  
! // Default transaction fee if caller does not specify one.
  #define ASYNC_RPC_OPERATION_DEFAULT_MINERS_FEE   10000
  
  using namespace libzcash;
***************
*** 41,49 ****
      CAmount vpub_new = 0;
  };
  
  class AsyncRPCOperation_sendmany : public AsyncRPCOperation {
  public:
!     AsyncRPCOperation_sendmany(std::string fromAddress, std::vector<SendManyRecipient> tOutputs, std::vector<SendManyRecipient> zOutputs, int minDepth);
      virtual ~AsyncRPCOperation_sendmany();
      
      // We don't want to be copied or moved around
--- 42,56 ----
      CAmount vpub_new = 0;
  };
  
+ // A struct to help us track the witness and anchor for a given JSOutPoint
+ struct WitnessAnchorData {
+ 	boost::optional<ZCIncrementalWitness> witness;
+ 	uint256 anchor;
+ };
+ 
  class AsyncRPCOperation_sendmany : public AsyncRPCOperation {
  public:
!     AsyncRPCOperation_sendmany(std::string fromAddress, std::vector<SendManyRecipient> tOutputs, std::vector<SendManyRecipient> zOutputs, int minDepth, CAmount fee = ASYNC_RPC_OPERATION_DEFAULT_MINERS_FEE);
      virtual ~AsyncRPCOperation_sendmany();
      
      // We don't want to be copied or moved around
***************
*** 59,64 ****
--- 66,72 ----
  private:
      friend class TEST_FRIEND_AsyncRPCOperation_sendmany;    // class for unit testing
  
+     CAmount fee_;
      int mindepth_;
      std::string fromaddress_;
      bool isfromtaddr_;
***************
*** 70,76 ****
      uint256 joinSplitPubKey_;
      unsigned char joinSplitPrivKey_[crypto_sign_SECRETKEYBYTES];
  
!         
      std::vector<SendManyRecipient> t_outputs_;
      std::vector<SendManyRecipient> z_outputs_;
      std::vector<SendManyInputUTXO> t_inputs_;
--- 78,86 ----
      uint256 joinSplitPubKey_;
      unsigned char joinSplitPrivKey_[crypto_sign_SECRETKEYBYTES];
  
!     // The key is the result string from calling JSOutPoint::ToString()
!     std::unordered_map<std::string, WitnessAnchorData> jsopWitnessAnchorMap;
! 
      std::vector<SendManyRecipient> t_outputs_;
      std::vector<SendManyRecipient> z_outputs_;
      std::vector<SendManyInputUTXO> t_inputs_;
diff -crB ./src/wallet/gtest/test_wallet.cpp ../../komodo-jl777/src/wallet/gtest/test_wallet.cpp
*** ./src/wallet/gtest/test_wallet.cpp	2017-01-03 10:40:50.431340299 +0000
--- ../../komodo-jl777/src/wallet/gtest/test_wallet.cpp	2017-01-03 09:49:08.872507185 +0000
***************
*** 5,11 ****
--- 5,13 ----
  #include "base58.h"
  #include "chainparams.h"
  #include "main.h"
+ #include "primitives/block.h"
  #include "random.h"
+ #include "utiltest.h"
  #include "wallet/wallet.h"
  #include "zcash/JoinSplit.hpp"
  #include "zcash/Note.hpp"
***************
*** 29,37 ****
  
      MOCK_METHOD2(WriteTx, bool(uint256 hash, const CWalletTx& wtx));
      MOCK_METHOD1(WriteWitnessCacheSize, bool(int64_t nWitnessCacheSize));
  };
  
! template void CWallet::WriteWitnessCache<MockWalletDB>(MockWalletDB& walletdb);
  
  class TestWallet : public CWallet {
  public:
--- 31,41 ----
  
      MOCK_METHOD2(WriteTx, bool(uint256 hash, const CWalletTx& wtx));
      MOCK_METHOD1(WriteWitnessCacheSize, bool(int64_t nWitnessCacheSize));
+     MOCK_METHOD1(WriteBestBlock, bool(const CBlockLocator& loc));
  };
  
! template void CWallet::SetBestChainINTERNAL<MockWalletDB>(
!         MockWalletDB& walletdb, const CBlockLocator& loc);
  
  class TestWallet : public CWallet {
  public:
***************
*** 50,60 ****
                                  ZCIncrementalMerkleTree tree) {
          CWallet::IncrementNoteWitnesses(pindex, pblock, tree);
      }
!     void DecrementNoteWitnesses() {
!         CWallet::DecrementNoteWitnesses();
      }
!     void WriteWitnessCache(MockWalletDB& walletdb) {
!         CWallet::WriteWitnessCache(walletdb);
      }
      bool UpdatedNoteData(const CWalletTx& wtxIn, CWalletTx& wtx) {
          return CWallet::UpdatedNoteData(wtxIn, wtx);
--- 54,64 ----
                                  ZCIncrementalMerkleTree tree) {
          CWallet::IncrementNoteWitnesses(pindex, pblock, tree);
      }
!     void DecrementNoteWitnesses(const CBlockIndex* pindex) {
!         CWallet::DecrementNoteWitnesses(pindex);
      }
!     void SetBestChain(MockWalletDB& walletdb, const CBlockLocator& loc) {
!         CWallet::SetBestChainINTERNAL(walletdb, loc);
      }
      bool UpdatedNoteData(const CWalletTx& wtxIn, CWalletTx& wtx) {
          return CWallet::UpdatedNoteData(wtxIn, wtx);
***************
*** 65,183 ****
  };
  
  CWalletTx GetValidReceive(const libzcash::SpendingKey& sk, CAmount value, bool randomInputs) {
!     CMutableTransaction mtx;
!     mtx.nVersion = 2; // Enable JoinSplits
!     mtx.vin.resize(2);
!     if (randomInputs) {
!         mtx.vin[0].prevout.hash = GetRandHash();
!         mtx.vin[1].prevout.hash = GetRandHash();
!     } else {
!         mtx.vin[0].prevout.hash = uint256S("0000000000000000000000000000000000000000000000000000000000000001");
!         mtx.vin[1].prevout.hash = uint256S("0000000000000000000000000000000000000000000000000000000000000002");
!     }
!     mtx.vin[0].prevout.n = 0;
!     mtx.vin[1].prevout.n = 0;
! 
!     // Generate an ephemeral keypair.
!     uint256 joinSplitPubKey;
!     unsigned char joinSplitPrivKey[crypto_sign_SECRETKEYBYTES];
!     crypto_sign_keypair(joinSplitPubKey.begin(), joinSplitPrivKey);
!     mtx.joinSplitPubKey = joinSplitPubKey;
! 
!     boost::array<libzcash::JSInput, 2> inputs = {
!         libzcash::JSInput(), // dummy input
!         libzcash::JSInput() // dummy input
!     };
! 
!     boost::array<libzcash::JSOutput, 2> outputs = {
!         libzcash::JSOutput(sk.address(), value),
!         libzcash::JSOutput(sk.address(), value)
!     };
! 
!     boost::array<libzcash::Note, 2> output_notes;
! 
!     // Prepare JoinSplits
!     uint256 rt;
!     JSDescription jsdesc {*params, mtx.joinSplitPubKey, rt,
!                           inputs, outputs, value, 0, false};
!     mtx.vjoinsplit.push_back(jsdesc);
! 
!     // Empty output script.
!     CScript scriptCode;
!     CTransaction signTx(mtx);
!     uint256 dataToBeSigned = SignatureHash(scriptCode, signTx, NOT_AN_INPUT, SIGHASH_ALL);
! 
!     // Add the signature
!     assert(crypto_sign_detached(&mtx.joinSplitSig[0], NULL,
!                          dataToBeSigned.begin(), 32,
!                          joinSplitPrivKey
!                         ) == 0);
! 
!     CTransaction tx {mtx};
!     CWalletTx wtx {NULL, tx};
!     return wtx;
  }
  
  libzcash::Note GetNote(const libzcash::SpendingKey& sk,
                         const CTransaction& tx, size_t js, size_t n) {
!     ZCNoteDecryption decryptor {sk.viewing_key()};
!     auto hSig = tx.vjoinsplit[js].h_sig(*params, tx.joinSplitPubKey);
!     auto note_pt = libzcash::NotePlaintext::decrypt(
!         decryptor,
!         tx.vjoinsplit[js].ciphertexts[n],
!         tx.vjoinsplit[js].ephemeralKey,
!         hSig,
!         (unsigned char) n);
!     return note_pt.note(sk.address());
  }
  
  CWalletTx GetValidSpend(const libzcash::SpendingKey& sk,
                          const libzcash::Note& note, CAmount value) {
!     CMutableTransaction mtx;
!     mtx.vout.resize(2);
!     mtx.vout[0].nValue = value;
!     mtx.vout[1].nValue = 0;
! 
!     // Generate an ephemeral keypair.
!     uint256 joinSplitPubKey;
!     unsigned char joinSplitPrivKey[crypto_sign_SECRETKEYBYTES];
!     crypto_sign_keypair(joinSplitPubKey.begin(), joinSplitPrivKey);
!     mtx.joinSplitPubKey = joinSplitPubKey;
! 
!     // Fake tree for the unused witness
!     ZCIncrementalMerkleTree tree;
! 
!     boost::array<libzcash::JSInput, 2> inputs = {
!         libzcash::JSInput(tree.witness(), note, sk),
!         libzcash::JSInput() // dummy input
!     };
! 
!     boost::array<libzcash::JSOutput, 2> outputs = {
!         libzcash::JSOutput(), // dummy output
!         libzcash::JSOutput() // dummy output
!     };
! 
!     boost::array<libzcash::Note, 2> output_notes;
! 
!     // Prepare JoinSplits
!     uint256 rt;
!     JSDescription jsdesc {*params, mtx.joinSplitPubKey, rt,
!                           inputs, outputs, 0, value, false};
!     mtx.vjoinsplit.push_back(jsdesc);
! 
!     // Empty output script.
!     CScript scriptCode;
!     CTransaction signTx(mtx);
!     uint256 dataToBeSigned = SignatureHash(scriptCode, signTx, NOT_AN_INPUT, SIGHASH_ALL);
! 
!     // Add the signature
!     assert(crypto_sign_detached(&mtx.joinSplitSig[0], NULL,
!                          dataToBeSigned.begin(), 32,
!                          joinSplitPrivKey
!                         ) == 0);
!     CTransaction tx {mtx};
!     CWalletTx wtx {NULL, tx};
!     return wtx;
  }
  
  TEST(wallet_tests, setup_datadir_location_run_as_first_test) {
--- 69,85 ----
  };
  
  CWalletTx GetValidReceive(const libzcash::SpendingKey& sk, CAmount value, bool randomInputs) {
!     return GetValidReceive(*params, sk, value, randomInputs);
  }
  
  libzcash::Note GetNote(const libzcash::SpendingKey& sk,
                         const CTransaction& tx, size_t js, size_t n) {
!     return GetNote(*params, sk, tx, js, n);
  }
  
  CWalletTx GetValidSpend(const libzcash::SpendingKey& sk,
                          const libzcash::Note& note, CAmount value) {
!     return GetValidSpend(*params, sk, note, value);
  }
  
  TEST(wallet_tests, setup_datadir_location_run_as_first_test) {
***************
*** 656,662 ****
      EXPECT_TRUE((bool) witnesses[1]);
  
      // Until #1302 is implemented, this should triggger an assertion
!     EXPECT_DEATH(wallet.DecrementNoteWitnesses(),
                   "Assertion `nWitnessCacheSize > 0' failed.");
  }
  
--- 558,564 ----
      EXPECT_TRUE((bool) witnesses[1]);
  
      // Until #1302 is implemented, this should triggger an assertion
!     EXPECT_DEATH(wallet.DecrementNoteWitnesses(&index),
                   "Assertion `nWitnessCacheSize > 0' failed.");
  }
  
***************
*** 729,735 ****
  
          // Decrementing should give us the previous anchor
          uint256 anchor3;
!         wallet.DecrementNoteWitnesses();
          witnesses.clear();
          wallet.GetNoteWitnesses(notes, witnesses, anchor3);
          EXPECT_FALSE((bool) witnesses[0]);
--- 631,637 ----
  
          // Decrementing should give us the previous anchor
          uint256 anchor3;
!         wallet.DecrementNoteWitnesses(&index2);
          witnesses.clear();
          wallet.GetNoteWitnesses(notes, witnesses, anchor3);
          EXPECT_FALSE((bool) witnesses[0]);
***************
*** 754,759 ****
--- 656,871 ----
      }
  }
  
+ TEST(wallet_tests, CachedWitnessesDecrementFirst) {
+     TestWallet wallet;
+     uint256 anchor2;
+     CBlock block2;
+     CBlockIndex index2(block2);
+     ZCIncrementalMerkleTree tree;
+ 
+     auto sk = libzcash::SpendingKey::random();
+     wallet.AddSpendingKey(sk);
+ 
+     {
+         // First transaction (case tested in _empty_chain)
+         auto wtx = GetValidReceive(sk, 10, true);
+         auto note = GetNote(sk, wtx, 0, 1);
+         auto nullifier = note.nullifier(sk);
+ 
+         mapNoteData_t noteData;
+         JSOutPoint jsoutpt {wtx.GetHash(), 0, 1};
+         CNoteData nd {sk.address(), nullifier};
+         noteData[jsoutpt] = nd;
+         wtx.SetNoteData(noteData);
+         wallet.AddToWallet(wtx, true, NULL);
+ 
+         // First block (case tested in _empty_chain)
+         CBlock block1;
+         block1.vtx.push_back(wtx);
+         CBlockIndex index1(block1);
+         index1.nHeight = 1;
+         wallet.IncrementNoteWitnesses(&index1, &block1, tree);
+     }
+ 
+     {
+         // Second transaction (case tested in _chain_tip)
+         auto wtx = GetValidReceive(sk, 50, true);
+         auto note = GetNote(sk, wtx, 0, 1);
+         auto nullifier = note.nullifier(sk);
+ 
+         mapNoteData_t noteData;
+         JSOutPoint jsoutpt {wtx.GetHash(), 0, 1};
+         CNoteData nd {sk.address(), nullifier};
+         noteData[jsoutpt] = nd;
+         wtx.SetNoteData(noteData);
+         wallet.AddToWallet(wtx, true, NULL);
+ 
+         std::vector<JSOutPoint> notes {jsoutpt};
+         std::vector<boost::optional<ZCIncrementalWitness>> witnesses;
+ 
+         // Second block (case tested in _chain_tip)
+         block2.vtx.push_back(wtx);
+         index2.nHeight = 2;
+         wallet.IncrementNoteWitnesses(&index2, &block2, tree);
+         // Called to fetch anchor
+         wallet.GetNoteWitnesses(notes, witnesses, anchor2);
+     }
+ 
+     {
+         // Third transaction - never mined
+         auto wtx = GetValidReceive(sk, 20, true);
+         auto note = GetNote(sk, wtx, 0, 1);
+         auto nullifier = note.nullifier(sk);
+ 
+         mapNoteData_t noteData;
+         JSOutPoint jsoutpt {wtx.GetHash(), 0, 1};
+         CNoteData nd {sk.address(), nullifier};
+         noteData[jsoutpt] = nd;
+         wtx.SetNoteData(noteData);
+         wallet.AddToWallet(wtx, true, NULL);
+ 
+         std::vector<JSOutPoint> notes {jsoutpt};
+         std::vector<boost::optional<ZCIncrementalWitness>> witnesses;
+         uint256 anchor3;
+ 
+         wallet.GetNoteWitnesses(notes, witnesses, anchor3);
+         EXPECT_FALSE((bool) witnesses[0]);
+ 
+         // Decrementing (before the transaction has ever seen an increment)
+         // should give us the previous anchor
+         uint256 anchor4;
+         wallet.DecrementNoteWitnesses(&index2);
+         witnesses.clear();
+         wallet.GetNoteWitnesses(notes, witnesses, anchor4);
+         EXPECT_FALSE((bool) witnesses[0]);
+         // Should not equal second anchor because none of these notes had witnesses
+         EXPECT_NE(anchor2, anchor4);
+ 
+         // Re-incrementing with the same block should give the same result
+         uint256 anchor5;
+         wallet.IncrementNoteWitnesses(&index2, &block2, tree);
+         witnesses.clear();
+         wallet.GetNoteWitnesses(notes, witnesses, anchor5);
+         EXPECT_FALSE((bool) witnesses[0]);
+         EXPECT_EQ(anchor3, anchor5);
+     }
+ }
+ 
+ TEST(wallet_tests, CachedWitnessesCleanIndex) {
+     TestWallet wallet;
+     CBlock block1;
+     CBlock block2;
+     CBlock block3;
+     CBlockIndex index1(block1);
+     CBlockIndex index2(block2);
+     CBlockIndex index3(block3);
+     ZCIncrementalMerkleTree tree;
+ 
+     auto sk = libzcash::SpendingKey::random();
+     wallet.AddSpendingKey(sk);
+ 
+     {
+         // First transaction (case tested in _empty_chain)
+         auto wtx = GetValidReceive(sk, 10, true);
+         auto note = GetNote(sk, wtx, 0, 1);
+         auto nullifier = note.nullifier(sk);
+ 
+         mapNoteData_t noteData;
+         JSOutPoint jsoutpt {wtx.GetHash(), 0, 1};
+         CNoteData nd {sk.address(), nullifier};
+         noteData[jsoutpt] = nd;
+         wtx.SetNoteData(noteData);
+         wallet.AddToWallet(wtx, true, NULL);
+ 
+         // First block (case tested in _empty_chain)
+         block1.vtx.push_back(wtx);
+         index1.nHeight = 1;
+         wallet.IncrementNoteWitnesses(&index1, &block1, tree);
+     }
+ 
+     {
+         // Second transaction (case tested in _chain_tip)
+         auto wtx = GetValidReceive(sk, 50, true);
+         auto note = GetNote(sk, wtx, 0, 1);
+         auto nullifier = note.nullifier(sk);
+ 
+         mapNoteData_t noteData;
+         JSOutPoint jsoutpt {wtx.GetHash(), 0, 1};
+         CNoteData nd {sk.address(), nullifier};
+         noteData[jsoutpt] = nd;
+         wtx.SetNoteData(noteData);
+         wallet.AddToWallet(wtx, true, NULL);
+ 
+         // Second block (case tested in _chain_tip)
+         block2.vtx.push_back(wtx);
+         index2.nHeight = 2;
+         wallet.IncrementNoteWitnesses(&index2, &block2, tree);
+     }
+ 
+     {
+         // Third transaction
+         auto wtx = GetValidReceive(sk, 20, true);
+         auto note = GetNote(sk, wtx, 0, 1);
+         auto nullifier = note.nullifier(sk);
+ 
+         mapNoteData_t noteData;
+         JSOutPoint jsoutpt {wtx.GetHash(), 0, 1};
+         CNoteData nd {sk.address(), nullifier};
+         noteData[jsoutpt] = nd;
+         wtx.SetNoteData(noteData);
+         wallet.AddToWallet(wtx, true, NULL);
+ 
+         std::vector<JSOutPoint> notes {jsoutpt};
+         std::vector<boost::optional<ZCIncrementalWitness>> witnesses;
+         uint256 anchor3;
+ 
+         // Third block
+         block3.vtx.push_back(wtx);
+         index3.nHeight = 3;
+         wallet.IncrementNoteWitnesses(&index3, &block3, tree);
+         wallet.GetNoteWitnesses(notes, witnesses, anchor3);
+ 
+         // Now pretend we are reindexing: the chain is cleared, and each block is
+         // used to increment witnesses again.
+         wallet.IncrementNoteWitnesses(&index1, &block1, tree);
+         uint256 anchor3a;
+         witnesses.clear();
+         wallet.GetNoteWitnesses(notes, witnesses, anchor3a);
+         EXPECT_TRUE((bool) witnesses[0]);
+         // Should equal third anchor because witness cache unaffected
+         EXPECT_EQ(anchor3, anchor3a);
+ 
+         wallet.IncrementNoteWitnesses(&index2, &block2, tree);
+         uint256 anchor3b;
+         witnesses.clear();
+         wallet.GetNoteWitnesses(notes, witnesses, anchor3b);
+         EXPECT_TRUE((bool) witnesses[0]);
+         EXPECT_EQ(anchor3, anchor3b);
+ 
+         // Pretend a reorg happened that was recorded in the block files
+         wallet.DecrementNoteWitnesses(&index2);
+         uint256 anchor3c;
+         witnesses.clear();
+         wallet.GetNoteWitnesses(notes, witnesses, anchor3c);
+         EXPECT_TRUE((bool) witnesses[0]);
+         EXPECT_EQ(anchor3, anchor3c);
+ 
+         wallet.IncrementNoteWitnesses(&index2, &block2, tree);
+         uint256 anchor3d;
+         witnesses.clear();
+         wallet.GetNoteWitnesses(notes, witnesses, anchor3d);
+         EXPECT_TRUE((bool) witnesses[0]);
+         EXPECT_EQ(anchor3, anchor3d);
+ 
+         wallet.IncrementNoteWitnesses(&index3, &block3, tree);
+         uint256 anchor3e;
+         witnesses.clear();
+         wallet.GetNoteWitnesses(notes, witnesses, anchor3e);
+         EXPECT_TRUE((bool) witnesses[0]);
+         EXPECT_EQ(anchor3, anchor3e);
+     }
+ }
+ 
  TEST(wallet_tests, ClearNoteWitnessCache) {
      TestWallet wallet;
  
***************
*** 761,766 ****
--- 873,879 ----
      wallet.AddSpendingKey(sk);
  
      auto wtx = GetValidReceive(sk, 10, true);
+     auto hash = wtx.GetHash();
      auto note = GetNote(sk, wtx, 0, 0);
      auto nullifier = note.nullifier(sk);
  
***************
*** 774,779 ****
--- 887,894 ----
      // Pretend we mined the tx by adding a fake witness
      ZCIncrementalMerkleTree tree;
      wtx.mapNoteData[jsoutpt].witnesses.push_front(tree.witness());
+     wtx.mapNoteData[jsoutpt].witnessHeight = 1;
+     wallet.nWitnessCacheSize = 1;
  
      wallet.AddToWallet(wtx, true, NULL);
  
***************
*** 785,790 ****
--- 900,907 ----
      wallet.GetNoteWitnesses(notes, witnesses, anchor2);
      EXPECT_TRUE((bool) witnesses[0]);
      EXPECT_FALSE((bool) witnesses[1]);
+     EXPECT_EQ(1, wallet.mapWallet[hash].mapNoteData[jsoutpt].witnessHeight);
+     EXPECT_EQ(1, wallet.nWitnessCacheSize);
  
      // After clearing, we should not have a witness for either note
      wallet.ClearNoteWitnessCache();
***************
*** 792,802 ****
--- 909,922 ----
      wallet.GetNoteWitnesses(notes, witnesses, anchor2);
      EXPECT_FALSE((bool) witnesses[0]);
      EXPECT_FALSE((bool) witnesses[1]);
+     EXPECT_EQ(-1, wallet.mapWallet[hash].mapNoteData[jsoutpt].witnessHeight);
+     EXPECT_EQ(0, wallet.nWitnessCacheSize);
  }
  
  TEST(wallet_tests, WriteWitnessCache) {
      TestWallet wallet;
      MockWalletDB walletdb;
+     CBlockLocator loc;
  
      auto sk = libzcash::SpendingKey::random();
      wallet.AddSpendingKey(sk);
***************
*** 807,813 ****
      // TxnBegin fails
      EXPECT_CALL(walletdb, TxnBegin())
          .WillOnce(Return(false));
!     wallet.WriteWitnessCache(walletdb);
      EXPECT_CALL(walletdb, TxnBegin())
          .WillRepeatedly(Return(true));
  
--- 927,933 ----
      // TxnBegin fails
      EXPECT_CALL(walletdb, TxnBegin())
          .WillOnce(Return(false));
!     wallet.SetBestChain(walletdb, loc);
      EXPECT_CALL(walletdb, TxnBegin())
          .WillRepeatedly(Return(true));
  
***************
*** 816,829 ****
          .WillOnce(Return(false));
      EXPECT_CALL(walletdb, TxnAbort())
          .Times(1);
!     wallet.WriteWitnessCache(walletdb);
  
      // WriteTx throws
      EXPECT_CALL(walletdb, WriteTx(wtx.GetHash(), wtx))
          .WillOnce(ThrowLogicError());
      EXPECT_CALL(walletdb, TxnAbort())
          .Times(1);
!     wallet.WriteWitnessCache(walletdb);
      EXPECT_CALL(walletdb, WriteTx(wtx.GetHash(), wtx))
          .WillRepeatedly(Return(true));
  
--- 936,949 ----
          .WillOnce(Return(false));
      EXPECT_CALL(walletdb, TxnAbort())
          .Times(1);
!     wallet.SetBestChain(walletdb, loc);
  
      // WriteTx throws
      EXPECT_CALL(walletdb, WriteTx(wtx.GetHash(), wtx))
          .WillOnce(ThrowLogicError());
      EXPECT_CALL(walletdb, TxnAbort())
          .Times(1);
!     wallet.SetBestChain(walletdb, loc);
      EXPECT_CALL(walletdb, WriteTx(wtx.GetHash(), wtx))
          .WillRepeatedly(Return(true));
  
***************
*** 832,857 ****
          .WillOnce(Return(false));
      EXPECT_CALL(walletdb, TxnAbort())
          .Times(1);
!     wallet.WriteWitnessCache(walletdb);
  
      // WriteWitnessCacheSize throws
      EXPECT_CALL(walletdb, WriteWitnessCacheSize(0))
          .WillOnce(ThrowLogicError());
      EXPECT_CALL(walletdb, TxnAbort())
          .Times(1);
!     wallet.WriteWitnessCache(walletdb);
      EXPECT_CALL(walletdb, WriteWitnessCacheSize(0))
          .WillRepeatedly(Return(true));
  
      // TxCommit fails
      EXPECT_CALL(walletdb, TxnCommit())
          .WillOnce(Return(false));
!     wallet.WriteWitnessCache(walletdb);
      EXPECT_CALL(walletdb, TxnCommit())
          .WillRepeatedly(Return(true));
  
      // Everything succeeds
!     wallet.WriteWitnessCache(walletdb);
  }
  
  TEST(wallet_tests, UpdateNullifierNoteMap) {
--- 952,993 ----
          .WillOnce(Return(false));
      EXPECT_CALL(walletdb, TxnAbort())
          .Times(1);
!     wallet.SetBestChain(walletdb, loc);
  
      // WriteWitnessCacheSize throws
      EXPECT_CALL(walletdb, WriteWitnessCacheSize(0))
          .WillOnce(ThrowLogicError());
      EXPECT_CALL(walletdb, TxnAbort())
          .Times(1);
!     wallet.SetBestChain(walletdb, loc);
      EXPECT_CALL(walletdb, WriteWitnessCacheSize(0))
          .WillRepeatedly(Return(true));
  
+     // WriteBestBlock fails
+     EXPECT_CALL(walletdb, WriteBestBlock(loc))
+         .WillOnce(Return(false));
+     EXPECT_CALL(walletdb, TxnAbort())
+         .Times(1);
+     wallet.SetBestChain(walletdb, loc);
+ 
+     // WriteBestBlock throws
+     EXPECT_CALL(walletdb, WriteBestBlock(loc))
+         .WillOnce(ThrowLogicError());
+     EXPECT_CALL(walletdb, TxnAbort())
+         .Times(1);
+     wallet.SetBestChain(walletdb, loc);
+     EXPECT_CALL(walletdb, WriteBestBlock(loc))
+         .WillRepeatedly(Return(true));
+ 
      // TxCommit fails
      EXPECT_CALL(walletdb, TxnCommit())
          .WillOnce(Return(false));
!     wallet.SetBestChain(walletdb, loc);
      EXPECT_CALL(walletdb, TxnCommit())
          .WillRepeatedly(Return(true));
  
      // Everything succeeds
!     wallet.SetBestChain(walletdb, loc);
  }
  
  TEST(wallet_tests, UpdateNullifierNoteMap) {
***************
*** 913,918 ****
--- 1049,1055 ----
      // Pretend we mined the tx by adding a fake witness
      ZCIncrementalMerkleTree tree;
      wtx.mapNoteData[jsoutpt].witnesses.push_front(tree.witness());
+     wtx.mapNoteData[jsoutpt].witnessHeight = 100;
  
      // Now pretend we added the key for the second note, and
      // the tx was "added" to the wallet again to update it.
***************
*** 925,935 ****
--- 1062,1074 ----
      // The txs should initially be different
      EXPECT_NE(wtx.mapNoteData, wtx2.mapNoteData);
      EXPECT_EQ(1, wtx.mapNoteData[jsoutpt].witnesses.size());
+     EXPECT_EQ(100, wtx.mapNoteData[jsoutpt].witnessHeight);
  
      // After updating, they should be the same
      EXPECT_TRUE(wallet.UpdatedNoteData(wtx2, wtx));
      EXPECT_EQ(wtx.mapNoteData, wtx2.mapNoteData);
      EXPECT_EQ(1, wtx.mapNoteData[jsoutpt].witnesses.size());
+     EXPECT_EQ(100, wtx.mapNoteData[jsoutpt].witnessHeight);
      // TODO: The new note should get witnessed (but maybe not here) (#1350)
  }
  
diff -crB ./src/wallet/rpcwallet.cpp ../../komodo-jl777/src/wallet/rpcwallet.cpp
*** ./src/wallet/rpcwallet.cpp	2017-01-03 10:40:50.431340299 +0000
--- ../../komodo-jl777/src/wallet/rpcwallet.cpp	2017-01-03 09:49:08.876507395 +0000
***************
*** 2622,2627 ****
--- 2622,2633 ----
              sample_times.push_back(benchmark_verify_equihash());
          } else if (benchmarktype == "validatelargetx") {
              sample_times.push_back(benchmark_large_tx());
+         } else if (benchmarktype == "trydecryptnotes") {
+             int nAddrs = params[2].get_int();
+             sample_times.push_back(benchmark_try_decrypt_notes(nAddrs));
+         } else if (benchmarktype == "incnotewitnesses") {
+             int nTxs = params[2].get_int();
+             sample_times.push_back(benchmark_increment_note_witnesses(nTxs));
          } else {
              throw JSONRPCError(RPC_TYPE_ERROR, "Invalid benchmarktype");
          }
***************
*** 2849,2855 ****
                           vpub_old,
                           vpub_new);
  
!     assert(jsdesc.Verify(*pzcashParams, joinSplitPubKey));
  
      mtx.vjoinsplit.push_back(jsdesc);
  
--- 2855,2864 ----
                           vpub_old,
                           vpub_new);
  
!     {
!         auto verifier = libzcash::ProofVerifier::Strict();
!         assert(jsdesc.Verify(*pzcashParams, verifier, joinSplitPubKey));
!     }
  
      mtx.vjoinsplit.push_back(jsdesc);
  
***************
*** 3310,3326 ****
      return ret;
  }
  
  Value z_sendmany(const Array& params, bool fHelp)
  {
      if (!EnsureWalletIsAvailable(fHelp))
          return Value::null;
  
!     if (fHelp || params.size() < 2 || params.size() > 3)
          throw runtime_error(
!             "z_sendmany \"fromaddress\" [{\"address\":... ,\"amount\":...},...] ( minconf )\n"
              "\nSend multiple times. Amounts are double-precision floating point numbers."
              "\nChange from a taddr flows to a new taddr address, while change from zaddr returns to itself."
!             "\nWhen sending coinbase UTXOs to a zaddr, change is not alllowed. The entire value of the UTXO(s) must be consumed."
              + HelpRequiringPassphrase() + "\n"
              "\nArguments:\n"
              "1. \"fromaddress\"         (string, required) The taddr or zaddr to send the funds from.\n"
--- 3319,3347 ----
      return ret;
  }
  
+ 
+ // Here we define the maximum number of zaddr outputs that can be included in a transaction.
+ // If input notes are small, we might actually require more than one joinsplit per zaddr output.
+ // For now though, we assume we use one joinsplit per zaddr output (and the second output note is change).
+ // We reduce the result by 1 to ensure there is room for non-joinsplit CTransaction data.
+ #define Z_SENDMANY_MAX_ZADDR_OUTPUTS    ((MAX_TX_SIZE / JSDescription().GetSerializeSize(SER_NETWORK, PROTOCOL_VERSION)) - 1)
+ 
+ // transaction.h comment: spending taddr output requires CTxIn >= 148 bytes and typical taddr txout is 34 bytes
+ #define CTXIN_SPEND_DUST_SIZE   148
+ #define CTXOUT_REGULAR_SIZE     34
+ 
  Value z_sendmany(const Array& params, bool fHelp)
  {
      if (!EnsureWalletIsAvailable(fHelp))
          return Value::null;
  
!     if (fHelp || params.size() < 2 || params.size() > 4)
          throw runtime_error(
!             "z_sendmany \"fromaddress\" [{\"address\":... ,\"amount\":...},...] ( minconf ) ( fee )\n"
              "\nSend multiple times. Amounts are double-precision floating point numbers."
              "\nChange from a taddr flows to a new taddr address, while change from zaddr returns to itself."
!             "\nWhen sending coinbase UTXOs to a zaddr, change is not allowed. The entire value of the UTXO(s) must be consumed."
!             + strprintf("\nCurrently, the maximum number of zaddr outputs is %d due to transaction size limits.\n", Z_SENDMANY_MAX_ZADDR_OUTPUTS)
              + HelpRequiringPassphrase() + "\n"
              "\nArguments:\n"
              "1. \"fromaddress\"         (string, required) The taddr or zaddr to send the funds from.\n"
***************
*** 3331,3336 ****
--- 3352,3359 ----
              "      \"memo\":memo        (string, optional) If the address is a zaddr, raw data represented in hexadecimal string format\n"
              "    }, ... ]\n"
              "3. minconf               (numeric, optional, default=1) Only use funds confirmed at least this many times.\n"
+             "4. fee                   (numeric, optional, default="
+             + strprintf("%s", FormatMoney(ASYNC_RPC_OPERATION_DEFAULT_MINERS_FEE)) + ") The fee amount to attach to this transaction.\n"
              "\nResult:\n"
              "\"operationid\"          (string) An operationid to pass to z_getoperationstatus to get the result of the operation.\n"
          );
***************
*** 3371,3376 ****
--- 3394,3400 ----
      // Recipients
      std::vector<SendManyRecipient> taddrRecipients;
      std::vector<SendManyRecipient> zaddrRecipients;
+     CAmount nTotalOut = 0;
  
      BOOST_FOREACH(Value& output, outputs)
      {
***************
*** 3426,3431 ****
--- 3450,3481 ----
          } else {
              taddrRecipients.push_back( SendManyRecipient(address, nAmount, memo) );
          }
+ 
+         nTotalOut += nAmount;
+     }
+ 
+     // Check the number of zaddr outputs does not exceed the limit.
+     if (zaddrRecipients.size() > Z_SENDMANY_MAX_ZADDR_OUTPUTS)  {
+         throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, too many zaddr outputs");
+     }
+ 
+     // As a sanity check, estimate and verify that the size of the transaction will be valid.
+     // Depending on the input notes, the actual tx size may turn out to be larger and perhaps invalid.
+     size_t txsize = 0;
+     CMutableTransaction mtx;
+     mtx.nVersion = 2;
+     for (int i = 0; i < zaddrRecipients.size(); i++) {
+         mtx.vjoinsplit.push_back(JSDescription());
+     }
+     CTransaction tx(mtx);
+     txsize += tx.GetSerializeSize(SER_NETWORK, tx.nVersion);
+     if (fromTaddr) {
+         txsize += CTXIN_SPEND_DUST_SIZE;
+         txsize += CTXOUT_REGULAR_SIZE;      // There will probably be taddr change
+     }
+     txsize += CTXOUT_REGULAR_SIZE * taddrRecipients.size();
+     if (txsize > MAX_TX_SIZE) {
+         throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Too many outputs, size of raw transaction would be larger than limit of %d bytes", MAX_TX_SIZE ));
      }
  
      // Minimum confirmations
***************
*** 3437,3445 ****
          throw JSONRPCError(RPC_INVALID_PARAMETER, "Minimum number of confirmations cannot be less than 0");
      }
  
      // Create operation and add to global queue
      std::shared_ptr<AsyncRPCQueue> q = getAsyncRPCQueue();
!     std::shared_ptr<AsyncRPCOperation> operation( new AsyncRPCOperation_sendmany(fromaddress, taddrRecipients, zaddrRecipients, nMinDepth) );
      q->addOperation(operation);
      AsyncRPCOperationId operationId = operation->getId();
      return operationId;
--- 3487,3505 ----
          throw JSONRPCError(RPC_INVALID_PARAMETER, "Minimum number of confirmations cannot be less than 0");
      }
  
+     // Fee in Zatoshis, not currency format)
+     CAmount nFee = ASYNC_RPC_OPERATION_DEFAULT_MINERS_FEE;
+     if (params.size() > 3) {
+         nFee = AmountFromValue( params[3] );
+         // Check that the user specified fee is sane.
+         if (nFee > nTotalOut) {
+             throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Fee %s is greater than the sum of outputs %s", FormatMoney(nFee), FormatMoney(nTotalOut)));
+         }
+     }
+ 
      // Create operation and add to global queue
      std::shared_ptr<AsyncRPCQueue> q = getAsyncRPCQueue();
!     std::shared_ptr<AsyncRPCOperation> operation( new AsyncRPCOperation_sendmany(fromaddress, taddrRecipients, zaddrRecipients, nMinDepth, nFee) );
      q->addOperation(operation);
      AsyncRPCOperationId operationId = operation->getId();
      return operationId;
diff -crB ./src/wallet/wallet.cpp ../../komodo-jl777/src/wallet/wallet.cpp
*** ./src/wallet/wallet.cpp	2017-01-03 10:40:50.431340299 +0000
--- ../../komodo-jl777/src/wallet/wallet.cpp	2017-01-03 09:49:08.876507395 +0000
***************
*** 373,386 ****
      if (added) {
          IncrementNoteWitnesses(pindex, pblock, tree);
      } else {
!         DecrementNoteWitnesses();
      }
  }
  
  void CWallet::SetBestChain(const CBlockLocator& loc)
  {
      CWalletDB walletdb(strWalletFile);
!     walletdb.WriteBestBlock(loc);
  }
  
  bool CWallet::SetMinVersion(enum WalletFeature nVersion, CWalletDB* pwalletdbIn, bool fExplicit)
--- 373,386 ----
      if (added) {
          IncrementNoteWitnesses(pindex, pblock, tree);
      } else {
!         DecrementNoteWitnesses(pindex);
      }
  }
  
  void CWallet::SetBestChain(const CBlockLocator& loc)
  {
      CWalletDB walletdb(strWalletFile);
!     SetBestChainINTERNAL(walletdb, loc);
  }
  
  bool CWallet::SetMinVersion(enum WalletFeature nVersion, CWalletDB* pwalletdbIn, bool fExplicit)
***************
*** 630,637 ****
--- 630,639 ----
      for (std::pair<const uint256, CWalletTx>& wtxItem : mapWallet) {
          for (mapNoteData_t::value_type& item : wtxItem.second.mapNoteData) {
              item.second.witnesses.clear();
+             item.second.witnessHeight = -1;
          }
      }
+     nWitnessCacheSize = 0;
  }
  
  void CWallet::IncrementNoteWitnesses(const CBlockIndex* pindex,
***************
*** 648,654 ****
                  // Only increment witnesses that are behind the current height
                  if (nd->witnessHeight < pindex->nHeight) {
                      // Witnesses being incremented should always be either -1
!                     // (never incremented) or one below pindex
                      assert((nd->witnessHeight == -1) ||
                             (nd->witnessHeight == pindex->nHeight - 1));
                      // Copy the witness for the previous block if we have one
--- 650,656 ----
                  // Only increment witnesses that are behind the current height
                  if (nd->witnessHeight < pindex->nHeight) {
                      // Witnesses being incremented should always be either -1
!                     // (never incremented or decremented) or one below pindex
                      assert((nd->witnessHeight == -1) ||
                             (nd->witnessHeight == pindex->nHeight - 1));
                      // Copy the witness for the previous block if we have one
***************
*** 739,752 ****
              }
          }
  
!         if (fFileBacked) {
!             CWalletDB walletdb(strWalletFile);
!             WriteWitnessCache(walletdb);
!         }
      }
  }
  
! void CWallet::DecrementNoteWitnesses()
  {
      extern int32_t KOMODO_REWIND;
      {
--- 741,753 ----
              }
          }
  
!         // For performance reasons, we write out the witness cache in
!         // CWallet::SetBestChain() (which also ensures that overall consistency
!         // of the wallet.dat is maintained).
      }
  }
  
! void CWallet::DecrementNoteWitnesses(const CBlockIndex* pindex)
  {
      extern int32_t KOMODO_REWIND;
      {
***************
*** 756,765 ****
                  CNoteData* nd = &(item.second);
                  // Check the validity of the cache
                  assert(nWitnessCacheSize >= nd->witnesses.size());
!                 if (nd->witnesses.size() > 0) {
!                     nd->witnesses.pop_front();
                  }
-                 nd->witnessHeight -= 1;
              }
          }
          nWitnessCacheSize -= 1;
--- 757,775 ----
                  CNoteData* nd = &(item.second);
                  // Check the validity of the cache
                  assert(nWitnessCacheSize >= nd->witnesses.size());
!                 // Only increment witnesses that are not above the current height
!                 if (nd->witnessHeight <= pindex->nHeight) {
!                     // Witnesses being decremented should always be either -1
!                     // (never incremented or decremented) or equal to pindex
!                     assert((nd->witnessHeight == -1) ||
!                            (nd->witnessHeight == pindex->nHeight));
!                     if (nd->witnesses.size() > 0) {
!                         nd->witnesses.pop_front();
!                     }
!                     // pindex is the block being removed, so the new witness cache
!                     // height is one below it.
!                     nd->witnessHeight = pindex->nHeight - 1;
                  }
              }
          }
          nWitnessCacheSize -= 1;
***************
*** 770,776 ****
                  assert(nWitnessCacheSize >= nd->witnesses.size());
              }
          }
-         // TODO: If nWitnessCache is zero, we need to regenerate the caches (#1302)
          if ( nWitnessCacheSize <= 0 )
          {
              extern char ASSETCHAINS_SYMBOL[16];
--- 780,785 ----
***************
*** 778,787 ****
          }
          if ( KOMODO_REWIND == 0 )
              assert(nWitnessCacheSize > 0);
!         if (fFileBacked) {
!             CWalletDB walletdb(strWalletFile);
!             WriteWitnessCache(walletdb);
!         }
      }
  }
  
--- 787,799 ----
          }
          if ( KOMODO_REWIND == 0 )
              assert(nWitnessCacheSize > 0);
!         //if (fFileBacked) {
!         //    CWalletDB walletdb(strWalletFile);
!         //    WriteWitnessCache(walletdb);
!         //}
!         // For performance reasons, we write out the witness cache in
!         // CWallet::SetBestChain() (which also ensures that overall consistency
!         // of the wallet.dat is maintained).
      }
  }
  
***************
*** 1109,1114 ****
--- 1121,1127 ----
              tmp.at(nd.first).witnesses.assign(
                  nd.second.witnesses.cbegin(), nd.second.witnesses.cend());
          }
+         tmp.at(nd.first).witnessHeight = nd.second.witnessHeight;
      }
      // Now copy over the updated note data
      wtx.mapNoteData = tmp;
diff -crB ./src/wallet/wallet.h ../../komodo-jl777/src/wallet/wallet.h
*** ./src/wallet/wallet.h	2017-01-03 10:40:50.431340299 +0000
--- ../../komodo-jl777/src/wallet/wallet.h	2017-01-03 09:49:08.876507395 +0000
***************
*** 225,231 ****
       */
      std::list<ZCIncrementalWitness> witnesses;
  
!     /** Block height corresponding to the most current witness. */
      int witnessHeight;
  
      CNoteData() : address(), nullifier(), witnessHeight {-1} { }
--- 225,239 ----
       */
      std::list<ZCIncrementalWitness> witnesses;
  
!     /**
!      * Block height corresponding to the most current witness.
!      *
!      * When we first create a CNoteData in CWallet::FindMyNotes, this is set to
!      * -1 as a placeholder. The next time CWallet::ChainTip is called, we can
!      * determine what height the witness cache for this note is valid for (even
!      * if no witnesses were cached), and so can set the correct value in
!      * CWallet::IncrementNoteWitnesses and CWallet::DecrementNoteWitnesses.
!      */
      int witnessHeight;
  
      CNoteData() : address(), nullifier(), witnessHeight {-1} { }
***************
*** 620,660 ****
      void ClearNoteWitnessCache();
  
  protected:
      void IncrementNoteWitnesses(const CBlockIndex* pindex,
                                  const CBlock* pblock,
                                  ZCIncrementalMerkleTree& tree);
!     void DecrementNoteWitnesses();
  
      template <typename WalletDB>
!     void WriteWitnessCache(WalletDB& walletdb) {
          if (!walletdb.TxnBegin()) {
              // This needs to be done atomically, so don't do it at all
!             LogPrintf("WriteWitnessCache(): Couldn't start atomic write\n");
              return;
          }
          try {
              for (std::pair<const uint256, CWalletTx>& wtxItem : mapWallet) {
                  if (!walletdb.WriteTx(wtxItem.first, wtxItem.second)) {
!                     LogPrintf("WriteWitnessCache(): Failed to write CWalletTx, aborting atomic write\n");
                      walletdb.TxnAbort();
                      return;
                  }
              }
              if (!walletdb.WriteWitnessCacheSize(nWitnessCacheSize)) {
!                 LogPrintf("WriteWitnessCache(): Failed to write nWitnessCacheSize, aborting atomic write\n");
                  walletdb.TxnAbort();
                  return;
              }
          } catch (const std::exception &exc) {
              // Unexpected failure
!             LogPrintf("WriteWitnessCache(): Unexpected error during atomic write:\n");
              LogPrintf("%s\n", exc.what());
              walletdb.TxnAbort();
              return;
          }
          if (!walletdb.TxnCommit()) {
              // Couldn't commit all to db, but in-memory state is fine
!             LogPrintf("WriteWitnessCache(): Couldn't commit atomic write\n");
              return;
          }
      }
--- 628,679 ----
      void ClearNoteWitnessCache();
  
  protected:
+     /**
+      * pindex is the new tip being connected.
+      */
      void IncrementNoteWitnesses(const CBlockIndex* pindex,
                                  const CBlock* pblock,
                                  ZCIncrementalMerkleTree& tree);
!     /**
!      * pindex is the old tip being disconnected.
!      */
!     void DecrementNoteWitnesses(const CBlockIndex* pindex);
  
      template <typename WalletDB>
!     void SetBestChainINTERNAL(WalletDB& walletdb, const CBlockLocator& loc) {
          if (!walletdb.TxnBegin()) {
              // This needs to be done atomically, so don't do it at all
!             LogPrintf("SetBestChain(): Couldn't start atomic write\n");
              return;
          }
          try {
              for (std::pair<const uint256, CWalletTx>& wtxItem : mapWallet) {
                  if (!walletdb.WriteTx(wtxItem.first, wtxItem.second)) {
!                     LogPrintf("SetBestChain(): Failed to write CWalletTx, aborting atomic write\n");
                      walletdb.TxnAbort();
                      return;
                  }
              }
              if (!walletdb.WriteWitnessCacheSize(nWitnessCacheSize)) {
!                 LogPrintf("SetBestChain(): Failed to write nWitnessCacheSize, aborting atomic write\n");
!                 walletdb.TxnAbort();
!                 return;
!             }
!             if (!walletdb.WriteBestBlock(loc)) {
!                 LogPrintf("SetBestChain(): Failed to write best block, aborting atomic write\n");
                  walletdb.TxnAbort();
                  return;
              }
          } catch (const std::exception &exc) {
              // Unexpected failure
!             LogPrintf("SetBestChain(): Unexpected error during atomic write:\n");
              LogPrintf("%s\n", exc.what());
              walletdb.TxnAbort();
              return;
          }
          if (!walletdb.TxnCommit()) {
              // Couldn't commit all to db, but in-memory state is fine
!             LogPrintf("SetBestChain(): Couldn't commit atomic write\n");
              return;
          }
      }
***************
*** 944,949 ****
--- 963,969 ----
      CAmount GetCredit(const CTransaction& tx, const isminefilter& filter) const;
      CAmount GetChange(const CTransaction& tx) const;
      void ChainTip(const CBlockIndex *pindex, const CBlock *pblock, ZCIncrementalMerkleTree tree, bool added);
+     /** Saves witness caches and best block locator to disk. */
      void SetBestChain(const CBlockLocator& loc);
  
      DBErrors LoadWallet(bool& fFirstRunRet);
diff -crB ./src/zcash/GenerateParams.cpp ../../komodo-jl777/src/zcash/GenerateParams.cpp
*** ./src/zcash/GenerateParams.cpp	2017-01-03 10:40:50.435340501 +0000
--- ../../komodo-jl777/src/zcash/GenerateParams.cpp	2017-01-03 09:49:08.876507395 +0000
***************
*** 9,26 ****
          return 1;
      }
  
!     if(argc != 3) {
!         std::cerr << "Usage: " << argv[0] << " provingKeyFileName verificationKeyFileName" << std::endl;
          return 1;
      }
  
      std::string pkFile = argv[1];
      std::string vkFile = argv[2];
  
      auto p = ZCJoinSplit::Generate();
  
      p->saveProvingKey(pkFile);
      p->saveVerifyingKey(vkFile);
  
      delete p;
  
--- 9,28 ----
          return 1;
      }
  
!     if(argc != 4) {
!         std::cerr << "Usage: " << argv[0] << " provingKeyFileName verificationKeyFileName r1csFileName" << std::endl;
          return 1;
      }
  
      std::string pkFile = argv[1];
      std::string vkFile = argv[2];
+     std::string r1csFile = argv[3];
  
      auto p = ZCJoinSplit::Generate();
  
      p->saveProvingKey(pkFile);
      p->saveVerifyingKey(vkFile);
+     p->saveR1CS(r1csFile);
  
      delete p;
  
diff -crB ./src/zcash/IncrementalMerkleTree.cpp ../../komodo-jl777/src/zcash/IncrementalMerkleTree.cpp
*** ./src/zcash/IncrementalMerkleTree.cpp	2017-01-03 10:40:50.435340501 +0000
--- ../../komodo-jl777/src/zcash/IncrementalMerkleTree.cpp	2017-01-03 09:49:08.876507395 +0000
***************
*** 71,76 ****
--- 71,87 ----
  }
  
  template<size_t Depth, typename Hash>
+ Hash IncrementalMerkleTree<Depth, Hash>::last() const {
+     if (right) {
+         return *right;
+     } else if (left) {
+         return *left;
+     } else {
+         throw std::runtime_error("tree has no cursor");
+     }
+ }
+ 
+ template<size_t Depth, typename Hash>
  void IncrementalMerkleTree<Depth, Hash>::append(Hash obj) {
      if (is_complete(Depth)) {
          throw std::runtime_error("tree is full");
diff -crB ./src/zcash/IncrementalMerkleTree.hpp ../../komodo-jl777/src/zcash/IncrementalMerkleTree.hpp
*** ./src/zcash/IncrementalMerkleTree.hpp	2017-01-03 10:40:50.435340501 +0000
--- ../../komodo-jl777/src/zcash/IncrementalMerkleTree.hpp	2017-01-03 09:49:08.876507395 +0000
***************
*** 79,84 ****
--- 79,85 ----
      Hash root() const {
          return root(Depth, std::deque<Hash>());
      }
+     Hash last() const;
  
      IncrementalWitness<Depth, Hash> witness() const {
          return IncrementalWitness<Depth, Hash>(*this);
***************
*** 138,143 ****
--- 139,150 ----
          return tree.path(partial_path());
      }
  
+     // Return the element being witnessed (should be a note
+     // commitment!)
+     Hash element() const {
+         return tree.last();
+     }
+ 
      Hash root() const {
          return tree.root(Depth, partial_path());
      }
diff -crB ./src/zcash/JoinSplit.cpp ../../komodo-jl777/src/zcash/JoinSplit.cpp
*** ./src/zcash/JoinSplit.cpp	2017-01-03 10:40:50.435340501 +0000
--- ../../komodo-jl777/src/zcash/JoinSplit.cpp	2017-01-03 09:49:08.876507395 +0000
***************
*** 16,21 ****
--- 16,22 ----
  #include "libsnark/gadgetlib1/gadgets/merkle_tree/merkle_tree_check_read_gadget.hpp"
  
  #include "sync.h"
+ #include "amount.h"
  
  using namespace libsnark;
  
***************
*** 24,30 ****
  #include "zcash/circuit/gadget.tcc"
  
  CCriticalSection cs_ParamsIO;
! CCriticalSection cs_InitializeParams;
  
  template<typename T>
  void saveToFile(std::string path, T& obj) {
--- 25,31 ----
  #include "zcash/circuit/gadget.tcc"
  
  CCriticalSection cs_ParamsIO;
! CCriticalSection cs_LoadKeys;
  
  template<typename T>
  void saveToFile(std::string path, T& obj) {
***************
*** 70,91 ****
  
      boost::optional<r1cs_ppzksnark_proving_key<ppzksnark_ppT>> pk;
      boost::optional<r1cs_ppzksnark_verification_key<ppzksnark_ppT>> vk;
      boost::optional<std::string> pkPath;
  
      JoinSplitCircuit() {}
      ~JoinSplitCircuit() {}
  
-     static void initialize() {
-         LOCK(cs_InitializeParams);
- 
-         ppzksnark_ppT::init_public_params();
-     }
- 
      void setProvingKeyPath(std::string path) {
          pkPath = path;
      }
  
      void loadProvingKey() {
          if (!pk) {
              if (!pkPath) {
                  throw std::runtime_error("proving key path unknown");
--- 71,89 ----
  
      boost::optional<r1cs_ppzksnark_proving_key<ppzksnark_ppT>> pk;
      boost::optional<r1cs_ppzksnark_verification_key<ppzksnark_ppT>> vk;
+     boost::optional<r1cs_ppzksnark_processed_verification_key<ppzksnark_ppT>> vk_precomp;
      boost::optional<std::string> pkPath;
  
      JoinSplitCircuit() {}
      ~JoinSplitCircuit() {}
  
      void setProvingKeyPath(std::string path) {
          pkPath = path;
      }
  
      void loadProvingKey() {
+         LOCK(cs_LoadKeys);
+ 
          if (!pk) {
              if (!pkPath) {
                  throw std::runtime_error("proving key path unknown");
***************
*** 102,108 ****
--- 100,113 ----
          }
      }
      void loadVerifyingKey(std::string path) {
+         LOCK(cs_LoadKeys);
+ 
          loadFromFile(path, vk);
+ 
+         processVerifyingKey();
+     }
+     void processVerifyingKey() {
+         vk_precomp = r1cs_ppzksnark_verifier_process_vk(*vk);
      }
      void saveVerifyingKey(std::string path) {
          if (vk) {
***************
*** 111,132 ****
              throw std::runtime_error("cannot save verifying key; key doesn't exist");
          }
      }
  
!     void generate() {
          protoboard<FieldT> pb;
  
          joinsplit_gadget<FieldT, NumInputs, NumOutputs> g(pb);
          g.generate_r1cs_constraints();
  
!         const r1cs_constraint_system<FieldT> constraint_system = pb.get_constraint_system();
          r1cs_ppzksnark_keypair<ppzksnark_ppT> keypair = r1cs_ppzksnark_generator<ppzksnark_ppT>(constraint_system);
  
          pk = keypair.pk;
          vk = keypair.vk;
      }
  
      bool verify(
          const ZCProof& proof,
          const uint256& pubKeyHash,
          const uint256& randomSeed,
          const boost::array<uint256, NumInputs>& macs,
--- 116,150 ----
              throw std::runtime_error("cannot save verifying key; key doesn't exist");
          }
      }
+     void saveR1CS(std::string path) {
+         auto r1cs = generate_r1cs();
  
!         saveToFile(path, r1cs);
!     }
! 
!     r1cs_constraint_system<FieldT> generate_r1cs() {
          protoboard<FieldT> pb;
  
          joinsplit_gadget<FieldT, NumInputs, NumOutputs> g(pb);
          g.generate_r1cs_constraints();
  
!         return pb.get_constraint_system();
!     }
! 
!     void generate() {
!         LOCK(cs_LoadKeys);
! 
!         const r1cs_constraint_system<FieldT> constraint_system = generate_r1cs();
          r1cs_ppzksnark_keypair<ppzksnark_ppT> keypair = r1cs_ppzksnark_generator<ppzksnark_ppT>(constraint_system);
  
          pk = keypair.pk;
          vk = keypair.vk;
+         processVerifyingKey();
      }
  
      bool verify(
          const ZCProof& proof,
+         ProofVerifier& verifier,
          const uint256& pubKeyHash,
          const uint256& randomSeed,
          const boost::array<uint256, NumInputs>& macs,
***************
*** 136,142 ****
          uint64_t vpub_new,
          const uint256& rt
      ) {
!         if (!vk) {
              throw std::runtime_error("JoinSplit verifying key not loaded");
          }
  
--- 154,160 ----
          uint64_t vpub_new,
          const uint256& rt
      ) {
!         if (!vk || !vk_precomp) {
              throw std::runtime_error("JoinSplit verifying key not loaded");
          }
  
***************
*** 155,161 ****
                  vpub_new
              );
  
!             return r1cs_ppzksnark_verifier_strong_IC<ppzksnark_ppT>(*vk, witness, r1cs_proof);
          } catch (...) {
              return false;
          }
--- 173,184 ----
                  vpub_new
              );
  
!             return verifier.check(
!                 *vk,
!                 *vk_precomp,
!                 witness,
!                 r1cs_proof
!             );
          } catch (...) {
              return false;
          }
***************
*** 181,188 ****
              throw std::runtime_error("JoinSplit proving key not loaded");
          }
  
!         // Compute nullifiers of inputs
          for (size_t i = 0; i < NumInputs; i++) {
              out_nullifiers[i] = inputs[i].nullifier();
          }
  
--- 204,254 ----
              throw std::runtime_error("JoinSplit proving key not loaded");
          }
  
!         if (vpub_old > MAX_MONEY) {
!             throw std::invalid_argument("nonsensical vpub_old value");
!         }
! 
!         if (vpub_new > MAX_MONEY) {
!             throw std::invalid_argument("nonsensical vpub_new value");
!         }
! 
!         uint64_t lhs_value = vpub_old;
!         uint64_t rhs_value = vpub_new;
! 
          for (size_t i = 0; i < NumInputs; i++) {
+             // Sanity checks of input
+             {
+                 // If note has nonzero value
+                 if (inputs[i].note.value != 0) {
+                     // The witness root must equal the input root.
+                     if (inputs[i].witness.root() != rt) {
+                         throw std::invalid_argument("joinsplit not anchored to the correct root");
+                     }
+ 
+                     // The tree must witness the correct element
+                     if (inputs[i].note.cm() != inputs[i].witness.element()) {
+                         throw std::invalid_argument("witness of wrong element for joinsplit input");
+                     }
+                 }
+ 
+                 // Ensure we have the key to this note.
+                 if (inputs[i].note.a_pk != inputs[i].key.address().a_pk) {
+                     throw std::invalid_argument("input note not authorized to spend with given key");
+                 }
+ 
+                 // Balance must be sensical
+                 if (inputs[i].note.value > MAX_MONEY) {
+                     throw std::invalid_argument("nonsensical input note value");
+                 }
+ 
+                 lhs_value += inputs[i].note.value;
+ 
+                 if (lhs_value > MAX_MONEY) {
+                     throw std::invalid_argument("nonsensical left hand size of joinsplit balance");
+                 }
+             }
+ 
+             // Compute nullifier of input
              out_nullifiers[i] = inputs[i].nullifier();
          }
  
***************
*** 197,208 ****
--- 263,291 ----
  
          // Compute notes for outputs
          for (size_t i = 0; i < NumOutputs; i++) {
+             // Sanity checks of output
+             {
+                 if (outputs[i].value > MAX_MONEY) {
+                     throw std::invalid_argument("nonsensical output value");
+                 }
+ 
+                 rhs_value += outputs[i].value;
+ 
+                 if (rhs_value > MAX_MONEY) {
+                     throw std::invalid_argument("nonsensical right hand side of joinsplit balance");
+                 }
+             }
+ 
              // Sample r
              uint256 r = random_uint256();
  
              out_notes[i] = outputs[i].note(phi, r, i, h_sig);
          }
  
+         if (lhs_value != rhs_value) {
+             throw std::invalid_argument("invalid joinsplit balance");
+         }
+ 
          // Compute the output commitments
          for (size_t i = 0; i < NumOutputs; i++) {
              out_commitments[i] = out_notes[i].cm();
***************
*** 249,257 ****
              );
          }
  
!         if (!pb.is_satisfied()) {
!             throw std::invalid_argument("Constraint system not satisfied by inputs");
!         }
  
          // TODO: These are copies, which is not strictly necessary.
          std::vector<FieldT> primary_input = pb.primary_input();
--- 331,339 ----
              );
          }
  
!         // The constraint system must be satisfied or there is an unimplemented
!         // or incorrect sanity check above. Or the constraint system is broken!
!         assert(pb.is_satisfied());
  
          // TODO: These are copies, which is not strictly necessary.
          std::vector<FieldT> primary_input = pb.primary_input();
***************
*** 275,281 ****
  template<size_t NumInputs, size_t NumOutputs>
  JoinSplit<NumInputs, NumOutputs>* JoinSplit<NumInputs, NumOutputs>::Generate()
  {
!     JoinSplitCircuit<NumInputs, NumOutputs>::initialize();
      auto js = new JoinSplitCircuit<NumInputs, NumOutputs>();
      js->generate();
  
--- 357,363 ----
  template<size_t NumInputs, size_t NumOutputs>
  JoinSplit<NumInputs, NumOutputs>* JoinSplit<NumInputs, NumOutputs>::Generate()
  {
!     initialize_curve_params();
      auto js = new JoinSplitCircuit<NumInputs, NumOutputs>();
      js->generate();
  
***************
*** 285,291 ****
  template<size_t NumInputs, size_t NumOutputs>
  JoinSplit<NumInputs, NumOutputs>* JoinSplit<NumInputs, NumOutputs>::Unopened()
  {
!     JoinSplitCircuit<NumInputs, NumOutputs>::initialize();
      return new JoinSplitCircuit<NumInputs, NumOutputs>();
  }
  
--- 367,373 ----
  template<size_t NumInputs, size_t NumOutputs>
  JoinSplit<NumInputs, NumOutputs>* JoinSplit<NumInputs, NumOutputs>::Unopened()
  {
!     initialize_curve_params();
      return new JoinSplitCircuit<NumInputs, NumOutputs>();
  }
  
diff -crB ./src/zcash/JoinSplit.hpp ../../komodo-jl777/src/zcash/JoinSplit.hpp
*** ./src/zcash/JoinSplit.hpp	2017-01-03 10:40:50.435340501 +0000
--- ../../komodo-jl777/src/zcash/JoinSplit.hpp	2017-01-03 09:49:08.876507395 +0000
***************
*** 62,67 ****
--- 62,68 ----
      virtual void saveProvingKey(std::string path) = 0;
      virtual void loadVerifyingKey(std::string path) = 0;
      virtual void saveVerifyingKey(std::string path) = 0;
+     virtual void saveR1CS(std::string path) = 0;
  
      virtual ZCProof prove(
          const boost::array<JSInput, NumInputs>& inputs,
***************
*** 82,87 ****
--- 83,89 ----
  
      virtual bool verify(
          const ZCProof& proof,
+         ProofVerifier& verifier,
          const uint256& pubKeyHash,
          const uint256& randomSeed,
          const boost::array<uint256, NumInputs>& hmacs,
diff -crB ./src/zcash/Proof.cpp ../../komodo-jl777/src/zcash/Proof.cpp
*** ./src/zcash/Proof.cpp	2017-01-03 10:40:50.435340501 +0000
--- ../../komodo-jl777/src/zcash/Proof.cpp	2017-01-03 09:49:08.876507395 +0000
***************
*** 1,6 ****
--- 1,7 ----
  #include "Proof.hpp"
  
  #include <boost/static_assert.hpp>
+ #include <mutex>
  
  #include "crypto/common.h"
  #include "libsnark/common/default_types/r1cs_ppzksnark_pp.hpp"
***************
*** 211,214 ****
--- 212,247 ----
      return p;
  }
  
+ std::once_flag init_public_params_once_flag;
+ 
+ void initialize_curve_params()
+ {
+     std::call_once (init_public_params_once_flag, curve_pp::init_public_params);
+ }
+ 
+ ProofVerifier ProofVerifier::Strict() {
+     initialize_curve_params();
+     return ProofVerifier(true);
+ }
+ 
+ ProofVerifier ProofVerifier::Disabled() {
+     initialize_curve_params();
+     return ProofVerifier(false);
+ }
+ 
+ template<>
+ bool ProofVerifier::check(
+     const r1cs_ppzksnark_verification_key<curve_pp>& vk,
+     const r1cs_ppzksnark_processed_verification_key<curve_pp>& pvk,
+     const r1cs_primary_input<curve_Fr>& primary_input,
+     const r1cs_ppzksnark_proof<curve_pp>& proof
+ )
+ {
+     if (perform_verification) {
+         return r1cs_ppzksnark_online_verifier_strong_IC<curve_pp>(pvk, primary_input, proof);
+     } else {
+         return true;
+     }
+ }
+ 
  }
diff -crB ./src/zcash/Proof.hpp ../../komodo-jl777/src/zcash/Proof.hpp
*** ./src/zcash/Proof.hpp	2017-01-03 10:40:50.435340501 +0000
--- ../../komodo-jl777/src/zcash/Proof.hpp	2017-01-03 09:49:08.876507395 +0000
***************
*** 235,240 ****
--- 235,276 ----
      }
  };
  
+ void initialize_curve_params();
+ 
+ class ProofVerifier {
+ private:
+     bool perform_verification;
+ 
+     ProofVerifier(bool perform_verification) : perform_verification(perform_verification) { }
+ 
+ public:
+     // ProofVerifier should never be copied
+     ProofVerifier(const ProofVerifier&) = delete;
+     ProofVerifier& operator=(const ProofVerifier&) = delete;
+     ProofVerifier(ProofVerifier&&);
+     ProofVerifier& operator=(ProofVerifier&&);
+ 
+     // Creates a verification context that strictly verifies
+     // all proofs using libsnark's API.
+     static ProofVerifier Strict();
+ 
+     // Creates a verification context that performs no
+     // verification, used when avoiding duplicate effort
+     // such as during reindexing.
+     static ProofVerifier Disabled();
+ 
+     template <typename VerificationKey,
+               typename ProcessedVerificationKey,
+               typename PrimaryInput,
+               typename Proof
+               >
+     bool check(
+         const VerificationKey& vk,
+         const ProcessedVerificationKey& pvk,
+         const PrimaryInput& pi,
+         const Proof& p
+     );
+ };
  
  }
  
diff -crB ./src/zcbenchmarks.cpp ../../komodo-jl777/src/zcbenchmarks.cpp
*** ./src/zcbenchmarks.cpp	2017-01-03 10:40:50.435340501 +0000
--- ../../komodo-jl777/src/zcbenchmarks.cpp	2017-01-03 09:49:08.876507395 +0000
***************
*** 17,22 ****
--- 17,23 ----
  #include "script/sign.h"
  #include "sodium.h"
  #include "streams.h"
+ #include "utiltest.h"
  #include "wallet/wallet.h"
  
  #include "zcbenchmarks.h"
***************
*** 89,95 ****
                           0);
      double ret = timer_stop(tv_start);
  
!     assert(jsdesc.Verify(*pzcashParams, pubKeyHash));
      return ret;
  }
  
--- 90,97 ----
                           0);
      double ret = timer_stop(tv_start);
  
!     auto verifier = libzcash::ProofVerifier::Strict();
!     assert(jsdesc.Verify(*pzcashParams, verifier, pubKeyHash));
      return ret;
  }
  
***************
*** 98,104 ****
      struct timeval tv_start;
      timer_start(tv_start);
      uint256 pubKeyHash;
!     joinsplit.Verify(*pzcashParams, pubKeyHash);
      return timer_stop(tv_start);
  }
  
--- 100,107 ----
      struct timeval tv_start;
      timer_start(tv_start);
      uint256 pubKeyHash;
!     auto verifier = libzcash::ProofVerifier::Strict();
!     joinsplit.Verify(*pzcashParams, verifier, pubKeyHash);
      return timer_stop(tv_start);
  }
  
***************
*** 223,225 ****
--- 226,301 ----
      return timer_stop(tv_start);
  }
  
+ double benchmark_try_decrypt_notes(size_t nAddrs)
+ {
+     CWallet wallet;
+     for (int i = 0; i < nAddrs; i++) {
+         auto sk = libzcash::SpendingKey::random();
+         wallet.AddSpendingKey(sk);
+     }
+ 
+     auto sk = libzcash::SpendingKey::random();
+     auto tx = GetValidReceive(*pzcashParams, sk, 10, true);
+ 
+     struct timeval tv_start;
+     timer_start(tv_start);
+     auto nd = wallet.FindMyNotes(tx);
+     return timer_stop(tv_start);
+ }
+ 
+ double benchmark_increment_note_witnesses(size_t nTxs)
+ {
+     CWallet wallet;
+     ZCIncrementalMerkleTree tree;
+ 
+     auto sk = libzcash::SpendingKey::random();
+     wallet.AddSpendingKey(sk);
+ 
+     // First block
+     CBlock block1;
+     for (int i = 0; i < nTxs; i++) {
+         auto wtx = GetValidReceive(*pzcashParams, sk, 10, true);
+         auto note = GetNote(*pzcashParams, sk, wtx, 0, 1);
+         auto nullifier = note.nullifier(sk);
+ 
+         mapNoteData_t noteData;
+         JSOutPoint jsoutpt {wtx.GetHash(), 0, 1};
+         CNoteData nd {sk.address(), nullifier};
+         noteData[jsoutpt] = nd;
+ 
+         wtx.SetNoteData(noteData);
+         wallet.AddToWallet(wtx, true, NULL);
+         block1.vtx.push_back(wtx);
+     }
+     CBlockIndex index1(block1);
+     index1.nHeight = 1;
+ 
+     // Increment to get transactions witnessed
+     wallet.ChainTip(&index1, &block1, tree, true);
+ 
+     // Second block
+     CBlock block2;
+     block2.hashPrevBlock = block1.GetHash();
+     {
+         auto wtx = GetValidReceive(*pzcashParams, sk, 10, true);
+         auto note = GetNote(*pzcashParams, sk, wtx, 0, 1);
+         auto nullifier = note.nullifier(sk);
+ 
+         mapNoteData_t noteData;
+         JSOutPoint jsoutpt {wtx.GetHash(), 0, 1};
+         CNoteData nd {sk.address(), nullifier};
+         noteData[jsoutpt] = nd;
+ 
+         wtx.SetNoteData(noteData);
+         wallet.AddToWallet(wtx, true, NULL);
+         block2.vtx.push_back(wtx);
+     }
+     CBlockIndex index2(block2);
+     index2.nHeight = 2;
+ 
+     struct timeval tv_start;
+     timer_start(tv_start);
+     wallet.ChainTip(&index2, &block2, tree, true);
+     return timer_stop(tv_start);
+ }
+ 
diff -crB ./src/zcbenchmarks.h ../../komodo-jl777/src/zcbenchmarks.h
*** ./src/zcbenchmarks.h	2017-01-03 10:40:50.435340501 +0000
--- ../../komodo-jl777/src/zcbenchmarks.h	2017-01-03 09:49:08.876507395 +0000
***************
*** 12,16 ****
--- 12,18 ----
  extern double benchmark_verify_joinsplit(const JSDescription &joinsplit);
  extern double benchmark_verify_equihash();
  extern double benchmark_large_tx();
+ extern double benchmark_try_decrypt_notes(size_t nAddrs);
+ extern double benchmark_increment_note_witnesses(size_t nTxs);
  
  #endif
diff -crB ./zcutil/build-debian-package.sh ../../komodo-jl777/zcutil/build-debian-package.sh
*** ./zcutil/build-debian-package.sh	2017-01-03 10:40:50.435340501 +0000
--- ../../komodo-jl777/zcutil/build-debian-package.sh	2017-01-03 09:49:08.876507395 +0000
***************
*** 23,32 ****
      rm -R $BUILD_DIR
  fi
  
  DEB_BIN=$BUILD_DIR/usr/bin
  DEB_DOC=$BUILD_DIR/usr/share/doc/$PACKAGE_NAME
  DEB_MAN=$BUILD_DIR/usr/share/man/man1
! mkdir -p $BUILD_DIR/DEBIAN $DEB_BIN $DEB_DOC $DEB_MAN
  chmod 0755 -R $BUILD_DIR/*
  
  # Copy control file
--- 23,33 ----
      rm -R $BUILD_DIR
  fi
  
+ DEB_CMP=$BUILD_DIR/etc/bash_completion.d
  DEB_BIN=$BUILD_DIR/usr/bin
  DEB_DOC=$BUILD_DIR/usr/share/doc/$PACKAGE_NAME
  DEB_MAN=$BUILD_DIR/usr/share/man/man1
! mkdir -p $BUILD_DIR/DEBIAN $DEB_CMP $DEB_BIN $DEB_DOC $DEB_MAN
  chmod 0755 -R $BUILD_DIR/*
  
  # Copy control file
***************
*** 48,53 ****
--- 49,57 ----
  # Copy manpages
  cp $SRC_DEB/manpages/zcashd.1 $DEB_MAN
  cp $SRC_DEB/manpages/zcash-cli.1 $DEB_MAN
+ # Copy bash completion files
+ cp $SRC_PATH/contrib/bitcoind.bash-completion $DEB_CMP/zcashd
+ cp $SRC_PATH/contrib/bitcoin-cli.bash-completion $DEB_CMP/zcash-cli
  # Gzip files
  gzip --best -n $DEB_DOC/changelog
  gzip --best -n $DEB_DOC/changelog.Debian
diff -crB ./zcutil/build.sh ../../komodo-jl777/zcutil/build.sh
*** ./zcutil/build.sh	2017-01-03 10:40:50.435340501 +0000
--- ../../komodo-jl777/zcutil/build.sh	2017-01-03 09:49:08.876507395 +0000
***************
*** 1,7 ****
! #!/bin/bash
  
  set -eu -o pipefail
  
  if [ "x$*" = 'x--help' ]
  then
      cat <<EOF
--- 1,30 ----
! #!/usr/bin/env bash
  
  set -eu -o pipefail
  
+ # Allow user overrides to $MAKE. Typical usage for users who need it:
+ #   MAKE=gmake ./zcutil/build.sh -j$(nproc)
+ if [[ -z "${MAKE-}" ]]; then
+     MAKE=make
+ fi
+ 
+ # Allow overrides to $BUILD and $HOST for porters. Most users will not need it.
+ #   BUILD=i686-pc-linux-gnu ./zcutil/build.sh
+ if [[ -z "${BUILD-}" ]]; then
+     BUILD=x86_64-unknown-linux-gnu
+ fi
+ if [[ -z "${HOST-}" ]]; then
+     HOST=x86_64-unknown-linux-gnu
+ fi
+ 
+ # Allow override to $CC and $CXX for porters. Most users will not need it.
+ if [[ -z "${CC-}" ]]; then
+     CC=gcc
+ fi
+ if [[ -z "${CXX-}" ]]; then
+     CXX=g++
+ fi
+ 
  if [ "x$*" = 'x--help' ]
  then
      cat <<EOF
***************
*** 10,20 ****
  $0 --help
    Show this help message and exit.
  
! $0 [ --enable-lcov ] [ MAKEARGS... ]
    Build Zcash and most of its transitive dependencies from
!   source. MAKEARGS are applied to both dependencies and Zcash itself. If
!   --enable-lcov is passed, Zcash is configured to add coverage
    instrumentation, thus enabling "make cov" to work.
  EOF
      exit 0
  fi
--- 33,45 ----
  $0 --help
    Show this help message and exit.
  
! $0 [ --enable-lcov || --disable-tests ] [ MAKEARGS... ]
    Build Zcash and most of its transitive dependencies from
!   source. MAKEARGS are applied to both dependencies and Zcash itself.
! 
!   If --enable-lcov is passed, Zcash is configured to add coverage
    instrumentation, thus enabling "make cov" to work.
+   If --disable-tests is passed instead, the Zcash tests are not built.
  EOF
      exit 0
  fi
***************
*** 25,41 ****
  # If --enable-lcov is the first argument, enable lcov coverage support:
  LCOV_ARG=''
  HARDENING_ARG='--enable-hardening'
  if [ "x${1:-}" = 'x--enable-lcov' ]
  then
      LCOV_ARG='--enable-lcov'
      HARDENING_ARG='--disable-hardening'
      shift
  fi
  
! # BUG: parameterize the platform/host directory:
! PREFIX="$(pwd)/depends/x86_64-unknown-linux-gnu/"
  
! HOST=x86_64-unknown-linux-gnu BUILD=x86_64-unknown-linux-gnu make "$@" -C ./depends/ V=1 NO_QT=1
  ./autogen.sh
! ./configure --prefix="${PREFIX}" --host=x86_64-unknown-linux-gnu --build=x86_64-unknown-linux-gnu --with-gui=no "$HARDENING_ARG" "$LCOV_ARG" CXXFLAGS='-fwrapv -fno-strict-aliasing -Werror -g'
! make "$@" V=1
--- 50,70 ----
  # If --enable-lcov is the first argument, enable lcov coverage support:
  LCOV_ARG=''
  HARDENING_ARG='--enable-hardening'
+ TEST_ARG=''
  if [ "x${1:-}" = 'x--enable-lcov' ]
  then
      LCOV_ARG='--enable-lcov'
      HARDENING_ARG='--disable-hardening'
      shift
+ elif [ "x${1:-}" = 'x--disable-tests' ]
+ then
+     TEST_ARG='--enable-tests=no'
+     shift
  fi
  
! PREFIX="$(pwd)/depends/$BUILD/"
  
! HOST="$HOST" BUILD="$BUILD" "$MAKE" "$@" -C ./depends/ V=1 NO_QT=1
  ./autogen.sh
! CC="$CC" CXX="$CXX" ./configure --prefix="${PREFIX}" --host="$HOST" --build="$BUILD" --with-gui=no "$HARDENING_ARG" "$LCOV_ARG" "$TEST_ARG" CXXFLAGS='-fwrapv -fno-strict-aliasing -Werror -g'
! "$MAKE" "$@" V=1
diff -crB ./zcutil/docker-entrypoint.sh ../../komodo-jl777/zcutil/docker-entrypoint.sh
*** ./zcutil/docker-entrypoint.sh	2017-01-03 10:40:50.435340501 +0000
--- ../../komodo-jl777/zcutil/docker-entrypoint.sh	2017-01-03 09:49:08.876507395 +0000
***************
*** 14,25 ****
  txindex=1
  bind=${listenip:-127.0.0.1}
  rpcbind=${listenip:-127.0.0.1}
- addnode=5.9.102.210
- addnode=78.47.196.146
- addnode=178.63.69.164
- addnode=88.198.65.74
- addnode=5.9.122.241
- addnode=144.76.94.38
  EOF
  
      cat $HOME/.komodo/komodo.conf
--- 14,19 ----
***************
*** 27,35 ****
  
  echo "...Checking fetch-params"
  $HOME/zcutil/fetch-params.sh
- 
  echo "Initialization completed successfully"
  echo
  if [ $# -gt 0 ]; then
  
      args=("$@")
--- 21,30 ----
  
  echo "...Checking fetch-params"
  $HOME/zcutil/fetch-params.sh
  echo "Initialization completed successfully"
  echo
+ 
+ # ToDo: Needs some rework. I was sick
  if [ $# -gt 0 ]; then
  
      args=("$@")
diff -crB ./zcutil/docker-komodo-cli.sh ../../komodo-jl777/zcutil/docker-komodo-cli.sh
*** ./zcutil/docker-komodo-cli.sh	2017-01-03 10:40:50.435340501 +0000
--- ../../komodo-jl777/zcutil/docker-komodo-cli.sh	2017-01-03 09:49:08.876507395 +0000
***************
*** 1,11 ****
  #!/bin/bash
- if [  -z ${assetchain+x} ]; then
  
!     /komodo/src/komodo-cli $1 $2 $3 $4
  
! else
! 
!     /komodo/src/komodo-cli -ac_name=$assetchain $1 $2 $3 $4
! 
! fi
  
--- 1,6 ----
  #!/bin/bash
  
! # ToDo: check for docker arg ac_name
  
! /komodo/src/komodo-cli $1 $2 $3 $4
  
diff -crB ./zcutil/fetch-params.sh ../../komodo-jl777/zcutil/fetch-params.sh
*** ./zcutil/fetch-params.sh	2017-01-03 10:40:50.435340501 +0000
--- ../../komodo-jl777/zcutil/fetch-params.sh	2017-01-03 09:49:08.876507395 +0000
***************
*** 67,72 ****
--- 67,76 ----
      cat <<EOF
  Zcash - fetch-params.sh
  
+ This script will fetch the Zcash zkSNARK parameters and verify their
+ integrity with sha256sum.
+ 
+ If they already exist locally, it will exit now and do nothing else.
  EOF
  
      # Now create PARAMS_DIR and insert a README if necessary:
***************
*** 84,92 ****
          # This may be the first time the user's run this script, so give
          # them some info, especially about bandwidth usage:
          cat <<EOF
- This script will fetch the Zcash zkSNARK parameters and verify their
- integrity with sha256sum.
- 
  The parameters are currently just under 911MB in size, so plan accordingly
  for your bandwidth constraints. If the files are already present and
  have the correct sha256sum, no networking is used.
--- 88,93 ----
***************
*** 104,107 ****
--- 105,109 ----
  }
  
  main
+ rm -f /tmp/fetch_params.lock
  exit 0
Only in ../../komodo-jl777/zcutil: release-notes.py
